@turmind/halo 1.4.5 → 1.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/admin-out/404.html +1 -1
- package/admin-out/index.html +1 -1
- package/admin-out/index.txt +1 -1
- package/bundled-docs/design/session.md +2 -2
- package/bundled-docs/dev/add-model-provider.md +1 -0
- package/dist/index.js +231 -9
- package/package.json +1 -1
- package/templates/models/zhipu.yaml +115 -0
- /package/admin-out/_next/static/{jXC1swwQxpx7Zpri-5CwJ → qYSILjqBjfgTggO0T8E7T}/_buildManifest.js +0 -0
- /package/admin-out/_next/static/{jXC1swwQxpx7Zpri-5CwJ → qYSILjqBjfgTggO0T8E7T}/_ssgManifest.js +0 -0
package/README.md
CHANGED
|
@@ -142,6 +142,7 @@ Configured per-agent through one provider-agnostic runtime. AWS Bedrock Claude i
|
|
|
142
142
|
| Qwen (Aliyun) | |
|
|
143
143
|
| Hunyuan (Tencent) | |
|
|
144
144
|
| Doubao (Volcengine) | |
|
|
145
|
+
| Zhipu AI (GLM) | GLM-5.3 family; vision on the Flash models |
|
|
145
146
|
|
|
146
147
|

