pi-yun 0.2.4 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +14 -14
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +4 -4
  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.js +1 -1
  14. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  15. package/.next/server/app/_not-found.html +1 -1
  16. package/.next/server/app/_not-found.rsc +6 -6
  17. package/.next/server/app/_not-found.segments/_full.segment.rsc +6 -6
  18. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +6 -6
  19. package/.next/server/app/_not-found.segments/_tree.segment.rsc +4 -4
  20. package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
  21. package/.next/server/app/api/agent/[id]/events/route.js +1 -1
  22. package/.next/server/app/api/agent/[id]/events/route.js.nft.json +1 -1
  23. package/.next/server/app/api/agent/[id]/lease/route.js +1 -1
  24. package/.next/server/app/api/agent/[id]/lease/route.js.nft.json +1 -1
  25. package/.next/server/app/api/agent/[id]/route.js +1 -1
  26. package/.next/server/app/api/agent/[id]/route.js.nft.json +1 -1
  27. package/.next/server/app/api/agent/debug/route.js +1 -1
  28. package/.next/server/app/api/agent/debug/route.js.nft.json +1 -1
  29. package/.next/server/app/api/agent/new/route.js +1 -1
  30. package/.next/server/app/api/agent/new/route.js.nft.json +1 -1
  31. package/.next/server/app/api/agent/running/route.js +1 -1
  32. package/.next/server/app/api/agent/running/route.js.nft.json +1 -1
  33. package/.next/server/app/api/app-update/route.js +1 -1
  34. package/.next/server/app/api/auth/login/[provider]/route.js +2 -2
  35. package/.next/server/app/api/auth/providers/route.js +1 -1
  36. package/.next/server/app/api/cwd/browse/route.js.nft.json +2 -2
  37. package/.next/server/app/api/cwd/validate/route.js +1 -1
  38. package/.next/server/app/api/cwd/validate/route.js.nft.json +2 -2
  39. package/.next/server/app/api/file-index/route.js +1 -1
  40. package/.next/server/app/api/files/[...path]/route.js +1 -1
  41. package/.next/server/app/api/git/diff/route.js +1 -1
  42. package/.next/server/app/api/git/status/route.js +1 -1
  43. package/.next/server/app/api/mcp/route.js +1 -1
  44. package/.next/server/app/api/mcp/sign-in/route.js +1 -1
  45. package/.next/server/app/api/mcp/test/route.js +1 -1
  46. package/.next/server/app/api/models/default/route.js +1 -1
  47. package/.next/server/app/api/models/default/route.js.nft.json +2 -2
  48. package/.next/server/app/api/models/enabled/route.js +1 -1
  49. package/.next/server/app/api/models/enabled/route.js.nft.json +2 -2
  50. package/.next/server/app/api/models/refresh/route.js +1 -1
  51. package/.next/server/app/api/models/route.js +1 -1
  52. package/.next/server/app/api/open-in-explorer/route.js +1 -1
  53. package/.next/server/app/api/plugins/check/route.js +1 -1
  54. package/.next/server/app/api/plugins/route.js +1 -1
  55. package/.next/server/app/api/project-trust/route.js +1 -1
  56. package/.next/server/app/api/project-trust/route.js.nft.json +1 -1
  57. package/.next/server/app/api/push/config/route.js +1 -1
  58. package/.next/server/app/api/push/subscribe/route.js +1 -1
  59. package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
  60. package/.next/server/app/api/sessions/[id]/auto-name/route.js.nft.json +1 -1
  61. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  62. package/.next/server/app/api/sessions/[id]/context/route.js.nft.json +1 -1
  63. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
  64. package/.next/server/app/api/sessions/[id]/entries/[entryId]/tool-result-image/route.js +1 -1
  65. package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
  66. package/.next/server/app/api/sessions/[id]/fork/route.js +1 -1
  67. package/.next/server/app/api/sessions/[id]/fork/route.js.nft.json +1 -1
  68. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  69. package/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  70. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  71. package/.next/server/app/api/sessions/[id]/state/route.js.nft.json +1 -1
  72. package/.next/server/app/api/sessions/delete/route.js +1 -1
  73. package/.next/server/app/api/sessions/delete/route.js.nft.json +1 -1
  74. package/.next/server/app/api/sessions/route.js +1 -1
  75. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  76. package/.next/server/app/api/sessions/search/route.js +1 -1
  77. package/.next/server/app/api/sessions/stats/route.js +1 -1
  78. package/.next/server/app/api/sessions/stats/route.js.nft.json +1 -1
  79. package/.next/server/app/api/skills/check/route.js +1 -1
  80. package/.next/server/app/api/skills/content/route.js +1 -1
  81. package/.next/server/app/api/skills/install/route.js +1 -1
  82. package/.next/server/app/api/skills/route.js +1 -1
  83. package/.next/server/app/api/skills/update/route.js +1 -1
  84. package/.next/server/app/api/subagents/[id]/route.js +1 -1
  85. package/.next/server/app/api/subagents/[id]/route.js.nft.json +1 -1
  86. package/.next/server/app/api/subagents/profiles/route.js +1 -1
  87. package/.next/server/app/api/terminal/[id]/events/route.js +3 -3
  88. package/.next/server/app/api/terminal/[id]/events/route.js.nft.json +1 -1
  89. package/.next/server/app/api/terminal/[id]/route.js +1 -1
  90. package/.next/server/app/api/terminal/[id]/route.js.nft.json +1 -1
  91. package/.next/server/app/api/terminal/route.js +1 -1
  92. package/.next/server/app/api/worktrees/route.js +1 -1
  93. package/.next/server/app/index.html +1 -1
  94. package/.next/server/app/index.rsc +9 -9
  95. package/.next/server/app/index.segments/__PAGE__.segment.rsc +8 -8
  96. package/.next/server/app/index.segments/_full.segment.rsc +9 -9
  97. package/.next/server/app/index.segments/_tree.segment.rsc +5 -5
  98. package/.next/server/app/login/page.js +1 -1
  99. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  100. package/.next/server/app/login.html +1 -1
  101. package/.next/server/app/login.rsc +7 -7
  102. package/.next/server/app/login.segments/_full.segment.rsc +7 -7
  103. package/.next/server/app/login.segments/_tree.segment.rsc +4 -4
  104. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +11 -10
  105. package/.next/server/app/manifest.webmanifest/route.js +1 -17
  106. package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  107. package/.next/server/app/page.js +87 -16
  108. package/.next/server/app/page_client-reference-manifest.js +1 -1
  109. package/.next/server/app/pet-preview/page.js +1 -1
  110. package/.next/server/app/pet-preview/page_client-reference-manifest.js +1 -1
  111. package/.next/server/app/pet-preview.html +1 -1
  112. package/.next/server/app/pet-preview.rsc +7 -7
  113. package/.next/server/app/pet-preview.segments/_full.segment.rsc +7 -7
  114. package/.next/server/app/pet-preview.segments/_tree.segment.rsc +4 -4
  115. package/.next/server/app/pet-preview.segments/pet-preview/__PAGE__.segment.rsc +6 -6
  116. package/.next/server/app-paths-manifest.json +14 -14
  117. package/.next/server/chunks/1906.js +1 -1
  118. package/.next/server/chunks/2243.js +1 -1
  119. package/.next/server/chunks/2498.js +1 -1
  120. package/.next/server/chunks/27.js +1 -1
  121. package/.next/server/chunks/3757.js +1 -1
  122. package/.next/server/chunks/3824.js +1 -1
  123. package/.next/server/chunks/5138.js +1 -0
  124. package/.next/server/chunks/5582.js +2 -2
  125. package/.next/server/chunks/6429.js +8 -6
  126. package/.next/server/chunks/8177.js +1 -1
  127. package/.next/server/middleware-build-manifest.js +1 -1
  128. package/.next/server/pages/404.html +1 -1
  129. package/.next/server/pages/500.html +1 -1
  130. package/.next/static/chunks/1278-d14efc5351094e2a.js +1 -0
  131. package/.next/static/chunks/app/{layout-fd458f024053777b.js → layout-887864247723a15f.js} +1 -1
  132. package/.next/static/chunks/app/page-5fe4e4e656618c55.js +1093 -0
  133. package/.next/static/css/08eddaaa4f97d65e.css +1 -0
  134. package/.next/static/css/2f63bdc85a747c1b.css +1 -0
  135. package/.next/static/css/{edd81c2e355e9677.css → 3540eb37e32475c8.css} +1 -1
  136. package/.next/static/css/948bdf99ac6477ce.css +1 -0
  137. package/.next/trace +14 -8
  138. package/.next/trace-build +1 -1
  139. package/.next/types/app/manifest.webmanifest/route.ts +353 -0
  140. package/.next/types/routes.d.ts +2 -1
  141. package/.next/types/validator.ts +9 -0
  142. package/README.md +4 -0
  143. package/package.json +13 -11
  144. package/.next/static/chunks/1278-924fb78593d04d55.js +0 -1
  145. package/.next/static/chunks/app/page-d2c786f63d634b03.js +0 -1022
  146. package/.next/static/css/0e52953f40c91a8b.css +0 -1
  147. package/.next/static/css/11d43ff6e42cbb72.css +0 -1
  148. package/.next/static/css/bb657b16840154d3.css +0 -1
  149. /package/.next/static/{vJWDpddtTSWk_gKxyuTL7 → EemFyRH2znEKEODTd_e9W}/_buildManifest.js +0 -0
  150. /package/.next/static/{vJWDpddtTSWk_gKxyuTL7 → EemFyRH2znEKEODTd_e9W}/_ssgManifest.js +0 -0
