@qt4798/pi-web 0.18.11 → 0.18.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +6 -6
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/required-server-files.js +1 -1
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/_global-error.html +1 -1
  9. package/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/_not-found.html +1 -1
  15. package/.next/server/app/_not-found.rsc +1 -1
  16. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  19. package/.next/server/app/api/agent/[id]/events/route.js +3 -3
  20. package/.next/server/app/api/agent/running/events/route.js +2 -2
  21. package/.next/server/app/api/app-update/route.js +1 -1
  22. package/.next/server/app/api/auth/login/[provider]/route.js +1 -1
  23. package/.next/server/app/api/backup/import/route.js +1 -1
  24. package/.next/server/app/api/events/route.js +3 -3
  25. package/.next/server/app/api/files/[...path]/route.js +2 -2
  26. package/.next/server/app/api/git/diff/route.js +2 -2
  27. package/.next/server/app/api/git/status/route.js +2 -2
  28. package/.next/server/app/api/skills/install/route.js +1 -1
  29. package/.next/server/app/api/tasks/[id]/changed-files/route.js +2 -2
  30. package/.next/server/app/api/tasks/[id]/diff/route.js +2 -2
  31. package/.next/server/app/api/themes/[name]/route.js +1 -1
  32. package/.next/server/app/api/themes/[name]/route.js.nft.json +1 -1
  33. package/.next/server/app/api/themes/route.js +1 -1
  34. package/.next/server/app/api/themes/route.js.nft.json +1 -1
  35. package/.next/server/app/api/web-auth/route.js +1 -1
  36. package/.next/server/app/index.html +1 -1
  37. package/.next/server/app/index.rsc +3 -3
  38. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  39. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  40. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  41. package/.next/server/app/login/page.js +1 -1
  42. package/.next/server/app/login/page.js.nft.json +1 -1
  43. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  44. package/.next/server/app/login.html +1 -1
  45. package/.next/server/app/login.rsc +2 -2
  46. package/.next/server/app/login.segments/_full.segment.rsc +2 -2
  47. package/.next/server/app/login.segments/_tree.segment.rsc +1 -1
  48. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  49. package/.next/server/app/page.js +7 -7
  50. package/.next/server/app/page.js.nft.json +1 -1
  51. package/.next/server/app/page_client-reference-manifest.js +1 -1
  52. package/.next/server/app-paths-manifest.json +6 -6
  53. package/.next/server/chunks/4253.js +1 -1
  54. package/.next/server/chunks/6429.js +1 -1
  55. package/.next/server/chunks/{1213.js → 6593.js} +1 -1
  56. package/.next/server/chunks/7915.js +1 -1
  57. package/.next/server/chunks/8526.js +1 -0
  58. package/.next/server/middleware-build-manifest.js +1 -1
  59. package/.next/server/middleware.js +1 -1
  60. package/.next/server/pages/404.html +1 -1
  61. package/.next/server/pages/500.html +1 -1
  62. package/.next/server/server-reference-manifest.json +1 -1
  63. package/.next/static/chunks/5170-6ee3710ea5c117f3.js +1 -0
  64. package/.next/static/chunks/app/login/{page-9e7302325b4e8bec.js → page-7d898795adddde04.js} +1 -1
  65. package/.next/static/chunks/app/{page-34c582c8b53234cc.js → page-abc85eb2cca48bce.js} +7 -7
  66. package/.next/trace +84 -84
  67. package/.next/trace-build +1 -1
  68. package/package.json +1 -1
  69. package/.next/server/chunks/8152.js +0 -1
  70. package/.next/static/chunks/2981-f36a0ad7528e24b1.js +0 -1
  71. /package/.next/static/{vqJU0DdnD5Laxw6J_7xzv → fs5JGinkTfT6aWXJqEdny}/_buildManifest.js +0 -0
  72. /package/.next/static/{vqJU0DdnD5Laxw6J_7xzv → fs5JGinkTfT6aWXJqEdny}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":1,"files":["../../../node_modules/@swc/helpers/_/_interop_require_default/package.json","../../../node_modules/@swc/helpers/cjs/_interop_require_default.cjs","../../../node_modules/@swc/helpers/esm/_interop_require_default.js","../../../node_modules/@swc/helpers/package.json","../../../node_modules/next/dist/build/adapter/setup-node-env.external.js","../../../node_modules/next/dist/client/components/hooks-server-context.js","../../../node_modules/next/dist/client/components/static-generation-bailout.js","../../../node_modules/next/dist/client/lib/console.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../node_modules/next/dist/compiled/source-map/package.json","../../../node_modules/next/dist/compiled/source-map/source-map.js","../../../node_modules/next/dist/compiled/stacktrace-parser/package.json","../../../node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js","../../../node_modules/next/dist/compiled/ws/index.js","../../../node_modules/next/dist/compiled/ws/package.json","../../../node_modules/next/dist/lib/client-and-server-references.js","../../../node_modules/next/dist/lib/constants.js","../../../node_modules/next/dist/lib/framework/boundary-constants.js","../../../node_modules/next/dist/lib/interop-default.js","../../../node_modules/next/dist/lib/is-error.js","../../../node_modules/next/dist/lib/picocolors.js","../../../node_modules/next/dist/lib/scheduler.js","../../../node_modules/next/dist/lib/semver-noop.js","../../../node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../../node_modules/next/dist/server/app-render/action-async-storage.external.js","../../../node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../../node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../../node_modules/next/dist/server/app-render/async-local-storage.js","../../../node_modules/next/dist/server/app-render/blocking-route-messages.js","../../../node_modules/next/dist/server/app-render/cache-signal.js","../../../node_modules/next/dist/server/app-render/console-async-storage-instance.js","../../../node_modules/next/dist/server/app-render/console-async-storage.external.js","../../../node_modules/next/dist/server/app-render/dynamic-access-async-storage-instance.js","../../../node_modules/next/dist/server/app-render/dynamic-access-async-storage.external.js","../../../node_modules/next/dist/server/app-render/dynamic-rendering.js","../../../node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js","../../../node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js","../../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js","../../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js","../../../node_modules/next/dist/server/app-render/staged-rendering.js","../../../node_modules/next/dist/server/app-render/sync-io-messages.js","../../../node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../../node_modules/next/dist/server/app-render/work-async-storage.external.js","../../../node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../../node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../../node_modules/next/dist/server/dev/browser-logs/file-logger.js","../../../node_modules/next/dist/server/dynamic-rendering-utils.js","../../../node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../../node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../../node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../../node_modules/next/dist/server/lib/lru-cache.js","../../../node_modules/next/dist/server/lib/parse-stack.js","../../../node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../../node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js","../../../node_modules/next/dist/server/lib/source-maps.js","../../../node_modules/next/dist/server/lib/trace/constants.js","../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../node_modules/next/dist/server/load-manifest.external.js","../../../node_modules/next/dist/server/node-environment-baseline.js","../../../node_modules/next/dist/server/node-environment-extensions/console-dim.external.js","../../../node_modules/next/dist/server/node-environment-extensions/console-exit.js","../../../node_modules/next/dist/server/node-environment-extensions/console-file.js","../../../node_modules/next/dist/server/node-environment-extensions/date.js","../../../node_modules/next/dist/server/node-environment-extensions/error-inspect.js","../../../node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js","../../../node_modules/next/dist/server/node-environment-extensions/io-utils.js","../../../node_modules/next/dist/server/node-environment-extensions/node-crypto.js","../../../node_modules/next/dist/server/node-environment-extensions/random.js","../../../node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js","../../../node_modules/next/dist/server/node-environment-extensions/web-crypto.js","../../../node_modules/next/dist/server/node-environment.js","../../../node_modules/next/dist/server/node-polyfill-crypto.js","../../../node_modules/next/dist/server/patch-error-inspect.js","../../../node_modules/next/dist/server/require-hook.js","../../../node_modules/next/dist/server/response-cache/types.js","../../../node_modules/next/dist/server/runtime-reacts.external.js","../../../node_modules/next/dist/shared/lib/deep-freeze.js","../../../node_modules/next/dist/shared/lib/instant-messages.js","../../../node_modules/next/dist/shared/lib/invariant-error.js","../../../node_modules/next/dist/shared/lib/is-plain-object.js","../../../node_modules/next/dist/shared/lib/is-thenable.js","../../../node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js","../../../node_modules/next/dist/shared/lib/no-fallback-error.external.js","../../../node_modules/next/dist/shared/lib/promise-with-resolvers.js","../../../node_modules/next/dist/shared/lib/server-reference-info.js","../../../node_modules/next/package.json","../../../node_modules/react/cjs/react.development.js","../../../node_modules/react/cjs/react.production.js","../../../node_modules/react/index.js","../../../node_modules/react/package.json","../../../package.json","../../package.json","../chunks/1094.js","../chunks/1399.js","../chunks/1515.js","../chunks/1555.js","../chunks/1601.js","../chunks/1625.js","../chunks/1800.js","../chunks/1860.js","../chunks/2075.js","../chunks/2106.js","../chunks/2169.js","../chunks/2190.js","../chunks/2325.js","../chunks/2408.js","../chunks/2430.js","../chunks/2452.js","../chunks/2744.js","../chunks/2903.js","../chunks/295.js","../chunks/3012.js","../chunks/3186.js","../chunks/3383.js","../chunks/3569.js","../chunks/3869.js","../chunks/3894.js","../chunks/4267.js","../chunks/4315.js","../chunks/4367.js","../chunks/4372.js","../chunks/4538.js","../chunks/4548.js","../chunks/4563.js","../chunks/4674.js","../chunks/4741.js","../chunks/4980.js","../chunks/5029.js","../chunks/5318.js","../chunks/5974.js","../chunks/6052.js","../chunks/611.js","../chunks/6253.js","../chunks/6337.js","../chunks/6366.js","../chunks/673.js","../chunks/6916.js","../chunks/703.js","../chunks/7233.js","../chunks/7265.js","../chunks/7307.js","../chunks/7445.js","../chunks/7561.js","../chunks/7710.js","../chunks/7744.js","../chunks/7790.js","../chunks/7799.js","../chunks/7872.js","../chunks/8106.js","../chunks/8152.js","../chunks/8294.js","../chunks/8333.js","../chunks/835.js","../chunks/8397.js","../chunks/8604.js","../chunks/8713.js","../chunks/8782.js","../chunks/8920.js","../chunks/922.js","../chunks/9280.js","../chunks/9486.js","../chunks/9509.js","../webpack-runtime.js","page_client-reference-manifest.js"]}
