@baique/pi-web-sky 0.1.56 → 0.1.57

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 (138) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +5 -5
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/react-loadable-manifest.json +2 -2
  5. package/.next/required-server-files.js +3 -2
  6. package/.next/required-server-files.json +3 -2
  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 +3 -3
  16. package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  17. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
  18. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  19. package/.next/server/app/api/agent/[id]/bash-output/route.js +2 -2
  20. package/.next/server/app/api/agent/[id]/events/route.js +1 -1
  21. package/.next/server/app/api/agent/[id]/route.js +1 -1
  22. package/.next/server/app/api/agent/new/route.js +1 -1
  23. package/.next/server/app/api/agent/running/route.js +1 -1
  24. package/.next/server/app/api/app-update/route.js +1 -1
  25. package/.next/server/app/api/board-assets/[...path]/route.js +1 -1
  26. package/.next/server/app/api/board-assets/route.js +1 -1
  27. package/.next/server/app/api/boards/[id]/add-session/route.js +1 -1
  28. package/.next/server/app/api/boards/[id]/reconcile/route.js +1 -1
  29. package/.next/server/app/api/boards/[id]/route.js +1 -1
  30. package/.next/server/app/api/boards/reorder/route.js +1 -1
  31. package/.next/server/app/api/boards/route.js +1 -1
  32. package/.next/server/app/api/cwd/validate/route.js +1 -1
  33. package/.next/server/app/api/default-cwd/route.js +1 -1
  34. package/.next/server/app/api/file-index/route.js +1 -1
  35. package/.next/server/app/api/files/[...path]/route.js +2 -2
  36. package/.next/server/app/api/mcp/route.js +1 -1
  37. package/.next/server/app/api/models/route.js +1 -1
  38. package/.next/server/app/api/plugins/route.js +1 -1
  39. package/.next/server/app/api/project-trust/route.js +1 -1
  40. package/.next/server/app/api/search/route.js +2 -2
  41. package/.next/server/app/api/sessions/[id]/auto-name/route.js +2 -2
  42. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  43. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +2 -2
  44. package/.next/server/app/api/sessions/[id]/export/route.js +2 -2
  45. package/.next/server/app/api/sessions/[id]/minimap/route.js +1 -1
  46. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  47. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  48. package/.next/server/app/api/sessions/[id]/todos/route.js +1 -1
  49. package/.next/server/app/api/sessions/route.js +1 -1
  50. package/.next/server/app/api/sessions/summary/route.js +1 -1
  51. package/.next/server/app/api/skills/install/route.js +1 -1
  52. package/.next/server/app/api/subagents/[id]/route.js +1 -1
  53. package/.next/server/app/api/subagents/profiles/route.js +1 -1
  54. package/.next/server/app/api/task-card-questions/[id]/answer/route.js +1 -1
  55. package/.next/server/app/api/task-card-questions/route.js +1 -1
  56. package/.next/server/app/api/task-cards/[id]/route.js +1 -1
  57. package/.next/server/app/api/task-cards/route.js +1 -1
  58. package/.next/server/app/api/task-cards/unbind/route.js +1 -1
  59. package/.next/server/app/api/task-scheduler/status/route.js +1 -1
  60. package/.next/server/app/api/tasks/[id]/assign-session/route.js +2 -12
  61. package/.next/server/app/api/tasks/[id]/board/route.js +1 -1
  62. package/.next/server/app/api/tasks/[id]/route.js +1 -1
  63. package/.next/server/app/api/tasks/reorder/route.js +2 -12
  64. package/.next/server/app/api/tasks/route.js +2 -12
  65. package/.next/server/app/api/worktrees/route.js +1 -1
  66. package/.next/server/app/index.html +1 -1
  67. package/.next/server/app/index.rsc +5 -5
  68. package/.next/server/app/index.segments/__PAGE__.segment.rsc +5 -5
  69. package/.next/server/app/index.segments/_full.segment.rsc +5 -5
  70. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  71. package/.next/server/app/page.js +10 -10
  72. package/.next/server/app/page_client-reference-manifest.js +1 -1
  73. package/.next/server/app-paths-manifest.json +5 -5
  74. package/.next/server/chunks/1937.js +14 -13
  75. package/.next/server/chunks/2524.js +2 -2
  76. package/.next/server/chunks/3500.js +1 -1
  77. package/.next/server/chunks/402.js +21 -10
  78. package/.next/server/chunks/4457.js +3 -13
  79. package/.next/server/chunks/542.js +8 -8
  80. package/.next/server/chunks/5794.js +1 -1
  81. package/.next/server/chunks/5940.js +1 -1
  82. package/.next/server/chunks/6429.js +4 -4
  83. package/.next/server/chunks/6525.js +18 -7
  84. package/.next/server/chunks/6583.js +12 -11
  85. package/.next/server/middleware-build-manifest.js +1 -1
  86. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  87. package/.next/server/pages/404.html +1 -1
  88. package/.next/server/pages/500.html +1 -1
  89. package/.next/static/chunks/752.bafff304e6b00987.js +1 -0
  90. package/.next/static/chunks/8088.39866dc5f1d15868.js +1 -0
  91. package/.next/static/chunks/app/{layout-87087b955e0c9507.js → layout-fae2b226b3c78448.js} +1 -1
  92. package/.next/static/chunks/app/page-d5af3bd535589daf.js +256 -0
  93. package/.next/static/chunks/{webpack-4de8e8dd9f2f3173.js → webpack-1ce35e1249cfd931.js} +1 -1
  94. package/.next/static/css/{c6d32b6031181be7.css → c7d127e07b1a786c.css} +1 -1
  95. package/.next/trace +8 -7
  96. package/.next/trace-build +1 -1
  97. package/lib/board-reconcile.test.mjs +26 -8
  98. package/lib/board-reconcile.ts +3 -1
  99. package/lib/board-store.test.mjs +2 -2
  100. package/lib/ime-guard.test.mjs +52 -0
  101. package/lib/ime-guard.ts +54 -0
  102. package/lib/rpc-manager.activity.test.mjs +223 -0
  103. package/lib/rpc-manager.test.mjs +22 -0
  104. package/lib/rpc-manager.title.test.mjs +152 -0
  105. package/lib/rpc-manager.ts +95 -8
  106. package/lib/session-activity.test.mjs +123 -0
  107. package/lib/session-activity.ts +77 -0
  108. package/lib/session-delete.test.mjs +45 -41
  109. package/lib/session-delete.ts +8 -34
  110. package/lib/session-index-scanner.test.mjs +364 -2
  111. package/lib/session-index-scanner.ts +162 -57
  112. package/lib/session-reader.noscan.test.mjs +371 -0
  113. package/lib/session-reader.project.test.mjs +30 -52
  114. package/lib/session-reader.test.mjs +2 -65
  115. package/lib/session-reader.ts +177 -213
  116. package/lib/session-scanner.test.mjs +151 -38
  117. package/lib/session-scanner.ts +140 -61
  118. package/lib/session-search.ts +6 -5
  119. package/lib/sqlite-db.test.mjs +26 -0
  120. package/lib/sqlite-db.ts +10 -1
  121. package/lib/subagent-runtime.ts +42 -0
  122. package/lib/subagent-session-title.test.mjs +120 -0
  123. package/lib/task-scheduler.test.mjs +27 -0
  124. package/lib/task-scheduler.ts +8 -1
  125. package/lib/task-store.activity.test.mjs +141 -0
  126. package/lib/task-store.meta-row.test.mjs +25 -5
  127. package/lib/task-store.partial-row.test.mjs +198 -0
  128. package/lib/task-store.subtree.test.mjs +172 -0
  129. package/lib/task-store.test.mjs +46 -20
  130. package/lib/task-store.ts +344 -68
  131. package/next.config.ts +3 -1
  132. package/package.json +1 -1
  133. package/.next/static/chunks/752.adce8bc3ebbaf4b6.js +0 -1
  134. package/.next/static/chunks/8088.0cad1ff2e09fd8ff.js +0 -1
  135. package/.next/static/chunks/app/page-efca6bf51a5f8ccb.js +0 -256
  136. /package/.next/static/{k8ZFqwz7d-bnK0ZiUVgCc → MPBMmQqmDG8zo8tM_bkDy}/_buildManifest.js +0 -0
  137. /package/.next/static/{k8ZFqwz7d-bnK0ZiUVgCc → MPBMmQqmDG8zo8tM_bkDy}/_ssgManifest.js +0 -0
  138. /package/lib/{subagent-isolation.test.mjs → worktree-isolation.test.mjs} +0 -0