@@ -18,29 +18,28 @@
18
18
  "/api/sessions/[id]/state/route": "app/api/sessions/[id]/state/route.js",
19
19
  "/api/worktrees/route": "app/api/worktrees/route.js",
20
20
  "/favicon.ico/route": "app/favicon.ico/route.js",
21
- "/manifest.webmanifest/route": "app/manifest.webmanifest/route.js",
22
21
  "/api/agent/debug/route": "app/api/agent/debug/route.js",
23
22
  "/api/agent/running/route": "app/api/agent/running/route.js",
24
- "/api/agent/[id]/events/route": "app/api/agent/[id]/events/route.js",
25
- "/api/agent/[id]/lease/route": "app/api/agent/[id]/lease/route.js",
26
23
  "/api/app-update/route": "app/api/app-update/route.js",
27
- "/api/auth/api-key/[provider]/route": "app/api/auth/api-key/[provider]/route.js",
28
24
  "/api/agent/new/route": "app/api/agent/new/route.js",
29
- "/api/auth/providers/route": "app/api/auth/providers/route.js",
25
+ "/api/auth/api-key/[provider]/route": "app/api/auth/api-key/[provider]/route.js",
30
26
  "/api/auth/logout/[provider]/route": "app/api/auth/logout/[provider]/route.js",