1
+ {"version":1,"files":["../../../node_modules/@swc/helpers/_/_interop_require_default/package.json","../../../node_modules/@swc/helpers/cjs/_interop_require_default.cjs","../../../node_modules/@swc/helpers/esm/_interop_require_default.js","../../../node_modules/@swc/helpers/package.json","../../../node_modules/next/dist/build/adapter/setup-node-env.external.js","../../../node_modules/next/dist/client/components/hooks-server-context.js","../../../node_modules/next/dist/client/components/static-generation-bailout.js","../../../node_modules/next/dist/client/lib/console.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../node_modules/next/dist/compiled/source-map/package.json","../../../node_modules/next/dist/compiled/source-map/source-map.js","../../../node_modules/next/dist/compiled/stacktrace-parser/package.json","../../../node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js","../../../node_modules/next/dist/compiled/ws/index.js","../../../node_modules/next/dist/compiled/ws/package.json","../../../node_modules/next/dist/lib/client-and-server-references.js","../../../node_modules/next/dist/lib/constants.js","../../../node_modules/next/dist/lib/framework/boundary-constants.js","../../../node_modules/next/dist/lib/interop-default.js","../../../node_modules/next/dist/lib/is-error.js","../../../node_modules/next/dist/lib/picocolors.js","../../../node_modules/next/dist/lib/scheduler.js","../../../node_modules/next/dist/lib/semver-noop.js","../../../node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../../node_modules/next/dist/server/app-render/action-async-storage.external.js","../../../node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../../node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../../node_modules/next/dist/server/app-render/async-local-storage.js","../../../node_modules/next/dist/server/app-render/blocking-route-messages.js","../../../node_modules/next/dist/server/app-render/cache-signal.js","../../../node_modules/next/dist/server/app-render/console-async-storage-instance.js","../../../node_modules/next/dist/server/app-render/console-async-storage.external.js","../../../node_modules/next/dist/server/app-render/dynamic-access-async-storage-instance.js","../../../node_modules/next/dist/server/app-render/dynamic-access-async-storage.external.js","../../../node_modules/next/dist/server/app-render/dynamic-rendering.js","../../../node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js","../../../node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js","../../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js","../../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js","../../../node_modules/next/dist/server/app-render/staged-rendering.js","../../../node_modules/next/dist/server/app-render/sync-io-messages.js","../../../node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../../node_modules/next/dist/server/app-render/work-async-storage.external.js","../../../node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../../node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../../node_modules/next/dist/server/dev/browser-logs/file-logger.js","../../../node_modules/next/dist/server/dynamic-rendering-utils.js","../../../node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../../node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../../node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../../node_modules/next/dist/server/lib/lru-cache.js","../../../node_modules/next/dist/server/lib/parse-stack.js","../../../node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../../node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js","../../../node_modules/next/dist/server/lib/source-maps.js","../../../node_modules/next/dist/server/lib/trace/constants.js","../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../node_modules/next/dist/server/load-manifest.external.js","../../../node_modules/next/dist/server/node-environment-baseline.js","../../../node_modules/next/dist/server/node-environment-extensions/console-dim.external.js","../../../node_modules/next/dist/server/node-environment-extensions/console-exit.js","../../../node_modules/next/dist/server/node-environment-extensions/console-file.js","../../../node_modules/next/dist/server/node-environment-extensions/date.js","../../../node_modules/next/dist/server/node-environment-extensions/error-inspect.js","../../../node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js","../../../node_modules/next/dist/server/node-environment-extensions/io-utils.js","../../../node_modules/next/dist/server/node-environment-extensions/node-crypto.js","../../../node_modules/next/dist/server/node-environment-extensions/random.js","../../../node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js","../../../node_modules/next/dist/server/node-environment-extensions/web-crypto.js","../../../node_modules/next/dist/server/node-environment.js","../../../node_modules/next/dist/server/node-polyfill-crypto.js","../../../node_modules/next/dist/server/patch-error-inspect.js","../../../node_modules/next/dist/server/require-hook.js","../../../node_modules/next/dist/server/response-cache/types.js","../../../node_modules/next/dist/server/runtime-reacts.external.js","../../../node_modules/next/dist/shared/lib/deep-freeze.js","../../../node_modules/next/dist/shared/lib/instant-messages.js","../../../node_modules/next/dist/shared/lib/invariant-error.js","../../../node_modules/next/dist/shared/lib/is-plain-object.js","../../../node_modules/next/dist/shared/lib/is-thenable.js","../../../node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js","../../../node_modules/next/dist/shared/lib/no-fallback-error.external.js","../../../node_modules/next/dist/shared/lib/promise-with-resolvers.js","../../../node_modules/next/dist/shared/lib/server-reference-info.js","../../../node_modules/next/package.json","../../../node_modules/react/cjs/react.development.js","../../../node_modules/react/cjs/react.production.js","../../../node_modules/react/index.js","../../../node_modules/react/package.json","../../../package.json","../../package.json","../chunks/1094.js","../chunks/1399.js","../chunks/1515.js","../chunks/1555.js","../chunks/1601.js","../chunks/1625.js","../chunks/1800.js","../chunks/1860.js","../chunks/2075.js","../chunks/2106.js","../chunks/2169.js","../chunks/2190.js","../chunks/2325.js","../chunks/2408.js","../chunks/2430.js","../chunks/2452.js","../chunks/2744.js","../chunks/2903.js","../chunks/295.js","../chunks/3012.js","../chunks/3186.js","../chunks/3383.js","../chunks/3569.js","../chunks/3869.js","../chunks/3894.js","../chunks/4267.js","../chunks/4315.js","../chunks/4367.js","../chunks/4372.js","../chunks/4538.js","../chunks/4548.js","../chunks/4563.js","../chunks/4674.js","../chunks/4741.js","../chunks/4980.js","../chunks/5029.js","../chunks/5318.js","../chunks/5974.js","../chunks/6052.js","../chunks/611.js","../chunks/6253.js","../chunks/6337.js","../chunks/6366.js","../chunks/673.js","../chunks/6916.js","../chunks/703.js","../chunks/7233.js","../chunks/7265.js","../chunks/7307.js","../chunks/7445.js","../chunks/7561.js","../chunks/7710.js","../chunks/7744.js","../chunks/7790.js","../chunks/7799.js","../chunks/7872.js","../chunks/8106.js","../chunks/8294.js","../chunks/8333.js","../chunks/835.js","../chunks/8397.js","../chunks/8526.js","../chunks/8604.js","../chunks/8713.js","../chunks/8782.js","../chunks/8920.js","../chunks/922.js","../chunks/9280.js","../chunks/9486.js","../chunks/9509.js","../webpack-runtime.js","page_client-reference-manifest.js"]}
@@ -1 +1 @@
1
- globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"27123":{"*":{"id":"81921","name":"*","chunks":[],"async":false}},"32981":{"*":{"id":"12300","name":"*","chunks":[],"async":false}},"33049":{"*":{"id":"16625","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"35421","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"60440","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"82265","name":"*","chunks":[],"async":false}},"64983":{"*":{"id":"76299","name":"*","chunks":[],"async":false}},"74581":{"*":{"id":"61335","name":"*","chunks":[],"async":false}},"78616":{"*":{"id":"84342","name":"*","chunks":[],"async":false}},"86343":{"*":{"id":"67809","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"74661","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"70664","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/components/ErrorBoundary.tsx":{"id":86343,"name":"*","chunks":["7177","static/chunks/app/layout-9aea218f73c7fe87.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/katex/dist/katex.min.css":{"id":84559,"name":"*","chunks":["7177","static/chunks/app/layout-9aea218f73c7fe87.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/app/globals.css":{"id":66872,"name":"*","chunks":["7177","static/chunks/app/layout-9aea218f73c7fe87.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/app/settings.css":{"id":39979,"name":"*","chunks":["7177","static/chunks/app/layout-9aea218f73c7fe87.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/app/theme-presets.css":{"id":5332,"name":"*","chunks":["7177","static/chunks/app/layout-9aea218f73c7fe87.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/@fontsource/ia-writer-quattro/index.css":{"id":26408,"name":"*","chunks":["7177","static/chunks/app/layout-9aea218f73c7fe87.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/@fontsource/ia-writer-quattro/400-italic.css":{"id":8057,"name":"*","chunks":["7177","static/chunks/app/layout-9aea218f73c7fe87.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/@fontsource/ia-writer-quattro/700.css":{"id":35279,"name":"*","chunks":["7177","static/chunks/app/layout-9aea218f73c7fe87.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/@fontsource/ia-writer-quattro/700-italic.css":{"id":48276,"name":"*","chunks":["7177","static/chunks/app/layout-9aea218f73c7fe87.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/@fontsource/lilex/index.css":{"id":12043,"name":"*","chunks":["7177","static/chunks/app/layout-9aea218f73c7fe87.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/app/login/page.tsx":{"id":33049,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/components/AppShell.tsx":{"id":64983,"name":"*","chunks":["7330","static/chunks/d3ac728e-7964f816a1ca64e5.js","8272","static/chunks/8272-a2dd6dc928b6876e.js","2981","static/chunks/2981-f36a0ad7528e24b1.js","8974","static/chunks/app/page-34c582c8b53234cc.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/hooks/useI18n.tsx":{"id":32981,"name":"*","chunks":["7330","static/chunks/d3ac728e-7964f816a1ca64e5.js","8272","static/chunks/8272-a2dd6dc928b6876e.js","2981","static/chunks/2981-f36a0ad7528e24b1.js","8974","static/chunks/app/page-34c582c8b53234cc.js"],"async":false}},"entryCSSFiles":{"/Volumes/1T 原装/项目研发/pi-web-QT/":[],"/Volumes/1T 原装/项目研发/pi-web-QT/app/layout":[{"inlined":false,"path":"static/css/2f46e0db0d4a3aed.css"},{"inlined":false,"path":"static/css/2d92ddfd19010e95.css"},{"inlined":false,"path":"static/css/ea3fe7c3e0049beb.css"}],"/Volumes/1T 原装/项目研发/pi-web-QT/app/page":[]},"rscModuleMapping":{"5332":{"*":{"id":"39612","name":"*","chunks":[],"async":false}},"8057":{"*":{"id":"17","name":"*","chunks":[],"async":false}},"12043":{"*":{"id":"47561","name":"*","chunks":[],"async":false}},"26408":{"*":{"id":"77222","name":"*","chunks":[],"async":false}},"27123":{"*":{"id":"95547","name":"*","chunks":[],"async":false}},"32981":{"*":{"id":"73884","name":"*","chunks":[],"async":false}},"33049":{"*":{"id":"69613","name":"*","chunks":[],"async":false}},"35279":{"*":{"id":"10289","name":"*","chunks":[],"async":false}},"39979":{"*":{"id":"77261","name":"*","chunks":[],"async":false}},"48276":{"*":{"id":"64388","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"98099","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"15098","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"33859","name":"*","chunks":[],"async":false}},"64983":{"*":{"id":"35790","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}},"86343":{"*":{"id":"24387","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"36675","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"98562","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}};
1
+ globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"15170":{"*":{"id":"23198","name":"*","chunks":[],"async":false}},"27123":{"*":{"id":"81921","name":"*","chunks":[],"async":false}},"33049":{"*":{"id":"16625","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"35421","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"60440","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"82265","name":"*","chunks":[],"async":false}},"64983":{"*":{"id":"76299","name":"*","chunks":[],"async":false}},"74581":{"*":{"id":"61335","name":"*","chunks":[],"async":false}},"78616":{"*":{"id":"84342","name":"*","chunks":[],"async":false}},"86343":{"*":{"id":"67809","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"74661","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"70664","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/components/ErrorBoundary.tsx":{"id":86343,"name":"*","chunks":["7177","static/chunks/app/layout-9aea218f73c7fe87.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/katex/dist/katex.min.css":{"id":84559,"name":"*","chunks":["7177","static/chunks/app/layout-9aea218f73c7fe87.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/app/globals.css":{"id":66872,"name":"*","chunks":["7177","static/chunks/app/layout-9aea218f73c7fe87.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/app/settings.css":{"id":39979,"name":"*","chunks":["7177","static/chunks/app/layout-9aea218f73c7fe87.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/app/theme-presets.css":{"id":5332,"name":"*","chunks":["7177","static/chunks/app/layout-9aea218f73c7fe87.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/@fontsource/ia-writer-quattro/index.css":{"id":26408,"name":"*","chunks":["7177","static/chunks/app/layout-9aea218f73c7fe87.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/@fontsource/ia-writer-quattro/400-italic.css":{"id":8057,"name":"*","chunks":["7177","static/chunks/app/layout-9aea218f73c7fe87.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/@fontsource/ia-writer-quattro/700.css":{"id":35279,"name":"*","chunks":["7177","static/chunks/app/layout-9aea218f73c7fe87.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/@fontsource/ia-writer-quattro/700-italic.css":{"id":48276,"name":"*","chunks":["7177","static/chunks/app/layout-9aea218f73c7fe87.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/node_modules/@fontsource/lilex/index.css":{"id":12043,"name":"*","chunks":["7177","static/chunks/app/layout-9aea218f73c7fe87.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/app/login/page.tsx":{"id":33049,"name":"*","chunks":[],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/components/AppShell.tsx":{"id":64983,"name":"*","chunks":["7330","static/chunks/d3ac728e-7964f816a1ca64e5.js","8272","static/chunks/8272-a2dd6dc928b6876e.js","5170","static/chunks/5170-6ee3710ea5c117f3.js","8974","static/chunks/app/page-abc85eb2cca48bce.js"],"async":false},"/Volumes/1T 原装/项目研发/pi-web-QT/hooks/useI18n.tsx":{"id":15170,"name":"*","chunks":["7330","static/chunks/d3ac728e-7964f816a1ca64e5.js","8272","static/chunks/8272-a2dd6dc928b6876e.js","5170","static/chunks/5170-6ee3710ea5c117f3.js","8974","static/chunks/app/page-abc85eb2cca48bce.js"],"async":false}},"entryCSSFiles":{"/Volumes/1T 原装/项目研发/pi-web-QT/":[],"/Volumes/1T 原装/项目研发/pi-web-QT/app/layout":[{"inlined":false,"path":"static/css/2f46e0db0d4a3aed.css"},{"inlined":false,"path":"static/css/2d92ddfd19010e95.css"},{"inlined":false,"path":"static/css/ea3fe7c3e0049beb.css"}],"/Volumes/1T 原装/项目研发/pi-web-QT/app/page":[]},"rscModuleMapping":{"5332":{"*":{"id":"39612","name":"*","chunks":[],"async":false}},"8057":{"*":{"id":"17","name":"*","chunks":[],"async":false}},"12043":{"*":{"id":"47561","name":"*","chunks":[],"async":false}},"15170":{"*":{"id":"73884","name":"*","chunks":[],"async":false}},"26408":{"*":{"id":"77222","name":"*","chunks":[],"async":false}},"27123":{"*":{"id":"95547","name":"*","chunks":[],"async":false}},"33049":{"*":{"id":"69613","name":"*","chunks":[],"async":false}},"35279":{"*":{"id":"10289","name":"*","chunks":[],"async":false}},"39979":{"*":{"id":"77261","name":"*","chunks":[],"async":false}},"48276":{"*":{"id":"64388","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"98099","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"15098","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"33859","name":"*","chunks":[],"async":false}},"64983":{"*":{"id":"35790","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}},"86343":{"*":{"id":"24387","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"36675","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"98562","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}};
@@ -35,19 +35,19 @@
35
35
  "/icon.png/route": "app/icon.png/route.js",
36
36
  "/icon.svg/route": "app/icon.svg/route.js",
37
37
  "/api/agent/running/route": "app/api/agent/running/route.js",
38
- "/api/agent/running/events/route": "app/api/agent/running/events/route.js",
39
38
  "/api/agent/[id]/bash-output/route": "app/api/agent/[id]/bash-output/route.js",
40
39
  "/api/app-update/route": "app/api/app-update/route.js",
41
- "/api/agent/[id]/events/route": "app/api/agent/[id]/events/route.js",
42
- "/api/auth/api-key/[provider]/route": "app/api/auth/api-key/[provider]/route.js",
43
40
  "/api/auth/combined/route": "app/api/auth/combined/route.js",
44
- "/api/auth/login/[provider]/route": "app/api/auth/login/[provider]/route.js",
41
+ "/api/agent/running/events/route": "app/api/agent/running/events/route.js",
45
42
  "/api/auth/logout/[provider]/route": "app/api/auth/logout/[provider]/route.js",
46
43
  "/api/auth/providers/route": "app/api/auth/providers/route.js",
47
44
  "/api/backup/export/route": "app/api/backup/export/route.js",
48
- "/api/backup/import/route": "app/api/backup/import/route.js",
45
+ "/api/agent/[id]/events/route": "app/api/agent/[id]/events/route.js",
49
46
  "/api/events/route": "app/api/events/route.js",
50
47
  "/api/features/route": "app/api/features/route.js",
48
+ "/api/auth/api-key/[provider]/route": "app/api/auth/api-key/[provider]/route.js",
49
+ "/api/backup/import/route": "app/api/backup/import/route.js",
50
+ "/api/auth/login/[provider]/route": "app/api/auth/login/[provider]/route.js",
51
51
  "/api/git/diff/route": "app/api/git/diff/route.js",
52
52
  "/api/git/push/route": "app/api/git/push/route.js",
53
53
  "/api/git/stash/route": "app/api/git/stash/route.js",
@@ -65,8 +65,8 @@
65
65
  "/api/models/route": "app/api/models/route.js",
66
66
  "/api/modes/route": "app/api/modes/route.js",
67
67
  "/api/plugins/check/route": "app/api/plugins/check/route.js",
68
- "/api/plugins/route": "app/api/plugins/route.js",
69
68
  "/api/project-aliases/route": "app/api/project-aliases/route.js",
69
+ "/api/plugins/route": "app/api/plugins/route.js",
70
70
  "/api/project-trust/route": "app/api/project-trust/route.js",
71
71
  "/api/projects/visibility/route": "app/api/projects/visibility/route.js",
72
72
  "/api/provider-usage/query/route": "app/api/provider-usage/query/route.js",
@@ -5,7 +5,7 @@ ${b}`:`Subagent ${a.sessionId} completed without text output.`}return"aborted"==
5
5
  ${k(a)}`}function m(a,b,c=()=>!0){return{name:o,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 e.runInBackground&&s.has(e.status)&&a.markResultConsumed(e.sessionId),{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 n(a){let b=a.extensions.find(a=>a.path===p);if(!b?.tools.has("Agent"))return a;let c=new Set(a.extensions.filter(a=>a.path!==p).filter(a=>{let b=(a.sourceInfo?.source??"").replace(/^npm:/,"").split("@")[0],c=a.path.replaceAll("\\","/").split("/");return b===r||c.some(a=>a===r)}).filter(a=>[...q].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!==p||![...c].some(b=>[...q].some(c=>a.error===`Tool "${c}" conflicts with ${b}`))))}}d()}catch(a){d(a)}})},12144:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{OF:()=>T});var e=c(75430),f=c(29862),g=c(55511),h=c(29021),i=c(33873),j=c(18437),k=c(17114),l=c(65869),m=c(96515),n=c(15253),o=c(69453),p=c(8084),q=c(41035),r=c(54035),s=c(88573),t=c(12559),u=c(84851),v=c(70274),w=c(5564),x=c(27486),y=c(81186),z=c(61577),A=c(44290),B=c(30116),C=c(97563),D=c(32302),E=c(2692),F=c(57856),G=c(29040),H=c(91099),I=c(12394),J=a([e,f,m,n,o,p,q,u,v,w,x,y,A,G,I]);[e,f,m,n,o,p,q,u,v,w,x,y,A,G,I]=J.then?(await J)():J;let U=new Set(["agent_start","message_start","message_update","message_end","agent_end","entry_appended","session_info_changed","queue_update","prompt_done","agent_settled","auto_compaction_end","compaction_end"]),V=function(a=process.env.PI_WEB_IDLE_TIMEOUT_MS){let b=(a??"").trim();if(""===b)return 6e5;let c=Number(b);return!Number.isFinite(c)||c<0||!Number.isInteger(c)||c>0x7fffffff?(console.warn(`[pi-web] invalid PI_WEB_IDLE_TIMEOUT_MS "${a}", falling back to 600000ms`),6e5):c}(),W=new Set(["fork","clone"]),X=new Set(["get_state","abort","steer","follow_up_draft"]),Y=["read","bash","powershell","edit","write","grep","find","ls"];class Z 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 $=new Z,_=new f.KeybindingsManager(f.TUI_KEYBINDINGS);function K(a,b){if(0===b.length)return[];let c=new Set(Y),d=(0,w.wQ)(b,a.settingsManager.getDefaultTools()),e=a.getAllTools().map(a=>a.name).filter(a=>!c.has(a));return(0,x.H4)([...new Set([...d,...e])],(0,x.t0)())}class aa{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.promptRunning=!1,this.promptPhase=null,this.extensionsBound=!1,this.extensionBindingPromise=null,this.extensionBindingError=null,this.forceEmptySystemPrompt=!1,this.exactSystemPrompt=null,this.pendingPromptCount=0,this.activeMutatingCommands=0,this.agentRunNeedsCompletion=!1,this.promptAdmissionTail=Promise.resolve(),this.sessionReplacement=null,this.forceShutdownOnIdle=!1,this.unsubscribe=null,this.idleTimer=null,this.subscriberCount=0,this.disposeGraceTimer=null,this.lastActivityAt=Date.now(),this.queueMirror=[],this.queueRecovery=[],this.persistenceRevoked=!1,this.queueBootstrap=null,this.pendingQueueHints={steer:[],followUp:[]},this.queueMutationTail=Promise.resolve(),this.onDestroyCallback=null,this.shutdownPromise=null,this.sessionShutdownEmitted=!1,this._alive=!0,this.approvalPolicy=(0,B.ni)((0,A.lN)().permissionRules),this.approvalMode=(0,A.lN)().toolApprovalMode,this.pendingApprovals=new Map,this.approvalSeq=0,this.approvalHookInstalled=!1,this.goalEngine=new H.aA,this.goalTokensAccounted=0,this.goalToolCallsAccounted=0,this.goalContinuationInFlight=!1,this.goalContinuationPending=!1,this.goalDriveScheduled=!1,this.wrapperChatOnly=!1,this.wrapperSuppressNotifications=!1,this.cwd="string"==typeof b?b:"";const c="string"==typeof b?{}:b;c.onAgentRunComplete&&(this.onAgentRunComplete=c.onAgentRunComplete),c.suppressCompletionNotifications&&this.setSuppressCompletionNotifications(!0),c.chatOnly&&this.setChatOnly(!0),c.exactSystemPrompt&&(this.exactSystemPrompt=c.exactSystemPrompt(),this.applyExactSystemPrompt());const d=(0,A.lN)(a.sessionId);if(this.approvalMode=d.toolApprovalMode,this.approvalPolicy=(0,B.ni)(d.permissionRules),a.sessionFile){const b=(0,H.bo)(a.sessionFile);"idle"!==b.status&&this.goalEngine.hydrate(b)}}get sessionId(){return this.inner.sessionId}get sessionFile(){return this.inner.sessionFile??""}isAlive(){return this._alive}evictIfDiskAhead(){if(!this.isAlive()||this.isRunning())return!1;let a=(0,o.H6)(this.sessionFile);return!(!a||this.inner.sessionManager.getEntry(a)||this.isRunning())&&(this.destroy(),(0,o.mD)(),!0)}async waitUntilReady(){}isShuttingDown(){return null!==this.shutdownPromise}whenShutdown(){return this.shutdownPromise}isRunning(){return this._alive&&(this.pendingPromptCount>0||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)}runtimeSnapshot(){let a=this.inner.isStreaming,b=this.promptRunning,c=this.inner.isCompacting,d=this.inner.isBashRunning;return{id:this.sessionId,running:this.isRunning(),isStreaming:a,isPromptRunning:b,isCompacting:c,isBashRunning:d,phase:d?"running_command":this.promptPhase??(a||b||c?"waiting_model":null)}}setChatOnly(a){this.wrapperChatOnly=a}setSuppressCompletionNotifications(a){this.wrapperSuppressNotifications=a}isChatOnly(){return this.wrapperChatOnly}hasSuppressedCompletionNotifications(){return this.wrapperSuppressNotifications}start(){this.installApprovalHook(),this.goalEngine.setOnChanged(a=>{this.sessionFile&&!this.persistenceRevoked&&(0,H.eG)(this.sessionFile,a),this.emit({type:"goal_state_changed",goalState:a}),R("goal_state_changed",this.sessionId,{type:"goal_state_changed",goalState:a})}),this.goalEngine.isRunning()&&(this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()),this.unsubscribe=this.inner.subscribe(a=>{("agent_end"===a.type||"message_end"===a.type||"entry_appended"===a.type||"session_info_changed"===a.type)&&(0,o.mD)(),("agent_end"===a.type||"agent_settled"===a.type||"auto_compaction_end"===a.type||"compaction_end"===a.type)&&this.resetIdleTimer(),"agent_start"===a.type&&(this.goalEngine.onAgentStart(),this.agentRunNeedsCompletion=!0),"agent_settled"===a.type&&(this.handleGoalSettled(),this.notifyAgentRunCompleteIfIdle()),"queue_update"===a.type&&this.reconcileQueue(a.steering,a.followUp),U.has(a.type)&&R(a.type,this.sessionId,a);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)),this.emit(a),P()}),this.resetIdleTimer()}loadQueueRecovery(){if(!this.sessionFile)return;let a=this.inner.getSteeringMessages(),b=this.inner.getFollowUpMessages();if(a.length||b.length){this.queueRecovery=[],this.reconcileQueue([...a],[...b]);return}this.queueRecovery=(0,k.ov)(this.sessionFile)}getGoalState(){return this.goalEngine.getState()}handleGoalSettled(){if(!this.goalEngine.isRunning()){this.goalEngine.disarmContinuation(),this.goalContinuationPending=!1;return}let a=this.inner.getLastAssistantText()??"",b=this.currentSessionUsageTotal(),c=Math.max(0,b-this.goalTokensAccounted);this.goalTokensAccounted=b;let d=this.currentSessionToolCallTotal(),e=Math.max(0,d-this.goalToolCallsAccounted);this.goalToolCallsAccounted=d;let{verdict:f}=this.goalEngine.settleTurn(a,c,e);if("continue"!==f.action){this.goalEngine.disarmContinuation(),this.goalContinuationPending=!1;return}this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()}maybeDriveGoalContinuation(){if(this.goalContinuationPending&&!this.goalDriveScheduled){if(!this.goalEngine.isRunning()){this.goalContinuationPending=!1;return}this.goalDriveScheduled=!0,setTimeout(()=>{this.goalDriveScheduled=!1,this.tryDriveGoalContinuation()},0)}}cancelGoalContinuation(){this.goalContinuationPending=!1,this.goalEngine.disarmContinuation()}tryDriveGoalContinuation(){let a=M(this.sessionId);if(!this._alive||this.isShuttingDown()||a.deleted||a.barriers>0)return void this.cancelGoalContinuation();if(this.goalContinuationPending){if(!this.goalEngine.isRunning()){this.goalContinuationPending=!1;return}this.goalContinuationInFlight||this.promptRunning||this.inner.isStreaming||this.inner.isBashRunning||(this.goalContinuationPending=!1,this.driveGoalContinuation())}}driveGoalContinuation(){if(!this.goalEngine.isRunning()||this.goalContinuationInFlight)return;this.goalContinuationInFlight=!0,this.promptRunning=!0,this.promptPhase="waiting_model",this.resetIdleTimer(),P();let a=()=>{this.promptRunning=!1,this.promptPhase=null,this.resetIdleTimer(),P()};this.acquirePromptAdmission().then(async b=>{try{if(!this.goalEngine.isRunning())return void a();let b=this.goalEngine.getState().goalText;if(!this._alive||this.isShuttingDown()||!b)return void a();N(this.sessionId),await this.inner.prompt((0,H.bx)(b),{source:"rpc",preflightResult:a=>{if(a){if(!this._alive||this.isShuttingDown()||!this.goalEngine.isRunning())throw new DOMException("Goal continuation cancelled","AbortError");N(this.sessionId)}}}),a(),this.emit({type:"prompt_done"}),this.maybeDriveGoalContinuation()}catch(b){a(),this.emit({type:"prompt_error",errorMessage:b instanceof Error?b.message:String(b)})}finally{b(),this.goalContinuationInFlight=!1}})}handleGoalStartCommand(a,b){let c=this.goalEngine.start(a,b);return this.goalTokensAccounted=this.currentSessionUsageTotal(),this.goalToolCallsAccounted=this.currentSessionToolCallTotal(),c}handleGoalStopCommand(){return this.goalEngine.stop(),this.goalTokensAccounted=0,this.goalToolCallsAccounted=0,this.goalEngine.getState()}currentSessionUsageTotal(){try{return function(a){let b=0;for(let c of a){let a=c?.message;if(!a||"assistant"!==a.role)continue;let d=a.usage;d&&(b+=(d.input??0)+(d.output??0)+(d.cacheRead??0)+(d.cacheWrite??0))}return b}(this.inner.sessionManager.getEntries())}catch{return 0}}currentSessionToolCallTotal(){try{return function(a){let b=0;for(let c of a){let a=c?.message;if(!a||"assistant"!==a.role)continue;let d=a.content;if(Array.isArray(d))for(let a of d)a&&"object"==typeof a&&"toolCall"===a.type&&(b+=1)}return b}(this.inner.sessionManager.getEntries())}catch{return 0}}setApprovalMode(a){this.approvalMode=a}setApprovalPolicy(a){this.approvalPolicy=a}installApprovalHook(){if(this.approvalHookInstalled||!this.inner.agent?.beforeToolCall)return;this.approvalHookInstalled=!0;let a=this.inner.agent.beforeToolCall;this.inner.agent.beforeToolCall=async b=>{let c=b.toolCall?.name??"",d=b.args,e=(0,B.LD)(this.approvalPolicy,c,{mode:this.approvalMode,readOnly:C.MJ.has(c.toLowerCase()),args:d});if("deny"===e)return{block:!0,reason:`Denied by policy rule: ${c} is not permitted.`};if("ask"===e){let a=await this.askForApproval(c,d);if(!a.approve)return{block:!0,reason:a.reason||`Rejected by user: ${c}`}}return a?a(b):void 0}}askForApproval(a,b){return new Promise(c=>{let d=`approval-${++this.approvalSeq}`,e=setTimeout(()=>{this.pendingApprovals.delete(d),this.emit({type:"tool_approval_resolved",id:d,approve:!1,reason:`Approval request timed out after 120s: ${a}`}),c({approve:!1,reason:`Approval request timed out after 120s: ${a}`})},12e4);this.pendingApprovals.set(d,{resolve:c,timer:e,toolName:a}),this.emit({type:"tool_approval_request",id:d,toolName:a,args:function(a){if(null===a||"object"!=typeof a)return a;let b={};for(let[c,d]of Object.entries(a))if(null!=d&&"content"!==c&&"data"!==c&&"newString"!==c&&"oldString"!==c){if("string"==typeof d){b[c]=d.length>200?`${d.slice(0,200)}…`:d;continue}if("number"==typeof d||"boolean"==typeof d){b[c]=d;continue}b[c]=Array.isArray(d)?`[array:${d.length}]`:"[object]"}return b}(b)})})}resolveApproval(a,b,c){let d=this.pendingApprovals.get(a);return!!d&&(this.pendingApprovals.delete(a),clearTimeout(d.timer),d.resolve({approve:b,reason:c}),!0)}rejectAllApprovals(a){for(let[b,c]of this.pendingApprovals)this.pendingApprovals.delete(b),clearTimeout(c.timer),c.resolve({approve:!1,reason:a})}getPendingApprovals(){return Array.from(this.pendingApprovals.entries()).map(([a,b])=>({id:a,toolName:b.toolName}))}pendingRecoveryView(){return this.queueRecovery.map(({id:a,kind:b,text:c,images:d,queuedAt:e})=>({id:a,kind:b,text:c,hasImages:!!d?.length,queuedAt:e}))}persistQueue(){if(!this.sessionFile||this.persistenceRevoked)return;let a=[...this.queueRecovery,...this.queueBootstrap?.entries??[],...this.queueMirror];a.length?(0,k.pj)(this.sessionFile,a):(0,k.wx)(this.sessionFile)}hintQueueImages(a,b){this.pendingQueueHints[a].push(b?.length?b:[])}reconcileQueue(a,b){let c=(a,b)=>{if(!b)return this.queueMirror.filter(b=>b.kind===a);let c=new Set;return b.map(b=>{let d=this.queueMirror.find(d=>d.kind===a&&d.text===b&&!c.has(d));if(d)return c.add(d),d;let e=(0,k.Gc)(a,b,this.pendingQueueHints[a].shift());return c.add(e),e})};this.queueMirror=[...c("steer",a),...c("followUp",b)],this.persistQueue()}validateImagesSupportedByCurrentModel(){let a=this.inner.model;return!a?.id||Array.isArray(a.input)&&a.input.includes("image")?null:`Model "${a.id}" does not accept image input. Switch to a model with image support.`}async requeueEntry(a){let b=(0,j.kc)(a.images);if(b)throw Error(b);if(a.images?.length){let a=this.validateImagesSupportedByCurrentModel();if(a)throw Error(a)}this.hintQueueImages(a.kind,a.images),"steer"===a.kind?await this.inner.steer(a.text,a.images):await this.inner.followUp(a.text,a.images)}ensureMirrored(a){this.queueMirror.find(b=>b.kind===a.kind&&b.text===a.text)||(this.queueMirror.push({...a}),this.pendingQueueHints[a.kind].pop())}async replaceLiveQueue(a,b){for(let b of(this.inner.clearQueue(),this.pendingQueueHints={steer:[],followUp:[]},a))await this.requeueEntry(b);for(let a of b)await this.requeueEntry(a);let c={steering:[...this.inner.getSteeringMessages()],followUp:[...this.inner.getFollowUpMessages()]};return this.reconcileQueue(c.steering,c.followUp),c}async withQueueMutation(a){let b,c=this.queueMutationTail;this.queueMutationTail=new Promise(a=>{b=a}),await c;try{if(!this._alive||this.isShuttingDown())throw Error("Session is shutting down");return N(this.sessionId),await a()}finally{b()}}async mutateLiveQueue(a,b){return this.withQueueMutation(async()=>{let c=this.queueMirror.filter(a=>"steer"===a.kind),d=this.queueMirror.filter(a=>"followUp"===a.kind),e=b("steer"===a?c:d),f=await this.replaceLiveQueue(c,d);return{value:e,queues:f}})}validateQueueEntries(a){for(let b of a){if("steer"!==b.kind&&"followUp"!==b.kind||"string"!=typeof b.text)continue;let a=(0,j.kc)(b.images);if(a)throw Error(a)}}runAgentContinue(){if(!this._alive||this.isShuttingDown()||this.queueBootstrap||this.isRunning()||this.promptRunning)return;let a=[...this.queueMirror];if(0===a.length)return;let b={entries:a,cancelled:!1};this.queueBootstrap=b,this.queueMirror=[],this.persistQueue(),this.inner.clearQueue(),this.pendingQueueHints={steer:[],followUp:[]},this.pendingPromptCount+=1,this.promptRunning=!0,this.promptPhase="waiting_model",P(),this.bootstrapQueuedRun(b)}cancelQueuedRun(){let a=this.queueBootstrap;a&&(a.cancelled=!0,this.queueRecovery.push(...a.entries),a.entries=[],this.persistQueue())}async bootstrapQueuedRun(a){try{for(let b of[...a.entries]){let c,d,e=await this.acquirePromptAdmission();try{let f,g;if(a.cancelled||!this._alive||this.isShuttingDown()||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)break;N(this.sessionId),this.extensionUiAbortController.signal.aborted&&(this.extensionUiAbortController=new AbortController);let h=!1,i=()=>{h=!0,e()},j=!1,k=this.inner.sessionManager,l=k.appendMessage,m=function(c){let d=l.call(this,c);return c===f&&(g=d),!j&&g&&k.isPersisted()&&k.flushed&&(j=!0,a.entries=a.entries.filter(a=>a.id!==b.id),n()),d},n=()=>{this.queueRecovery=this.queueRecovery.filter(a=>a.id!==b.id),this.persistQueue()};k.appendMessage=m,d=()=>{k.appendMessage===m&&(k.appendMessage=l)},c=this.inner.subscribe(b=>{"message_start"!==b.type&&"message_end"!==b.type||"user"!==b.message.role||f||!h&&a.cancelled||(f=b.message,i(),c?.(),c=void 0)}),await this.inner.prompt(b.text,{...b.images?.length?{images:b.images}:{},source:"rpc",preflightResult:b=>{if(b){if(a.cancelled||!this._alive||this.isShuttingDown())throw new DOMException("Queued run cancelled","AbortError");N(this.sessionId),this.applyExactSystemPrompt(),i()}}})}finally{c?.(),d?.(),e()}}}catch(b){!a.cancelled&&this._alive&&((0,o.mD)(),this.emit({type:"prompt_error",errorMessage:b instanceof Error?b.message:String(b)}))}finally{this.queueRecovery.push(...a.entries),a.entries=[],this.queueBootstrap===a&&(this.queueBootstrap=null),this.persistQueue(),this.pendingPromptCount=Math.max(0,this.pendingPromptCount-1),this.promptRunning=this.pendingPromptCount>0,this.promptRunning||(this.promptPhase=null),this.resetIdleTimer(),P(),this._alive&&this.emit({type:"prompt_done"})}}setForceEmptySystemPrompt(a){this.forceEmptySystemPrompt=a,this.applyForcedEmptySystemPrompt()}setExactSystemPrompt(a){this.exactSystemPrompt=a,this.applyExactSystemPrompt()}beginExtensionBinding(a={}){this.ensureExtensionsBound(a).catch(a=>{console.error("[pi-web] failed to dispatch session_start to extensions:",a instanceof Error?a.message:a)})}ensureExtensionsBound(a={}){return(a.forceEmptySystemPrompt&&(this.forceEmptySystemPrompt=!0),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 pi-web."}),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)}static{this.EXTENSION_BIND_TIMEOUT_MS=15e3}async waitForExtensionsBound(){let a=this.extensionBindingPromise;if(a)try{let b=new Promise((b,c)=>{let d=setTimeout(()=>c(Error("Extension binding timed out; continuing without waiting")),aa.EXTENSION_BIND_TIMEOUT_MS);a.finally(()=>clearTimeout(d))});await Promise.race([a,b])}catch{}this.extensionBindingError&&console.warn("[pi-web] extension binding failed, continuing:",this.extensionBindingError)}shouldWaitForExtensions(a){return"prompt"===a||"steer"===a||"follow_up"===a||"get_commands"===a||"get_state"===a}applyForcedEmptySystemPrompt(){}applyExactSystemPrompt(){}emit(a){for(let b of this.listeners)try{b(a)}catch(a){console.error(`[pi-web] session ${this.sessionId} event listener threw:`,a instanceof Error?a.message:a)}}setActiveToolSelection(a){this.inner.setActiveToolsByName(K(this.inner,a)),this.applyExactSystemPrompt()}async acquirePromptAdmission(){let a,b=this.promptAdmissionTail;return this.promptAdmissionTail=new Promise(b=>{a=b}),await b,a}notifyAgentRunCompleteIfIdle(){if(!(!this.agentRunNeedsCompletion||this.isRunning())&&(this.agentRunNeedsCompletion=!1,!this.wrapperSuppressNotifications))try{this.onAgentRunComplete?.(this.sessionId)}catch(a){console.error("[pi-web] completion listener failed:",a instanceof Error?a.message:a)}}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this._alive&&0!==V&&(this.isRunning()||(this.forceShutdownOnIdle=!1),this.idleTimer=setTimeout(()=>{!this.forceShutdownOnIdle&&(this.isRunning()||(0,t.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)})},V))}touch(){this.lastActivityAt=Date.now(),this.cancelPendingDispose()}hasSubscribers(){return this.subscriberCount>0}get activityTimestamp(){return this.lastActivityAt}cancelPendingDispose(){this.disposeGraceTimer&&(clearTimeout(this.disposeGraceTimer),this.disposeGraceTimer=null)}scheduleDisposeIfIdle(){this.cancelPendingDispose(),!(this.subscriberCount>0||this.isRunning())&&this._alive&&(this.disposeGraceTimer=setTimeout(()=>{this.disposeGraceTimer=null,!(this.subscriberCount>0||this.isRunning())&&this._alive&&this.shutdown().catch(a=>{console.error("[pi-web] failed to shut down unwatched session:",a instanceof Error?a.message:a)})},6e4))}persistSessionFileIfMissing(){if(this.persistenceRevoked||!this._alive)return;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";try{(0,h.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"})}catch(c){if("EEXIST"===c.code||(0,h.existsSync)(b)){a.flushed=!0,(0,o.O8)(this.inner.sessionId,b);return}throw c}a.flushed=!0,(0,o.O8)(this.inner.sessionId,b)}onEvent(a){for(let b of(this.listeners.push(a),this.subscriberCount+=1,this.cancelPendingDispose(),this.pendingUiRequests.values()))a(b);for(let b of this.activeToolEvents.values())a(b);return()=>{queueMicrotask(()=>{let b=this.listeners.indexOf(a);-1!==b&&this.listeners.splice(b,1)}),this.subscriberCount>0&&(this.subscriberCount-=1),this.scheduleDisposeIfIdle()}}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){if(!this._alive)throw Error("Session is shutting down");N(this.sessionId),this.touch();let b=a.type;if(b.startsWith("get_")||"export_queue"===b||this.resetIdleTimer(),"prompt"===b||"steer"===b||"follow_up"===b||"requeue_at"===b){let b=(0,j.kc)(a.images);if(b)throw Error(b);if(Array.isArray(a.images)&&a.images.length>0){let a=this.validateImagesSupportedByCurrentModel();if(a)throw Error(a)}}let c=X.has(b);if(this.sessionReplacement&&!c)throw Error("Session is being copied to a new session");if(W.has(b)&&this.activeMutatingCommands>0)throw Error(`Cannot ${b} while another session command is running`);this.shouldWaitForExtensions(b)&&await this.waitForExtensionsBound();let d=!c;d&&(this.activeMutatingCommands+=1);try{if(!this._alive||this.isShuttingDown())throw Error("Session is shutting down");if(N(this.sessionId),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._alive||this.isShuttingDown())throw Error("Session is shutting down");if(N(this.sessionId),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;f&&this.inner.isStreaming&&this.hintQueueImages("followUp"===f?"followUp":"steer",e);let 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,this.promptRunning=!0,this.promptPhase=String(a.message??"").trimStart().startsWith("/")?"running_command":"waiting_model",P();try{d=this.inner.prompt(a.message,{...e?.length?{images:e}:{},...f?{streamingBehavior:f}:{},source:"rpc",preflightResult:a=>{if(a){if(!this._alive||this.isShuttingDown())throw Error("Session is shutting down");N(this.sessionId),this.applyExactSystemPrompt(),b()}}})}catch(a){throw k(),a}return d.then(()=>{b(),k(),this.promptRunning=!1,this.promptPhase=null,f||this.emit({type:"prompt_done"}),P(),this.maybeDriveGoalContinuation()},a=>{c(a),k(),this.promptRunning=!1,this.promptPhase=null,(0,o.mD)(),g&&(this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),f||this.emit({type:"prompt_done"})),P(),this.maybeDriveGoalContinuation()}).catch(a=>{console.error("[pi-web] prompt completion handler failed:",a instanceof Error?a.message:a)}),await j,null}finally{b()}}case"abort":this.cancelQueuedRun(),this.cancelGoalContinuation(),this.forceShutdownOnIdle=!0,this.extensionUiAbortController.abort(new DOMException("Extension UI cancelled by Stop","AbortError"));try{await this.inner.abort()}finally{this.resetIdleTimer(),this.isRunning()||(this.forceShutdownOnIdle=!1)}return null;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,phase:this.runtimeSnapshot().phase,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()]},pendingRecovery:this.pendingRecoveryView(),contextUsage:b?{percent:b.percent,contextWindow:b.contextWindow,tokens:b.tokens}:null,systemPrompt:this.exactSystemPrompt??this.inner.agent.state?.systemPrompt??"",thinkingLevel:this.inner.agent.state?.thinkingLevel??"off",extensionStatuses:this.getExtensionStatuses(),extensionWidgets:this.getExtensionWidgets(),goalState:this.goalEngine.getState()}}case"goal_start":{let b=String(a.goalText??"").trim();if(!b)throw Error("goal_start requires a non-empty goalText");let c=a.tokenBudget,d="number"==typeof c&&Number.isFinite(c)&&c>0?Math.floor(c):null,e=this.handleGoalStartCommand(b,d);return this.goalContinuationPending=!0,this.maybeDriveGoalContinuation(),{goalState:e}}case"goal_pause":return this.cancelGoalContinuation(),{goalState:this.goalEngine.pause()};case"goal_resume":{let a=this.goalEngine.resume();return"running"===a.status&&(this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()),{goalState:a}}case"goal_stop":return this.cancelGoalContinuation(),{goalState:this.handleGoalStopCommand()};case"goal_edit":{let b=String(a.goalText??"").trim();if(!b)throw Error("goal_edit requires a non-empty goalText");let c=this.goalEngine.edit(b);return"running"===c.status&&(this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()),{goalState:c}}case"get_goal_state":return{goalState:this.goalEngine.getState()};case"set_model":{let{provider:b,modelId:c}=a,d=this.inner.modelRuntime.getModel(b,c);if(!d)try{await this.inner.modelRuntime.refresh({allowNetwork:!1}),d=this.inner.modelRuntime.getModel(b,c)}catch{d=void 0}if(!d)throw Error(`Model not found: ${b}/${c}`);return await this.inner.setModel(d),(0,l.k)(),(0,o.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,o.O8)(k,b),(0,o.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,o.O8)(h,g),(0,o.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,o.O8)(g,f),(0,o.mD)(),await this.shutdownAfterSessionReplacement("clone"),{cancelled:!1,newSessionId:g}})}case"navigate_tree":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,o.mD)(),null}case"compact":try{return await this.inner.compact(a.customInstructions)}finally{(0,o.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,o.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"clear_queue":return this.withQueueMutation(async()=>(this.queueMirror=[],this.pendingQueueHints={steer:[],followUp:[]},this.persistQueue(),this.inner.clearQueue()));case"move_queue":{let b=a.kind,c=Number(a.fromIndex),d=Number(a.toIndex);if("steer"!==b&&"followUp"!==b||!Number.isInteger(c)||!Number.isInteger(d))throw Error("move_queue requires a queue kind and integer indexes");let{queues:e}=await this.mutateLiveQueue(b,a=>{if(c<0||c>=a.length||d<0||d>=a.length)throw Error("move_queue index out of range");let[b]=a.splice(c,1);a.splice(d,0,b)});return e}case"recall_queue_item":{let b=a.kind,c=Number(a.index);if("steer"!==b&&"followUp"!==b||!Number.isInteger(c))throw Error("recall_queue_item requires a queue kind and integer index");let{value:d,queues:e}=await this.mutateLiveQueue(b,a=>{if(c<0||c>=a.length)throw Error("recall_queue_item index out of range");let[b]=a.splice(c,1);return b});return{entry:{text:d.text,images:d.images??[]},...e}}case"requeue_at":{let b=a.kind,c=Number(a.index),d=a.text;if("steer"!==b&&"followUp"!==b||!Number.isInteger(c)||!d?.trim())throw Error("requeue_at requires a queue kind, integer index, and text");let e=a.images,{queues:f}=await this.mutateLiveQueue(b,a=>{if(c<0||c>a.length)throw Error("requeue_at index out of range");a.splice(c,0,(0,k.Gc)(b,d,e))});return f}case"remove_queue_item":{let b=a.kind,c=Number(a.index);if("steer"!==b&&"followUp"!==b||!Number.isInteger(c))throw Error("remove_queue_item requires a queue kind and integer index");let{queues:d}=await this.mutateLiveQueue(b,a=>{if(c<0||c>=a.length)throw Error("remove_queue_item index out of range");a.splice(c,1)});return d}case"resolve_recovery":return this.withQueueMutation(async()=>{let b=new Set(a.keep??[]),c=new Set(a.discard??[]),d=!0===a.continueRun,e=0;for(let a of this.queueRecovery)b.has(a.id)&&(await this.requeueEntry(a),this.ensureMirrored(a),e+=1);return this.queueRecovery=this.queueRecovery.filter(a=>!b.has(a.id)&&!c.has(a.id)),this.persistQueue(),d&&e>0&&this.runAgentContinue(),{remaining:this.pendingRecoveryView(),kept:e}});case"export_queue":return{live:this.queueMirror.map(a=>({...a})),recovery:this.queueRecovery.map(a=>({...a}))};case"import_queue":return this.withQueueMutation(async()=>{let b=a.entries;if(!Array.isArray(b))throw Error("import_queue requires entries[]");this.validateQueueEntries(b);let c=0;for(let a of b){if("steer"!==a.kind&&"followUp"!==a.kind||"string"!=typeof a.text)continue;let b=(0,k.Gc)(a.kind,a.text,a.images);await this.requeueEntry(b),this.ensureMirrored(b),c+=1}return this.persistQueue(),{imported:c,steering:[...this.inner.getSteeringMessages()],followUp:[...this.inner.getFollowUpMessages()]}});case"stage_recovery":return this.withQueueMutation(async()=>{let b=a.entries;if(!Array.isArray(b))throw Error("stage_recovery requires entries[]");this.validateQueueEntries(b);let c=0;for(let a of b)("steer"===a.kind||"followUp"===a.kind)&&"string"==typeof a.text&&(this.queueRecovery.push((0,k.Gc)(a.kind,a.text,a.images)),c+=1);return this.persistQueue(),{staged:c,pendingRecovery:this.pendingRecoveryView()}});case"steer":return this.withQueueMutation(async()=>{let b=a.images;this.hintQueueImages("steer",b),this.promptPhase="waiting_model",P();try{await this.inner.steer(a.message,b?.length?b:void 0)}finally{this.promptPhase=null,P()}return null});case"follow_up":return this.withQueueMutation(async()=>{let b=a.images;this.hintQueueImages("followUp",b),this.promptPhase="waiting_model",P();try{await this.inner.followUp(a.message,b?.length?b:void 0)}finally{this.promptPhase=null,P()}return 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":{let a=this.inner.getActiveToolNames();return await this.waitForExtensionsBound(),this.extensionStatuses.clear(),this.extensionWidgets.clear(),this.syncProjectTrust(),await this.inner.reload(),this.inner.setActiveToolsByName(K(this.inner,a)),"function"!=typeof this.inner.bindExtensions&&this.inner.extensionRunner.setUIContext?.(this.createExtensionUiContext(),"rpc"),this.applyForcedEmptySystemPrompt(),{success:!0}}case"abort_compaction":return this.inner.abortCompaction(),null;case"resolve_approval":return{resolved:this.resolveApproval(a.id,!!a.approve,a.reason)};case"set_approval_mode":{let b=a.mode;if("ask"!==b&&"auto"!==b&&"yolo"!==b)throw Error(`Invalid approval mode: ${String(b)}`);return this.setApprovalMode(b),null}case"set_approval_policy":{let b=a.policy;return this.setApprovalPolicy((0,B.ni)(b)),null}case"get_approval_state":return{mode:this.approvalMode,pending:this.getPendingApprovals()};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.promptRunning||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.settingsManager?.getShellPath?.(),c=(0,y.J1)("string"==typeof b&&b?{shellPath:b}:{}),d=this.inner.executeBash(a.command,void 0,{excludeFromContext:a.excludeFromContext,operations:c});try{let a=await d;return this.persistSessionFileIfMissing(),a}finally{this.resetIdleTimer(),(0,o.mD)()}}case"abort_bash":return this.forceShutdownOnIdle=!0,this.inner.abortBash(),P(),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.cancelQueuedRun(),this.cancelGoalContinuation(),this.idleTimer&&clearTimeout(this.idleTimer),this.cancelPendingDispose(),this.inner.isBashRunning&&this.inner.abortBash(),this.unsubscribe?.(),this.emit({type:"session_shutdown"}),this.sessionFile&&!this.persistenceRevoked&&this.goalEngine.hasActiveGoal()&&(0,H.eG)(this.sessionFile,this.goalEngine.getState()),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.rejectAllApprovals("Session closed while approval was pending");let a=()=>{try{this.inner.dispose()}finally{try{this.onDestroyCallback?.()}finally{P()}}};if(this.sessionShutdownEmitted)return void a();this.sessionShutdownEmitted=!0;let b=this.inner.extensionRunner?.emit;"function"!=typeof b?a():Promise.resolve().then(()=>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)}revokePersistenceForDeletion(){this.persistenceRevoked=!0,L(this.inner.sessionManager),this.cancelQueuedRun(),this.cancelGoalContinuation()}async drainForSessionRewrite(){this.cancelQueuedRun(),this.cancelGoalContinuation(),this.extensionUiAbortController.abort(new DOMException("Session is being changed","AbortError")),await this.inner.abort()}async shutdown(){return this.shutdownPromise?this.shutdownPromise:this._alive?(this.cancelQueuedRun(),this.cancelGoalContinuation(),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())}getCustomUiWidth(a){if(!a||"object"!=typeof a)return F.p1;let b=a.overlayOptions,c="function"==typeof b?b():b;if(!c||"object"!=typeof c)return F.p1;let d=c.width;return"number"==typeof d&&Number.isFinite(d)?Math.max(40,Math.min(140,Math.round(d))):F.p1}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,F.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,$,_,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)=>{(void 0===b||Array.isArray(b))&&(void 0===b?this.extensionWidgets.delete(a):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 $},getAllThemes:()=>[],getTheme:()=>void 0,setTheme:()=>({success:!1,error:"Theme switching is not supported in pi-web extension UI yet"}),getToolsExpanded:()=>!1,setToolsExpanded:()=>{}}}syncProjectTrust(){this.inner.settingsManager.setProjectTrusted((0,n.Y1)(this.cwd,(0,e.getAgentDir)()).trusted)}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.extensionWidgets.clear(),this.syncProjectTrust(),await this.inner.reload({beforeSessionStart:()=>{this.inner.extensionRunner.setUIContext?.(this.createExtensionUiContext(),"rpc")}}),this.applyExactSystemPrompt()}}}}function L(a){a&&(a.persist=!1)}function M(a){globalThis.__piSessionLifecycles??=new Map;let b=globalThis.__piSessionLifecycles.get(a);return b||(b={generation:0,barriers:0,deleted:!1,starts:new Set},globalThis.__piSessionLifecycles.set(a,b)),b}function N(a,b){let c=M(a);if(c.deleted||c.barriers>0||void 0!==b&&c.generation!==b)throw Error("Session was deleted or is being changed; retry after the operation finishes")}function O(){if(!globalThis.__piSessions){globalThis.__piSessions=new Map;let a=()=>Promise.allSettled(Array.from(globalThis.__piSessions?.values()??[],a=>a.shutdown()));process.once("exit",()=>globalThis.__piSessions?.forEach(a=>a.destroy())),process.once("SIGINT",()=>{a().finally(()=>process.exit(130))}),process.once("SIGTERM",()=>{a().finally(()=>process.exit(143))})}return globalThis.__piSessions}let ab="";function P(){let a=globalThis.__piRunningListeners;if(!a||0===a.size){ab="";return}let b=function(){let a=[];for(let[b,c]of O()){if(!c.isAlive())continue;let d=c.runtimeSnapshot();d.running&&a.push({...d,id:d.id||b})}return a}(),c=JSON.stringify(b);if(c!==ab)for(let d of(ab=c,a))try{d(b)}catch{}}let ac=(0,u.s)({getSession:a=>O().get(a),registerSession:(a,b)=>{let c,d,e;c=new aa(a,a.sessionManager.getCwd()),b?.chatOnly?c.setForceEmptySystemPrompt(!0):b?.exactSystemPrompt&&c.setExactSystemPrompt(b.exactSystemPrompt),c.setChatOnly(!!b?.chatOnly),c.setSuppressCompletionNotifications(!0),c.start(),d=a.sessionId,e=O(),c.onDestroy(()=>e.delete(d)),e.set(d,c)},reopenSession:async(a,b)=>(await T(a,b,void 0)).session,resolveSessionPath:o.os,invalidateSessionList:o.mD,notifyRunningChange:P,isBuiltInSubagentsEnabled:v.N});!function(){try{let a=(0,v.M6)();if((0,h.existsSync)(a))return;(0,h.mkdirSync)(a.slice(0,a.lastIndexOf("/")),{recursive:!0}),(0,h.writeFileSync)(a,JSON.stringify({builtInEnabled:!0},null,2)+"\n")}catch(a){console.warn("[pi-web] failed to seed agents/settings.json:",a instanceof Error?a.message:a)}}();let ad=new Map;function Q(a){let b=globalThis.__piSessionBusListeners;if(b&&0!==b.size)for(let c of b)try{c(a)}catch{}}function R(a,b,c){let d=globalThis.__piSessionBusListeners;if(!d||0===d.size)return;if("message_update"!==a)return void Q({type:a,sessionId:b,payload:c});let e=ad.get(b),f={type:a,sessionId:b,payload:c};e?(clearTimeout(e.timer),e.event=f):ad.set(b,{event:f,timer:setTimeout(()=>{let a=ad.get(b);a&&(ad.delete(b),Q(a.event))},80)})}function S(a,b){let c=Date.now(),{provider:d,modelId:e,sessionId:f}=b,g=a.result.bind(a);a.result=async()=>{let a,b,h,i,j,k=await g();return a=Date.now()-c,b="error"===k.stopReason||"aborted"===k.stopReason,h=k.errorMessage?.trim(),j=(i=h?.match(/\bHTTP\s+(\d{3})\b|\bstatus(?:\s+code)?\s*[:=]?\s*(\d{3})\b/))?Number(i[1]??i[2]):void 0,(0,G.wF)({level:b?"error":"info",source:"model-call",provider:d,model:e,sessionId:f,...void 0!==j?{statusCode:j}:{},message:b?`模型调用失败 ${d}/${e}${h?`:${h}`:""}`:`模型调用成功 ${d}/${e}`,details:b?void 0:`耗时 ${a}ms`}),k};let h=a[Symbol.asyncIterator].bind(a);return a[Symbol.asyncIterator]=()=>{let a=h();return{next:()=>a.next().catch(a=>{throw(0,G.wF)({level:"error",source:"model-call",provider:d,model:e,sessionId:f,message:`模型调用传输错误 ${d}/${e}:${a instanceof Error?a.message:String(a)}`}),a})}},a}async function T(a,b,d,f={}){let g,j,k,t,u,w,x,y,A,B,{toolNames:C,initialModel:F,thinkingLevel:G,allowInitialModelFallback:H}=f,J=O(),P=(globalThis.__piStartLocks||(globalThis.__piStartLocks=new Map),globalThis.__piStartLocks),Q=M(a),R=Q.generation;N(a,R);let U=J.get(a);if(U?.isAlive()&&!U.isShuttingDown())return{session:U,realSessionId:a,created:!1};if(U){let a=U.whenShutdown();if(a){let b;try{await Promise.race([a,new Promise(a=>{b=setTimeout(a,1e4)})])}finally{clearTimeout(b)}}}N(a,R);let V=P.get(a);if(V)return V;if(b){if(!(0,h.existsSync)(b))throw Error("Session not found");if((g=e.SessionManager.open(b,void 0)).getSessionId()!==a)throw Error("Session identity changed")}else{if(!d)throw Error("cwd is required for a new session");g=e.SessionManager.create(d,void 0)}let W=g.getSessionId(),X=M(W),Y=X.generation;N(W,Y);let Z=g.getCwd(),$=g.getEntries(),_=b?(0,q.ph)($):null,ab=_?void 0:(0,r.dS)($);_||void 0!==ab||void 0===C||(0,r.b5)(g,C);let ad=(globalThis.__piStartingSessionCwds||(globalThis.__piStartingSessionCwds=new Map),A=globalThis.__piStartingSessionCwds,B=function(a){let b=(0,i.resolve)(a);try{return(0,h.realpathSync)(b)}catch{return b}}(Z),A.set(B,(A.get(B)??0)+1),()=>{let a=(A.get(B)??1)-1;a>0?A.set(B,a):A.delete(B)}),ae=new AbortController,af=setTimeout(()=>ae.abort(),25e3),ag=!1,ah=!1,ai=()=>{if(t&&!ah){ah=!0;try{t.cleanup()}catch{}}},aj=()=>{L(g);let a=u;if(a&&x!==a)if(x=a,w)w.destroy();else try{a.dispose()}catch{}ai()},ak=new Promise((a,b)=>{y=b}),al={settled:Promise.resolve(),cancel:a=>{k||(k=a,ae.abort(a),aj(),y(a))}};Q.starts.add(al),X.starts.add(al);let am=()=>{if(k)throw k;N(a,R),N(W,Y)},an=(async()=>{let b=(0,s.Qf)({subagentTools:_?.tools,persistedTools:ab,requestedTools:C}),d=(0,s.J7)({toolSelection:b,subagentLoadsResources:!!(_?.loadExtensions||_?.loadSkills)});d||(0,e.initTheme)();let f=(0,e.getAgentDir)(),h=_?.tools;_||void 0===b||(h=0===b.length?[]:void 0);let i=!!(_?.loadExtensions||_?.loadSkills),r=_?i?(0,n.Fk)(Z,f):void 0:(0,n.Fk)(Z,f),x={},y=(0,E.Q)(()=>x.current?.()),A=d||_?.exactSystemPrompt!==void 0,B=await (0,e.createAgentSessionServices)({cwd:Z,agentDir:f,modelRuntimeSignal:ae.signal,resourceLoaderOptions:_?{noExtensions:!0,noSkills:!0,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,appendSystemPrompt:_.appendSystemPrompt,...A?{extensionFactories:[y]}:{}}:d?{...D.M,extensionFactories:[y]}:{extensionFactories:[(0,p.Vj)(ac.extensionRuntime,()=>(0,q.IR)(Z),v.N)],extensionsOverride:a=>(0,p.U6)(a)},...r?{resourceLoaderReloadOptions:r}:{}});am();let{createAsyncBashTools:L}=await Promise.resolve().then(c.bind(c,12394));am(),t=new I.B;let M=L(t),N=await (0,m.py)(B.modelRuntime,B.settingsManager.getEnabledModels(),{signal:ae.signal});am();let P=F&&(!H||N.visible.some(a=>a.provider===F.provider&&a.id===F.modelId))?F:void 0,Q=B.settingsManager.getDefaultProvider(),R=B.settingsManager.getDefaultModel(),T=g.getBranch(),U=T.some(a=>"message"===a.type&&"system"!==a.message.role),V=U?(0,o.Vg)(T):null,W=V?B.modelRuntime.getModel(V.provider,V.modelId):void 0,X=U?null:(0,m.IR)(N,{...P?{requestedModel:P}:{},...Q&&R?{defaultModel:{provider:Q,modelId:R}}:{},...G?{thinkingLevel:G}:{}}),Y=W&&B.modelRuntime.hasConfiguredAuth(W.provider)?W:X?.model;am();let $=(0,e.createAgentSessionFromServices)({services:B,sessionManager:g,...Y?{model:Y}:{},...X?.thinkingLevel?{thinkingLevel:X.thinkingLevel}:{},...N.scopedModels.length>0?{scopedModels:[...N.scopedModels]}:{},...void 0!==h?{tools:h}:{},customTools:M});$.then(({session:a})=>{u=a,k&&aj()},()=>{}),j=setTimeout(()=>{al.cancel(Error("Session startup timed out while binding extensions/resources (40s)"))},4e4);let{session:ad}=await Promise.race([$,ak]);clearTimeout(j),am();try{let c=ad.agent,e=c.streamFunction;c.streamFunction=(b,c,d)=>{let f=e(b,c,d);return f instanceof Promise?f.then(c=>S(c,{provider:b.provider,modelId:b.id,sessionId:a})):S(f,{provider:b.provider,modelId:b.id,sessionId:a})},am();let f=await (0,z.o)(B.settingsManager,{...F?{model:F}:{},...G?{thinkingLevel:G}:{}},{...ad.model?{model:{provider:ad.model.provider,modelId:ad.model.id}}:{},thinkingLevel:ad.agent.state?.thinkingLevel??"off",supportsThinking:ad.supportsThinking()});am(),f.modelDefaultChanged&&(0,l.k)(),_||d||void 0===b||ad.setActiveToolsByName(K(ad,b)),am();let g=new aa(ad,Z);w=g,g.setChatOnly(d),g.setSuppressCompletionNotifications(void 0!==_),b?.length===0?g.setForceEmptySystemPrompt(!0):_&&_.appendSystemPrompt.length>0&&g.setExactSystemPrompt(_.appendSystemPrompt[0]);let h=_?.exactSystemPrompt!==void 0?_.exactSystemPrompt:d?_?_.appendSystemPrompt[0]??"":(0,D.c)(ad.resourceLoader.getAgentsFiles().agentsFiles):null;x.current=null===h?void 0:()=>h,null!==h&&g.setExactSystemPrompt(h),g.start(),g.loadQueueRecovery();let i=ad.sessionId,j=ad.sessionFile;return j&&(0,o.O8)(i,j),g.persistSessionFileIfMissing(),g.onDestroy(()=>{ai(),J.get(i)===g&&J.delete(i)}),J.set(i,g),g.beginExtensionBinding({forceEmptySystemPrompt:b?.length===0}),!function(){let a=O();if(a.size<=12)return;let b=Array.from(a.entries()).filter(([,a])=>a.isAlive()&&!a.isRunning()&&!a.hasSubscribers()).sort((a,b)=>a[1].activityTimestamp-b[1].activityTimestamp),c=a.size-12;for(let[d,e]of b){if(c<=0)break;a.has(d)&&(console.log(`[pi-web] evicting idle unwatched session ${d} (registry cap 12)`),e.shutdown().catch(a=>{console.error(`[pi-web] failed to evict session ${d}:`,a instanceof Error?a.message:a)}),c-=1)}}(),{session:g,realSessionId:i,created:!0}}catch(a){throw aj(),a}})().catch(a=>{throw aj(),a}),ao=setTimeout(()=>{al.cancel(Error("Session startup timed out after 60s (extension/resource binding may be hung); the start lock was released — retry the request to start over."))},6e4),ap=Promise.race([an,ak]).finally(()=>{P.get(a)===ap&&P.delete(a),ag||(ag=!0,clearTimeout(af),clearTimeout(ao),clearTimeout(j),Q.starts.delete(al),X.starts.delete(al),ad())});return al.settled=ap,P.set(a,ap),ap}d()}catch(a){d(a)}})},12394:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{B:()=>p,createAsyncBashTools:()=>n});var e=c(31421),f=c(81186),g=c(75430),h=c(98052),i=a([f,g]);[f,g]=i.then?(await i)():i;class o{append(a){for(this.totalBytes+=a.length,this.tail.push(a),this.tailBytes+=a.length;this.tailBytes>258048&&this.tail.length>1;){let a=this.tail.shift();this.tailBytes-=a.length}if(this.headBytes<4096){let b=4096-this.headBytes;a.length<=b?(this.head.push(a),this.headBytes+=a.length):(this.head.push(a.subarray(0,b)),this.headBytes=4096)}}get hasOmission(){return this.totalBytes>this.headBytes+this.tailBytes}get omittedBytes(){return Math.max(0,this.totalBytes-this.headBytes-this.tailBytes)}toSnapshot(){if(!this.hasOmission)return Buffer.concat(this.tail).toString("utf-8");let a=[...this.head];return a.push(Buffer.from(`
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 e.runInBackground&&s.has(e.status)&&a.markResultConsumed(e.sessionId),{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 n(a){let b=a.extensions.find(a=>a.path===p);if(!b?.tools.has("Agent"))return a;let c=new Set(a.extensions.filter(a=>a.path!==p).filter(a=>{let b=(a.sourceInfo?.source??"").replace(/^npm:/,"").split("@")[0],c=a.path.replaceAll("\\","/").split("/");return b===r||c.some(a=>a===r)}).filter(a=>[...q].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!==p||![...c].some(b=>[...q].some(c=>a.error===`Tool "${c}" conflicts with ${b}`))))}}d()}catch(a){d(a)}})},12144:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{OF:()=>T});var e=c(75430),f=c(29862),g=c(55511),h=c(29021),i=c(33873),j=c(18437),k=c(17114),l=c(65869),m=c(96515),n=c(15253),o=c(69453),p=c(8084),q=c(41035),r=c(54035),s=c(88573),t=c(12559),u=c(84851),v=c(70274),w=c(5564),x=c(27486),y=c(81186),z=c(61577),A=c(44290),B=c(30116),C=c(97563),D=c(32302),E=c(2692),F=c(57856),G=c(29040),H=c(91099),I=c(12394),J=a([e,f,m,n,o,p,q,u,v,w,x,y,A,G,I]);[e,f,m,n,o,p,q,u,v,w,x,y,A,G,I]=J.then?(await J)():J;let U=new Set(["agent_start","message_start","message_update","message_end","agent_end","entry_appended","session_info_changed","queue_update","prompt_done","agent_settled","auto_compaction_end","compaction_end"]),V=function(a=process.env.PI_WEB_IDLE_TIMEOUT_MS){let b=(a??"").trim();if(""===b)return 6e5;let c=Number(b);return!Number.isFinite(c)||c<0||!Number.isInteger(c)||c>0x7fffffff?(console.warn(`[pi-web] invalid PI_WEB_IDLE_TIMEOUT_MS "${a}", falling back to 600000ms`),6e5):c}(),W=new Set(["fork","clone"]),X=new Set(["get_state","abort","steer","follow_up_draft"]),Y=["read","bash","powershell","edit","write","grep","find","ls"];class Z 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 $=new Z,_=new f.KeybindingsManager(f.TUI_KEYBINDINGS);function K(a,b){if(0===b.length)return[];let c=new Set(Y),d=(0,w.wQ)(b,a.settingsManager.getDefaultTools()),e=a.getAllTools().map(a=>a.name).filter(a=>!c.has(a));return(0,x.H4)([...new Set([...d,...e])],(0,x.t0)())}class aa{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.promptRunning=!1,this.promptPhase=null,this.extensionsBound=!1,this.extensionBindingPromise=null,this.extensionBindingError=null,this.forceEmptySystemPrompt=!1,this.exactSystemPrompt=null,this.freshRuntimeProbe=null,this.pendingPromptCount=0,this.activeMutatingCommands=0,this.agentRunNeedsCompletion=!1,this.promptAdmissionTail=Promise.resolve(),this.sessionReplacement=null,this.forceShutdownOnIdle=!1,this.unsubscribe=null,this.idleTimer=null,this.subscriberCount=0,this.disposeGraceTimer=null,this.lastActivityAt=Date.now(),this.queueMirror=[],this.queueRecovery=[],this.persistenceRevoked=!1,this.queueBootstrap=null,this.pendingQueueHints={steer:[],followUp:[]},this.queueMutationTail=Promise.resolve(),this.onDestroyCallback=null,this.shutdownPromise=null,this.sessionShutdownEmitted=!1,this._alive=!0,this.approvalPolicy=(0,B.ni)((0,A.lN)().permissionRules),this.approvalMode=(0,A.lN)().toolApprovalMode,this.pendingApprovals=new Map,this.approvalSeq=0,this.approvalHookInstalled=!1,this.goalEngine=new H.aA,this.goalTokensAccounted=0,this.goalToolCallsAccounted=0,this.goalContinuationInFlight=!1,this.goalContinuationPending=!1,this.goalDriveScheduled=!1,this.wrapperChatOnly=!1,this.wrapperSuppressNotifications=!1,this.cwd="string"==typeof b?b:"";const c="string"==typeof b?{}:b;c.onAgentRunComplete&&(this.onAgentRunComplete=c.onAgentRunComplete),c.suppressCompletionNotifications&&this.setSuppressCompletionNotifications(!0),c.chatOnly&&this.setChatOnly(!0),c.exactSystemPrompt&&(this.exactSystemPrompt=c.exactSystemPrompt(),this.applyExactSystemPrompt());const d=(0,A.lN)(a.sessionId);if(this.approvalMode=d.toolApprovalMode,this.approvalPolicy=(0,B.ni)(d.permissionRules),a.sessionFile){const b=(0,H.bo)(a.sessionFile);"idle"!==b.status&&this.goalEngine.hydrate(b)}}get sessionId(){return this.inner.sessionId}get sessionFile(){return this.inner.sessionFile??""}isAlive(){return this._alive}evictIfDiskAhead(){if(!this.isAlive()||this.isRunning())return!1;let a=(0,o.H6)(this.sessionFile);return!(!a||this.inner.sessionManager.getEntry(a)||this.isRunning())&&(this.destroy(),(0,o.mD)(),!0)}async waitUntilReady(){}isShuttingDown(){return null!==this.shutdownPromise}whenShutdown(){return this.shutdownPromise}isRunning(){return this._alive&&(this.pendingPromptCount>0||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)}runtimeSnapshot(){let a=this.inner.isStreaming,b=this.promptRunning,c=this.inner.isCompacting,d=this.inner.isBashRunning;return{id:this.sessionId,running:this.isRunning(),isStreaming:a,isPromptRunning:b,isCompacting:c,isBashRunning:d,phase:d?"running_command":this.promptPhase??(a||b||c?"waiting_model":null)}}setChatOnly(a){this.wrapperChatOnly=a}setSuppressCompletionNotifications(a){this.wrapperSuppressNotifications=a}isChatOnly(){return this.wrapperChatOnly}hasSuppressedCompletionNotifications(){return this.wrapperSuppressNotifications}start(){this.installApprovalHook(),this.goalEngine.setOnChanged(a=>{this.sessionFile&&!this.persistenceRevoked&&(0,H.eG)(this.sessionFile,a),this.emit({type:"goal_state_changed",goalState:a}),R("goal_state_changed",this.sessionId,{type:"goal_state_changed",goalState:a})}),this.goalEngine.isRunning()&&(this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()),this.unsubscribe=this.inner.subscribe(a=>{("agent_end"===a.type||"message_end"===a.type||"entry_appended"===a.type||"session_info_changed"===a.type)&&(0,o.mD)(),("agent_end"===a.type||"agent_settled"===a.type||"auto_compaction_end"===a.type||"compaction_end"===a.type)&&this.resetIdleTimer(),"agent_start"===a.type&&(this.goalEngine.onAgentStart(),this.agentRunNeedsCompletion=!0),"agent_settled"===a.type&&(this.handleGoalSettled(),this.notifyAgentRunCompleteIfIdle()),"queue_update"===a.type&&this.reconcileQueue(a.steering,a.followUp),U.has(a.type)&&R(a.type,this.sessionId,a);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)),this.emit(a),P()}),this.resetIdleTimer()}loadQueueRecovery(){if(!this.sessionFile)return;let a=this.inner.getSteeringMessages(),b=this.inner.getFollowUpMessages();if(a.length||b.length){this.queueRecovery=[],this.reconcileQueue([...a],[...b]);return}this.queueRecovery=(0,k.ov)(this.sessionFile)}getGoalState(){return this.goalEngine.getState()}handleGoalSettled(){if(!this.goalEngine.isRunning()){this.goalEngine.disarmContinuation(),this.goalContinuationPending=!1;return}let a=this.inner.getLastAssistantText()??"",b=this.currentSessionUsageTotal(),c=Math.max(0,b-this.goalTokensAccounted);this.goalTokensAccounted=b;let d=this.currentSessionToolCallTotal(),e=Math.max(0,d-this.goalToolCallsAccounted);this.goalToolCallsAccounted=d;let{verdict:f}=this.goalEngine.settleTurn(a,c,e);if("continue"!==f.action){this.goalEngine.disarmContinuation(),this.goalContinuationPending=!1;return}this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()}maybeDriveGoalContinuation(){if(this.goalContinuationPending&&!this.goalDriveScheduled){if(!this.goalEngine.isRunning()){this.goalContinuationPending=!1;return}this.goalDriveScheduled=!0,setTimeout(()=>{this.goalDriveScheduled=!1,this.tryDriveGoalContinuation()},0)}}cancelGoalContinuation(){this.goalContinuationPending=!1,this.goalEngine.disarmContinuation()}tryDriveGoalContinuation(){let a=M(this.sessionId);if(!this._alive||this.isShuttingDown()||a.deleted||a.barriers>0)return void this.cancelGoalContinuation();if(this.goalContinuationPending){if(!this.goalEngine.isRunning()){this.goalContinuationPending=!1;return}this.goalContinuationInFlight||this.promptRunning||this.inner.isStreaming||this.inner.isBashRunning||(this.goalContinuationPending=!1,this.driveGoalContinuation())}}driveGoalContinuation(){if(!this.goalEngine.isRunning()||this.goalContinuationInFlight)return;this.goalContinuationInFlight=!0,this.promptRunning=!0,this.promptPhase="waiting_model",this.resetIdleTimer(),P();let a=()=>{this.promptRunning=!1,this.promptPhase=null,this.resetIdleTimer(),P()};this.acquirePromptAdmission().then(async b=>{try{if(!this.goalEngine.isRunning())return void a();let b=this.goalEngine.getState().goalText;if(!this._alive||this.isShuttingDown()||!b)return void a();N(this.sessionId),await this.inner.prompt((0,H.bx)(b),{source:"rpc",preflightResult:a=>{if(a){if(!this._alive||this.isShuttingDown()||!this.goalEngine.isRunning())throw new DOMException("Goal continuation cancelled","AbortError");N(this.sessionId)}}}),a(),this.emit({type:"prompt_done"}),this.maybeDriveGoalContinuation()}catch(b){a(),this.emit({type:"prompt_error",errorMessage:b instanceof Error?b.message:String(b)})}finally{b(),this.goalContinuationInFlight=!1}})}handleGoalStartCommand(a,b){let c=this.goalEngine.start(a,b);return this.goalTokensAccounted=this.currentSessionUsageTotal(),this.goalToolCallsAccounted=this.currentSessionToolCallTotal(),c}handleGoalStopCommand(){return this.goalEngine.stop(),this.goalTokensAccounted=0,this.goalToolCallsAccounted=0,this.goalEngine.getState()}currentSessionUsageTotal(){try{return function(a){let b=0;for(let c of a){let a=c?.message;if(!a||"assistant"!==a.role)continue;let d=a.usage;d&&(b+=(d.input??0)+(d.output??0)+(d.cacheRead??0)+(d.cacheWrite??0))}return b}(this.inner.sessionManager.getEntries())}catch{return 0}}currentSessionToolCallTotal(){try{return function(a){let b=0;for(let c of a){let a=c?.message;if(!a||"assistant"!==a.role)continue;let d=a.content;if(Array.isArray(d))for(let a of d)a&&"object"==typeof a&&"toolCall"===a.type&&(b+=1)}return b}(this.inner.sessionManager.getEntries())}catch{return 0}}setApprovalMode(a){this.approvalMode=a}setApprovalPolicy(a){this.approvalPolicy=a}installApprovalHook(){if(this.approvalHookInstalled||!this.inner.agent?.beforeToolCall)return;this.approvalHookInstalled=!0;let a=this.inner.agent.beforeToolCall;this.inner.agent.beforeToolCall=async b=>{let c=b.toolCall?.name??"",d=b.args,e=(0,B.LD)(this.approvalPolicy,c,{mode:this.approvalMode,readOnly:C.MJ.has(c.toLowerCase()),args:d});if("deny"===e)return{block:!0,reason:`Denied by policy rule: ${c} is not permitted.`};if("ask"===e){let a=await this.askForApproval(c,d);if(!a.approve)return{block:!0,reason:a.reason||`Rejected by user: ${c}`}}return a?a(b):void 0}}askForApproval(a,b){return new Promise(c=>{let d=`approval-${++this.approvalSeq}`,e=setTimeout(()=>{this.pendingApprovals.delete(d),this.emit({type:"tool_approval_resolved",id:d,approve:!1,reason:`Approval request timed out after 120s: ${a}`}),c({approve:!1,reason:`Approval request timed out after 120s: ${a}`})},12e4);this.pendingApprovals.set(d,{resolve:c,timer:e,toolName:a}),this.emit({type:"tool_approval_request",id:d,toolName:a,args:function(a){if(null===a||"object"!=typeof a)return a;let b={};for(let[c,d]of Object.entries(a))if(null!=d&&"content"!==c&&"data"!==c&&"newString"!==c&&"oldString"!==c){if("string"==typeof d){b[c]=d.length>200?`${d.slice(0,200)}…`:d;continue}if("number"==typeof d||"boolean"==typeof d){b[c]=d;continue}b[c]=Array.isArray(d)?`[array:${d.length}]`:"[object]"}return b}(b)})})}resolveApproval(a,b,c){let d=this.pendingApprovals.get(a);return!!d&&(this.pendingApprovals.delete(a),clearTimeout(d.timer),d.resolve({approve:b,reason:c}),!0)}rejectAllApprovals(a){for(let[b,c]of this.pendingApprovals)this.pendingApprovals.delete(b),clearTimeout(c.timer),c.resolve({approve:!1,reason:a})}getPendingApprovals(){return Array.from(this.pendingApprovals.entries()).map(([a,b])=>({id:a,toolName:b.toolName}))}pendingRecoveryView(){return this.queueRecovery.map(({id:a,kind:b,text:c,images:d,queuedAt:e})=>({id:a,kind:b,text:c,hasImages:!!d?.length,queuedAt:e}))}persistQueue(){if(!this.sessionFile||this.persistenceRevoked)return;let a=[...this.queueRecovery,...this.queueBootstrap?.entries??[],...this.queueMirror];a.length?(0,k.pj)(this.sessionFile,a):(0,k.wx)(this.sessionFile)}hintQueueImages(a,b){this.pendingQueueHints[a].push(b?.length?b:[])}reconcileQueue(a,b){let c=(a,b)=>{if(!b)return this.queueMirror.filter(b=>b.kind===a);let c=new Set;return b.map(b=>{let d=this.queueMirror.find(d=>d.kind===a&&d.text===b&&!c.has(d));if(d)return c.add(d),d;let e=(0,k.Gc)(a,b,this.pendingQueueHints[a].shift());return c.add(e),e})};this.queueMirror=[...c("steer",a),...c("followUp",b)],this.persistQueue()}validateImagesSupportedByCurrentModel(){let a=this.inner.model;return!a?.id||Array.isArray(a.input)&&a.input.includes("image")?null:`Model "${a.id}" does not accept image input. Switch to a model with image support.`}async requeueEntry(a){let b=(0,j.kc)(a.images);if(b)throw Error(b);if(a.images?.length){let a=this.validateImagesSupportedByCurrentModel();if(a)throw Error(a)}this.hintQueueImages(a.kind,a.images),"steer"===a.kind?await this.inner.steer(a.text,a.images):await this.inner.followUp(a.text,a.images)}ensureMirrored(a){this.queueMirror.find(b=>b.kind===a.kind&&b.text===a.text)||(this.queueMirror.push({...a}),this.pendingQueueHints[a.kind].pop())}async replaceLiveQueue(a,b){for(let b of(this.inner.clearQueue(),this.pendingQueueHints={steer:[],followUp:[]},a))await this.requeueEntry(b);for(let a of b)await this.requeueEntry(a);let c={steering:[...this.inner.getSteeringMessages()],followUp:[...this.inner.getFollowUpMessages()]};return this.reconcileQueue(c.steering,c.followUp),c}async withQueueMutation(a){let b,c=this.queueMutationTail;this.queueMutationTail=new Promise(a=>{b=a}),await c;try{if(!this._alive||this.isShuttingDown())throw Error("Session is shutting down");return N(this.sessionId),await a()}finally{b()}}async mutateLiveQueue(a,b){return this.withQueueMutation(async()=>{let c=this.queueMirror.filter(a=>"steer"===a.kind),d=this.queueMirror.filter(a=>"followUp"===a.kind),e=b("steer"===a?c:d),f=await this.replaceLiveQueue(c,d);return{value:e,queues:f}})}validateQueueEntries(a){for(let b of a){if("steer"!==b.kind&&"followUp"!==b.kind||"string"!=typeof b.text)continue;let a=(0,j.kc)(b.images);if(a)throw Error(a)}}runAgentContinue(){if(!this._alive||this.isShuttingDown()||this.queueBootstrap||this.isRunning()||this.promptRunning)return;let a=[...this.queueMirror];if(0===a.length)return;let b={entries:a,cancelled:!1};this.queueBootstrap=b,this.queueMirror=[],this.persistQueue(),this.inner.clearQueue(),this.pendingQueueHints={steer:[],followUp:[]},this.pendingPromptCount+=1,this.promptRunning=!0,this.promptPhase="waiting_model",P(),this.bootstrapQueuedRun(b)}cancelQueuedRun(){let a=this.queueBootstrap;a&&(a.cancelled=!0,this.queueRecovery.push(...a.entries),a.entries=[],this.persistQueue())}async bootstrapQueuedRun(a){try{for(let b of[...a.entries]){let c,d,e=await this.acquirePromptAdmission();try{let f,g;if(a.cancelled||!this._alive||this.isShuttingDown()||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)break;N(this.sessionId),this.extensionUiAbortController.signal.aborted&&(this.extensionUiAbortController=new AbortController);let h=!1,i=()=>{h=!0,e()},j=!1,k=this.inner.sessionManager,l=k.appendMessage,m=function(c){let d=l.call(this,c);return c===f&&(g=d),!j&&g&&k.isPersisted()&&k.flushed&&(j=!0,a.entries=a.entries.filter(a=>a.id!==b.id),n()),d},n=()=>{this.queueRecovery=this.queueRecovery.filter(a=>a.id!==b.id),this.persistQueue()};k.appendMessage=m,d=()=>{k.appendMessage===m&&(k.appendMessage=l)},c=this.inner.subscribe(b=>{"message_start"!==b.type&&"message_end"!==b.type||"user"!==b.message.role||f||!h&&a.cancelled||(f=b.message,i(),c?.(),c=void 0)}),await this.inner.prompt(b.text,{...b.images?.length?{images:b.images}:{},source:"rpc",preflightResult:b=>{if(b){if(a.cancelled||!this._alive||this.isShuttingDown())throw new DOMException("Queued run cancelled","AbortError");N(this.sessionId),this.applyExactSystemPrompt(),i()}}})}finally{c?.(),d?.(),e()}}}catch(b){!a.cancelled&&this._alive&&((0,o.mD)(),this.emit({type:"prompt_error",errorMessage:b instanceof Error?b.message:String(b)}))}finally{this.queueRecovery.push(...a.entries),a.entries=[],this.queueBootstrap===a&&(this.queueBootstrap=null),this.persistQueue(),this.pendingPromptCount=Math.max(0,this.pendingPromptCount-1),this.promptRunning=this.pendingPromptCount>0,this.promptRunning||(this.promptPhase=null),this.resetIdleTimer(),P(),this._alive&&this.emit({type:"prompt_done"})}}setForceEmptySystemPrompt(a){this.forceEmptySystemPrompt=a,this.applyForcedEmptySystemPrompt()}setExactSystemPrompt(a){this.exactSystemPrompt=a,this.applyExactSystemPrompt()}beginExtensionBinding(a={}){this.ensureExtensionsBound(a).catch(a=>{console.error("[pi-web] failed to dispatch session_start to extensions:",a instanceof Error?a.message:a)})}ensureExtensionsBound(a={}){return(a.forceEmptySystemPrompt&&(this.forceEmptySystemPrompt=!0),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 pi-web."}),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)}static{this.EXTENSION_BIND_TIMEOUT_MS=15e3}async waitForExtensionsBound(){let a=this.extensionBindingPromise;if(a)try{let b=new Promise((b,c)=>{let d=setTimeout(()=>c(Error("Extension binding timed out; continuing without waiting")),aa.EXTENSION_BIND_TIMEOUT_MS);a.finally(()=>clearTimeout(d))});await Promise.race([a,b])}catch{}this.extensionBindingError&&console.warn("[pi-web] extension binding failed, continuing:",this.extensionBindingError)}shouldWaitForExtensions(a){return"prompt"===a||"steer"===a||"follow_up"===a||"get_commands"===a||"get_state"===a}applyForcedEmptySystemPrompt(){}applyExactSystemPrompt(){}emit(a){for(let b of this.listeners)try{b(a)}catch(a){console.error(`[pi-web] session ${this.sessionId} event listener threw:`,a instanceof Error?a.message:a)}}setActiveToolSelection(a){this.inner.setActiveToolsByName(K(this.inner,a)),this.applyExactSystemPrompt()}async acquirePromptAdmission(){let a,b=this.promptAdmissionTail;return this.promptAdmissionTail=new Promise(b=>{a=b}),await b,a}notifyAgentRunCompleteIfIdle(){if(!(!this.agentRunNeedsCompletion||this.isRunning())&&(this.agentRunNeedsCompletion=!1,!this.wrapperSuppressNotifications))try{this.onAgentRunComplete?.(this.sessionId)}catch(a){console.error("[pi-web] completion listener failed:",a instanceof Error?a.message:a)}}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this._alive&&0!==V&&(this.isRunning()||(this.forceShutdownOnIdle=!1),this.idleTimer=setTimeout(()=>{!this.forceShutdownOnIdle&&(this.isRunning()||(0,t.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)})},V))}touch(){this.lastActivityAt=Date.now(),this.cancelPendingDispose()}hasSubscribers(){return this.subscriberCount>0}get activityTimestamp(){return this.lastActivityAt}cancelPendingDispose(){this.disposeGraceTimer&&(clearTimeout(this.disposeGraceTimer),this.disposeGraceTimer=null)}scheduleDisposeIfIdle(){this.cancelPendingDispose(),!(this.subscriberCount>0||this.isRunning())&&this._alive&&(this.disposeGraceTimer=setTimeout(()=>{this.disposeGraceTimer=null,!(this.subscriberCount>0||this.isRunning())&&this._alive&&this.shutdown().catch(a=>{console.error("[pi-web] failed to shut down unwatched session:",a instanceof Error?a.message:a)})},6e4))}persistSessionFileIfMissing(){if(this.persistenceRevoked||!this._alive)return;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";try{(0,h.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"})}catch(c){if("EEXIST"===c.code||(0,h.existsSync)(b)){a.flushed=!0,(0,o.O8)(this.inner.sessionId,b);return}throw c}a.flushed=!0,(0,o.O8)(this.inner.sessionId,b)}onEvent(a){for(let b of(this.listeners.push(a),this.subscriberCount+=1,this.cancelPendingDispose(),this.pendingUiRequests.values()))a(b);for(let b of this.activeToolEvents.values())a(b);return()=>{queueMicrotask(()=>{let b=this.listeners.indexOf(a);-1!==b&&this.listeners.splice(b,1)}),this.subscriberCount>0&&(this.subscriberCount-=1),this.scheduleDisposeIfIdle()}}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){if(!this._alive)throw Error("Session is shutting down");N(this.sessionId),this.touch();let b=a.type;if(b.startsWith("get_")||"export_queue"===b||this.resetIdleTimer(),"prompt"===b||"steer"===b||"follow_up"===b||"requeue_at"===b){let b=(0,j.kc)(a.images);if(b)throw Error(b);if(Array.isArray(a.images)&&a.images.length>0){let a=this.validateImagesSupportedByCurrentModel();if(a)throw Error(a)}}let c=X.has(b);if(this.sessionReplacement&&!c)throw Error("Session is being copied to a new session");if(W.has(b)&&this.activeMutatingCommands>0)throw Error(`Cannot ${b} while another session command is running`);this.shouldWaitForExtensions(b)&&await this.waitForExtensionsBound();let d=!c;d&&(this.activeMutatingCommands+=1);try{if(!this._alive||this.isShuttingDown())throw Error("Session is shutting down");if(N(this.sessionId),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._alive||this.isShuttingDown())throw Error("Session is shutting down");if(N(this.sessionId),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;f&&this.inner.isStreaming&&this.hintQueueImages("followUp"===f?"followUp":"steer",e);let 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,this.promptRunning=!0,this.promptPhase=String(a.message??"").trimStart().startsWith("/")?"running_command":"waiting_model",P();try{d=this.inner.prompt(a.message,{...e?.length?{images:e}:{},...f?{streamingBehavior:f}:{},source:"rpc",preflightResult:a=>{if(a){if(!this._alive||this.isShuttingDown())throw Error("Session is shutting down");N(this.sessionId),this.applyExactSystemPrompt(),b()}}})}catch(a){throw k(),a}return d.then(()=>{b(),k(),this.promptRunning=!1,this.promptPhase=null,f||this.emit({type:"prompt_done"}),P(),this.maybeDriveGoalContinuation()},a=>{c(a),k(),this.promptRunning=!1,this.promptPhase=null,(0,o.mD)(),g&&(this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),f||this.emit({type:"prompt_done"})),P(),this.maybeDriveGoalContinuation()}).catch(a=>{console.error("[pi-web] prompt completion handler failed:",a instanceof Error?a.message:a)}),await j,null}finally{b()}}case"abort":this.cancelQueuedRun(),this.cancelGoalContinuation(),this.forceShutdownOnIdle=!0,this.extensionUiAbortController.abort(new DOMException("Extension UI cancelled by Stop","AbortError"));try{await this.inner.abort()}finally{this.resetIdleTimer(),this.isRunning()||(this.forceShutdownOnIdle=!1)}return null;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,phase:this.runtimeSnapshot().phase,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()]},pendingRecovery:this.pendingRecoveryView(),contextUsage:b?{percent:b.percent,contextWindow:b.contextWindow,tokens:b.tokens}:null,systemPrompt:this.exactSystemPrompt??this.inner.agent.state?.systemPrompt??"",thinkingLevel:this.inner.agent.state?.thinkingLevel??"off",extensionStatuses:this.getExtensionStatuses(),extensionWidgets:this.getExtensionWidgets(),goalState:this.goalEngine.getState()}}case"goal_start":{let b=String(a.goalText??"").trim();if(!b)throw Error("goal_start requires a non-empty goalText");let c=a.tokenBudget,d="number"==typeof c&&Number.isFinite(c)&&c>0?Math.floor(c):null,e=this.handleGoalStartCommand(b,d);return this.goalContinuationPending=!0,this.maybeDriveGoalContinuation(),{goalState:e}}case"goal_pause":return this.cancelGoalContinuation(),{goalState:this.goalEngine.pause()};case"goal_resume":{let a=this.goalEngine.resume();return"running"===a.status&&(this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()),{goalState:a}}case"goal_stop":return this.cancelGoalContinuation(),{goalState:this.handleGoalStopCommand()};case"goal_edit":{let b=String(a.goalText??"").trim();if(!b)throw Error("goal_edit requires a non-empty goalText");let c=this.goalEngine.edit(b);return"running"===c.status&&(this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()),{goalState:c}}case"get_goal_state":return{goalState:this.goalEngine.getState()};case"set_model":{let{provider:b,modelId:c}=a,d=this.inner.modelRuntime.getModel(b,c);if(!d)try{await this.inner.modelRuntime.refresh({allowNetwork:!1}),d=this.inner.modelRuntime.getModel(b,c)}catch{d=void 0}if(!d)try{let a=Date.now();(!this.freshRuntimeProbe||a-this.freshRuntimeProbe.at>6e4)&&(this.freshRuntimeProbe={runtime:await e.ModelRuntime.create(),at:a}),d=this.freshRuntimeProbe.runtime.getModel(b,c)}catch{this.freshRuntimeProbe=null,d=void 0}if(!d)throw Error(`Model not found: ${b}/${c}`);return await this.inner.setModel(d),(0,l.k)(),(0,o.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,o.O8)(k,b),(0,o.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,o.O8)(h,g),(0,o.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,o.O8)(g,f),(0,o.mD)(),await this.shutdownAfterSessionReplacement("clone"),{cancelled:!1,newSessionId:g}})}case"navigate_tree":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,o.mD)(),null}case"compact":try{return await this.inner.compact(a.customInstructions)}finally{(0,o.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,o.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"clear_queue":return this.withQueueMutation(async()=>(this.queueMirror=[],this.pendingQueueHints={steer:[],followUp:[]},this.persistQueue(),this.inner.clearQueue()));case"move_queue":{let b=a.kind,c=Number(a.fromIndex),d=Number(a.toIndex);if("steer"!==b&&"followUp"!==b||!Number.isInteger(c)||!Number.isInteger(d))throw Error("move_queue requires a queue kind and integer indexes");let{queues:e}=await this.mutateLiveQueue(b,a=>{if(c<0||c>=a.length||d<0||d>=a.length)throw Error("move_queue index out of range");let[b]=a.splice(c,1);a.splice(d,0,b)});return e}case"recall_queue_item":{let b=a.kind,c=Number(a.index);if("steer"!==b&&"followUp"!==b||!Number.isInteger(c))throw Error("recall_queue_item requires a queue kind and integer index");let{value:d,queues:e}=await this.mutateLiveQueue(b,a=>{if(c<0||c>=a.length)throw Error("recall_queue_item index out of range");let[b]=a.splice(c,1);return b});return{entry:{text:d.text,images:d.images??[]},...e}}case"requeue_at":{let b=a.kind,c=Number(a.index),d=a.text;if("steer"!==b&&"followUp"!==b||!Number.isInteger(c)||!d?.trim())throw Error("requeue_at requires a queue kind, integer index, and text");let e=a.images,{queues:f}=await this.mutateLiveQueue(b,a=>{if(c<0||c>a.length)throw Error("requeue_at index out of range");a.splice(c,0,(0,k.Gc)(b,d,e))});return f}case"remove_queue_item":{let b=a.kind,c=Number(a.index);if("steer"!==b&&"followUp"!==b||!Number.isInteger(c))throw Error("remove_queue_item requires a queue kind and integer index");let{queues:d}=await this.mutateLiveQueue(b,a=>{if(c<0||c>=a.length)throw Error("remove_queue_item index out of range");a.splice(c,1)});return d}case"resolve_recovery":return this.withQueueMutation(async()=>{let b=new Set(a.keep??[]),c=new Set(a.discard??[]),d=!0===a.continueRun,e=0;for(let a of this.queueRecovery)b.has(a.id)&&(await this.requeueEntry(a),this.ensureMirrored(a),e+=1);return this.queueRecovery=this.queueRecovery.filter(a=>!b.has(a.id)&&!c.has(a.id)),this.persistQueue(),d&&e>0&&this.runAgentContinue(),{remaining:this.pendingRecoveryView(),kept:e}});case"export_queue":return{live:this.queueMirror.map(a=>({...a})),recovery:this.queueRecovery.map(a=>({...a}))};case"import_queue":return this.withQueueMutation(async()=>{let b=a.entries;if(!Array.isArray(b))throw Error("import_queue requires entries[]");this.validateQueueEntries(b);let c=0;for(let a of b){if("steer"!==a.kind&&"followUp"!==a.kind||"string"!=typeof a.text)continue;let b=(0,k.Gc)(a.kind,a.text,a.images);await this.requeueEntry(b),this.ensureMirrored(b),c+=1}return this.persistQueue(),{imported:c,steering:[...this.inner.getSteeringMessages()],followUp:[...this.inner.getFollowUpMessages()]}});case"stage_recovery":return this.withQueueMutation(async()=>{let b=a.entries;if(!Array.isArray(b))throw Error("stage_recovery requires entries[]");this.validateQueueEntries(b);let c=0;for(let a of b)("steer"===a.kind||"followUp"===a.kind)&&"string"==typeof a.text&&(this.queueRecovery.push((0,k.Gc)(a.kind,a.text,a.images)),c+=1);return this.persistQueue(),{staged:c,pendingRecovery:this.pendingRecoveryView()}});case"steer":return this.withQueueMutation(async()=>{let b=a.images;this.hintQueueImages("steer",b),this.promptPhase="waiting_model",P();try{await this.inner.steer(a.message,b?.length?b:void 0)}finally{this.promptPhase=null,P()}return null});case"follow_up":return this.withQueueMutation(async()=>{let b=a.images;this.hintQueueImages("followUp",b),this.promptPhase="waiting_model",P();try{await this.inner.followUp(a.message,b?.length?b:void 0)}finally{this.promptPhase=null,P()}return 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":{let a=this.inner.getActiveToolNames();return await this.waitForExtensionsBound(),this.extensionStatuses.clear(),this.extensionWidgets.clear(),this.syncProjectTrust(),await this.inner.reload(),this.inner.setActiveToolsByName(K(this.inner,a)),"function"!=typeof this.inner.bindExtensions&&this.inner.extensionRunner.setUIContext?.(this.createExtensionUiContext(),"rpc"),this.applyForcedEmptySystemPrompt(),{success:!0}}case"abort_compaction":return this.inner.abortCompaction(),null;case"resolve_approval":return{resolved:this.resolveApproval(a.id,!!a.approve,a.reason)};case"set_approval_mode":{let b=a.mode;if("ask"!==b&&"auto"!==b&&"yolo"!==b)throw Error(`Invalid approval mode: ${String(b)}`);return this.setApprovalMode(b),null}case"set_approval_policy":{let b=a.policy;return this.setApprovalPolicy((0,B.ni)(b)),null}case"get_approval_state":return{mode:this.approvalMode,pending:this.getPendingApprovals()};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.promptRunning||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.settingsManager?.getShellPath?.(),c=(0,y.J1)("string"==typeof b&&b?{shellPath:b}:{}),d=this.inner.executeBash(a.command,void 0,{excludeFromContext:a.excludeFromContext,operations:c});try{let a=await d;return this.persistSessionFileIfMissing(),a}finally{this.resetIdleTimer(),(0,o.mD)()}}case"abort_bash":return this.forceShutdownOnIdle=!0,this.inner.abortBash(),P(),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.cancelQueuedRun(),this.cancelGoalContinuation(),this.idleTimer&&clearTimeout(this.idleTimer),this.cancelPendingDispose(),this.inner.isBashRunning&&this.inner.abortBash(),this.unsubscribe?.(),this.emit({type:"session_shutdown"}),this.sessionFile&&!this.persistenceRevoked&&this.goalEngine.hasActiveGoal()&&(0,H.eG)(this.sessionFile,this.goalEngine.getState()),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.rejectAllApprovals("Session closed while approval was pending");let a=()=>{try{this.inner.dispose()}finally{try{this.onDestroyCallback?.()}finally{P()}}};if(this.sessionShutdownEmitted)return void a();this.sessionShutdownEmitted=!0;let b=this.inner.extensionRunner?.emit;"function"!=typeof b?a():Promise.resolve().then(()=>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)}revokePersistenceForDeletion(){this.persistenceRevoked=!0,L(this.inner.sessionManager),this.cancelQueuedRun(),this.cancelGoalContinuation()}async drainForSessionRewrite(){this.cancelQueuedRun(),this.cancelGoalContinuation(),this.extensionUiAbortController.abort(new DOMException("Session is being changed","AbortError")),await this.inner.abort()}async shutdown(){return this.shutdownPromise?this.shutdownPromise:this._alive?(this.cancelQueuedRun(),this.cancelGoalContinuation(),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())}getCustomUiWidth(a){if(!a||"object"!=typeof a)return F.p1;let b=a.overlayOptions,c="function"==typeof b?b():b;if(!c||"object"!=typeof c)return F.p1;let d=c.width;return"number"==typeof d&&Number.isFinite(d)?Math.max(40,Math.min(140,Math.round(d))):F.p1}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,F.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,$,_,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)=>{(void 0===b||Array.isArray(b))&&(void 0===b?this.extensionWidgets.delete(a):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 $},getAllThemes:()=>[],getTheme:()=>void 0,setTheme:()=>({success:!1,error:"Theme switching is not supported in pi-web extension UI yet"}),getToolsExpanded:()=>!1,setToolsExpanded:()=>{}}}syncProjectTrust(){this.inner.settingsManager.setProjectTrusted((0,n.Y1)(this.cwd,(0,e.getAgentDir)()).trusted)}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.extensionWidgets.clear(),this.syncProjectTrust(),await this.inner.reload({beforeSessionStart:()=>{this.inner.extensionRunner.setUIContext?.(this.createExtensionUiContext(),"rpc")}}),this.applyExactSystemPrompt()}}}}function L(a){a&&(a.persist=!1)}function M(a){globalThis.__piSessionLifecycles??=new Map;let b=globalThis.__piSessionLifecycles.get(a);return b||(b={generation:0,barriers:0,deleted:!1,starts:new Set},globalThis.__piSessionLifecycles.set(a,b)),b}function N(a,b){let c=M(a);if(c.deleted||c.barriers>0||void 0!==b&&c.generation!==b)throw Error("Session was deleted or is being changed; retry after the operation finishes")}function O(){if(!globalThis.__piSessions){globalThis.__piSessions=new Map;let a=()=>Promise.allSettled(Array.from(globalThis.__piSessions?.values()??[],a=>a.shutdown()));process.once("exit",()=>globalThis.__piSessions?.forEach(a=>a.destroy())),process.once("SIGINT",()=>{a().finally(()=>process.exit(130))}),process.once("SIGTERM",()=>{a().finally(()=>process.exit(143))})}return globalThis.__piSessions}let ab="";function P(){let a=globalThis.__piRunningListeners;if(!a||0===a.size){ab="";return}let b=function(){let a=[];for(let[b,c]of O()){if(!c.isAlive())continue;let d=c.runtimeSnapshot();d.running&&a.push({...d,id:d.id||b})}return a}(),c=JSON.stringify(b);if(c!==ab)for(let d of(ab=c,a))try{d(b)}catch{}}let ac=(0,u.s)({getSession:a=>O().get(a),registerSession:(a,b)=>{let c,d,e;c=new aa(a,a.sessionManager.getCwd()),b?.chatOnly?c.setForceEmptySystemPrompt(!0):b?.exactSystemPrompt&&c.setExactSystemPrompt(b.exactSystemPrompt),c.setChatOnly(!!b?.chatOnly),c.setSuppressCompletionNotifications(!0),c.start(),d=a.sessionId,e=O(),c.onDestroy(()=>e.delete(d)),e.set(d,c)},reopenSession:async(a,b)=>(await T(a,b,void 0)).session,resolveSessionPath:o.os,invalidateSessionList:o.mD,notifyRunningChange:P,isBuiltInSubagentsEnabled:v.N});!function(){try{let a=(0,v.M6)();if((0,h.existsSync)(a))return;(0,h.mkdirSync)(a.slice(0,a.lastIndexOf("/")),{recursive:!0}),(0,h.writeFileSync)(a,JSON.stringify({builtInEnabled:!0},null,2)+"\n")}catch(a){console.warn("[pi-web] failed to seed agents/settings.json:",a instanceof Error?a.message:a)}}();let ad=new Map;function Q(a){let b=globalThis.__piSessionBusListeners;if(b&&0!==b.size)for(let c of b)try{c(a)}catch{}}function R(a,b,c){let d=globalThis.__piSessionBusListeners;if(!d||0===d.size)return;if("message_update"!==a)return void Q({type:a,sessionId:b,payload:c});let e=ad.get(b),f={type:a,sessionId:b,payload:c};e?(clearTimeout(e.timer),e.event=f):ad.set(b,{event:f,timer:setTimeout(()=>{let a=ad.get(b);a&&(ad.delete(b),Q(a.event))},80)})}function S(a,b){let c=Date.now(),{provider:d,modelId:e,sessionId:f}=b,g=a.result.bind(a);a.result=async()=>{let a,b,h,i,j,k=await g();return a=Date.now()-c,b="error"===k.stopReason||"aborted"===k.stopReason,h=k.errorMessage?.trim(),j=(i=h?.match(/\bHTTP\s+(\d{3})\b|\bstatus(?:\s+code)?\s*[:=]?\s*(\d{3})\b/))?Number(i[1]??i[2]):void 0,(0,G.wF)({level:b?"error":"info",source:"model-call",provider:d,model:e,sessionId:f,...void 0!==j?{statusCode:j}:{},message:b?`模型调用失败 ${d}/${e}${h?`:${h}`:""}`:`模型调用成功 ${d}/${e}`,details:b?void 0:`耗时 ${a}ms`}),k};let h=a[Symbol.asyncIterator].bind(a);return a[Symbol.asyncIterator]=()=>{let a=h();return{next:()=>a.next().catch(a=>{throw(0,G.wF)({level:"error",source:"model-call",provider:d,model:e,sessionId:f,message:`模型调用传输错误 ${d}/${e}:${a instanceof Error?a.message:String(a)}`}),a})}},a}async function T(a,b,d,f={}){let g,j,k,t,u,w,x,y,A,B,{toolNames:C,initialModel:F,thinkingLevel:G,allowInitialModelFallback:H}=f,J=O(),P=(globalThis.__piStartLocks||(globalThis.__piStartLocks=new Map),globalThis.__piStartLocks),Q=M(a),R=Q.generation;N(a,R);let U=J.get(a);if(U?.isAlive()&&!U.isShuttingDown())return{session:U,realSessionId:a,created:!1};if(U){let a=U.whenShutdown();if(a){let b;try{await Promise.race([a,new Promise(a=>{b=setTimeout(a,1e4)})])}finally{clearTimeout(b)}}}N(a,R);let V=P.get(a);if(V)return V;if(b){if(!(0,h.existsSync)(b))throw Error("Session not found");if((g=e.SessionManager.open(b,void 0)).getSessionId()!==a)throw Error("Session identity changed")}else{if(!d)throw Error("cwd is required for a new session");g=e.SessionManager.create(d,void 0)}let W=g.getSessionId(),X=M(W),Y=X.generation;N(W,Y);let Z=g.getCwd(),$=g.getEntries(),_=b?(0,q.ph)($):null,ab=_?void 0:(0,r.dS)($);_||void 0!==ab||void 0===C||(0,r.b5)(g,C);let ad=(globalThis.__piStartingSessionCwds||(globalThis.__piStartingSessionCwds=new Map),A=globalThis.__piStartingSessionCwds,B=function(a){let b=(0,i.resolve)(a);try{return(0,h.realpathSync)(b)}catch{return b}}(Z),A.set(B,(A.get(B)??0)+1),()=>{let a=(A.get(B)??1)-1;a>0?A.set(B,a):A.delete(B)}),ae=new AbortController,af=setTimeout(()=>ae.abort(),25e3),ag=!1,ah=!1,ai=()=>{if(t&&!ah){ah=!0;try{t.cleanup()}catch{}}},aj=()=>{L(g);let a=u;if(a&&x!==a)if(x=a,w)w.destroy();else try{a.dispose()}catch{}ai()},ak=new Promise((a,b)=>{y=b}),al={settled:Promise.resolve(),cancel:a=>{k||(k=a,ae.abort(a),aj(),y(a))}};Q.starts.add(al),X.starts.add(al);let am=()=>{if(k)throw k;N(a,R),N(W,Y)},an=(async()=>{let b=(0,s.Qf)({subagentTools:_?.tools,persistedTools:ab,requestedTools:C}),d=(0,s.J7)({toolSelection:b,subagentLoadsResources:!!(_?.loadExtensions||_?.loadSkills)});d||(0,e.initTheme)();let f=(0,e.getAgentDir)(),h=_?.tools;_||void 0===b||(h=0===b.length?[]:void 0);let i=!!(_?.loadExtensions||_?.loadSkills),r=_?i?(0,n.Fk)(Z,f):void 0:(0,n.Fk)(Z,f),x={},y=(0,E.Q)(()=>x.current?.()),A=d||_?.exactSystemPrompt!==void 0,B=await (0,e.createAgentSessionServices)({cwd:Z,agentDir:f,modelRuntimeSignal:ae.signal,resourceLoaderOptions:_?{noExtensions:!0,noSkills:!0,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,appendSystemPrompt:_.appendSystemPrompt,...A?{extensionFactories:[y]}:{}}:d?{...D.M,extensionFactories:[y]}:{extensionFactories:[(0,p.Vj)(ac.extensionRuntime,()=>(0,q.IR)(Z),v.N)],extensionsOverride:a=>(0,p.U6)(a)},...r?{resourceLoaderReloadOptions:r}:{}});am();let{createAsyncBashTools:L}=await Promise.resolve().then(c.bind(c,12394));am(),t=new I.B;let M=L(t),N=await (0,m.py)(B.modelRuntime,B.settingsManager.getEnabledModels(),{signal:ae.signal});am();let P=F&&(!H||N.visible.some(a=>a.provider===F.provider&&a.id===F.modelId))?F:void 0,Q=B.settingsManager.getDefaultProvider(),R=B.settingsManager.getDefaultModel(),T=g.getBranch(),U=T.some(a=>"message"===a.type&&"system"!==a.message.role),V=U?(0,o.Vg)(T):null,W=V?B.modelRuntime.getModel(V.provider,V.modelId):void 0,X=U?null:(0,m.IR)(N,{...P?{requestedModel:P}:{},...Q&&R?{defaultModel:{provider:Q,modelId:R}}:{},...G?{thinkingLevel:G}:{}}),Y=W&&B.modelRuntime.hasConfiguredAuth(W.provider)?W:X?.model;am();let $=(0,e.createAgentSessionFromServices)({services:B,sessionManager:g,...Y?{model:Y}:{},...X?.thinkingLevel?{thinkingLevel:X.thinkingLevel}:{},...N.scopedModels.length>0?{scopedModels:[...N.scopedModels]}:{},...void 0!==h?{tools:h}:{},customTools:M});$.then(({session:a})=>{u=a,k&&aj()},()=>{}),j=setTimeout(()=>{al.cancel(Error("Session startup timed out while binding extensions/resources (40s)"))},4e4);let{session:ad}=await Promise.race([$,ak]);clearTimeout(j),am();try{let c=ad.agent,e=c.streamFunction;c.streamFunction=(b,c,d)=>{let f=e(b,c,d);return f instanceof Promise?f.then(c=>S(c,{provider:b.provider,modelId:b.id,sessionId:a})):S(f,{provider:b.provider,modelId:b.id,sessionId:a})},am();let f=await (0,z.o)(B.settingsManager,{...F?{model:F}:{},...G?{thinkingLevel:G}:{}},{...ad.model?{model:{provider:ad.model.provider,modelId:ad.model.id}}:{},thinkingLevel:ad.agent.state?.thinkingLevel??"off",supportsThinking:ad.supportsThinking()});am(),f.modelDefaultChanged&&(0,l.k)(),_||d||void 0===b||ad.setActiveToolsByName(K(ad,b)),am();let g=new aa(ad,Z);w=g,g.setChatOnly(d),g.setSuppressCompletionNotifications(void 0!==_),b?.length===0?g.setForceEmptySystemPrompt(!0):_&&_.appendSystemPrompt.length>0&&g.setExactSystemPrompt(_.appendSystemPrompt[0]);let h=_?.exactSystemPrompt!==void 0?_.exactSystemPrompt:d?_?_.appendSystemPrompt[0]??"":(0,D.c)(ad.resourceLoader.getAgentsFiles().agentsFiles):null;x.current=null===h?void 0:()=>h,null!==h&&g.setExactSystemPrompt(h),g.start(),g.loadQueueRecovery();let i=ad.sessionId,j=ad.sessionFile;return j&&(0,o.O8)(i,j),g.persistSessionFileIfMissing(),g.onDestroy(()=>{ai(),J.get(i)===g&&J.delete(i)}),J.set(i,g),g.beginExtensionBinding({forceEmptySystemPrompt:b?.length===0}),!function(){!function(){let a=globalThis.__piSessionLifecycles;if(!a||0===a.size)return;let b=O();for(let[c,d]of a)d.deleted||d.barriers>0||d.starts.size>0||b.has(c)||a.delete(c)}();let a=O();if(a.size<=12)return;let b=Array.from(a.entries()).filter(([,a])=>a.isAlive()&&!a.isRunning()&&!a.hasSubscribers()).sort((a,b)=>a[1].activityTimestamp-b[1].activityTimestamp),c=a.size-12;for(let[d,e]of b){if(c<=0)break;a.has(d)&&(console.log(`[pi-web] evicting idle unwatched session ${d} (registry cap 12)`),e.shutdown().catch(a=>{console.error(`[pi-web] failed to evict session ${d}:`,a instanceof Error?a.message:a)}),c-=1)}}(),{session:g,realSessionId:i,created:!0}}catch(a){throw aj(),a}})().catch(a=>{throw aj(),a}),ao=setTimeout(()=>{al.cancel(Error("Session startup timed out after 60s (extension/resource binding may be hung); the start lock was released — retry the request to start over."))},6e4),ap=Promise.race([an,ak]).finally(()=>{P.get(a)===ap&&P.delete(a),ag||(ag=!0,clearTimeout(af),clearTimeout(ao),clearTimeout(j),Q.starts.delete(al),X.starts.delete(al),ad())});return al.settled=ap,P.set(a,ap),ap}d()}catch(a){d(a)}})},12394:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{B:()=>p,createAsyncBashTools:()=>n});var e=c(31421),f=c(81186),g=c(75430),h=c(98052),i=a([f,g]);[f,g]=i.then?(await i)():i;class o{append(a){for(this.totalBytes+=a.length,this.tail.push(a),this.tailBytes+=a.length;this.tailBytes>258048&&this.tail.length>1;){let a=this.tail.shift();this.tailBytes-=a.length}if(this.headBytes<4096){let b=4096-this.headBytes;a.length<=b?(this.head.push(a),this.headBytes+=a.length):(this.head.push(a.subarray(0,b)),this.headBytes=4096)}}get hasOmission(){return this.totalBytes>this.headBytes+this.tailBytes}get omittedBytes(){return Math.max(0,this.totalBytes-this.headBytes-this.tailBytes)}toSnapshot(){if(!this.hasOmission)return Buffer.concat(this.tail).toString("utf-8");let a=[...this.head];return a.push(Buffer.from(`
9
9
  ... ${this.omittedBytes} bytes omitted ...
10
10
 
11
11
  `)),a.push(...this.tail),Buffer.concat(a).toString("utf-8")}reset(){this.head=[],this.tail=[],this.headBytes=0,this.tailBytes=0,this.totalBytes=0}constructor(){this.head=[],this.tail=[],this.headBytes=0,this.tailBytes=0,this.totalBytes=0}}function j(a){if("win32"===process.platform)try{(0,e.spawn)("taskkill",["/F","/T","/PID",String(a)],{stdio:"ignore",detached:!0,windowsHide:!0})}catch{}else try{process.kill(-a,"SIGKILL")}catch{try{process.kill(a,"SIGKILL")}catch{}}}class p{spawn(a,b,c){let d,f=this.nextId++,h=(0,g.getShellConfig)(),i="stdin"===h.commandTransport,j=i?h.args:[...h.args,a],k=(0,e.spawn)(h.shell,j,{cwd:b,detached:"win32"!==process.platform,env:{...c,NO_COLOR:"1",TERM:"dumb"},stdio:["pipe","pipe","pipe"],windowsHide:!0});k.stdin?.on("error",()=>{}),i&&k.stdin?.end(a);let l=new Promise(a=>{d=a}),m={id:f,child:k,command:a,cwd:b,startedAt:Date.now(),buffer:new o,deltaBuffer:new o,exitCode:null,exited:!1,settled:l},n=a=>{m.buffer.append(a),m.deltaBuffer.append(a)};return k.stdout?.on("data",n),k.stderr?.on("data",n),k.once("exit",a=>{m.exited=!0,m.exitCode=a}),k.once("close",()=>d()),k.once("error",a=>{m.exited=!0;let b=Buffer.from(`