@@ -1 +1 @@
1
- globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"27123":{"*":{"id":"81921","name":"*","chunks":[],"async":false}},"39247":{"*":{"id":"55100","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"35421","name":"*","chunks":[],"async":false}},"57788":{"*":{"id":"19102","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"60440","name":"*","chunks":[],"async":false}},"63450":{"*":{"id":"88549","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"82265","name":"*","chunks":[],"async":false}},"74581":{"*":{"id":"61335","name":"*","chunks":[],"async":false}},"78616":{"*":{"id":"84342","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"74661","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"70664","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/baique/work/pi-web-sky/node_modules/next/dist/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/esm/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/esm/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/esm/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/components/PwaRegistration.tsx":{"id":57788,"name":"*","chunks":["7177","static/chunks/app/layout-87087b955e0c9507.js"],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/font/google/target.css?{\"path\":\"app/layout.tsx\",\"import\":\"Noto_Sans_Mono\",\"arguments\":[{\"subsets\":[\"latin\",\"cyrillic\"],\"variable\":\"--font-noto-mono\",\"display\":\"swap\"}],\"variableName\":\"notoSansMono\"}":{"id":83683,"name":"*","chunks":["7177","static/chunks/app/layout-87087b955e0c9507.js"],"async":false},"/Users/baique/work/pi-web-sky/node_modules/katex/dist/katex.min.css":{"id":84559,"name":"*","chunks":["7177","static/chunks/app/layout-87087b955e0c9507.js"],"async":false},"/Users/baique/work/pi-web-sky/app/globals.css":{"id":66872,"name":"*","chunks":["7177","static/chunks/app/layout-87087b955e0c9507.js"],"async":false},"/Users/baique/work/pi-web-sky/app/settings.css":{"id":39979,"name":"*","chunks":["7177","static/chunks/app/layout-87087b955e0c9507.js"],"async":false},"/Users/baique/work/pi-web-sky/components/AppShell.tsx":{"id":63450,"name":"*","chunks":["7330","static/chunks/d3ac728e-7964f816a1ca64e5.js","5362","static/chunks/5362-7d57fb3b2e15c9a1.js","8974","static/chunks/app/page-efca6bf51a5f8ccb.js"],"async":false},"/Users/baique/work/pi-web-sky/hooks/useI18n.tsx":{"id":39247,"name":"*","chunks":["7330","static/chunks/d3ac728e-7964f816a1ca64e5.js","5362","static/chunks/5362-7d57fb3b2e15c9a1.js","8974","static/chunks/app/page-efca6bf51a5f8ccb.js"],"async":false}},"entryCSSFiles":{"/Users/baique/work/pi-web-sky/":[],"/Users/baique/work/pi-web-sky/app/layout":[{"inlined":false,"path":"static/css/88714c00e109ce28.css"},{"inlined":false,"path":"static/css/c6d32b6031181be7.css"},{"inlined":false,"path":"static/css/bb9361c7f832a89d.css"}],"/Users/baique/work/pi-web-sky/app/page":[{"inlined":false,"path":"static/css/46396d55066d14af.css"}]},"rscModuleMapping":{"27123":{"*":{"id":"95547","name":"*","chunks":[],"async":false}},"39247":{"*":{"id":"73884","name":"*","chunks":[],"async":false}},"39979":{"*":{"id":"77261","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"98099","name":"*","chunks":[],"async":false}},"57788":{"*":{"id":"81276","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"15098","name":"*","chunks":[],"async":false}},"63450":{"*":{"id":"35790","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"33859","name":"*","chunks":[],"async":false}},"66872":{"*":{"id":"82704","name":"*","chunks":[],"async":false}},"74581":{"*":{"id":"16237","name":"*","chunks":[],"async":false}},"78616":{"*":{"id":"47644","name":"*","chunks":[],"async":false}},"84559":{"*":{"id":"25319","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"36675","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"98562","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}};
1
+ globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"27123":{"*":{"id":"81921","name":"*","chunks":[],"async":false}},"39247":{"*":{"id":"55100","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"35421","name":"*","chunks":[],"async":false}},"57788":{"*":{"id":"19102","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"60440","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"82265","name":"*","chunks":[],"async":false}},"74581":{"*":{"id":"61335","name":"*","chunks":[],"async":false}},"78616":{"*":{"id":"84342","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"74661","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"70664","name":"*","chunks":[],"async":false}},"97290":{"*":{"id":"28229","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/baique/work/pi-web-sky/node_modules/next/dist/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":27123,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/esm/client/components/client-page.js":{"id":61304,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/esm/client/components/client-segment.js":{"id":78616,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":64777,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/esm/client/components/layout-router.js":{"id":57121,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":74581,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":90484,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":86869,"name":"*","chunks":[],"async":false},"/Users/baique/work/pi-web-sky/components/PwaRegistration.tsx":{"id":57788,"name":"*","chunks":["7177","static/chunks/app/layout-fae2b226b3c78448.js"],"async":false},"/Users/baique/work/pi-web-sky/node_modules/next/font/google/target.css?{\"path\":\"app/layout.tsx\",\"import\":\"Noto_Sans_Mono\",\"arguments\":[{\"subsets\":[\"latin\",\"cyrillic\"],\"variable\":\"--font-noto-mono\",\"display\":\"swap\"}],\"variableName\":\"notoSansMono\"}":{"id":83683,"name":"*","chunks":["7177","static/chunks/app/layout-fae2b226b3c78448.js"],"async":false},"/Users/baique/work/pi-web-sky/node_modules/katex/dist/katex.min.css":{"id":84559,"name":"*","chunks":["7177","static/chunks/app/layout-fae2b226b3c78448.js"],"async":false},"/Users/baique/work/pi-web-sky/app/globals.css":{"id":66872,"name":"*","chunks":["7177","static/chunks/app/layout-fae2b226b3c78448.js"],"async":false},"/Users/baique/work/pi-web-sky/app/settings.css":{"id":39979,"name":"*","chunks":["7177","static/chunks/app/layout-fae2b226b3c78448.js"],"async":false},"/Users/baique/work/pi-web-sky/components/AppShell.tsx":{"id":97290,"name":"*","chunks":["7330","static/chunks/d3ac728e-7964f816a1ca64e5.js","5362","static/chunks/5362-7d57fb3b2e15c9a1.js","8974","static/chunks/app/page-d5af3bd535589daf.js"],"async":false},"/Users/baique/work/pi-web-sky/hooks/useI18n.tsx":{"id":39247,"name":"*","chunks":["7330","static/chunks/d3ac728e-7964f816a1ca64e5.js","5362","static/chunks/5362-7d57fb3b2e15c9a1.js","8974","static/chunks/app/page-d5af3bd535589daf.js"],"async":false}},"entryCSSFiles":{"/Users/baique/work/pi-web-sky/":[],"/Users/baique/work/pi-web-sky/app/layout":[{"inlined":false,"path":"static/css/88714c00e109ce28.css"},{"inlined":false,"path":"static/css/c7d127e07b1a786c.css"},{"inlined":false,"path":"static/css/bb9361c7f832a89d.css"}],"/Users/baique/work/pi-web-sky/app/page":[{"inlined":false,"path":"static/css/46396d55066d14af.css"}]},"rscModuleMapping":{"27123":{"*":{"id":"95547","name":"*","chunks":[],"async":false}},"39247":{"*":{"id":"73884","name":"*","chunks":[],"async":false}},"39979":{"*":{"id":"77261","name":"*","chunks":[],"async":false}},"57121":{"*":{"id":"98099","name":"*","chunks":[],"async":false}},"57788":{"*":{"id":"81276","name":"*","chunks":[],"async":false}},"61304":{"*":{"id":"15098","name":"*","chunks":[],"async":false}},"64777":{"*":{"id":"33859","name":"*","chunks":[],"async":false}},"66872":{"*":{"id":"82704","name":"*","chunks":[],"async":false}},"74581":{"*":{"id":"16237","name":"*","chunks":[],"async":false}},"78616":{"*":{"id":"47644","name":"*","chunks":[],"async":false}},"84559":{"*":{"id":"25319","name":"*","chunks":[],"async":false}},"86869":{"*":{"id":"36675","name":"*","chunks":[],"async":false}},"90484":{"*":{"id":"98562","name":"*","chunks":[],"async":false}},"97290":{"*":{"id":"35790","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}};
@@ -27,8 +27,8 @@
27
27
  "/api/auth/all-providers/route": "app/api/auth/all-providers/route.js",
28
28
  "/api/agent/[id]/events/route": "app/api/agent/[id]/events/route.js",
29
29
  "/api/app-update/route": "app/api/app-update/route.js",
30
- "/api/agent/new/route": "app/api/agent/new/route.js",
31
30
  "/api/auth/api-key/[provider]/route": "app/api/auth/api-key/[provider]/route.js",
31
+ "/api/agent/new/route": "app/api/agent/new/route.js",
32
32
  "/api/auth/logout/[provider]/route": "app/api/auth/logout/[provider]/route.js",
33
33
  "/api/auth/providers/route": "app/api/auth/providers/route.js",
34
34
  "/api/auth/login/[provider]/route": "app/api/auth/login/[provider]/route.js",
@@ -39,8 +39,8 @@
39
39
  "/api/boards/[id]/route": "app/api/boards/[id]/route.js",
40
40
  "/api/boards/reorder/route": "app/api/boards/reorder/route.js",
41
41
  "/api/boards/route": "app/api/boards/route.js",
42
- "/api/models-config/route": "app/api/models-config/route.js",
43
42
  "/api/models-config/catalog/route": "app/api/models-config/catalog/route.js",
43
+ "/api/models-config/route": "app/api/models-config/route.js",
44
44
  "/api/models-config/discover/route": "app/api/models-config/discover/route.js",
45
45
  "/api/models-config/test/route": "app/api/models-config/test/route.js",
46
46
  "/api/models/route": "app/api/models/route.js",
@@ -55,12 +55,12 @@
55
55
  "/api/skills/check/route": "app/api/skills/check/route.js",
56
56
  "/api/skills/install/route": "app/api/skills/install/route.js",
57
57
  "/api/skills/route": "app/api/skills/route.js",
58
- "/api/subagents/[id]/route": "app/api/subagents/[id]/route.js",
59
- "/api/skills/search/route": "app/api/skills/search/route.js",
60
58
  "/api/skills/update/route": "app/api/skills/update/route.js",
59
+ "/api/skills/search/route": "app/api/skills/search/route.js",
60
+ "/api/subagents/[id]/route": "app/api/subagents/[id]/route.js",
61
+ "/api/subagents/profiles/route": "app/api/subagents/profiles/route.js",
61
62
  "/api/subagents/settings/route": "app/api/subagents/settings/route.js",
62
63
  "/api/task-card-questions/[id]/answer/route": "app/api/task-card-questions/[id]/answer/route.js",
63
- "/api/subagents/profiles/route": "app/api/subagents/profiles/route.js",
64
64
  "/api/task-card-questions/route": "app/api/task-card-questions/route.js",
65
65
  "/api/task-cards/unbind/route": "app/api/task-cards/unbind/route.js",
66
66
  "/api/task-scheduler/status/route": "app/api/task-scheduler/status/route.js",
@@ -1,7 +1,7 @@
1
- "use strict";exports.id=1937,exports.ids=[1937],exports.modules={47128:(a,b,c)=>{c.d(b,{BC:()=>k,dA:()=>i});var d=c(75384),e=c(65562),f=c(48817),g=c(90596);let h=new Map;async function i(a,b=!1){var c,g;let k,l,m=(0,d.v$)(a);if(!m)return;let n=(c=m.taskId??null,JSON.stringify([c,(k=(0,f.gN)(a)).map(a=>[a.id,a.sessionId??""]),c?(0,e.listTaskSessionIds)(c):[],c?j(c).map(a=>[a.sessionId,a.parentId]):[],k.flatMap(a=>(0,f.QA)(a.id).map(b=>[a.id,b.targetCardId,b.kind]))]));if(!b&&h.get(a)===n)return;let o=!!m.taskId,p=(0,f.gN)(a),q=new Set;if(o)for(let a of(0,e.listTaskSessionIds)(m.taskId))q.add(a);for(let a of p)a.sessionId&&q.add(a.sessionId);let r=new Map;if(o)for(let{sessionId:a,parentId:b}of j(m.taskId))q.add(a),r.set(a,b);await (g=a=>{let b=a.nodes,c=a.edges,d=Array.from(b.values()),e=new Set(p.map(a=>a.id)),g=[];for(let a of d){if(a?.type!=="task-card")continue;let b=a.data?.cardId;"string"==typeof b&&b&&(e.has(b)||g.push(a.id))}for(let a of g)for(let d of(b.delete(a),Array.from(c.values())))(d.source===a||d.target===a)&&c.delete(d.id);let h=new Set,i=new Map;for(let a of d){if(a?.type!=="session-card")continue;let b=a.data?.sessionId;b&&(h.add(b),!function(a){let b=a?.data?.cwd;return!!(a&&"string"==typeof b&&b.length>0)}(a)&&i.set(b,a))}let j=[];if(o)for(let[a,b]of i)q.has(a)||j.push(b.id);for(let a of j)for(let d of(b.delete(a),Array.from(c.values())))(d.source===a||d.target===a)&&c.delete(d.id);{let a=Array.from(b.values()),c=new Map(p.filter(a=>a.sessionId).map(a=>[a.sessionId,a]));for(let d of q){if(h.has(d))continue;let e=`session-${d}`,f=c.get(d),g=r.get(d),i=g?a.find(a=>a?.id===`session-${g}`):f?a.find(a=>a?.id===`task-${f.id}`):void 0,j=function(a,b){if(b?.position){let c=b.style?.width??380,d=b.position.x+c+24,e=b.position.y;if(!a.filter(a=>a?.type==="session-card").map(a=>({x:a.position?.x??0,y:a.position?.y??0,w:a.style?.width??340,h:a.style?.height??160})).some(a=>d<a.x+a.w+24&&d+340+24>a.x&&e<a.y+a.h+24&&e+160+24>a.y))return{x:d,y:e}}return function(a,b=340,c=160){let d=a.filter(a=>a?.type==="session-card").map(a=>({x:a.position?.x??0,y:a.position?.y??0,w:a.style?.width??b,h:a.style?.height??c})),e=(a,e)=>d.some(d=>a<d.x+d.w+24&&a+b+24>d.x&&e<d.y+d.h+24&&e+c+24>d.y),f=60,g=0;for(;g<2e3;){for(let a=0;a<4;a+=1){let c=60+a*(b+24);if(!e(c,f))return{x:c,y:f}}f+=c+24,g+=1}return{x:60,y:60}}(a,340,160)}(a,i);b.set(e,{id:e,type:"session-card",position:{x:j.x,y:j.y},style:{width:340,height:160},data:{sessionId:d,title:"",emoji:"\uD83D\uDCAC",projectName:"",messageCount:0,lastReply:"",phase:"idle",runningMs:0,endedAt:0,lastActivityAt:0,stale:!1,expanded:!1,cwd:"",taskId:"",w:340,h:160,expandedW:0,expandedH:0,collapsedW:0,collapsedH:0}}),a.push(b.get(e))}}let k=new Map;for(let a of Array.from(b.values()))a?.type==="task-card"&&a.data?.cardId&&k.set(a.data.cardId,a);let l=new Map;for(let a of Array.from(b.values()))a?.type==="session-card"&&a.data?.sessionId&&l.set(a.data.sessionId,a);let m=new Map;for(let a of Array.from(c.values())){if(!a.data?.execLink)continue;let b=a.source,c=m.get(b)??[];c.push({to:a.target,edgeId:a.id}),m.set(b,c)}for(let a of p){let b=k.get(a.id);if(!b)continue;let d=a.sessionId?l.get(a.sessionId):null,e=m.get(b.id)??[];for(let a of e)a.to!==(d?.id??null)&&c.delete(a.edgeId);if(!d||e.some(a=>a.to===d.id))continue;let f=`exec-${a.id}-${a.sessionId}`;c.set(f,{id:f,source:b.id,target:d.id,type:"default",data:{execLink:!0,cardId:a.id,sessionId:a.sessionId},markerEnd:{type:"arrowclosed"},style:{strokeWidth:1.5,stroke:"#3184f8",strokeDasharray:"6 4"}})}let n=new Map;for(let a of Array.from(c.values()))a.data?.forkLink&&a.source&&a.target&&n.set(`${a.source}->${a.target}`,a.id);let s=new Set;for(let[a,b]of r){let d=`session-${b}`,e=`session-${a}`;if(!l.has(b)||!l.has(a))continue;let f=`${d}->${e}`;s.add(f),n.has(f)||c.set(`fork-${b}-${a}`,{id:`fork-${b}-${a}`,source:d,target:e,type:"default",data:{forkLink:!0,parentId:b,sessionId:a},markerEnd:{type:"arrowclosed"},style:{strokeWidth:1.5,stroke:"#3184f8",strokeDasharray:"6 4"}})}for(let[a,b]of n)s.has(a)||c.delete(b);let t=new Map;for(let a of Array.from(c.values())){if(!a.data?.taskLink)continue;let b=a.source,c=a.target,d=a.data.taskLink;b&&c&&d&&t.set(`${b}->${c}:${d}`,a.id)}let u=new Set;for(let a of p){let b=k.get(a.id);if(b)for(let d of(0,f.QA)(a.id)){let a=k.get(d.targetCardId);if(!a)continue;let e=`${b.id}->${a.id}:${d.kind}`;if(u.add(e),!t.has(e)){let e=`link-${b.id}-${a.id}-${d.kind}`;c.set(e,{id:e,source:b.id,target:a.id,type:"default",data:{taskLink:d.kind},markerEnd:{type:"arrowclosed"},style:{strokeWidth:1.5,stroke:"#f59e0b"}})}}}for(let[a,b]of t)u.has(a)||c.delete(b)},!(l=globalThis.__yjsBoard)?Promise.resolve():l.mutateBoard(a,g)),h.set(a,n)}function j(a){return(0,g.Lf)().prepare(`SELECT f.session_id AS sessionId, f.parent_id AS parentId
1
+ "use strict";exports.id=1937,exports.ids=[1937],exports.modules={47128:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{BC:()=>l,dA:()=>j});var e=c(75384),f=c(65562),g=c(48817),h=c(90596),i=a([f]);f=(i.then?(await i)():i)[0];let m=new Map;async function j(a,b=!1){var c,d;let h,i,l=(0,e.v$)(a);if(!l)return;let n=(c=l.taskId??null,h=(0,g.gN)(a),JSON.stringify([c,h.map(a=>[a.id,a.sessionId??""]),c?(0,f.gQ)(c):[],c?k(c).map(a=>[a.sessionId,a.parentId]):[],h.flatMap(a=>(0,g.QA)(a.id).map(b=>[a.id,b.targetCardId,b.kind]))]));if(!b&&m.get(a)===n)return;let o=!!l.taskId,p=(0,g.gN)(a),q=new Set;if(o)for(let a of(0,f.gQ)(l.taskId))q.add(a);for(let a of p)a.sessionId&&q.add(a.sessionId);let r=new Map;if(o)for(let{sessionId:a,parentId:b}of k(l.taskId))q.add(a),r.set(a,b);await (d=a=>{let b=a.nodes,c=a.edges,d=Array.from(b.values()),e=new Set(p.map(a=>a.id)),f=[];for(let a of d){if(a?.type!=="task-card")continue;let b=a.data?.cardId;"string"==typeof b&&b&&(e.has(b)||f.push(a.id))}for(let a of f)for(let d of(b.delete(a),Array.from(c.values())))(d.source===a||d.target===a)&&c.delete(d.id);let h=new Set,i=new Map;for(let a of d){if(a?.type!=="session-card")continue;let b=a.data?.sessionId;b&&(h.add(b),!function(a){let b=a?.data?.cwd;return!!(a&&"string"==typeof b&&b.length>0)}(a)&&i.set(b,a))}let j=[];if(o)for(let[a,b]of i)q.has(a)||j.push(b.id);for(let a of j)for(let d of(b.delete(a),Array.from(c.values())))(d.source===a||d.target===a)&&c.delete(d.id);{let a=Array.from(b.values()),c=new Map(p.filter(a=>a.sessionId).map(a=>[a.sessionId,a]));for(let d of q){if(h.has(d))continue;let e=`session-${d}`,f=c.get(d),g=r.get(d),i=g?a.find(a=>a?.id===`session-${g}`):f?a.find(a=>a?.id===`task-${f.id}`):void 0,j=function(a,b){if(b?.position){let c=b.style?.width??380,d=b.position.x+c+24,e=b.position.y;if(!a.filter(a=>a?.type==="session-card").map(a=>({x:a.position?.x??0,y:a.position?.y??0,w:a.style?.width??340,h:a.style?.height??160})).some(a=>d<a.x+a.w+24&&d+340+24>a.x&&e<a.y+a.h+24&&e+160+24>a.y))return{x:d,y:e}}return function(a,b=340,c=160){let d=a.filter(a=>a?.type==="session-card").map(a=>({x:a.position?.x??0,y:a.position?.y??0,w:a.style?.width??b,h:a.style?.height??c})),e=(a,e)=>d.some(d=>a<d.x+d.w+24&&a+b+24>d.x&&e<d.y+d.h+24&&e+c+24>d.y),f=60,g=0;for(;g<2e3;){for(let a=0;a<4;a+=1){let c=60+a*(b+24);if(!e(c,f))return{x:c,y:f}}f+=c+24,g+=1}return{x:60,y:60}}(a,340,160)}(a,i);b.set(e,{id:e,type:"session-card",position:{x:j.x,y:j.y},style:{width:340,height:160},data:{sessionId:d,title:"",emoji:"\uD83D\uDCAC",projectName:"",messageCount:0,lastReply:"",phase:"idle",runningMs:0,endedAt:0,lastActivityAt:0,stale:!1,expanded:!1,cwd:"",taskId:"",w:340,h:160,expandedW:0,expandedH:0,collapsedW:0,collapsedH:0}}),a.push(b.get(e))}}let k=new Map;for(let a of Array.from(b.values()))a?.type==="task-card"&&a.data?.cardId&&k.set(a.data.cardId,a);let l=new Map;for(let a of Array.from(b.values()))a?.type==="session-card"&&a.data?.sessionId&&l.set(a.data.sessionId,a);let m=new Map;for(let a of Array.from(c.values())){if(!a.data?.execLink)continue;let b=a.source,c=m.get(b)??[];c.push({to:a.target,edgeId:a.id}),m.set(b,c)}for(let a of p){let b=k.get(a.id);if(!b)continue;let d=a.sessionId?l.get(a.sessionId):null,e=m.get(b.id)??[];for(let a of e)a.to!==(d?.id??null)&&c.delete(a.edgeId);if(!d||e.some(a=>a.to===d.id))continue;let f=`exec-${a.id}-${a.sessionId}`;c.set(f,{id:f,source:b.id,target:d.id,type:"default",data:{execLink:!0,cardId:a.id,sessionId:a.sessionId},markerEnd:{type:"arrowclosed"},style:{strokeWidth:1.5,stroke:"#3184f8",strokeDasharray:"6 4"}})}let n=new Map;for(let a of Array.from(c.values()))a.data?.forkLink&&a.source&&a.target&&n.set(`${a.source}->${a.target}`,a.id);let s=new Set;for(let[a,b]of r){let d=`session-${b}`,e=`session-${a}`;if(!l.has(b)||!l.has(a))continue;let f=`${d}->${e}`;s.add(f),n.has(f)||c.set(`fork-${b}-${a}`,{id:`fork-${b}-${a}`,source:d,target:e,type:"default",data:{forkLink:!0,parentId:b,sessionId:a},markerEnd:{type:"arrowclosed"},style:{strokeWidth:1.5,stroke:"#3184f8",strokeDasharray:"6 4"}})}for(let[a,b]of n)s.has(a)||c.delete(b);let t=new Map;for(let a of Array.from(c.values())){if(!a.data?.taskLink)continue;let b=a.source,c=a.target,d=a.data.taskLink;b&&c&&d&&t.set(`${b}->${c}:${d}`,a.id)}let u=new Set;for(let a of p){let b=k.get(a.id);if(b)for(let d of(0,g.QA)(a.id)){let a=k.get(d.targetCardId);if(!a)continue;let e=`${b.id}->${a.id}:${d.kind}`;if(u.add(e),!t.has(e)){let e=`link-${b.id}-${a.id}-${d.kind}`;c.set(e,{id:e,source:b.id,target:a.id,type:"default",data:{taskLink:d.kind},markerEnd:{type:"arrowclosed"},style:{strokeWidth:1.5,stroke:"#f59e0b"}})}}}for(let[a,b]of t)u.has(a)||c.delete(b)},!(i=globalThis.__yjsBoard)?Promise.resolve():i.mutateBoard(a,d)),m.set(a,n)}function k(a){return(0,h.Lf)().prepare(`SELECT f.session_id AS sessionId, f.parent_id AS parentId
2
2
  FROM session_meta f
3
3
  JOIN session_meta s ON s.session_id = f.parent_id
4
- WHERE f.parent_id IS NOT NULL AND s.task_id = ?`).all(a)}async function k(a){let b=(0,g.Lf)().prepare("SELECT task_id AS taskId FROM session_meta WHERE session_id = ? AND task_id IS NOT NULL").get(a);if(!b?.taskId)return;let c=(0,g.Lf)().prepare("SELECT id FROM boards WHERE task_id = ?").get(b.taskId);c?.id&&await i(c.id)}},48817:(a,b,c)=>{c.d(b,{$j:()=>r,BH:()=>t,CU:()=>s,Im:()=>q,Kg:()=>x,O7:()=>u,QA:()=>n,XJ:()=>k,gN:()=>l,hG:()=>w,uZ:()=>p,w0:()=>m});var d=c(55511),e=c(90596);let f=new Set(["draft","todo"]),g=new Set(["not_started","running","review","done","failed","abandoned","waiting_reply"]);function h(a){return{...a,useWorktree:1===a.useWorktree,attachments:JSON.parse(a.attachments)}}let i="id, board_id AS boardId, project_key AS projectKey, number, name, description, ready_status AS readyStatus, exec_status AS execStatus, priority, due, attachments, cwd, use_worktree AS useWorktree, max_retries AS maxRetries, retry_count AS retryCount, session_id AS sessionId, dispatch_token AS dispatchToken, created, updated";function j(a){return(0,e.Lf)().prepare(`SELECT ${i} FROM task_cards WHERE id = ?`).get(a)}function k(a){let b=j(a);return b?h(b):void 0}function l(a){return(0,e.Lf)().prepare(`SELECT ${i} FROM task_cards WHERE board_id = ? ORDER BY number`).all(a).map(h)}function m(a,b){let c=(0,e.Lf)(),d=j(a);if(!d)return null;let i=[],k=[],l=(a,b)=>{i.push(`${a} = ?`),k.push(b)};if(void 0!==b.name){let a=b.name.trim();if(!a)throw Error("name must not be empty");l("name",a)}if(void 0!==b.description&&l("description",b.description),void 0!==b.readyStatus){var m=b.readyStatus;if(void 0!==m&&!f.has(m))throw Error(`invalid readyStatus: ${String(m)}`);l("ready_status",b.readyStatus)}if(void 0!==b.execStatus){var n=b.execStatus;if(void 0!==n&&!g.has(n))throw Error(`invalid execStatus: ${String(n)}`);l("exec_status",b.execStatus)}return(void 0!==b.priority&&l("priority",b.priority),void 0!==b.due&&l("due",b.due),void 0!==b.attachments&&l("attachments",JSON.stringify(b.attachments)),void 0!==b.cwd&&l("cwd",b.cwd),void 0!==b.useWorktree&&l("use_worktree",+!!b.useWorktree),void 0!==b.maxRetries&&l("max_retries",b.maxRetries),void 0!==b.sessionId&&l("session_id",b.sessionId),void 0!==b.retryCount&&l("retry_count",b.retryCount),0===i.length)?h(d):(l("updated",Date.now()),c.prepare(`UPDATE task_cards SET ${i.join(", ")} WHERE id = ?`).run(...k,a),h(j(a)))}function n(a){return(0,e.Lf)().prepare("SELECT id, card_id AS cardId, target_card_id AS targetCardId, kind, created FROM task_card_links WHERE card_id = ? ORDER BY created, rowid").all(a)}function o(a){for(let b of n(a.id)){if("prerequisite"!==b.kind)continue;let a=k(b.targetCardId);if(a&&"done"!==a.execStatus)return!1}return!0}function p(){return(0,e.Lf)().prepare(`SELECT ${i} FROM task_cards
4
+ WHERE f.parent_id IS NOT NULL AND s.task_id = ?`).all(a)}async function l(a){let b=(0,h.Lf)().prepare("SELECT task_id AS taskId FROM session_meta WHERE session_id = ? AND task_id IS NOT NULL").get(a);if(!b?.taskId)return;let c=(0,h.Lf)().prepare("SELECT id FROM boards WHERE task_id = ?").get(b.taskId);c?.id&&await j(c.id)}d()}catch(a){d(a)}})},48817:(a,b,c)=>{c.d(b,{$j:()=>r,BH:()=>t,CU:()=>s,Im:()=>q,Kg:()=>x,O7:()=>u,QA:()=>n,XJ:()=>k,gN:()=>l,hG:()=>w,uZ:()=>p,w0:()=>m});var d=c(55511),e=c(90596);let f=new Set(["draft","todo"]),g=new Set(["not_started","running","review","done","failed","abandoned","waiting_reply"]);function h(a){return{...a,useWorktree:1===a.useWorktree,attachments:JSON.parse(a.attachments)}}let i="id, board_id AS boardId, project_key AS projectKey, number, name, description, ready_status AS readyStatus, exec_status AS execStatus, priority, due, attachments, cwd, use_worktree AS useWorktree, max_retries AS maxRetries, retry_count AS retryCount, session_id AS sessionId, dispatch_token AS dispatchToken, created, updated";function j(a){return(0,e.Lf)().prepare(`SELECT ${i} FROM task_cards WHERE id = ?`).get(a)}function k(a){let b=j(a);return b?h(b):void 0}function l(a){return(0,e.Lf)().prepare(`SELECT ${i} FROM task_cards WHERE board_id = ? ORDER BY number`).all(a).map(h)}function m(a,b){let c=(0,e.Lf)(),d=j(a);if(!d)return null;let i=[],k=[],l=(a,b)=>{i.push(`${a} = ?`),k.push(b)};if(void 0!==b.name){let a=b.name.trim();if(!a)throw Error("name must not be empty");l("name",a)}if(void 0!==b.description&&l("description",b.description),void 0!==b.readyStatus){var m=b.readyStatus;if(void 0!==m&&!f.has(m))throw Error(`invalid readyStatus: ${String(m)}`);l("ready_status",b.readyStatus)}if(void 0!==b.execStatus){var n=b.execStatus;if(void 0!==n&&!g.has(n))throw Error(`invalid execStatus: ${String(n)}`);l("exec_status",b.execStatus)}return(void 0!==b.priority&&l("priority",b.priority),void 0!==b.due&&l("due",b.due),void 0!==b.attachments&&l("attachments",JSON.stringify(b.attachments)),void 0!==b.cwd&&l("cwd",b.cwd),void 0!==b.useWorktree&&l("use_worktree",+!!b.useWorktree),void 0!==b.maxRetries&&l("max_retries",b.maxRetries),void 0!==b.sessionId&&l("session_id",b.sessionId),void 0!==b.retryCount&&l("retry_count",b.retryCount),0===i.length)?h(d):(l("updated",Date.now()),c.prepare(`UPDATE task_cards SET ${i.join(", ")} WHERE id = ?`).run(...k,a),h(j(a)))}function n(a){return(0,e.Lf)().prepare("SELECT id, card_id AS cardId, target_card_id AS targetCardId, kind, created FROM task_card_links WHERE card_id = ? ORDER BY created, rowid").all(a)}function o(a){for(let b of n(a.id)){if("prerequisite"!==b.kind)continue;let a=k(b.targetCardId);if(a&&"done"!==a.execStatus)return!1}return!0}function p(){return(0,e.Lf)().prepare(`SELECT ${i} FROM task_cards
5
5
  WHERE ready_status = 'todo' AND (exec_status = 'not_started' OR (exec_status = 'failed' AND retry_count < max_retries))
6
6
  AND dispatch_token IS NULL
7
7
  ORDER BY priority DESC, number`).all().map(h).filter(o)}function q(a,b){return Number((0,e.Lf)().prepare(`UPDATE task_cards SET dispatch_token = ?1, updated = ?2
@@ -13,14 +13,15 @@
13
13
  JOIN task_cards c ON c.id = q.card_id
14
14
  WHERE q.status = 'answered' AND c.exec_status = 'waiting_reply'
15
15
  AND q.id = (SELECT q2.id FROM task_card_questions q2 WHERE q2.card_id = q.card_id AND q2.status='answered' ORDER BY q2.answered DESC, q2.created DESC LIMIT 1)
16
- ORDER BY q.answered`).all().map(v)}},65562:(a,b,c)=>{c.d(b,{YH:()=>h,listPinnedTaskSessionIds:()=>g,listTaskSessionIds:()=>f,mE:()=>i}),c(55511);var d=c(90596);function e(){try{c(69453).mD()}catch{}}function f(a){return(0,d.Lf)().prepare("SELECT session_id FROM session_meta WHERE task_id = ? ORDER BY pinned DESC, updated DESC, rowid DESC").all(a).map(a=>a.session_id)}function g(a){return(0,d.Lf)().prepare("SELECT session_id FROM session_meta WHERE task_id = ? AND pinned = 1").all(a).map(a=>a.session_id)}function h(a,b){(0,d.Lf)().prepare(`INSERT INTO session_meta
17
- (session_id, task_id, updated, pinned, path, cwd, project_key, title, first_message, parent_id, created, modified)
18
- VALUES (?, NULL, ?, 0, ?, ?, ?, ?, ?, ?, ?, ?)
19
- ON CONFLICT(session_id) DO UPDATE SET
20
- path = excluded.path,
21
- cwd = excluded.cwd,
22
- project_key = excluded.project_key,
23
- first_message = excluded.first_message,
24
- parent_id = excluded.parent_id,
25
- created = excluded.created,
26
- modified = excluded.modified`).run(a,Date.now(),b.path,b.cwd,b.projectKey,b.title??null,b.firstMessage??null,b.parentId??null,Date.now(),Date.now()),e()}function i(a,b){let c=(0,d.Lf)();if(!(0,d.Lf)().prepare("SELECT id, project_key AS projectKey, name, created, updated, pinned, sort_order AS sortOrder FROM tasks WHERE id = ?").get(b))return!1;let f=Date.now();c.exec("BEGIN");try{c.prepare("INSERT INTO session_meta (session_id, task_id, updated) VALUES (?, ?, ?) ON CONFLICT(session_id) DO UPDATE SET task_id = excluded.task_id, updated = excluded.updated").run(a,b,f),c.prepare("UPDATE tasks SET updated = ? WHERE id = ?").run(f,b),c.exec("COMMIT")}catch(a){throw c.exec("ROLLBACK"),a}return e(),!0}c(75384)},69453:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{O8:()=>w,mD:()=>s,os:()=>v});var e=c(75430),f=c(29021),g=c(79748),h=c(33873),i=c(90596),j=c(7535),k=c(7561),l=c(88002),m=c(9210),n=c(16525),o=a([e,m,n]);async function p(a){let b=[...new Set(a.map(a=>a.cwd).filter(Boolean))],c=new Map;await Promise.all(b.map(async a=>{c.set(a,await (0,l.KI)(a))}));let d=new Set;try{let a=(0,i.Lf)().prepare("SELECT session_id FROM session_meta WHERE pinned = 1").all();d=new Set(a.map(a=>a.session_id))}catch{}return a.map(a=>{let b=a.cwd?c.get(a.cwd):void 0,e=b?.projectRoot??a.cwd;return{...a,projectRoot:e,projectKey:(0,j.z)(e),...b?.branch?{branch:b.branch}:{},...b?.isWorktree?{isWorktree:!0}:{},...b?.isWorktree&&b.branch?{worktreeBranch:b.branch}:{},...d.has(a.id)?{pinned:!0}:{}}})}async function q(){let a=await m.X_.scan(),b=new Map;for(let c of a)b.set((0,k.$)(c.path),c.id);let c=a.map(a=>(w(a.id,a.path),{path:a.path,id:a.id,cwd:a.cwd,name:a.name,created:a.created.toISOString(),modified:a.modified.toISOString(),messageCount:0,firstMessage:a.firstMessage||"(no messages)",lastReply:a.lastReply||"",parentSessionId:a.parentSessionPath?b.get((0,k.$)(a.parentSessionPath)):void 0,transient:!1}));return p(c)}async function r(a={}){a.force&&s();let b=globalThis.__piSessionListGeneration??0;if(globalThis.__piSessionListCache&&Date.now()-globalThis.__piSessionListCache.ts<x)return globalThis.__piSessionListCache.data;if(globalThis.__piSessionListPromise&&globalThis.__piSessionListPromiseGeneration===b)return globalThis.__piSessionListPromise;let c=q().then(a=>(globalThis.__piSessionListGeneration??0)!==b?r():(globalThis.__piSessionListCache={data:a,ts:Date.now()},a)).finally(()=>{globalThis.__piSessionListPromise===c&&(globalThis.__piSessionListPromise=void 0,globalThis.__piSessionListPromiseGeneration=void 0)});return globalThis.__piSessionListPromise=c,globalThis.__piSessionListPromiseGeneration=b,c}[e,m,n]=o.then?(await o)():o;let x=3e5;function s(){globalThis.__piSessionListGeneration=(globalThis.__piSessionListGeneration??0)+1,globalThis.__piSessionListCache=void 0}function t(){return globalThis.__piSessionPathCache||(globalThis.__piSessionPathCache=new Map),globalThis.__piSessionPathCache}async function u(a){let b,c=(0,h.join)((0,e.getAgentDir)(),"sessions");if(!a||!(0,f.existsSync)(c))return null;let d=`_${a}.jsonl`;try{b=await (0,g.readdir)(c,{withFileTypes:!0})}catch{return null}for(let e of b){let b;if(!e.isDirectory()&&!e.isSymbolicLink())continue;let i=(0,h.join)(c,e.name);try{b=await (0,g.readdir)(i)}catch{continue}let j=b.find(a=>a.endsWith(d));if(!j)continue;let k=(0,h.join)(i,j);try{if(function(a){let b=(0,f.openSync)(a,"r");try{let a=[],c=0,d=!1;for(;c<65536&&!d;){let e=Buffer.allocUnsafe(Math.min(4096,65536-c)),g=(0,f.readSync)(b,e,0,e.length,c);if(0===g)break;let h=e.subarray(0,g),i=h.indexOf(10);a.push(-1===i?h:h.subarray(0,i)),c+=g,d=-1!==i}if(!d&&c>=65536)return null;let e=Buffer.concat(a).toString("utf8").trimEnd();if(!e)return null;try{let a=JSON.parse(e);return"session"===a.type?a:null}catch{return null}}finally{(0,f.closeSync)(b)}}(k)?.id===a)return k}catch{}}return null}async function v(a){let b=t().get(a);if(b)return b;let c=await u(a);return c?(w(a,c),c):(await r(),t().get(a)??null)}function w(a,b){let c=(0,h.normalize)(b),d=(0,k.$)(c),e=t(),f=(globalThis.__piPathToSessionIdCache||(globalThis.__piPathToSessionIdCache=new Map),globalThis.__piPathToSessionIdCache),g=e.get(a),i=g?(0,k.$)(g):void 0,j=f.get(d),l=j?e.get(j):void 0;i&&i!==d&&f.get(i)===a&&f.delete(i),j&&j!==a&&l&&(0,k.$)(l)===d&&e.delete(j),e.set(a,c),f.set(d,a)}d()}catch(a){d(a)}})},75384:(a,b,c)=>{c.d(b,{v$:()=>f}),c(55511);var d=c(90596);let e="__running__";function f(a){if(a===e)return{id:e,projectKey:"",name:"running",isSystem:!0,taskId:null,sortOrder:0,created:0,updated:0};let b=(0,d.Lf)().prepare("SELECT id, project_key AS projectKey, name, is_system AS isSystem, task_id AS taskId, sort_order AS sortOrder, created, updated FROM boards WHERE id = ?").get(a);return b?{id:b.id,projectKey:b.projectKey,name:b.name,isSystem:1===b.isSystem,taskId:b.taskId,sortOrder:b.sortOrder,created:b.created,updated:b.updated}:void 0}c(48817)},85158:(a,b,c)=>{c.d(b,{U4:()=>j,dp:()=>f,oT:()=>k,zZ:()=>g});var d=c(55511),e=c(90596);let f=3e4;function g(){return globalThis.__piWebInstanceId||(globalThis.__piWebInstanceId=(0,d.randomUUID)()),globalThis.__piWebInstanceId}function h(){return Date.now()}function i(){return(0,e.Lf)().prepare("SELECT id, instance_id, registered_at, heartbeat FROM scheduler_leader WHERE id = 1").get()}function j(a){let b=(0,e.Lf)(),c=h(),d=i();return d?d.instance_id===a?Number(b.prepare("UPDATE scheduler_leader SET heartbeat = ? WHERE id = 1 AND instance_id = ?").run(c,a).changes)>0:!(h()-d.heartbeat<f)&&Number(b.prepare("UPDATE scheduler_leader SET instance_id = ?, registered_at = ?, heartbeat = ? WHERE id = 1 AND instance_id = ? AND heartbeat = ?").run(a,c,c,d.instance_id,d.heartbeat).changes)>0:Number(b.prepare("INSERT INTO scheduler_leader (id, instance_id, registered_at, heartbeat) VALUES (1, ?, ?, ?)").run(a,c,c).changes)>0}function k(){let a=i();return!!a&&a.instance_id===g()&&h()-a.heartbeat<f}}};
16
+ ORDER BY q.answered`).all().map(v)}},65562:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Bm:()=>q,HO:()=>t,YH:()=>n,YZ:()=>s,gQ:()=>k,l6:()=>m,listPinnedTaskSessionIds:()=>l,mE:()=>p,xE:()=>r}),c(55511);var e=c(90596);c(75384);var f=c(7535),g=c(9210),h=c(88002),i=a([g]);function j(){try{c(69453).mD()}catch{}}function k(a){return(0,e.Lf)().prepare("SELECT session_id FROM session_meta WHERE task_id = ? ORDER BY pinned DESC, updated DESC, rowid DESC").all(a).map(a=>a.session_id)}function l(a){return(0,e.Lf)().prepare("SELECT session_id FROM session_meta WHERE task_id = ? AND pinned = 1").all(a).map(a=>a.session_id)}function m(a){let b=(0,e.Lf)().prepare("SELECT task_id FROM session_meta WHERE session_id = ?").get(a);return b?.task_id??null}function n(a,b){(0,e.Lf)().prepare(`INSERT INTO session_meta
17
+ (session_id, task_id, updated, pinned, path, cwd, project_key, title, first_message, parent_id, created, modified, last_reply)
18
+ VALUES (?, ?, ?, 0, ?, ?, ?, ?, ?, ?, ?, ?, NULL)
19
+ ON CONFLICT(session_id) DO UPDATE SET
20
+ path = excluded.path,
21
+ cwd = excluded.cwd,
22
+ project_key = excluded.project_key,
23
+ -- first_message 只补空:调用方不传(undefined)时不再把已有的首条消息擦成 NULL。
24
+ first_message = COALESCE(session_meta.first_message, excluded.first_message),
25
+ parent_id = excluded.parent_id,
26
+ created = excluded.created,
27
+ modified = excluded.modified`).run(a,b.taskId??null,Date.now(),b.path,b.cwd,b.projectKey,b.title??null,b.firstMessage??null,b.parentId??null,Date.now(),Date.now()),j()}async function o(a){if((0,e.Lf)().prepare("SELECT 1 FROM session_meta WHERE session_id = ?").get(a))return!0;let{resolveSessionPath:b,resolveSessionIdByPath:d}=await Promise.resolve().then(c.bind(c,69453)),i=await b(a);if(!i)return console.error(`[pi-web] 会话行补建失败:找不到会话文件 session=${a}`),!1;let j=(0,g.GL)(i);if(!j)return console.error(`[pi-web] 会话行补建失败:会话文件无有效 header session=${a} path=${i}`),!1;let k=await (0,h.KI)(j.cwd),l=j.parentSessionPath?await d(j.parentSessionPath)??void 0:void 0;return n(a,{path:i,cwd:j.cwd,projectKey:(0,f.z)(k?.projectRoot??j.cwd),parentId:l,firstMessage:j.firstMessage||void 0}),!0}async function p(a,b){let c=(0,e.Lf)();if(!(0,e.Lf)().prepare("SELECT id, project_key AS projectKey, name, created, updated, pinned, sort_order AS sortOrder FROM tasks WHERE id = ?").get(b)||!await o(a))return!1;if(function(a,b){let c=new Map,d=new Map;for(let a of(0,e.Lf)().prepare("SELECT session_id, parent_id, task_id FROM session_meta").all())c.set(a.session_id,a.parent_id),d.set(a.session_id,a.task_id);let f=new Set([a]),g=c.get(a)??null;for(;g&&!f.has(g);){f.add(g);let a=d.get(g)??null;if(null!==a&&a!==b)return!0;g=c.get(g)??null}return!1}(a,b))return console.error(`[pi-web] 归属被拒绝:祖先属于其它任务 session=${a} task=${b}`),!1;let d=Date.now();c.exec("BEGIN");try{c.prepare("UPDATE session_meta SET task_id = ?, updated = ? WHERE session_id = ?").run(b,d,a),c.prepare("UPDATE tasks SET updated = ? WHERE id = ?").run(d,b),c.exec("COMMIT")}catch(a){throw c.exec("ROLLBACK"),a}return j(),!0}async function q(a,b){await o(a)&&((0,e.Lf)().prepare("UPDATE session_meta SET title = ?, updated = ? WHERE session_id = ?").run(b,Date.now(),a),j())}function r(a,b=Date.now()){(0,e.Lf)().prepare("UPDATE session_meta SET modified = ? WHERE session_id = ?").run(b,a),j()}function s(a,b){let c=b.lastReply.trim();if(!c)return void r(a,b.at);let d=c.length>4e3?c.slice(0,4e3):c;(0,e.Lf)().prepare("UPDATE session_meta SET last_reply = ?, modified = ? WHERE session_id = ?").run(d,b.at,a),j()}function t(a,b){let c=b.trim();c&&((0,e.Lf)().prepare("UPDATE session_meta SET first_message = ? WHERE session_id = ? AND (first_message IS NULL OR first_message = '')").run(c,a),j())}g=(i.then?(await i)():i)[0],d()}catch(a){d(a)}})},69453:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{O8:()=>t,mD:()=>n,resolveSessionIdByPath:()=>s,resolveSessionPath:()=>r});var e=c(75430),f=c(29021),g=c(79748),h=c(33873),i=c(90596);c(7535);var j=c(7561);c(88002);var k=c(9210),l=c(16525),m=a([e,k,l]);function n(){globalThis.__piSessionListGeneration=(globalThis.__piSessionListGeneration??0)+1}function o(){return globalThis.__piSessionPathCache||(globalThis.__piSessionPathCache=new Map),globalThis.__piSessionPathCache}function p(){return globalThis.__piPathToSessionIdCache||(globalThis.__piPathToSessionIdCache=new Map),globalThis.__piPathToSessionIdCache}async function q(a){let b,c=(0,h.join)((0,e.getAgentDir)(),"sessions");if(!a||!(0,f.existsSync)(c))return null;let d=`_${a}.jsonl`;try{b=await (0,g.readdir)(c,{withFileTypes:!0})}catch{return null}for(let e of b){let b;if(!e.isDirectory()&&!e.isSymbolicLink())continue;let i=(0,h.join)(c,e.name);try{b=await (0,g.readdir)(i)}catch{continue}let j=b.find(a=>a.endsWith(d));if(!j)continue;let k=(0,h.join)(i,j);try{if(function(a){let b=(0,f.openSync)(a,"r");try{let a=[],c=0,d=!1;for(;c<65536&&!d;){let e=Buffer.allocUnsafe(Math.min(4096,65536-c)),g=(0,f.readSync)(b,e,0,e.length,c);if(0===g)break;let h=e.subarray(0,g),i=h.indexOf(10);a.push(-1===i?h:h.subarray(0,i)),c+=g,d=-1!==i}if(!d&&c>=65536)return null;let e=Buffer.concat(a).toString("utf8").trimEnd();if(!e)return null;try{let a=JSON.parse(e);return"session"===a.type?a:null}catch{return null}}finally{(0,f.closeSync)(b)}}(k)?.id===a)return k}catch{}}return null}async function r(a){let b=o().get(a);if(b)return b;try{let b=(0,i.Lf)().prepare("SELECT path FROM session_meta WHERE session_id = ?").get(a);if(b?.path&&(0,f.existsSync)(b.path))return t(a,b.path),b.path}catch{}let c=await q(a);return c?(t(a,c),c):null}async function s(a){let b=(0,j.$)(a),c=p().get(b);if(c)return c;try{let c=(0,i.Lf)(),d=c.prepare("SELECT session_id, path FROM session_meta WHERE path = ?").get(a);if(d?.path)return t(d.session_id,d.path),d.session_id;let e=(0,h.basename)(a);if(e){for(let a of c.prepare("SELECT session_id, path FROM session_meta WHERE path LIKE ?").all(`%${e}`))if(a.path&&(0,j.$)(a.path)===b)return t(a.session_id,a.path),a.session_id}}catch{}}function t(a,b){let c=(0,h.normalize)(b),d=(0,j.$)(c),e=o(),f=p(),g=e.get(a),i=g?(0,j.$)(g):void 0,k=f.get(d),l=k?e.get(k):void 0;i&&i!==d&&f.get(i)===a&&f.delete(i),k&&k!==a&&l&&(0,j.$)(l)===d&&e.delete(k),e.set(a,c),f.set(d,a)}[e,k,l]=m.then?(await m)():m,d()}catch(a){d(a)}})},75384:(a,b,c)=>{c.d(b,{v$:()=>f}),c(55511);var d=c(90596);let e="__running__";function f(a){if(a===e)return{id:e,projectKey:"",name:"running",isSystem:!0,taskId:null,sortOrder:0,created:0,updated:0};let b=(0,d.Lf)().prepare("SELECT id, project_key AS projectKey, name, is_system AS isSystem, task_id AS taskId, sort_order AS sortOrder, created, updated FROM boards WHERE id = ?").get(a);return b?{id:b.id,projectKey:b.projectKey,name:b.name,isSystem:1===b.isSystem,taskId:b.taskId,sortOrder:b.sortOrder,created:b.created,updated:b.updated}:void 0}c(48817)},85158:(a,b,c)=>{c.d(b,{U4:()=>j,dp:()=>f,oT:()=>k,zZ:()=>g});var d=c(55511),e=c(90596);let f=3e4;function g(){return globalThis.__piWebInstanceId||(globalThis.__piWebInstanceId=(0,d.randomUUID)()),globalThis.__piWebInstanceId}function h(){return Date.now()}function i(){return(0,e.Lf)().prepare("SELECT id, instance_id, registered_at, heartbeat FROM scheduler_leader WHERE id = 1").get()}function j(a){let b=(0,e.Lf)(),c=h(),d=i();return d?d.instance_id===a?Number(b.prepare("UPDATE scheduler_leader SET heartbeat = ? WHERE id = 1 AND instance_id = ?").run(c,a).changes)>0:!(h()-d.heartbeat<f)&&Number(b.prepare("UPDATE scheduler_leader SET instance_id = ?, registered_at = ?, heartbeat = ? WHERE id = 1 AND instance_id = ? AND heartbeat = ?").run(a,c,c,d.instance_id,d.heartbeat).changes)>0:Number(b.prepare("INSERT INTO scheduler_leader (id, instance_id, registered_at, heartbeat) VALUES (1, ?, ?, ?)").run(a,c,c).changes)>0}function k(){let a=i();return!!a&&a.instance_id===g()&&h()-a.heartbeat<f}}};
@@ -1,3 +1,3 @@
1
- "use strict";exports.id=2524,exports.ids=[2524],exports.modules={42524:(a,b,c)=>{c.d(b,{startBoardReconcileScheduler:()=>h});var d=c(90596),e=c(85158),f=c(47128);async function g(){if(!(0,e.oT)())return;let a=(0,d.Lf)().prepare(`SELECT id FROM boards WHERE task_id IS NOT NULL
1
+ "use strict";exports.id=2524,exports.ids=[2524],exports.modules={42524:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{startBoardReconcileScheduler:()=>j});var e=c(90596),f=c(85158),g=c(47128),h=a([g]);async function i(){if(!(0,f.oT)())return;let a=(0,e.Lf)().prepare(`SELECT id FROM boards WHERE task_id IS NOT NULL
2
2
  UNION
3
- SELECT DISTINCT board_id FROM task_cards`).all().map(a=>a.id);await Promise.all(a.map(a=>(0,f.dA)(a).catch(b=>{console.warn(`[board-reconcile] ${a} 异常:`,b?.message??b)})))}function h(){if(globalThis.__piBoardReconcileScheduler)return;let a=!1,b=setInterval(()=>{a||(a=!0,g().catch(a=>console.error("[board-reconcile] tick error:",a?.message??a)).finally(()=>{a=!1}))},1e4);b.unref?.(),globalThis.__piBoardReconcileScheduler={timer:b,startedAt:Date.now()},console.log("[pi-web] board reconcile scheduler started (interval 10000ms)")}}};
3
+ SELECT DISTINCT board_id FROM task_cards`).all().map(a=>a.id);await Promise.all(a.map(a=>(0,g.dA)(a).catch(b=>{console.warn(`[board-reconcile] ${a} 异常:`,b?.message??b)})))}function j(){if(globalThis.__piBoardReconcileScheduler)return;let a=!1,b=setInterval(()=>{a||(a=!0,i().catch(a=>console.error("[board-reconcile] tick error:",a?.message??a)).finally(()=>{a=!1}))},1e4);b.unref?.(),globalThis.__piBoardReconcileScheduler={timer:b,startedAt:Date.now()},console.log("[pi-web] board reconcile scheduler started (interval 10000ms)")}g=(h.then?(await h)():h)[0],d()}catch(a){d(a)}})}};
@@ -27,4 +27,4 @@ exports.id=3500,exports.ids=[3500],exports.modules={21278:(a,b,c)=>{"use strict"
27
27
  body,
28
28
  tokenize = 'trigram'
29
29
  );
30
- `),function(a){let b=a.prepare("PRAGMA user_version").get().user_version;for(let c of j)if(!(c.version<=b)){a.exec("BEGIN");try{for(let b of c.statements)try{a.exec(b)}catch(b){let a=b instanceof Error?b.message:String(b);if(!/duplicate column name/i.test(a))throw b}a.exec(`PRAGMA user_version = ${c.version}`),a.exec("COMMIT"),b=c.version}catch(b){throw a.exec("ROLLBACK"),b}}}(a),globalThis.__piWebDb=b,b}let j=[{version:1,name:"pinned columns",statements:["ALTER TABLE tasks ADD COLUMN pinned INTEGER NOT NULL DEFAULT 0;","ALTER TABLE session_meta ADD COLUMN pinned INTEGER NOT NULL DEFAULT 0;"]},{version:2,name:"tasks.sort_order",statements:["ALTER TABLE tasks ADD COLUMN sort_order INTEGER NOT NULL DEFAULT 0;"]},{version:3,name:"session boards",statements:["CREATE TABLE IF NOT EXISTS boards (\n id TEXT PRIMARY KEY,\n project_key TEXT NOT NULL,\n name TEXT NOT NULL,\n is_system INTEGER NOT NULL DEFAULT 0,\n created INTEGER NOT NULL,\n updated INTEGER NOT NULL\n);","CREATE INDEX IF NOT EXISTS idx_boards_project ON boards(project_key);","CREATE TABLE IF NOT EXISTS board_nodes (\n id TEXT PRIMARY KEY,\n board_id TEXT NOT NULL,\n kind TEXT NOT NULL,\n ref_id TEXT,\n x REAL NOT NULL,\n y REAL NOT NULL,\n w REAL NOT NULL DEFAULT 0,\n h REAL NOT NULL DEFAULT 0,\n expanded INTEGER NOT NULL DEFAULT 0,\n props TEXT NOT NULL DEFAULT '{}',\n created INTEGER NOT NULL,\n updated INTEGER NOT NULL\n);","CREATE INDEX IF NOT EXISTS idx_board_nodes_board ON board_nodes(board_id);","CREATE TABLE IF NOT EXISTS board_edges (\n id TEXT PRIMARY KEY,\n board_id TEXT NOT NULL,\n from_id TEXT NOT NULL,\n to_id TEXT NOT NULL,\n label TEXT,\n color TEXT,\n dashed INTEGER NOT NULL DEFAULT 0,\n created INTEGER NOT NULL,\n updated INTEGER NOT NULL\n);","CREATE INDEX IF NOT EXISTS idx_board_edges_board ON board_edges(board_id);","CREATE TABLE IF NOT EXISTS board_view (\n board_id TEXT PRIMARY KEY,\n camera_x REAL NOT NULL DEFAULT 0,\n camera_y REAL NOT NULL DEFAULT 0,\n camera_z REAL NOT NULL DEFAULT 1,\n updated INTEGER NOT NULL\n);"]},{version:4,name:"boards.sort_order",statements:["ALTER TABLE boards ADD COLUMN sort_order INTEGER NOT NULL DEFAULT 0;"]},{version:5,name:"boards.task_id",statements:["ALTER TABLE boards ADD COLUMN task_id TEXT NULL;","CREATE INDEX IF NOT EXISTS idx_boards_task ON boards(task_id);"]},{version:6,name:"boards.task_id unique (防并发重复创建任务看板)",statements:["CREATE UNIQUE INDEX IF NOT EXISTS idx_boards_task_unique ON boards(task_id);"]},{version:7,name:"task cards",statements:["CREATE TABLE IF NOT EXISTS task_cards (\n id TEXT PRIMARY KEY,\n board_id TEXT NOT NULL,\n project_key TEXT NOT NULL,\n number INTEGER NOT NULL,\n name TEXT NOT NULL,\n description TEXT NOT NULL DEFAULT '',\n ready_status TEXT NOT NULL DEFAULT 'draft',\n exec_status TEXT NOT NULL DEFAULT 'not_started',\n priority INTEGER NOT NULL DEFAULT 0,\n due INTEGER,\n attachments TEXT NOT NULL DEFAULT '[]',\n cwd TEXT,\n use_worktree INTEGER NOT NULL DEFAULT 0,\n max_retries INTEGER NOT NULL DEFAULT 3,\n retry_count INTEGER NOT NULL DEFAULT 0,\n session_id TEXT,\n created INTEGER NOT NULL,\n updated INTEGER NOT NULL\n);","CREATE INDEX IF NOT EXISTS idx_task_cards_board ON task_cards(board_id);","CREATE INDEX IF NOT EXISTS idx_task_cards_project ON task_cards(project_key);","CREATE UNIQUE INDEX IF NOT EXISTS idx_task_cards_number ON task_cards(project_key, number);","CREATE INDEX IF NOT EXISTS idx_task_cards_status ON task_cards(ready_status, exec_status);","CREATE TABLE IF NOT EXISTS task_card_links (\n id TEXT PRIMARY KEY,\n card_id TEXT NOT NULL,\n target_card_id TEXT NOT NULL,\n kind TEXT NOT NULL,\n created INTEGER NOT NULL,\n UNIQUE(card_id, target_card_id, kind)\n);","CREATE INDEX IF NOT EXISTS idx_task_links_card ON task_card_links(card_id);","CREATE TABLE IF NOT EXISTS task_card_questions (\n id TEXT PRIMARY KEY,\n card_id TEXT NOT NULL,\n session_id TEXT NOT NULL,\n question TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'pending',\n answer TEXT,\n created INTEGER NOT NULL,\n answered INTEGER\n);","CREATE INDEX IF NOT EXISTS idx_task_questions_status ON task_card_questions(status);"]},{version:8,name:"task_cards.dispatch_token (跨进程派发互斥锁)",statements:["ALTER TABLE task_cards ADD COLUMN dispatch_token TEXT NULL;"]},{version:9,name:"task_cards.owner + heartbeat (状态判定实例归属)",statements:["ALTER TABLE task_cards ADD COLUMN owner TEXT NULL;","ALTER TABLE task_cards ADD COLUMN heartbeat INTEGER NOT NULL DEFAULT 0;"]},{version:10,name:"scheduler_leader (单调度者注册)",statements:["CREATE TABLE IF NOT EXISTS scheduler_leader (\n id INTEGER PRIMARY KEY,\n instance_id TEXT NOT NULL,\n registered_at INTEGER NOT NULL,\n heartbeat INTEGER NOT NULL\n);"]},{version:11,name:"session_meta 升格会话完整索引(列表重构 v2)",statements:["ALTER TABLE session_meta ADD COLUMN path TEXT;","ALTER TABLE session_meta ADD COLUMN cwd TEXT;","ALTER TABLE session_meta ADD COLUMN project_key TEXT;","ALTER TABLE session_meta ADD COLUMN title TEXT;","ALTER TABLE session_meta ADD COLUMN first_message TEXT;","ALTER TABLE session_meta ADD COLUMN parent_id TEXT;","ALTER TABLE session_meta ADD COLUMN created INTEGER;","ALTER TABLE session_meta ADD COLUMN modified INTEGER;","CREATE INDEX IF NOT EXISTS idx_meta_project_modified ON session_meta(project_key, modified DESC);"]}]},72498:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Fk:()=>i,Y1:()=>g,er:()=>h});var e=c(75430),f=a([e]);function g(a,b){if(!(a&&(0,e.hasTrustRequiringProjectResources)(a)))return{requiresTrust:!1,trusted:!0};let c=new e.ProjectTrustStore(b);return{requiresTrust:!0,trusted:!0===c.get(a)}}function h(a,b){let c=g(a,b);return c.requiresTrust?(new e.ProjectTrustStore(b).set(a,!0),{requiresTrust:!0,trusted:!0}):c}function i(a,b){if(!g(a,b).requiresTrust)return;let c=new e.ProjectTrustStore(b);return{resolveProjectTrust:async()=>!0===c.get(a)}}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},75805:(a,b,c)=>{"use strict";c.d(b,{_:()=>j});var d=c(29021),e=c(21820),f=c(33873);function g(a){try{let b=JSON.parse((0,d.readFileSync)(a,"utf8"));return b.skills&&"object"==typeof b.skills?b.skills:{}}catch{return{}}}function h(a,b){let c=(0,f.relative)((0,f.resolve)(b),(0,f.resolve)(a));return""!==c&&".."!==c&&!c.startsWith(`..${f.sep}`)&&!(0,f.isAbsolute)(c)}function i(a,b,c){var d;let e=function(a,b){if(a[b])return a[b];let c=b.toLowerCase(),d=Object.keys(a).find(a=>a.toLowerCase()===c);return d?a[d]:void 0}(a,b);if(!e||"string"!=typeof e.source||!e.source.trim())return;let f="string"==typeof e.sourceType?e.sourceType:void 0,g=(d=e.source.trim(),"github"!==f?d.replace(/\/$/,""):d.replace(/^git\+/,"").replace(/^https?:\/\/github\.com\//,"").replace(/^git@github\.com:/,"").replace(/\.git$/,"").replace(/\/$/,""));if(!g)return;let h="string"==typeof e.skillPath?e.skillPath:void 0,i="string"==typeof e.ref?e.ref:void 0,j="global"===c?e.skillFolderHash:e.computedHash,k="string"==typeof j&&j?j:void 0,l="github"===f&&/^[\w.-]+\/[\w.-]+$/.test(g);return{package:`${g}@${b}`,scope:c,source:g,sourceType:f,skillsShUrl:"local"===f?void 0:function(a,b){if(!a||a.includes("://")||a.startsWith("git@"))return;let c=a.split("/").filter(Boolean).map(encodeURIComponent).join("/");if(c)return`https://skills.sh/${c}/${encodeURIComponent(b)}`}(g,b),...h&&{skillPath:h},...i&&{ref:i},...k&&{versionHash:k},canCheckForUpdates:!!(l&&h&&k&&("global"===c||!i))}}function j(a,{cwd:b,agentDir:c,globalLockPath:k=function({homeDir:a=(0,e.homedir)(),xdgStateHome:b=process.env.XDG_STATE_HOME}={}){return b?(0,f.join)(b,"skills",".skill-lock.json"):(0,f.join)(a,".agents",".skill-lock.json")}(),projectLockPath:l=(0,f.join)(b,"skills-lock.json")}){let m=g(k),n=g(l),o=(0,f.join)(c,"skills"),p=(0,f.join)(b,".pi","skills");return a.map(a=>{if(!(0,d.existsSync)(a.filePath))return a;let b=h(a.filePath,o)?i(m,a.name,"global"):h(a.filePath,p)?i(n,a.name,"project"):void 0;return b?{...a,install:b}:a})}},78335:()=>{},80547:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{A$:()=>o,B7:()=>p,Nw:()=>i.Nw,mc:()=>n,uK:()=>l.uK,wz:()=>i.wz});var e=c(29021),f=c(21820),g=c(33873),h=c.n(g),i=c(25252),j=c(82536),k=c(40402),l=c(58864),m=a([k]);async function n(){let a=Date.now(),b=globalThis.__piAllowedRootsCache;if(b&&b.expiresAt>a)return b.roots;let c=await (0,k.loadAllSessionIndex)(),d=new Set;for(let a of c)a.cwd&&d.add((0,i.Nw)(a.cwd)),a.projectRoot&&d.add((0,i.Nw)(a.projectRoot));try{for(let a of(0,e.readdirSync)((0,f.homedir)()))/^pi-cwd-\d{8}$/.test(a)&&d.add((0,i.Nw)(h().join((0,f.homedir)(),a)))}catch{}for(let a of(0,i.HM)())d.add(a);return globalThis.__piAllowedRootsCache={roots:d,expiresAt:a+5e3},d}function o(a,b){return(0,j.o)(a,b)}function p(a,b){return(0,j.x)(a,b)}k=(m.then?(await m)():m)[0],d()}catch(a){d(a)}})},82536:(a,b,c)=>{"use strict";c.d(b,{o:()=>h,x:()=>i});var d=c(29021),e=c(33873),f=c.n(e),g=c(58864);function h(a,b){for(let c of b){let b=(0,g.uK)(a)||(0,g.uK)(c),d=b?f().win32:f(),e=b?"\\":f().sep,h=d.resolve(a),i=d.resolve(c),j=b?h.toLowerCase():h,k=b?i.toLowerCase():i,l=k.endsWith(e)?k:k+e;if(j===k||j.startsWith(l))return!0}return!1}function i(a,b){let c;try{c=(0,d.realpathSync)(a)}catch{return!1}let e=new Set;for(let a of b)try{e.add((0,d.realpathSync)(a))}catch{}return h(c,e)}},96487:()=>{}};
30
+ `),function(a){let b=a.prepare("PRAGMA user_version").get().user_version;for(let c of j)if(!(c.version<=b)){a.exec("BEGIN");try{for(let b of c.statements)try{a.exec(b)}catch(b){let a=b instanceof Error?b.message:String(b);if(!/duplicate column name/i.test(a))throw b}a.exec(`PRAGMA user_version = ${c.version}`),a.exec("COMMIT"),b=c.version}catch(b){throw a.exec("ROLLBACK"),b}}}(a),globalThis.__piWebDb=b,b}let j=[{version:1,name:"pinned columns",statements:["ALTER TABLE tasks ADD COLUMN pinned INTEGER NOT NULL DEFAULT 0;","ALTER TABLE session_meta ADD COLUMN pinned INTEGER NOT NULL DEFAULT 0;"]},{version:2,name:"tasks.sort_order",statements:["ALTER TABLE tasks ADD COLUMN sort_order INTEGER NOT NULL DEFAULT 0;"]},{version:3,name:"session boards",statements:["CREATE TABLE IF NOT EXISTS boards (\n id TEXT PRIMARY KEY,\n project_key TEXT NOT NULL,\n name TEXT NOT NULL,\n is_system INTEGER NOT NULL DEFAULT 0,\n created INTEGER NOT NULL,\n updated INTEGER NOT NULL\n);","CREATE INDEX IF NOT EXISTS idx_boards_project ON boards(project_key);","CREATE TABLE IF NOT EXISTS board_nodes (\n id TEXT PRIMARY KEY,\n board_id TEXT NOT NULL,\n kind TEXT NOT NULL,\n ref_id TEXT,\n x REAL NOT NULL,\n y REAL NOT NULL,\n w REAL NOT NULL DEFAULT 0,\n h REAL NOT NULL DEFAULT 0,\n expanded INTEGER NOT NULL DEFAULT 0,\n props TEXT NOT NULL DEFAULT '{}',\n created INTEGER NOT NULL,\n updated INTEGER NOT NULL\n);","CREATE INDEX IF NOT EXISTS idx_board_nodes_board ON board_nodes(board_id);","CREATE TABLE IF NOT EXISTS board_edges (\n id TEXT PRIMARY KEY,\n board_id TEXT NOT NULL,\n from_id TEXT NOT NULL,\n to_id TEXT NOT NULL,\n label TEXT,\n color TEXT,\n dashed INTEGER NOT NULL DEFAULT 0,\n created INTEGER NOT NULL,\n updated INTEGER NOT NULL\n);","CREATE INDEX IF NOT EXISTS idx_board_edges_board ON board_edges(board_id);","CREATE TABLE IF NOT EXISTS board_view (\n board_id TEXT PRIMARY KEY,\n camera_x REAL NOT NULL DEFAULT 0,\n camera_y REAL NOT NULL DEFAULT 0,\n camera_z REAL NOT NULL DEFAULT 1,\n updated INTEGER NOT NULL\n);"]},{version:4,name:"boards.sort_order",statements:["ALTER TABLE boards ADD COLUMN sort_order INTEGER NOT NULL DEFAULT 0;"]},{version:5,name:"boards.task_id",statements:["ALTER TABLE boards ADD COLUMN task_id TEXT NULL;","CREATE INDEX IF NOT EXISTS idx_boards_task ON boards(task_id);"]},{version:6,name:"boards.task_id unique (防并发重复创建任务看板)",statements:["CREATE UNIQUE INDEX IF NOT EXISTS idx_boards_task_unique ON boards(task_id);"]},{version:7,name:"task cards",statements:["CREATE TABLE IF NOT EXISTS task_cards (\n id TEXT PRIMARY KEY,\n board_id TEXT NOT NULL,\n project_key TEXT NOT NULL,\n number INTEGER NOT NULL,\n name TEXT NOT NULL,\n description TEXT NOT NULL DEFAULT '',\n ready_status TEXT NOT NULL DEFAULT 'draft',\n exec_status TEXT NOT NULL DEFAULT 'not_started',\n priority INTEGER NOT NULL DEFAULT 0,\n due INTEGER,\n attachments TEXT NOT NULL DEFAULT '[]',\n cwd TEXT,\n use_worktree INTEGER NOT NULL DEFAULT 0,\n max_retries INTEGER NOT NULL DEFAULT 3,\n retry_count INTEGER NOT NULL DEFAULT 0,\n session_id TEXT,\n created INTEGER NOT NULL,\n updated INTEGER NOT NULL\n);","CREATE INDEX IF NOT EXISTS idx_task_cards_board ON task_cards(board_id);","CREATE INDEX IF NOT EXISTS idx_task_cards_project ON task_cards(project_key);","CREATE UNIQUE INDEX IF NOT EXISTS idx_task_cards_number ON task_cards(project_key, number);","CREATE INDEX IF NOT EXISTS idx_task_cards_status ON task_cards(ready_status, exec_status);","CREATE TABLE IF NOT EXISTS task_card_links (\n id TEXT PRIMARY KEY,\n card_id TEXT NOT NULL,\n target_card_id TEXT NOT NULL,\n kind TEXT NOT NULL,\n created INTEGER NOT NULL,\n UNIQUE(card_id, target_card_id, kind)\n);","CREATE INDEX IF NOT EXISTS idx_task_links_card ON task_card_links(card_id);","CREATE TABLE IF NOT EXISTS task_card_questions (\n id TEXT PRIMARY KEY,\n card_id TEXT NOT NULL,\n session_id TEXT NOT NULL,\n question TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'pending',\n answer TEXT,\n created INTEGER NOT NULL,\n answered INTEGER\n);","CREATE INDEX IF NOT EXISTS idx_task_questions_status ON task_card_questions(status);"]},{version:8,name:"task_cards.dispatch_token (跨进程派发互斥锁)",statements:["ALTER TABLE task_cards ADD COLUMN dispatch_token TEXT NULL;"]},{version:9,name:"task_cards.owner + heartbeat (状态判定实例归属)",statements:["ALTER TABLE task_cards ADD COLUMN owner TEXT NULL;","ALTER TABLE task_cards ADD COLUMN heartbeat INTEGER NOT NULL DEFAULT 0;"]},{version:10,name:"scheduler_leader (单调度者注册)",statements:["CREATE TABLE IF NOT EXISTS scheduler_leader (\n id INTEGER PRIMARY KEY,\n instance_id TEXT NOT NULL,\n registered_at INTEGER NOT NULL,\n heartbeat INTEGER NOT NULL\n);"]},{version:11,name:"session_meta 升格会话完整索引(列表重构 v2)",statements:["ALTER TABLE session_meta ADD COLUMN path TEXT;","ALTER TABLE session_meta ADD COLUMN cwd TEXT;","ALTER TABLE session_meta ADD COLUMN project_key TEXT;","ALTER TABLE session_meta ADD COLUMN title TEXT;","ALTER TABLE session_meta ADD COLUMN first_message TEXT;","ALTER TABLE session_meta ADD COLUMN parent_id TEXT;","ALTER TABLE session_meta ADD COLUMN created INTEGER;","ALTER TABLE session_meta ADD COLUMN modified INTEGER;","CREATE INDEX IF NOT EXISTS idx_meta_project_modified ON session_meta(project_key, modified DESC);"]},{version:12,name:"session_meta.last_reply(最后一条消息入库,列表零扫盘)",statements:["ALTER TABLE session_meta ADD COLUMN last_reply TEXT;"]}]},72498:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Fk:()=>i,Y1:()=>g,er:()=>h});var e=c(75430),f=a([e]);function g(a,b){if(!(a&&(0,e.hasTrustRequiringProjectResources)(a)))return{requiresTrust:!1,trusted:!0};let c=new e.ProjectTrustStore(b);return{requiresTrust:!0,trusted:!0===c.get(a)}}function h(a,b){let c=g(a,b);return c.requiresTrust?(new e.ProjectTrustStore(b).set(a,!0),{requiresTrust:!0,trusted:!0}):c}function i(a,b){if(!g(a,b).requiresTrust)return;let c=new e.ProjectTrustStore(b);return{resolveProjectTrust:async()=>!0===c.get(a)}}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},75805:(a,b,c)=>{"use strict";c.d(b,{_:()=>j});var d=c(29021),e=c(21820),f=c(33873);function g(a){try{let b=JSON.parse((0,d.readFileSync)(a,"utf8"));return b.skills&&"object"==typeof b.skills?b.skills:{}}catch{return{}}}function h(a,b){let c=(0,f.relative)((0,f.resolve)(b),(0,f.resolve)(a));return""!==c&&".."!==c&&!c.startsWith(`..${f.sep}`)&&!(0,f.isAbsolute)(c)}function i(a,b,c){var d;let e=function(a,b){if(a[b])return a[b];let c=b.toLowerCase(),d=Object.keys(a).find(a=>a.toLowerCase()===c);return d?a[d]:void 0}(a,b);if(!e||"string"!=typeof e.source||!e.source.trim())return;let f="string"==typeof e.sourceType?e.sourceType:void 0,g=(d=e.source.trim(),"github"!==f?d.replace(/\/$/,""):d.replace(/^git\+/,"").replace(/^https?:\/\/github\.com\//,"").replace(/^git@github\.com:/,"").replace(/\.git$/,"").replace(/\/$/,""));if(!g)return;let h="string"==typeof e.skillPath?e.skillPath:void 0,i="string"==typeof e.ref?e.ref:void 0,j="global"===c?e.skillFolderHash:e.computedHash,k="string"==typeof j&&j?j:void 0,l="github"===f&&/^[\w.-]+\/[\w.-]+$/.test(g);return{package:`${g}@${b}`,scope:c,source:g,sourceType:f,skillsShUrl:"local"===f?void 0:function(a,b){if(!a||a.includes("://")||a.startsWith("git@"))return;let c=a.split("/").filter(Boolean).map(encodeURIComponent).join("/");if(c)return`https://skills.sh/${c}/${encodeURIComponent(b)}`}(g,b),...h&&{skillPath:h},...i&&{ref:i},...k&&{versionHash:k},canCheckForUpdates:!!(l&&h&&k&&("global"===c||!i))}}function j(a,{cwd:b,agentDir:c,globalLockPath:k=function({homeDir:a=(0,e.homedir)(),xdgStateHome:b=process.env.XDG_STATE_HOME}={}){return b?(0,f.join)(b,"skills",".skill-lock.json"):(0,f.join)(a,".agents",".skill-lock.json")}(),projectLockPath:l=(0,f.join)(b,"skills-lock.json")}){let m=g(k),n=g(l),o=(0,f.join)(c,"skills"),p=(0,f.join)(b,".pi","skills");return a.map(a=>{if(!(0,d.existsSync)(a.filePath))return a;let b=h(a.filePath,o)?i(m,a.name,"global"):h(a.filePath,p)?i(n,a.name,"project"):void 0;return b?{...a,install:b}:a})}},78335:()=>{},80547:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{A$:()=>o,B7:()=>p,Nw:()=>i.Nw,mc:()=>n,uK:()=>l.uK,wz:()=>i.wz});var e=c(29021),f=c(21820),g=c(33873),h=c.n(g),i=c(25252),j=c(82536),k=c(40402),l=c(58864),m=a([k]);async function n(){let a=Date.now(),b=globalThis.__piAllowedRootsCache;if(b&&b.expiresAt>a)return b.roots;let c=await (0,k.loadAllSessionIndex)(),d=new Set;for(let a of c)a.cwd&&d.add((0,i.Nw)(a.cwd)),a.projectRoot&&d.add((0,i.Nw)(a.projectRoot));try{for(let a of(0,e.readdirSync)((0,f.homedir)()))/^pi-cwd-\d{8}$/.test(a)&&d.add((0,i.Nw)(h().join((0,f.homedir)(),a)))}catch{}for(let a of(0,i.HM)())d.add(a);return globalThis.__piAllowedRootsCache={roots:d,expiresAt:a+5e3},d}function o(a,b){return(0,j.o)(a,b)}function p(a,b){return(0,j.x)(a,b)}k=(m.then?(await m)():m)[0],d()}catch(a){d(a)}})},82536:(a,b,c)=>{"use strict";c.d(b,{o:()=>h,x:()=>i});var d=c(29021),e=c(33873),f=c.n(e),g=c(58864);function h(a,b){for(let c of b){let b=(0,g.uK)(a)||(0,g.uK)(c),d=b?f().win32:f(),e=b?"\\":f().sep,h=d.resolve(a),i=d.resolve(c),j=b?h.toLowerCase():h,k=b?i.toLowerCase():i,l=k.endsWith(e)?k:k+e;if(j===k||j.startsWith(l))return!0}return!1}function i(a,b){let c;try{c=(0,d.realpathSync)(a)}catch{return!1}let e=new Set;for(let a of b)try{e.add((0,d.realpathSync)(a))}catch{}return h(c,e)}},96487:()=>{}};
@@ -1,29 +1,40 @@
1
- "use strict";exports.id=402,exports.ids=[402],exports.modules={9202:(a,b,c)=>{c.d(b,{Ql:()=>i,Y0:()=>e,aO:()=>k,cn:()=>f,mU:()=>l,sT:()=>d,xw:()=>n});let d="pi-todo.state",e="todo",f=["pending","in_progress","completed"];function g(a){return"string"==typeof a&&f.includes(a)}function h(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function i(a){return a.some(a=>"completed"!==a.status)}function j(a,b){let c=a.trim();if(0===c.length)throw Error(`${b} cannot be empty or whitespace-only`);return c}function k(a){if(!h(a)||!Array.isArray(a.todos))return null;let b=[];for(let c of a.todos)h(c)&&"number"==typeof c.id&&Number.isFinite(c.id)&&"string"==typeof c.content&&0!==c.content.length&&g(c.status)&&b.push({id:c.id,content:c.content,status:c.status});let c=b.reduce((a,b)=>Math.max(a,b.id),0);return{todos:b,nextId:"number"==typeof a.nextId&&a.nextId>c?a.nextId:c+1}}function l(a){let b="completed"===a.status?"x":"in_progress"===a.status?"~":" ";return`[${b}] #${a.id}: ${a.content}`}function m(a,b){if(0===b.length)throw Error("update requires at least status or text parameter");let c=new Set;for(let d of b){if(c.has(d.id))throw Error(`duplicate id ${d.id} in updates`);if(c.add(d.id),void 0===d.status&&void 0===d.text)throw Error(`update item for id ${d.id} has neither status nor text`);if(void 0!==d.status&&!g(d.status))throw Error(`status only accepts ${f.join(" / ")}`);if(void 0!==d.text&&j(d.text,`update item id ${d.id}: text`),!a.todos.some(a=>a.id===d.id))throw Error(`Todo #${d.id} not found`)}return{snapshot:{todos:a.todos.map(a=>{let c=b.find(b=>b.id===a.id);return c?{...a,...void 0!==c.status?{status:c.status}:{},...void 0!==c.text?{content:c.text.trim()}:{}}:a}),nextId:a.nextId},resultText:`Updated ${b.length} todo(s)`}}function n(a,b){switch(a.action){case"list":var c;return{action:"list",snapshot:b,resultText:(c=b.todos).length>0?c.map(l).join("\n"):"No todos"};case"add":{if(void 0!==a.text&&void 0!==a.texts)throw Error('add only accepts texts array; do not also pass singular "text"');if(void 0!==a.text)throw Error('add needs texts (array). You passed singular "text" — that field is for update. Correct: {"action":"add","texts":["<your text>"]}');let{snapshot:c,resultText:d}=function(a,b){if(0===b.length)throw Error('add requires texts parameter (non-empty array). Correct: {"action":"add","texts":["..."]}');let c=b.map(a=>j(a,"texts item")),d=a.nextId,e=c.map((a,b)=>({id:d+b,content:a,status:"pending"})),f=d+e.length;return{snapshot:{todos:[...a.todos,...e],nextId:f},resultText:`Added ${e.length} todos (#${d}-#${f-1})`}}(b,a.texts??[]);return{action:"add",snapshot:c,resultText:d}}case"update":{if(void 0!==a.updates&&a.updates.length>0){let{snapshot:c,resultText:d}=m(b,a.updates);return{action:"update",snapshot:c,resultText:d}}if(void 0===a.id)throw Error('update requires id parameter. Correct: {"action":"update","id":1,"status":"in_progress"}');let{snapshot:c,resultText:d}=m(b,[{id:a.id,...void 0!==a.status?{status:a.status}:{},...void 0!==a.text?{text:a.text}:{}}]);return{action:"update",snapshot:c,resultText:d}}case"delete":{if(void 0===a.ids||0===a.ids.length){if(void 0!==a.id)throw Error('delete needs ids (array). You passed singular "id". Correct: {"action":"delete","ids":[1]}');throw Error('delete requires ids parameter (non-empty array). Correct: {"action":"delete","ids":[1]}')}let{snapshot:c,resultText:d}=function(a,b){if(0===b.length)throw Error('delete requires ids parameter (non-empty array). Correct: {"action":"delete","ids":[1]}');for(let c of b)if(!a.todos.some(a=>a.id===c))throw Error(`Todo #${c} not found`);let c=new Set(b);return{snapshot:{todos:a.todos.filter(a=>!c.has(a.id)),nextId:a.nextId},resultText:`Deleted ${b.length} todo(s)`}}(b,a.ids);return{action:"delete",snapshot:c,resultText:d}}default:throw Error(`Unknown action: ${String(a.action)}`)}}},12039:(a,b,c)=>{function d(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function e(a){return function(a,b={}){if("assistant"!==a.role)return a;let c=a.content;if(!Array.isArray(c))return a;let e=c.map(a=>(function(a,b={}){if(!d(a)||"toolCall"!==a.type)return null;let c={type:"toolCall",toolCallId:"string"==typeof a.toolCallId?a.toolCallId:"string"==typeof a.id?a.id:"",toolName:"string"==typeof a.toolName?a.toolName:"string"==typeof a.name?a.name:"",input:"object"!=typeof a.input||null===a.input||Array.isArray(a.input)?"object"!=typeof a.arguments||null===a.arguments||Array.isArray(a.arguments)?{}:a.arguments:a.input},e=b.includeStreamingRawInput?function(a){if("string"==typeof a.rawInput)return a.rawInput;if("string"==typeof a.partialJson)return a.partialJson;if("string"==typeof a.partialArgs)return a.partialArgs;let b=d(a.customInput)?a.customInput:null,c=b&&"string"==typeof b.property?b.property:null,e=d(a.arguments)?a.arguments:null;return c&&e&&"string"==typeof e[c]?e[c]:void 0}(a):void 0;return void 0===e?c:{...c,rawInput:e}})(a,b)??a);return{...a,content:e}}(a)}c.d(b,{B:()=>e})},24923:(a,b,c)=>{c.d(b,{IL:()=>u,KI:()=>o,P9:()=>q,Rl:()=>l,l:()=>t,xw:()=>s});var d=c(79646),e=c(29021),f=c(33873),g=c(28354),h=c(25252),i=c(58864);let j=(0,g.promisify)(d.execFile);function k(){globalThis.__piProjectCache?.clear()}async function l(a){return(0,e.existsSync)(a)?a:(await o(a)).projectRoot||a}async function m(a,b){let{stdout:c}=await j("git",["-C",a,...b],{timeout:1e4,maxBuffer:1048576,env:{...process.env,LC_ALL:"C"}});return c.trim()}function n(a){try{return(0,e.realpathSync)(a)}catch{return a}}async function o(a){let b,c=(globalThis.__piProjectCache||(globalThis.__piProjectCache=new Map),globalThis.__piProjectCache),d=c.get(a);if(d&&d.expiresAt>Date.now())return d.info;try{if(!(0,e.existsSync)(a))return b=function(a){let b=(0,f.dirname)(a);if(!b.endsWith("-worktrees"))return null;let c=b.slice(0,-10);return c&&(0,e.existsSync)((0,f.join)(c,".git"))?{projectRoot:n(c),branch:(0,f.basename)(a),isWorktree:!0,isTopLevel:!0}:null}(a)??{projectRoot:a,branch:null,isWorktree:!1,isTopLevel:!1},c.set(a,{info:b,expiresAt:Date.now()+6e4}),b;let[d,g,h,j]=(await m(a,["rev-parse","--path-format=absolute","--git-common-dir","--git-dir","--show-toplevel","--abbrev-ref","HEAD"])).split("\n").map(a=>a.trim()),[k,l,o]=[d,g,h].map(i.gB),p=n(a),q=(0,i.Eb)(o,p),r=!(0,i.Eb)(l,k)&&q,s=r?(0,f.dirname)(k):o;b={projectRoot:q?n(s):a,branch:j&&"HEAD"!==j?j:null,isWorktree:r,isTopLevel:q}}catch{b={projectRoot:a,branch:null,isWorktree:!1,isTopLevel:!1}}return c.set(a,{info:b,expiresAt:Date.now()+6e4}),b}async function p(a){let b=await m(a,["rev-parse","--path-format=absolute","--git-common-dir"]);return n((0,f.dirname)((0,i.gB)(b)))}async function q(a){let b=await m(a,["worktree","list","--porcelain"]),c=[],d=null,f=()=>{d?.path&&!d.prunable&&(0,e.existsSync)(d.path)&&c.push({path:d.path,branch:d.branch??null,isMain:0===c.length}),d=null};for(let a of b.split("\n"))a.startsWith("worktree ")?(f(),d={path:(0,i.gB)(a.slice(9).trim())}):a.startsWith("branch ")&&d?d.branch=a.slice(7).trim().replace(/^refs\/heads\//,""):a.startsWith("prunable")&&d?d.prunable=!0:""===a.trim()&&f();return f(),c}function r(a,b){return a.find(a=>(0,i.Eb)(a.path,b))}function s(a,b){return r(a,n(b))?.path??null}async function t(a,b){let c=b.trim();if(!c)throw Error("Branch name is required");let d=c.replace(/[\/\\:*?"<>|\s]+/g,"-").replace(/^-+|-+$/g,"");if(!d)throw Error(`Invalid branch name: ${b}`);let g=await p(a),i=`${(0,f.resolve)(g)}-worktrees`,j=(0,f.join)(i,d);if((0,e.existsSync)(j))throw Error(`Directory already exists: ${j}`);(0,e.mkdirSync)(i,{recursive:!0});let l=!1;try{await m(g,["rev-parse","--verify","--quiet",`refs/heads/${c}`]),l=!0}catch{l=!1}try{l?await m(g,["worktree","add","--",j,c]):await m(g,["worktree","add","-b",c,"--",j])}catch(a){throw Error(v(a))}return(0,h.wz)(j),k(),{path:j,branch:c}}async function u(a,b,c=!1){let d=r(await q(a),b);if(!d)throw Error(`Not a worktree of this repository: ${b}`);if(d.isMain)throw Error("Cannot remove the main worktree");try{await m(a,["worktree","remove",...c?["--force"]:[],d.path])}catch(a){throw Error(v(a))}k()}function v(a){let b=a.stderr;return"string"==typeof b&&b.trim()?b.trim():a instanceof Error?a.message:String(a)}},25252:(a,b,c)=>{c.d(b,{HM:()=>f,Nw:()=>e,wz:()=>g});var d=c(58864);function e(a){return(0,d.W3)(a)}function f(){return globalThis.__piAdditionalAllowedRoots||(globalThis.__piAdditionalAllowedRoots=new Set),globalThis.__piAdditionalAllowedRoots}function g(a){if(!a)return;let b=e(a);f().add(b),globalThis.__piAllowedRootsCache?.roots.add(b)}},27631:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{GL:()=>m,Jp:()=>o,M_:()=>n,X_:()=>p});var e=c(29021),f=c(79748),g=c(33873),h=c(75430),i=a([h]);function j(a){if(!a.trim())return null;try{return JSON.parse(a)}catch{return null}}function k(a){let b=a.content;return"string"==typeof b?b:Array.isArray(b)?b.filter(a=>a&&"text"===a.type&&"string"==typeof a.text).map(a=>a.text).join(" "):""}function l(a,b){let c=Math.min(4096,b),d="",f=(0,e.openSync)(a,"r");try{let a=null,g="";for(;;){let h=Buffer.alloc(c);(0,e.readSync)(f,h,0,c,0);let i=h.toString("utf8"),l=i.lastIndexOf("\n"),m=-1===l?i.length:l+1;for(let b of(d+=i.slice(0,m)).split("\n")){let c=j(b);if(c){if(!a){if("session"!==c.type)return null;a=c;continue}if("message"===c.type&&c.message?.role==="user"){let a=k(c.message).trim();if(a){g=a.slice(0,300);break}}}}if(!a)return null;if(g||c>=49152||c>=b||(c=Math.min(2*c,49152,b))<=0)break}return{header:a,firstMessage:g}}finally{(0,e.closeSync)(f)}}function m(a){let b;try{b=(0,e.statSync)(a)}catch{return null}if(!b.isFile()||0===b.size)return null;let c=l(a,b.size);if(!c)return null;let{header:d,firstMessage:f}=c,g="string"==typeof d.id?d.id:"";if(!g)return null;let h=new Date("string"==typeof d.timestamp?d.timestamp:"");return Number.isNaN(h.getTime())&&h.setTime(b.mtime.getTime()),{path:a,id:g,cwd:"string"==typeof d.cwd?d.cwd:"",created:h,firstMessage:f||"",parentSessionPath:"string"==typeof d.parentSession?d.parentSession:void 0}}function n(a){let b;try{b=(0,e.statSync)(a)}catch{return null}if(!b.isFile()||0===b.size)return null;let c=l(a,b.size);if(!c)return null;let{header:d,firstMessage:f}=c,g="string"==typeof d.id?d.id:"";if(!g)return null;let h=new Date("string"==typeof d.timestamp?d.timestamp:"");Number.isNaN(h.getTime())&&h.setTime(b.mtime.getTime());let i=function(a,b){let c={name:void 0,lastReply:""};if(b<=0)return c;let d=(0,e.openSync)(a,"r");try{let a=b;for(let b=0;b<256&&a>0;b++){let b=Math.max(0,a-65536),f=a-b,g=Buffer.alloc(f);(0,e.readSync)(d,g,0,f,b);let h=g.toString("utf8").split("\n");for(let a=h.length-1;a>=1;a--){if(void 0!==c.name&&c.lastReply)continue;let b=j(h[a]);if(b){if(void 0===c.name&&"session_info"===b.type&&"string"==typeof b.name){let a=b.name.trim();a&&(c.name=a)}else if(!c.lastReply&&"message"===b.type&&b.message?.role==="assistant"){let a=k(b.message).trim();a&&(c.lastReply=a)}if(void 0!==c.name&&c.lastReply)break}}a=b}return c}finally{(0,e.closeSync)(d)}}(a,b.size);return{path:a,id:g,cwd:"string"==typeof d.cwd?d.cwd:"",name:i.name,created:h,modified:b.mtime,firstMessage:f||"(no messages)",lastReply:i.lastReply,parentSessionPath:"string"==typeof d.parentSession?d.parentSession:void 0}}async function o(a){let b,c=a??(0,g.join)((0,h.getAgentDir)(),"sessions");try{b=(await (0,f.readdir)(c,{withFileTypes:!0})).filter(a=>a.isDirectory()||a.isSymbolicLink()).map(a=>(0,g.join)(c,a.name))}catch{return[]}let d=[];for(let a of b){let b;try{b=await (0,f.readdir)(a)}catch{continue}for(let c of b){let b;if(!c.endsWith(".jsonl"))continue;let f=(0,g.join)(a,c);try{b=(0,e.statSync)(f)}catch{continue}if(!b.isFile()||0===b.size)continue;let h=c.slice(0,-6).split("_").pop()??"";h&&d.push({path:f,id:h,modified:b.mtime})}}return d.sort((a,b)=>b.modified.getTime()-a.modified.getTime()),d}h=(i.then?(await i)():i)[0];let p={scan:async function(a){let b=await o(a),c=[];for(let a of b){let b=n(a.path);b&&c.push(b)}return c.sort((a,b)=>b.modified.getTime()-a.modified.getTime()),c}};d()}catch(a){d(a)}})},40402:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{B6:()=>Q,BR:()=>K,DK:()=>M,G7:()=>z,Hh:()=>N,O5:()=>x,O8:()=>J,Uv:()=>O,ZN:()=>u,af:()=>A,b4:()=>U,eP:()=>L,iN:()=>B,listAllSessions:()=>C,loadAllSessionIndex:()=>v,mD:()=>D,o0:()=>V,os:()=>H,u1:()=>I,zH:()=>w});var e=c(75430),f=c(29021),g=c(79748),h=c(33873),i=c(9202),j=c(66737),k=c(12039),l=c(74244),m=c(45902),n=c(24923),o=c(27631),p=c(41306),q=a([e,o,p]);function r(a){return{path:a.path??"",id:a.session_id,cwd:a.cwd??"",name:a.title??void 0,created:new Date(a.created??0).toISOString(),modified:new Date(a.modified??0).toISOString(),messageCount:0,firstMessage:a.first_message??"(no messages)",parentSessionId:a.parent_id??void 0,pinned:!!a.pinned}}async function s(a){let b;if(0===a.length)return[];try{b=(0,j.Lf)().prepare(`SELECT session_id, path, cwd, title, first_message, parent_id, created, modified, pinned
2
- FROM session_meta WHERE session_id IN (${a.map(()=>"?").join(",")})`).all(...a)}catch{return[]}let c=new Map(b.map(a=>[a.session_id,a])),d=[];for(let b of a){let a=c.get(b);a&&d.push(r(a))}return t(d)}function t(a){let b=a.filter(a=>"(no messages)"===a.firstMessage&&a.path);if(0===b.length)return a;let c=(0,j.Lf)().prepare("UPDATE session_meta SET first_message = ? WHERE session_id = ?");return a.map(a=>{if("(no messages)"!==a.firstMessage||!a.path)return a;let b=a.firstMessage;try{let d=(0,o.GL)(a.path);d?.firstMessage&&(b=d.firstMessage,c.run(b,a.id))}catch{}return b===a.firstMessage?a:{...a,firstMessage:b}})}async function u(a){let b;if(!a)return[];await (0,p.y$)();try{b=(0,j.Lf)().prepare(`SELECT session_id, path, cwd, title, first_message, parent_id, created, modified, pinned
1
+ "use strict";exports.id=402,exports.ids=[402],exports.modules={9202:(a,b,c)=>{c.d(b,{Ql:()=>i,Y0:()=>e,aO:()=>k,cn:()=>f,mU:()=>l,sT:()=>d,xw:()=>n});let d="pi-todo.state",e="todo",f=["pending","in_progress","completed"];function g(a){return"string"==typeof a&&f.includes(a)}function h(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function i(a){return a.some(a=>"completed"!==a.status)}function j(a,b){let c=a.trim();if(0===c.length)throw Error(`${b} cannot be empty or whitespace-only`);return c}function k(a){if(!h(a)||!Array.isArray(a.todos))return null;let b=[];for(let c of a.todos)h(c)&&"number"==typeof c.id&&Number.isFinite(c.id)&&"string"==typeof c.content&&0!==c.content.length&&g(c.status)&&b.push({id:c.id,content:c.content,status:c.status});let c=b.reduce((a,b)=>Math.max(a,b.id),0);return{todos:b,nextId:"number"==typeof a.nextId&&a.nextId>c?a.nextId:c+1}}function l(a){let b="completed"===a.status?"x":"in_progress"===a.status?"~":" ";return`[${b}] #${a.id}: ${a.content}`}function m(a,b){if(0===b.length)throw Error("update requires at least status or text parameter");let c=new Set;for(let d of b){if(c.has(d.id))throw Error(`duplicate id ${d.id} in updates`);if(c.add(d.id),void 0===d.status&&void 0===d.text)throw Error(`update item for id ${d.id} has neither status nor text`);if(void 0!==d.status&&!g(d.status))throw Error(`status only accepts ${f.join(" / ")}`);if(void 0!==d.text&&j(d.text,`update item id ${d.id}: text`),!a.todos.some(a=>a.id===d.id))throw Error(`Todo #${d.id} not found`)}return{snapshot:{todos:a.todos.map(a=>{let c=b.find(b=>b.id===a.id);return c?{...a,...void 0!==c.status?{status:c.status}:{},...void 0!==c.text?{content:c.text.trim()}:{}}:a}),nextId:a.nextId},resultText:`Updated ${b.length} todo(s)`}}function n(a,b){switch(a.action){case"list":var c;return{action:"list",snapshot:b,resultText:(c=b.todos).length>0?c.map(l).join("\n"):"No todos"};case"add":{if(void 0!==a.text&&void 0!==a.texts)throw Error('add only accepts texts array; do not also pass singular "text"');if(void 0!==a.text)throw Error('add needs texts (array). You passed singular "text" — that field is for update. Correct: {"action":"add","texts":["<your text>"]}');let{snapshot:c,resultText:d}=function(a,b){if(0===b.length)throw Error('add requires texts parameter (non-empty array). Correct: {"action":"add","texts":["..."]}');let c=b.map(a=>j(a,"texts item")),d=a.nextId,e=c.map((a,b)=>({id:d+b,content:a,status:"pending"})),f=d+e.length;return{snapshot:{todos:[...a.todos,...e],nextId:f},resultText:`Added ${e.length} todos (#${d}-#${f-1})`}}(b,a.texts??[]);return{action:"add",snapshot:c,resultText:d}}case"update":{if(void 0!==a.updates&&a.updates.length>0){let{snapshot:c,resultText:d}=m(b,a.updates);return{action:"update",snapshot:c,resultText:d}}if(void 0===a.id)throw Error('update requires id parameter. Correct: {"action":"update","id":1,"status":"in_progress"}');let{snapshot:c,resultText:d}=m(b,[{id:a.id,...void 0!==a.status?{status:a.status}:{},...void 0!==a.text?{text:a.text}:{}}]);return{action:"update",snapshot:c,resultText:d}}case"delete":{if(void 0===a.ids||0===a.ids.length){if(void 0!==a.id)throw Error('delete needs ids (array). You passed singular "id". Correct: {"action":"delete","ids":[1]}');throw Error('delete requires ids parameter (non-empty array). Correct: {"action":"delete","ids":[1]}')}let{snapshot:c,resultText:d}=function(a,b){if(0===b.length)throw Error('delete requires ids parameter (non-empty array). Correct: {"action":"delete","ids":[1]}');for(let c of b)if(!a.todos.some(a=>a.id===c))throw Error(`Todo #${c} not found`);let c=new Set(b);return{snapshot:{todos:a.todos.filter(a=>!c.has(a.id)),nextId:a.nextId},resultText:`Deleted ${b.length} todo(s)`}}(b,a.ids);return{action:"delete",snapshot:c,resultText:d}}default:throw Error(`Unknown action: ${String(a.action)}`)}}},12039:(a,b,c)=>{function d(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function e(a){return function(a,b={}){if("assistant"!==a.role)return a;let c=a.content;if(!Array.isArray(c))return a;let e=c.map(a=>(function(a,b={}){if(!d(a)||"toolCall"!==a.type)return null;let c={type:"toolCall",toolCallId:"string"==typeof a.toolCallId?a.toolCallId:"string"==typeof a.id?a.id:"",toolName:"string"==typeof a.toolName?a.toolName:"string"==typeof a.name?a.name:"",input:"object"!=typeof a.input||null===a.input||Array.isArray(a.input)?"object"!=typeof a.arguments||null===a.arguments||Array.isArray(a.arguments)?{}:a.arguments:a.input},e=b.includeStreamingRawInput?function(a){if("string"==typeof a.rawInput)return a.rawInput;if("string"==typeof a.partialJson)return a.partialJson;if("string"==typeof a.partialArgs)return a.partialArgs;let b=d(a.customInput)?a.customInput:null,c=b&&"string"==typeof b.property?b.property:null,e=d(a.arguments)?a.arguments:null;return c&&e&&"string"==typeof e[c]?e[c]:void 0}(a):void 0;return void 0===e?c:{...c,rawInput:e}})(a,b)??a);return{...a,content:e}}(a)}c.d(b,{B:()=>e})},24923:(a,b,c)=>{c.d(b,{IL:()=>u,KI:()=>o,P9:()=>q,Rl:()=>l,l:()=>t,xw:()=>s});var d=c(79646),e=c(29021),f=c(33873),g=c(28354),h=c(25252),i=c(58864);let j=(0,g.promisify)(d.execFile);function k(){globalThis.__piProjectCache?.clear()}async function l(a){return(0,e.existsSync)(a)?a:(await o(a)).projectRoot||a}async function m(a,b){let{stdout:c}=await j("git",["-C",a,...b],{timeout:1e4,maxBuffer:1048576,env:{...process.env,LC_ALL:"C"}});return c.trim()}function n(a){try{return(0,e.realpathSync)(a)}catch{return a}}async function o(a){let b,c=(globalThis.__piProjectCache||(globalThis.__piProjectCache=new Map),globalThis.__piProjectCache),d=c.get(a);if(d&&d.expiresAt>Date.now())return d.info;try{if(!(0,e.existsSync)(a))return b=function(a){let b=(0,f.dirname)(a);if(!b.endsWith("-worktrees"))return null;let c=b.slice(0,-10);return c&&(0,e.existsSync)((0,f.join)(c,".git"))?{projectRoot:n(c),branch:(0,f.basename)(a),isWorktree:!0,isTopLevel:!0}:null}(a)??{projectRoot:a,branch:null,isWorktree:!1,isTopLevel:!1},c.set(a,{info:b,expiresAt:Date.now()+6e4}),b;let[d,g,h,j]=(await m(a,["rev-parse","--path-format=absolute","--git-common-dir","--git-dir","--show-toplevel","--abbrev-ref","HEAD"])).split("\n").map(a=>a.trim()),[k,l,o]=[d,g,h].map(i.gB),p=n(a),q=(0,i.Eb)(o,p),r=!(0,i.Eb)(l,k)&&q,s=r?(0,f.dirname)(k):o;b={projectRoot:q?n(s):a,branch:j&&"HEAD"!==j?j:null,isWorktree:r,isTopLevel:q}}catch{b={projectRoot:a,branch:null,isWorktree:!1,isTopLevel:!1}}return c.set(a,{info:b,expiresAt:Date.now()+6e4}),b}async function p(a){let b=await m(a,["rev-parse","--path-format=absolute","--git-common-dir"]);return n((0,f.dirname)((0,i.gB)(b)))}async function q(a){let b=await m(a,["worktree","list","--porcelain"]),c=[],d=null,f=()=>{d?.path&&!d.prunable&&(0,e.existsSync)(d.path)&&c.push({path:d.path,branch:d.branch??null,isMain:0===c.length}),d=null};for(let a of b.split("\n"))a.startsWith("worktree ")?(f(),d={path:(0,i.gB)(a.slice(9).trim())}):a.startsWith("branch ")&&d?d.branch=a.slice(7).trim().replace(/^refs\/heads\//,""):a.startsWith("prunable")&&d?d.prunable=!0:""===a.trim()&&f();return f(),c}function r(a,b){return a.find(a=>(0,i.Eb)(a.path,b))}function s(a,b){return r(a,n(b))?.path??null}async function t(a,b){let c=b.trim();if(!c)throw Error("Branch name is required");let d=c.replace(/[\/\\:*?"<>|\s]+/g,"-").replace(/^-+|-+$/g,"");if(!d)throw Error(`Invalid branch name: ${b}`);let g=await p(a),i=`${(0,f.resolve)(g)}-worktrees`,j=(0,f.join)(i,d);if((0,e.existsSync)(j))throw Error(`Directory already exists: ${j}`);(0,e.mkdirSync)(i,{recursive:!0});let l=!1;try{await m(g,["rev-parse","--verify","--quiet",`refs/heads/${c}`]),l=!0}catch{l=!1}try{l?await m(g,["worktree","add","--",j,c]):await m(g,["worktree","add","-b",c,"--",j])}catch(a){throw Error(v(a))}return(0,h.wz)(j),k(),{path:j,branch:c}}async function u(a,b,c=!1){let d=r(await q(a),b);if(!d)throw Error(`Not a worktree of this repository: ${b}`);if(d.isMain)throw Error("Cannot remove the main worktree");try{await m(a,["worktree","remove",...c?["--force"]:[],d.path])}catch(a){throw Error(v(a))}k()}function v(a){let b=a.stderr;return"string"==typeof b&&b.trim()?b.trim():a instanceof Error?a.message:String(a)}},25252:(a,b,c)=>{c.d(b,{HM:()=>f,Nw:()=>e,wz:()=>g});var d=c(58864);function e(a){return(0,d.W3)(a)}function f(){return globalThis.__piAdditionalAllowedRoots||(globalThis.__piAdditionalAllowedRoots=new Set),globalThis.__piAdditionalAllowedRoots}function g(a){if(!a)return;let b=e(a);f().add(b),globalThis.__piAllowedRootsCache?.roots.add(b)}},27631:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{GL:()=>m,Jp:()=>r,M_:()=>p,XK:()=>s,pu:()=>o});var e=c(29021),f=c(79748),g=c(33873),h=c(75430),i=a([h]);h=(i.then?(await i)():i)[0];let s=300;function j(a){if(!a.trim())return null;try{return JSON.parse(a)}catch{return null}}function k(a){let b=a.content;return"string"==typeof b?b:Array.isArray(b)?b.filter(a=>a&&"text"===a.type&&"string"==typeof a.text).map(a=>a.text).join(" "):""}function l(a,b){let c;try{c=(0,e.openSync)(a,"r")}catch{return null}try{let a=Math.min(4096,b),d="",f=null,g="";for(;;){let h=Buffer.alloc(a);(0,e.readSync)(c,h,0,a,0);let i=h.toString("utf8"),l=i.lastIndexOf("\n"),m=-1===l?i.length:l+1;for(let a of(d+=i.slice(0,m)).split("\n")){let b=j(a);if(b){if(!f){if("session"!==b.type)return null;f=b;continue}if("message"===b.type&&b.message?.role==="user"){let a=k(b.message).trim();if(a){g=a.slice(0,s);break}}}}if(!f)return null;if(g||a>=49152||a>=b||(a=Math.min(2*a,49152,b))<=0)break}return{header:f,firstMessage:g}}catch(b){return console.warn(`[pi-web] 会话头部读取失败 path=${a}:`,b instanceof Error?b.message:String(b)),null}finally{try{(0,e.closeSync)(c)}catch{}}}function m(a){let b;try{b=(0,e.statSync)(a)}catch{return null}if(!b.isFile()||0===b.size)return null;let c=l(a,b.size);if(!c)return null;let{header:d,firstMessage:f}=c,g="string"==typeof d.id?d.id:"";if(!g)return null;let h=new Date("string"==typeof d.timestamp?d.timestamp:"");return Number.isNaN(h.getTime())&&h.setTime(b.mtime.getTime()),{path:a,id:g,cwd:"string"==typeof d.cwd?d.cwd:"",created:h,firstMessage:f||"",parentSessionPath:"string"==typeof d.parentSession?d.parentSession:void 0}}function n(a,b){let c,d={name:void 0,lastReply:""};if(b<=0)return d;try{c=(0,e.openSync)(a,"r")}catch{return null}try{let a=b;for(let b=0;b<256&&a>0;b++){let b=Math.max(0,a-65536),f=a-b,g=Buffer.alloc(f);(0,e.readSync)(c,g,0,f,b);let h=g.toString("utf8").split("\n");for(let a=h.length-1;a>=1;a--){if(void 0!==d.name&&d.lastReply)continue;let b=j(h[a]);if(b){if(void 0===d.name&&"session_info"===b.type&&"string"==typeof b.name){let a=b.name.trim();a&&(d.name=a)}else if(!d.lastReply&&"message"===b.type&&b.message?.role==="assistant"){let a=k(b.message).trim();a&&(d.lastReply=a)}if(void 0!==d.name&&d.lastReply)break}}a=b}return d}catch(b){return console.warn(`[pi-web] 会话尾部读取失败 path=${a}:`,b instanceof Error?b.message:String(b)),null}finally{try{(0,e.closeSync)(c)}catch{}}}function o(a){try{let b=(0,e.statSync)(a);if(!b.isFile()||0===b.size)return null;return n(a,b.size)}catch{return null}}function p(a){let b;try{b=(0,e.statSync)(a)}catch{return null}if(!b.isFile()||0===b.size)return null;let c=l(a,b.size);if(!c)return null;let{header:d,firstMessage:f}=c,g="string"==typeof d.id?d.id:"";if(!g)return null;let h=new Date("string"==typeof d.timestamp?d.timestamp:"");Number.isNaN(h.getTime())&&h.setTime(b.mtime.getTime());let i=n(a,b.size)??{name:void 0,lastReply:""};return{path:a,id:g,cwd:"string"==typeof d.cwd?d.cwd:"",name:i.name,created:h,modified:b.mtime,firstMessage:f||"(no messages)",lastReply:i.lastReply,parentSessionPath:"string"==typeof d.parentSession?d.parentSession:void 0}}async function q(a,b,c){let d;try{d=await (0,f.readdir)(a,{withFileTypes:!0})}catch{return}for(let f of d){let d;if(f.name.startsWith("."))continue;let h=(0,g.join)(a,f.name);if(f.isDirectory()){b<6&&await q(h,b+1,c);continue}if(f.name.endsWith(".jsonl")){try{d=(0,e.statSync)(h)}catch{continue}d.isFile()&&0!==d.size&&c.push({path:h,id:function(a){let b=a.slice(0,-6).split("_");if(b.length<2)return"";let c=b[b.length-1];return/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(c)&&!/^[0-9]+$/.test(c)?c:""}(f.name),modified:d.mtime})}}}async function r(a){let b,c=a??(0,g.join)((0,h.getAgentDir)(),"sessions");try{b=(await (0,f.readdir)(c,{withFileTypes:!0})).filter(a=>a.isDirectory()||a.isSymbolicLink()).map(a=>(0,g.join)(c,a.name))}catch{return[]}let d=[];for(let a of b)await q(a,1,d);return d.sort((a,b)=>b.modified.getTime()-a.modified.getTime()),d}d()}catch(a){d(a)}})},40402:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{B6:()=>L,BR:()=>F,DK:()=>H,G7:()=>x,Hh:()=>I,O5:()=>w,O8:()=>E,Uv:()=>J,ZN:()=>t,b4:()=>P,eP:()=>G,loadAllSessionIndex:()=>u,mD:()=>y,o0:()=>Q,resolveSessionIdByPath:()=>D,resolveSessionPath:()=>C,zH:()=>v});var e=c(75430),f=c(29021),g=c(79748),h=c(33873),i=c(9202),j=c(66737),k=c(12039),l=c(74244),m=c(45902),n=c(24923),o=c(27631),p=c(41306),q=a([e,o,p]);[e,o,p]=q.then?(await q)():q;let R="session_id, path, cwd, title, first_message, parent_id, created, modified, pinned, last_reply";function r(a){return{path:a.path??"",id:a.session_id,cwd:a.cwd??"",name:a.title??void 0,created:new Date(a.created??0).toISOString(),modified:new Date(a.modified??0).toISOString(),messageCount:0,firstMessage:a.first_message??"(no messages)",lastReply:a.last_reply??"",parentSessionId:a.parent_id??void 0,pinned:!!a.pinned}}async function s(a){let b;if(0===a.length)return[];try{b=(0,j.Lf)().prepare(`SELECT ${R}
2
+ FROM session_meta WHERE session_id IN (${a.map(()=>"?").join(",")})`).all(...a)}catch{return[]}let c=new Map(b.map(a=>[a.session_id,a])),d=[];for(let b of a){let a=c.get(b);a&&d.push(r(a))}return d}async function t(a){let b;if(!a)return[];await (0,p.y$)();try{b=(0,j.Lf)().prepare(`SELECT ${R}
3
3
  FROM session_meta
4
4
  WHERE project_key = ? AND task_id IS NULL
5
- ORDER BY pinned DESC, modified DESC`).all(a)}catch{return[]}let c=t(b.map(r));return w(c)}async function v(){let a;await (0,p.y$)();try{a=(0,j.Lf)().prepare(`SELECT session_id, path, cwd, title, first_message, parent_id, created, modified, pinned
5
+ ORDER BY pinned DESC, modified DESC`).all(a)}catch{return[]}return v(b.map(r))}async function u(){let a;await (0,p.y$)();try{a=(0,j.Lf)().prepare(`SELECT ${R}
6
6
  FROM session_meta
7
- ORDER BY modified DESC`).all()}catch{return[]}let b=t(a.map(r));return w(b)}async function w(a){let b=[...new Set(a.map(a=>a.cwd).filter(Boolean))],c=new Map;await Promise.all(b.map(async a=>{c.set(a,await (0,n.KI)(a))}));let d=new Set;try{let a=(0,j.Lf)().prepare("SELECT session_id FROM session_meta WHERE pinned = 1").all();d=new Set(a.map(a=>a.session_id))}catch{}return a.map(a=>{let b=a.cwd?c.get(a.cwd):void 0,e=b?.projectRoot??a.cwd;return{...a,projectRoot:e,projectKey:(0,l.z)(e),...b?.branch?{branch:b.branch}:{},...b?.isWorktree?{isWorktree:!0}:{},...b?.isWorktree&&b.branch?{worktreeBranch:b.branch}:{},...d.has(a.id)?{pinned:!0}:{}}})}function x(a,b){let c=new Map(b.map(a=>[a.id,a]));for(let b of a)c.set(b.id,b);return[...c.values()].sort((a,b)=>b.modified.localeCompare(a.modified))}async function y(){let a=await o.X_.scan(),b=new Map;for(let c of a)b.set((0,m.$)(c.path),c.id);let c=a.map(a=>(J(a.id,a.path),{path:a.path,id:a.id,cwd:a.cwd,name:a.name,created:a.created.toISOString(),modified:a.modified.toISOString(),messageCount:0,firstMessage:a.firstMessage||"(no messages)",lastReply:a.lastReply||"",parentSessionId:a.parentSessionPath?b.get((0,m.$)(a.parentSessionPath)):void 0,transient:!1}));return w(c)}async function z(a,b=0,c=5){return B(a,await A(),b,c)}async function A(){let a=await (0,o.Jp)(),b=new Map(a.map(a=>[a.id,a])),c=new Map(a.map(a=>[(0,m.$)(a.path),a])),d=new Map;for(let b of a){let a;try{a=L(b.path)?.parentSession??void 0}catch{}if(!a)continue;let e=c.get((0,m.$)(a));if(!e)continue;let f=d.get(e.id)??[];f.push(b.id),d.set(e.id,f)}return{metaById:b,childrenOf:d}}async function B(a,b,d=0,e=5){let{metaById:f,childrenOf:g}=b,h=a=>{let b=[a],c=[a];for(;c.length;){let a=c.shift();for(let d of g.get(a)??[])b.push(d),c.push(d)}return b},{listTaskSessionIds:i,listPinnedTaskSessionIds:j}=await Promise.all([c.e(6288),c.e(6583)]).then(c.bind(c,46583)),k=i(a),l=j(a),m=new Set(l),n=a=>f.get(a)?.modified.getTime()??0,o=(a,b)=>n(b)-n(a),p=[...l].sort(o),q=k.filter(a=>!m.has(a)).sort(o),r=[...p,...q.slice(d,d+e)],t=new Set;for(let a of r)for(let b of h(a))t.add(b);let u=await w(await s([...t])),v=new Set;for(let a of k)for(let b of h(a))v.add(b);return{sessions:u,rootTotal:k.length,sessionTotal:v.size,pinnedSessionIds:l}}async function C(a={}){a.force&&D();let b=globalThis.__piSessionListGeneration??0;if(globalThis.__piSessionListCache&&Date.now()-globalThis.__piSessionListCache.ts<W)return globalThis.__piSessionListCache.data;if(globalThis.__piSessionListPromise&&globalThis.__piSessionListPromiseGeneration===b)return globalThis.__piSessionListPromise;let c=y().then(a=>(globalThis.__piSessionListGeneration??0)!==b?C():(globalThis.__piSessionListCache={data:a,ts:Date.now()},a)).finally(()=>{globalThis.__piSessionListPromise===c&&(globalThis.__piSessionListPromise=void 0,globalThis.__piSessionListPromiseGeneration=void 0)});return globalThis.__piSessionListPromise=c,globalThis.__piSessionListPromiseGeneration=b,c}[e,o,p]=q.then?(await q)():q;let W=3e5;function D(){globalThis.__piSessionListGeneration=(globalThis.__piSessionListGeneration??0)+1,globalThis.__piSessionListCache=void 0}function E(){return globalThis.__piSessionPathCache||(globalThis.__piSessionPathCache=new Map),globalThis.__piSessionPathCache}function F(){return globalThis.__piPathToSessionIdCache||(globalThis.__piPathToSessionIdCache=new Map),globalThis.__piPathToSessionIdCache}async function G(a){let b,c=(0,h.join)((0,e.getAgentDir)(),"sessions");if(!a||!(0,f.existsSync)(c))return null;let d=`_${a}.jsonl`;try{b=await (0,g.readdir)(c,{withFileTypes:!0})}catch{return null}for(let e of b){let b;if(!e.isDirectory()&&!e.isSymbolicLink())continue;let f=(0,h.join)(c,e.name);try{b=await (0,g.readdir)(f)}catch{continue}let i=b.find(a=>a.endsWith(d));if(!i)continue;let j=(0,h.join)(f,i);try{if(L(j)?.id===a)return j}catch{}}return null}async function H(a){let b=E().get(a);if(b)return b;let c=await G(a);return c?(J(a,c),c):(await C(),E().get(a)??null)}async function I(a){let b=(0,m.$)(a),c=F().get(b);return c||(await C(),F().get(b))}function J(a,b){let c=(0,h.normalize)(b),d=(0,m.$)(c),e=E(),f=F(),g=e.get(a),i=g?(0,m.$)(g):void 0,j=f.get(d),k=j?e.get(j):void 0;i&&i!==d&&f.get(i)===a&&f.delete(i),j&&j!==a&&k&&(0,m.$)(k)===d&&e.delete(j),e.set(a,c),f.set(d,a)}function K(a){let b=E(),c=F(),d=b.get(a);b.delete(a);let e=d?(0,m.$)(d):void 0;e&&c.get(e)===a&&c.delete(e)}function L(a){let b=(0,f.openSync)(a,"r");try{let a=[],c=0,d=!1;for(;c<65536&&!d;){let e=Buffer.allocUnsafe(Math.min(4096,65536-c)),g=(0,f.readSync)(b,e,0,e.length,c);if(0===g)break;let h=e.subarray(0,g),i=h.indexOf(10);a.push(-1===i?h:h.subarray(0,i)),c+=g,d=-1!==i}if(!d&&c>=65536)return null;let e=Buffer.concat(a).toString("utf8").trimEnd();if(!e)return null;try{let a=JSON.parse(e);return"session"===a.type?a:null}catch{return null}}finally{(0,f.closeSync)(b)}}function M(a){return e.SessionManager.open(a).getEntries()}function N(a){let b=[];for(let c of a){if("custom"!==c.type||c.customType!==i.sT)continue;let a=(0,i.aO)(c.data);a&&(b=a.todos)}return b}function O(a,b,c={}){let{tail:d,excludeLeaf:f}=c,g=d&&d>0?P(a,b??null,d,f):a,h=new Map;for(let a of g)h.set(a.id,a);let i=(0,e.buildSessionContext)(g,b,h),j=(0,e.buildContextEntries)(g,b,h),l=[],m=[],n=[];for(let a of j){let b=function(a,b){switch(a.type){case"message":{let c=b.deferToolResultImages?function(a){if("toolResult"!==a.role)return a;let b=0,c=0,d=new Set,e=a.content.filter(a=>{let e=function(a){let b,c;if(!S(a)||"image"!==a.type||("string"==typeof a.data?(b=a.data,c="string"==typeof a.mimeType?a.mimeType:void 0):S(a.source)&&"base64"===a.source.type&&"string"==typeof a.source.data&&(b=a.source.data,c="string"==typeof a.source.media_type?a.source.media_type:void 0),!b))return null;let d=b.endsWith("==")?2:+!!b.endsWith("=");return{bytes:Math.max(0,Math.floor(3*b.length/4)-d),mime:c}}(a);return!e||(b+=1,c+=e.bytes,e.mime&&d.add(e.mime),!1)});if(0===b)return a;let f=d.size>0?`: ${[...d].join(", ")}`:"";return e.push({type:"text",text:`[${b} tool result image${1===b?"":"s"} omitted from initial history payload${f}, ~${c} bytes]`}),{...a,content:e}}((0,k.B)(a.message)):(0,k.B)(a.message);if(!b.deferThinking||"assistant"!==c.role)return c;let d=c.content;if(!Array.isArray(d))return c;return{...c,content:d.map(a=>"thinking"===a.type&&""!==a.thinking.trim()?{...a,thinking:"",deferred:!0}:a)}}case"compaction":return{role:"custom",customType:"compaction",content:a.summary,display:!0,details:{tokensBefore:a.tokensBefore,firstKeptEntryId:a.firstKeptEntryId},timestamp:R(a.timestamp)};case"branch_summary":if(!a.summary)return null;return{role:"user",content:`*The conversation briefly explored another branch and returned with this summary:*
7
+ ORDER BY modified DESC`).all()}catch{return[]}return v(a.map(r))}async function v(a){let b=[...new Set(a.map(a=>a.cwd).filter(Boolean))],c=new Map;await Promise.all(b.map(async a=>{c.set(a,await (0,n.KI)(a))}));let d=new Set;try{let a=(0,j.Lf)().prepare("SELECT session_id FROM session_meta WHERE pinned = 1").all();d=new Set(a.map(a=>a.session_id))}catch{}return a.map(a=>{let b=a.cwd?c.get(a.cwd):void 0,e=b?.projectRoot??a.cwd;return{...a,projectRoot:e,projectKey:(0,l.z)(e),...b?.branch?{branch:b.branch}:{},...b?.isWorktree?{isWorktree:!0}:{},...b?.isWorktree&&b.branch?{worktreeBranch:b.branch}:{},...d.has(a.id)?{pinned:!0}:{}}})}function w(a,b){let c=new Map(b.map(a=>[a.id,a]));for(let b of a)c.set(b.id,b);return[...c.values()].sort((a,b)=>b.modified.localeCompare(a.modified))}async function x(a,b=0,d=5){let e,f,{listPinnedTaskSessionIds:g}=await Promise.all([c.e(6288),c.e(6583)]).then(c.bind(c,46583));try{await (0,p.y$)()}catch(a){console.error("[pi-web] 任务区索引就绪检查失败(接着查库;库不可用则降级为空页):",a instanceof Error?a.message:String(a))}try{e=(0,j.Lf)().prepare("SELECT session_id, parent_id, modified FROM session_meta WHERE task_id = ? ORDER BY modified DESC, rowid").all(a),f=g(a)}catch{return{sessions:[],rootTotal:0,sessionTotal:0,pinnedSessionIds:[]}}let h=new Set(e.map(a=>a.session_id)),i=new Map,k=new Map,l=[];for(let a of e)if(i.set(a.session_id,a.modified??0),a.parent_id&&h.has(a.parent_id)){let b=k.get(a.parent_id)??[];b.push(a.session_id),k.set(a.parent_id,b)}else l.push(a.session_id);let m=a=>{let b=[a],c=[a];for(;c.length;){let a=c.shift();for(let d of k.get(a)??[])b.push(d),c.push(d)}return b},n=(a,b)=>(i.get(b)??0)-(i.get(a)??0),o=new Set(f),q=l.filter(a=>!o.has(a)).sort(n),r=[...[...f].sort(n),...q.slice(b,b+d)],t=new Set;for(let a of r)for(let b of m(a))t.add(b);return{sessions:await v(await s([...t])),rootTotal:l.length,sessionTotal:e.length,pinnedSessionIds:f}}function y(){globalThis.__piSessionListGeneration=(globalThis.__piSessionListGeneration??0)+1}function z(){return globalThis.__piSessionPathCache||(globalThis.__piSessionPathCache=new Map),globalThis.__piSessionPathCache}function A(){return globalThis.__piPathToSessionIdCache||(globalThis.__piPathToSessionIdCache=new Map),globalThis.__piPathToSessionIdCache}async function B(a){let b,c=(0,h.join)((0,e.getAgentDir)(),"sessions");if(!a||!(0,f.existsSync)(c))return null;let d=`_${a}.jsonl`;try{b=await (0,g.readdir)(c,{withFileTypes:!0})}catch{return null}for(let e of b){let b;if(!e.isDirectory()&&!e.isSymbolicLink())continue;let f=(0,h.join)(c,e.name);try{b=await (0,g.readdir)(f)}catch{continue}let i=b.find(a=>a.endsWith(d));if(!i)continue;let j=(0,h.join)(f,i);try{if(G(j)?.id===a)return j}catch{}}return null}async function C(a){let b=z().get(a);if(b)return b;try{let b=(0,j.Lf)().prepare("SELECT path FROM session_meta WHERE session_id = ?").get(a);if(b?.path&&(0,f.existsSync)(b.path))return E(a,b.path),b.path}catch{}let c=await B(a);return c?(E(a,c),c):null}async function D(a){let b=(0,m.$)(a),c=A().get(b);if(c)return c;try{let c=(0,j.Lf)(),d=c.prepare("SELECT session_id, path FROM session_meta WHERE path = ?").get(a);if(d?.path)return E(d.session_id,d.path),d.session_id;let e=(0,h.basename)(a);if(e){for(let a of c.prepare("SELECT session_id, path FROM session_meta WHERE path LIKE ?").all(`%${e}`))if(a.path&&(0,m.$)(a.path)===b)return E(a.session_id,a.path),a.session_id}}catch{}}function E(a,b){let c=(0,h.normalize)(b),d=(0,m.$)(c),e=z(),f=A(),g=e.get(a),i=g?(0,m.$)(g):void 0,j=f.get(d),k=j?e.get(j):void 0;i&&i!==d&&f.get(i)===a&&f.delete(i),j&&j!==a&&k&&(0,m.$)(k)===d&&e.delete(j),e.set(a,c),f.set(d,a)}function F(a){let b=z(),c=A(),d=b.get(a);b.delete(a);let e=d?(0,m.$)(d):void 0;e&&c.get(e)===a&&c.delete(e)}function G(a){let b=(0,f.openSync)(a,"r");try{let a=[],c=0,d=!1;for(;c<65536&&!d;){let e=Buffer.allocUnsafe(Math.min(4096,65536-c)),g=(0,f.readSync)(b,e,0,e.length,c);if(0===g)break;let h=e.subarray(0,g),i=h.indexOf(10);a.push(-1===i?h:h.subarray(0,i)),c+=g,d=-1!==i}if(!d&&c>=65536)return null;let e=Buffer.concat(a).toString("utf8").trimEnd();if(!e)return null;try{let a=JSON.parse(e);return"session"===a.type?a:null}catch{return null}}finally{(0,f.closeSync)(b)}}function H(a){return e.SessionManager.open(a).getEntries()}function I(a){let b=[];for(let c of a){if("custom"!==c.type||c.customType!==i.sT)continue;let a=(0,i.aO)(c.data);a&&(b=a.todos)}return b}function J(a,b,c={}){let{tail:d,excludeLeaf:f}=c,g=d&&d>0?K(a,b??null,d,f):a,h=new Map;for(let a of g)h.set(a.id,a);let i=(0,e.buildSessionContext)(g,b,h),j=(0,e.buildContextEntries)(g,b,h),l=[],m=[],n=[];for(let a of j){let b=function(a,b){switch(a.type){case"message":{let c=b.deferToolResultImages?function(a){if("toolResult"!==a.role)return a;let b=0,c=0,d=new Set,e=a.content.filter(a=>{let e=function(a){let b,c;if(!N(a)||"image"!==a.type||("string"==typeof a.data?(b=a.data,c="string"==typeof a.mimeType?a.mimeType:void 0):N(a.source)&&"base64"===a.source.type&&"string"==typeof a.source.data&&(b=a.source.data,c="string"==typeof a.source.media_type?a.source.media_type:void 0),!b))return null;let d=b.endsWith("==")?2:+!!b.endsWith("=");return{bytes:Math.max(0,Math.floor(3*b.length/4)-d),mime:c}}(a);return!e||(b+=1,c+=e.bytes,e.mime&&d.add(e.mime),!1)});if(0===b)return a;let f=d.size>0?`: ${[...d].join(", ")}`:"";return e.push({type:"text",text:`[${b} tool result image${1===b?"":"s"} omitted from initial history payload${f}, ~${c} bytes]`}),{...a,content:e}}((0,k.B)(a.message)):(0,k.B)(a.message);if(!b.deferThinking||"assistant"!==c.role)return c;let d=c.content;if(!Array.isArray(d))return c;return{...c,content:d.map(a=>"thinking"===a.type&&""!==a.thinking.trim()?{...a,thinking:"",deferred:!0}:a)}}case"compaction":return{role:"custom",customType:"compaction",content:a.summary,display:!0,details:{tokensBefore:a.tokensBefore,firstKeptEntryId:a.firstKeptEntryId},timestamp:M(a.timestamp)};case"branch_summary":if(!a.summary)return null;return{role:"user",content:`*The conversation briefly explored another branch and returned with this summary:*
8
8
 
9
- ${a.summary}`,timestamp:R(a.timestamp)};case"custom_message":return{role:"custom",customType:a.customType,content:a.content,display:a.display,details:a.details,timestamp:R(a.timestamp)};default:return null}}(a,c);b&&(l.push(b),m.push(a.id),n.push(a.parentId))}let o=N(P(a,b??null,a.length));return{messages:l,entryIds:m,parentIds:n,thinkingLevel:i.thinkingLevel,model:i.model,todos:o}}function P(a,b,c,d=!1){if(c<=0)return a;let e=new Map;for(let b of a)e.set(b.id,b);let f=b?e.get(b):a[a.length-1];if(d&&f?.parentId&&(f=e.get(f.parentId)),!f)return[];let g=[],h=f;for(;h&&g.length<c;)g.push(h),h=h.parentId?e.get(h.parentId):void 0;return g.reverse(),g}function Q(a,b,c,d=!1){if(c<=0)return!1;let e=new Map;for(let b of a)e.set(b.id,b);let f=b?e.get(b):a[a.length-1];d&&f?.parentId&&(f=e.get(f.parentId));let g=0;for(;f;){if(++g>c)return!0;f=f.parentId?e.get(f.parentId):void 0}return!1}function R(a){let b=Date.parse(a);return Number.isNaN(b)?void 0:b}function S(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function T(a,b){return a.length>b?`${a.slice(0,b)}…`:a}function U(a,b){let c=new Map;for(let b of a)c.set(b.id,b);let d=b?c.get(b):a[a.length-1];if(!d)return[];let e=[],f=d;for(;f;)e.push(f),f=f.parentId?c.get(f.parentId):void 0;e.reverse();let g=[],h=null;for(let a of e){if("message"!==a.type)continue;let b=a.message;if("user"===b.role)h={entryId:a.id,userText:function(a){if("string"==typeof a)return T(a.trim(),120);let b=a.filter(a=>"text"===a.type&&"string"==typeof a.text).map(a=>a.text).join("\n").trim();return b?T(b,120):a.length>0?"[attachment]":""}(b.content),assistantPreview:""},g.push(h);else if("assistant"===b.role&&h){let a=function(a){let b=a.filter(a=>"text"===a.type&&"string"==typeof a.text).map(a=>a.text).join("\n\n").trim();return b?T(b,140):""}(b.content);a&&(h.assistantPreview=a)}}return g}async function V(a){let b=[...new Set(a.filter(Boolean))];if(0===b.length)return[];let c=new Map;try{for(let a of(0,j.Lf)().prepare("SELECT session_id, path, title FROM session_meta WHERE session_id IN ("+b.map(()=>"?").join(",")+")").all(...b))c.set(a.session_id,{path:a.path,title:a.title})}catch{}let d=[];for(let a of b){let b=c.get(a),e=b?.path??null;if(e||(e=await H(a)),!e)continue;let f=(0,o.M_)(e);f&&(J(a,f.path),d.push({path:f.path,id:f.id,cwd:f.cwd,name:b?.title??f.name,created:f.created.toISOString(),modified:f.modified.toISOString(),messageCount:0,firstMessage:f.firstMessage||"(no messages)",lastReply:f.lastReply||"",transient:!1}))}return w(d)}d()}catch(a){d(a)}})},41306:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Pv:()=>l,y$:()=>n});var e=c(29021),f=c(66737),g=c(74244),h=c(45902),i=c(27631),j=c(24923),k=a([i]);async function l(a,b){let c=(0,i.GL)(a);if(!c)return;let d=await (0,j.KI)(c.cwd).then(a=>(0,g.z)(a?.projectRoot??c.cwd));(0,f.Lf)().prepare(`INSERT INTO session_meta
9
+ ${a.summary}`,timestamp:M(a.timestamp)};case"custom_message":return{role:"custom",customType:a.customType,content:a.content,display:a.display,details:a.details,timestamp:M(a.timestamp)};default:return null}}(a,c);b&&(l.push(b),m.push(a.id),n.push(a.parentId))}let o=I(K(a,b??null,a.length));return{messages:l,entryIds:m,parentIds:n,thinkingLevel:i.thinkingLevel,model:i.model,todos:o}}function K(a,b,c,d=!1){if(c<=0)return a;let e=new Map;for(let b of a)e.set(b.id,b);let f=b?e.get(b):a[a.length-1];if(d&&f?.parentId&&(f=e.get(f.parentId)),!f)return[];let g=[],h=f;for(;h&&g.length<c;)g.push(h),h=h.parentId?e.get(h.parentId):void 0;return g.reverse(),g}function L(a,b,c,d=!1){if(c<=0)return!1;let e=new Map;for(let b of a)e.set(b.id,b);let f=b?e.get(b):a[a.length-1];d&&f?.parentId&&(f=e.get(f.parentId));let g=0;for(;f;){if(++g>c)return!0;f=f.parentId?e.get(f.parentId):void 0}return!1}function M(a){let b=Date.parse(a);return Number.isNaN(b)?void 0:b}function N(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function O(a,b){return a.length>b?`${a.slice(0,b)}…`:a}function P(a,b){let c=new Map;for(let b of a)c.set(b.id,b);let d=b?c.get(b):a[a.length-1];if(!d)return[];let e=[],f=d;for(;f;)e.push(f),f=f.parentId?c.get(f.parentId):void 0;e.reverse();let g=[],h=null;for(let a of e){if("message"!==a.type)continue;let b=a.message;if("user"===b.role)h={entryId:a.id,userText:function(a){if("string"==typeof a)return O(a.trim(),120);let b=a.filter(a=>"text"===a.type&&"string"==typeof a.text).map(a=>a.text).join("\n").trim();return b?O(b,120):a.length>0?"[attachment]":""}(b.content),assistantPreview:""},g.push(h);else if("assistant"===b.role&&h){let a=function(a){let b=a.filter(a=>"text"===a.type&&"string"==typeof a.text).map(a=>a.text).join("\n\n").trim();return b?O(b,140):""}(b.content);a&&(h.assistantPreview=a)}}return g}async function Q(a){let b=[...new Set(a.filter(Boolean))];if(0===b.length)return[];let c=new Map;try{for(let a of(0,j.Lf)().prepare(`SELECT ${R} FROM session_meta WHERE session_id IN (${b.map(()=>"?").join(",")})`).all(...b))c.set(a.session_id,a)}catch{}let d=new Map,e=[];for(let a of b){let b=c.get(a);if(!b){e.push(a);continue}b.path&&E(a,b.path),d.set(a,r(b))}for(let a of e){let b=await C(a);if(!b)continue;let c=(0,o.M_)(b);if(!c)continue;E(a,c.path);let e=c.parentSessionPath?await D(c.parentSessionPath):void 0;d.set(a,{path:c.path,id:c.id,cwd:c.cwd,name:c.name,created:c.created.toISOString(),modified:c.modified.toISOString(),messageCount:0,firstMessage:c.firstMessage||"(no messages)",lastReply:c.lastReply||"",parentSessionId:e,transient:!1})}return v(b.map(a=>d.get(a)).filter(a=>!!a))}d()}catch(a){d(a)}})},41306:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Pv:()=>l,y$:()=>n});var e=c(29021),f=c(66737),g=c(74244),h=c(45902),i=c(27631),j=c(24923),k=a([i]);async function l(a,b,c=null){let d=(0,i.GL)(a);if(!d)return;let e=await (0,j.KI)(d.cwd).then(a=>(0,g.z)(a?.projectRoot??d.cwd));(0,f.Lf)().prepare(`INSERT INTO session_meta
10
10
  (session_id, task_id, updated, pinned, path, cwd, project_key, title, first_message, parent_id, created, modified)
11
- VALUES (?, NULL, ?, 0, ?, ?, ?, NULL, ?, ?, ?, ?)
11
+ VALUES (?, ?, ?, 0, ?, ?, ?, NULL, ?, ?, ?, ?)
12
12
  ON CONFLICT(session_id) DO UPDATE SET
13
13
  path = excluded.path,
14
14
  cwd = excluded.cwd,
15
15
  project_key = excluded.project_key,
16
- first_message = excluded.first_message,
16
+ -- first_message 只补空:调用方不传(NULL)时不再把已有的首条消息擦掉。
17
+ first_message = COALESCE(session_meta.first_message, excluded.first_message),
17
18
  parent_id = excluded.parent_id,
18
19
  created = excluded.created,
19
- modified = excluded.modified`).run(c.id,Date.now(),a,c.cwd,d,c.firstMessage||null,b,c.created.getTime(),Date.now())}async function m(a){let b=await (0,i.Jp)(a),c=new Map;for(let a of b){let b=c.get(a.id);(!b||a.modified.getTime()>b.modified.getTime())&&c.set(a.id,a)}let d=[...c.values()],k={scanned:d.length,inserted:0,updated:0,deleted:0},l=(0,f.Lf)(),m=l.prepare("SELECT session_id, modified, path, parent_id, first_message FROM session_meta").all(),n=new Map(m.map(a=>[a.session_id,{modified:a.modified,path:a.path,parent_id:a.parent_id,first_message:a.first_message}])),o=new Set,p=new Map;for(let a of d)p.set((0,h.$)(a.path),a.id);let q=new Map,r=l.prepare(`INSERT INTO session_meta
20
+ modified = excluded.modified`).run(d.id,c,Date.now(),a,d.cwd,e,d.firstMessage||null,b,d.created.getTime(),Date.now())}async function m(a){let b=await (0,i.Jp)(a),c=(0,f.Lf)(),d=c.prepare("SELECT session_id, modified, updated, path, parent_id, first_message FROM session_meta").all(),k=new Map(d.map(a=>[a.session_id,a])),l=new Map(d.filter(a=>a.path).map(a=>[(0,h.$)(a.path),a.session_id])),m=new Map,n=new Set,o=(a,b,c)=>{let d=m.get(a);d&&d.file.modified.getTime()>=b.modified.getTime()||m.set(a,{file:b,head:c})};for(let a of b){let b=l.get((0,h.$)(a.path));if(void 0!==b){o(b,a);continue}let c=(0,i.GL)(a.path);if(c){o(c.id,a,c);continue}a.id&&k.has(a.id)&&n.add(a.id)}let p={scanned:m.size,inserted:0,updated:0,deleted:0},q=new Map;for(let[a,b]of m)q.set((0,h.$)(b.file.path),a);let r=new Map,s=c.prepare(`INSERT INTO session_meta
20
21
  (session_id, task_id, updated, pinned, path, cwd, project_key, title, first_message, parent_id, created, modified)
21
22
  VALUES (?, NULL, ?, 0, ?, ?, ?, NULL, ?, ?, ?, ?)
22
23
  ON CONFLICT(session_id) DO UPDATE SET
23
24
  path = excluded.path,
24
25
  cwd = excluded.cwd,
25
26
  project_key = excluded.project_key,
26
- first_message = excluded.first_message,
27
+ -- first_message 只补空(COALESCE):库内已有首条消息时不被这次 upsert 的 NULL/旧值擦掉。
28
+ -- 内容派生列的「变化收敛」由 reconcileFromHead 单独负责(走 mtime 前移/欠账分支)。
29
+ first_message = COALESCE(session_meta.first_message, excluded.first_message),
27
30
  parent_id = excluded.parent_id,
28
31
  created = excluded.created,
29
- modified = excluded.modified`),s=l.prepare("UPDATE session_meta SET modified = ? WHERE session_id = ?"),t=l.prepare("UPDATE session_meta SET parent_id = ? WHERE session_id = ?"),u=l.prepare("UPDATE session_meta SET first_message = ? WHERE session_id = ?"),v=l.prepare("DELETE FROM session_meta WHERE session_id = ?"),w=async a=>{let b=(0,i.GL)(a.path);if(!b)return;let c=q.get(b.cwd);c||(c=(0,j.KI)(b.cwd).then(a=>(0,g.z)(a?.projectRoot??b.cwd)),q.set(b.cwd,c));let d=await c,e=b.parentSessionPath?p.get((0,h.$)(b.parentSessionPath))??null:null;r.run(a.id,Date.now(),a.path,b.cwd,d,b.firstMessage||null,e,b.created.getTime(),a.modified.getTime())},x=(a,b)=>{let c=(0,i.GL)(a.path);if(!c)return!1;let d=c.parentSessionPath?p.get((0,h.$)(c.parentSessionPath))??null:null;return d!==b.parent_id&&t.run(d,a.id),!!c.firstMessage&&c.firstMessage!==b.first_message&&(u.run(c.firstMessage,a.id),!0)};for(let a of d){o.add(a.id);let b=n.get(a.id);void 0!==b&&b.path&&b.path===a.path?null===b.modified||b.modified!==a.modified.getTime()?(x(a,b),s.run(a.modified.getTime(),a.id),k.updated+=1):!b.first_message&&x(a,b)&&(k.updated+=1):(await w(a),k.inserted+=1)}for(let a of n.keys())if(!o.has(a)){let b=n.get(a);if(b?.path&&(0,e.existsSync)(b.path))continue;v.run(a),k.deleted+=1}return k}async function n(a){let b=globalThis.__piSessionIndexScanner;if(!b?.firstScanDone){if(b?.firstScanPromise){if(await b.firstScanPromise,!globalThis.__piSessionIndexScanner?.firstScanDone)try{await m(a),globalThis.__piSessionIndexScanner&&(globalThis.__piSessionIndexScanner.firstScanDone=!0)}catch(a){console.error("[pi-web] session index ensure retry error:",a instanceof Error?a.message:String(a))}return}await m(a),globalThis.__piSessionIndexScanner={firstScanDone:!0}}}i=(k.then?(await k)():k)[0],d()}catch(a){d(a)}})},45902:(a,b,c)=>{c.d(b,{$:()=>f});var d=c(76760),e=c.n(d);function f(a,b=process.platform){let c="win32"===b?e().win32.normalize(a):e().posix.normalize(a);return"win32"===b?c.toLowerCase():c}},58864:(a,b,c)=>{c.d(b,{Eb:()=>j,W3:()=>h,gB:()=>g,uK:()=>f});var d=c(33873);let e=/^[a-zA-Z]:[\\/]/;function f(a){return e.test(a)||a.startsWith("\\\\")||a.startsWith("//")}function g(a){return a&&"win32"===process.platform?(0,d.normalize)(a):a}function h(a){return a.replace(/\\/g,"/")}function i(a){let b=(0,d.normalize)(g(a)),c=(0,d.parse)(b).root.length,e=b.length;for(;e>c&&b[e-1]===d.sep;)e--;return b.slice(0,e)}function j(a,b){if(a===b)return!0;if(!a||!b)return!1;let c=i(a),d=i(b);return"win32"===process.platform?c.toLowerCase()===d.toLowerCase():c===d}},74244:(a,b,c)=>{c.d(b,{z:()=>f});var d=c(76760),e=c.n(d);function f(a,b=process.platform){if(!a)return a;let c="win32"===b?e().win32:e().posix,d=c.normalize(a),g=c.parse(d).root.length,h=d.length;for(;h>g&&d[h-1]===c.sep;)h--;let i=d.slice(0,h);return"win32"===b?i.toLowerCase():i}}};
32
+ -- modified 也单调:path 迁移(文件被移动/重写)时不能用更旧的 mtime 把事件
33
+ -- 链路刚写的「现在就活跃」拉回去(与 updateModifiedStmt 同一约定)。
34
+ modified = CASE
35
+ WHEN session_meta.modified IS NULL OR excluded.modified > session_meta.modified
36
+ THEN excluded.modified ELSE session_meta.modified END`),t=c.prepare("UPDATE session_meta SET modified = ? WHERE session_id = ? AND (modified IS NULL OR modified < ?)"),u=c.prepare("UPDATE session_meta SET parent_id = ? WHERE session_id = ?"),v=c.prepare("UPDATE session_meta SET first_message = ? WHERE session_id = ?"),w=c.prepare("DELETE FROM session_meta WHERE session_id = ?"),x=async(a,b,c)=>{let d=r.get(b.cwd);d||(d=(0,j.KI)(b.cwd).then(a=>(0,g.z)(a?.projectRoot??b.cwd)),r.set(b.cwd,d));let e=await d,f=b.parentSessionPath?q.get((0,h.$)(b.parentSessionPath))??null:null;s.run(c,Date.now(),a.path,b.cwd,e,b.firstMessage||null,f,b.created.getTime(),a.modified.getTime())},y=(a,b,c)=>{let d=(0,i.GL)(a.path);if(!d)return!1;let e=d.parentSessionPath?q.get((0,h.$)(d.parentSessionPath))??null:null;return e!==b.parent_id&&u.run(e,c),!!d.firstMessage&&d.firstMessage!==b.first_message&&(v.run(d.firstMessage,c),!0)};for(let[a,b]of m){let{file:c}=b;n.add(a);let d=k.get(a);if(void 0!==d&&d.path&&d.path===c.path)null===d.modified||c.modified.getTime()>d.modified?(y(c,d,a),t.run(c.modified.getTime(),a,c.modified.getTime()),p.updated+=1):!d.first_message&&y(c,d,a)&&(p.updated+=1);else{let d=b.head??(0,i.GL)(c.path);if(!d)continue;await x(c,d,a),p.inserted+=1}}let z=Date.now();for(let a of d)!(n.has(a.session_id)||a.path&&(0,e.existsSync)(a.path))&&(z-a.updated<6e4||(w.run(a.session_id),p.deleted+=1));let A=c.prepare(`UPDATE session_meta AS c
37
+ SET task_id = (SELECT p.task_id FROM session_meta AS p WHERE p.session_id = c.parent_id)
38
+ WHERE c.task_id IS NULL
39
+ AND c.parent_id IS NOT NULL
40
+ AND EXISTS (SELECT 1 FROM session_meta AS p WHERE p.session_id = c.parent_id AND p.task_id IS NOT NULL)`);for(let a=0;a<8;a+=1){let a=Number(A.run().changes);if(0===a)break;p.updated+=a}let B=c.prepare("SELECT session_id, path FROM session_meta WHERE last_reply IS NULL AND path IS NOT NULL").all();if(B.length>0){let a=c.prepare("UPDATE session_meta SET last_reply = ? WHERE session_id = ? AND last_reply IS NULL");for(let b of B){let c=(0,i.pu)(b.path);c&&(a.run(c.lastReply||"",b.session_id),p.updated+=1)}}return p}async function n(a){let b=globalThis.__piSessionIndexScanner;if(!b?.firstScanDone){if(b?.firstScanPromise){if(await b.firstScanPromise,!globalThis.__piSessionIndexScanner?.firstScanDone)try{await m(a),globalThis.__piSessionIndexScanner&&(globalThis.__piSessionIndexScanner.firstScanDone=!0)}catch(a){console.error("[pi-web] session index ensure retry error:",a instanceof Error?a.message:String(a))}return}await m(a),globalThis.__piSessionIndexScanner={firstScanDone:!0}}}i=(k.then?(await k)():k)[0],d()}catch(a){d(a)}})},45902:(a,b,c)=>{c.d(b,{$:()=>f});var d=c(76760),e=c.n(d);function f(a,b=process.platform){let c="win32"===b?e().win32.normalize(a):e().posix.normalize(a);return"win32"===b?c.toLowerCase():c}},58864:(a,b,c)=>{c.d(b,{Eb:()=>j,W3:()=>h,gB:()=>g,uK:()=>f});var d=c(33873);let e=/^[a-zA-Z]:[\\/]/;function f(a){return e.test(a)||a.startsWith("\\\\")||a.startsWith("//")}function g(a){return a&&"win32"===process.platform?(0,d.normalize)(a):a}function h(a){return a.replace(/\\/g,"/")}function i(a){let b=(0,d.normalize)(g(a)),c=(0,d.parse)(b).root.length,e=b.length;for(;e>c&&b[e-1]===d.sep;)e--;return b.slice(0,e)}function j(a,b){if(a===b)return!0;if(!a||!b)return!1;let c=i(a),d=i(b);return"win32"===process.platform?c.toLowerCase()===d.toLowerCase():c===d}},74244:(a,b,c)=>{c.d(b,{z:()=>f});var d=c(76760),e=c.n(d);function f(a,b=process.platform){if(!a)return a;let c="win32"===b?e().win32:e().posix,d=c.normalize(a),g=c.parse(d).root.length,h=d.length;for(;h>g&&d[h-1]===c.sep;)h--;let i=d.slice(0,h);return"win32"===b?i.toLowerCase():i}}};
@@ -1,17 +1,7 @@
1
- exports.id=4457,exports.ids=[4457,6583],exports.modules={20861:(a,b,c)=>{"use strict";c.d(b,{BC:()=>n,c$:()=>p,np:()=>o,reconcileBoard:()=>k,rp:()=>m});var d=c(6288),e=c(46583),f=c(29742),g=c(66737);let h=(a,b)=>{let c=globalThis.__yjsBoard;return c?c.mutateBoard(a,b):Promise.resolve()};function i(a,b=340,c=160){let d=a.filter(a=>a?.type==="session-card").map(a=>({x:a.position?.x??0,y:a.position?.y??0,w:a.style?.width??b,h:a.style?.height??c})),e=(a,e)=>d.some(d=>a<d.x+d.w+24&&a+b+24>d.x&&e<d.y+d.h+24&&e+c+24>d.y),f=60,g=0;for(;g<2e3;){for(let a=0;a<4;a+=1){let c=60+a*(b+24);if(!e(c,f))return{x:c,y:f}}f+=c+24,g+=1}return{x:60,y:60}}let j=new Map;async function k(a,b=!1){var c;let g,m=(0,d.getBoard)(a);if(!m)return;let n=(c=m.taskId??null,JSON.stringify([c,(g=(0,f.gN)(a)).map(a=>[a.id,a.sessionId??""]),c?(0,e.listTaskSessionIds)(c):[],c?l(c).map(a=>[a.sessionId,a.parentId]):[],g.flatMap(a=>(0,f.QA)(a.id).map(b=>[a.id,b.targetCardId,b.kind]))]));if(!b&&j.get(a)===n)return;let o=!!m.taskId,p=(0,f.gN)(a),q=new Set;if(o)for(let a of(0,e.listTaskSessionIds)(m.taskId))q.add(a);for(let a of p)a.sessionId&&q.add(a.sessionId);let r=new Map;if(o)for(let{sessionId:a,parentId:b}of l(m.taskId))q.add(a),r.set(a,b);await h(a,a=>{let b=a.nodes,c=a.edges,d=Array.from(b.values()),e=new Set(p.map(a=>a.id)),g=[];for(let a of d){if(a?.type!=="task-card")continue;let b=a.data?.cardId;"string"==typeof b&&b&&(e.has(b)||g.push(a.id))}for(let a of g)for(let d of(b.delete(a),Array.from(c.values())))(d.source===a||d.target===a)&&c.delete(d.id);let h=new Set,j=new Map;for(let a of d){if(a?.type!=="session-card")continue;let b=a.data?.sessionId;b&&(h.add(b),!function(a){let b=a?.data?.cwd;return!!(a&&"string"==typeof b&&b.length>0)}(a)&&j.set(b,a))}let k=[];if(o)for(let[a,b]of j)q.has(a)||k.push(b.id);for(let a of k)for(let d of(b.delete(a),Array.from(c.values())))(d.source===a||d.target===a)&&c.delete(d.id);{let a=Array.from(b.values()),c=new Map(p.filter(a=>a.sessionId).map(a=>[a.sessionId,a]));for(let d of q){if(h.has(d))continue;let e=`session-${d}`,f=c.get(d),g=r.get(d),j=g?a.find(a=>a?.id===`session-${g}`):f?a.find(a=>a?.id===`task-${f.id}`):void 0,k=function(a,b){if(b?.position){let c=b.style?.width??380,d=b.position.x+c+24,e=b.position.y;if(!a.filter(a=>a?.type==="session-card").map(a=>({x:a.position?.x??0,y:a.position?.y??0,w:a.style?.width??340,h:a.style?.height??160})).some(a=>d<a.x+a.w+24&&d+340+24>a.x&&e<a.y+a.h+24&&e+160+24>a.y))return{x:d,y:e}}return i(a,340,160)}(a,j);b.set(e,{id:e,type:"session-card",position:{x:k.x,y:k.y},style:{width:340,height:160},data:{sessionId:d,title:"",emoji:"\uD83D\uDCAC",projectName:"",messageCount:0,lastReply:"",phase:"idle",runningMs:0,endedAt:0,lastActivityAt:0,stale:!1,expanded:!1,cwd:"",taskId:"",w:340,h:160,expandedW:0,expandedH:0,collapsedW:0,collapsedH:0}}),a.push(b.get(e))}}let l=new Map;for(let a of Array.from(b.values()))a?.type==="task-card"&&a.data?.cardId&&l.set(a.data.cardId,a);let m=new Map;for(let a of Array.from(b.values()))a?.type==="session-card"&&a.data?.sessionId&&m.set(a.data.sessionId,a);let n=new Map;for(let a of Array.from(c.values())){if(!a.data?.execLink)continue;let b=a.source,c=n.get(b)??[];c.push({to:a.target,edgeId:a.id}),n.set(b,c)}for(let a of p){let b=l.get(a.id);if(!b)continue;let d=a.sessionId?m.get(a.sessionId):null,e=n.get(b.id)??[];for(let a of e)a.to!==(d?.id??null)&&c.delete(a.edgeId);if(!d||e.some(a=>a.to===d.id))continue;let f=`exec-${a.id}-${a.sessionId}`;c.set(f,{id:f,source:b.id,target:d.id,type:"default",data:{execLink:!0,cardId:a.id,sessionId:a.sessionId},markerEnd:{type:"arrowclosed"},style:{strokeWidth:1.5,stroke:"#3184f8",strokeDasharray:"6 4"}})}let s=new Map;for(let a of Array.from(c.values()))a.data?.forkLink&&a.source&&a.target&&s.set(`${a.source}->${a.target}`,a.id);let t=new Set;for(let[a,b]of r){let d=`session-${b}`,e=`session-${a}`;if(!m.has(b)||!m.has(a))continue;let f=`${d}->${e}`;t.add(f),s.has(f)||c.set(`fork-${b}-${a}`,{id:`fork-${b}-${a}`,source:d,target:e,type:"default",data:{forkLink:!0,parentId:b,sessionId:a},markerEnd:{type:"arrowclosed"},style:{strokeWidth:1.5,stroke:"#3184f8",strokeDasharray:"6 4"}})}for(let[a,b]of s)t.has(a)||c.delete(b);let u=new Map;for(let a of Array.from(c.values())){if(!a.data?.taskLink)continue;let b=a.source,c=a.target,d=a.data.taskLink;b&&c&&d&&u.set(`${b}->${c}:${d}`,a.id)}let v=new Set;for(let a of p){let b=l.get(a.id);if(b)for(let d of(0,f.QA)(a.id)){let a=l.get(d.targetCardId);if(!a)continue;let e=`${b.id}->${a.id}:${d.kind}`;if(v.add(e),!u.has(e)){let e=`link-${b.id}-${a.id}-${d.kind}`;c.set(e,{id:e,source:b.id,target:a.id,type:"default",data:{taskLink:d.kind},markerEnd:{type:"arrowclosed"},style:{strokeWidth:1.5,stroke:"#f59e0b"}})}}}for(let[a,b]of u)v.has(a)||c.delete(b)}),j.set(a,n)}function l(a){return(0,g.Lf)().prepare(`SELECT f.session_id AS sessionId, f.parent_id AS parentId
1
+ exports.id=4457,exports.ids=[4457],exports.modules={20861:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{BC:()=>n,c$:()=>p,np:()=>o,reconcileBoard:()=>k,rp:()=>m});var e=c(6288),f=c(46583),g=c(29742),h=c(66737),i=a([f]);f=(i.then?(await i)():i)[0];let q=(a,b)=>{let c=globalThis.__yjsBoard;return c?c.mutateBoard(a,b):Promise.resolve()};function j(a,b=340,c=160){let d=a.filter(a=>a?.type==="session-card").map(a=>({x:a.position?.x??0,y:a.position?.y??0,w:a.style?.width??b,h:a.style?.height??c})),e=(a,e)=>d.some(d=>a<d.x+d.w+24&&a+b+24>d.x&&e<d.y+d.h+24&&e+c+24>d.y),f=60,g=0;for(;g<2e3;){for(let a=0;a<4;a+=1){let c=60+a*(b+24);if(!e(c,f))return{x:c,y:f}}f+=c+24,g+=1}return{x:60,y:60}}let r=new Map;async function k(a,b=!1){var c;let d,h=(0,e.getBoard)(a);if(!h)return;let i=(c=h.taskId??null,d=(0,g.gN)(a),JSON.stringify([c,d.map(a=>[a.id,a.sessionId??""]),c?(0,f.gQ)(c):[],c?l(c).map(a=>[a.sessionId,a.parentId]):[],d.flatMap(a=>(0,g.QA)(a.id).map(b=>[a.id,b.targetCardId,b.kind]))]));if(!b&&r.get(a)===i)return;let m=!!h.taskId,n=(0,g.gN)(a),o=new Set;if(m)for(let a of(0,f.gQ)(h.taskId))o.add(a);for(let a of n)a.sessionId&&o.add(a.sessionId);let p=new Map;if(m)for(let{sessionId:a,parentId:b}of l(h.taskId))o.add(a),p.set(a,b);await q(a,a=>{let b=a.nodes,c=a.edges,d=Array.from(b.values()),e=new Set(n.map(a=>a.id)),f=[];for(let a of d){if(a?.type!=="task-card")continue;let b=a.data?.cardId;"string"==typeof b&&b&&(e.has(b)||f.push(a.id))}for(let a of f)for(let d of(b.delete(a),Array.from(c.values())))(d.source===a||d.target===a)&&c.delete(d.id);let h=new Set,i=new Map;for(let a of d){if(a?.type!=="session-card")continue;let b=a.data?.sessionId;b&&(h.add(b),!function(a){let b=a?.data?.cwd;return!!(a&&"string"==typeof b&&b.length>0)}(a)&&i.set(b,a))}let k=[];if(m)for(let[a,b]of i)o.has(a)||k.push(b.id);for(let a of k)for(let d of(b.delete(a),Array.from(c.values())))(d.source===a||d.target===a)&&c.delete(d.id);{let a=Array.from(b.values()),c=new Map(n.filter(a=>a.sessionId).map(a=>[a.sessionId,a]));for(let d of o){if(h.has(d))continue;let e=`session-${d}`,f=c.get(d),g=p.get(d),i=g?a.find(a=>a?.id===`session-${g}`):f?a.find(a=>a?.id===`task-${f.id}`):void 0,k=function(a,b){if(b?.position){let c=b.style?.width??380,d=b.position.x+c+24,e=b.position.y;if(!a.filter(a=>a?.type==="session-card").map(a=>({x:a.position?.x??0,y:a.position?.y??0,w:a.style?.width??340,h:a.style?.height??160})).some(a=>d<a.x+a.w+24&&d+340+24>a.x&&e<a.y+a.h+24&&e+160+24>a.y))return{x:d,y:e}}return j(a,340,160)}(a,i);b.set(e,{id:e,type:"session-card",position:{x:k.x,y:k.y},style:{width:340,height:160},data:{sessionId:d,title:"",emoji:"\uD83D\uDCAC",projectName:"",messageCount:0,lastReply:"",phase:"idle",runningMs:0,endedAt:0,lastActivityAt:0,stale:!1,expanded:!1,cwd:"",taskId:"",w:340,h:160,expandedW:0,expandedH:0,collapsedW:0,collapsedH:0}}),a.push(b.get(e))}}let l=new Map;for(let a of Array.from(b.values()))a?.type==="task-card"&&a.data?.cardId&&l.set(a.data.cardId,a);let q=new Map;for(let a of Array.from(b.values()))a?.type==="session-card"&&a.data?.sessionId&&q.set(a.data.sessionId,a);let r=new Map;for(let a of Array.from(c.values())){if(!a.data?.execLink)continue;let b=a.source,c=r.get(b)??[];c.push({to:a.target,edgeId:a.id}),r.set(b,c)}for(let a of n){let b=l.get(a.id);if(!b)continue;let d=a.sessionId?q.get(a.sessionId):null,e=r.get(b.id)??[];for(let a of e)a.to!==(d?.id??null)&&c.delete(a.edgeId);if(!d||e.some(a=>a.to===d.id))continue;let f=`exec-${a.id}-${a.sessionId}`;c.set(f,{id:f,source:b.id,target:d.id,type:"default",data:{execLink:!0,cardId:a.id,sessionId:a.sessionId},markerEnd:{type:"arrowclosed"},style:{strokeWidth:1.5,stroke:"#3184f8",strokeDasharray:"6 4"}})}let s=new Map;for(let a of Array.from(c.values()))a.data?.forkLink&&a.source&&a.target&&s.set(`${a.source}->${a.target}`,a.id);let t=new Set;for(let[a,b]of p){let d=`session-${b}`,e=`session-${a}`;if(!q.has(b)||!q.has(a))continue;let f=`${d}->${e}`;t.add(f),s.has(f)||c.set(`fork-${b}-${a}`,{id:`fork-${b}-${a}`,source:d,target:e,type:"default",data:{forkLink:!0,parentId:b,sessionId:a},markerEnd:{type:"arrowclosed"},style:{strokeWidth:1.5,stroke:"#3184f8",strokeDasharray:"6 4"}})}for(let[a,b]of s)t.has(a)||c.delete(b);let u=new Map;for(let a of Array.from(c.values())){if(!a.data?.taskLink)continue;let b=a.source,c=a.target,d=a.data.taskLink;b&&c&&d&&u.set(`${b}->${c}:${d}`,a.id)}let v=new Set;for(let a of n){let b=l.get(a.id);if(b)for(let d of(0,g.QA)(a.id)){let a=l.get(d.targetCardId);if(!a)continue;let e=`${b.id}->${a.id}:${d.kind}`;if(v.add(e),!u.has(e)){let e=`link-${b.id}-${a.id}-${d.kind}`;c.set(e,{id:e,source:b.id,target:a.id,type:"default",data:{taskLink:d.kind},markerEnd:{type:"arrowclosed"},style:{strokeWidth:1.5,stroke:"#f59e0b"}})}}}for(let[a,b]of u)v.has(a)||c.delete(b)}),r.set(a,i)}function l(a){return(0,h.Lf)().prepare(`SELECT f.session_id AS sessionId, f.parent_id AS parentId
2
2
  FROM session_meta f
3
3
  JOIN session_meta s ON s.session_id = f.parent_id
4
- WHERE f.parent_id IS NOT NULL AND s.task_id = ?`).all(a)}async function m(a,b,c){let d=!1;return await h(a,a=>{let e=`session-${b}`;if(a.nodes.get(e))return;let f=i(Array.from(a.nodes.values()),340,160);a.nodes.set(e,{id:e,type:"session-card",position:{x:f.x,y:f.y},style:{width:340,height:160},data:{sessionId:b,title:c??"",emoji:"\uD83D\uDCAC",projectName:"",messageCount:0,lastReply:"",phase:"idle",runningMs:0,endedAt:0,lastActivityAt:0,stale:!1,expanded:!1,cwd:"",taskId:"",w:340,h:160,expandedW:0,expandedH:0,collapsedW:0,collapsedH:0}}),d=!0}),d}async function n(a){let b=(0,g.Lf)().prepare("SELECT task_id AS taskId FROM session_meta WHERE session_id = ? AND task_id IS NOT NULL").get(a);if(!b?.taskId)return;let c=(0,g.Lf)().prepare("SELECT id FROM boards WHERE task_id = ?").get(b.taskId);c?.id&&await k(c.id)}async function o(a){if(0===a.length)return;let b=globalThis.__yjsBoard;if(!b)return;let c=new Set(a);for(let a of(0,d.PV)())try{await b.mutateBoard(a.id,a=>{let b=a.nodes,d=a.edges,e=[];for(let a of Array.from(b.values()))a?.type==="session-card"&&a.data?.sessionId&&c.has(String(a.data.sessionId))&&e.push(a.id);if(0!==e.length)for(let a of e)for(let c of(b.delete(a),Array.from(d.values())))(c.source===a||c.target===a)&&d.delete(c.id)})}catch(b){console.warn(`[board] 会话删除清理 yjs 板 ${a.id} 异常:`,b instanceof Error?b.message:b)}}async function p(a){let b=globalThis.__yjsBoard;b&&await b.destroyBoardDocument(a)}},46583:(a,b,c)=>{"use strict";c.d(b,{Bm:()=>w,Me:()=>q,Q8:()=>s,R6:()=>x,UT:()=>o,Vk:()=>n,YH:()=>t,fi:()=>v,gg:()=>m,lC:()=>p,lT:()=>i,listPinnedTaskSessionIds:()=>k,listTaskSessionIds:()=>h,mE:()=>u,vq:()=>r});var d=c(55511),e=c(66737),f=c(6288);function g(){try{c(40402).mD()}catch{}}function h(a){return(0,e.Lf)().prepare("SELECT session_id FROM session_meta WHERE task_id = ? ORDER BY pinned DESC, updated DESC, rowid DESC").all(a).map(a=>a.session_id)}function i(){return new Set((0,e.Lf)().prepare("SELECT session_id FROM session_meta WHERE task_id IS NOT NULL").all().map(a=>a.session_id))}function j(a){return(0,e.Lf)().prepare("SELECT id, project_key AS projectKey, name, created, updated, pinned, sort_order AS sortOrder FROM tasks WHERE id = ?").get(a)}function k(a){return(0,e.Lf)().prepare("SELECT session_id FROM session_meta WHERE task_id = ? AND pinned = 1").all(a).map(a=>a.session_id)}function l(a){return{...a,pinned:1===a.pinned,sessionIds:h(a.id),pinnedSessionIds:k(a.id)}}function m(a){let b=j(a);return b?l(b):void 0}function n(a){return(0,e.Lf)().prepare("SELECT id, project_key AS projectKey, name, created, updated, pinned, sort_order AS sortOrder FROM tasks WHERE project_key = ? ORDER BY pinned DESC, sort_order, created, rowid").all(a).map(l)}function o(a,b){let c=b.trim();if(!a)throw Error("projectKey is required");if(!c)throw Error("name must not be empty");let f=(0,d.randomUUID)(),g=Date.now(),h=(0,e.Lf)().prepare("SELECT MIN(sort_order) AS minOrder FROM tasks WHERE project_key = ?").get(a),i=null===h.minOrder?0:h.minOrder-1;return(0,e.Lf)().prepare("INSERT INTO tasks (id, project_key, name, created, updated, sort_order) VALUES (?, ?, ?, ?, ?, ?)").run(f,a,c,g,g,i),{id:f,projectKey:a,name:c,created:g,updated:g,pinned:!1,sortOrder:i,sessionIds:[],pinnedSessionIds:[]}}function p(a,b){let c=(0,e.Lf)();if(!j(a))return null;c.exec("BEGIN");try{if(void 0!==b.name){let d=b.name.trim();if(!d)throw Error("name must not be empty");c.prepare("UPDATE tasks SET name = ?, updated = ? WHERE id = ?").run(d,Date.now(),a),(0,f.y1)(a,d)}if(void 0!==b.pinned&&c.prepare("UPDATE tasks SET pinned = ?, updated = ? WHERE id = ?").run(+!!b.pinned,Date.now(),a),void 0!==b.sortOrder&&c.prepare("UPDATE tasks SET sort_order = ?, updated = ? WHERE id = ?").run(b.sortOrder,Date.now(),a),void 0!==b.sessionIds){let d=new Set(h(a)),e=new Set(b.sessionIds),f=Date.now(),g=c.prepare("INSERT INTO session_meta (session_id, task_id, updated) VALUES (?, ?, ?) ON CONFLICT(session_id) DO UPDATE SET task_id = excluded.task_id, updated = excluded.updated"),i=c.prepare("UPDATE session_meta SET task_id = NULL, updated = ? WHERE session_id = ?");for(let c of b.sessionIds)d.has(c)||g.run(c,a,f);for(let a of d)e.has(a)||i.run(f,a);c.prepare("UPDATE tasks SET updated = ? WHERE id = ?").run(f,a)}c.exec("COMMIT")}catch(a){throw c.exec("ROLLBACK"),a}return void 0!==b.sessionIds&&g(),l(j(a))}function q(a,b){let c=(0,e.Lf)();if(0===b.length)return n(a);c.exec("BEGIN");try{let d=c.prepare("UPDATE tasks SET sort_order = ?, updated = ? WHERE id = ? AND project_key = ?");b.forEach((b,c)=>{let e=d.run(c,Date.now(),b,a);if(0===e.changes)throw Error(`task ${b} does not belong to project ${a}`)}),c.exec("COMMIT")}catch(a){throw c.exec("ROLLBACK"),a}return n(a)}function r(a){let b=(0,e.Lf)();b.exec("BEGIN");try{b.prepare("UPDATE session_meta SET task_id = NULL, updated = ? WHERE task_id = ?").run(Date.now(),a),b.prepare("DELETE FROM tasks WHERE id = ?").run(a),b.prepare("DELETE FROM task_card_links WHERE card_id IN (SELECT id FROM task_cards WHERE board_id = ?) OR target_card_id IN (SELECT id FROM task_cards WHERE board_id = ?)").run(a,a),b.prepare("DELETE FROM task_card_questions WHERE card_id IN (SELECT id FROM task_cards WHERE board_id = ?)").run(a),b.prepare("DELETE FROM task_cards WHERE board_id = ?").run(a),(0,f.cV)(a),b.exec("COMMIT")}catch(a){throw b.exec("ROLLBACK"),a}g()}function s(a){let b=(0,e.Lf)().prepare("SELECT t.name FROM session_meta m JOIN tasks t ON t.id = m.task_id WHERE m.session_id = ?").get(a);return b?.name??null}function t(a,b){(0,e.Lf)().prepare(`INSERT INTO session_meta
5
- (session_id, task_id, updated, pinned, path, cwd, project_key, title, first_message, parent_id, created, modified)
6
- VALUES (?, NULL, ?, 0, ?, ?, ?, ?, ?, ?, ?, ?)
7
- ON CONFLICT(session_id) DO UPDATE SET
8
- path = excluded.path,
9
- cwd = excluded.cwd,
10
- project_key = excluded.project_key,
11
- first_message = excluded.first_message,
12
- parent_id = excluded.parent_id,
13
- created = excluded.created,
14
- modified = excluded.modified`).run(a,Date.now(),b.path,b.cwd,b.projectKey,b.title??null,b.firstMessage??null,b.parentId??null,Date.now(),Date.now()),g()}function u(a,b){let c=(0,e.Lf)();if(!j(b))return!1;let d=Date.now();c.exec("BEGIN");try{c.prepare("INSERT INTO session_meta (session_id, task_id, updated) VALUES (?, ?, ?) ON CONFLICT(session_id) DO UPDATE SET task_id = excluded.task_id, updated = excluded.updated").run(a,b,d),c.prepare("UPDATE tasks SET updated = ? WHERE id = ?").run(d,b),c.exec("COMMIT")}catch(a){throw c.exec("ROLLBACK"),a}return g(),!0}function v(a,b){(0,e.Lf)().prepare("INSERT INTO session_meta (session_id, task_id, updated, pinned) VALUES (?, NULL, ?, ?) ON CONFLICT(session_id) DO UPDATE SET pinned = excluded.pinned").run(a,Date.now(),+!!b),g()}function w(a,b){(0,e.Lf)().prepare("INSERT INTO session_meta (session_id, task_id, updated, pinned, title) VALUES (?, NULL, ?, 0, ?) ON CONFLICT(session_id) DO UPDATE SET title = excluded.title, updated = excluded.updated").run(a,Date.now(),b),g()}function x(a){(0,e.Lf)().prepare("DELETE FROM session_meta WHERE session_id = ?").run(a),g()}},66737:(a,b,c)=>{"use strict";c.d(b,{$M:()=>h,Lf:()=>i});var d=c(79868),e=c(29021),f=c(21820),g=c(33873);function h(){let a=process.env.PI_CODING_AGENT_DIR;if(a){let b=a.startsWith("~")?(0,g.join)((0,f.homedir)(),a.slice(1)):a;return(0,g.normalize)(b)}return(0,g.join)((0,f.homedir)(),".pi","agent")}function i(){var a;if(globalThis.__piWebDb)return globalThis.__piWebDb;(0,e.mkdirSync)(h(),{recursive:!0});let b=new d.DatabaseSync((0,g.join)(h(),"pi-web.db"));return b.exec("PRAGMA journal_mode = WAL;"),b.exec("PRAGMA foreign_keys = ON;"),(a=b).exec(`
4
+ WHERE f.parent_id IS NOT NULL AND s.task_id = ?`).all(a)}async function m(a,b,c){let d=!1;return await q(a,a=>{let e=`session-${b}`;if(a.nodes.get(e))return;let f=Array.from(a.nodes.values()),g=j(f,340,160);a.nodes.set(e,{id:e,type:"session-card",position:{x:g.x,y:g.y},style:{width:340,height:160},data:{sessionId:b,title:c??"",emoji:"\uD83D\uDCAC",projectName:"",messageCount:0,lastReply:"",phase:"idle",runningMs:0,endedAt:0,lastActivityAt:0,stale:!1,expanded:!1,cwd:"",taskId:"",w:340,h:160,expandedW:0,expandedH:0,collapsedW:0,collapsedH:0}}),d=!0}),d}async function n(a){let b=(0,h.Lf)().prepare("SELECT task_id AS taskId FROM session_meta WHERE session_id = ? AND task_id IS NOT NULL").get(a);if(!b?.taskId)return;let c=(0,h.Lf)().prepare("SELECT id FROM boards WHERE task_id = ?").get(b.taskId);c?.id&&await k(c.id)}async function o(a){if(0===a.length)return;let b=globalThis.__yjsBoard;if(!b)return;let c=new Set(a);for(let a of(0,e.PV)())try{await b.mutateBoard(a.id,a=>{let b=a.nodes,d=a.edges,e=[];for(let a of Array.from(b.values()))a?.type==="session-card"&&a.data?.sessionId&&c.has(String(a.data.sessionId))&&e.push(a.id);if(0!==e.length)for(let a of e)for(let c of(b.delete(a),Array.from(d.values())))(c.source===a||c.target===a)&&d.delete(c.id)})}catch(b){console.warn(`[board] 会话删除清理 yjs 板 ${a.id} 异常:`,b instanceof Error?b.message:b)}}async function p(a){let b=globalThis.__yjsBoard;b&&await b.destroyBoardDocument(a)}d()}catch(a){d(a)}})},66737:(a,b,c)=>{"use strict";c.d(b,{$M:()=>h,Lf:()=>i});var d=c(79868),e=c(29021),f=c(21820),g=c(33873);function h(){let a=process.env.PI_CODING_AGENT_DIR;if(a){let b=a.startsWith("~")?(0,g.join)((0,f.homedir)(),a.slice(1)):a;return(0,g.normalize)(b)}return(0,g.join)((0,f.homedir)(),".pi","agent")}function i(){var a;if(globalThis.__piWebDb)return globalThis.__piWebDb;(0,e.mkdirSync)(h(),{recursive:!0});let b=new d.DatabaseSync((0,g.join)(h(),"pi-web.db"));return b.exec("PRAGMA journal_mode = WAL;"),b.exec("PRAGMA foreign_keys = ON;"),(a=b).exec(`
15
5
  CREATE TABLE IF NOT EXISTS tasks (
16
6
  id TEXT PRIMARY KEY,
17
7
  project_key TEXT NOT NULL,
@@ -40,4 +30,4 @@ exports.id=4457,exports.ids=[4457,6583],exports.modules={20861:(a,b,c)=>{"use st
40
30
  body,
41
31
  tokenize = 'trigram'
42
32
  );
43
- `),function(a){let b=a.prepare("PRAGMA user_version").get().user_version;for(let c of j)if(!(c.version<=b)){a.exec("BEGIN");try{for(let b of c.statements)try{a.exec(b)}catch(b){let a=b instanceof Error?b.message:String(b);if(!/duplicate column name/i.test(a))throw b}a.exec(`PRAGMA user_version = ${c.version}`),a.exec("COMMIT"),b=c.version}catch(b){throw a.exec("ROLLBACK"),b}}}(a),globalThis.__piWebDb=b,b}let j=[{version:1,name:"pinned columns",statements:["ALTER TABLE tasks ADD COLUMN pinned INTEGER NOT NULL DEFAULT 0;","ALTER TABLE session_meta ADD COLUMN pinned INTEGER NOT NULL DEFAULT 0;"]},{version:2,name:"tasks.sort_order",statements:["ALTER TABLE tasks ADD COLUMN sort_order INTEGER NOT NULL DEFAULT 0;"]},{version:3,name:"session boards",statements:["CREATE TABLE IF NOT EXISTS boards (\n id TEXT PRIMARY KEY,\n project_key TEXT NOT NULL,\n name TEXT NOT NULL,\n is_system INTEGER NOT NULL DEFAULT 0,\n created INTEGER NOT NULL,\n updated INTEGER NOT NULL\n);","CREATE INDEX IF NOT EXISTS idx_boards_project ON boards(project_key);","CREATE TABLE IF NOT EXISTS board_nodes (\n id TEXT PRIMARY KEY,\n board_id TEXT NOT NULL,\n kind TEXT NOT NULL,\n ref_id TEXT,\n x REAL NOT NULL,\n y REAL NOT NULL,\n w REAL NOT NULL DEFAULT 0,\n h REAL NOT NULL DEFAULT 0,\n expanded INTEGER NOT NULL DEFAULT 0,\n props TEXT NOT NULL DEFAULT '{}',\n created INTEGER NOT NULL,\n updated INTEGER NOT NULL\n);","CREATE INDEX IF NOT EXISTS idx_board_nodes_board ON board_nodes(board_id);","CREATE TABLE IF NOT EXISTS board_edges (\n id TEXT PRIMARY KEY,\n board_id TEXT NOT NULL,\n from_id TEXT NOT NULL,\n to_id TEXT NOT NULL,\n label TEXT,\n color TEXT,\n dashed INTEGER NOT NULL DEFAULT 0,\n created INTEGER NOT NULL,\n updated INTEGER NOT NULL\n);","CREATE INDEX IF NOT EXISTS idx_board_edges_board ON board_edges(board_id);","CREATE TABLE IF NOT EXISTS board_view (\n board_id TEXT PRIMARY KEY,\n camera_x REAL NOT NULL DEFAULT 0,\n camera_y REAL NOT NULL DEFAULT 0,\n camera_z REAL NOT NULL DEFAULT 1,\n updated INTEGER NOT NULL\n);"]},{version:4,name:"boards.sort_order",statements:["ALTER TABLE boards ADD COLUMN sort_order INTEGER NOT NULL DEFAULT 0;"]},{version:5,name:"boards.task_id",statements:["ALTER TABLE boards ADD COLUMN task_id TEXT NULL;","CREATE INDEX IF NOT EXISTS idx_boards_task ON boards(task_id);"]},{version:6,name:"boards.task_id unique (防并发重复创建任务看板)",statements:["CREATE UNIQUE INDEX IF NOT EXISTS idx_boards_task_unique ON boards(task_id);"]},{version:7,name:"task cards",statements:["CREATE TABLE IF NOT EXISTS task_cards (\n id TEXT PRIMARY KEY,\n board_id TEXT NOT NULL,\n project_key TEXT NOT NULL,\n number INTEGER NOT NULL,\n name TEXT NOT NULL,\n description TEXT NOT NULL DEFAULT '',\n ready_status TEXT NOT NULL DEFAULT 'draft',\n exec_status TEXT NOT NULL DEFAULT 'not_started',\n priority INTEGER NOT NULL DEFAULT 0,\n due INTEGER,\n attachments TEXT NOT NULL DEFAULT '[]',\n cwd TEXT,\n use_worktree INTEGER NOT NULL DEFAULT 0,\n max_retries INTEGER NOT NULL DEFAULT 3,\n retry_count INTEGER NOT NULL DEFAULT 0,\n session_id TEXT,\n created INTEGER NOT NULL,\n updated INTEGER NOT NULL\n);","CREATE INDEX IF NOT EXISTS idx_task_cards_board ON task_cards(board_id);","CREATE INDEX IF NOT EXISTS idx_task_cards_project ON task_cards(project_key);","CREATE UNIQUE INDEX IF NOT EXISTS idx_task_cards_number ON task_cards(project_key, number);","CREATE INDEX IF NOT EXISTS idx_task_cards_status ON task_cards(ready_status, exec_status);","CREATE TABLE IF NOT EXISTS task_card_links (\n id TEXT PRIMARY KEY,\n card_id TEXT NOT NULL,\n target_card_id TEXT NOT NULL,\n kind TEXT NOT NULL,\n created INTEGER NOT NULL,\n UNIQUE(card_id, target_card_id, kind)\n);","CREATE INDEX IF NOT EXISTS idx_task_links_card ON task_card_links(card_id);","CREATE TABLE IF NOT EXISTS task_card_questions (\n id TEXT PRIMARY KEY,\n card_id TEXT NOT NULL,\n session_id TEXT NOT NULL,\n question TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'pending',\n answer TEXT,\n created INTEGER NOT NULL,\n answered INTEGER\n);","CREATE INDEX IF NOT EXISTS idx_task_questions_status ON task_card_questions(status);"]},{version:8,name:"task_cards.dispatch_token (跨进程派发互斥锁)",statements:["ALTER TABLE task_cards ADD COLUMN dispatch_token TEXT NULL;"]},{version:9,name:"task_cards.owner + heartbeat (状态判定实例归属)",statements:["ALTER TABLE task_cards ADD COLUMN owner TEXT NULL;","ALTER TABLE task_cards ADD COLUMN heartbeat INTEGER NOT NULL DEFAULT 0;"]},{version:10,name:"scheduler_leader (单调度者注册)",statements:["CREATE TABLE IF NOT EXISTS scheduler_leader (\n id INTEGER PRIMARY KEY,\n instance_id TEXT NOT NULL,\n registered_at INTEGER NOT NULL,\n heartbeat INTEGER NOT NULL\n);"]},{version:11,name:"session_meta 升格会话完整索引(列表重构 v2)",statements:["ALTER TABLE session_meta ADD COLUMN path TEXT;","ALTER TABLE session_meta ADD COLUMN cwd TEXT;","ALTER TABLE session_meta ADD COLUMN project_key TEXT;","ALTER TABLE session_meta ADD COLUMN title TEXT;","ALTER TABLE session_meta ADD COLUMN first_message TEXT;","ALTER TABLE session_meta ADD COLUMN parent_id TEXT;","ALTER TABLE session_meta ADD COLUMN created INTEGER;","ALTER TABLE session_meta ADD COLUMN modified INTEGER;","CREATE INDEX IF NOT EXISTS idx_meta_project_modified ON session_meta(project_key, modified DESC);"]}]},78335:()=>{},96487:()=>{}};
33
+ `),function(a){let b=a.prepare("PRAGMA user_version").get().user_version;for(let c of j)if(!(c.version<=b)){a.exec("BEGIN");try{for(let b of c.statements)try{a.exec(b)}catch(b){let a=b instanceof Error?b.message:String(b);if(!/duplicate column name/i.test(a))throw b}a.exec(`PRAGMA user_version = ${c.version}`),a.exec("COMMIT"),b=c.version}catch(b){throw a.exec("ROLLBACK"),b}}}(a),globalThis.__piWebDb=b,b}let j=[{version:1,name:"pinned columns",statements:["ALTER TABLE tasks ADD COLUMN pinned INTEGER NOT NULL DEFAULT 0;","ALTER TABLE session_meta ADD COLUMN pinned INTEGER NOT NULL DEFAULT 0;"]},{version:2,name:"tasks.sort_order",statements:["ALTER TABLE tasks ADD COLUMN sort_order INTEGER NOT NULL DEFAULT 0;"]},{version:3,name:"session boards",statements:["CREATE TABLE IF NOT EXISTS boards (\n id TEXT PRIMARY KEY,\n project_key TEXT NOT NULL,\n name TEXT NOT NULL,\n is_system INTEGER NOT NULL DEFAULT 0,\n created INTEGER NOT NULL,\n updated INTEGER NOT NULL\n);","CREATE INDEX IF NOT EXISTS idx_boards_project ON boards(project_key);","CREATE TABLE IF NOT EXISTS board_nodes (\n id TEXT PRIMARY KEY,\n board_id TEXT NOT NULL,\n kind TEXT NOT NULL,\n ref_id TEXT,\n x REAL NOT NULL,\n y REAL NOT NULL,\n w REAL NOT NULL DEFAULT 0,\n h REAL NOT NULL DEFAULT 0,\n expanded INTEGER NOT NULL DEFAULT 0,\n props TEXT NOT NULL DEFAULT '{}',\n created INTEGER NOT NULL,\n updated INTEGER NOT NULL\n);","CREATE INDEX IF NOT EXISTS idx_board_nodes_board ON board_nodes(board_id);","CREATE TABLE IF NOT EXISTS board_edges (\n id TEXT PRIMARY KEY,\n board_id TEXT NOT NULL,\n from_id TEXT NOT NULL,\n to_id TEXT NOT NULL,\n label TEXT,\n color TEXT,\n dashed INTEGER NOT NULL DEFAULT 0,\n created INTEGER NOT NULL,\n updated INTEGER NOT NULL\n);","CREATE INDEX IF NOT EXISTS idx_board_edges_board ON board_edges(board_id);","CREATE TABLE IF NOT EXISTS board_view (\n board_id TEXT PRIMARY KEY,\n camera_x REAL NOT NULL DEFAULT 0,\n camera_y REAL NOT NULL DEFAULT 0,\n camera_z REAL NOT NULL DEFAULT 1,\n updated INTEGER NOT NULL\n);"]},{version:4,name:"boards.sort_order",statements:["ALTER TABLE boards ADD COLUMN sort_order INTEGER NOT NULL DEFAULT 0;"]},{version:5,name:"boards.task_id",statements:["ALTER TABLE boards ADD COLUMN task_id TEXT NULL;","CREATE INDEX IF NOT EXISTS idx_boards_task ON boards(task_id);"]},{version:6,name:"boards.task_id unique (防并发重复创建任务看板)",statements:["CREATE UNIQUE INDEX IF NOT EXISTS idx_boards_task_unique ON boards(task_id);"]},{version:7,name:"task cards",statements:["CREATE TABLE IF NOT EXISTS task_cards (\n id TEXT PRIMARY KEY,\n board_id TEXT NOT NULL,\n project_key TEXT NOT NULL,\n number INTEGER NOT NULL,\n name TEXT NOT NULL,\n description TEXT NOT NULL DEFAULT '',\n ready_status TEXT NOT NULL DEFAULT 'draft',\n exec_status TEXT NOT NULL DEFAULT 'not_started',\n priority INTEGER NOT NULL DEFAULT 0,\n due INTEGER,\n attachments TEXT NOT NULL DEFAULT '[]',\n cwd TEXT,\n use_worktree INTEGER NOT NULL DEFAULT 0,\n max_retries INTEGER NOT NULL DEFAULT 3,\n retry_count INTEGER NOT NULL DEFAULT 0,\n session_id TEXT,\n created INTEGER NOT NULL,\n updated INTEGER NOT NULL\n);","CREATE INDEX IF NOT EXISTS idx_task_cards_board ON task_cards(board_id);","CREATE INDEX IF NOT EXISTS idx_task_cards_project ON task_cards(project_key);","CREATE UNIQUE INDEX IF NOT EXISTS idx_task_cards_number ON task_cards(project_key, number);","CREATE INDEX IF NOT EXISTS idx_task_cards_status ON task_cards(ready_status, exec_status);","CREATE TABLE IF NOT EXISTS task_card_links (\n id TEXT PRIMARY KEY,\n card_id TEXT NOT NULL,\n target_card_id TEXT NOT NULL,\n kind TEXT NOT NULL,\n created INTEGER NOT NULL,\n UNIQUE(card_id, target_card_id, kind)\n);","CREATE INDEX IF NOT EXISTS idx_task_links_card ON task_card_links(card_id);","CREATE TABLE IF NOT EXISTS task_card_questions (\n id TEXT PRIMARY KEY,\n card_id TEXT NOT NULL,\n session_id TEXT NOT NULL,\n question TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'pending',\n answer TEXT,\n created INTEGER NOT NULL,\n answered INTEGER\n);","CREATE INDEX IF NOT EXISTS idx_task_questions_status ON task_card_questions(status);"]},{version:8,name:"task_cards.dispatch_token (跨进程派发互斥锁)",statements:["ALTER TABLE task_cards ADD COLUMN dispatch_token TEXT NULL;"]},{version:9,name:"task_cards.owner + heartbeat (状态判定实例归属)",statements:["ALTER TABLE task_cards ADD COLUMN owner TEXT NULL;","ALTER TABLE task_cards ADD COLUMN heartbeat INTEGER NOT NULL DEFAULT 0;"]},{version:10,name:"scheduler_leader (单调度者注册)",statements:["CREATE TABLE IF NOT EXISTS scheduler_leader (\n id INTEGER PRIMARY KEY,\n instance_id TEXT NOT NULL,\n registered_at INTEGER NOT NULL,\n heartbeat INTEGER NOT NULL\n);"]},{version:11,name:"session_meta 升格会话完整索引(列表重构 v2)",statements:["ALTER TABLE session_meta ADD COLUMN path TEXT;","ALTER TABLE session_meta ADD COLUMN cwd TEXT;","ALTER TABLE session_meta ADD COLUMN project_key TEXT;","ALTER TABLE session_meta ADD COLUMN title TEXT;","ALTER TABLE session_meta ADD COLUMN first_message TEXT;","ALTER TABLE session_meta ADD COLUMN parent_id TEXT;","ALTER TABLE session_meta ADD COLUMN created INTEGER;","ALTER TABLE session_meta ADD COLUMN modified INTEGER;","CREATE INDEX IF NOT EXISTS idx_meta_project_modified ON session_meta(project_key, modified DESC);"]},{version:12,name:"session_meta.last_reply(最后一条消息入库,列表零扫盘)",statements:["ALTER TABLE session_meta ADD COLUMN last_reply TEXT;"]}]},78335:()=>{},96487:()=>{}};