27
+ "/api/auth/providers/route": "app/api/auth/providers/route.js",
31
28
  "/api/cache-miss-notices/route": "app/api/cache-miss-notices/route.js",
29
+ "/api/auth/login/[provider]/route": "app/api/auth/login/[provider]/route.js",
32
30
  "/api/mcp/sign-in/[flowId]/route": "app/api/mcp/sign-in/[flowId]/route.js",
33
31
  "/api/mcp/sign-in/route": "app/api/mcp/sign-in/route.js",
34
32
  "/api/mcp/test/route": "app/api/mcp/test/route.js",
35
- "/api/auth/login/[provider]/route": "app/api/auth/login/[provider]/route.js",
36
33
  "/api/models-config/catalog/route": "app/api/models-config/catalog/route.js",
37
- "/api/models-config/route": "app/api/models-config/route.js",
38
34
  "/api/models-config/discover/route": "app/api/models-config/discover/route.js",
35
+ "/api/models-config/route": "app/api/models-config/route.js",
39
36
  "/api/models-config/test/route": "app/api/models-config/test/route.js",
40
- "/api/models/refresh/route": "app/api/models/refresh/route.js",
41
37
  "/api/models/default/route": "app/api/models/default/route.js",
38
+ "/api/mcp/route": "app/api/mcp/route.js",
39
+ "/api/models/refresh/route": "app/api/models/refresh/route.js",
42
40
  "/api/models/route": "app/api/models/route.js",
43
41
  "/api/open-in-explorer/route": "app/api/open-in-explorer/route.js",
42
+ "/api/agent/[id]/events/route": "app/api/agent/[id]/events/route.js",
44
43
  "/api/plugins/check/route": "app/api/plugins/check/route.js",
45
44
  "/api/project-trust/route": "app/api/project-trust/route.js",
46
45
  "/api/provider-usage/query/route": "app/api/provider-usage/query/route.js",
@@ -48,30 +47,31 @@
48
47
  "/api/push/subscribe/route": "app/api/push/subscribe/route.js",
49
48
  "/api/sessions/[id]/export/route": "app/api/sessions/[id]/export/route.js",
50
49
  "/api/sessions/[id]/fork/route": "app/api/sessions/[id]/fork/route.js",