|
|
147
148
|
|
package/admin-out/404.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--qYSILjqBjfgTggO0T8E7T--><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/c0ea31cd787f7aa7.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-ca926228f8cba1ff.js"/><script src="/_next/static/chunks/1b86ba38-c29611e086b2ce25.js" async=""></script><script src="/_next/static/chunks/698-19872069fed27164.js" async=""></script><script src="/_next/static/chunks/main-app-340a5b58ed229c4d.js" async=""></script><script src="/_next/static/chunks/989-6a0ec35b8ae2cb39.js" async=""></script><script src="/_next/static/chunks/app/layout-5ec6c5f713a8562b.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>Halo - Multi-Agent Workspace</title><meta name="description" content="Multi-agent collaboration workspace for complex project delivery"/><link rel="icon" href="/favicon.ico" type="image/x-icon" sizes="16x16"/><link rel="icon" href="/icon.svg?3a6863548daca964" type="image/svg+xml" sizes="any"/><script>try{var t=localStorage.getItem('halo_theme');if(t==='light'||t==='midnight'||t==='warm')document.documentElement.dataset.theme=t}catch(e){}</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_f367f3 font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-ca926228f8cba1ff.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[58321,[\"989\",\"static/chunks/989-6a0ec35b8ae2cb39.js\",\"177\",\"static/chunks/app/layout-5ec6c5f713a8562b.js\"],\"ThemeProvider\"]\n3:I[24554,[\"989\",\"static/chunks/989-6a0ec35b8ae2cb39.js\",\"177\",\"static/chunks/app/layout-5ec6c5f713a8562b.js\"],\"AppI18nProvider\"]\n4:I[63693,[],\"\"]\n5:I[74713,[],\"\"]\n6:I[23632,[],\"OutletBoundary\"]\n8:I[86889,[],\"AsyncMetadataOutlet\"]\na:I[23632,[],\"ViewportBoundary\"]\nc:I[23632,[],\"MetadataBoundary\"]\nd:\"$Sreact.suspense\"\nf:I[1935,[],\"\"]\n:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/c0ea31cd787f7aa7.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"qYSILjqBjfgTggO0T8E7T\",\"p\":\"\",\"c\":[\"\",\"_not-found\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/c0ea31cd787f7aa7.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"try{var t=localStorage.getItem('halo_theme');if(t==='light'||t==='midnight'||t==='warm')document.documentElement.dataset.theme=t}catch(e){}\"}}]}],[\"$\",\"body\",null,{\"className\":\"__variable_f367f3 font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$L7\",[\"$\",\"$L8\",null,{\"promise\":\"$@9\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$d\",null,{\"fallback\":null,\"children\":\"$Le\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n7:null\n"])</script><script>self.__next_f.push([1,"10:I[88809,[],\"IconMark\"]\n9:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Halo - Multi-Agent Workspace\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Multi-agent collaboration workspace for complex project delivery\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"type\":\"image/x-icon\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/icon.svg?3a6863548daca964\",\"type\":\"image/svg+xml\",\"sizes\":\"any\"}],[\"$\",\"$L10\",\"4\",{}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"e:\"$9:metadata\"\n"])</script></body></html>
|
package/admin-out/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--qYSILjqBjfgTggO0T8E7T--><html lang="en" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/c0ea31cd787f7aa7.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/659eccb5db697b76.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-ca926228f8cba1ff.js"/><script src="/_next/static/chunks/1b86ba38-c29611e086b2ce25.js" async=""></script><script src="/_next/static/chunks/698-19872069fed27164.js" async=""></script><script src="/_next/static/chunks/main-app-340a5b58ed229c4d.js" async=""></script><script src="/_next/static/chunks/989-6a0ec35b8ae2cb39.js" async=""></script><script src="/_next/static/chunks/app/layout-5ec6c5f713a8562b.js" async=""></script><script src="/_next/static/chunks/1d2d5650-d8d130c85727fdbb.js" async=""></script><script src="/_next/static/chunks/23-092ac3901411582e.js" async=""></script><script src="/_next/static/chunks/app/page-bf9c0b21ae431c92.js" async=""></script><meta name="next-size-adjust" content=""/><title>Halo - Multi-Agent Workspace</title><meta name="description" content="Multi-agent collaboration workspace for complex project delivery"/><link rel="icon" href="/favicon.ico" type="image/x-icon" sizes="16x16"/><link rel="icon" href="/icon.svg?3a6863548daca964" type="image/svg+xml" sizes="any"/><script>try{var t=localStorage.getItem('halo_theme');if(t==='light'||t==='midnight'||t==='warm')document.documentElement.dataset.theme=t}catch(e){}</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_f367f3 font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><div class="flex h-screen w-screen items-center justify-center bg-[var(--background)]"><div class="text-sm text-[var(--muted-foreground)]">Loading...</div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-ca926228f8cba1ff.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[58321,[\"989\",\"static/chunks/989-6a0ec35b8ae2cb39.js\",\"177\",\"static/chunks/app/layout-5ec6c5f713a8562b.js\"],\"ThemeProvider\"]\n3:I[24554,[\"989\",\"static/chunks/989-6a0ec35b8ae2cb39.js\",\"177\",\"static/chunks/app/layout-5ec6c5f713a8562b.js\"],\"AppI18nProvider\"]\n4:I[63693,[],\"\"]\n5:I[74713,[],\"\"]\n6:I[5444,[],\"ClientPageRoot\"]\n7:I[18100,[\"560\",\"static/chunks/1d2d5650-d8d130c85727fdbb.js\",\"23\",\"static/chunks/23-092ac3901411582e.js\",\"989\",\"static/chunks/989-6a0ec35b8ae2cb39.js\",\"974\",\"static/chunks/app/page-bf9c0b21ae431c92.js\"],\"default\"]\na:I[23632,[],\"OutletBoundary\"]\nc:I[86889,[],\"AsyncMetadataOutlet\"]\ne:I[23632,[],\"ViewportBoundary\"]\n10:I[23632,[],\"MetadataBoundary\"]\n11:\"$Sreact.suspense\"\n13:I[1935,[],\"\"]\n:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/c0ea31cd787f7aa7.css\",\"style\"]\n:HL[\"/_next/static/css/659eccb5db697b76.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"qYSILjqBjfgTggO0T8E7T\",\"p\":\"\",\"c\":[\"\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/c0ea31cd787f7aa7.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"dark\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"try{var t=localStorage.getItem('halo_theme');if(t==='light'||t==='midnight'||t==='warm')document.documentElement.dataset.theme=t}catch(e){}\"}}]}],[\"$\",\"body\",null,{\"className\":\"__variable_f367f3 font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]]}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L6\",null,{\"Component\":\"$7\",\"searchParams\":{},\"params\":{},\"promises\":[\"$@8\",\"$@9\"]}],[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/659eccb5db697b76.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"$La\",null,{\"children\":[\"$Lb\",[\"$\",\"$Lc\",null,{\"promise\":\"$@d\"}]]}]]}],{},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$Le\",null,{\"children\":\"$Lf\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$L10\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$11\",null,{\"fallback\":null,\"children\":\"$L12\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$13\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:{}\n9:\"$0:f:0:1:2:children:1:props:children:0:props:params\"\n"])</script><script>self.__next_f.push([1,"f:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\nb:null\n"])</script><script>self.__next_f.push([1,"14:I[88809,[],\"IconMark\"]\nd:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Halo - Multi-Agent Workspace\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Multi-agent collaboration workspace for complex project delivery\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"type\":\"image/x-icon\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/icon.svg?3a6863548daca964\",\"type\":\"image/svg+xml\",\"sizes\":\"any\"}],[\"$\",\"$L14\",\"4\",{}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"12:\"$d:metadata\"\n"])</script></body></html>
|
package/admin-out/index.txt
CHANGED
|
@@ -14,7 +14,7 @@ e:I[23632,[],"ViewportBoundary"]
|
|
|
14
14
|
:HL["/_next/static/media/e4af272ccee01ff0-s.p.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
|
|
15
15
|
:HL["/_next/static/css/c0ea31cd787f7aa7.css","style"]
|
|
16
16
|
:HL["/_next/static/css/659eccb5db697b76.css","style"]
|
|
17
|
-
0:{"P":null,"b":"
|
|
17
|
+
0:{"P":null,"b":"qYSILjqBjfgTggO0T8E7T","p":"","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/c0ea31cd787f7aa7.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"dark","suppressHydrationWarning":true,"children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"try{var t=localStorage.getItem('halo_theme');if(t==='light'||t==='midnight'||t==='warm')document.documentElement.dataset.theme=t}catch(e){}"}}]}],["$","body",null,{"className":"__variable_f367f3 font-sans antialiased","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L6",null,{"Component":"$7","searchParams":{},"params":{},"promises":["$@8","$@9"]}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/659eccb5db697b76.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","$La",null,{"children":["$Lb",["$","$Lc",null,{"promise":"$@d"}]]}]]}],{},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Le",null,{"children":"$Lf"}],["$","meta",null,{"name":"next-size-adjust","content":""}]],["$","$L10",null,{"children":["$","div",null,{"hidden":true,"children":["$","$11",null,{"fallback":null,"children":"$L12"}]}]}]]}],false]],"m":"$undefined","G":["$13",[]],"s":false,"S":true}
|
|
18
18
|
8:{}
|
|
19
19
|
9:"$0:f:0:1:2:children:1:props:children:0:props:params"
|
|
20
20
|
f:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
@@ -301,7 +301,7 @@ A `toolUseId`-based algorithm that repairs message arrays damaged by abort / int
|
|
|
301
301
|
|
|
302
302
|
**Partial batches land, only the cut tool is synthesized** (`agent-loop.ts`, the tool loop's `try/finally`): in a parallel `tool_use` batch the loop pushes the accumulated `tool_result` user message in a `finally`, so both interrupt exits — the loop's own cancel check (soft interrupt: the consumer aborts after a `tool_result`, the next tool sees the signal) and the consumer breaking its `for await` (hard interrupt: finishes the generator at the `yield` via `.return()`) — still land the results that finished. Before this, either exit skipped the push, so every completed result was lost and repair marked the **whole** batch `[interrupted]`; the model then re-ran work that had already happened, which for side-effecting calls (commit, append, send) is a double execution — and `continue_task`'s "re-issue interrupted calls" instruction made that hazard live. The tool the abort landed on is dropped on purpose (its result is a killed shell's partial output), so repair pairs exactly that id — and any never-started ones — with the do-not-retry marker.
|
|
303
303
|
|
|
304
|
-
**Provider-side consumers**: the OpenAI-style agents (DeepSeek / Kimi / Doubao / Hunyuan / Mantle / generic OpenAI) convert a user turn's `tool_result` blocks into tool-role messages — any non-`tool_result` content coalesced into the same turn (e.g. the synthesized result landing alongside real user text, or a stop-fold) is emitted as a following user message rather than silently dropped.
|
|
304
|
+
**Provider-side consumers**: the OpenAI-style agents (DeepSeek / Kimi / Doubao / Hunyuan / Zhipu / Mantle / generic OpenAI) convert a user turn's `tool_result` blocks into tool-role messages — any non-`tool_result` content coalesced into the same turn (e.g. the synthesized result landing alongside real user text, or a stop-fold) is emitted as a following user message rather than silently dropped.
|
|
305
305
|
|
|
306
306
|
### UI-side interrupt marker (`markPendingToolCallsInterrupted`)
|
|
307
307
|
|
|
@@ -382,7 +382,7 @@ The transient-5xx branch is the one that all providers share, and getting the **
|
|
|
382
382
|
**httpStatus extraction — three-step fallback** (top of the `catch` block):
|
|
383
383
|
|
|
384
384
|
1. **AWS SDK structured field** — `err.$metadata.httpStatusCode`. Present on every Bedrock error.
|
|
385
|
-
2. **Regex parse of the message string** — for the
|
|
385
|
+
2. **Regex parse of the message string** — for the ten fetch-based providers (anthropic / openai / deepseek / doubao / hunyuan / kimi / minimax / qwen / zhipu / mantle), which throw plain string `Error`s with the status embedded. The patterns cover `API error <NNN>`, `] <NNN>`, and `status=<NNN>`.
|
|
386
386
|
3. **`undefined`** — neither source yielded a status; the error falls through to the keyword/name-based branches instead.
|
|
387
387
|
|
|
388
388
|
**Retry decision** — a failure is treated as a transient server-side error (→ retry with backoff) when **either**:
|
|
@@ -25,6 +25,7 @@ Total effort: typically a few hours depending on how weird the upstream API is a
|
|
|
25
25
|
| `qwen` | `QwenAgent` | `qwen-agent.ts` | Aliyun Bailian Anthropic-compatible API, thinking enable/disable both honored, prompt caching (5m only), vision on Plus, max no vision |
|
|
26
26
|
| `hunyuan` | `HunyuanAgent` | `hunyuan-agent.ts` | Tencent Hy3 preview via OpenAI-compatible (tokenhub.tencentmaas.com), reasoning_effort low/high (no_think = omit), automatic prompt caching (cached_tokens), no vision |
|
|
27
27
|
| `doubao` | `DoubaoAgent` | `doubao-agent.ts` | ByteDance Doubao Seed-2.0 (pro/lite/mini/code) on Volcengine Ark, OpenAI-compatible + `thinking:{type:'enabled'/'disabled'}` (no `auto`), automatic prompt caching, no vision |
|
|
28
|
+
| `zhipu` | `ZhipuAgent` | `zhipu-agent.ts` | Zhipu GLM-5.x on open.bigmodel.cn, OpenAI-compatible. Output cap via `max_tokens` only (`max_completion_tokens` is silently ignored). Thinking branched on modelId: **glm-5.3\*** always thinks — always sends `thinking:{type:'enabled',clear_thinking:false}`, `reasoning_effort` only when low/high/max (`disabled` / other efforts 400); other ids (glm-5.2) honour `thinking:{type:'disabled'}`. Vision per model: `glm-5.3-flash` / `glm-5.3-flashx` see `image_url` data URLs; `glm-5.3` / `glm-5.2` are text-only and 400 on any image part (code 1210, classified `multimodal_4xx` so leftover history images degrade). Automatic caching, `prompt_tokens_details.cached_tokens` (included in `prompt_tokens`, subtracted). |
|
|
28
29
|
| `openai` | `OpenAIAgent` | `openai-agent.ts` | **Generic OpenAI-compatible**. Use for native OpenAI or any third-party OpenAI gateway (incl. Ollama / llama.cpp). User fills endpoint + model id; capabilities openly editable in the form. Forgiving about cache field names (`prompt_tokens_details.cached_tokens`, `prompt_cache_hit_tokens`, `cache_read_tokens` all read) and reasoning field names (`reasoning_content` for OpenAI o-series/DeepSeek, `reasoning` for Ollama/llama.cpp). |
|
|
29
30
|
| `anthropic` | `AnthropicAgent` | `anthropic-agent.ts` | **Generic Anthropic Messages**. Use for api.anthropic.com or any Anthropic-compatible gateway. User fills endpoint + model id. Standard `cache_control: ephemeral` with optional `ttl: '1h'`. |
|
|
30
31
|
| `mimo-token-plan-china` | `AnthropicAgent` | (reuses `anthropic-agent.ts`) | Xiaomi MiMo (UI name "Xiaomi MiMo"; the id keeps its historical name so existing configs don't break) — Anthropic-compatible gateway; no dedicated class, just a default endpoint in `model-runtime.ts` (`token-plan-cn.xiaomimimo.com/anthropic`). The key type picks the endpoint: Token Plan `tp-`/`ttp-` keys only work on `token-plan-{cn,sgp,ams}.xiaomimimo.com/anthropic`, pay-as-you-go `sk-` keys only on `api.xiaomimimo.com/anthropic` — all four ship as `endpointPresets` (pay-as-you-go live-probed 2026-09-24; sgp / ams from the docs only). V2.6 (`mimo-v2.6-pro` / `-flash`, both vision, 1M / 131072) is current; `mimo-v2.5(-pro)` kept in the template until the official 2026-10-21 deprecation, then drop |
|
package/dist/index.js
CHANGED
|
@@ -1414,7 +1414,7 @@ function classifyKind(msg, errName, httpStatus) {
|
|
|
1414
1414
|
if (msg.includes("reading 'role'") || msg.includes("reading 'content'") || msg.includes("failed to add message") || msg.includes("tool_use ids were found without tool_result") || msg.includes("unexpected `tool_use_id` found in `tool_result`")) {
|
|
1415
1415
|
return "corrupted";
|
|
1416
1416
|
}
|
|
1417
|
-
if (httpStatus !== void 0 && httpStatus >= 400 && httpStatus < 500 && (msg.includes("Multimodal data is corrupted") || msg.includes("Could not process image"))) {
|
|
1417
|
+
if (httpStatus !== void 0 && httpStatus >= 400 && httpStatus < 500 && (msg.includes("Multimodal data is corrupted") || msg.includes("Could not process image") || msg.includes("\u56FE\u7247\u8F93\u5165\u683C\u5F0F/\u89E3\u6790\u9519\u8BEF") || msg.includes("\u53D6\u503C\u8303\u56F4 ['text']"))) {
|
|
1418
1418
|
return "multimodal_4xx";
|
|
1419
1419
|
}
|
|
1420
1420
|
return "fatal";
|
|
@@ -2573,7 +2573,7 @@ var init_init = __esm({
|
|
|
2573
2573
|
path8.resolve(__dirname, "..", "bundled-docs"),
|
|
2574
2574
|
path8.resolve(__dirname, "..", "..", "..", ".halo", "docs")
|
|
2575
2575
|
];
|
|
2576
|
-
TEMPLATE_VERSION =
|
|
2576
|
+
TEMPLATE_VERSION = 67;
|
|
2577
2577
|
VERSION_FILE = ".template-version";
|
|
2578
2578
|
SKIP_NAMES = /* @__PURE__ */ new Set([".DS_Store", "schema.sql", "__pycache__", ".pytest_cache"]);
|
|
2579
2579
|
BUILTIN_AGENT_IDS = /* @__PURE__ */ new Set([
|
|
@@ -8875,7 +8875,7 @@ var init_doubao_agent = __esm({
|
|
|
8875
8875
|
}
|
|
8876
8876
|
});
|
|
8877
8877
|
|
|
8878
|
-
// ../server/dist/agents/
|
|
8878
|
+
// ../server/dist/agents/zhipu-agent.js
|
|
8879
8879
|
function safeParse5(json) {
|
|
8880
8880
|
try {
|
|
8881
8881
|
return JSON.parse(json || "{}");
|
|
@@ -8883,6 +8883,217 @@ function safeParse5(json) {
|
|
|
8883
8883
|
return {};
|
|
8884
8884
|
}
|
|
8885
8885
|
}
|
|
8886
|
+
var EFFORTS, ZhipuAgent;
|
|
8887
|
+
var init_zhipu_agent = __esm({
|
|
8888
|
+
"../server/dist/agents/zhipu-agent.js"() {
|
|
8889
|
+
"use strict";
|
|
8890
|
+
init_config();
|
|
8891
|
+
init_agent_loop();
|
|
8892
|
+
EFFORTS = /* @__PURE__ */ new Set(["low", "high", "max"]);
|
|
8893
|
+
ZhipuAgent = class extends AgentLoop {
|
|
8894
|
+
config;
|
|
8895
|
+
constructor(config2) {
|
|
8896
|
+
super(config2.tools);
|
|
8897
|
+
this.config = config2;
|
|
8898
|
+
}
|
|
8899
|
+
async callModel(signal) {
|
|
8900
|
+
const url = this.config.endpoint.replace(/\/+$/, "") + "/chat/completions";
|
|
8901
|
+
const startTime = Date.now();
|
|
8902
|
+
const messages2 = this.buildMessages();
|
|
8903
|
+
const tools = this.buildTools();
|
|
8904
|
+
const body = {
|
|
8905
|
+
model: this.config.modelId,
|
|
8906
|
+
messages: messages2,
|
|
8907
|
+
stream: false,
|
|
8908
|
+
max_tokens: this.config.maxTokens ?? resolveMaxOutputTokens(this.config.modelId),
|
|
8909
|
+
...tools.length > 0 ? { tools } : {}
|
|
8910
|
+
};
|
|
8911
|
+
const effort = this.config.thinking?.effort;
|
|
8912
|
+
if (this.config.modelId.startsWith("glm-5.3")) {
|
|
8913
|
+
body.thinking = { type: "enabled", clear_thinking: false };
|
|
8914
|
+
if (effort && EFFORTS.has(effort))
|
|
8915
|
+
body.reasoning_effort = effort;
|
|
8916
|
+
} else if (this.config.thinking?.enabled && effort !== "disabled") {
|
|
8917
|
+
body.thinking = { type: "enabled", clear_thinking: false };
|
|
8918
|
+
if (effort && EFFORTS.has(effort))
|
|
8919
|
+
body.reasoning_effort = effort;
|
|
8920
|
+
} else {
|
|
8921
|
+
body.thinking = { type: "disabled" };
|
|
8922
|
+
}
|
|
8923
|
+
const response = await fetch(url, {
|
|
8924
|
+
method: "POST",
|
|
8925
|
+
headers: {
|
|
8926
|
+
"Content-Type": "application/json",
|
|
8927
|
+
"Authorization": `Bearer ${this.config.apiKey}`
|
|
8928
|
+
},
|
|
8929
|
+
body: JSON.stringify(body),
|
|
8930
|
+
signal
|
|
8931
|
+
});
|
|
8932
|
+
if (!response.ok) {
|
|
8933
|
+
const errText2 = await response.text().catch(() => "");
|
|
8934
|
+
throw new Error(`[ZhipuAgent] API error ${response.status}: ${errText2}`);
|
|
8935
|
+
}
|
|
8936
|
+
const data = await response.json();
|
|
8937
|
+
const choices = data.choices;
|
|
8938
|
+
const choice = choices?.[0];
|
|
8939
|
+
const msg = choice?.message;
|
|
8940
|
+
const finishReason = choice?.finish_reason;
|
|
8941
|
+
let text6 = "";
|
|
8942
|
+
let thinking = "";
|
|
8943
|
+
const toolCalls = [];
|
|
8944
|
+
const assistantBlocks = [];
|
|
8945
|
+
if (msg) {
|
|
8946
|
+
if (msg.reasoning_content && typeof msg.reasoning_content === "string") {
|
|
8947
|
+
thinking = msg.reasoning_content;
|
|
8948
|
+
}
|
|
8949
|
+
if (msg.content && typeof msg.content === "string") {
|
|
8950
|
+
text6 = msg.content;
|
|
8951
|
+
}
|
|
8952
|
+
const rawToolCalls = msg.tool_calls;
|
|
8953
|
+
if (rawToolCalls) {
|
|
8954
|
+
for (const tc of rawToolCalls) {
|
|
8955
|
+
const fn = tc.function;
|
|
8956
|
+
const id = tc.id;
|
|
8957
|
+
const name = fn?.name ?? "";
|
|
8958
|
+
const args = fn?.arguments ?? "{}";
|
|
8959
|
+
const input = safeParse5(args);
|
|
8960
|
+
toolCalls.push({ id, name, input });
|
|
8961
|
+
assistantBlocks.push({ type: "tool_use", id, name, input });
|
|
8962
|
+
}
|
|
8963
|
+
}
|
|
8964
|
+
}
|
|
8965
|
+
if (thinking) {
|
|
8966
|
+
assistantBlocks.unshift({ type: "thinking", thinking });
|
|
8967
|
+
}
|
|
8968
|
+
if (text6) {
|
|
8969
|
+
assistantBlocks.push({ type: "text", text: text6 });
|
|
8970
|
+
}
|
|
8971
|
+
const stopReason = finishReason === "tool_calls" ? "tool_use" : finishReason === "length" ? "max_tokens" : "end_turn";
|
|
8972
|
+
const usage = data.usage;
|
|
8973
|
+
const promptTokens = usage?.prompt_tokens ?? 0;
|
|
8974
|
+
const outputTokens = usage?.completion_tokens ?? 0;
|
|
8975
|
+
const details = usage?.prompt_tokens_details;
|
|
8976
|
+
const cachedTokens = details?.cached_tokens ?? 0;
|
|
8977
|
+
const inputTokens = promptTokens - cachedTokens;
|
|
8978
|
+
return {
|
|
8979
|
+
assistantBlocks,
|
|
8980
|
+
stopReason,
|
|
8981
|
+
text: text6,
|
|
8982
|
+
thinking,
|
|
8983
|
+
toolCalls,
|
|
8984
|
+
usage: {
|
|
8985
|
+
inputTokens,
|
|
8986
|
+
outputTokens,
|
|
8987
|
+
totalTokens: inputTokens + outputTokens,
|
|
8988
|
+
...cachedTokens ? { cacheReadInputTokens: cachedTokens } : {}
|
|
8989
|
+
},
|
|
8990
|
+
durationMs: Date.now() - startTime
|
|
8991
|
+
};
|
|
8992
|
+
}
|
|
8993
|
+
buildMessages() {
|
|
8994
|
+
const msgs = [];
|
|
8995
|
+
msgs.push({ role: "system", content: this.config.systemPrompt });
|
|
8996
|
+
for (const msg of this.messages) {
|
|
8997
|
+
if (msg.role === "user") {
|
|
8998
|
+
if (typeof msg.content !== "string" && msg.content.some((b) => b.type === "tool_result")) {
|
|
8999
|
+
msgs.push(...this.convertToolResults(msg.content));
|
|
9000
|
+
const rest = [...toolResultImages(msg.content), ...msg.content.filter((b) => b.type !== "tool_result")];
|
|
9001
|
+
if (rest.length > 0) {
|
|
9002
|
+
msgs.push({ role: "user", content: this.convertUserContent(rest) });
|
|
9003
|
+
}
|
|
9004
|
+
} else {
|
|
9005
|
+
msgs.push({ role: "user", content: this.convertUserContent(msg.content) });
|
|
9006
|
+
}
|
|
9007
|
+
} else {
|
|
9008
|
+
msgs.push(...this.convertAssistantMessage(msg));
|
|
9009
|
+
}
|
|
9010
|
+
}
|
|
9011
|
+
return msgs;
|
|
9012
|
+
}
|
|
9013
|
+
convertToolResults(content) {
|
|
9014
|
+
const results = [];
|
|
9015
|
+
for (const block of content) {
|
|
9016
|
+
if (block.type === "tool_result") {
|
|
9017
|
+
const text6 = typeof block.content === "string" ? block.content : block.content.map((b) => b.type === "text" ? b.text : "[image: in the next user message]").join("\n");
|
|
9018
|
+
results.push({
|
|
9019
|
+
role: "tool",
|
|
9020
|
+
tool_call_id: block.tool_use_id,
|
|
9021
|
+
content: text6
|
|
9022
|
+
});
|
|
9023
|
+
}
|
|
9024
|
+
}
|
|
9025
|
+
return results;
|
|
9026
|
+
}
|
|
9027
|
+
convertUserContent(content) {
|
|
9028
|
+
if (typeof content === "string")
|
|
9029
|
+
return content;
|
|
9030
|
+
const parts = [];
|
|
9031
|
+
for (const block of content) {
|
|
9032
|
+
if (block.type === "text") {
|
|
9033
|
+
parts.push({ type: "text", text: block.text });
|
|
9034
|
+
} else if (block.type === "image") {
|
|
9035
|
+
parts.push({
|
|
9036
|
+
type: "image_url",
|
|
9037
|
+
image_url: { url: `data:${block.source.media_type};base64,${block.source.data}` }
|
|
9038
|
+
});
|
|
9039
|
+
}
|
|
9040
|
+
}
|
|
9041
|
+
return parts;
|
|
9042
|
+
}
|
|
9043
|
+
convertAssistantMessage(msg) {
|
|
9044
|
+
const results = [];
|
|
9045
|
+
if (typeof msg.content === "string") {
|
|
9046
|
+
results.push({ role: "assistant", content: msg.content });
|
|
9047
|
+
return results;
|
|
9048
|
+
}
|
|
9049
|
+
const textParts = [];
|
|
9050
|
+
const toolCalls = [];
|
|
9051
|
+
let reasoningContent = "";
|
|
9052
|
+
for (const block of msg.content) {
|
|
9053
|
+
if (block.type === "text") {
|
|
9054
|
+
textParts.push(block.text);
|
|
9055
|
+
} else if (block.type === "thinking") {
|
|
9056
|
+
reasoningContent = block.thinking ?? "";
|
|
9057
|
+
} else if (block.type === "tool_use") {
|
|
9058
|
+
toolCalls.push({
|
|
9059
|
+
id: block.id,
|
|
9060
|
+
type: "function",
|
|
9061
|
+
function: { name: block.name, arguments: JSON.stringify(block.input) }
|
|
9062
|
+
});
|
|
9063
|
+
}
|
|
9064
|
+
}
|
|
9065
|
+
if (textParts.length > 0 || toolCalls.length > 0 || reasoningContent) {
|
|
9066
|
+
const assistantMsg = { role: "assistant", content: textParts.join("") || null };
|
|
9067
|
+
if (reasoningContent)
|
|
9068
|
+
assistantMsg.reasoning_content = reasoningContent;
|
|
9069
|
+
if (toolCalls.length > 0)
|
|
9070
|
+
assistantMsg.tool_calls = toolCalls;
|
|
9071
|
+
results.push(assistantMsg);
|
|
9072
|
+
}
|
|
9073
|
+
return results;
|
|
9074
|
+
}
|
|
9075
|
+
buildTools() {
|
|
9076
|
+
return this.config.tools.map((t2) => ({
|
|
9077
|
+
type: "function",
|
|
9078
|
+
function: {
|
|
9079
|
+
name: t2.name,
|
|
9080
|
+
description: t2.description,
|
|
9081
|
+
parameters: t2.inputSchema
|
|
9082
|
+
}
|
|
9083
|
+
}));
|
|
9084
|
+
}
|
|
9085
|
+
};
|
|
9086
|
+
}
|
|
9087
|
+
});
|
|
9088
|
+
|
|
9089
|
+
// ../server/dist/agents/openai-agent.js
|
|
9090
|
+
function safeParse6(json) {
|
|
9091
|
+
try {
|
|
9092
|
+
return JSON.parse(json || "{}");
|
|
9093
|
+
} catch {
|
|
9094
|
+
return {};
|
|
9095
|
+
}
|
|
9096
|
+
}
|
|
8886
9097
|
var OpenAIAgent;
|
|
8887
9098
|
var init_openai_agent = __esm({
|
|
8888
9099
|
"../server/dist/agents/openai-agent.js"() {
|
|
@@ -8947,7 +9158,7 @@ var init_openai_agent = __esm({
|
|
|
8947
9158
|
const id = tc.id;
|
|
8948
9159
|
const name = fn?.name ?? "";
|
|
8949
9160
|
const args = fn?.arguments ?? "{}";
|
|
8950
|
-
const input =
|
|
9161
|
+
const input = safeParse6(args);
|
|
8951
9162
|
toolCalls.push({ id, name, input });
|
|
8952
9163
|
assistantBlocks.push({ type: "tool_use", id, name, input });
|
|
8953
9164
|
}
|
|
@@ -9075,7 +9286,7 @@ function extractRegionFromHost(hostname) {
|
|
|
9075
9286
|
const m = hostname.match(/^bedrock-(?:mantle|runtime)\.([a-z0-9-]+)\./);
|
|
9076
9287
|
return m?.[1] ?? "us-east-1";
|
|
9077
9288
|
}
|
|
9078
|
-
function
|
|
9289
|
+
function safeParse7(json) {
|
|
9079
9290
|
try {
|
|
9080
9291
|
return JSON.parse(json || "{}");
|
|
9081
9292
|
} catch {
|
|
@@ -9148,7 +9359,7 @@ var init_mantle_agent = __esm({
|
|
|
9148
9359
|
const callId = item.call_id ?? item.id ?? "";
|
|
9149
9360
|
const name = item.name ?? "";
|
|
9150
9361
|
const args = item.arguments ?? "{}";
|
|
9151
|
-
const input2 =
|
|
9362
|
+
const input2 = safeParse7(args);
|
|
9152
9363
|
toolCalls.push({ id: callId, name, input: input2 });
|
|
9153
9364
|
assistantBlocks.push({ type: "tool_use", id: callId, name, input: input2 });
|
|
9154
9365
|
}
|
|
@@ -9514,6 +9725,16 @@ function createModelRuntime(providerId, cfg) {
|
|
|
9514
9725
|
maxTokens: cfg.maxTokens,
|
|
9515
9726
|
thinking: cfg.thinking
|
|
9516
9727
|
});
|
|
9728
|
+
case "zhipu":
|
|
9729
|
+
return new ZhipuAgent({
|
|
9730
|
+
modelId: cfg.modelId,
|
|
9731
|
+
endpoint: cfg.endpoint ?? "https://open.bigmodel.cn/api/paas/v4",
|
|
9732
|
+
apiKey: cfg.apiKey ?? "",
|
|
9733
|
+
systemPrompt: cfg.systemPrompt,
|
|
9734
|
+
tools: cfg.tools,
|
|
9735
|
+
maxTokens: cfg.maxTokens,
|
|
9736
|
+
thinking: cfg.thinking
|
|
9737
|
+
});
|
|
9517
9738
|
case "openai":
|
|
9518
9739
|
return new OpenAIAgent({
|
|
9519
9740
|
modelId: cfg.modelId,
|
|
@@ -9581,6 +9802,7 @@ var init_model_runtime = __esm({
|
|
|
9581
9802
|
init_qwen_agent();
|
|
9582
9803
|
init_hunyuan_agent();
|
|
9583
9804
|
init_doubao_agent();
|
|
9805
|
+
init_zhipu_agent();
|
|
9584
9806
|
init_openai_agent();
|
|
9585
9807
|
init_mantle_agent();
|
|
9586
9808
|
init_anthropic_agent();
|
|
@@ -11919,7 +12141,7 @@ async function initObservability() {
|
|
|
11919
12141
|
return true;
|
|
11920
12142
|
}
|
|
11921
12143
|
const { registerSdk: registerSdk2 } = await Promise.resolve().then(() => (init_otel_sdk(), otel_sdk_exports));
|
|
11922
|
-
providers = registerSdk2(process.env.OTEL_SERVICE_NAME, "1.4.
|
|
12144
|
+
providers = registerSdk2(process.env.OTEL_SERVICE_NAME, "1.4.6");
|
|
11923
12145
|
console.log(`[Observability] OTLP export \u2192 ${process.env.OTEL_EXPORTER_OTLP_ENDPOINT} (service.name=${process.env.OTEL_SERVICE_NAME}, capture_content=${config.observability.captureContent})`);
|
|
11924
12146
|
return true;
|
|
11925
12147
|
}
|
|
@@ -31816,7 +32038,7 @@ var init_dist2 = __esm({
|
|
|
31816
32038
|
init_git_ssh();
|
|
31817
32039
|
__dirname3 = path68.dirname(fileURLToPath3(import.meta.url));
|
|
31818
32040
|
PORT = config.server.port;
|
|
31819
|
-
HALO_VERSION = "1.4.
|
|
32041
|
+
HALO_VERSION = "1.4.6";
|
|
31820
32042
|
PROJECT_ROOT = findProjectRoot();
|
|
31821
32043
|
HALO_HOME4 = path68.join(homedir24(), ".halo");
|
|
31822
32044
|
GIT_SHA = readGitSha();
|
|
@@ -32755,7 +32977,7 @@ import path69 from "node:path";
|
|
|
32755
32977
|
import fs63 from "node:fs";
|
|
32756
32978
|
import { homedir as homedir25 } from "node:os";
|
|
32757
32979
|
import { parseArgs as parseArgs2 } from "node:util";
|
|
32758
|
-
var VERSION = "1.4.
|
|
32980
|
+
var VERSION = "1.4.6";
|
|
32759
32981
|
var HELP_TOP = `Usage: halo <command> [options]
|
|
32760
32982
|
|
|
32761
32983
|
Commands:
|
package/package.json
CHANGED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
id: zhipu
|
|
2
|
+
displayName: Zhipu AI (GLM)
|
|
3
|
+
displayName_zh: 智谱 AI(GLM)
|
|
4
|
+
description: Zhipu GLM-5.x family on open.bigmodel.cn, OpenAI-compatible chat completions
|
|
5
|
+
description_zh: 智谱 GLM-5.x 系列(open.bigmodel.cn),OpenAI 兼容协议
|
|
6
|
+
defaultEndpoint: https://open.bigmodel.cn/api/paas/v4
|
|
7
|
+
defaultModelId: glm-5.3
|
|
8
|
+
|
|
9
|
+
secrets:
|
|
10
|
+
- key: api_key
|
|
11
|
+
description: Zhipu AI API Key. Get from https://bigmodel.cn/usercenter/proj-mgmt/apikeys
|
|
12
|
+
description_zh: 智谱 API Key。从 https://bigmodel.cn/usercenter/proj-mgmt/apikeys 获取
|
|
13
|
+
default: <<ZHIPU_API_KEY>>
|
|
14
|
+
secret: true
|
|
15
|
+
|
|
16
|
+
# Capabilities verified via live probes (2026-09-28):
|
|
17
|
+
# - Output cap: only `max_tokens` is honoured — `max_completion_tokens` is
|
|
18
|
+
# silently ignored (asked for 60, got 553). zhipu-agent sends max_tokens.
|
|
19
|
+
# - Vision is per model: glm-5.3-flash / glm-5.3-flashx read a text-bearing
|
|
20
|
+
# PNG / JPEG / GIF / WEBP correctly, both as image_url in a user message
|
|
21
|
+
# (the path tool-result images take) and inside a tool message.
|
|
22
|
+
# glm-5.3 / glm-5.2 are text-only and 400 on any image_url part
|
|
23
|
+
# (code 1210 "messages.content.type 参数非法,取值范围 ['text']").
|
|
24
|
+
# - Thinking: glm-5.3* always thinks — `thinking:{type:'disabled'}` and
|
|
25
|
+
# reasoning_effort outside { low, high, max } 400 ("该模型始终思考").
|
|
26
|
+
# glm-5.2 honours `disabled`. reasoning_content comes back on the
|
|
27
|
+
# message and is replayed verbatim with `clear_thinking:false`
|
|
28
|
+
# (preserved thinking, the doc's recommendation for agent loops).
|
|
29
|
+
# - Caching is automatic; hits show up in prompt_tokens_details.cached_tokens
|
|
30
|
+
# (already included in prompt_tokens) from turn 2 on the 5.3 family;
|
|
31
|
+
# glm-5.2 warms up a turn later.
|
|
32
|
+
# - Over-long input on older ids is truncated server-side instead of
|
|
33
|
+
# erroring — keep contextWindow accurate so compaction fires in time.
|
|
34
|
+
models:
|
|
35
|
+
- id: glm-5.3
|
|
36
|
+
displayName: GLM-5.3
|
|
37
|
+
maxOutputTokens: 131072
|
|
38
|
+
contextWindow: 1000000
|
|
39
|
+
capabilities:
|
|
40
|
+
image: false
|
|
41
|
+
video: false
|
|
42
|
+
audio: false
|
|
43
|
+
promptCaching:
|
|
44
|
+
default: 5m
|
|
45
|
+
ttlPresets:
|
|
46
|
+
- { value: 5m, label: 5min }
|
|
47
|
+
thinking:
|
|
48
|
+
# Always on server-side — no off switch; effort enum is low/high/max.
|
|
49
|
+
defaultEnabled: true
|
|
50
|
+
default: high
|
|
51
|
+
effortPresets:
|
|
52
|
+
- { value: low, label: Low }
|
|
53
|
+
- { value: high, label: High }
|
|
54
|
+
- { value: max, label: Max }
|
|
55
|
+
|
|
56
|
+
- id: glm-5.3-flash
|
|
57
|
+
displayName: GLM-5.3 Flash
|
|
58
|
+
maxOutputTokens: 131072
|
|
59
|
+
contextWindow: 1000000
|
|
60
|
+
capabilities:
|
|
61
|
+
image: true
|
|
62
|
+
video: false
|
|
63
|
+
audio: false
|
|
64
|
+
promptCaching:
|
|
65
|
+
default: 5m
|
|
66
|
+
ttlPresets:
|
|
67
|
+
- { value: 5m, label: 5min }
|
|
68
|
+
thinking:
|
|
69
|
+
defaultEnabled: true
|
|
70
|
+
default: high
|
|
71
|
+
effortPresets:
|
|
72
|
+
- { value: low, label: Low }
|
|
73
|
+
- { value: high, label: High }
|
|
74
|
+
- { value: max, label: Max }
|
|
75
|
+
|
|
76
|
+
- id: glm-5.3-flashx
|
|
77
|
+
displayName: GLM-5.3 FlashX
|
|
78
|
+
maxOutputTokens: 131072
|
|
79
|
+
contextWindow: 1000000
|
|
80
|
+
capabilities:
|
|
81
|
+
image: true
|
|
82
|
+
video: false
|
|
83
|
+
audio: false
|
|
84
|
+
promptCaching:
|
|
85
|
+
default: 5m
|
|
86
|
+
ttlPresets:
|
|
87
|
+
- { value: 5m, label: 5min }
|
|
88
|
+
thinking:
|
|
89
|
+
defaultEnabled: true
|
|
90
|
+
default: high
|
|
91
|
+
effortPresets:
|
|
92
|
+
- { value: low, label: Low }
|
|
93
|
+
- { value: high, label: High }
|
|
94
|
+
- { value: max, label: Max }
|
|
95
|
+
|
|
96
|
+
- id: glm-5.2
|
|
97
|
+
displayName: GLM-5.2
|
|
98
|
+
maxOutputTokens: 131072
|
|
99
|
+
contextWindow: 1000000
|
|
100
|
+
capabilities:
|
|
101
|
+
image: false
|
|
102
|
+
video: false
|
|
103
|
+
audio: false
|
|
104
|
+
promptCaching:
|
|
105
|
+
default: 5m
|
|
106
|
+
ttlPresets:
|
|
107
|
+
- { value: 5m, label: 5min }
|
|
108
|
+
thinking:
|
|
109
|
+
# Can be switched off (thinking:{type:'disabled'}).
|
|
110
|
+
defaultEnabled: true
|
|
111
|
+
default: high
|
|
112
|
+
effortPresets:
|
|
113
|
+
- { value: low, label: Low }
|
|
114
|
+
- { value: high, label: High }
|
|
115
|
+
- { value: max, label: Max }
|
/package/admin-out/_next/static/{jXC1swwQxpx7Zpri-5CwJ → qYSILjqBjfgTggO0T8E7T}/_buildManifest.js
RENAMED
|
File without changes
|
/package/admin-out/_next/static/{jXC1swwQxpx7Zpri-5CwJ → qYSILjqBjfgTggO0T8E7T}/_ssgManifest.js
RENAMED
|
File without changes
|