@goldenlustre/agent-studio 1.0.6 → 1.0.8
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/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +8 -8
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.js +2 -2
- package/.next/required-server-files.json +2 -2
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +3 -3
- package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/agent/new/route.js +1 -1
- package/.next/server/app/api/app-update/route.js +1 -1
- package/.next/server/app/dashboard/page.js +1 -1
- package/.next/server/app/dashboard/page_client-reference-manifest.js +1 -1
- package/.next/server/app/dashboard.html +1 -1
- package/.next/server/app/dashboard.rsc +4 -4
- package/.next/server/app/dashboard.segments/_full.segment.rsc +4 -4
- package/.next/server/app/dashboard.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/dashboard.segments/dashboard/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +5 -5
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +5 -5
- package/.next/server/app/index.segments/_full.segment.rsc +5 -5
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +1 -1
- package/.next/server/app/login.rsc +3 -3
- package/.next/server/app/login.segments/_full.segment.rsc +3 -3
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/page.js +20 -20
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +8 -8
- package/.next/server/chunks/4815.js +1 -1
- package/.next/server/chunks/6429.js +1 -1
- package/.next/server/chunks/6763.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{6210-4d494d62310603d6.js → 6210-91d72b6590173750.js} +1 -1
- package/.next/static/chunks/app/dashboard/{page-85f8e08332a1f141.js → page-9a1e0d897445f87c.js} +1 -1
- package/.next/static/chunks/app/{layout-31492c79f85fd8f6.js → layout-ddfe2ebdf65ba6bc.js} +1 -1
- package/.next/static/chunks/app/page-0697e535d075b3c1.js +283 -0
- package/.next/static/css/a45cb49ac17702ea.css +1 -0
- package/.next/trace +40 -41
- package/.next/trace-build +1 -1
- package/package.json +1 -1
- package/.next/static/chunks/app/page-bed96c6018122870.js +0 -283
- package/.next/static/css/d71318cebb94818f.css +0 -1
- /package/.next/static/{-lW9cYwIUJAmYf8e9jgoS → WpZc-3UOo-kR1-7dv1oHe}/_buildManifest.js +0 -0
- /package/.next/static/{-lW9cYwIUJAmYf8e9jgoS → WpZc-3UOo-kR1-7dv1oHe}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"21278":{"*":{"id":"93080","name":"*","chunks":[],"async":false}},"27123":{"*":{"id":"81921","name":"*","chunks":[],"async":false}},"42309":{"*":{"id":"28447","name":"*","chunks":[],"async":false}},"56901":{"*":{"id":"23909","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"35421","name":"*","chunks":[],"async":false}},"57788":{"*":{"id":"19102","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"60440","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"82265","name":"*","chunks":[],"async":false}},"74581":{"*":{"id":"61335","name":"*","chunks":[],"async":false}},"78616":{"*":{"id":"84342","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"74661","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"70664","name":"*","chunks":[],"async":false}},"92624":{"*":{"id":"58362","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"./node_modules/next/dist/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/esm/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/esm/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/esm/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"./components/PwaRegistration.tsx":{"id":57788,"name":"*","chunks":["7177","static/chunks/app/layout-
|
|
1
|
+
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"21278":{"*":{"id":"93080","name":"*","chunks":[],"async":false}},"27123":{"*":{"id":"81921","name":"*","chunks":[],"async":false}},"42309":{"*":{"id":"28447","name":"*","chunks":[],"async":false}},"56901":{"*":{"id":"23909","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"35421","name":"*","chunks":[],"async":false}},"57788":{"*":{"id":"19102","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"60440","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"82265","name":"*","chunks":[],"async":false}},"74581":{"*":{"id":"61335","name":"*","chunks":[],"async":false}},"78616":{"*":{"id":"84342","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"74661","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"70664","name":"*","chunks":[],"async":false}},"92624":{"*":{"id":"58362","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"./node_modules/next/dist/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/esm/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/esm/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/esm/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"./node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"./components/PwaRegistration.tsx":{"id":57788,"name":"*","chunks":["7177","static/chunks/app/layout-ddfe2ebdf65ba6bc.js"],"async":false},"./node_modules/next/font/google/target.css?{\"path\":\"app/layout.tsx\",\"import\":\"Noto_Sans_Mono\",\"arguments\":[{\"subsets\":[\"latin\",\"cyrillic\"],\"variable\":\"--font-noto-mono\",\"display\":\"swap\"}],\"variableName\":\"notoSansMono\"}":{"id":83683,"name":"*","chunks":["7177","static/chunks/app/layout-ddfe2ebdf65ba6bc.js"],"async":false},"./node_modules/katex/dist/katex.min.css":{"id":84559,"name":"*","chunks":["7177","static/chunks/app/layout-ddfe2ebdf65ba6bc.js"],"async":false},"./app/globals.css":{"id":66872,"name":"*","chunks":["7177","static/chunks/app/layout-ddfe2ebdf65ba6bc.js"],"async":false},"./app/settings.css":{"id":39979,"name":"*","chunks":["7177","static/chunks/app/layout-ddfe2ebdf65ba6bc.js"],"async":false},"./app/dashboard/page.tsx":{"id":92624,"name":"*","chunks":[],"async":false},"./app/login/page.tsx":{"id":42309,"name":"*","chunks":[],"async":false},"./components/AppShell.tsx":{"id":56901,"name":"*","chunks":["7330","static/chunks/d3ac728e-7964f816a1ca64e5.js","3888","static/chunks/e868780c-1584512c612787d7.js","5772","static/chunks/5772-ddd18c0d4b7715e5.js","9445","static/chunks/9445-fde6feabcb39142c.js","1278","static/chunks/1278-bfacfce6a4683b1d.js","6210","static/chunks/6210-91d72b6590173750.js","8974","static/chunks/app/page-0697e535d075b3c1.js"],"async":false},"./hooks/useI18n.tsx":{"id":21278,"name":"*","chunks":["7330","static/chunks/d3ac728e-7964f816a1ca64e5.js","3888","static/chunks/e868780c-1584512c612787d7.js","5772","static/chunks/5772-ddd18c0d4b7715e5.js","9445","static/chunks/9445-fde6feabcb39142c.js","1278","static/chunks/1278-bfacfce6a4683b1d.js","6210","static/chunks/6210-91d72b6590173750.js","8974","static/chunks/app/page-0697e535d075b3c1.js"],"async":false}},"entryCSSFiles":{"./":[],"./app/layout":[{"inlined":false,"path":"static/css/88714c00e109ce28.css"},{"inlined":false,"path":"static/css/a45cb49ac17702ea.css"},{"inlined":false,"path":"static/css/bb9361c7f832a89d.css"}],"./app/page":[{"inlined":false,"path":"static/css/4cbedad236d913cb.css"}]},"rscModuleMapping":{"21278":{"*":{"id":"73884","name":"*","chunks":[],"async":false}},"27123":{"*":{"id":"95547","name":"*","chunks":[],"async":false}},"39979":{"*":{"id":"77261","name":"*","chunks":[],"async":false}},"42309":{"*":{"id":"69613","name":"*","chunks":[],"async":false}},"56901":{"*":{"id":"35790","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"98099","name":"*","chunks":[],"async":false}},"57788":{"*":{"id":"81276","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"15098","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"33859","name":"*","chunks":[],"async":false}},"66872":{"*":{"id":"82704","name":"*","chunks":[],"async":false}},"74581":{"*":{"id":"16237","name":"*","chunks":[],"async":false}},"78616":{"*":{"id":"47644","name":"*","chunks":[],"async":false}},"84559":{"*":{"id":"25319","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"36675","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"98562","name":"*","chunks":[],"async":false}},"92624":{"*":{"id":"45948","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}};
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
"/api/worktrees/route": "app/api/worktrees/route.js",
|
|
22
22
|
"/favicon.ico/route": "app/favicon.ico/route.js",
|
|
23
23
|
"/manifest.webmanifest/route": "app/manifest.webmanifest/route.js",
|
|
24
|
-
"/api/agent/[id]/events/route": "app/api/agent/[id]/events/route.js",
|
|
25
24
|
"/api/agent/running/route": "app/api/agent/running/route.js",
|
|
25
|
+
"/api/agent/[id]/events/route": "app/api/agent/[id]/events/route.js",
|
|
26
26
|
"/api/agent/new/route": "app/api/agent/new/route.js",
|
|
27
27
|
"/api/app-update/route": "app/api/app-update/route.js",
|
|
28
28
|
"/api/auth/api-key/[provider]/route": "app/api/auth/api-key/[provider]/route.js",
|
|
@@ -32,29 +32,29 @@
|
|
|
32
32
|
"/api/models-config/catalog/route": "app/api/models-config/catalog/route.js",
|
|
33
33
|
"/api/models-config/route": "app/api/models-config/route.js",
|
|
34
34
|
"/api/models-config/discover/route": "app/api/models-config/discover/route.js",
|
|
35
|
-
"/api/plugins/check/route": "app/api/plugins/check/route.js",
|
|
36
35
|
"/api/models-config/test/route": "app/api/models-config/test/route.js",
|
|
36
|
+
"/api/plugins/check/route": "app/api/plugins/check/route.js",
|
|
37
37
|
"/api/models/route": "app/api/models/route.js",
|
|
38
|
-
"/api/plugins/route": "app/api/plugins/route.js",
|
|
39
|
-
"/api/project-trust/route": "app/api/project-trust/route.js",
|
|
40
38
|
"/api/provider-usage/query/route": "app/api/provider-usage/query/route.js",
|
|
39
|
+
"/api/project-trust/route": "app/api/project-trust/route.js",
|
|
41
40
|
"/api/push/config/route": "app/api/push/config/route.js",
|
|
42
41
|
"/api/push/subscribe/route": "app/api/push/subscribe/route.js",
|
|
43
|
-
"/api/
|
|
42
|
+
"/api/plugins/route": "app/api/plugins/route.js",
|
|
44
43
|
"/api/sessions/route": "app/api/sessions/route.js",
|
|
45
44
|
"/api/sessions/search/route": "app/api/sessions/search/route.js",
|
|
46
45
|
"/api/skills/check/route": "app/api/skills/check/route.js",
|
|
47
46
|
"/api/skills/install/route": "app/api/skills/install/route.js",
|
|
48
47
|
"/api/skills/route": "app/api/skills/route.js",
|
|
49
|
-
"/api/skills/update/route": "app/api/skills/update/route.js",
|
|
50
48
|
"/api/sessions/[id]/route": "app/api/sessions/[id]/route.js",
|
|
51
|
-
"/api/
|
|
49
|
+
"/api/sessions/[id]/export/route": "app/api/sessions/[id]/export/route.js",
|
|
52
50
|
"/api/skills/search/route": "app/api/skills/search/route.js",
|
|
51
|
+
"/api/skills/update/route": "app/api/skills/update/route.js",
|
|
52
|
+
"/api/subagents/[id]/route": "app/api/subagents/[id]/route.js",
|
|
53
53
|
"/api/subagents/settings/route": "app/api/subagents/settings/route.js",
|
|
54
54
|
"/api/subagents/profiles/route": "app/api/subagents/profiles/route.js",
|
|
55
55
|
"/api/terminal/[id]/events/route": "app/api/terminal/[id]/events/route.js",
|
|
56
|
-
"/api/terminal/route": "app/api/terminal/route.js",
|
|
57
56
|
"/api/terminal/[id]/route": "app/api/terminal/[id]/route.js",
|
|
57
|
+
"/api/terminal/route": "app/api/terminal/route.js",
|
|
58
58
|
"/api/tools/settings/route": "app/api/tools/settings/route.js",
|
|
59
59
|
"/api/web-auth/route": "app/api/web-auth/route.js",
|
|
60
60
|
"/dashboard/page": "app/dashboard/page.js",
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
exports.id=4815,exports.ids=[4815],exports.modules={1924:a=>{a.exports={style:{fontFamily:"'Noto Sans Mono', 'Noto Sans Mono Fallback'",fontStyle:"normal"},className:"
|
|
1
|
+
exports.id=4815,exports.ids=[4815],exports.modules={1924:a=>{a.exports={style:{fontFamily:"'Noto Sans Mono', 'Noto Sans Mono Fallback'",fontStyle:"normal"},className:"__className_9e44ca",variable:"__variable_9e44ca"}},8834:(a,b)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var c={VALID_LOADERS:function(){return e},imageConfigDefault:function(){return f}};for(var d in c)Object.defineProperty(b,d,{enumerable:!0,get:c[d]});let e=["default","imgix","cloudinary","akamai","custom"],f={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],path:"/_next/image",loader:"default",loaderFile:"",domains:[],disableStaticImages:!1,minimumCacheTTL:14400,formats:["image/webp"],maximumDiskCacheSize:void 0,maximumRedirects:3,maximumResponseBody:5e7,dangerouslyAllowLocalIP:!1,dangerouslyAllowSVG:!1,contentSecurityPolicy:"script-src 'none'; frame-src 'none'; sandbox;",contentDispositionType:"attachment",localPatterns:void 0,remotePatterns:[],qualities:[75],unoptimized:!1,customCacheHandler:!1}},19226:(a,b,c)=>{"use strict";a.exports=c(81155).vendored.contexts.RouterContext},25319:()=>{},25374:(a,b)=>{"use strict";function c({widthInt:a,heightInt:b,blurWidth:d,blurHeight:e,blurDataURL:f,objectFit:g}){let h=d?40*d:a,i=e?40*e:b,j=h&&i?`viewBox='0 0 ${h} ${i}'`:"";return`%3Csvg xmlns='http://www.w3.org/2000/svg' ${j}%3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='${j?"none":"contain"===g?"xMidYMid":"cover"===g?"xMidYMid slice":"none"}' style='filter: url(%23b);' href='${f}'/%3E%3C/svg%3E`}Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"getImageBlurSvg",{enumerable:!0,get:function(){return c}})},26201:(a,b,c)=>{"use strict";a.exports=c(81155).vendored.contexts.ImageConfigContext},28039:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"default",{enumerable:!0,get:function(){return g}});let d=c(92873),e=c(44217);function f({config:a,src:b,width:c,quality:g}){let h=(0,e.getDeploymentId)();if(b.startsWith("/")&&!b.startsWith("//"))if(b.includes("/_next/static/immutable")&&!(0,e.getAssetToken)())h=void 0;else{let a=b.indexOf("?");if(-1!==a){let c=new URLSearchParams(b.slice(a+1)),d=c.get("dpl");if(d){h=d,c.delete("dpl");let e=c.toString();b=b.slice(0,a)+(e?"?"+e:"")}}}if(b.startsWith("/")&&b.includes("?")&&a.localPatterns?.length===1&&"**"===a.localPatterns[0].pathname&&""===a.localPatterns[0].search)throw Object.defineProperty(Error(`Image with src "${b}" is using a query string which is not configured in images.localPatterns.
|
|
2
2
|
Read more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`),"__NEXT_ERROR_CODE",{value:"E871",enumerable:!1,configurable:!0});let i=(0,d.findClosestQuality)(g,a);return`${a.path}?url=${encodeURIComponent(b)}&w=${c}&q=${i}${b.startsWith("/")&&h?`&dpl=${h}`:""}`}f.__next_img_default=!0;let g=f},38895:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"getImgProps",{enumerable:!0,get:function(){return j}});let d=c(44217),e=c(25374),f=c(8834),g=["-moz-initial","fill","none","scale-down",void 0];function h(a){return void 0!==a.default}function i(a){return void 0===a?a:"number"==typeof a?Number.isFinite(a)?a:NaN:"string"==typeof a&&/^[0-9]+$/.test(a)?parseInt(a,10):NaN}function j({src:a,sizes:b,unoptimized:c=!1,priority:k=!1,preload:l=!1,loading:m,className:n,quality:o,width:p,height:q,fill:r=!1,style:s,overrideSrc:t,onLoad:u,onLoadingComplete:v,placeholder:w="empty",blurDataURL:x,fetchPriority:y,decoding:z="async",layout:A,objectFit:B,objectPosition:C,lazyBoundary:D,lazyRoot:E,...F},G){var H;let I,J,K,{imgConf:L,showAltText:M,blurComplete:N,defaultLoader:O}=G,P=L||f.imageConfigDefault;if("allSizes"in P)I=P;else{let a=[...P.deviceSizes,...P.imageSizes].sort((a,b)=>a-b),b=P.deviceSizes.sort((a,b)=>a-b),c=P.qualities?.sort((a,b)=>a-b);I={...P,allSizes:a,deviceSizes:b,qualities:c}}if(void 0===O)throw Object.defineProperty(Error("images.loaderFile detected but the file is missing default export.\nRead more: https://nextjs.org/docs/messages/invalid-images-config"),"__NEXT_ERROR_CODE",{value:"E163",enumerable:!1,configurable:!0});let Q=F.loader||O;delete F.loader,delete F.srcSet;let R="__next_img_default"in Q;if(R){if("custom"===I.loader)throw Object.defineProperty(Error(`Image with src "${a}" is missing "loader" prop.
|
|
3
3
|
Read more: https://nextjs.org/docs/messages/next-image-missing-loader`),"__NEXT_ERROR_CODE",{value:"E252",enumerable:!1,configurable:!0})}else{let a=Q;Q=b=>{let{config:c,...d}=b;return a(d)}}if(A){"fill"===A&&(r=!0);let a={intrinsic:{maxWidth:"100%",height:"auto"},responsive:{width:"100%",height:"auto"}}[A];a&&(s={...s,...a});let c={responsive:"100vw",fill:"100vw"}[A];c&&!b&&(b=c)}let S="",T=i(p),U=i(q);if((H=a)&&"object"==typeof H&&(h(H)||void 0!==H.src)){let b=h(a)?a.default:a;if(!b.src)throw Object.defineProperty(Error(`An object should only be passed to the image component src parameter if it comes from a static image import. It must include src. Received ${JSON.stringify(b)}`),"__NEXT_ERROR_CODE",{value:"E460",enumerable:!1,configurable:!0});if(!b.height||!b.width)throw Object.defineProperty(Error(`An object should only be passed to the image component src parameter if it comes from a static image import. It must include height and width. Received ${JSON.stringify(b)}`),"__NEXT_ERROR_CODE",{value:"E48",enumerable:!1,configurable:!0});if(J=b.blurWidth,K=b.blurHeight,x=x||b.blurDataURL,S=b.src,!r)if(T||U){if(T&&!U){let a=T/b.width;U=Math.round(b.height*a)}else if(!T&&U){let a=U/b.height;T=Math.round(b.width*a)}}else T=b.width,U=b.height}let V=!k&&!l&&("lazy"===m||void 0===m);(!(a="string"==typeof a?a:S)||a.startsWith("data:")||a.startsWith("blob:"))&&(c=!0,V=!1),I.unoptimized&&(c=!0),R&&!I.dangerouslyAllowSVG&&a.split("?",1)[0].endsWith(".svg")&&(c=!0);let W=i(o),X=Object.assign(r?{position:"absolute",height:"100%",width:"100%",left:0,top:0,right:0,bottom:0,objectFit:B,objectPosition:C}:{},M?{}:{color:"transparent"},s),Y=N||"empty"===w?null:"blur"===w?`url("data:image/svg+xml;charset=utf-8,${(0,e.getImageBlurSvg)({widthInt:T,heightInt:U,blurWidth:J,blurHeight:K,blurDataURL:x||"",objectFit:X.objectFit})}")`:`url("${w}")`,Z=g.includes(X.objectFit)?"fill"===X.objectFit?"100% 100%":"cover":X.objectFit,$=Y?{backgroundSize:Z,backgroundPosition:X.objectPosition||"50% 50%",backgroundRepeat:"no-repeat",backgroundImage:Y}:{},_=function({config:a,src:b,unoptimized:c,width:e,quality:f,sizes:g,loader:h}){if(c){if(b.startsWith("/")&&!b.startsWith("//")){let a=(0,d.getDeploymentId)();if(b.includes("/_next/static/immutable")&&!(0,d.getAssetToken)())a=void 0;else if(a){let c=b.indexOf("?");if(-1!==c){let d=new URLSearchParams(b.slice(c+1));d.get("dpl")||(d.append("dpl",a),b=b.slice(0,c)+"?"+d.toString())}else b+=`?dpl=${a}`}}return{src:b,srcSet:void 0,sizes:void 0}}let{widths:i,kind:j}=function({deviceSizes:a,allSizes:b},c,d){if(d){let c=/(^|\s)(1?\d?\d)vw/g,e=[];for(let a;a=c.exec(d);)e.push(parseInt(a[2]));if(e.length){let c=.01*Math.min(...e);return{widths:b.filter(b=>b>=a[0]*c),kind:"w"}}return{widths:b,kind:"w"}}return"number"!=typeof c?{widths:a,kind:"w"}:{widths:[...new Set([c,2*c].map(a=>b.find(b=>b>=a)||b[b.length-1]))],kind:"x"}}(a,e,g),k=i.length-1;return{sizes:g||"w"!==j?g:"100vw",srcSet:i.map((c,d)=>`${h({config:a,src:b,quality:f,width:c})} ${"w"===j?c:d+1}${j}`).join(", "),src:h({config:a,src:b,quality:f,width:i[k]})}}({config:I,src:a,unoptimized:c,width:T,quality:W,sizes:b,loader:Q}),aa=V?"lazy":m;return{props:{...F,loading:aa,fetchPriority:y,width:T,height:U,decoding:z,className:n,style:{...X,...$},sizes:_.sizes,srcSet:_.srcSet,src:t||_.src},meta:{unoptimized:c,preload:l||k,placeholder:w,fill:r}}}},49646:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d={default:function(){return p},defaultHead:function(){return l}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(40399),g=c(24814),h=c(48249),i=g._(c(67484)),j=f._(c(98917)),k=c(89719);function l(){return[(0,h.jsx)("meta",{charSet:"utf-8"},"charset"),(0,h.jsx)("meta",{name:"viewport",content:"width=device-width"},"viewport")]}function m(a,b){return"string"==typeof b||"number"==typeof b?a:b.type===i.default.Fragment?a.concat(i.default.Children.toArray(b.props.children).reduce((a,b)=>"string"==typeof b||"number"==typeof b?a:a.concat(b),[])):a.concat(b)}let n=["name","httpEquiv","charSet","itemProp"];function o(a){let b,c,d,e;return a.reduce(m,[]).reverse().concat(l().reverse()).filter((b=new Set,c=new Set,d=new Set,e={},a=>{let f=!0,g=!1;if(a.key&&"number"!=typeof a.key&&a.key.indexOf("$")>0){g=!0;let c=a.key.slice(a.key.indexOf("$")+1);b.has(c)?f=!1:b.add(c)}switch(a.type){case"title":case"base":c.has(a.type)?f=!1:c.add(a.type);break;case"meta":for(let b=0,c=n.length;b<c;b++){let c=n[b];if(a.props.hasOwnProperty(c))if("charSet"===c)d.has(c)?f=!1:d.add(c);else{let b=a.props[c],d=e[c]||new Set;("name"!==c||!g)&&d.has(b)?f=!1:(d.add(b),e[c]=d)}}}return f})).reverse().map((a,b)=>{let c=a.key||b;return i.default.cloneElement(a,{key:c})})}let p=function({children:a}){let b=(0,i.useContext)(k.HeadManagerContext);return(0,h.jsx)(j.default,{reduceComponentsToState:o,headManager:b,children:a})};("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},55091:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"default",{enumerable:!0,get:function(){return f}});let d=c(5735),e=c(22675);function f(){return(0,d.jsx)(e.HTTPAccessErrorFallback,{status:404,message:"This page could not be found."})}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},57272:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"useMergedRef",{enumerable:!0,get:function(){return e}});let d=c(67484);function e(a,b){let c=(0,d.useRef)(null),e=(0,d.useRef)(null);return(0,d.useCallback)(d=>{if(null===d){let a=c.current;a&&(c.current=null,a());let b=e.current;b&&(e.current=null,b())}else a&&(c.current=f(a,d)),b&&(e.current=f(b,d))},[a,b])}function f(a,b){if("function"!=typeof a)return a.current=b,()=>{a.current=null};{let c=a(b);return"function"==typeof c?c:()=>a(null)}}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},67095:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d={default:function(){return k},getImageProps:function(){return j}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(40399),g=c(38895),h=c(73836),i=f._(c(28039));function j(a){let{props:b}=(0,g.getImgProps)(a,{defaultLoader:i.default,imgConf:{deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],qualities:[75],path:"/_next/image",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!1}});for(let[a,c]of Object.entries(b))void 0===c&&delete b[a];return{props:b}}let k=h.Image},73836:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"Image",{enumerable:!0,get:function(){return v}});let d=c(40399),e=c(24814),f=c(48249),g=e._(c(67484)),h=d._(c(74429)),i=d._(c(49646)),j=c(38895),k=c(8834),l=c(26201),m=c(19226),n=d._(c(28039)),o=c(57272),p={deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[32,48,64,96,128,256,384],qualities:[75],path:"/_next/image",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!1};function q(a,b,c,d,e,f,g){let h=a?.src;a&&a["data-loaded-src"]!==h&&(a["data-loaded-src"]=h,("decode"in a?a.decode():Promise.resolve()).catch(()=>{}).then(()=>{if(a.parentElement&&a.isConnected){if("empty"!==b&&e(!0),c?.current){let b=new Event("load");Object.defineProperty(b,"target",{writable:!1,value:a});let d=!1,e=!1;c.current({...b,nativeEvent:b,currentTarget:a,target:a,isDefaultPrevented:()=>d,isPropagationStopped:()=>e,persist:()=>{},preventDefault:()=>{d=!0,b.preventDefault()},stopPropagation:()=>{e=!0,b.stopPropagation()}})}d?.current&&d.current(a)}}))}function r(a){return g.use?{fetchPriority:a}:{fetchpriority:a}}globalThis.__NEXT_IMAGE_IMPORTED=!0;let s=g.useEffect,t=(0,g.forwardRef)(({src:a,srcSet:b,sizes:c,height:d,width:e,decoding:h,className:i,style:j,fetchPriority:k,placeholder:l,loading:m,unoptimized:n,fill:p,onLoadRef:t,onLoadingCompleteRef:u,setBlurComplete:v,setShowAltText:w,sizesInput:x,onLoad:y,onError:z,...A},B)=>{let C=(0,g.useRef)(!1),D=(0,g.useRef)(null);s(()=>{let{current:a}=C,{current:b}=D;a||null===b||(z&&(b.src=b.src),b.complete&&q(b,l,t,u,v,n,x),C.current=!0)},[a,l,t,u,z,n,x]);let E=(0,o.useMergedRef)(B,D);return(0,f.jsx)("img",{...A,...r(k),loading:m,width:e,height:d,decoding:h,"data-nimg":p?"fill":"1",className:i,style:j,sizes:c,srcSet:b,src:a,ref:E,onLoad:a=>{q(a.currentTarget,l,t,u,v,n,x)},onError:a=>{w(!0),"empty"!==l&&v(!0),z&&z(a)}})});function u({isAppRouter:a,imgAttributes:b}){let c={as:"image",imageSrcSet:b.srcSet,imageSizes:b.sizes,crossOrigin:b.crossOrigin,referrerPolicy:b.referrerPolicy,...r(b.fetchPriority)};return a&&h.default.preload?(h.default.preload(b.src,c),null):(0,f.jsx)(i.default,{children:(0,f.jsx)("link",{rel:"preload",href:b.srcSet?void 0:b.src,...c},"__nimg-"+b.src+b.srcSet+b.sizes)})}let v=(0,g.forwardRef)((a,b)=>{let c=(0,g.useContext)(m.RouterContext),d=(0,g.useContext)(l.ImageConfigContext),e=(0,g.useMemo)(()=>{let a=p||d||k.imageConfigDefault,b=[...a.deviceSizes,...a.imageSizes].sort((a,b)=>a-b),c=a.deviceSizes.sort((a,b)=>a-b),e=a.qualities?.sort((a,b)=>a-b);return{...a,allSizes:b,deviceSizes:c,qualities:e,localPatterns:d?.localPatterns}},[d]),{onLoad:h,onLoadingComplete:i}=a,o=(0,g.useRef)(h);(0,g.useEffect)(()=>{o.current=h},[h]);let q=(0,g.useRef)(i);(0,g.useEffect)(()=>{q.current=i},[i]);let[r,s]=(0,g.useState)(!1),[v,w]=(0,g.useState)(!1),{props:x,meta:y}=(0,j.getImgProps)(a,{defaultLoader:n.default,imgConf:e,blurComplete:r,showAltText:v});return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(t,{...x,unoptimized:y.unoptimized,placeholder:y.placeholder,fill:y.fill,onLoadRef:o,onLoadingCompleteRef:q,setBlurComplete:s,setShowAltText:w,sizesInput:a.sizes,ref:b}),y.preload?(0,f.jsx)(u,{isAppRouter:!c,imgAttributes:x}):null]})});("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},81220:(a,b,c)=>{"use strict";c.d(b,{default:()=>e.a});var d=c(67095),e=c.n(d)},89719:(a,b,c)=>{"use strict";a.exports=c(81155).vendored.contexts.HeadManagerContext},92873:(a,b)=>{"use strict";function c(a,b){let c=a||75;return b?.qualities?.length?b.qualities.reduce((a,b)=>Math.abs(b-c)<Math.abs(a-c)?b:a,b.qualities[0]):c}Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"findClosestQuality",{enumerable:!0,get:function(){return c}})},98917:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"default",{enumerable:!0,get:function(){return f}});let d=c(67484),e=()=>{};function f(a){let{headManager:b,reduceComponentsToState:c}=a;function f(){if(b&&b.mountedInstances){let a=d.Children.toArray(Array.from(b.mountedInstances).filter(Boolean));b.updateHead(c(a))}}return b?.mountedInstances?.add(a.children),f(),e(),e(),null}}};
|
|
@@ -5,7 +5,7 @@ ${p=f.inner.sessionManager.buildSessionContext().messages,(t=JSON.stringify(p)).
|
|
|
5
5
|
${a.inheritedParentContext}`:a.task,...b||c?{exactSystemPrompt:a.profileSystemPrompt}:{}}}},21560:(a,b,c)=>{c.d(b,{b5:()=>j,dS:()=>h,vw:()=>i});var d=c(41761);let e="pi-web:tool-selection",f=new Set(d.C1);function g(a){if(!("object"!=typeof a||null===a||Array.isArray(a))&&!(1!==a.version||!Array.isArray(a.tools)||a.tools.some(a=>"string"!=typeof a||!f.has(a))))return[...new Set(a.tools)]}function h(a){for(let b=a.length-1;b>=0;b-=1){let c=a[b];if("custom"!==c.type||c.customType!==e)continue;let d=g(c.data);if(void 0!==d)return d}}function i(a){let b=g({version:1,tools:a});if(void 0===b)throw Error("toolNames must contain only built-in tool names");return b}function j(a,b){a.appendCustomEntry(e,{version:1,tools:[...b]})}},27367:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{N:()=>m,UF:()=>p,UM:()=>o,ef:()=>n,hd:()=>l});var e=c(73024),f=c(76760),g=c(75430),h=c(8102),i=a([g]);g=(i.then?(await i)():i)[0];let p=32;function j(a=(0,g.getAgentDir)()){return(0,f.join)(a,"agents","settings.json")}function k(a){if(!(0,e.existsSync)(a))return{};let b=JSON.parse((0,e.readFileSync)(a,"utf8"));if(null===b||"object"!=typeof b||Array.isArray(b))throw Error("Invalid subagent settings: expected an object");return b}function l(a=j()){var b,c,d;let e=k(a);return c=!0===e.builtInEnabled,b=e.maxConcurrent,d="number"==typeof b&&Number.isInteger(b)&&b>=1&&b<=p?b:10,Object.defineProperty({builtInEnabled:c},"maxConcurrent",{value:d,enumerable:!1,configurable:!0})}function m(a=j()){try{return l(a).builtInEnabled}catch{return!1}}function n(a,b=j()){let c=k(b);return(0,e.mkdirSync)((0,f.dirname)(b),{recursive:!0}),(0,h.$)(b,JSON.stringify({...c,version:1,builtInEnabled:a},null,2)),l(b)}function o(a,b=j()){if(!Number.isInteger(a)||a<1||a>p)throw Error(`maxConcurrent must be an integer between 1 and ${p}`);let c=k(b);return(0,e.mkdirSync)((0,f.dirname)(b),{recursive:!0}),(0,h.$)(b,JSON.stringify({...c,version:1,maxConcurrent:a},null,2)),l(b)}d()}catch(a){d(a)}})},28967:(a,b,c)=>{function d(){return globalThis.__piModelsCacheState||(globalThis.__piModelsCacheState={entries:new Map,inFlight:new Map,generation:0}),globalThis.__piModelsCacheState}function e(){let a=d();a.generation+=1,a.entries.clear(),a.inFlight.clear()}function f(a,b){return b?{...a,modelError:b}:a}function g(a){return{...a,modelError:"Model list is temporarily unavailable. Check your configuration and try again."}}function h(a,b){let c=d(),e=c.entries.get(a);if(e){if(e.expiresAt>Date.now())return Promise.resolve(e.data);c.entries.delete(a)}let f=c.inFlight.get(a);if(f)return f;let g=c.generation,h=Promise.resolve().then(b).then(b=>{if(c.generation===g&&c.inFlight.get(a)===h){let d=Date.now();for(let[a,b]of c.entries)b.expiresAt<=d&&c.entries.delete(a);for(;c.entries.size>=32;){let a=c.entries.keys().next().value;if(void 0===a)break;c.entries.delete(a)}c.entries.set(a,{data:b,expiresAt:d+6e4})}return b}).finally(()=>{c.inFlight.get(a)===h&&c.inFlight.delete(a)});return c.inFlight.set(a,h),h}c.d(b,{Fw:()=>g,Mx:()=>f,kn:()=>e,rC:()=>h})},30590:(a,b,c)=>{c.d(b,{o:()=>d});async function d(a,b,c){if(!b.model&&!b.thinkingLevel)return{modelDefaultChanged:!1};let d=!1;return b.model&&c.model&&b.model.provider===c.model.provider&&b.model.modelId===c.model.modelId&&(a.setDefaultModelAndProvider(c.model.provider,c.model.modelId),d=!0),b.thinkingLevel&&(c.supportsThinking||"off"!==c.thinkingLevel)&&a.setDefaultThinkingLevel(c.thinkingLevel),await a.flush(),{modelDefaultChanged:d}}},36899:(a,b,c)=>{c.d(b,{M:()=>d,c:()=>e});let d={noExtensions:!0,noSkills:!0,noPromptTemplates:!0,noThemes:!0,noContextFiles:!1,systemPrompt:" ",appendSystemPrompt:[" "],systemPromptOverride:()=>void 0,appendSystemPromptOverride:()=>[]};function e(a){return a.map(a=>a.content).join("\n\n")}},46753:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{J8:()=>k,U6:()=>m,Vj:()=>l,o2:()=>j});var e=c(28802),f=c(75430),g=c(7048),h=c(99324),i=a([e,f,g]);[e,f,g]=i.then?(await i)():i;let n="pi-web-subagents",o=`<inline:${n}>`,p=new Set(g.st),q="pi-subagents";function j(a){return{kind:"pi-web-subagent",sessionId:a.sessionId,profile:a.profile,description:a.description,status:a.status,runInBackground:a.runInBackground,createdAt:a.createdAt,...a.completedAt?{completedAt:a.completedAt}:{},...a.error?{error:a.error}:{},...a.worktreePath?{worktreePath:a.worktreePath}:{},...a.worktreeBranch?{worktreeBranch:a.worktreeBranch}:{},...a.worktreeCleanupError?{worktreeCleanupError:a.worktreeCleanupError}:{}}}function k(a){return"starting"===a.status||"running"===a.status?`Subagent ${a.sessionId} is ${a.status}.`:"completed"===a.status?a.result?.trim()||"Subagent completed without text output.":"aborted"===a.status?`Subagent ${a.sessionId} was stopped.`:"interrupted"===a.status?`Subagent ${a.sessionId} was interrupted before completion.`:`Subagent ${a.sessionId} failed: ${a.error??"Unknown error"}`}function l(a,b,c=()=>!0){return{name:n,hidden:!0,factory:d=>{let g;if(!c())return;let i=b().filter(a=>a.enabled),l=i.map(a=>a.name),m=l.length>0?l.join(", "):"none";d.registerTool((0,f.defineTool)({name:"Agent",label:"Agent",description:`Delegate a focused task to a configured subagent. Each subagent runs as a full, inspectable Pi session. Use background mode for independent work and foreground mode when the result is needed immediately.
|
|
6
6
|
|
|
7
7
|
Available agent types:
|
|
8
|
-
${(g=i.filter(a=>a.enabled),0===g.length?"No subagent profiles are currently enabled.":g.map(a=>{let b=[`Tools: ${a.tools.length>0?a.tools.join(", "):"none"}`];return a.model&&b.push(`Model: ${a.model}`),`- ${a.name}: ${a.description} (${b.join("; ")})`}).join("\n"))}`,promptSnippet:"Delegate a focused task to an inspectable subagent session",promptGuidelines:["Use Agent for a focused task that benefits from an isolated context.","Use multiple background Agent calls in the same response for independent parallel work.","Do not duplicate work already delegated to a running subagent."],executionMode:"parallel",parameters:e.Type.Object({subagent_type:e.Type.Optional(e.Type.String({description:`Configured agent profile. Available types: ${m}. Default: general-purpose.`})),prompt:e.Type.String({description:"The complete task for the subagent."}),resume:e.Type.Optional(e.Type.String({description:"Existing subagent session ID to continue instead of creating a new session."})),input_files:e.Type.Optional(e.Type.Array(e.Type.String(),{description:"UTF-8 text files under the session cwd to include with the task.",maxItems:h.Wv})),description:e.Type.String({description:"Short activity label shown in the UI."}),run_in_background:e.Type.Optional(e.Type.Boolean({description:"Return immediately and notify this session when complete."})),model:e.Type.Optional(e.Type.String({description:"Optional provider/modelId override."})),thinking:e.Type.Optional(e.Type.String({description:"Optional thinking level override."})),max_turns:e.Type.Optional(e.Type.Number({description:"Optional positive agent turn limit."})),inherit_context:e.Type.Optional(e.Type.Boolean({description:"Include the parent session's active conversation context."})),isolation:e.Type.Optional(e.Type.String({description:"Run the subagent in an isolated git worktree."}))}),async execute(b,c,d,e,f){try{let g=c.resume?.trim(),h=g?await a.resume({parentContext:f,parentToolCallId:b,sessionId:g,task:c.prompt,description:c.description,...void 0!==c.run_in_background?{runInBackground:c.run_in_background}:{},signal:d,onUpdate:a=>e?.({content:[{type:"text",text:`${a.profile}: ${a.description} (${a.status})`}],details:j(a)})}):await a.start({parentContext:f,parentToolCallId:b,profile:c.subagent_type??"general-purpose",task:c.prompt,...c.input_files?{inputFiles:c.input_files}:{},description:c.description,...void 0!==c.run_in_background?{runInBackground:c.run_in_background}:{},...c.model?{model:c.model}:{},...c.thinking?{thinking:c.thinking}:{},...c.max_turns?{maxTurns:c.max_turns}:{},...void 0!==c.inherit_context?{inheritContext:c.inherit_context}:{},..."worktree"===c.isolation?{isolation:"worktree"}:{},signal:d,onUpdate:a=>e?.({content:[{type:"text",text:`${a.profile}: ${a.description} (${a.status})`}],details:j(a)})});if(h.run.runInBackground)return h.completion.then(b=>a.notifyParent(b)).catch(a=>{console.error("[pi-web] failed to deliver subagent completion:",a instanceof Error?a.message:a)}),{content:[{type:"text",text:`Subagent started in background. Session ID: ${h.run.sessionId}. You will be notified when it completes.`}],details:j(h.run)};let i=await h.completion;return{content:[{type:"text",text:k(i)}],details:j(i),..."failed"===i.status?{isError:!0}:{}}}catch(a){return{content:[{type:"text",text:a instanceof Error?a.message:String(a)}],details:void 0,isError:!0}}}})),d.registerTool((0,f.defineTool)({name:"get_subagent_result",label:"Get agent result",description:"Check an inspectable subagent session and retrieve its latest result.",parameters:e.Type.Object({agent_id:e.Type.String({description:"Subagent session ID."}),wait:e.Type.Optional(e.Type.Boolean({description:"Wait until the subagent finishes."}))}),async execute(b,c,d){let e=await a.get(c.agent_id);if(!e)return{content:[{type:"text",text:`Subagent not found: ${c.agent_id}`}],details:void 0,isError:!0};for(;c.wait&&("starting"===e.status||"running"===e.status);)if(await new Promise((a,b)=>{let c=()=>{clearTimeout(e),b(Error("Result wait aborted"))},e=setTimeout(()=>{d?.removeEventListener("abort",c),a()},500);d?.aborted?c():d?.addEventListener("abort",c,{once:!0})}),!(e=await a.get(c.agent_id)))return{content:[{type:"text",text:`Subagent not found: ${c.agent_id}`}],details:void 0,isError:!0};return{content:[{type:"text",text:k(e)}],details:j(e),..."failed"===e.status?{isError:!0}:{}}}})),d.registerTool((0,f.defineTool)({name:"steer_subagent",label:"Steer agent",description:"Send a steering message to a currently running subagent session.",parameters:e.Type.Object({agent_id:e.Type.String({description:"Subagent session ID."}),message:e.Type.String({description:"Instruction to inject after the current tool execution."})}),async execute(b,c){try{return await a.steer(c.agent_id,c.message),{content:[{type:"text",text:`Steering message sent to ${c.agent_id}.`}],details:void 0}}catch(a){return{content:[{type:"text",text:a instanceof Error?a.message:String(a)}],details:void 0,isError:!0}}}}))}}}function m(a){let b=a.extensions.find(a=>a.path===o);if(!b?.tools.has("Agent"))return a;let c=new Set(a.extensions.filter(a=>a.path!==o).filter(a=>{let b=(a.sourceInfo?.source??"").replace(/^npm:/,"").split("@")[0],c=a.path.replaceAll("\\","/").split("/");return b===q||c.some(a=>a===q)}).filter(a=>[...p].some(b=>a.tools.has(b))).map(a=>a.path));return 0===c.size?a:{...a,extensions:a.extensions.filter(a=>!c.has(a.path)),errors:a.errors.filter(a=>!c.has(a.path)&&(a.path!==o||![...c].some(b=>[...p].some(c=>a.error===`Tool "${c}" conflicts with ${b}`))))}}d()}catch(a){d(a)}})},53303:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Ds:()=>j,J1:()=>h,eD:()=>i});var e=c(75430),f=c(76760),g=a([e]);e=(g.then?(await g)():g)[0];let k="pi-web-project-command-environment",l=`<inline:${k}>`;function h(a={}){let{agentBinDir:b=(0,f.join)((0,e.getAgentDir)(),"bin"),baseEnvironment:c=process.env,localOperations:d=(0,e.createLocalBashOperations)({shellPath:a.shellPath}),platform:g=process.platform}=a;return{exec(a,e,f){var h;let i,j,k,l=(h=function(a,b=process.platform){let c={...a};for(let a of Object.keys(c))(function(a,b){let c="win32"===b?a.toUpperCase():a;return"PORT"===c||"NODE_ENV"===c||c.startsWith("NEXT_")})(a,b)&&delete c[a];return c}(f.env??c,g),i="win32"===g?Object.keys(h).find(a=>"PATH"===a.toUpperCase())??"PATH":"PATH",j="win32"===g?";":":",(k=h[i]??"").split(j).filter(Boolean).includes(b)||(h[i]=[b,k].filter(Boolean).join(j)),h);return d.exec(a,e,{...f,env:l})}}}function i(a){return{name:k,hidden:!0,factory:b=>{let c=(0,e.createBashToolDefinition)(a.cwd);b.registerTool({...c,execute:(b,c,d,f,g)=>(0,e.createBashToolDefinition)(a.cwd,{commandPrefix:a.settings.getShellCommandPrefix(),operations:h({shellPath:a.settings.getShellPath()})}).execute(b,c,d,f,g)})}}}function j(a){let b=a.extensions.findIndex(a=>a.path===l);if(b<0)return a;let c=a.extensions.slice(0,b).find(a=>a.tools.has("bash"));return c?{...a,extensions:a.extensions.filter((a,c)=>c!==b),errors:a.errors.filter(a=>a.path!==l||a.error!==`Tool "bash" conflicts with ${c.path}`)}:a}d()}catch(a){d(a)}})},56429:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$Z:()=>K,A4:()=>J,Bp:()=>L,HG:()=>O,OF:()=>Q,Zo:()=>F,_I:()=>M,d_:()=>E,oA:()=>N,wW:()=>G,x8:()=>P});var e=c(75430),f=c(29862),g=c(55511),h=c(29021),i=c(33873),j=c(78970),k=c(28967),l=c(18904),m=c(53303),n=c(40402),o=c(72498),p=c(30590),q=c(92243),r=c(95412),s=c(71069),t=c(46753),u=c(7048),v=c(12568),w=c(27367),x=c(305),y=c(36899),z=c(21560),A=a([e,f,l,m,n,o,q,t,u,v,w,x]);[e,f,l,m,n,o,q,t,u,v,w,x]=A.then?(await A)():A;let R=new Set(["agent_end","agent_settled","auto_compaction_end","compaction_end"]),S=function(a=process.env.PI_WEB_IDLE_TIMEOUT_MS){if(void 0!==a&&""!==a.trim()){let b=Number(a);if(Number.isFinite(b)&&b>=0&&b<=0x7fffffff)return b;console.warn(`[pi-web] invalid PI_WEB_IDLE_TIMEOUT_MS "${a}", falling back to 10 minutes`)}return 6e5}(),T=new Set(["fork","clone"]),U=new Set(["get_state","get_session_stats","get_last_assistant_text","get_tools","get_commands","extension_ui_response","extension_ui_input"]),V=["read","bash","powershell","edit","write","grep","find","ls"],W=new Set(["off","minimal","low","medium","high","xhigh","max"]);class X extends e.Theme{constructor(){super({muted:"",text:"",thinkingXhigh:"",searchMatchText:""},{selectedBg:""},"truecolor")}fg(...[,a]){return a}bg(...[,a]){return a}bold(a){return a}italic(a){return a}underline(a){return a}inverse(a){return a}strikethrough(a){return a}getFgAnsi(){return""}getBgAnsi(){return""}getThinkingBorderColor(){return a=>a}getBashModeBorderColor(){return a=>a}}let Y=new X,Z=new f.KeybindingsManager(f.TUI_KEYBINDINGS);function B(a,b){if(0===b.length)return[];let c=new Set(V),d=(0,x.wQ)(b,a.settingsManager.getDefaultTools()),e=a.getAllTools().map(a=>a.name).filter(a=>!c.has(a));return[...new Set([...d,...e])]}class ${constructor(a,b={}){this.inner=a,this.listeners=[],this.activeToolEvents=new Map,this.pendingUiResponses=new Map,this.pendingUiRequests=new Map,this.activeCustomUis=new Map,this.extensionUiAbortController=new AbortController,this.extensionStatuses=new Map,this.extensionWidgets=new Map,this.activeExtensionWidgets=new Map,this.extensionWidgetGenerations=new Map,this.extensionWidgetsResetting=!1,this.pendingPromptCount=0,this.activeMutatingCommands=0,this.sessionReplacement=null,this.agentRunNeedsCompletion=!1,this.promptAdmissionTail=Promise.resolve(),this.extensionsBound=!1,this.extensionBindingPromise=null,this.extensionBindingError=null,this.unsubscribe=null,this.idleTimer=null,this.onDestroyCallback=null,this.shutdownPromise=null,this.sessionShutdownEmitted=!1,this.forceShutdownOnIdle=!1,this._alive=!0,this.exactSystemPrompt=b.exactSystemPrompt,this.chatOnly=b.chatOnly??!1,this.onAgentRunComplete=b.onAgentRunComplete,this.suppressCompletionNotifications=b.suppressCompletionNotifications??!1,this.installExactSystemPromptContinuation(),this.applyExactSystemPrompt()}get sessionId(){return this.inner.sessionId}get sessionFile(){return this.inner.sessionFile??""}get cwd(){return this.inner.sessionManager.getCwd()}get streamingMessage(){return this.inner.agent.state?.streamingMessage}get isStreaming(){return this.inner.isStreaming}isAlive(){return this._alive}isRunning(){return this._alive&&(this.pendingPromptCount>0||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)}isChatOnly(){return this.chatOnly}hasSuppressedCompletionNotifications(){return this.suppressCompletionNotifications}start(){this.unsubscribe=this.inner.subscribe(a=>{"agent_start"===a.type&&(this.agentRunNeedsCompletion=!0),"agent_end"===a.type&&(0,n.mD)();let b=a.toolCallId;"string"==typeof b&&("tool_execution_start"===a.type||"tool_execution_update"===a.type?this.activeToolEvents.set(b,a):"tool_execution_end"===a.type&&this.activeToolEvents.delete(b)),R.has(a.type)&&this.resetIdleTimer(),this.emit(a),"agent_settled"===a.type&&this.notifyAgentRunCompleteIfIdle()}),this.resetIdleTimer()}notifyAgentRunCompleteIfIdle(){if(!(!this.agentRunNeedsCompletion||this.isRunning())&&(this.agentRunNeedsCompletion=!1,!this.suppressCompletionNotifications))try{this.onAgentRunComplete?.(this.sessionId)}catch(a){console.error("[pi-web] completion listener failed:",a instanceof Error?a.message:a)}}beginExtensionBinding(){this.ensureExtensionsBound().catch(a=>{console.error("[pi-web] failed to dispatch session_start to extensions:",a instanceof Error?a.message:a)})}async waitUntilReady(){await this.waitForExtensionsBound()}ensureExtensionsBound(){return this.extensionsBound?(this.applyExactSystemPrompt(),Promise.resolve()):(this.extensionBindingPromise||(this.extensionBindingError=null,this.extensionBindingPromise=(async()=>{if(!this._alive)return;let a=this.createExtensionUiContext();if("function"==typeof this.inner.bindExtensions){let b=this.inner.bindExtensions;await b.call(this.inner,{uiContext:a,mode:"rpc",commandContextActions:this.createExtensionCommandContextActions(),shutdownHandler:()=>this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"notify",notifyType:"warning",message:"Extension requested shutdown, but shutdown is not supported in AgentStudio."}),onError:a=>this.emit({type:"extension_error",extensionPath:a.extensionPath,event:a.event,error:a.error})})}else this.inner.extensionRunner.setUIContext?.(a,"rpc");this.extensionsBound=!0,this.applyExactSystemPrompt(),console.log(`[pi-web] session_start dispatched to extensions for session ${this.inner.sessionId}`)})().catch(a=>{throw this.extensionBindingError=a,a})),this.extensionBindingPromise)}async waitForExtensionsBound(){try{this.extensionBindingPromise&&await this.extensionBindingPromise}catch(a){throw a instanceof Error?a:Error(String(a))}if(this.extensionBindingError)throw this.extensionBindingError instanceof Error?this.extensionBindingError:Error(String(this.extensionBindingError))}shouldWaitForExtensions(a){return"prompt"===a||"steer"===a||"follow_up"===a||"get_commands"===a||"get_state"===a}async withFinalIdleReset(a){try{return await a()}finally{this.resetIdleTimer()}}applyExactSystemPrompt(){this.exactSystemPrompt&&this.inner.agent.state&&(this.inner.agent.state.systemPrompt=this.exactSystemPrompt())}installExactSystemPromptContinuation(){if(!this.exactSystemPrompt)return;let a=this.inner.agent.prepareNextTurnWithContext;this.inner.agent.prepareNextTurnWithContext=async(b,c)=>{let d=await a?.(b,c);return{...d,context:{...d?.context??b.context,systemPrompt:this.exactSystemPrompt()}}}}setActiveToolSelection(a){this.inner.setActiveToolsByName(B(this.inner,a)),this.applyExactSystemPrompt()}emit(a){for(let b of this.listeners)try{b(a)}catch(b){console.error(`[pi-web] failed to deliver ${a.type} event:`,b instanceof Error?b.message:b)}}async acquirePromptAdmission(){let a,b=this.promptAdmissionTail;return this.promptAdmissionTail=new Promise(b=>{a=b}),await b,a}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this._alive&&0!==S&&(this.isRunning()||(this.forceShutdownOnIdle=!1),this.idleTimer=setTimeout(()=>{!this.forceShutdownOnIdle&&(this.isRunning()||(0,r.Vj)({sessionId:this.sessionId,sessionFile:this.sessionFile||void 0}))?this.resetIdleTimer():this.shutdown().catch(a=>{console.error("[pi-web] failed to shut down idle session:",a instanceof Error?a.message:a)})},S))}persistBashOnlySession(){let a=this.inner.sessionManager,b=a.getSessionFile();if(!b||(0,h.existsSync)(b))return;let c=a.getHeader();if(!c)return;let d=[c,...a.getEntries()].map(a=>JSON.stringify(a)).join("\n")+"\n";(0,h.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"}),a.flushed=!0,(0,n.O8)(this.inner.sessionId,b)}onEvent(a){for(let b of(this.listeners.push(a),this.pendingUiRequests.values()))a(b);for(let b of this.activeToolEvents.values())a(b);return()=>{let b=this.listeners.indexOf(a);-1!==b&&this.listeners.splice(b,1)}}onDestroy(a){this.onDestroyCallback=a}async withSessionReplacement(a,b){if(this.sessionReplacement)throw Error("Session is already being copied");this.sessionReplacement=a;try{return await b()}finally{this._alive&&(this.sessionReplacement=null)}}isSessionRunningForReplacement(){return this.inner.isBashRunning||this.inner.isStreaming||this.inner.isCompacting||this.pendingPromptCount>0}async shutdownAfterSessionReplacement(a){try{await this.shutdown()}catch(b){console.error(`[pi-web] ${a} succeeded, but source session shutdown failed:`,b instanceof Error?b.message:b)}}async send(a){let b=a.type,c=U.has(b);if(this.sessionReplacement&&!c)throw Error("Session is being copied to a new session");if(T.has(b)&&this.activeMutatingCommands>0)throw Error(`Cannot ${b} while another session command is running`);let d=!c;d&&(this.activeMutatingCommands+=1);try{if("get_state"!==b&&this.resetIdleTimer(),this.shouldWaitForExtensions(b)&&await this.waitForExtensionsBound(),this.sessionReplacement&&!c)throw Error("Session is being copied to a new session");if("prompt"===b||"steer"===b||"follow_up"===b){let b=(0,j.kc)(a.images);if(b)throw Error(b)}switch(b){case"prompt":{let b=await this.acquirePromptAdmission();try{let b,c,d;if(this.inner.isBashRunning)throw Error("Cannot send a prompt while a shell command is running");this.extensionUiAbortController.signal.aborted&&(this.extensionUiAbortController=new AbortController);let e=a.images,f=a.streamingBehavior,g=!1,h=!1,i=!1,j=new Promise((a,d)=>{b=()=>{g=!0,this.agentRunNeedsCompletion=!0,h||(h=!0,a())},c=a=>{h||(h=!0,d(a))}}),k=()=>{i||(i=!0,this.pendingPromptCount=Math.max(0,this.pendingPromptCount-1),this.resetIdleTimer(),this.notifyAgentRunCompleteIfIdle())};this.pendingPromptCount+=1;try{d=this.inner.prompt(a.message,{...e?.length?{images:e}:{},...f?{streamingBehavior:f}:{},source:"rpc",preflightResult:a=>{a&&(this.applyExactSystemPrompt(),b())}})}catch(a){throw k(),a}return d.then(()=>{b(),k(),f||this.emit({type:"prompt_done"})},a=>{c(a),k(),(0,n.mD)(),g&&(this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),f||this.emit({type:"prompt_done"}))}).catch(a=>{console.error("[pi-web] prompt completion handler failed:",a instanceof Error?a.message:a)}),await j,null}finally{b()}}case"abort":this.forceShutdownOnIdle=!0,this.extensionUiAbortController.abort(new DOMException("Extension UI cancelled by Stop","AbortError"));try{return await this.withFinalIdleReset(()=>this.inner.abort()),null}finally{this.isRunning()||(this.forceShutdownOnIdle=!1)}case"get_state":{let a=this.inner.model,b=this.inner.getContextUsage();return{sessionId:this.inner.sessionId,sessionFile:this.inner.sessionFile??"",isStreaming:this.inner.isStreaming,isPromptRunning:this.pendingPromptCount>0,isBashRunning:this.inner.isBashRunning,isCompacting:this.inner.isCompacting,autoCompactionEnabled:this.inner.autoCompactionEnabled,autoRetryEnabled:this.inner.autoRetryEnabled,model:a?{id:a.id,provider:a.provider}:void 0,messageCount:0,pendingMessageCount:this.inner.pendingMessageCount,queuedMessages:{steering:[...this.inner.getSteeringMessages()],followUp:[...this.inner.getFollowUpMessages()]},contextUsage:b?{percent:b.percent,contextWindow:b.contextWindow,tokens:b.tokens}:null,systemPrompt:this.inner.agent.state?.systemPrompt??"",thinkingLevel:this.inner.agent.state?.thinkingLevel??"off",extensionStatuses:this.getExtensionStatuses(),extensionWidgets:this.getExtensionWidgets()}}case"set_model":{let{provider:b,modelId:c}=a,d=this.inner.modelRuntime.getModel(b,c);if(d||(await this.inner.modelRuntime.refresh({allowNetwork:!1}),d=this.inner.modelRuntime.getModel(b,c)),!d)throw Error(`Model not found: ${b}/${c}`);return await this.inner.setModel(d),(0,k.kn)(),(0,n.mD)(),{id:d.id,provider:d.provider}}case"fork":if(this.isSessionRunningForReplacement())throw Error("Cannot fork while the session is running");return this.withSessionReplacement("fork",async()=>{let b,c,d=a.entryId,f=this.inner.sessionManager,g=this.inner.sessionFile;if(!f.isPersisted())return{cancelled:!0};if(!g)throw Error("Persisted session is missing a session file");let i=f.getEntry(d);if(!i)throw Error("Invalid entry ID for forking");let j=f.getSessionDir();if(i.parentId){let a=(c=e.SessionManager.open(g,j)).createBranchedSession(i.parentId);if(!a)throw Error("Failed to create forked session");b=a}else b=(c=e.SessionManager.create(f.getCwd(),j,{parentSession:g})).getSessionFile();if(!(0,h.existsSync)(b)){let a=c.getHeader();if(!a)throw Error("Forked session is missing a session header");let d=[a,...c.getEntries()].map(a=>JSON.stringify(a)).join("\n")+"\n";(0,h.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"})}let k=c.getSessionId();return(0,n.O8)(k,b),(0,n.mD)(),await this.shutdownAfterSessionReplacement("fork"),{cancelled:!1,newSessionId:k}});case"fork_branch":{if(this.isSessionRunningForReplacement())throw Error("Cannot fork while the session is running");let b=a.entryId,c=this.inner.sessionManager,d=this.inner.sessionFile;if(!c.isPersisted())return{cancelled:!0};if(!d)throw Error("Persisted session is missing a session file");if(!c.getEntry(b))throw Error("Invalid entry ID for forking");let f=c.getSessionDir(),g=e.SessionManager.open(d,f).createBranchedSession(b);if(!g)throw Error("Failed to create forked session");let h=e.SessionManager.open(g,f).getSessionId();return(0,n.O8)(h,g),(0,n.mD)(),{cancelled:!1,newSessionId:h}}case"clone":{if(this.isSessionRunningForReplacement())throw Error("Cannot clone while the session is running");let b=this.inner.sessionManager,c=this.inner.sessionFile,d="string"==typeof a.leafId?a.leafId:b.getLeafId(),f=d&&b.getBranch(d).some(a=>"message"===a.type&&"assistant"===a.message.role);if(!b.isPersisted()||!d||!f||!c||!(0,h.existsSync)(c))return{cancelled:!0};return this.withSessionReplacement("clone",async()=>{let a=b.getSessionDir(),f=e.SessionManager.open(c,a).createBranchedSession(d);if(!f||!(0,h.existsSync)(f))throw Error("Failed to clone current session branch");let g=e.SessionManager.open(f,a).getSessionId();return(0,n.O8)(g,f),(0,n.mD)(),await this.shutdownAfterSessionReplacement("clone"),{cancelled:!1,newSessionId:g}})}case"navigate_tree":if(this.inner.isBashRunning)throw Error("Cannot navigate while a shell command is running");return{cancelled:(await this.inner.navigateTree(a.targetId,{})).cancelled};case"set_thinking_level":{let b=a.level;return this.inner.setThinkingLevel(b),"xhigh"===b&&this.inner.model?.compat?.thinkingFormat==="deepseek"&&this.inner.agent?.state&&(this.inner.agent.state.thinkingLevel="xhigh"),(0,n.mD)(),null}case"compact":try{return await this.withFinalIdleReset(()=>this.inner.compact(a.customInstructions))}finally{(0,n.mD)()}case"set_session_name":{let b=a.name?.trim();if(!b)throw Error("Session name cannot be empty");return this.inner.setSessionName(b),(0,n.mD)(),null}case"get_session_stats":return{...this.inner.getSessionStats(),sessionName:this.inner.sessionManager.getSessionName()};case"get_last_assistant_text":return{text:this.inner.getLastAssistantText()??""};case"set_auto_compaction":return this.inner.setAutoCompactionEnabled(a.enabled),null;case"clear_queue":return this.inner.clearQueue();case"steer":{let b=a.images;return await this.inner.steer(a.message,b?.length?b:void 0),null}case"follow_up":{let b=a.images;return await this.inner.followUp(a.message,b?.length?b:void 0),null}case"get_tools":{let a=this.inner.getAllTools(),b=new Set(this.inner.getActiveToolNames());return a.map(a=>({...a,active:b.has(a.name)}))}case"get_commands":{let a=[];for(let b of this.inner.extensionRunner.getRegisteredCommands())a.push({name:b.invocationName,description:b.description,source:"extension",sourceInfo:b.sourceInfo});for(let b of this.inner.promptTemplates)a.push({name:b.name,description:b.description,source:"prompt",sourceInfo:b.sourceInfo});for(let b of this.inner.resourceLoader.getSkills().skills)a.push({name:`skill:${b.name}`,description:b.description,source:"skill",sourceInfo:b.sourceInfo});return{commands:a}}case"set_tools":{let b=a.toolNames;return this.setActiveToolSelection(b),null}case"reload":{this.extensionUiAbortController.signal.aborted&&(this.extensionUiAbortController=new AbortController);let a=this.inner.getActiveToolNames();return await this.waitForExtensionsBound(),this.extensionStatuses.clear(),this.resetExtensionWidgetsForReload(),this.syncProjectTrust(),await this.inner.reload(),this.setActiveToolSelection(a),"function"!=typeof this.inner.bindExtensions&&this.inner.extensionRunner.setUIContext?.(this.createExtensionUiContext(),"rpc"),this.applyExactSystemPrompt(),(0,k.kn)(),{success:!0}}case"abort_compaction":return this.inner.abortCompaction(),null;case"extension_ui_response":return this.resolveExtensionUiResponse(a),null;case"extension_ui_input":return this.handleExtensionUiInput(a.id,a.data),null;case"set_auto_retry":return this.inner.setAutoRetryEnabled(a.enabled),null;case"bash":{if(this.pendingPromptCount>0||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)throw Error("Cannot run a shell command while the session is busy");let b=this.inner.executeBash(a.command,void 0,{excludeFromContext:a.excludeFromContext,operations:(0,m.J1)({shellPath:this.inner.settingsManager.getShellPath()})});try{let a=await b;return this.persistBashOnlySession(),a}finally{this.resetIdleTimer(),(0,n.mD)()}}case"abort_bash":return this.forceShutdownOnIdle=!0,this.inner.abortBash(),null;default:throw Error(`Unsupported command: ${b}`)}}finally{d&&(this.activeMutatingCommands=Math.max(0,this.activeMutatingCommands-1))}}destroy(){if(!this._alive)return;for(let a of(this._alive=!1,this.idleTimer&&clearTimeout(this.idleTimer),this.inner.isBashRunning&&this.inner.abortBash(),this.unsubscribe?.(),this.pendingUiResponses.values()))a.cancel();for(let a of Array.from(this.activeCustomUis.keys()))this.closeCustomUi(a,void 0);this.pendingUiResponses.clear(),this.pendingUiRequests.clear(),this.activeToolEvents.clear(),this.clearExtensionWidgets(!1);let a=()=>{try{this.inner.dispose()}finally{this.onDestroyCallback?.()}};if(this.sessionShutdownEmitted)return void a();this.sessionShutdownEmitted=!0;let b=this.inner.extensionRunner?.emit;"function"!=typeof b?a():(async()=>b.call(this.inner.extensionRunner,{type:"session_shutdown",reason:"quit"}))().catch(a=>{console.error("[pi-web] session_shutdown before dispose failed:",a instanceof Error?a.message:a)}).finally(a)}async shutdown(){return this.shutdownPromise?this.shutdownPromise:this._alive?(this.shutdownPromise=(async()=>{try{try{await this.waitForExtensionsBound()}catch(a){console.error("[pi-web] extension binding failed before session shutdown:",a instanceof Error?a.message:a)}this.sessionShutdownEmitted||(this.sessionShutdownEmitted=!0,await this.inner.extensionRunner.emit?.({type:"session_shutdown",reason:"quit"}))}finally{this.destroy()}})(),this.shutdownPromise):void 0}resolveExtensionUiResponse(a){let b=this.pendingUiResponses.get(a.id);b&&b.resolve(a)}getExtensionStatuses(){return Array.from(this.extensionStatuses,([a,b])=>({key:a,text:b}))}getExtensionWidgets(){return Array.from(this.extensionWidgets.values())}nextExtensionWidgetGeneration(a){let b=(this.extensionWidgetGenerations.get(a)??0)+1;return this.extensionWidgetGenerations.set(a,b),b}disposeExtensionWidgetComponent(a){if(!a||"object"!=typeof a&&"function"!=typeof a)return;let b=a.dispose;if("function"==typeof b)try{b.call(a)}catch{}}emitExtensionWidgetClear(a){this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setWidget",widgetKey:a,widgetLines:void 0,widgetPlacement:void 0})}clearExtensionWidget(a,b=!0){let c=this.nextExtensionWidgetGeneration(a),d=this.activeExtensionWidgets.get(a);return this.activeExtensionWidgets.delete(a),this.extensionWidgets.delete(a),d&&this.disposeExtensionWidgetComponent(d.component),this.extensionWidgetGenerations.get(a)!==c||b&&this.emitExtensionWidgetClear(a),c}clearExtensionWidgets(a){for(let b of new Set([...this.extensionWidgets.keys(),...this.activeExtensionWidgets.keys()]))this.clearExtensionWidget(b,a)}resetExtensionWidgetsForReload(){this.extensionWidgetsResetting=!0;try{for(let a of[...this.activeExtensionWidgets.keys()])this.clearExtensionWidget(a);this.extensionWidgets.clear()}finally{this.extensionWidgetsResetting=!1}}emitExtensionWidgetError(a,b){this.emit({type:"extension_error",extensionPath:`extension-widget:${a}`,event:"setWidget",error:b instanceof Error?b.message:String(b)})}failExtensionWidget(a,b,c,d,e){if(this.extensionWidgetGenerations.get(a)!==b)return void this.disposeExtensionWidgetComponent(e);let f=this.activeExtensionWidgets.get(a),g=!d;f?.generation===b?(g=f.rendered||!f.clearEmitted,this.activeExtensionWidgets.delete(a),this.disposeExtensionWidgetComponent(f.component)):this.disposeExtensionWidgetComponent(e),this.extensionWidgetGenerations.get(a)!==b||(this.extensionWidgets.delete(a),g&&this.emitExtensionWidgetClear(a)),this.emitExtensionWidgetError(a,c)}renderExtensionWidget(a){let b;if(this.activeExtensionWidgets.get(a.key)!==a||this.extensionWidgetGenerations.get(a.key)!==a.generation)return;try{b=a.component.render(s.p1)}catch(b){this.failExtensionWidget(a.key,a.generation,b,a.clearEmitted);return}if(!Array.isArray(b)||!b.every(a=>"string"==typeof a))return void this.failExtensionWidget(a.key,a.generation,Error("Extension widget render must return string[]"),a.clearEmitted);if(this.activeExtensionWidgets.get(a.key)!==a||this.extensionWidgetGenerations.get(a.key)!==a.generation)return;let c=b;this.extensionWidgets.set(a.key,{key:a.key,lines:c,placement:a.placement}),a.rendered=!0,this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setWidget",widgetKey:a.key,widgetLines:c,widgetPlacement:a.placement})}setExtensionWidgetFactory(a,b,c){let d,e=this.extensionWidgets.has(a)||this.activeExtensionWidgets.has(a),f=this.clearExtensionWidget(a,e);if(this.extensionWidgetGenerations.get(a)!==f)return;let g=(0,s.TQ)(()=>{let b=this.activeExtensionWidgets.get(a);b?.generation===f&&this.renderExtensionWidget(b)},s.p1);try{d=b(g,Y)}catch(b){this.failExtensionWidget(a,f,b,e);return}if(this.extensionWidgetGenerations.get(a)!==f)return void this.disposeExtensionWidgetComponent(d);if(!d||"object"!=typeof d&&"function"!=typeof d||"function"!=typeof d.render)return void this.failExtensionWidget(a,f,Error("Extension widget factory must return a component with render(width)"),e,d);let h={key:a,component:d,placement:c?.placement??"aboveEditor",generation:f,clearEmitted:e,rendered:!1};this.activeExtensionWidgets.set(a,h),this.renderExtensionWidget(h)}getCustomUiWidth(a){if(!a||"object"!=typeof a)return s.p1;let b=a.overlayOptions,c="function"==typeof b?b():b;if(!c||"object"!=typeof c)return s.p1;let d=c.width;return"number"==typeof d&&Number.isFinite(d)?Math.max(40,Math.min(140,Math.round(d))):92}emitCustomUiRender(a,b){let c;try{c=b.component.render(b.width)}catch(a){c=[`Extension custom UI render failed: ${a instanceof Error?a.message:String(a)}`]}let d={type:"extension_ui_request",id:a,method:"custom",lines:c};this.pendingUiRequests.set(a,d),this.emit(d)}closeCustomUi(a,b){let c=this.activeCustomUis.get(a);if(c&&!c.settled){c.settled=!0,this.activeCustomUis.delete(a),this.pendingUiRequests.delete(a);try{c.component.dispose?.()}catch{}this.emit({type:"extension_ui_request",id:a,method:"custom",lines:[],closed:!0}),c.resolve(b)}}handleExtensionUiInput(a,b){let c=this.activeCustomUis.get(a);if(c&&"string"==typeof b)try{c.component.handleInput?.(b),this.activeCustomUis.has(a)&&this.emitCustomUiRender(a,c)}catch(b){this.closeCustomUi(a,void 0),this.emit({type:"extension_error",extensionPath:`custom-ui:${a}`,event:"custom_ui_input",error:b instanceof Error?b.message:String(b)})}}requestExtensionCustomUi(a,b){if("function"!=typeof a)return Promise.resolve(void 0);let c=this.extensionUiAbortController.signal;if(c.aborted)return Promise.reject(c.reason);let d=(0,g.randomUUID)(),e=this.getCustomUiWidth(b);return new Promise((b,f)=>{let g=!1,h=(0,s.TQ)(()=>{let a=this.activeCustomUis.get(d);a&&this.emitCustomUiRender(d,a)},e),i=a=>{g||(g=!0,c.removeEventListener("abort",k),c.aborted?f(c.reason):b(a))},j=a=>{this.activeCustomUis.has(d)?this.closeCustomUi(d,a):i(a)},k=()=>j(void 0);c.addEventListener("abort",k,{once:!0}),Promise.resolve().then(()=>g?void 0:a(h,Y,Z,j)).then(a=>{if(g){try{a?.dispose?.()}catch{}return}if(!a||"object"!=typeof a||"function"!=typeof a.render)return void i(void 0);let b={component:a,width:e,resolve:a=>i(a),settled:!1};this.activeCustomUis.set(d,b),this.emitCustomUiRender(d,b)}).catch(a=>{g||(this.emit({type:"extension_error",extensionPath:`custom-ui:${d}`,event:"custom_ui",error:a instanceof Error?a.message:String(a)}),i(void 0))})})}requestExtensionUi(a,b,c,d,e){if(e?.aborted)return Promise.resolve(b);let f=this.extensionUiAbortController.signal;if(f.aborted)return Promise.reject(f.reason);let h=e?AbortSignal.any([e,f]):f,i=(0,g.randomUUID)(),j={type:"extension_ui_request",id:i,...a,...d?{timeout:d,expiresAt:Date.now()+d}:{}};return new Promise((a,e)=>{let g,k=!1,l=()=>{g&&clearTimeout(g),h.removeEventListener("abort",n),this.pendingUiRequests.delete(i),this.pendingUiResponses.delete(i),this.emit({type:"extension_ui_closed",id:i})},m=b=>{k||(k=!0,l(),f.aborted?e(f.reason):a(b))},n=()=>m(b);d&&(g=setTimeout(()=>m(b),d)),h.addEventListener("abort",n,{once:!0}),this.pendingUiRequests.set(i,j),this.pendingUiResponses.set(i,{resolve:a=>m(c(a)),cancel:()=>m(b)}),this.emit(j)})}createExtensionUiContext(){return{select:(a,b,c)=>this.requestExtensionUi({method:"select",title:a,options:b,...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),confirm:(a,b,c)=>this.requestExtensionUi({method:"confirm",title:a,message:b,...c?.timeout?{timeout:c.timeout}:{}},!1,a=>"confirmed"in a&&a.confirmed,c?.timeout,c?.signal),input:(a,b,c)=>this.requestExtensionUi({method:"input",title:a,...void 0!==b?{placeholder:b}:{},...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),editor:(a,b,c)=>this.requestExtensionUi({method:"editor",title:a,...void 0!==b?{prefill:b}:{},...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),notify:(a,b)=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"notify",message:a,notifyType:b})},onTerminalInput:()=>()=>{},setStatus:(a,b)=>{void 0===b?this.extensionStatuses.delete(a):this.extensionStatuses.set(a,b),this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setStatus",statusKey:a,statusText:b})},setWorkingMessage:()=>{},setWorkingVisible:()=>{},setWorkingIndicator:()=>{},setHiddenThinkingLabel:()=>{},setWidget:(a,b,c)=>{if(!this._alive||this.extensionWidgetsResetting)return;if("function"==typeof b)return void this.setExtensionWidgetFactory(a,b,c);if(void 0!==b&&!Array.isArray(b))return;if(void 0===b)return void this.clearExtensionWidget(a);let d=this.activeExtensionWidgets.has(a)?this.clearExtensionWidget(a):this.nextExtensionWidgetGeneration(a);this.extensionWidgetGenerations.get(a)===d&&(this.extensionWidgets.set(a,{key:a,lines:b,placement:c?.placement??"aboveEditor"}),this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setWidget",widgetKey:a,widgetLines:b,widgetPlacement:c?.placement}))},setFooter:()=>{},setHeader:()=>{},setTitle:a=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setTitle",title:a})},custom:(a,b)=>this.requestExtensionCustomUi(a,b),pasteToEditor:a=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"set_editor_text",text:a})},setEditorText:a=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"set_editor_text",text:a})},getEditorText:()=>"",addAutocompleteProvider:()=>{},setEditorComponent:()=>{},getEditorComponent:()=>void 0,get theme(){return Y},getAllThemes:()=>[],getTheme:()=>void 0,setTheme:()=>({success:!1,error:"Theme switching is not supported in AgentStudio extension UI yet"}),getToolsExpanded:()=>!1,setToolsExpanded:()=>{}}}createExtensionCommandContextActions(){return{waitForIdle:async()=>{let a=this.inner.agent;await a.waitForIdle?.()},newSession:async()=>({cancelled:!0}),fork:async()=>({cancelled:!0}),navigateTree:async(a,b)=>({cancelled:(await this.inner.navigateTree(a,{summarize:b?.summarize})).cancelled}),switchSession:async()=>({cancelled:!0}),reload:async()=>{this.extensionStatuses.clear(),this.resetExtensionWidgetsForReload(),this.syncProjectTrust(),await this.inner.reload({beforeSessionStart:()=>{this.inner.extensionRunner.setUIContext?.(this.createExtensionUiContext(),"rpc")}}),this.applyExactSystemPrompt()}}}syncProjectTrust(){let a=(0,o.Y1)(this.cwd,(0,e.getAgentDir)());this.inner.settingsManager.setProjectTrusted(a.trusted)}}function C(){if(!globalThis.__piSessions){globalThis.__piSessions=new Map;let a=()=>{let a=Array.from(globalThis.__piSessions?.values()??[]);Promise.allSettled(a.map(a=>a.shutdown()))};process.once("exit",()=>globalThis.__piSessions?.forEach(a=>a.destroy())),process.once("SIGINT",a),process.once("SIGTERM",a)}return globalThis.__piSessions}function D(a){let b=C(),c=a.sessionId;a.sessionFile&&(0,n.O8)(c,a.sessionFile),a.onDestroy(()=>b.delete(c)),b.set(c,a),a.start(),a.isChatOnly()||a.beginExtensionBinding()}let _=(0,v.s)({getSession:a=>C().get(a),registerSession:(a,b)=>{let c=new $(a,{...b?.exactSystemPrompt!==void 0?{exactSystemPrompt:()=>b.exactSystemPrompt}:{},chatOnly:b?.chatOnly,suppressCompletionNotifications:!0});D(c)},reopenSession:async(a,b)=>(await Q(a,b,void 0)).session,resolveSessionPath:n.os,invalidateSessionList:n.mD,isBuiltInSubagentsEnabled:w.N});function E(a){return _.get(a)}function F(a,b){return _.steer(a,b)}function G(a){return _.abort(a)}function H(a){let b=(0,i.resolve)(a);try{return(0,h.realpathSync)(b)}catch{return b}}function I(){return globalThis.__piStartingSessionCwds||(globalThis.__piStartingSessionCwds=new Map),globalThis.__piStartingSessionCwds}function J(a){return C().get(a)}async function K(a,b,c){let d=(0,z.vw)(c),f=J(a);if(!f?.isAlive()){if(!b)throw Error("Session not found");let c=e.SessionManager.open(b,void 0);if((0,u.ph)(c.getEntries()))throw Error("Subagent tool selection is fixed by its profile");(0,z.b5)(c,d),(0,n.mD)();let f=await Q(a,b,void 0);return{session:f.session,sessionId:f.realSessionId,recreated:!1}}if(f.isRunning())throw Error("Cannot change tools while the session is running");if((0,u.ph)(f.inner.sessionManager.getEntries()))throw Error("Subagent tool selection is fixed by its profile");let i="function"!=typeof f.isChatOnly||"function"!=typeof f.setActiveToolSelection||f.isChatOnly()!==(0===d.length);if((0,z.b5)(f.inner.sessionManager,d),(0,n.mD)(),!i)return f.setActiveToolSelection(d),{session:f,sessionId:a,recreated:!1};let j=f.sessionFile&&(0,h.existsSync)(f.sessionFile)?f.sessionFile:void 0,k=f.cwd,l=f.inner.model,m=f.inner.agent.state?.thinkingLevel;if(await f.shutdown(),j){let b=await Q(a,j,void 0);return{session:b.session,sessionId:b.realSessionId,recreated:!0}}let o=await Q(`__recreate__${(0,g.randomUUID)()}`,"",k,{toolNames:d,...l?{initialModel:{provider:l.provider,modelId:l.id}}:{},allowInitialModelFallback:!0,...m&&W.has(m)?{thinkingLevel:m}:{}});return{session:o.session,sessionId:o.realSessionId,recreated:!0}}function L(a={}){let b=[];for(let c of C().values()){if("function"!=typeof c.isAlive||!c.isAlive())continue;let d=c.inner?.sessionManager;if(!d)continue;let e=d.getHeader(),f=d.getEntries(),g=f.filter(a=>"message"===a.type),i=g.find(a=>"user"===a.message.role),j=d.getSessionFile()??c.sessionFile,k=!!(j&&(0,h.existsSync)(j)),l=(0,u.$u)(f,e?.id??c.sessionId,j??"");if(!k&&!a.includeTransient&&(!c.isRunning()||!i))continue;let m=e?.timestamp??f[0]?.timestamp??new Date().toISOString(),n=new Date(m).getTime(),o=Number.isNaN(n)?Date.now():n;for(let a of g){let b=function(a){if("user"!==a.message.role&&"assistant"!==a.message.role)return;if("number"==typeof a.message.timestamp)return a.message.timestamp;let b=new Date(a.timestamp).getTime();return Number.isNaN(b)?void 0:b}(a);void 0!==b&&(o=Math.max(o,b))}b.push({path:j??"",id:e?.id??c.sessionId,cwd:e?.cwd??c.cwd,name:d.getSessionName(),created:m,modified:new Date(o).toISOString(),messageCount:g.length,firstMessage:i&&function(a){if("bashExecution"===a.message.role)return"";let b=a.message.content;return"string"==typeof b?b:b.map(a=>"text"===a.type?a.text:"").filter(Boolean).join(" ")}(i)||"(no messages)",...l?{parentSessionId:l.parentSessionId,relation:{kind:"subagent",parentSessionId:l.parentSessionId,profile:l.profile,description:l.description,status:c.isRunning()?"running":l.status}}:{},transient:!k})}return b}function M(a){let b=H(a);return!!I().has(b)||Array.from(C().values()).some(a=>H(a.cwd)===b&&a.isRunning())}async function N(a){let b=H(a),c=Array.from(C().values()).filter(a=>H(a.cwd)===b);return await Promise.all(c.map(a=>a.shutdown())),c.length}function O(){let a=new Set;for(let[b,c]of C())c.isRunning()&&a.add(c.sessionId||b);return[...a]}function P(){let a=new Set;for(let[b,c]of C())c.isRunning()&&c.hasSuppressedCompletionNotifications()&&a.add(c.sessionId||b);return[...a]}async function Q(a,b,c,d={}){let f,g,h,{initialModel:i,allowInitialModelFallback:j,thinkingLevel:r}=d,s=void 0===d.toolNames?void 0:(0,z.vw)(d.toolNames),v=C(),x=(globalThis.__piStartLocks||(globalThis.__piStartLocks=new Map),globalThis.__piStartLocks),A=v.get(a);if(A?.isAlive())return{session:A,realSessionId:a};let E=x.get(a);if(E)return E;if(b)f=e.SessionManager.open(b,void 0);else{if(!c)throw Error("cwd is required for a new session");f=e.SessionManager.create(c,void 0)}let F=f.getCwd(),G=b?(0,u.ph)(f.getEntries()):null,J=G?void 0:(0,z.dS)(f.getEntries()),K=G?.tools??J??s;G||void 0!==J||void 0===s||(0,z.b5)(f,s);let L=!!(G?.loadExtensions||G?.loadSkills),M=K?.length===0&&!L,N=(g=I(),h=H(F),g.set(h,(g.get(h)??0)+1),()=>{let a=(g.get(h)??1)-1;a>0?g.set(h,a):g.delete(h)}),O=(async()=>{M||(0,e.initTheme)();let a=(0,e.getAgentDir)(),b=G?.tools;G||void 0===K||(b=0===K.length?[]:void 0);let c=G?L?(0,o.Fk)(F,a):void 0:M?void 0:(0,o.Fk)(F,a),d=e.SettingsManager.create(F,a),g=await (0,e.createAgentSessionServices)({cwd:F,agentDir:a,settingsManager:d,resourceLoaderOptions:G?{noExtensions:!G.loadExtensions,noSkills:!G.loadSkills,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,...M?{systemPrompt:" ",systemPromptOverride:()=>void 0}:{},appendSystemPrompt:G.appendSystemPrompt}:M?y.M:{extensionFactories:[(0,m.eD)({cwd:F,settings:d}),(0,t.Vj)(_.extensionRuntime,()=>(0,u.IR)(F),w.N)],extensionsOverride:a=>(0,m.Ds)((0,t.U6)(a))},...c?{resourceLoaderReloadOptions:c}:{}}),h=await (0,l.p)(g.modelRuntime,g.settingsManager.getEnabledModels()),s=i&&(!j||h.visible.some(a=>a.provider===i.provider&&a.id===i.modelId))?i:void 0,v=g.settingsManager.getDefaultProvider(),x=g.settingsManager.getDefaultModel(),z=f.getBranch(),A=z.some(a=>"message"===a.type),C=A?(0,n.Vg)(z):null,E=C?g.modelRuntime.getModel(C.provider,C.modelId):void 0,H=A?null:(0,l.I)(h,{...s?{requestedModel:s}:{},...v&&x?{defaultModel:{provider:v,modelId:x}}:{},...r?{thinkingLevel:r}:{}}),I=E&&g.modelRuntime.hasConfiguredAuth(E.provider)?E:H?.model,{session:J}=await (0,e.createAgentSessionFromServices)({services:g,sessionManager:f,...I?{model:I}:{},...H?.thinkingLevel?{thinkingLevel:H.thinkingLevel}:{},...h.scopedModels.length>0?{scopedModels:[...h.scopedModels]}:{},...void 0!==b?{tools:b}:{},...G?{excludeTools:[...u.st]}:{}});(await (0,p.o)(g.settingsManager,{...s?{model:s}:{},...r?{thinkingLevel:r}:{}},{...J.model?{model:{provider:J.model.provider,modelId:J.model.id}}:{},thinkingLevel:J.thinkingLevel,supportsThinking:J.supportsThinking()})).modelDefaultChanged&&(0,k.kn)(),G||M||J.setActiveToolsByName(B(J,K??J.getActiveToolNames()));let N=G?.exactSystemPrompt!==void 0?()=>G.exactSystemPrompt:M?G?()=>G.appendSystemPrompt[0]??"":()=>(0,y.c)(J.resourceLoader.getAgentsFiles().agentsFiles):void 0,O=new $(J,{exactSystemPrompt:N,chatOnly:M,onAgentRunComplete:a=>{(0,q.lB)(a).catch(a=>{console.error("[pi-web] failed to send completion push:",a instanceof Error?a.message:a)})},suppressCompletionNotifications:!!G}),P=J.sessionId;return D(O),{session:O,realSessionId:P}})().finally(()=>{x.delete(a),N()});return x.set(a,O),O}d()}catch(a){d(a)}})},71069:(a,b,c)=>{c.d(b,{TQ:()=>e,p1:()=>d});let d=92;function e(a,b=d,c=40){return Object.freeze({terminal:Object.freeze({columns:b,rows:c,kittyProtocolActive:!1}),requestRender:a})}},72498:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Fk:()=>i,Y1:()=>g,er:()=>h});var e=c(75430),f=a([e]);function g(a,b){if(!(a&&(0,e.hasTrustRequiringProjectResources)(a)))return{requiresTrust:!1,trusted:!0};let c=new e.ProjectTrustStore(b);return{requiresTrust:!0,trusted:!0===c.get(a)}}function h(a,b){let c=g(a,b);return c.requiresTrust?(new e.ProjectTrustStore(b).set(a,!0),{requiresTrust:!0,trusted:!0}):c}function i(a,b){if(!g(a,b).requiresTrust)return;let c=new e.ProjectTrustStore(b);return{resolveProjectTrust:async()=>!0===c.get(a)}}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},78970:(a,b,c)=>{c.d(b,{kc:()=>d});function d(a){if(void 0===a)return null;if(!Array.isArray(a))return"images must be an array";if(a.length>10)return"A message can include at most 10 images";for(let b of a){if(!b||"object"!=typeof b||"image"!==b.type)return"Each attachment must be an image";if(!function(a){if(!a||"object"!=typeof a||"string"!=typeof a.data||"string"!=typeof a.mimeType||!a.mimeType.startsWith("image/"))return!1;let b=function(a){if(!a||a.length%4!=0)return null;let b=a.endsWith("==")?2:+!!a.endsWith("="),c=a.length-b;for(let b=0;b<c;b+=1){var d;if(!((d=a.charCodeAt(b))>=65&&d<=90||d>=97&&d<=122||d>=48&&d<=57||43===d||47===d))return null}for(let b=c;b<a.length;b+=1)if("="!==a[b])return null;return a.length/4*3-b}(a.data);return null!==b&&b<=0xa00000}(b))return"Each image must be valid base64 image data of 10MB or smaller"}return null}},95412:(a,b,c)=>{function d(a,b){if("string"!=typeof a||0===a.trim().length)throw Error(`Session liveness provider ${b} must be a non-empty string`)}c.d(b,{Vj:()=>j,mb:()=>h,u4:()=>i});let e=function(){let a,b=globalThis,c=Symbol.for("@agegr/pi-web/session-liveness/v1"),e=b[c];if(e&&"object"==typeof e&&1===e.version&&"function"==typeof e.register&&"function"==typeof e.hasActiveProvider)return e;let f=(a=new Map,{version:1,register(b){if(!b||"object"!=typeof b)throw Error("Session liveness provider must be an object");if(d(b.name,"name"),d(b.sessionId,"sessionId"),void 0!==b.sessionFile&&d(b.sessionFile,"sessionFile"),"function"!=typeof b.isActive)throw Error("Session liveness provider isActive must be a function");let c=Symbol(b.name);a.set(c,b);let e=!1;return()=>{e||(e=!0,a.delete(c))}},hasActiveProvider(b){let c=new Set([b.sessionId,b.sessionFile].filter(a=>!!a));for(let b of a.values())if(c.has(b.sessionId)||b.sessionFile&&c.has(b.sessionFile))try{let a=b.isActive();if("boolean"!=typeof a)throw Error("isActive() must return a boolean");if(a)return!0}catch(a){return console.error(`[pi-web] Session liveness provider '${b.name}' failed; preserving the session:`,a),!0}return!1}});return b[c]=f,f}();function f(){let a=globalThis,b=Symbol.for("@agegr/pi-web/session-liveness-leases/v1"),c=a[b];if(c instanceof Map)return c;let d=new Map;return a[b]=d,d}function g(a){a.timer&&clearTimeout(a.timer),a.timer=setTimeout(()=>{!a.released&&a.expiresAt<=Date.now()?a.release():a.released||g(a)},Math.max(1,a.expiresAt-Date.now()));let b=a.timer.unref;b?.call(a.timer)}function h(a){var b;let c=f(),d=(b={name:"pi-web-selected-session",sessionId:a,isActive:()=>!h.released&&h.expiresAt>Date.now()},e.register(b)),h={sessionId:a,expiresAt:Date.now()+9e4,released:!1,timer:null,renew:()=>{h.released||(h.expiresAt=Date.now()+9e4,g(h))},release:()=>{if(h.released)return;h.released=!0,h.timer&&clearTimeout(h.timer),d();let b=c.get(a);b?.delete(h),b?.size===0&&c.delete(a)}},i=c.get(a)??new Set;return i.add(h),c.set(a,i),g(h),h}function i(a){let b=f().get(a);if(!b)return 0;let c=0;for(let a of[...b]){if(a.released||a.expiresAt<=Date.now()){a.release();continue}a.renew(),c+=1}return c}function j(a){return e.hasActiveProvider(a)}},99324:(a,b,c)=>{c.d(b,{Wv:()=>h,jN:()=>j,vH:()=>i});var d=c(29021),e=c(33873),f=c(82536),g=c(58864);let h=8;function i(a,b){if(b.length>h)throw Error(`Agent input_files accepts at most ${h} files`);let c=(0,d.realpathSync)(a),i=new Set([c]),j=new TextDecoder("utf-8",{fatal:!0}),k=new Set,l=[],m=0;for(let h of b){let b,n;if(!h.trim())throw Error("Agent input_files paths must not be empty");try{b=(0,d.realpathSync)((0,e.resolve)(a,h))}catch{throw Error(`Agent input file does not exist: ${h}`)}if(!(0,f.o)(b,i))throw Error(`Agent input file is outside the session cwd: ${h}`);if(!(0,d.statSync)(b).isFile())throw Error(`Agent input path is not a file: ${h}`);if(k.has(b))continue;k.add(b);let o=(0,d.readFileSync)(b);if((m+=o.byteLength)>524288)throw Error("Agent input_files exceeds the 524288-byte total limit");try{n=j.decode(o)}catch{throw Error(`Agent input file is not valid UTF-8 text: ${h}`)}l.push({path:(0,g.W3)((0,e.relative)(c,b)),content:n})}return l}function j(a,b){if(0===b.length)return a;let c=b.map(a=>`<document path=${JSON.stringify(a.path)}>
|
|
8
|
+
${(g=i.filter(a=>a.enabled),0===g.length?"No subagent profiles are currently enabled.":g.map(a=>{let b=[`Tools: ${a.tools.length>0?a.tools.join(", "):"none"}`];return a.model&&b.push(`Model: ${a.model}`),`- ${a.name}: ${a.description} (${b.join("; ")})`}).join("\n"))}`,promptSnippet:"Delegate a focused task to an inspectable subagent session",promptGuidelines:["Use Agent for a focused task that benefits from an isolated context.","Use multiple background Agent calls in the same response for independent parallel work.","Do not duplicate work already delegated to a running subagent."],executionMode:"parallel",parameters:e.Type.Object({subagent_type:e.Type.Optional(e.Type.String({description:`Configured agent profile. Available types: ${m}. Default: general-purpose.`})),prompt:e.Type.String({description:"The complete task for the subagent."}),resume:e.Type.Optional(e.Type.String({description:"Existing subagent session ID to continue instead of creating a new session."})),input_files:e.Type.Optional(e.Type.Array(e.Type.String(),{description:"UTF-8 text files under the session cwd to include with the task.",maxItems:h.Wv})),description:e.Type.String({description:"Short activity label shown in the UI."}),run_in_background:e.Type.Optional(e.Type.Boolean({description:"Return immediately and notify this session when complete."})),model:e.Type.Optional(e.Type.String({description:"Optional provider/modelId override."})),thinking:e.Type.Optional(e.Type.String({description:"Optional thinking level override."})),max_turns:e.Type.Optional(e.Type.Number({description:"Optional positive agent turn limit."})),inherit_context:e.Type.Optional(e.Type.Boolean({description:"Include the parent session's active conversation context."})),isolation:e.Type.Optional(e.Type.String({description:"Run the subagent in an isolated git worktree."}))}),async execute(b,c,d,e,f){try{let g=c.resume?.trim(),h=g?await a.resume({parentContext:f,parentToolCallId:b,sessionId:g,task:c.prompt,description:c.description,...void 0!==c.run_in_background?{runInBackground:c.run_in_background}:{},signal:d,onUpdate:a=>e?.({content:[{type:"text",text:`${a.profile}: ${a.description} (${a.status})`}],details:j(a)})}):await a.start({parentContext:f,parentToolCallId:b,profile:c.subagent_type??"general-purpose",task:c.prompt,...c.input_files?{inputFiles:c.input_files}:{},description:c.description,...void 0!==c.run_in_background?{runInBackground:c.run_in_background}:{},...c.model?{model:c.model}:{},...c.thinking?{thinking:c.thinking}:{},...c.max_turns?{maxTurns:c.max_turns}:{},...void 0!==c.inherit_context?{inheritContext:c.inherit_context}:{},..."worktree"===c.isolation?{isolation:"worktree"}:{},signal:d,onUpdate:a=>e?.({content:[{type:"text",text:`${a.profile}: ${a.description} (${a.status})`}],details:j(a)})});if(h.run.runInBackground)return h.completion.then(b=>a.notifyParent(b)).catch(a=>{console.error("[pi-web] failed to deliver subagent completion:",a instanceof Error?a.message:a)}),{content:[{type:"text",text:`Subagent started in background. Session ID: ${h.run.sessionId}. You will be notified when it completes.`}],details:j(h.run)};let i=await h.completion;return{content:[{type:"text",text:k(i)}],details:j(i),..."failed"===i.status?{isError:!0}:{}}}catch(a){return{content:[{type:"text",text:a instanceof Error?a.message:String(a)}],details:void 0,isError:!0}}}})),d.registerTool((0,f.defineTool)({name:"get_subagent_result",label:"Get agent result",description:"Check an inspectable subagent session and retrieve its latest result.",parameters:e.Type.Object({agent_id:e.Type.String({description:"Subagent session ID."}),wait:e.Type.Optional(e.Type.Boolean({description:"Wait until the subagent finishes."}))}),async execute(b,c,d){let e=await a.get(c.agent_id);if(!e)return{content:[{type:"text",text:`Subagent not found: ${c.agent_id}`}],details:void 0,isError:!0};for(;c.wait&&("starting"===e.status||"running"===e.status);)if(await new Promise((a,b)=>{let c=()=>{clearTimeout(e),b(Error("Result wait aborted"))},e=setTimeout(()=>{d?.removeEventListener("abort",c),a()},500);d?.aborted?c():d?.addEventListener("abort",c,{once:!0})}),!(e=await a.get(c.agent_id)))return{content:[{type:"text",text:`Subagent not found: ${c.agent_id}`}],details:void 0,isError:!0};return{content:[{type:"text",text:k(e)}],details:j(e),..."failed"===e.status?{isError:!0}:{}}}})),d.registerTool((0,f.defineTool)({name:"steer_subagent",label:"Steer agent",description:"Send a steering message to a currently running subagent session.",parameters:e.Type.Object({agent_id:e.Type.String({description:"Subagent session ID."}),message:e.Type.String({description:"Instruction to inject after the current tool execution."})}),async execute(b,c){try{return await a.steer(c.agent_id,c.message),{content:[{type:"text",text:`Steering message sent to ${c.agent_id}.`}],details:void 0}}catch(a){return{content:[{type:"text",text:a instanceof Error?a.message:String(a)}],details:void 0,isError:!0}}}}))}}}function m(a){let b=a.extensions.find(a=>a.path===o);if(!b?.tools.has("Agent"))return a;let c=new Set(a.extensions.filter(a=>a.path!==o).filter(a=>{let b=(a.sourceInfo?.source??"").replace(/^npm:/,"").split("@")[0],c=a.path.replaceAll("\\","/").split("/");return b===q||c.some(a=>a===q)}).filter(a=>[...p].some(b=>a.tools.has(b))).map(a=>a.path));return 0===c.size?a:{...a,extensions:a.extensions.filter(a=>!c.has(a.path)),errors:a.errors.filter(a=>!c.has(a.path)&&(a.path!==o||![...c].some(b=>[...p].some(c=>a.error===`Tool "${c}" conflicts with ${b}`))))}}d()}catch(a){d(a)}})},53303:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Ds:()=>j,J1:()=>h,eD:()=>i});var e=c(75430),f=c(76760),g=a([e]);e=(g.then?(await g)():g)[0];let k="pi-web-project-command-environment",l=`<inline:${k}>`;function h(a={}){let{agentBinDir:b=(0,f.join)((0,e.getAgentDir)(),"bin"),baseEnvironment:c=process.env,localOperations:d=(0,e.createLocalBashOperations)({shellPath:a.shellPath}),platform:g=process.platform}=a;return{exec(a,e,f){var h;let i,j,k,l=(h=function(a,b=process.platform){let c={...a};for(let a of Object.keys(c))(function(a,b){let c="win32"===b?a.toUpperCase():a;return"PORT"===c||"NODE_ENV"===c||c.startsWith("NEXT_")})(a,b)&&delete c[a];return c}(f.env??c,g),i="win32"===g?Object.keys(h).find(a=>"PATH"===a.toUpperCase())??"PATH":"PATH",j="win32"===g?";":":",(k=h[i]??"").split(j).filter(Boolean).includes(b)||(h[i]=[b,k].filter(Boolean).join(j)),h);return d.exec(a,e,{...f,env:l})}}}function i(a){return{name:k,hidden:!0,factory:b=>{let c=(0,e.createBashToolDefinition)(a.cwd);b.registerTool({...c,execute:(b,c,d,f,g)=>(0,e.createBashToolDefinition)(a.cwd,{commandPrefix:a.settings.getShellCommandPrefix(),operations:h({shellPath:a.settings.getShellPath()})}).execute(b,c,d,f,g)})}}}function j(a){let b=a.extensions.findIndex(a=>a.path===l);if(b<0)return a;let c=a.extensions.slice(0,b).find(a=>a.tools.has("bash"));return c?{...a,extensions:a.extensions.filter((a,c)=>c!==b),errors:a.errors.filter(a=>a.path!==l||a.error!==`Tool "bash" conflicts with ${c.path}`)}:a}d()}catch(a){d(a)}})},56429:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$Z:()=>K,A4:()=>J,Bp:()=>L,HG:()=>O,OF:()=>Q,Zo:()=>F,_I:()=>M,d_:()=>E,oA:()=>N,wW:()=>G,x8:()=>P});var e=c(75430),f=c(29862),g=c(55511),h=c(29021),i=c(33873),j=c(78970),k=c(28967),l=c(18904),m=c(53303),n=c(40402),o=c(72498),p=c(30590),q=c(92243),r=c(95412),s=c(71069),t=c(46753),u=c(7048),v=c(12568),w=c(27367),x=c(305),y=c(36899),z=c(21560),A=a([e,f,l,m,n,o,q,t,u,v,w,x]);[e,f,l,m,n,o,q,t,u,v,w,x]=A.then?(await A)():A;let R=new Set(["agent_end","agent_settled","auto_compaction_end","compaction_end"]),S=function(a=process.env.PI_WEB_IDLE_TIMEOUT_MS){if(void 0!==a&&""!==a.trim()){let b=Number(a);if(Number.isFinite(b)&&b>=0&&b<=0x7fffffff)return b;console.warn(`[pi-web] invalid PI_WEB_IDLE_TIMEOUT_MS "${a}", falling back to 10 minutes`)}return 6e5}(),T=new Set(["fork","clone"]),U=new Set(["get_state","get_session_stats","get_last_assistant_text","get_tools","get_commands","extension_ui_response","extension_ui_input"]),V=["read","bash","powershell","edit","write","grep","find","ls"],W=new Set(["off","minimal","low","medium","high","xhigh","max"]);class X extends e.Theme{constructor(){super({muted:"",text:"",thinkingXhigh:"",searchMatchText:""},{selectedBg:""},"truecolor")}fg(...[,a]){return a}bg(...[,a]){return a}bold(a){return a}italic(a){return a}underline(a){return a}inverse(a){return a}strikethrough(a){return a}getFgAnsi(){return""}getBgAnsi(){return""}getThinkingBorderColor(){return a=>a}getBashModeBorderColor(){return a=>a}}let Y=new X,Z=new f.KeybindingsManager(f.TUI_KEYBINDINGS);function B(a,b){if(0===b.length)return[];let c=new Set(V),d=(0,x.wQ)(b,a.settingsManager.getDefaultTools()),e=a.getAllTools().map(a=>a.name).filter(a=>!c.has(a));return[...new Set([...d,...e])]}class ${constructor(a,b={}){this.inner=a,this.listeners=[],this.activeToolEvents=new Map,this.pendingUiResponses=new Map,this.pendingUiRequests=new Map,this.activeCustomUis=new Map,this.extensionUiAbortController=new AbortController,this.extensionStatuses=new Map,this.extensionWidgets=new Map,this.activeExtensionWidgets=new Map,this.extensionWidgetGenerations=new Map,this.extensionWidgetsResetting=!1,this.pendingPromptCount=0,this.activeMutatingCommands=0,this.sessionReplacement=null,this.agentRunNeedsCompletion=!1,this.promptAdmissionTail=Promise.resolve(),this.extensionsBound=!1,this.extensionBindingPromise=null,this.extensionBindingError=null,this.unsubscribe=null,this.idleTimer=null,this.onDestroyCallback=null,this.shutdownPromise=null,this.sessionShutdownEmitted=!1,this.forceShutdownOnIdle=!1,this._alive=!0,this.exactSystemPrompt=b.exactSystemPrompt,this.chatOnly=b.chatOnly??!1,this.onAgentRunComplete=b.onAgentRunComplete,this.suppressCompletionNotifications=b.suppressCompletionNotifications??!1,this.installExactSystemPromptContinuation(),this.applyExactSystemPrompt()}get sessionId(){return this.inner.sessionId}get sessionFile(){return this.inner.sessionFile??""}get cwd(){return this.inner.sessionManager.getCwd()}get streamingMessage(){return this.inner.agent.state?.streamingMessage}get isStreaming(){return this.inner.isStreaming}isAlive(){return this._alive}isRunning(){return this._alive&&(this.pendingPromptCount>0||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)}isChatOnly(){return this.chatOnly}hasSuppressedCompletionNotifications(){return this.suppressCompletionNotifications}start(){this.unsubscribe=this.inner.subscribe(a=>{"agent_start"===a.type&&(this.agentRunNeedsCompletion=!0),"agent_end"===a.type&&(0,n.mD)();let b=a.toolCallId;"string"==typeof b&&("tool_execution_start"===a.type||"tool_execution_update"===a.type?this.activeToolEvents.set(b,a):"tool_execution_end"===a.type&&this.activeToolEvents.delete(b)),R.has(a.type)&&this.resetIdleTimer(),this.emit(a),"agent_settled"===a.type&&this.notifyAgentRunCompleteIfIdle()}),this.resetIdleTimer()}notifyAgentRunCompleteIfIdle(){if(!(!this.agentRunNeedsCompletion||this.isRunning())&&(this.agentRunNeedsCompletion=!1,!this.suppressCompletionNotifications))try{this.onAgentRunComplete?.(this.sessionId)}catch(a){console.error("[pi-web] completion listener failed:",a instanceof Error?a.message:a)}}beginExtensionBinding(){this.ensureExtensionsBound().catch(a=>{console.error("[pi-web] failed to dispatch session_start to extensions:",a instanceof Error?a.message:a)})}async waitUntilReady(){await this.waitForExtensionsBound()}ensureExtensionsBound(){return this.extensionsBound?(this.applyExactSystemPrompt(),Promise.resolve()):(this.extensionBindingPromise||(this.extensionBindingError=null,this.extensionBindingPromise=(async()=>{if(!this._alive)return;let a=this.createExtensionUiContext();if("function"==typeof this.inner.bindExtensions){let b=this.inner.bindExtensions;await b.call(this.inner,{uiContext:a,mode:"rpc",commandContextActions:this.createExtensionCommandContextActions(),shutdownHandler:()=>this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"notify",notifyType:"warning",message:"Extension requested shutdown, but shutdown is not supported in AgentStudio."}),onError:a=>this.emit({type:"extension_error",extensionPath:a.extensionPath,event:a.event,error:a.error})})}else this.inner.extensionRunner.setUIContext?.(a,"rpc");this.extensionsBound=!0,this.applyExactSystemPrompt(),console.log(`[pi-web] session_start dispatched to extensions for session ${this.inner.sessionId}`)})().catch(a=>{throw this.extensionBindingError=a,a})),this.extensionBindingPromise)}async waitForExtensionsBound(){try{this.extensionBindingPromise&&await this.extensionBindingPromise}catch(a){throw a instanceof Error?a:Error(String(a))}if(this.extensionBindingError)throw this.extensionBindingError instanceof Error?this.extensionBindingError:Error(String(this.extensionBindingError))}shouldWaitForExtensions(a){return"prompt"===a||"steer"===a||"follow_up"===a||"get_commands"===a||"get_state"===a}async withFinalIdleReset(a){try{return await a()}finally{this.resetIdleTimer()}}applyExactSystemPrompt(){this.exactSystemPrompt&&this.inner.agent.state&&(this.inner.agent.state.systemPrompt=this.exactSystemPrompt())}installExactSystemPromptContinuation(){if(!this.exactSystemPrompt)return;let a=this.inner.agent.prepareNextTurnWithContext;this.inner.agent.prepareNextTurnWithContext=async(b,c)=>{let d=await a?.(b,c);return{...d,context:{...d?.context??b.context,systemPrompt:this.exactSystemPrompt()}}}}setActiveToolSelection(a){this.inner.setActiveToolsByName(B(this.inner,a)),this.applyExactSystemPrompt()}emit(a){for(let b of this.listeners)try{b(a)}catch(b){console.error(`[pi-web] failed to deliver ${a.type} event:`,b instanceof Error?b.message:b)}}async acquirePromptAdmission(){let a,b=this.promptAdmissionTail;return this.promptAdmissionTail=new Promise(b=>{a=b}),await b,a}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this._alive&&0!==S&&(this.isRunning()||(this.forceShutdownOnIdle=!1),this.idleTimer=setTimeout(()=>{!this.forceShutdownOnIdle&&(this.isRunning()||(0,r.Vj)({sessionId:this.sessionId,sessionFile:this.sessionFile||void 0}))?this.resetIdleTimer():this.shutdown().catch(a=>{console.error("[pi-web] failed to shut down idle session:",a instanceof Error?a.message:a)})},S))}persistFreshSession(){let a=this.inner.sessionManager,b=a.getSessionFile();if(!b||(0,h.existsSync)(b))return;let c=a.getHeader();if(!c)return;let d=[c,...a.getEntries()].map(a=>JSON.stringify(a)).join("\n")+"\n";(0,h.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"}),a.flushed=!0,(0,n.O8)(this.inner.sessionId,b)}onEvent(a){for(let b of(this.listeners.push(a),this.pendingUiRequests.values()))a(b);for(let b of this.activeToolEvents.values())a(b);return()=>{let b=this.listeners.indexOf(a);-1!==b&&this.listeners.splice(b,1)}}onDestroy(a){this.onDestroyCallback=a}async withSessionReplacement(a,b){if(this.sessionReplacement)throw Error("Session is already being copied");this.sessionReplacement=a;try{return await b()}finally{this._alive&&(this.sessionReplacement=null)}}isSessionRunningForReplacement(){return this.inner.isBashRunning||this.inner.isStreaming||this.inner.isCompacting||this.pendingPromptCount>0}async shutdownAfterSessionReplacement(a){try{await this.shutdown()}catch(b){console.error(`[pi-web] ${a} succeeded, but source session shutdown failed:`,b instanceof Error?b.message:b)}}async send(a){let b=a.type,c=U.has(b);if(this.sessionReplacement&&!c)throw Error("Session is being copied to a new session");if(T.has(b)&&this.activeMutatingCommands>0)throw Error(`Cannot ${b} while another session command is running`);let d=!c;d&&(this.activeMutatingCommands+=1);try{if("get_state"!==b&&this.resetIdleTimer(),this.shouldWaitForExtensions(b)&&await this.waitForExtensionsBound(),this.sessionReplacement&&!c)throw Error("Session is being copied to a new session");if("prompt"===b||"steer"===b||"follow_up"===b){let b=(0,j.kc)(a.images);if(b)throw Error(b)}switch(b){case"prompt":{let b=await this.acquirePromptAdmission();try{let b,c,d;if(this.inner.isBashRunning)throw Error("Cannot send a prompt while a shell command is running");this.extensionUiAbortController.signal.aborted&&(this.extensionUiAbortController=new AbortController);let e=a.images,f=a.streamingBehavior,g=!1,h=!1,i=!1,j=new Promise((a,d)=>{b=()=>{g=!0,this.agentRunNeedsCompletion=!0,h||(h=!0,a())},c=a=>{h||(h=!0,d(a))}}),k=()=>{i||(i=!0,this.pendingPromptCount=Math.max(0,this.pendingPromptCount-1),this.resetIdleTimer(),this.notifyAgentRunCompleteIfIdle())};this.pendingPromptCount+=1;try{d=this.inner.prompt(a.message,{...e?.length?{images:e}:{},...f?{streamingBehavior:f}:{},source:"rpc",preflightResult:a=>{a&&(this.applyExactSystemPrompt(),b())}})}catch(a){throw k(),a}return d.then(()=>{b(),k(),f||this.emit({type:"prompt_done"})},a=>{c(a),k(),(0,n.mD)(),g&&(this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),f||this.emit({type:"prompt_done"}))}).catch(a=>{console.error("[pi-web] prompt completion handler failed:",a instanceof Error?a.message:a)}),await j,null}finally{b()}}case"abort":this.forceShutdownOnIdle=!0,this.extensionUiAbortController.abort(new DOMException("Extension UI cancelled by Stop","AbortError"));try{return await this.withFinalIdleReset(()=>this.inner.abort()),null}finally{this.isRunning()||(this.forceShutdownOnIdle=!1)}case"get_state":{let a=this.inner.model,b=this.inner.getContextUsage();return{sessionId:this.inner.sessionId,sessionFile:this.inner.sessionFile??"",isStreaming:this.inner.isStreaming,isPromptRunning:this.pendingPromptCount>0,isBashRunning:this.inner.isBashRunning,isCompacting:this.inner.isCompacting,autoCompactionEnabled:this.inner.autoCompactionEnabled,autoRetryEnabled:this.inner.autoRetryEnabled,model:a?{id:a.id,provider:a.provider}:void 0,messageCount:0,pendingMessageCount:this.inner.pendingMessageCount,queuedMessages:{steering:[...this.inner.getSteeringMessages()],followUp:[...this.inner.getFollowUpMessages()]},contextUsage:b?{percent:b.percent,contextWindow:b.contextWindow,tokens:b.tokens}:null,systemPrompt:this.inner.agent.state?.systemPrompt??"",thinkingLevel:this.inner.agent.state?.thinkingLevel??"off",extensionStatuses:this.getExtensionStatuses(),extensionWidgets:this.getExtensionWidgets()}}case"set_model":{let{provider:b,modelId:c}=a,d=this.inner.modelRuntime.getModel(b,c);if(d||(await this.inner.modelRuntime.refresh({allowNetwork:!1}),d=this.inner.modelRuntime.getModel(b,c)),!d)throw Error(`Model not found: ${b}/${c}`);return await this.inner.setModel(d),(0,k.kn)(),(0,n.mD)(),{id:d.id,provider:d.provider}}case"fork":if(this.isSessionRunningForReplacement())throw Error("Cannot fork while the session is running");return this.withSessionReplacement("fork",async()=>{let b,c,d=a.entryId,f=this.inner.sessionManager,g=this.inner.sessionFile;if(!f.isPersisted())return{cancelled:!0};if(!g)throw Error("Persisted session is missing a session file");let i=f.getEntry(d);if(!i)throw Error("Invalid entry ID for forking");let j=f.getSessionDir();if(i.parentId){let a=(c=e.SessionManager.open(g,j)).createBranchedSession(i.parentId);if(!a)throw Error("Failed to create forked session");b=a}else b=(c=e.SessionManager.create(f.getCwd(),j,{parentSession:g})).getSessionFile();if(!(0,h.existsSync)(b)){let a=c.getHeader();if(!a)throw Error("Forked session is missing a session header");let d=[a,...c.getEntries()].map(a=>JSON.stringify(a)).join("\n")+"\n";(0,h.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"})}let k=c.getSessionId();return(0,n.O8)(k,b),(0,n.mD)(),await this.shutdownAfterSessionReplacement("fork"),{cancelled:!1,newSessionId:k}});case"fork_branch":{if(this.isSessionRunningForReplacement())throw Error("Cannot fork while the session is running");let b=a.entryId,c=this.inner.sessionManager,d=this.inner.sessionFile;if(!c.isPersisted())return{cancelled:!0};if(!d)throw Error("Persisted session is missing a session file");if(!c.getEntry(b))throw Error("Invalid entry ID for forking");let f=c.getSessionDir(),g=e.SessionManager.open(d,f).createBranchedSession(b);if(!g)throw Error("Failed to create forked session");let h=e.SessionManager.open(g,f).getSessionId();return(0,n.O8)(h,g),(0,n.mD)(),{cancelled:!1,newSessionId:h}}case"clone":{if(this.isSessionRunningForReplacement())throw Error("Cannot clone while the session is running");let b=this.inner.sessionManager,c=this.inner.sessionFile,d="string"==typeof a.leafId?a.leafId:b.getLeafId(),f=d&&b.getBranch(d).some(a=>"message"===a.type&&"assistant"===a.message.role);if(!b.isPersisted()||!d||!f||!c||!(0,h.existsSync)(c))return{cancelled:!0};return this.withSessionReplacement("clone",async()=>{let a=b.getSessionDir(),f=e.SessionManager.open(c,a).createBranchedSession(d);if(!f||!(0,h.existsSync)(f))throw Error("Failed to clone current session branch");let g=e.SessionManager.open(f,a).getSessionId();return(0,n.O8)(g,f),(0,n.mD)(),await this.shutdownAfterSessionReplacement("clone"),{cancelled:!1,newSessionId:g}})}case"navigate_tree":if(this.inner.isBashRunning)throw Error("Cannot navigate while a shell command is running");return{cancelled:(await this.inner.navigateTree(a.targetId,{})).cancelled};case"set_thinking_level":{let b=a.level;return this.inner.setThinkingLevel(b),"xhigh"===b&&this.inner.model?.compat?.thinkingFormat==="deepseek"&&this.inner.agent?.state&&(this.inner.agent.state.thinkingLevel="xhigh"),(0,n.mD)(),null}case"compact":try{return await this.withFinalIdleReset(()=>this.inner.compact(a.customInstructions))}finally{(0,n.mD)()}case"set_session_name":{let b=a.name?.trim();if(!b)throw Error("Session name cannot be empty");return this.inner.setSessionName(b),(0,n.mD)(),null}case"get_session_stats":return{...this.inner.getSessionStats(),sessionName:this.inner.sessionManager.getSessionName()};case"get_last_assistant_text":return{text:this.inner.getLastAssistantText()??""};case"set_auto_compaction":return this.inner.setAutoCompactionEnabled(a.enabled),null;case"clear_queue":return this.inner.clearQueue();case"steer":{let b=a.images;return await this.inner.steer(a.message,b?.length?b:void 0),null}case"follow_up":{let b=a.images;return await this.inner.followUp(a.message,b?.length?b:void 0),null}case"get_tools":{let a=this.inner.getAllTools(),b=new Set(this.inner.getActiveToolNames());return a.map(a=>({...a,active:b.has(a.name)}))}case"get_commands":{let a=[];for(let b of this.inner.extensionRunner.getRegisteredCommands())a.push({name:b.invocationName,description:b.description,source:"extension",sourceInfo:b.sourceInfo});for(let b of this.inner.promptTemplates)a.push({name:b.name,description:b.description,source:"prompt",sourceInfo:b.sourceInfo});for(let b of this.inner.resourceLoader.getSkills().skills)a.push({name:`skill:${b.name}`,description:b.description,source:"skill",sourceInfo:b.sourceInfo});return{commands:a}}case"set_tools":{let b=a.toolNames;return this.setActiveToolSelection(b),null}case"reload":{this.extensionUiAbortController.signal.aborted&&(this.extensionUiAbortController=new AbortController);let a=this.inner.getActiveToolNames();return await this.waitForExtensionsBound(),this.extensionStatuses.clear(),this.resetExtensionWidgetsForReload(),this.syncProjectTrust(),await this.inner.reload(),this.setActiveToolSelection(a),"function"!=typeof this.inner.bindExtensions&&this.inner.extensionRunner.setUIContext?.(this.createExtensionUiContext(),"rpc"),this.applyExactSystemPrompt(),(0,k.kn)(),{success:!0}}case"abort_compaction":return this.inner.abortCompaction(),null;case"extension_ui_response":return this.resolveExtensionUiResponse(a),null;case"extension_ui_input":return this.handleExtensionUiInput(a.id,a.data),null;case"set_auto_retry":return this.inner.setAutoRetryEnabled(a.enabled),null;case"bash":{if(this.pendingPromptCount>0||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)throw Error("Cannot run a shell command while the session is busy");let b=this.inner.executeBash(a.command,void 0,{excludeFromContext:a.excludeFromContext,operations:(0,m.J1)({shellPath:this.inner.settingsManager.getShellPath()})});try{let a=await b;return this.persistFreshSession(),a}finally{this.resetIdleTimer(),(0,n.mD)()}}case"abort_bash":return this.forceShutdownOnIdle=!0,this.inner.abortBash(),null;default:throw Error(`Unsupported command: ${b}`)}}finally{d&&(this.activeMutatingCommands=Math.max(0,this.activeMutatingCommands-1))}}destroy(){if(!this._alive)return;for(let a of(this._alive=!1,this.idleTimer&&clearTimeout(this.idleTimer),this.inner.isBashRunning&&this.inner.abortBash(),this.unsubscribe?.(),this.pendingUiResponses.values()))a.cancel();for(let a of Array.from(this.activeCustomUis.keys()))this.closeCustomUi(a,void 0);this.pendingUiResponses.clear(),this.pendingUiRequests.clear(),this.activeToolEvents.clear(),this.clearExtensionWidgets(!1);let a=()=>{try{this.inner.dispose()}finally{this.onDestroyCallback?.()}};if(this.sessionShutdownEmitted)return void a();this.sessionShutdownEmitted=!0;let b=this.inner.extensionRunner?.emit;"function"!=typeof b?a():(async()=>b.call(this.inner.extensionRunner,{type:"session_shutdown",reason:"quit"}))().catch(a=>{console.error("[pi-web] session_shutdown before dispose failed:",a instanceof Error?a.message:a)}).finally(a)}async shutdown(){return this.shutdownPromise?this.shutdownPromise:this._alive?(this.shutdownPromise=(async()=>{try{try{await this.waitForExtensionsBound()}catch(a){console.error("[pi-web] extension binding failed before session shutdown:",a instanceof Error?a.message:a)}this.sessionShutdownEmitted||(this.sessionShutdownEmitted=!0,await this.inner.extensionRunner.emit?.({type:"session_shutdown",reason:"quit"}))}finally{this.destroy()}})(),this.shutdownPromise):void 0}resolveExtensionUiResponse(a){let b=this.pendingUiResponses.get(a.id);b&&b.resolve(a)}getExtensionStatuses(){return Array.from(this.extensionStatuses,([a,b])=>({key:a,text:b}))}getExtensionWidgets(){return Array.from(this.extensionWidgets.values())}nextExtensionWidgetGeneration(a){let b=(this.extensionWidgetGenerations.get(a)??0)+1;return this.extensionWidgetGenerations.set(a,b),b}disposeExtensionWidgetComponent(a){if(!a||"object"!=typeof a&&"function"!=typeof a)return;let b=a.dispose;if("function"==typeof b)try{b.call(a)}catch{}}emitExtensionWidgetClear(a){this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setWidget",widgetKey:a,widgetLines:void 0,widgetPlacement:void 0})}clearExtensionWidget(a,b=!0){let c=this.nextExtensionWidgetGeneration(a),d=this.activeExtensionWidgets.get(a);return this.activeExtensionWidgets.delete(a),this.extensionWidgets.delete(a),d&&this.disposeExtensionWidgetComponent(d.component),this.extensionWidgetGenerations.get(a)!==c||b&&this.emitExtensionWidgetClear(a),c}clearExtensionWidgets(a){for(let b of new Set([...this.extensionWidgets.keys(),...this.activeExtensionWidgets.keys()]))this.clearExtensionWidget(b,a)}resetExtensionWidgetsForReload(){this.extensionWidgetsResetting=!0;try{for(let a of[...this.activeExtensionWidgets.keys()])this.clearExtensionWidget(a);this.extensionWidgets.clear()}finally{this.extensionWidgetsResetting=!1}}emitExtensionWidgetError(a,b){this.emit({type:"extension_error",extensionPath:`extension-widget:${a}`,event:"setWidget",error:b instanceof Error?b.message:String(b)})}failExtensionWidget(a,b,c,d,e){if(this.extensionWidgetGenerations.get(a)!==b)return void this.disposeExtensionWidgetComponent(e);let f=this.activeExtensionWidgets.get(a),g=!d;f?.generation===b?(g=f.rendered||!f.clearEmitted,this.activeExtensionWidgets.delete(a),this.disposeExtensionWidgetComponent(f.component)):this.disposeExtensionWidgetComponent(e),this.extensionWidgetGenerations.get(a)!==b||(this.extensionWidgets.delete(a),g&&this.emitExtensionWidgetClear(a)),this.emitExtensionWidgetError(a,c)}renderExtensionWidget(a){let b;if(this.activeExtensionWidgets.get(a.key)!==a||this.extensionWidgetGenerations.get(a.key)!==a.generation)return;try{b=a.component.render(s.p1)}catch(b){this.failExtensionWidget(a.key,a.generation,b,a.clearEmitted);return}if(!Array.isArray(b)||!b.every(a=>"string"==typeof a))return void this.failExtensionWidget(a.key,a.generation,Error("Extension widget render must return string[]"),a.clearEmitted);if(this.activeExtensionWidgets.get(a.key)!==a||this.extensionWidgetGenerations.get(a.key)!==a.generation)return;let c=b;this.extensionWidgets.set(a.key,{key:a.key,lines:c,placement:a.placement}),a.rendered=!0,this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setWidget",widgetKey:a.key,widgetLines:c,widgetPlacement:a.placement})}setExtensionWidgetFactory(a,b,c){let d,e=this.extensionWidgets.has(a)||this.activeExtensionWidgets.has(a),f=this.clearExtensionWidget(a,e);if(this.extensionWidgetGenerations.get(a)!==f)return;let g=(0,s.TQ)(()=>{let b=this.activeExtensionWidgets.get(a);b?.generation===f&&this.renderExtensionWidget(b)},s.p1);try{d=b(g,Y)}catch(b){this.failExtensionWidget(a,f,b,e);return}if(this.extensionWidgetGenerations.get(a)!==f)return void this.disposeExtensionWidgetComponent(d);if(!d||"object"!=typeof d&&"function"!=typeof d||"function"!=typeof d.render)return void this.failExtensionWidget(a,f,Error("Extension widget factory must return a component with render(width)"),e,d);let h={key:a,component:d,placement:c?.placement??"aboveEditor",generation:f,clearEmitted:e,rendered:!1};this.activeExtensionWidgets.set(a,h),this.renderExtensionWidget(h)}getCustomUiWidth(a){if(!a||"object"!=typeof a)return s.p1;let b=a.overlayOptions,c="function"==typeof b?b():b;if(!c||"object"!=typeof c)return s.p1;let d=c.width;return"number"==typeof d&&Number.isFinite(d)?Math.max(40,Math.min(140,Math.round(d))):92}emitCustomUiRender(a,b){let c;try{c=b.component.render(b.width)}catch(a){c=[`Extension custom UI render failed: ${a instanceof Error?a.message:String(a)}`]}let d={type:"extension_ui_request",id:a,method:"custom",lines:c};this.pendingUiRequests.set(a,d),this.emit(d)}closeCustomUi(a,b){let c=this.activeCustomUis.get(a);if(c&&!c.settled){c.settled=!0,this.activeCustomUis.delete(a),this.pendingUiRequests.delete(a);try{c.component.dispose?.()}catch{}this.emit({type:"extension_ui_request",id:a,method:"custom",lines:[],closed:!0}),c.resolve(b)}}handleExtensionUiInput(a,b){let c=this.activeCustomUis.get(a);if(c&&"string"==typeof b)try{c.component.handleInput?.(b),this.activeCustomUis.has(a)&&this.emitCustomUiRender(a,c)}catch(b){this.closeCustomUi(a,void 0),this.emit({type:"extension_error",extensionPath:`custom-ui:${a}`,event:"custom_ui_input",error:b instanceof Error?b.message:String(b)})}}requestExtensionCustomUi(a,b){if("function"!=typeof a)return Promise.resolve(void 0);let c=this.extensionUiAbortController.signal;if(c.aborted)return Promise.reject(c.reason);let d=(0,g.randomUUID)(),e=this.getCustomUiWidth(b);return new Promise((b,f)=>{let g=!1,h=(0,s.TQ)(()=>{let a=this.activeCustomUis.get(d);a&&this.emitCustomUiRender(d,a)},e),i=a=>{g||(g=!0,c.removeEventListener("abort",k),c.aborted?f(c.reason):b(a))},j=a=>{this.activeCustomUis.has(d)?this.closeCustomUi(d,a):i(a)},k=()=>j(void 0);c.addEventListener("abort",k,{once:!0}),Promise.resolve().then(()=>g?void 0:a(h,Y,Z,j)).then(a=>{if(g){try{a?.dispose?.()}catch{}return}if(!a||"object"!=typeof a||"function"!=typeof a.render)return void i(void 0);let b={component:a,width:e,resolve:a=>i(a),settled:!1};this.activeCustomUis.set(d,b),this.emitCustomUiRender(d,b)}).catch(a=>{g||(this.emit({type:"extension_error",extensionPath:`custom-ui:${d}`,event:"custom_ui",error:a instanceof Error?a.message:String(a)}),i(void 0))})})}requestExtensionUi(a,b,c,d,e){if(e?.aborted)return Promise.resolve(b);let f=this.extensionUiAbortController.signal;if(f.aborted)return Promise.reject(f.reason);let h=e?AbortSignal.any([e,f]):f,i=(0,g.randomUUID)(),j={type:"extension_ui_request",id:i,...a,...d?{timeout:d,expiresAt:Date.now()+d}:{}};return new Promise((a,e)=>{let g,k=!1,l=()=>{g&&clearTimeout(g),h.removeEventListener("abort",n),this.pendingUiRequests.delete(i),this.pendingUiResponses.delete(i),this.emit({type:"extension_ui_closed",id:i})},m=b=>{k||(k=!0,l(),f.aborted?e(f.reason):a(b))},n=()=>m(b);d&&(g=setTimeout(()=>m(b),d)),h.addEventListener("abort",n,{once:!0}),this.pendingUiRequests.set(i,j),this.pendingUiResponses.set(i,{resolve:a=>m(c(a)),cancel:()=>m(b)}),this.emit(j)})}createExtensionUiContext(){return{select:(a,b,c)=>this.requestExtensionUi({method:"select",title:a,options:b,...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),confirm:(a,b,c)=>this.requestExtensionUi({method:"confirm",title:a,message:b,...c?.timeout?{timeout:c.timeout}:{}},!1,a=>"confirmed"in a&&a.confirmed,c?.timeout,c?.signal),input:(a,b,c)=>this.requestExtensionUi({method:"input",title:a,...void 0!==b?{placeholder:b}:{},...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),editor:(a,b,c)=>this.requestExtensionUi({method:"editor",title:a,...void 0!==b?{prefill:b}:{},...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),notify:(a,b)=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"notify",message:a,notifyType:b})},onTerminalInput:()=>()=>{},setStatus:(a,b)=>{void 0===b?this.extensionStatuses.delete(a):this.extensionStatuses.set(a,b),this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setStatus",statusKey:a,statusText:b})},setWorkingMessage:()=>{},setWorkingVisible:()=>{},setWorkingIndicator:()=>{},setHiddenThinkingLabel:()=>{},setWidget:(a,b,c)=>{if(!this._alive||this.extensionWidgetsResetting)return;if("function"==typeof b)return void this.setExtensionWidgetFactory(a,b,c);if(void 0!==b&&!Array.isArray(b))return;if(void 0===b)return void this.clearExtensionWidget(a);let d=this.activeExtensionWidgets.has(a)?this.clearExtensionWidget(a):this.nextExtensionWidgetGeneration(a);this.extensionWidgetGenerations.get(a)===d&&(this.extensionWidgets.set(a,{key:a,lines:b,placement:c?.placement??"aboveEditor"}),this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setWidget",widgetKey:a,widgetLines:b,widgetPlacement:c?.placement}))},setFooter:()=>{},setHeader:()=>{},setTitle:a=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setTitle",title:a})},custom:(a,b)=>this.requestExtensionCustomUi(a,b),pasteToEditor:a=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"set_editor_text",text:a})},setEditorText:a=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"set_editor_text",text:a})},getEditorText:()=>"",addAutocompleteProvider:()=>{},setEditorComponent:()=>{},getEditorComponent:()=>void 0,get theme(){return Y},getAllThemes:()=>[],getTheme:()=>void 0,setTheme:()=>({success:!1,error:"Theme switching is not supported in AgentStudio extension UI yet"}),getToolsExpanded:()=>!1,setToolsExpanded:()=>{}}}createExtensionCommandContextActions(){return{waitForIdle:async()=>{let a=this.inner.agent;await a.waitForIdle?.()},newSession:async()=>({cancelled:!0}),fork:async()=>({cancelled:!0}),navigateTree:async(a,b)=>({cancelled:(await this.inner.navigateTree(a,{summarize:b?.summarize})).cancelled}),switchSession:async()=>({cancelled:!0}),reload:async()=>{this.extensionStatuses.clear(),this.resetExtensionWidgetsForReload(),this.syncProjectTrust(),await this.inner.reload({beforeSessionStart:()=>{this.inner.extensionRunner.setUIContext?.(this.createExtensionUiContext(),"rpc")}}),this.applyExactSystemPrompt()}}}syncProjectTrust(){let a=(0,o.Y1)(this.cwd,(0,e.getAgentDir)());this.inner.settingsManager.setProjectTrusted(a.trusted)}}function C(){if(!globalThis.__piSessions){globalThis.__piSessions=new Map;let a=()=>{let a=Array.from(globalThis.__piSessions?.values()??[]);Promise.allSettled(a.map(a=>a.shutdown()))};process.once("exit",()=>globalThis.__piSessions?.forEach(a=>a.destroy())),process.once("SIGINT",a),process.once("SIGTERM",a)}return globalThis.__piSessions}function D(a){let b=C(),c=a.sessionId;a.sessionFile&&(0,n.O8)(c,a.sessionFile),a.onDestroy(()=>b.delete(c)),b.set(c,a),a.start(),a.isChatOnly()||a.beginExtensionBinding()}let _=(0,v.s)({getSession:a=>C().get(a),registerSession:(a,b)=>{let c=new $(a,{...b?.exactSystemPrompt!==void 0?{exactSystemPrompt:()=>b.exactSystemPrompt}:{},chatOnly:b?.chatOnly,suppressCompletionNotifications:!0});D(c)},reopenSession:async(a,b)=>(await Q(a,b,void 0)).session,resolveSessionPath:n.os,invalidateSessionList:n.mD,isBuiltInSubagentsEnabled:w.N});function E(a){return _.get(a)}function F(a,b){return _.steer(a,b)}function G(a){return _.abort(a)}function H(a){let b=(0,i.resolve)(a);try{return(0,h.realpathSync)(b)}catch{return b}}function I(){return globalThis.__piStartingSessionCwds||(globalThis.__piStartingSessionCwds=new Map),globalThis.__piStartingSessionCwds}function J(a){return C().get(a)}async function K(a,b,c){let d=(0,z.vw)(c),f=J(a);if(!f?.isAlive()){if(!b)throw Error("Session not found");let c=e.SessionManager.open(b,void 0);if((0,u.ph)(c.getEntries()))throw Error("Subagent tool selection is fixed by its profile");(0,z.b5)(c,d),(0,n.mD)();let f=await Q(a,b,void 0);return{session:f.session,sessionId:f.realSessionId,recreated:!1}}if(f.isRunning())throw Error("Cannot change tools while the session is running");if((0,u.ph)(f.inner.sessionManager.getEntries()))throw Error("Subagent tool selection is fixed by its profile");let i="function"!=typeof f.isChatOnly||"function"!=typeof f.setActiveToolSelection||f.isChatOnly()!==(0===d.length);if((0,z.b5)(f.inner.sessionManager,d),(0,n.mD)(),!i)return f.setActiveToolSelection(d),{session:f,sessionId:a,recreated:!1};let j=f.sessionFile&&(0,h.existsSync)(f.sessionFile)?f.sessionFile:void 0,k=f.cwd,l=f.inner.model,m=f.inner.agent.state?.thinkingLevel;if(await f.shutdown(),j){let b=await Q(a,j,void 0);return{session:b.session,sessionId:b.realSessionId,recreated:!0}}let o=await Q(`__recreate__${(0,g.randomUUID)()}`,"",k,{toolNames:d,...l?{initialModel:{provider:l.provider,modelId:l.id}}:{},allowInitialModelFallback:!0,...m&&W.has(m)?{thinkingLevel:m}:{}});return{session:o.session,sessionId:o.realSessionId,recreated:!0}}function L(a={}){let b=[];for(let c of C().values()){if("function"!=typeof c.isAlive||!c.isAlive())continue;let d=c.inner?.sessionManager;if(!d)continue;let e=d.getHeader(),f=d.getEntries(),g=f.filter(a=>"message"===a.type),i=g.find(a=>"user"===a.message.role),j=d.getSessionFile()??c.sessionFile,k=!!(j&&(0,h.existsSync)(j)),l=(0,u.$u)(f,e?.id??c.sessionId,j??"");if(!k&&!a.includeTransient&&(!c.isRunning()||!i))continue;let m=e?.timestamp??f[0]?.timestamp??new Date().toISOString(),n=new Date(m).getTime(),o=Number.isNaN(n)?Date.now():n;for(let a of g){let b=function(a){if("user"!==a.message.role&&"assistant"!==a.message.role)return;if("number"==typeof a.message.timestamp)return a.message.timestamp;let b=new Date(a.timestamp).getTime();return Number.isNaN(b)?void 0:b}(a);void 0!==b&&(o=Math.max(o,b))}b.push({path:j??"",id:e?.id??c.sessionId,cwd:e?.cwd??c.cwd,name:d.getSessionName(),created:m,modified:new Date(o).toISOString(),messageCount:g.length,firstMessage:i&&function(a){if("bashExecution"===a.message.role)return"";let b=a.message.content;return"string"==typeof b?b:b.map(a=>"text"===a.type?a.text:"").filter(Boolean).join(" ")}(i)||"(no messages)",...l?{parentSessionId:l.parentSessionId,relation:{kind:"subagent",parentSessionId:l.parentSessionId,profile:l.profile,description:l.description,status:c.isRunning()?"running":l.status}}:{},transient:!k})}return b}function M(a){let b=H(a);return!!I().has(b)||Array.from(C().values()).some(a=>H(a.cwd)===b&&a.isRunning())}async function N(a){let b=H(a),c=Array.from(C().values()).filter(a=>H(a.cwd)===b);return await Promise.all(c.map(a=>a.shutdown())),c.length}function O(){let a=new Set;for(let[b,c]of C())c.isRunning()&&a.add(c.sessionId||b);return[...a]}function P(){let a=new Set;for(let[b,c]of C())c.isRunning()&&c.hasSuppressedCompletionNotifications()&&a.add(c.sessionId||b);return[...a]}async function Q(a,b,c,d={}){let f,g,h,{initialModel:i,allowInitialModelFallback:j,thinkingLevel:r}=d,s=void 0===d.toolNames?void 0:(0,z.vw)(d.toolNames),v=C(),x=(globalThis.__piStartLocks||(globalThis.__piStartLocks=new Map),globalThis.__piStartLocks),A=v.get(a);if(A?.isAlive())return{session:A,realSessionId:a};let E=x.get(a);if(E)return E;if(b)f=e.SessionManager.open(b,void 0);else{if(!c)throw Error("cwd is required for a new session");f=e.SessionManager.create(c,void 0)}let F=f.getCwd(),G=b?(0,u.ph)(f.getEntries()):null,J=G?void 0:(0,z.dS)(f.getEntries()),K=G?.tools??J??s;G||void 0!==J||void 0===s||(0,z.b5)(f,s);let L=!!(G?.loadExtensions||G?.loadSkills),M=K?.length===0&&!L,N=(g=I(),h=H(F),g.set(h,(g.get(h)??0)+1),()=>{let a=(g.get(h)??1)-1;a>0?g.set(h,a):g.delete(h)}),O=(async()=>{M||(0,e.initTheme)();let a=(0,e.getAgentDir)(),b=G?.tools;G||void 0===K||(b=0===K.length?[]:void 0);let c=G?L?(0,o.Fk)(F,a):void 0:M?void 0:(0,o.Fk)(F,a),d=e.SettingsManager.create(F,a),g=await (0,e.createAgentSessionServices)({cwd:F,agentDir:a,settingsManager:d,resourceLoaderOptions:G?{noExtensions:!G.loadExtensions,noSkills:!G.loadSkills,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,...M?{systemPrompt:" ",systemPromptOverride:()=>void 0}:{},appendSystemPrompt:G.appendSystemPrompt}:M?y.M:{extensionFactories:[(0,m.eD)({cwd:F,settings:d}),(0,t.Vj)(_.extensionRuntime,()=>(0,u.IR)(F),w.N)],extensionsOverride:a=>(0,m.Ds)((0,t.U6)(a))},...c?{resourceLoaderReloadOptions:c}:{}}),h=await (0,l.p)(g.modelRuntime,g.settingsManager.getEnabledModels()),s=i&&(!j||h.visible.some(a=>a.provider===i.provider&&a.id===i.modelId))?i:void 0,v=g.settingsManager.getDefaultProvider(),x=g.settingsManager.getDefaultModel(),z=f.getBranch(),A=z.some(a=>"message"===a.type),C=A?(0,n.Vg)(z):null,E=C?g.modelRuntime.getModel(C.provider,C.modelId):void 0,H=A?null:(0,l.I)(h,{...s?{requestedModel:s}:{},...v&&x?{defaultModel:{provider:v,modelId:x}}:{},...r?{thinkingLevel:r}:{}}),I=E&&g.modelRuntime.hasConfiguredAuth(E.provider)?E:H?.model,{session:J}=await (0,e.createAgentSessionFromServices)({services:g,sessionManager:f,...I?{model:I}:{},...H?.thinkingLevel?{thinkingLevel:H.thinkingLevel}:{},...h.scopedModels.length>0?{scopedModels:[...h.scopedModels]}:{},...void 0!==b?{tools:b}:{},...G?{excludeTools:[...u.st]}:{}});(await (0,p.o)(g.settingsManager,{...s?{model:s}:{},...r?{thinkingLevel:r}:{}},{...J.model?{model:{provider:J.model.provider,modelId:J.model.id}}:{},thinkingLevel:J.thinkingLevel,supportsThinking:J.supportsThinking()})).modelDefaultChanged&&(0,k.kn)(),G||M||J.setActiveToolsByName(B(J,K??J.getActiveToolNames()));let N=G?.exactSystemPrompt!==void 0?()=>G.exactSystemPrompt:M?G?()=>G.appendSystemPrompt[0]??"":()=>(0,y.c)(J.resourceLoader.getAgentsFiles().agentsFiles):void 0,O=new $(J,{exactSystemPrompt:N,chatOnly:M,onAgentRunComplete:a=>{(0,q.lB)(a).catch(a=>{console.error("[pi-web] failed to send completion push:",a instanceof Error?a.message:a)})},suppressCompletionNotifications:!!G}),P=J.sessionId;return D(O),{session:O,realSessionId:P}})().finally(()=>{x.delete(a),N()});return x.set(a,O),O}d()}catch(a){d(a)}})},71069:(a,b,c)=>{c.d(b,{TQ:()=>e,p1:()=>d});let d=92;function e(a,b=d,c=40){return Object.freeze({terminal:Object.freeze({columns:b,rows:c,kittyProtocolActive:!1}),requestRender:a})}},72498:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Fk:()=>i,Y1:()=>g,er:()=>h});var e=c(75430),f=a([e]);function g(a,b){if(!(a&&(0,e.hasTrustRequiringProjectResources)(a)))return{requiresTrust:!1,trusted:!0};let c=new e.ProjectTrustStore(b);return{requiresTrust:!0,trusted:!0===c.get(a)}}function h(a,b){let c=g(a,b);return c.requiresTrust?(new e.ProjectTrustStore(b).set(a,!0),{requiresTrust:!0,trusted:!0}):c}function i(a,b){if(!g(a,b).requiresTrust)return;let c=new e.ProjectTrustStore(b);return{resolveProjectTrust:async()=>!0===c.get(a)}}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},78970:(a,b,c)=>{c.d(b,{kc:()=>d});function d(a){if(void 0===a)return null;if(!Array.isArray(a))return"images must be an array";if(a.length>10)return"A message can include at most 10 images";for(let b of a){if(!b||"object"!=typeof b||"image"!==b.type)return"Each attachment must be an image";if(!function(a){if(!a||"object"!=typeof a||"string"!=typeof a.data||"string"!=typeof a.mimeType||!a.mimeType.startsWith("image/"))return!1;let b=function(a){if(!a||a.length%4!=0)return null;let b=a.endsWith("==")?2:+!!a.endsWith("="),c=a.length-b;for(let b=0;b<c;b+=1){var d;if(!((d=a.charCodeAt(b))>=65&&d<=90||d>=97&&d<=122||d>=48&&d<=57||43===d||47===d))return null}for(let b=c;b<a.length;b+=1)if("="!==a[b])return null;return a.length/4*3-b}(a.data);return null!==b&&b<=0xa00000}(b))return"Each image must be valid base64 image data of 10MB or smaller"}return null}},95412:(a,b,c)=>{function d(a,b){if("string"!=typeof a||0===a.trim().length)throw Error(`Session liveness provider ${b} must be a non-empty string`)}c.d(b,{Vj:()=>j,mb:()=>h,u4:()=>i});let e=function(){let a,b=globalThis,c=Symbol.for("@agegr/pi-web/session-liveness/v1"),e=b[c];if(e&&"object"==typeof e&&1===e.version&&"function"==typeof e.register&&"function"==typeof e.hasActiveProvider)return e;let f=(a=new Map,{version:1,register(b){if(!b||"object"!=typeof b)throw Error("Session liveness provider must be an object");if(d(b.name,"name"),d(b.sessionId,"sessionId"),void 0!==b.sessionFile&&d(b.sessionFile,"sessionFile"),"function"!=typeof b.isActive)throw Error("Session liveness provider isActive must be a function");let c=Symbol(b.name);a.set(c,b);let e=!1;return()=>{e||(e=!0,a.delete(c))}},hasActiveProvider(b){let c=new Set([b.sessionId,b.sessionFile].filter(a=>!!a));for(let b of a.values())if(c.has(b.sessionId)||b.sessionFile&&c.has(b.sessionFile))try{let a=b.isActive();if("boolean"!=typeof a)throw Error("isActive() must return a boolean");if(a)return!0}catch(a){return console.error(`[pi-web] Session liveness provider '${b.name}' failed; preserving the session:`,a),!0}return!1}});return b[c]=f,f}();function f(){let a=globalThis,b=Symbol.for("@agegr/pi-web/session-liveness-leases/v1"),c=a[b];if(c instanceof Map)return c;let d=new Map;return a[b]=d,d}function g(a){a.timer&&clearTimeout(a.timer),a.timer=setTimeout(()=>{!a.released&&a.expiresAt<=Date.now()?a.release():a.released||g(a)},Math.max(1,a.expiresAt-Date.now()));let b=a.timer.unref;b?.call(a.timer)}function h(a){var b;let c=f(),d=(b={name:"pi-web-selected-session",sessionId:a,isActive:()=>!h.released&&h.expiresAt>Date.now()},e.register(b)),h={sessionId:a,expiresAt:Date.now()+9e4,released:!1,timer:null,renew:()=>{h.released||(h.expiresAt=Date.now()+9e4,g(h))},release:()=>{if(h.released)return;h.released=!0,h.timer&&clearTimeout(h.timer),d();let b=c.get(a);b?.delete(h),b?.size===0&&c.delete(a)}},i=c.get(a)??new Set;return i.add(h),c.set(a,i),g(h),h}function i(a){let b=f().get(a);if(!b)return 0;let c=0;for(let a of[...b]){if(a.released||a.expiresAt<=Date.now()){a.release();continue}a.renew(),c+=1}return c}function j(a){return e.hasActiveProvider(a)}},99324:(a,b,c)=>{c.d(b,{Wv:()=>h,jN:()=>j,vH:()=>i});var d=c(29021),e=c(33873),f=c(82536),g=c(58864);let h=8;function i(a,b){if(b.length>h)throw Error(`Agent input_files accepts at most ${h} files`);let c=(0,d.realpathSync)(a),i=new Set([c]),j=new TextDecoder("utf-8",{fatal:!0}),k=new Set,l=[],m=0;for(let h of b){let b,n;if(!h.trim())throw Error("Agent input_files paths must not be empty");try{b=(0,d.realpathSync)((0,e.resolve)(a,h))}catch{throw Error(`Agent input file does not exist: ${h}`)}if(!(0,f.o)(b,i))throw Error(`Agent input file is outside the session cwd: ${h}`);if(!(0,d.statSync)(b).isFile())throw Error(`Agent input path is not a file: ${h}`);if(k.has(b))continue;k.add(b);let o=(0,d.readFileSync)(b);if((m+=o.byteLength)>524288)throw Error("Agent input_files exceeds the 524288-byte total limit");try{n=j.decode(o)}catch{throw Error(`Agent input file is not valid UTF-8 text: ${h}`)}l.push({path:(0,g.W3)((0,e.relative)(c,b)),content:n})}return l}function j(a,b){if(0===b.length)return a;let c=b.map(a=>`<document path=${JSON.stringify(a.path)}>
|
|
9
9
|
${a.content}
|
|
10
10
|
</document>`).join("\n\n");return`${a}
|
|
11
11
|
|