51
- "/api/mcp/route": "app/api/mcp/route.js",
50
+ "/api/sessions/[id]/route": "app/api/sessions/[id]/route.js",
52
51
  "/api/sessions/delete/route": "app/api/sessions/delete/route.js",
53
- "/api/plugins/route": "app/api/plugins/route.js",
54
52
  "/api/sessions/route": "app/api/sessions/route.js",
55
53
  "/api/sessions/search/route": "app/api/sessions/search/route.js",
56
- "/api/sessions/[id]/route": "app/api/sessions/[id]/route.js",
57
- "/api/sessions/ui-state/route": "app/api/sessions/ui-state/route.js",
58
54
  "/api/sessions/stats/route": "app/api/sessions/stats/route.js",
55
+ "/api/sessions/ui-state/route": "app/api/sessions/ui-state/route.js",
59
56
  "/api/skills/check/route": "app/api/skills/check/route.js",
57
+ "/api/plugins/route": "app/api/plugins/route.js",
60
58
  "/api/skills/content/route": "app/api/skills/content/route.js",
61
59
  "/api/skills/install/route": "app/api/skills/install/route.js",
62
60
  "/api/skills/route": "app/api/skills/route.js",
63
- "/api/subagents/[id]/route": "app/api/subagents/[id]/route.js",
64
61
  "/api/skills/update/route": "app/api/skills/update/route.js",
65
62
  "/api/skills/search/route": "app/api/skills/search/route.js",
63
+ "/api/subagents/[id]/route": "app/api/subagents/[id]/route.js",
66
64
  "/api/subagents/settings/route": "app/api/subagents/settings/route.js",
67
- "/api/terminal/[id]/route": "app/api/terminal/[id]/route.js",
68
65
  "/api/subagents/profiles/route": "app/api/subagents/profiles/route.js",
69
66
  "/api/terminal/[id]/events/route": "app/api/terminal/[id]/events/route.js",
67
+ "/api/terminal/[id]/route": "app/api/terminal/[id]/route.js",
70
68
  "/api/terminal/route": "app/api/terminal/route.js",
71
69
  "/api/tools/settings/route": "app/api/tools/settings/route.js",
70
+ "/manifest.webmanifest/route": "app/manifest.webmanifest/route.js",
72
71
  "/api/web-auth/route": "app/api/web-auth/route.js",
73
72
  "/login/page": "app/login/page.js",
74
73
  "/page": "app/page.js",
75
74
  "/pet-preview/page": "app/pet-preview/page.js",
75
+ "/api/agent/[id]/lease/route": "app/api/agent/[id]/lease/route.js",
76
76
  "/api/models/enabled/route": "app/api/models/enabled/route.js"
77
77
  }
@@ -1 +1 @@
1
- "use strict";exports.id=1906,exports.ids=[1906],exports.modules={10879:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$q:()=>x,Vy:()=>v,bA:()=>y,ej:()=>u,yh:()=>C});var e=c(73024),f=c(76760),g=c(75430),h=c(80974),i=c.n(h),j=c(8102),k=c(63108),l=c(37431),m=c(12069),n=a([g]);g=(n.then?(await n)():n)[0];let z=new Set(["version","revision","sessions","projects","removedProjects","projectOrder","projectNames","__proto__"]),A=Symbol.for("pi-web:session-ui-state-write-queue"),B={realpath:!1,stale:1e4,retries:{retries:10,factor:2,minTimeout:25,maxTimeout:500},onCompromised:a=>{console.warn(`[pi-web] the session UI state lock was compromised: ${a.message}`)}};class C extends Error{constructor(a="Another process holds the session UI state lock"){super(a),this.name="SessionUiStateLockedError"}}function o(){return globalThis.__piWebSessionUiStateCache??={reads:new Map,revisions:new Map}}function p(a,b){let c=o().revisions;b>(c.get(a)??-1)&&c.set(a,b)}function q(a){return structuredClone(a)}function r(a=(0,g.getAgentDir)()){return(0,f.join)(a,"pi-web-session-state.json")}function s(a){let b;try{b=JSON.parse(a)}catch{return{ok:!1}}let c=(0,m.Jx)(b);return c?{ok:!0,state:c,raw:b}:{ok:!1}}function t(a){let b,c;try{b=(0,e.statSync)(a)}catch(c){let b=c?.code;if("ENOENT"===b||"ENOTDIR"===b)return o().reads.delete(a),(0,m.ly)();throw c}let d=o().reads.get(a);if(d&&d.mtimeMs===b.mtimeMs&&d.size===b.size&&d.ino===b.ino)return d.state;let f=(0,l.y)(a,4194304);if(void 0===f)return o().reads.delete(a),(0,m.ly)();let g=s(f);return g.ok?(c=g.state,p(a,c.revision)):(console.warn(`[pi-web] ${a} is not valid session UI state; reading it as empty until the next change sets it aside`),c=(0,m.ly)()),o().reads.set(a,{mtimeMs:b.mtimeMs,size:b.size,ino:b.ino,state:c}),c}function u(a){try{return q(t(a??r()))}catch(a){return console.warn(`[pi-web] could not read the session UI state: ${a instanceof Error?a.message:String(a)}`),(0,m.ly)()}}function v(a){try{return t(a??r()).revision}catch{return null}}function w(a,b){return(0,k.T)(A,a,async()=>{let c;(0,e.mkdirSync)((0,f.dirname)(a),{recursive:!0});try{c=await i().lock(a,B)}catch(a){if("ELOCKED"===a?.code)throw new C;throw a}try{let c,d=o().revisions.get(a)??0,f=(0,l.y)(a,4194304),g={},h=!1;if(void 0===f)c={...(0,m.ly)(),revision:d};else{let b=s(f);if(b.ok)for(let[a,d]of(c=b.state,Object.entries(b.raw)))z.has(a)||(g[a]=d);else{let b=`${a}.corrupt-${Date.now()}`;try{(0,e.renameSync)(a,b),console.warn(`[pi-web] ${a} could not be parsed; moved it to ${b} and started from an empty session UI state`)}catch(b){console.warn(`[pi-web] ${a} could not be parsed and could not be moved aside (${b instanceof Error?b.message:String(b)}); starting from an empty session UI state`)}c={...(0,m.ly)(),revision:d+1},h=!0}}let i=b(c);if(!i.changed&&!h)return q(c);let k={...i.state,version:m.fS,revision:c.revision+ +!!i.changed},n={version:k.version,revision:k.revision,sessions:k.sessions,projects:k.projects,...k.removedProjects&&Object.keys(k.removedProjects).length>0?{removedProjects:k.removedProjects}:{},...k.projectOrder?.length?{projectOrder:k.projectOrder}:{},...k.projectNames&&Object.keys(k.projectNames).length>0?{projectNames:k.projectNames}:{},...g};(0,j.$)(a,JSON.stringify(n,null,2)+"\n"),p(a,k.revision);try{let b=(0,e.statSync)(a);o().reads.set(a,{mtimeMs:b.mtimeMs,size:b.size,ino:b.ino,state:q(k)})}catch{o().reads.delete(a)}return q(k)}finally{try{await c()}catch{}}})}function x(a,b){let c;try{c=b??r()}catch(a){return Promise.reject(a)}return w(c,b=>(0,m.D7)(b,a,Date.now()))}async function y(a,b){let c=b??r(),d=[...new Set(a)];if(0===d.length)return;let e=a=>d.some(b=>Object.prototype.hasOwnProperty.call(a.sessions,b));e(t(c))&&await w(c,a=>{if(!e(a))return{state:a,changed:!1};let b={...a.sessions};for(let a of d)delete b[a];return{state:{...a,sessions:b},changed:!0}})}d()}catch(a){d(a)}})},21906:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{L:()=>o,j:()=>n});var e=c(29021),f=c(33873),g=c(56429),h=c(40402),i=c(45902),j=c(10879),k=c(7048),l=a([g,h,j,k]);[g,h,j,k]=l.then?(await l)():l;let o=500;function m(a,b,c){let d=a.get(b)??[];d.push(c),a.set(b,d)}async function n(a,b={}){let c=new Map,d=[];for(let b of new Set(a)){let a=await (0,h.os)(b);a?c.set(b,a):d.push(b)}if(0===c.size)return{deleted:[],missing:d,running:[]};let l=new Map;for(let a of c.values()){let b;try{b=(0,h.eP)(a)?.parentSession}catch(a){if("ENOENT"!==a.code)throw a}l.set((0,i.$)(a),b)}let o=new Set([...c.values()].map(a=>(0,i.$)(a))),p=new Set([...c.values()].map(a=>(0,f.dirname)(a))),q=(0,h.O5)(await (0,h.dQ)({force:!0}),(0,g.Bp)({includeTransient:!0})),r=new Map;for(let a of q)a.relation?.kind==="subagent"&&m(r,a.relation.parentSessionId,a.id);let s=new Map(q.map(a=>[a.id,a.path]));for(let a of p)try{for(let b of(0,e.readdirSync)(a).filter(a=>a.endsWith(".jsonl"))){let c=(0,f.join)(a,b);if(!o.has((0,i.$)(c)))try{let a=(0,e.readFileSync)(c,"utf8").split("\n"),b=JSON.parse(a[0]);if("session"!==b.type||"string"!=typeof b.id)continue;let d=a.slice(1).flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}}),f=(0,k.$u)(d,b.id,c);if(!f)continue;m(r,f.parentSessionId,b.id),s.set(b.id,c)}catch{}}}catch{}let t=b.keepRunning?new Set((0,g.HG)()):new Set,u=new Set,v=[];for(let a of c.keys()){if(u.has(a))continue;let b=[],c=new Set,d=a=>{if(!(c.has(a)||u.has(a))){for(let b of(c.add(a),r.get(a)??[]))d(b);b.push(a)}};if(d(a),b.some(a=>t.has(a))){v.push(a);continue}for(let a of b)u.add(a)}let w=new Map;for(let a of u){let b=c.get(a)??s.get(a)??(0,g.hH)(a)?.sessionFile??await (0,h.os)(a);b&&w.set(a,b)}let x=new Map([...w.values()].map(a=>[(0,i.$)(a),a])),y=a=>{let b=new Set,c=a;for(;c;){let a=(0,i.$)(c),d=x.get(a);if(void 0===d)return c;if(b.has(a))break;if(b.add(a),!l.has(a)){let b;try{b=(0,h.eP)(d)?.parentSession}catch{b=void 0}l.set(a,b)}c=l.get(a)}};if(w.size>0)for(let a of new Set([...w.values()].map(a=>(0,f.dirname)(a))))try{for(let b of(0,e.readdirSync)(a).filter(b=>b.endsWith(".jsonl")&&!x.has((0,i.$)((0,f.join)(a,b))))){let c=(0,f.join)(a,b);try{let a,b=(0,h.eP)(c)?.parentSession;if(!b||!x.has((0,i.$)(b)))continue;let d=y(b);if(d)try{a=(0,h.eP)(d)?.id}catch{a=void 0}let f=(0,e.readFileSync)(c,"utf8").split("\n"),g=JSON.parse(f[0]);if("session"!==g.type)continue;if(g.parentSession=d,f[0]=JSON.stringify(g),d&&a)for(let b=1;b<f.length;b+=1){let c;try{c=JSON.parse(f[b])}catch{continue}if(!("custom"!==c.type||c.customType!==k.tP||"object"!=typeof c.data||null===c.data||Array.isArray(c.data))){c.data={...c.data,parentSessionId:a,parentSessionPath:d},f[b]=JSON.stringify(c);break}}(0,e.writeFileSync)(c,f.join("\n"))}catch{}}}catch{}for(let a of u){try{await (0,g.wW)(a)}catch{}await (0,g.hH)(a)?.shutdown()}for(let[a,b]of w){try{(0,e.unlinkSync)(b)}catch(a){if("ENOENT"!==a.code)throw a}(0,h.BR)(a),(0,h.j6)(b)}try{await (0,j.bA)(u)}catch(a){console.warn(`[pi-web] could not clear the sidebar state of deleted sessions: ${a instanceof Error?a.message:String(a)}`)}return(0,h.mD)(),{deleted:[...u],missing:d,running:v}}d()}catch(a){d(a)}})}};
1
+ "use strict";exports.id=1906,exports.ids=[1906],exports.modules={10879:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$q:()=>x,Vy:()=>v,bA:()=>y,ej:()=>u,yh:()=>C});var e=c(73024),f=c(76760),g=c(75430),h=c(80974),i=c.n(h),j=c(8102),k=c(63108),l=c(37431),m=c(12069),n=a([g]);g=(n.then?(await n)():n)[0];let z=new Set(["version","revision","sessions","projects","removedProjects","projectOrder","projectNames","__proto__"]),A=Symbol.for("pi-web:session-ui-state-write-queue"),B={realpath:!1,stale:1e4,retries:{retries:10,factor:2,minTimeout:25,maxTimeout:500},onCompromised:a=>{console.warn(`[pi-web] the session UI state lock was compromised: ${a.message}`)}};class C extends Error{constructor(a="Another process holds the session UI state lock"){super(a),this.name="SessionUiStateLockedError"}}function o(){return globalThis.__piWebSessionUiStateCache??={reads:new Map,revisions:new Map}}function p(a,b){let c=o().revisions;b>(c.get(a)??-1)&&c.set(a,b)}function q(a){return structuredClone(a)}function r(a=(0,g.getAgentDir)()){return(0,f.join)(a,"pi-web-session-state.json")}function s(a){let b;try{b=JSON.parse(a)}catch{return{ok:!1}}let c=(0,m.Jx)(b);return c?{ok:!0,state:c,raw:b}:{ok:!1}}function t(a){let b,c;try{b=(0,e.statSync)(a)}catch(c){let b=c?.code;if("ENOENT"===b||"ENOTDIR"===b)return o().reads.delete(a),(0,m.ly)();throw c}let d=o().reads.get(a);if(d&&d.mtimeMs===b.mtimeMs&&d.size===b.size&&d.ino===b.ino)return d.state;let f=(0,l.y)(a,4194304);if(void 0===f)return o().reads.delete(a),(0,m.ly)();let g=s(f);return g.ok?(c=g.state,p(a,c.revision)):(console.warn(`[pi-web] ${a} is not valid session UI state; reading it as empty until the next change sets it aside`),c=(0,m.ly)()),o().reads.set(a,{mtimeMs:b.mtimeMs,size:b.size,ino:b.ino,state:c}),c}function u(a){try{return q(t(a??r()))}catch(a){return console.warn(`[pi-web] could not read the session UI state: ${a instanceof Error?a.message:String(a)}`),(0,m.ly)()}}function v(a){try{return t(a??r()).revision}catch{return null}}function w(a,b){return(0,k.T)(A,a,async()=>{let c;(0,e.mkdirSync)((0,f.dirname)(a),{recursive:!0});try{c=await i().lock(a,B)}catch(a){if("ELOCKED"===a?.code)throw new C;throw a}try{let c,d=o().revisions.get(a)??0,f=(0,l.y)(a,4194304),g={},h=!1;if(void 0===f)c={...(0,m.ly)(),revision:d};else{let b=s(f);if(b.ok)for(let[a,d]of(c=b.state,Object.entries(b.raw)))z.has(a)||(g[a]=d);else{let b=`${a}.corrupt-${Date.now()}`;try{(0,e.renameSync)(a,b),console.warn(`[pi-web] ${a} could not be parsed; moved it to ${b} and started from an empty session UI state`)}catch(b){console.warn(`[pi-web] ${a} could not be parsed and could not be moved aside (${b instanceof Error?b.message:String(b)}); starting from an empty session UI state`)}c={...(0,m.ly)(),revision:d+1},h=!0}}let i=b(c);if(!i.changed&&!h)return q(c);let k={...i.state,version:m.fS,revision:c.revision+ +!!i.changed},n={version:k.version,revision:k.revision,sessions:k.sessions,projects:k.projects,...k.removedProjects&&Object.keys(k.removedProjects).length>0?{removedProjects:k.removedProjects}:{},...k.projectOrder?.length?{projectOrder:k.projectOrder}:{},...k.projectNames&&Object.keys(k.projectNames).length>0?{projectNames:k.projectNames}:{},...g};(0,j.$)(a,JSON.stringify(n,null,2)+"\n"),p(a,k.revision);try{let b=(0,e.statSync)(a);o().reads.set(a,{mtimeMs:b.mtimeMs,size:b.size,ino:b.ino,state:q(k)})}catch{o().reads.delete(a)}return q(k)}finally{try{await c()}catch{}}})}function x(a,b){let c;try{c=b??r()}catch(a){return Promise.reject(a)}return w(c,b=>(0,m.D7)(b,a,Date.now()))}async function y(a,b){let c=b??r(),d=[...new Set(a)];if(0===d.length)return;let e=a=>d.some(b=>Object.prototype.hasOwnProperty.call(a.sessions,b));e(t(c))&&await w(c,a=>{if(!e(a))return{state:a,changed:!1};let b={...a.sessions};for(let a of d)delete b[a];return{state:{...a,sessions:b},changed:!0}})}d()}catch(a){d(a)}})},21906:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{L:()=>p,j:()=>o});var e=c(29021),f=c(33873),g=c(56429),h=c(40402),i=c(45902),j=c(10879),k=c(7048),l=c(32812),m=a([g,h,j,k,l]);[g,h,j,k,l]=m.then?(await m)():m;let p=500;function n(a,b,c){let d=a.get(b)??[];d.push(c),a.set(b,d)}async function o(a,b={}){let c=new Map,d=[];for(let b of new Set(a)){let a=await (0,h.os)(b);a?c.set(b,a):d.push(b)}if(0===c.size)return{deleted:[],missing:d,running:[]};let m=new Map;for(let a of c.values()){let b;try{b=(0,h.eP)(a)?.parentSession}catch(a){if("ENOENT"!==a.code)throw a}m.set((0,i.$)(a),b)}let p=new Set([...c.values()].map(a=>(0,i.$)(a))),q=new Set([...c.values()].map(a=>(0,f.dirname)(a))),r=(0,h.O5)(await (0,h.dQ)({force:!0}),(0,g.Bp)({includeTransient:!0})),s=new Map;for(let a of r)(a.relation?.kind==="subagent"||a.relation?.kind==="side")&&n(s,a.relation.parentSessionId,a.id);let t=new Map(r.map(a=>[a.id,a.path]));for(let a of q)try{for(let b of(0,e.readdirSync)(a).filter(a=>a.endsWith(".jsonl"))){let c=(0,f.join)(a,b);if(!p.has((0,i.$)(c)))try{let a=(0,e.readFileSync)(c,"utf8").split("\n"),b=JSON.parse(a[0]);if("session"!==b.type||"string"!=typeof b.id)continue;let d=a.slice(1).flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}}),f=(0,k.$u)(d,b.id,c);if(f){n(s,f.parentSessionId,b.id),t.set(b.id,c);continue}let g=(0,l.cy)(d);g&&(n(s,g.parentSessionId,b.id),t.set(b.id,c))}catch{}}}catch{}let u=b.keepRunning?new Set((0,g.HG)()):new Set,v=new Set,w=[];for(let a of c.keys()){if(v.has(a))continue;let b=[],c=new Set,d=a=>{if(!(c.has(a)||v.has(a))){for(let b of(c.add(a),s.get(a)??[]))d(b);b.push(a)}};if(d(a),b.some(a=>u.has(a))){w.push(a);continue}for(let a of b)v.add(a)}let x=new Map;for(let a of v){let b=c.get(a)??t.get(a)??(0,g.hH)(a)?.sessionFile??await (0,h.os)(a);b&&x.set(a,b)}let y=new Map([...x.values()].map(a=>[(0,i.$)(a),a])),z=a=>{let b=new Set,c=a;for(;c;){let a=(0,i.$)(c),d=y.get(a);if(void 0===d)return c;if(b.has(a))break;if(b.add(a),!m.has(a)){let b;try{b=(0,h.eP)(d)?.parentSession}catch{b=void 0}m.set(a,b)}c=m.get(a)}};if(x.size>0)for(let a of new Set([...x.values()].map(a=>(0,f.dirname)(a))))try{for(let b of(0,e.readdirSync)(a).filter(b=>b.endsWith(".jsonl")&&!y.has((0,i.$)((0,f.join)(a,b))))){let c=(0,f.join)(a,b);try{let a,b=(0,h.eP)(c)?.parentSession;if(!b||!y.has((0,i.$)(b)))continue;let d=z(b);if(d)try{a=(0,h.eP)(d)?.id}catch{a=void 0}let f=(0,e.readFileSync)(c,"utf8").split("\n"),g=JSON.parse(f[0]);if("session"!==g.type)continue;if(g.parentSession=d,f[0]=JSON.stringify(g),d&&a)for(let b=1;b<f.length;b+=1){let c;try{c=JSON.parse(f[b])}catch{continue}if(!("custom"!==c.type||c.customType!==k.tP||"object"!=typeof c.data||null===c.data||Array.isArray(c.data))){c.data={...c.data,parentSessionId:a,parentSessionPath:d},f[b]=JSON.stringify(c);break}}(0,e.writeFileSync)(c,f.join("\n"))}catch{}}}catch{}for(let a of v){try{await (0,g.wW)(a)}catch{}await (0,g.hH)(a)?.shutdown()}for(let[a,b]of x){try{(0,e.unlinkSync)(b)}catch(a){if("ENOENT"!==a.code)throw a}(0,h.BR)(a),(0,h.j6)(b)}try{await (0,j.bA)(v)}catch(a){console.warn(`[pi-web] could not clear the sidebar state of deleted sessions: ${a instanceof Error?a.message:String(a)}`)}return(0,h.mD)(),{deleted:[...v],missing:d,running:w}}d()}catch(a){d(a)}})}};