@herbertgao/pi-extensions 2026.8.10 → 2026.8.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (566) hide show
  1. package/README.md +18 -11
  2. package/{node_modules/@herbertgao/pi-inline-skills/LICENSE → THIRD_PARTY_NOTICES.md} +15 -1
  3. package/node_modules/@czottmann/pi-automode/CHANGELOG.md +15 -0
  4. package/node_modules/@czottmann/pi-automode/README.md +5 -3
  5. package/node_modules/@czottmann/pi-automode/docs/adr/ADR-001-permission-precedence-and-trust-boundaries.md +2 -0
  6. package/node_modules/@czottmann/pi-automode/docs/adr/ADR-002-global-config-in-extension-data-directory.md +60 -0
  7. package/node_modules/@czottmann/pi-automode/docs/adr/INDEX.md +1 -0
  8. package/node_modules/@czottmann/pi-automode/docs/automode-classifier-flow.md +4 -4
  9. package/node_modules/@czottmann/pi-automode/docs/configuration.md +20 -4
  10. package/node_modules/@czottmann/pi-automode/docs/observability-logging.md +1 -1
  11. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/bash.ts +692 -0
  12. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/config.ts +181 -3
  13. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/constants.ts +4 -1
  14. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/extension.ts +143 -36
  15. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/hard-deny.ts +103 -148
  16. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/paths.ts +32 -6
  17. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/permissions.ts +344 -22
  18. package/node_modules/@czottmann/pi-automode/extensions/auto-mode.ts +1 -0
  19. package/node_modules/@czottmann/pi-automode/package.json +4 -1
  20. package/node_modules/@herbertgao/pi-cc-extensions/README.en.md +2 -1
  21. package/node_modules/@herbertgao/pi-cc-extensions/README.md +2 -1
  22. package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/config.ts +4 -0
  23. package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/panel.ts +21 -1
  24. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/agent-summary/core.ts +1 -1
  25. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/context.ts +19 -19
  26. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +4 -2
  27. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/default-mode.ts +2 -1
  28. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/grouping.ts +10 -2
  29. package/node_modules/@herbertgao/pi-cc-extensions/package.json +3 -3
  30. package/node_modules/@herbertgao/pi-subagents/CHANGELOG.md +10 -0
  31. package/node_modules/@herbertgao/pi-subagents/README.md +21 -15
  32. package/node_modules/@herbertgao/pi-subagents/package.json +3 -3
  33. package/node_modules/@herbertgao/pi-subagents/src/agent-file-toggle.ts +11 -8
  34. package/node_modules/@herbertgao/pi-subagents/src/agent-manager.ts +184 -106
  35. package/node_modules/@herbertgao/pi-subagents/src/cross-extension-rpc.ts +31 -11
  36. package/node_modules/@herbertgao/pi-subagents/src/custom-agents.ts +9 -1
  37. package/node_modules/@herbertgao/pi-subagents/src/index.ts +156 -31
  38. package/node_modules/@herbertgao/pi-subagents/src/invocation-config.ts +17 -0
  39. package/node_modules/@herbertgao/pi-subagents/src/model-resolver.ts +14 -0
  40. package/node_modules/@herbertgao/pi-subagents/src/schedule.ts +8 -0
  41. package/node_modules/@herbertgao/pi-subagents/src/settings.ts +32 -1
  42. package/node_modules/@herbertgao/pi-subagents/src/types.ts +17 -2
  43. package/node_modules/@herbertgao/pi-subagents/src/ui/agent-widget.ts +23 -2
  44. package/node_modules/@herbertgao/pi-subagents/src/ui/conversation-viewer.ts +259 -24
  45. package/node_modules/{resume-from → @herbertgao/resume-from}/README.md +10 -8
  46. package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/reader.js +11 -2
  47. package/node_modules/{resume-from → @herbertgao/resume-from}/package.json +24 -10
  48. package/node_modules/{resume-from → @herbertgao/resume-from}/shims/pi/extensions/resume-from.js +2 -2
  49. package/node_modules/@juicesharp/rpiv-ask-user-question/package.json +2 -2
  50. package/node_modules/@narumitw/pi-btw/dist/index.ts +143 -46
  51. package/node_modules/@narumitw/pi-btw/dist/index.ts.map +3 -3
  52. package/node_modules/@narumitw/pi-btw/package.json +6 -6
  53. package/node_modules/@narumitw/pi-btw/src/fullscreen-ui.ts +136 -22
  54. package/node_modules/{@herbertgao → @tifan}/pi-copy-response/README.md +2 -4
  55. package/node_modules/{@herbertgao → @tifan}/pi-copy-response/package.json +5 -15
  56. package/node_modules/{@herbertgao → @tifan}/pi-handoff/README.md +4 -6
  57. package/node_modules/@tifan/pi-handoff/package.json +43 -0
  58. package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/index.ts +1 -1
  59. package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/README.md +2 -4
  60. package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/package.json +5 -15
  61. package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/README.md +5 -7
  62. package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/package.json +5 -19
  63. package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/README.md +4 -6
  64. package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/package.json +6 -16
  65. package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/src/index.ts +1 -6
  66. package/node_modules/{@herbertgao → @tifan}/pi-recap/README.md +4 -6
  67. package/node_modules/@tifan/pi-recap/package.json +42 -0
  68. package/node_modules/{@herbertgao → @tifan}/pi-recap/src/models.ts +1 -6
  69. package/node_modules/{@herbertgao → @tifan}/pi-rename/README.md +13 -8
  70. package/node_modules/@tifan/pi-rename/package.json +47 -0
  71. package/node_modules/@tifan/pi-rename/src/herdr-label.ts +4 -0
  72. package/node_modules/{@herbertgao → @tifan}/pi-rename/src/index.ts +4 -16
  73. package/node_modules/{@herbertgao → @tifan}/pi-rename/src/models.ts +1 -6
  74. package/node_modules/{@herbertgao → @tifan}/pi-titlebar-spinner/README.md +2 -4
  75. package/node_modules/{@herbertgao → @tifan}/pi-titlebar-spinner/package.json +5 -15
  76. package/node_modules/pi-lens/CHANGELOG.md +96 -1
  77. package/node_modules/pi-lens/dist/clients/actionable-warnings-logger.js +2 -1
  78. package/node_modules/pi-lens/dist/clients/actionable-warnings.js +14 -5
  79. package/node_modules/pi-lens/dist/clients/advisory-provenance.js +48 -18
  80. package/node_modules/pi-lens/dist/clients/ast-grep-client.js +1 -3
  81. package/node_modules/pi-lens/dist/clients/atomic-write-staging.js +16 -4
  82. package/node_modules/pi-lens/dist/clients/bash-file-access.js +3 -1
  83. package/node_modules/pi-lens/dist/clients/biome-client.js +1 -3
  84. package/node_modules/pi-lens/dist/clients/blocker-freshness.js +21 -8
  85. package/node_modules/pi-lens/dist/clients/bounded-cache.js +24 -8
  86. package/node_modules/pi-lens/dist/clients/bounded-pid-file-lock.js +4 -3
  87. package/node_modules/pi-lens/dist/clients/cache-manager.js +6 -7
  88. package/node_modules/pi-lens/dist/clients/cache-observability.js +461 -66
  89. package/node_modules/pi-lens/dist/clients/call-graph.js +238 -63
  90. package/node_modules/pi-lens/dist/clients/codebase-model.js +13 -5
  91. package/node_modules/pi-lens/dist/clients/complexity-client.js +1 -3
  92. package/node_modules/pi-lens/dist/clients/dead-code-client.js +19 -8
  93. package/node_modules/pi-lens/dist/clients/dead-code-logger.js +1 -2
  94. package/node_modules/pi-lens/dist/clients/deadline-utils.js +3 -1
  95. package/node_modules/pi-lens/dist/clients/debug-heap.js +8 -1
  96. package/node_modules/pi-lens/dist/clients/degradation-ledger.js +1 -1
  97. package/node_modules/pi-lens/dist/clients/dependency-checker.js +11 -7
  98. package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +39 -2
  99. package/node_modules/pi-lens/dist/clients/diagnostic-line-freshness.js +5 -1
  100. package/node_modules/pi-lens/dist/clients/dispatch/auxiliary-lsp.js +2 -3
  101. package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +13 -1
  102. package/node_modules/pi-lens/dist/clients/dispatch/facts/function-facts.js +3 -1
  103. package/node_modules/pi-lens/dist/clients/dispatch/facts/import-facts.js +2 -1
  104. package/node_modules/pi-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +1 -1
  105. package/node_modules/pi-lens/dist/clients/dispatch/integration.js +9 -4
  106. package/node_modules/pi-lens/dist/clients/dispatch/rules/error-swallowing.js +3 -1
  107. package/node_modules/pi-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +6 -2
  108. package/node_modules/pi-lens/dist/clients/dispatch/rules/unsafe-boundary.js +31 -7
  109. package/node_modules/pi-lens/dist/clients/dispatch/runners/actionlint.js +5 -2
  110. package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +10 -14
  111. package/node_modules/pi-lens/dist/clients/dispatch/runners/cpp-check.js +5 -1
  112. package/node_modules/pi-lens/dist/clients/dispatch/runners/dotnet-build.js +1 -1
  113. package/node_modules/pi-lens/dist/clients/dispatch/runners/elixir-check.js +3 -1
  114. package/node_modules/pi-lens/dist/clients/dispatch/runners/eslint.js +25 -6
  115. package/node_modules/pi-lens/dist/clients/dispatch/runners/fish-indent.js +1 -1
  116. package/node_modules/pi-lens/dist/clients/dispatch/runners/gleam-check.js +1 -1
  117. package/node_modules/pi-lens/dist/clients/dispatch/runners/golangci-lint.js +3 -1
  118. package/node_modules/pi-lens/dist/clients/dispatch/runners/hadolint.js +13 -8
  119. package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-lint.js +4 -1
  120. package/node_modules/pi-lens/dist/clients/dispatch/runners/htmlhint.js +25 -10
  121. package/node_modules/pi-lens/dist/clients/dispatch/runners/javac.js +1 -1
  122. package/node_modules/pi-lens/dist/clients/dispatch/runners/ktlint.js +1 -1
  123. package/node_modules/pi-lens/dist/clients/dispatch/runners/lsp.js +1 -1
  124. package/node_modules/pi-lens/dist/clients/dispatch/runners/markdownlint.js +28 -4
  125. package/node_modules/pi-lens/dist/clients/dispatch/runners/mypy.js +6 -8
  126. package/node_modules/pi-lens/dist/clients/dispatch/runners/oxlint.js +212 -11
  127. package/node_modules/pi-lens/dist/clients/dispatch/runners/php-lint.js +1 -1
  128. package/node_modules/pi-lens/dist/clients/dispatch/runners/phpstan.js +8 -4
  129. package/node_modules/pi-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +10 -6
  130. package/node_modules/pi-lens/dist/clients/dispatch/runners/pyright.js +23 -14
  131. package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +1 -1
  132. package/node_modules/pi-lens/dist/clients/dispatch/runners/shellcheck.js +7 -9
  133. package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +5 -2
  134. package/node_modules/pi-lens/dist/clients/dispatch/runners/sqlfluff.js +7 -7
  135. package/node_modules/pi-lens/dist/clients/dispatch/runners/stylelint.js +6 -8
  136. package/node_modules/pi-lens/dist/clients/dispatch/runners/terragrunt.js +13 -8
  137. package/node_modules/pi-lens/dist/clients/dispatch/runners/tflint.js +13 -8
  138. package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +17 -3
  139. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +7 -1
  140. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +24 -1
  141. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/tool-failure.js +35 -0
  142. package/node_modules/pi-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +1 -3
  143. package/node_modules/pi-lens/dist/clients/dispatch/runners/yamllint.js +6 -8
  144. package/node_modules/pi-lens/dist/clients/dispatch/runners/zig-check.js +1 -1
  145. package/node_modules/pi-lens/dist/clients/dispatch/suppress-writer.js +2 -1
  146. package/node_modules/pi-lens/dist/clients/dispatch/types.js +6 -1
  147. package/node_modules/pi-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +6 -2
  148. package/node_modules/pi-lens/dist/clients/extension-log.js +5 -3
  149. package/node_modules/pi-lens/dist/clients/feature-hints.js +8 -1
  150. package/node_modules/pi-lens/dist/clients/file-kinds.js +34 -129
  151. package/node_modules/pi-lens/dist/clients/file-utils.js +17 -1
  152. package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +57 -2
  153. package/node_modules/pi-lens/dist/clients/formatters.js +144 -27
  154. package/node_modules/pi-lens/dist/clients/freshness.js +38 -0
  155. package/node_modules/pi-lens/dist/clients/git-guard.js +43 -13
  156. package/node_modules/pi-lens/dist/clients/go-client.js +1 -3
  157. package/node_modules/pi-lens/dist/clients/grammar-source.js +1 -1
  158. package/node_modules/pi-lens/dist/clients/gzip-stage-write.js +30 -4
  159. package/node_modules/pi-lens/dist/clients/host-edit-normalize.js +1 -3
  160. package/node_modules/pi-lens/dist/clients/install-diagnostics.js +4 -2
  161. package/node_modules/pi-lens/dist/clients/installer/index.js +86 -77
  162. package/node_modules/pi-lens/dist/clients/instance-reaper.js +5 -2
  163. package/node_modules/pi-lens/dist/clients/instance-registry.js +4 -2
  164. package/node_modules/pi-lens/dist/clients/jscpd-client.js +6 -1
  165. package/node_modules/pi-lens/dist/clients/knip-client.js +29 -15
  166. package/node_modules/pi-lens/dist/clients/language-profile.js +4 -1
  167. package/node_modules/pi-lens/dist/clients/latency-logger.js +13 -2
  168. package/node_modules/pi-lens/dist/clients/lens-config.js +1 -1
  169. package/node_modules/pi-lens/dist/clients/lens-map.js +8 -3
  170. package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +1 -1
  171. package/node_modules/pi-lens/dist/clients/lsp/config.js +4 -6
  172. package/node_modules/pi-lens/dist/clients/lsp/edits.js +119 -32
  173. package/node_modules/pi-lens/dist/clients/lsp/index.js +94 -35
  174. package/node_modules/pi-lens/dist/clients/lsp/inferred-project.js +2 -1
  175. package/node_modules/pi-lens/dist/clients/lsp/jvm-runtime.js +4 -1
  176. package/node_modules/pi-lens/dist/clients/lsp/launch.js +11 -3
  177. package/node_modules/pi-lens/dist/clients/lsp/pending-aux-coverage.js +152 -0
  178. package/node_modules/pi-lens/dist/clients/lsp/server.js +19 -7
  179. package/node_modules/pi-lens/dist/clients/lsp/tsserver-sync.js +10 -2
  180. package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +9 -4
  181. package/node_modules/pi-lens/dist/clients/lsp-document-symbols.js +1 -3
  182. package/node_modules/pi-lens/dist/clients/lsp-mutation.js +10 -20
  183. package/node_modules/pi-lens/dist/clients/mcp/host-shim.js +1 -1
  184. package/node_modules/pi-lens/dist/clients/memory-sampler.js +73 -7
  185. package/node_modules/pi-lens/dist/clients/metrics-client.js +1 -3
  186. package/node_modules/pi-lens/dist/clients/middle-man-analysis.js +8 -3
  187. package/node_modules/pi-lens/dist/clients/module-report-lsp.js +7 -1
  188. package/node_modules/pi-lens/dist/clients/module-report.js +14 -17
  189. package/node_modules/pi-lens/dist/clients/ndjson-logger.js +3 -5
  190. package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +220 -0
  191. package/node_modules/pi-lens/dist/clients/package-manager.js +6 -1
  192. package/node_modules/pi-lens/dist/clients/pipeline.js +57 -9
  193. package/node_modules/pi-lens/dist/clients/project-conventions.js +2 -8
  194. package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +10 -7
  195. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +2 -1
  196. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +3 -1
  197. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +13 -9
  198. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +3 -1
  199. package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +5 -2
  200. package/node_modules/pi-lens/dist/clients/project-lens-config.js +12 -5
  201. package/node_modules/pi-lens/dist/clients/project-snapshot-fingerprint.js +48 -0
  202. package/node_modules/pi-lens/dist/clients/project-snapshot-persist-worker.js +15 -1
  203. package/node_modules/pi-lens/dist/clients/project-snapshot.js +472 -66
  204. package/node_modules/pi-lens/dist/clients/read-expansion.js +12 -2
  205. package/node_modules/pi-lens/dist/clients/read-guard-logger.js +5 -4
  206. package/node_modules/pi-lens/dist/clients/read-guard-tool-lines.js +5 -2
  207. package/node_modules/pi-lens/dist/clients/read-guard.js +1 -1
  208. package/node_modules/pi-lens/dist/clients/resource-sampler.js +1 -1
  209. package/node_modules/pi-lens/dist/clients/reverse-deps.js +6 -5
  210. package/node_modules/pi-lens/dist/clients/review-graph/builder.js +42 -17
  211. package/node_modules/pi-lens/dist/clients/review-graph/git-identity.js +8 -2
  212. package/node_modules/pi-lens/dist/clients/review-graph/import-resolvers.js +10 -1
  213. package/node_modules/pi-lens/dist/clients/review-graph/query.js +2 -1
  214. package/node_modules/pi-lens/dist/clients/review-graph/tsconfig-paths.js +4 -2
  215. package/node_modules/pi-lens/dist/clients/review-graph/workspace-modules.js +2 -2
  216. package/node_modules/pi-lens/dist/clients/ruff-client.js +6 -5
  217. package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +63 -31
  218. package/node_modules/pi-lens/dist/clients/runtime-context.js +12 -4
  219. package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +83 -4
  220. package/node_modules/pi-lens/dist/clients/runtime-session.js +14 -0
  221. package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +59 -3
  222. package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +148 -34
  223. package/node_modules/pi-lens/dist/clients/runtime-turn.js +147 -6
  224. package/node_modules/pi-lens/dist/clients/rust-client.js +1 -3
  225. package/node_modules/pi-lens/dist/clients/safe-spawn.js +150 -11
  226. package/node_modules/pi-lens/dist/clients/security-scan-client.js +1 -3
  227. package/node_modules/pi-lens/dist/clients/session-summary.js +3 -1
  228. package/node_modules/pi-lens/dist/clients/sg-runner.js +1 -3
  229. package/node_modules/pi-lens/dist/clients/source-filter.js +10 -6
  230. package/node_modules/pi-lens/dist/clients/source-walker.js +1 -1
  231. package/node_modules/pi-lens/dist/clients/spawn-timeout-cooldown.js +96 -0
  232. package/node_modules/pi-lens/dist/clients/startup-scan.js +4 -1
  233. package/node_modules/pi-lens/dist/clients/tool-definition.js +7 -0
  234. package/node_modules/pi-lens/dist/clients/tool-policy.js +26 -11
  235. package/node_modules/pi-lens/dist/clients/tool-render.js +2 -1
  236. package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +10 -4
  237. package/node_modules/pi-lens/dist/clients/tree-sitter-logger.js +2 -2
  238. package/node_modules/pi-lens/dist/clients/tree-sitter-symbol-extractor.js +12 -5
  239. package/node_modules/pi-lens/dist/clients/warm-attach.js +12 -5
  240. package/node_modules/pi-lens/dist/clients/widget-state.js +27 -11
  241. package/node_modules/pi-lens/dist/clients/word-index.js +3 -1
  242. package/node_modules/pi-lens/dist/clients/workspace-topology.js +8 -2
  243. package/node_modules/pi-lens/dist/clients/zizmor-config.js +9 -1
  244. package/node_modules/pi-lens/dist/i18n.js +13 -5
  245. package/node_modules/pi-lens/dist/index.js +10797 -8627
  246. package/node_modules/pi-lens/dist/mcp/server.js +3 -1
  247. package/node_modules/pi-lens/dist/tools/ast-grep-replace.js +68 -12
  248. package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +21 -7
  249. package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +164 -35
  250. package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +24 -7
  251. package/node_modules/pi-lens/dist/tools/lsp-navigation.js +3 -1
  252. package/node_modules/pi-lens/dist/tools/module-report.js +1 -1
  253. package/node_modules/pi-lens/dist/tools/project-report.js +1 -1
  254. package/node_modules/pi-lens/dist/tools/symbol-search.js +5 -2
  255. package/node_modules/pi-lens/docs/durable-store-audit-1202.md +1 -1
  256. package/node_modules/pi-lens/docs/servercapabilities.md +1 -1
  257. package/node_modules/pi-lens/package.json +160 -156
  258. package/node_modules/pi-lens/rules/typos/_typos.toml +2 -2
  259. package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +31 -13
  260. package/node_modules/pi-lens/scripts/download-grammars.js +9 -3
  261. package/node_modules/pi-lens/scripts/rpc-load-check.mjs +30 -9
  262. package/node_modules/pi-mcp-adapter/CHANGELOG.md +34 -0
  263. package/node_modules/pi-mcp-adapter/README.md +42 -13
  264. package/node_modules/pi-mcp-adapter/commands.ts +4 -2
  265. package/node_modules/pi-mcp-adapter/config.ts +35 -5
  266. package/node_modules/pi-mcp-adapter/direct-tools.ts +103 -92
  267. package/node_modules/pi-mcp-adapter/dist/agent-dir.d.ts +10 -0
  268. package/node_modules/pi-mcp-adapter/dist/agent-dir.js +63 -0
  269. package/node_modules/pi-mcp-adapter/dist/agent-dir.js.map +1 -0
  270. package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.d.ts +8 -0
  271. package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.js +356 -0
  272. package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.js.map +1 -0
  273. package/node_modules/pi-mcp-adapter/dist/config.d.ts +123 -0
  274. package/node_modules/pi-mcp-adapter/dist/config.js +1077 -0
  275. package/node_modules/pi-mcp-adapter/dist/config.js.map +1 -0
  276. package/node_modules/pi-mcp-adapter/dist/metadata-cache.d.ts +19 -0
  277. package/node_modules/pi-mcp-adapter/dist/metadata-cache.js +319 -0
  278. package/node_modules/pi-mcp-adapter/dist/metadata-cache.js.map +1 -0
  279. package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.d.ts +2 -0
  280. package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.js +156 -0
  281. package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.js.map +1 -0
  282. package/node_modules/pi-mcp-adapter/dist/resource-tools.d.ts +1 -0
  283. package/node_modules/pi-mcp-adapter/dist/resource-tools.js +15 -0
  284. package/node_modules/pi-mcp-adapter/dist/resource-tools.js.map +1 -0
  285. package/node_modules/pi-mcp-adapter/dist/types.d.ts +564 -0
  286. package/node_modules/pi-mcp-adapter/dist/types.js +287 -0
  287. package/node_modules/pi-mcp-adapter/dist/types.js.map +1 -0
  288. package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.d.ts +6 -0
  289. package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.js +37 -0
  290. package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.js.map +1 -0
  291. package/node_modules/pi-mcp-adapter/dist/ui-stream-types.d.ts +104 -0
  292. package/node_modules/pi-mcp-adapter/dist/ui-stream-types.js +59 -0
  293. package/node_modules/pi-mcp-adapter/dist/ui-stream-types.js.map +1 -0
  294. package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.d.ts +4 -0
  295. package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.js +27 -0
  296. package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.js.map +1 -0
  297. package/node_modules/pi-mcp-adapter/dist/utils.d.ts +32 -0
  298. package/node_modules/pi-mcp-adapter/dist/utils.js +338 -0
  299. package/node_modules/pi-mcp-adapter/dist/utils.js.map +1 -0
  300. package/node_modules/pi-mcp-adapter/failure-backoff.ts +23 -0
  301. package/node_modules/pi-mcp-adapter/index.ts +204 -82
  302. package/node_modules/pi-mcp-adapter/init.ts +36 -29
  303. package/node_modules/pi-mcp-adapter/lifecycle.ts +16 -8
  304. package/node_modules/pi-mcp-adapter/mcp-code.ts +2 -0
  305. package/node_modules/pi-mcp-adapter/mcp-oauth-provider.ts +66 -16
  306. package/node_modules/pi-mcp-adapter/mcp-output-guard.ts +95 -7
  307. package/node_modules/pi-mcp-adapter/mcp-probe.ts +18 -4
  308. package/node_modules/pi-mcp-adapter/mcp-references.ts +368 -0
  309. package/node_modules/pi-mcp-adapter/mcp-status.ts +8 -19
  310. package/node_modules/pi-mcp-adapter/metadata-cache.ts +20 -12
  311. package/node_modules/pi-mcp-adapter/namespace-tools.ts +276 -0
  312. package/node_modules/pi-mcp-adapter/package.json +24 -6
  313. package/node_modules/pi-mcp-adapter/proxy-modes.ts +66 -10
  314. package/node_modules/pi-mcp-adapter/search-ranking.ts +2 -0
  315. package/node_modules/pi-mcp-adapter/server-manager.ts +63 -12
  316. package/node_modules/pi-mcp-adapter/state.ts +1 -3
  317. package/node_modules/pi-mcp-adapter/tool-result-renderer.ts +16 -2
  318. package/node_modules/pi-mcp-adapter/types.ts +48 -1
  319. package/node_modules/pi-mcp-adapter/ui-server.ts +3 -19
  320. package/node_modules/pi-mcp-adapter/ui-session.ts +2 -1
  321. package/node_modules/pi-mcp-adapter/utils.ts +21 -19
  322. package/node_modules/pi-web-access/CHANGELOG.md +26 -0
  323. package/node_modules/pi-web-access/README.md +71 -14
  324. package/node_modules/pi-web-access/chrome-cookies.ts +115 -35
  325. package/node_modules/pi-web-access/credential-source.ts +6 -2
  326. package/node_modules/pi-web-access/curator-page.ts +5 -3
  327. package/node_modules/pi-web-access/curator-server.ts +2 -1
  328. package/node_modules/pi-web-access/extract.ts +89 -9
  329. package/node_modules/pi-web-access/fetch-params.ts +13 -0
  330. package/node_modules/pi-web-access/gemini-adc.ts +298 -0
  331. package/node_modules/pi-web-access/gemini-api.ts +59 -15
  332. package/node_modules/pi-web-access/gemini-search.ts +58 -18
  333. package/node_modules/pi-web-access/gemini-url-context.ts +3 -2
  334. package/node_modules/pi-web-access/gemini-web-config.ts +57 -7
  335. package/node_modules/pi-web-access/gemini-web.ts +9 -3
  336. package/node_modules/pi-web-access/github-api.ts +5 -4
  337. package/node_modules/pi-web-access/github-issue-pr.ts +700 -0
  338. package/node_modules/pi-web-access/index.ts +403 -297
  339. package/node_modules/pi-web-access/kimi-search.ts +234 -0
  340. package/node_modules/pi-web-access/openai-search.ts +118 -21
  341. package/node_modules/pi-web-access/package.json +3 -2
  342. package/node_modules/pi-web-access/ssrf-protection.ts +4 -1
  343. package/node_modules/pi-web-access/utils.ts +307 -1
  344. package/node_modules/pi-web-access/youtube-extract.ts +2 -2
  345. package/package.json +44 -41
  346. package/node_modules/@herbertgao/pi-copy-response/CHANGELOG.md +0 -49
  347. package/node_modules/@herbertgao/pi-copy-response/LICENSE +0 -22
  348. package/node_modules/@herbertgao/pi-handoff/CHANGELOG.md +0 -83
  349. package/node_modules/@herbertgao/pi-handoff/LICENSE +0 -22
  350. package/node_modules/@herbertgao/pi-handoff/package.json +0 -60
  351. package/node_modules/@herbertgao/pi-inline-skills/CHANGELOG.md +0 -57
  352. package/node_modules/@herbertgao/pi-mermaid-open/CHANGELOG.md +0 -39
  353. package/node_modules/@herbertgao/pi-mermaid-open/LICENSE +0 -22
  354. package/node_modules/@herbertgao/pi-preferred-thinking/CHANGELOG.md +0 -63
  355. package/node_modules/@herbertgao/pi-preferred-thinking/LICENSE +0 -22
  356. package/node_modules/@herbertgao/pi-recap/CHANGELOG.md +0 -101
  357. package/node_modules/@herbertgao/pi-recap/LICENSE +0 -22
  358. package/node_modules/@herbertgao/pi-recap/package.json +0 -55
  359. package/node_modules/@herbertgao/pi-rename/CHANGELOG.md +0 -49
  360. package/node_modules/@herbertgao/pi-rename/LICENSE +0 -22
  361. package/node_modules/@herbertgao/pi-rename/package.json +0 -63
  362. package/node_modules/@herbertgao/pi-titlebar-spinner/CHANGELOG.md +0 -25
  363. package/node_modules/@herbertgao/pi-titlebar-spinner/LICENSE +0 -22
  364. /package/node_modules/{resume-from → @herbertgao/resume-from}/LICENSE +0 -0
  365. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/adapter.d.ts +0 -0
  366. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/adapter.js +0 -0
  367. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/contract.d.ts +0 -0
  368. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/contract.js +0 -0
  369. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/entries.d.ts +0 -0
  370. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/entries.js +0 -0
  371. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/index.d.ts +0 -0
  372. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/index.js +0 -0
  373. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/layout.d.ts +0 -0
  374. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/layout.js +0 -0
  375. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/readback.d.ts +0 -0
  376. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/readback.js +0 -0
  377. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/reader.d.ts +0 -0
  378. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/redaction.d.ts +0 -0
  379. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/redaction.js +0 -0
  380. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/validation.d.ts +0 -0
  381. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/validation.js +0 -0
  382. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/writer.d.ts +0 -0
  383. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/claude-code/writer.js +0 -0
  384. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/contract.d.ts +0 -0
  385. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/contract.js +0 -0
  386. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/index.d.ts +0 -0
  387. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/index.js +0 -0
  388. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/read.d.ts +0 -0
  389. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/read.js +0 -0
  390. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/readback.d.ts +0 -0
  391. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/readback.js +0 -0
  392. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/redaction.d.ts +0 -0
  393. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/redaction.js +0 -0
  394. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/rollout.d.ts +0 -0
  395. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/rollout.js +0 -0
  396. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/validation.d.ts +0 -0
  397. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/validation.js +0 -0
  398. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/write.d.ts +0 -0
  399. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/codex/write.js +0 -0
  400. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/contract.d.ts +0 -0
  401. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/contract.js +0 -0
  402. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/adapter.d.ts +0 -0
  403. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/adapter.js +0 -0
  404. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/contract.d.ts +0 -0
  405. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/contract.js +0 -0
  406. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/format.d.ts +0 -0
  407. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/format.js +0 -0
  408. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/index.d.ts +0 -0
  409. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/index.js +0 -0
  410. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/parse.d.ts +0 -0
  411. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/parse.js +0 -0
  412. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/redaction.d.ts +0 -0
  413. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/redaction.js +0 -0
  414. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/serialize.d.ts +0 -0
  415. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/serialize.js +0 -0
  416. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/validate.d.ts +0 -0
  417. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/adapters/pi/validate.js +0 -0
  418. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/bin.d.ts +0 -0
  419. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/bin.js +0 -0
  420. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/contract.d.ts +0 -0
  421. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/contract.js +0 -0
  422. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/agents.d.ts +0 -0
  423. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/agents.js +0 -0
  424. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/args.d.ts +0 -0
  425. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/args.js +0 -0
  426. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/contract.d.ts +0 -0
  427. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/contract.js +0 -0
  428. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/index.d.ts +0 -0
  429. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/index.js +0 -0
  430. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/presentation.d.ts +0 -0
  431. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/presentation.js +0 -0
  432. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/render.d.ts +0 -0
  433. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/render.js +0 -0
  434. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/runner.d.ts +0 -0
  435. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/cli/runner.js +0 -0
  436. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/contract.d.ts +0 -0
  437. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/contract.js +0 -0
  438. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/entry.d.ts +0 -0
  439. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/entry.js +0 -0
  440. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/index.d.ts +0 -0
  441. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/index.js +0 -0
  442. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/command.d.ts +0 -0
  443. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/command.js +0 -0
  444. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/contract.d.ts +0 -0
  445. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/contract.js +0 -0
  446. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/index.d.ts +0 -0
  447. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/index.js +0 -0
  448. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/picker.d.ts +0 -0
  449. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/picker.js +0 -0
  450. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/presentation.d.ts +0 -0
  451. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/presentation.js +0 -0
  452. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/register.d.ts +0 -0
  453. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/register.js +0 -0
  454. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/ui.d.ts +0 -0
  455. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/pi-extension/ui.js +0 -0
  456. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/profile.d.ts +0 -0
  457. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/profile.js +0 -0
  458. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/registry.d.ts +0 -0
  459. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/registry.js +0 -0
  460. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/wiring.d.ts +0 -0
  461. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/host/wiring.js +0 -0
  462. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/confirmation.d.ts +0 -0
  463. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/confirmation.js +0 -0
  464. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/contract.d.ts +0 -0
  465. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/contract.js +0 -0
  466. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/contract.d.ts +0 -0
  467. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/contract.js +0 -0
  468. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/errors.d.ts +0 -0
  469. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/errors.js +0 -0
  470. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/finder.d.ts +0 -0
  471. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/finder.js +0 -0
  472. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/homes.d.ts +0 -0
  473. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/homes.js +0 -0
  474. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/index.d.ts +0 -0
  475. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/index.js +0 -0
  476. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/ordering.d.ts +0 -0
  477. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/discovery/ordering.js +0 -0
  478. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/errors.d.ts +0 -0
  479. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/errors.js +0 -0
  480. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/index.d.ts +0 -0
  481. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/index.js +0 -0
  482. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/contract.d.ts +0 -0
  483. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/contract.js +0 -0
  484. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/errors.d.ts +0 -0
  485. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/errors.js +0 -0
  486. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/handover.d.ts +0 -0
  487. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/handover.js +0 -0
  488. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/index.d.ts +0 -0
  489. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/index.js +0 -0
  490. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/lander.d.ts +0 -0
  491. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/lander.js +0 -0
  492. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/marker.d.ts +0 -0
  493. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/landing/marker.js +0 -0
  494. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/pipeline.d.ts +0 -0
  495. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/pipeline.js +0 -0
  496. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/builder.d.ts +0 -0
  497. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/builder.js +0 -0
  498. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/contract.d.ts +0 -0
  499. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/contract.js +0 -0
  500. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/format.d.ts +0 -0
  501. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/format.js +0 -0
  502. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/index.d.ts +0 -0
  503. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/index.js +0 -0
  504. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/warnings.d.ts +0 -0
  505. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/preview/warnings.js +0 -0
  506. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/transfer/contract.d.ts +0 -0
  507. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/transfer/contract.js +0 -0
  508. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/transfer/index.d.ts +0 -0
  509. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/transfer/index.js +0 -0
  510. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/transfer/rules.d.ts +0 -0
  511. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/transfer/rules.js +0 -0
  512. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/wiring.d.ts +0 -0
  513. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/import/wiring.js +0 -0
  514. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/index.d.ts +0 -0
  515. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/index.js +0 -0
  516. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/contract.d.ts +0 -0
  517. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/contract.js +0 -0
  518. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/defaults.d.ts +0 -0
  519. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/defaults.js +0 -0
  520. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/errors.d.ts +0 -0
  521. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/errors.js +0 -0
  522. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/index.d.ts +0 -0
  523. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/index.js +0 -0
  524. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/loader.d.ts +0 -0
  525. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/loader.js +0 -0
  526. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/paths.d.ts +0 -0
  527. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/paths.js +0 -0
  528. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/validate.d.ts +0 -0
  529. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/config/validate.js +0 -0
  530. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/contract.d.ts +0 -0
  531. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/contract.js +0 -0
  532. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/git.d.ts +0 -0
  533. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/git.js +0 -0
  534. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/index.d.ts +0 -0
  535. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/index.js +0 -0
  536. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/reader.d.ts +0 -0
  537. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/repo/reader.js +0 -0
  538. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/store/contract.d.ts +0 -0
  539. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/store/contract.js +0 -0
  540. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/store/file-committer.d.ts +0 -0
  541. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/store/file-committer.js +0 -0
  542. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/store/index.d.ts +0 -0
  543. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/store/index.js +0 -0
  544. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/tokens/contract.d.ts +0 -0
  545. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/tokens/contract.js +0 -0
  546. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/tokens/estimator.d.ts +0 -0
  547. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/tokens/estimator.js +0 -0
  548. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/tokens/index.d.ts +0 -0
  549. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/platform/tokens/index.js +0 -0
  550. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/session/contract.d.ts +0 -0
  551. /package/node_modules/{resume-from → @herbertgao/resume-from}/dist/session/contract.js +0 -0
  552. /package/node_modules/{@herbertgao → @tifan}/pi-copy-response/src/index.ts +0 -0
  553. /package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/complete-text.ts +0 -0
  554. /package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/session-query.ts +0 -0
  555. /package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/src/index.ts +0 -0
  556. /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/herdr-plugin/herdr-plugin.toml +0 -0
  557. /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/herdr-plugin/viewer.mjs +0 -0
  558. /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/src/index.ts +0 -0
  559. /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/index.ts +0 -0
  560. /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/model-picker.ts +0 -0
  561. /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/sanitize.ts +0 -0
  562. /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/tui.ts +0 -0
  563. /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/model-picker.ts +0 -0
  564. /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/naming.ts +0 -0
  565. /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/sanitize.ts +0 -0
  566. /package/node_modules/{@herbertgao → @tifan}/pi-titlebar-spinner/src/index.ts +0 -0
@@ -1,5 +1,8 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ import { spawn } from "node:child_process";
1
3
  import { existsSync, readFileSync } from "node:fs";
2
- import { homedir, hostname } from "node:os";
4
+ import { mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
5
+ import { homedir, hostname, tmpdir } from "node:os";
3
6
  import { join } from "node:path";
4
7
 
5
8
  export function getWebSearchConfigDir(): string {
@@ -186,3 +189,306 @@ export function mapFfmpegError(err: unknown): string {
186
189
  const snippet = trimErrorText(stderr || message);
187
190
  return snippet ? `ffmpeg failed: ${snippet}` : "ffmpeg failed";
188
191
  }
192
+
193
+ const proxyStorage = new AsyncLocalStorage<string | null>();
194
+
195
+ export function normalizeProxyUrl(value: unknown, source: string): string | null {
196
+ if (value === undefined || value === null) return null;
197
+ if (typeof value !== "string") throw new Error(`${source} must be an http(s) proxy URL string`);
198
+ const trimmed = value.trim();
199
+ if (!trimmed) return null;
200
+ let parsed: URL;
201
+ try {
202
+ parsed = new URL(trimmed);
203
+ } catch {
204
+ throw new Error(`${source} must be a valid proxy URL: ${JSON.stringify(trimmed)}`);
205
+ }
206
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
207
+ throw new Error(`${source} must use the http:// or https:// scheme: ${trimmed}`);
208
+ }
209
+ if (!parsed.hostname) throw new Error(`${source} must include a proxy host: ${trimmed}`);
210
+ parsed.hash = "";
211
+ parsed.search = "";
212
+ return parsed.toString();
213
+ }
214
+
215
+ function redactProxyUrl(value: string): string {
216
+ const parsed = new URL(value);
217
+ if (parsed.username) parsed.username = "redacted";
218
+ if (parsed.password) parsed.password = "redacted";
219
+ return parsed.toString();
220
+ }
221
+
222
+ function loadConfiguredProxy(): string | null {
223
+ let configured: unknown;
224
+ const path = getWebSearchConfigPath();
225
+ if (existsSync(path)) {
226
+ let raw: unknown;
227
+ try {
228
+ raw = JSON.parse(readFileSync(path, "utf-8"));
229
+ } catch (err) {
230
+ const message = err instanceof Error ? err.message : String(err);
231
+ throw new Error(`Failed to load proxy config from ${path}: ${message}`);
232
+ }
233
+ if (raw && typeof raw === "object" && !Array.isArray(raw)) configured = (raw as { proxy?: unknown }).proxy;
234
+ }
235
+ if (configured === undefined) return null;
236
+ return normalizeProxyUrl(configured, `proxy in ${getWebSearchConfigPath()}`);
237
+ }
238
+
239
+ export function runWithProxy<T>(proxy: string | undefined, fn: () => T): T {
240
+ if (proxy === undefined) return fn();
241
+ const normalized = normalizeProxyUrl(proxy, "proxy");
242
+ return proxyStorage.run(normalized, fn);
243
+ }
244
+
245
+ export function getActiveProxy(): string | null {
246
+ const scoped = proxyStorage.getStore();
247
+ return scoped !== undefined ? scoped : loadConfiguredProxy();
248
+ }
249
+
250
+ export function hasScopedProxyDecision(): boolean {
251
+ return proxyStorage.getStore() !== undefined;
252
+ }
253
+
254
+ function noProxyEntryMatches(hostname: string, entry: string): boolean {
255
+ if (!entry) return false;
256
+ if (entry === "*") return true;
257
+ let host = entry;
258
+ if (host.startsWith("[")) {
259
+ const close = host.indexOf("]");
260
+ if (close > 0) host = host.slice(0, close + 1);
261
+ } else {
262
+ const colon = host.lastIndexOf(":");
263
+ if (colon > -1 && /^\d+$/.test(host.slice(colon + 1))) host = host.slice(0, colon);
264
+ }
265
+ host = host.toLowerCase().replace(/^\[|\]$/g, "");
266
+ if (!host) return false;
267
+ return hostname === host || hostname.endsWith(host.startsWith(".") ? host : `.${host}`);
268
+ }
269
+
270
+ /** True when a URL must NOT be sent through the active proxy. */
271
+ export function isProxyBypassedUrl(url: URL): boolean {
272
+ const hostname = url.hostname.toLowerCase().replace(/^\[|\]$/g, "");
273
+ if (hostname === "localhost" || hostname.endsWith(".localhost") || hostname === "127.0.0.1" || hostname === "::1") return true;
274
+ const noProxy = process.env.NO_PROXY || process.env.no_proxy;
275
+ if (noProxy && noProxy.split(",").some((entry) => noProxyEntryMatches(hostname, entry.trim()))) return true;
276
+ return false;
277
+ }
278
+
279
+ export interface ProxiedRequestInit extends RequestInit {
280
+ /** Caller-supplied proxy; bypasses AsyncLocalStorage for pLimit-safe contexts. */
281
+ __proxy?: string;
282
+ }
283
+
284
+ interface ProxiedFetch {
285
+ (input: RequestInfo | URL, init?: ProxiedRequestInit): Promise<Response>;
286
+ __piWebAccessProxyFetch?: boolean;
287
+ }
288
+
289
+ /** Wraps globalThis.fetch so every http(s) call routes through curl while a proxy is active. Idempotent. */
290
+ export function installGlobalProxyFetch(): void {
291
+ const current = globalThis.fetch as ProxiedFetch;
292
+ if (typeof current !== "function" || current.__piWebAccessProxyFetch === true) return;
293
+ const nativeFetch = current;
294
+ const wrapped: ProxiedFetch = ((input: RequestInfo | URL, init?: ProxiedRequestInit) => {
295
+ // Prefer caller-attached __proxy (survives pLimit context loss) over AsyncLocalStorage.
296
+ const proxy = init?.__proxy ?? getActiveProxy();
297
+ if (!proxy) return nativeFetch(input, init);
298
+ let url: URL | null = null;
299
+ try {
300
+ url = new URL(typeof input === "string" || input instanceof URL ? input : input.url);
301
+ } catch {
302
+ url = null;
303
+ }
304
+ if (!url || (url.protocol !== "http:" && url.protocol !== "https:") || isProxyBypassedUrl(url)) {
305
+ return nativeFetch(input, init);
306
+ }
307
+ return fetchViaCurl(url, init ?? {}, proxy);
308
+ });
309
+ wrapped.__piWebAccessProxyFetch = true;
310
+ globalThis.fetch = wrapped;
311
+ }
312
+
313
+ function parseHeaderDump(dump: string): { status: number; statusText: string; headers: Array<[string, string]> } {
314
+ const blocks = dump.split(/\r?\n\r?\n/).filter((block) => /^HTTP\/[\d.]+\s+\d{3}/.test(block.trim()));
315
+ const block = (blocks.length > 0 ? blocks[blocks.length - 1] : "").trim();
316
+ const lines = block.split(/\r?\n/);
317
+ let status = 0;
318
+ let statusText = "";
319
+ const headers: Array<[string, string]> = [];
320
+ for (const line of lines) {
321
+ const match = /^HTTP\/[\d.]+\s+(\d{3})(?:\s+(.*))?$/.exec(line.trim());
322
+ if (match) {
323
+ status = Number(match[1]);
324
+ statusText = match[2] ?? "";
325
+ headers.length = 0;
326
+ continue;
327
+ }
328
+ const separator = line.indexOf(":");
329
+ if (separator > 0) {
330
+ const name = line.slice(0, separator).trim();
331
+ if (name.toLowerCase() === "content-encoding" || name.toLowerCase() === "content-length") continue;
332
+ headers.push([name, line.slice(separator + 1).trim()]);
333
+ }
334
+ }
335
+ return { status, statusText, headers };
336
+ }
337
+
338
+ class CurlTransportError extends Error {}
339
+
340
+ async function fetchViaCurl(url: URL, init: RequestInit, proxyUrl: string): Promise<Response> {
341
+ let current = url;
342
+ let currentInit = init;
343
+ for (let redirects = 0; ; redirects++) {
344
+ const response = await fetchViaCurlOnce(current, currentInit, proxyUrl);
345
+ const location = response.headers.get("location");
346
+ if (!location || ![301, 302, 303, 307, 308].includes(response.status)) {
347
+ if (redirects > 0) Object.defineProperty(response, "redirected", { value: true, configurable: true });
348
+ return response;
349
+ }
350
+ if (currentInit.redirect === "manual") return response;
351
+ if (currentInit.redirect === "error") throw new TypeError(`Proxy fetch redirect blocked from ${current.toString()}`);
352
+ if (redirects === 20) throw new Error(`Too many proxy redirects from ${url.toString()}`);
353
+
354
+ const next = new URL(location, current);
355
+ if (next.protocol !== "http:" && next.protocol !== "https:") throw new Error(`Proxy redirect from ${current.origin} must use HTTP(S)`);
356
+
357
+ let headers = new Headers(currentInit.headers);
358
+ let nextInit: RequestInit;
359
+ const method = currentInit.method?.toUpperCase() ?? "GET";
360
+ if (((response.status === 301 || response.status === 302) && method === "POST") || (response.status === 303 && method !== "GET" && method !== "HEAD")) {
361
+ for (const name of ["Content-Encoding", "Content-Language", "Content-Location", "Content-Type"]) headers.delete(name);
362
+ const { body: _body, ...withoutBody } = currentInit;
363
+ nextInit = { ...withoutBody, method: "GET", headers };
364
+ } else {
365
+ nextInit = { ...currentInit, headers };
366
+ }
367
+
368
+ if (next.origin !== current.origin) {
369
+ headers = new Headers();
370
+ nextInit = { ...nextInit, headers };
371
+ }
372
+ current = next;
373
+ currentInit = nextInit;
374
+ }
375
+ }
376
+
377
+ async function fetchViaCurlOnce(url: URL, init: RequestInit, proxyUrl: string): Promise<Response> {
378
+ const method = (init.method ?? "GET").toUpperCase();
379
+ const headers = new Headers(init.headers);
380
+
381
+ const dir = await mkdtemp(join(tmpdir(), "pi-web-access-proxy-"));
382
+ const headerFile = join(dir, "headers");
383
+ const bodyFile = join(dir, "body");
384
+ const requestBodyFile = join(dir, "request-body");
385
+
386
+ const args: string[] = [
387
+ "--silent",
388
+ "--show-error",
389
+ "--compressed",
390
+ "--connect-timeout", "20",
391
+ "-x", proxyUrl,
392
+ "-D", headerFile,
393
+ "--output", bodyFile,
394
+ "--write-out", "%{json}",
395
+ ];
396
+
397
+ if (method !== "GET" && method !== "HEAD") args.push("-X", method);
398
+
399
+ for (const [name, value] of headers.entries()) {
400
+ if (value === "") continue;
401
+ args.push("-H", `${name}: ${value}`);
402
+ }
403
+
404
+ const body = init.body;
405
+ if (body !== undefined && body !== null) {
406
+ let buffer: Buffer;
407
+ if (typeof body === "string") buffer = Buffer.from(body, "utf-8");
408
+ else if (body instanceof URLSearchParams) buffer = Buffer.from(body.toString(), "utf-8");
409
+ else if (body instanceof ArrayBuffer) buffer = Buffer.from(body);
410
+ else if (ArrayBuffer.isView(body)) buffer = Buffer.from(body.buffer, body.byteOffset, body.byteLength);
411
+ else throw new Error(`Unsupported request body type for proxy fetch: ${typeof body}`);
412
+ await writeFile(requestBodyFile, buffer);
413
+ args.push("--data-binary", `@${requestBodyFile}`);
414
+ if (method === "GET") args.unshift("-X", "GET");
415
+ }
416
+
417
+ args.push(url.toString());
418
+
419
+ const signal = init.signal ?? null;
420
+ let stdout: string;
421
+ try {
422
+ stdout = await new Promise<string>((resolve, reject) => {
423
+ if (signal?.aborted) {
424
+ reject(new DOMException("The operation was aborted.", "AbortError"));
425
+ return;
426
+ }
427
+ const child = spawn("curl", args, { windowsHide: true });
428
+ let out = "";
429
+ let stderr = "";
430
+ const onAbort = () => { try { child.kill(); } catch {} };
431
+ if (signal) {
432
+ signal.addEventListener("abort", onAbort, { once: true });
433
+ }
434
+ child.stdout?.on("data", (chunk: Buffer) => { out += chunk.toString("utf-8"); });
435
+ child.stderr?.on("data", (chunk: Buffer) => { if (stderr.length < 4096) stderr += chunk.toString("utf-8"); });
436
+ child.once("error", (err: NodeJS.ErrnoException) => {
437
+ signal?.removeEventListener("abort", onAbort);
438
+ reject(new CurlTransportError(err.code === "ENOENT"
439
+ ? "curl executable not found on PATH; proxy transport requires curl"
440
+ : `curl failed to start: ${err.message}`));
441
+ });
442
+ child.once("close", (code) => {
443
+ signal?.removeEventListener("abort", onAbort);
444
+ if (signal?.aborted) return reject(new DOMException("The operation was aborted.", "AbortError"));
445
+ if (code !== 0 && !out.trim()) {
446
+ return reject(new CurlTransportError(`curl exited with code ${code ?? "unknown"} via ${redactProxyUrl(proxyUrl)}${stderr.trim() ? `: ${stderr.trim()}` : ""}`));
447
+ }
448
+ resolve(out);
449
+ });
450
+ });
451
+ } catch (err) {
452
+ await rm(dir, { recursive: true, force: true }).catch(() => {});
453
+ if (err instanceof CurlTransportError) throw new Error(err.message);
454
+ throw err;
455
+ }
456
+
457
+ let bodyBuffer = Buffer.alloc(0);
458
+ let dump = "";
459
+ try {
460
+ [dump, bodyBuffer] = await Promise.all([readFile(headerFile, "utf-8"), readFile(bodyFile)]);
461
+ } catch {
462
+ // HEAD or empty responses may not produce output files.
463
+ } finally {
464
+ await rm(dir, { recursive: true, force: true }).catch(() => {});
465
+ }
466
+
467
+ const { status, statusText, headers: responseHeaders } = parseHeaderDump(dump);
468
+ if (status === 0) {
469
+ throw new Error(`Proxy fetch to ${url.toString()} via ${redactProxyUrl(proxyUrl)} returned no HTTP status`);
470
+ }
471
+
472
+ let finalUrl = url.toString();
473
+ let redirected = false;
474
+ try {
475
+ const trimmed = stdout.trim();
476
+ if (trimmed.startsWith("{")) {
477
+ const writeOut = JSON.parse(trimmed) as { url_effective?: string; num_redirects?: number };
478
+ if (writeOut.url_effective) finalUrl = writeOut.url_effective;
479
+ redirected = (writeOut.num_redirects ?? 0) > 0;
480
+ }
481
+ } catch {
482
+ // Older curl without %{json}; the header dump already provided the status.
483
+ }
484
+
485
+ const nullBody = status === 204 || status === 205 || status === 304;
486
+ const response = new Response(nullBody ? null : new Uint8Array(bodyBuffer), {
487
+ status,
488
+ statusText: statusText || undefined,
489
+ headers: new Headers(responseHeaders),
490
+ });
491
+ Object.defineProperty(response, "url", { value: finalUrl, configurable: true });
492
+ Object.defineProperty(response, "redirected", { value: redirected, configurable: true });
493
+ return response;
494
+ }
@@ -3,7 +3,7 @@ import { existsSync, readFileSync } from "node:fs";
3
3
  import { activityMonitor } from "./activity.ts";
4
4
  import { canAttachImages } from "./feature-config.ts";
5
5
  import { isGeminiWebAvailable, queryWithCookies } from "./gemini-web.ts";
6
- import { isGeminiApiAvailable, queryGeminiApiWithVideo } from "./gemini-api.ts";
6
+ import { isGeminiApiAvailableWithVideo, queryGeminiApiWithVideo } from "./gemini-api.ts";
7
7
  import { isPerplexityAvailable, searchWithPerplexity } from "./perplexity.ts";
8
8
  import { extractHeadingTitle, type ExtractedContent, type FrameResult, type VideoFrame } from "./extract.ts";
9
9
  import { formatSeconds, readExecError, isTimeoutError, trimErrorText, mapFfmpegError, getWebSearchConfigPath } from "./utils.ts";
@@ -266,7 +266,7 @@ async function tryGeminiApi(
266
266
  attemptErrors: string[],
267
267
  ): Promise<ExtractedContent | null> {
268
268
  try {
269
- if (!isGeminiApiAvailable()) return null;
269
+ if (!isGeminiApiAvailableWithVideo()) return null;
270
270
 
271
271
  if (signal?.aborted) return null;
272
272
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@herbertgao/pi-extensions",
3
- "version": "2026.8.10",
3
+ "version": "2026.8.12",
4
4
  "description": "Aggregate installer for HerbertGao-maintained Pi extensions.",
5
5
  "keywords": [
6
6
  "extensions",
@@ -22,7 +22,8 @@
22
22
  "files": [
23
23
  "examples/pi-footer.json",
24
24
  "README.md",
25
- "LICENSE"
25
+ "LICENSE",
26
+ "THIRD_PARTY_NOTICES.md"
26
27
  ],
27
28
  "type": "module",
28
29
  "publishConfig": {
@@ -36,42 +37,44 @@
36
37
  "dependencies": {
37
38
  "@ast-grep/cli": "^0.45.0",
38
39
  "@ast-grep/napi": "^0.45.0",
39
- "@czottmann/pi-automode": "1.12.0",
40
+ "@czottmann/pi-automode": "1.13.0",
40
41
  "@dietrichgebert/ponytail": "4.9.0",
41
42
  "@earendil-works/pi-coding-agent": "^0.84.2",
42
43
  "@earendil-works/pi-tui": "^0.84.2",
43
44
  "@effect/platform-node": "4.0.0-beta.103",
44
45
  "@effect/platform-node-shared": "4.0.0-beta.103",
45
- "@herbertgao/pi-cc-extensions": "0.8.58",
46
- "@herbertgao/pi-copy-response": "0.2.6",
47
- "@herbertgao/pi-handoff": "2.0.0",
48
- "@herbertgao/pi-inline-skills": "1.0.5",
49
- "@herbertgao/pi-mermaid-open": "0.2.0",
50
- "@herbertgao/pi-preferred-thinking": "0.4.0",
51
- "@herbertgao/pi-recap": "0.4.5",
52
- "@herbertgao/pi-rename": "0.5.0",
46
+ "@herbertgao/pi-cc-extensions": "0.8.59",
53
47
  "@herbertgao/pi-stash": "0.1.2",
54
- "@herbertgao/pi-subagents": "0.16.1",
55
- "@herbertgao/pi-titlebar-spinner": "0.1.3",
56
- "@juicesharp/rpiv-ask-user-question": "2.7.0",
57
- "@juicesharp/rpiv-config": "^2.7.0",
48
+ "@herbertgao/pi-subagents": "0.17.0",
49
+ "@herbertgao/resume-from": "0.2.0",
50
+ "@juicesharp/rpiv-ask-user-question": "2.7.1",
51
+ "@juicesharp/rpiv-config": "^2.7.1",
58
52
  "@modelcontextprotocol/client": "2.0.0",
59
53
  "@modelcontextprotocol/core": "2.0.0",
60
54
  "@modelcontextprotocol/ext-apps": "^1.2.2",
61
55
  "@modelcontextprotocol/sdk": "^1.29.0",
62
56
  "@mozilla/readability": "^0.6.0",
63
57
  "@napi-rs/keyring": "^1.3.0",
64
- "@narumitw/pi-btw": "0.55.1",
65
- "@narumitw/pi-tui-kit": "^0.57.0",
58
+ "@narumitw/pi-btw": "0.55.3",
59
+ "@narumitw/pi-tui-kit": "^0.58.1",
66
60
  "@noble/ed25519": "^3.1.0",
67
61
  "@pi-plugins/fast-mode": "0.1.10",
68
62
  "@shikijs/cli": "^4.0.2",
69
63
  "@sinclair/typebox": "^0.34.49",
64
+ "@tifan/pi-copy-response": "0.2.6",
65
+ "@tifan/pi-handoff": "2.0.1",
66
+ "@tifan/pi-inline-skills": "1.0.5",
67
+ "@tifan/pi-mermaid-open": "0.2.0",
68
+ "@tifan/pi-preferred-thinking": "1.0.0",
69
+ "@tifan/pi-recap": "0.4.5",
70
+ "@tifan/pi-rename": "0.5.1",
71
+ "@tifan/pi-titlebar-spinner": "0.1.3",
70
72
  "ajv": "^8.17.1",
71
73
  "ajv-formats": "^3.0.1",
72
74
  "chalk": "^6.0.0",
73
75
  "croner": "^10.0.1",
74
76
  "cross-spawn": "^7.0.6",
77
+ "defuddle": "0.19.3",
75
78
  "effect": "4.0.0-beta.103",
76
79
  "gpt-tokenizer": "^3.4.0",
77
80
  "grok-mermaid": "0.2.2",
@@ -83,19 +86,19 @@
83
86
  "open": "^10.2.0",
84
87
  "p-limit": "^6.1.0",
85
88
  "pi-footer": "0.5.1",
86
- "pi-lens": "4.1.1",
87
- "pi-mcp-adapter": "2.27.0",
88
- "pi-web-access": "0.24.2",
89
+ "pi-lens": "4.1.2",
90
+ "pi-mcp-adapter": "2.28.0",
91
+ "pi-web-access": "0.25.0",
89
92
  "pidusage": "^4.0.1",
90
93
  "promise.try": "^2.0.1",
91
94
  "qrcode-terminal": "^0.12.0",
92
95
  "recheck": "^4.5.0",
93
96
  "remote-pi": "0.7.0",
94
- "resume-from": "0.2.0",
95
97
  "smol-toml": "^1.6.1",
96
98
  "strip-json-comments": "^5.0.3",
97
99
  "turndown": "^7.2.0",
98
100
  "typebox": "^1.1.38",
101
+ "unbash": "4.0.10",
99
102
  "undici": "^8.9.0",
100
103
  "unpdf": "^1.6.2",
101
104
  "vscode-jsonrpc": "^9.0.0",
@@ -109,25 +112,25 @@
109
112
  "@czottmann/pi-automode",
110
113
  "@dietrichgebert/ponytail",
111
114
  "@herbertgao/pi-cc-extensions",
112
- "@herbertgao/pi-copy-response",
113
- "@herbertgao/pi-handoff",
114
- "@herbertgao/pi-inline-skills",
115
- "@herbertgao/pi-mermaid-open",
116
- "@herbertgao/pi-preferred-thinking",
117
- "@herbertgao/pi-recap",
118
- "@herbertgao/pi-rename",
119
115
  "@herbertgao/pi-stash",
120
116
  "@herbertgao/pi-subagents",
121
- "@herbertgao/pi-titlebar-spinner",
117
+ "@herbertgao/resume-from",
122
118
  "@juicesharp/rpiv-ask-user-question",
123
119
  "@narumitw/pi-btw",
124
120
  "@pi-plugins/fast-mode",
121
+ "@tifan/pi-copy-response",
122
+ "@tifan/pi-handoff",
123
+ "@tifan/pi-inline-skills",
124
+ "@tifan/pi-mermaid-open",
125
+ "@tifan/pi-preferred-thinking",
126
+ "@tifan/pi-recap",
127
+ "@tifan/pi-rename",
128
+ "@tifan/pi-titlebar-spinner",
125
129
  "pi-footer",
126
130
  "pi-lens",
127
131
  "pi-mcp-adapter",
128
132
  "pi-web-access",
129
- "remote-pi",
130
- "resume-from"
133
+ "remote-pi"
131
134
  ],
132
135
  "engines": {
133
136
  "node": ">=24"
@@ -136,17 +139,18 @@
136
139
  "extensions": [
137
140
  "./node_modules/@dietrichgebert/ponytail/pi-extension/index.js",
138
141
  "./node_modules/@herbertgao/pi-cc-extensions/extensions/index.ts",
139
- "./node_modules/@herbertgao/pi-copy-response/src/index.ts",
140
- "./node_modules/@herbertgao/pi-handoff/src/index.ts",
141
- "./node_modules/@herbertgao/pi-handoff/src/session-query.ts",
142
- "./node_modules/@herbertgao/pi-inline-skills/src/index.ts",
143
- "./node_modules/@herbertgao/pi-mermaid-open/src/index.ts",
144
- "./node_modules/@herbertgao/pi-preferred-thinking/src/index.ts",
145
- "./node_modules/@herbertgao/pi-recap/src/index.ts",
146
- "./node_modules/@herbertgao/pi-rename/src/index.ts",
142
+ "./node_modules/@tifan/pi-copy-response/src/index.ts",
143
+ "./node_modules/@herbertgao/resume-from/shims/pi/extensions/resume-from.js",
144
+ "./node_modules/@tifan/pi-handoff/src/index.ts",
145
+ "./node_modules/@tifan/pi-handoff/src/session-query.ts",
146
+ "./node_modules/@tifan/pi-inline-skills/src/index.ts",
147
+ "./node_modules/@tifan/pi-mermaid-open/src/index.ts",
148
+ "./node_modules/@tifan/pi-preferred-thinking/src/index.ts",
149
+ "./node_modules/@tifan/pi-recap/src/index.ts",
150
+ "./node_modules/@tifan/pi-rename/src/index.ts",
147
151
  "./node_modules/@herbertgao/pi-stash/src/index.ts",
148
152
  "./node_modules/@herbertgao/pi-subagents/src/index.ts",
149
- "./node_modules/@herbertgao/pi-titlebar-spinner/src/index.ts",
153
+ "./node_modules/@tifan/pi-titlebar-spinner/src/index.ts",
150
154
  "./node_modules/@juicesharp/rpiv-ask-user-question/index.ts",
151
155
  "./node_modules/@narumitw/pi-btw/dist/index.ts",
152
156
  "./node_modules/@pi-plugins/fast-mode/dist/index.mjs",
@@ -154,7 +158,6 @@
154
158
  "./node_modules/pi-lens/dist/index.js",
155
159
  "./node_modules/pi-web-access/index.ts",
156
160
  "./node_modules/remote-pi/dist/index.js",
157
- "./node_modules/resume-from/shims/pi/extensions/resume-from.js",
158
161
  "./node_modules/@czottmann/pi-automode/extensions/auto-mode.ts",
159
162
  "./node_modules/pi-footer/src/index.ts"
160
163
  ],
@@ -1,49 +0,0 @@
1
- # @tifan/pi-copy-response
2
-
3
- ## 0.2.6
4
-
5
- ### Patch Changes
6
-
7
- - [`f0090c2`](https://github.com/tifandotme/pi-extensions/commit/f0090c2a5c648febc7281f88c25634414af22b99) Thanks [@tifandotme](https://github.com/tifandotme)! - Use Pi 0.78.1's new `ctx.mode` field to require interactive TUI mode before opening the `/copy-response` picker.
8
-
9
- ## 0.2.5
10
-
11
- ### Patch Changes
12
-
13
- - [`ca8e467`](https://github.com/tifandotme/pi-extensions/commit/ca8e467068b4b25677e6752d94caac53fa4a56e7) Thanks [@tifandotme](https://github.com/tifandotme)! - Add CHANGELOG links in README.
14
-
15
- ## 0.2.4
16
-
17
- ### Patch Changes
18
-
19
- - [`3018901`](https://github.com/tifandotme/pi-extensions/commit/3018901a1c77bdf356c495ed95eae3d64ae950f6) Thanks [@tifandotme](https://github.com/tifandotme)! - Update README
20
-
21
- ## 0.2.3
22
-
23
- ### Patch Changes
24
-
25
- - [`b36a9c4`](https://github.com/tifandotme/pi-extensions/commit/b36a9c47fe8073017a54b2fb1828610fde7e66a2) Thanks [@tifandotme](https://github.com/tifandotme)! - Update readme to fix image rendering. Adjust author in package.json
26
-
27
- ## 0.2.2
28
-
29
- ### Patch Changes
30
-
31
- - [`e5567f3`](https://github.com/tifandotme/pi-extensions/commit/e5567f35167c64bee8c28c14d4a578d740d93b17) Thanks [@tifandotme](https://github.com/tifandotme)! - Update README.md to use remote images
32
-
33
- ## 0.2.1
34
-
35
- ### Patch Changes
36
-
37
- - [`f1cfdbd`](https://github.com/tifandotme/pi-extensions/commit/f1cfdbdb9cd36e61cd63cb8f21e0cfff1ead17fc) Thanks [@tifandotme](https://github.com/tifandotme)! - update readme
38
-
39
- ## 0.2.0
40
-
41
- ### Minor Changes
42
-
43
- - [`0e1b896`](https://github.com/tifandotme/pi-extensions/commit/0e1b8967376c23e43fd3ddd182933cc4ec869889) Thanks [@tifandotme](https://github.com/tifandotme)! - Add a full-text preview to the response picker before copying an assistant response.
44
-
45
- ## 0.1.0
46
-
47
- ### Minor Changes
48
-
49
- - Initial release.
@@ -1,22 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Tifan Dwi Avianto
4
- Copyright (c) 2026 Herbert Gao
5
-
6
- Permission is hereby granted, free of charge, to any person obtaining a copy
7
- of this software and associated documentation files (the "Software"), to deal
8
- in the Software without restriction, including without limitation the rights
9
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- copies of the Software, and to permit persons to whom the Software is
11
- furnished to do so, subject to the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be included in
14
- all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
- THE SOFTWARE.
@@ -1,83 +0,0 @@
1
- # @tifan/pi-handoff
2
-
3
- ## 2.0.0
4
-
5
- ### Major Changes
6
-
7
- - [#116](https://github.com/HerbertGao/pi-extensions/pull/116) [`ecda398`](https://github.com/HerbertGao/pi-extensions/commit/ecda398b9a95212c512d53325c617e485e6ded8d) Thanks [@HerbertGao](https://github.com/HerbertGao)! - Adopt prompt-marker handoffs that generate a handoff artifact and start a clean session, while retaining the session query tool and local rename package integration.
8
-
9
- ### Patch Changes
10
-
11
- - Updated dependencies [[`ecda398`](https://github.com/HerbertGao/pi-extensions/commit/ecda398b9a95212c512d53325c617e485e6ded8d)]:
12
- - @herbertgao/pi-rename@0.5.0
13
-
14
- ## 2.0.1
15
-
16
- ### Patch Changes
17
-
18
- - Updated dependencies [[`b2ea184`](https://github.com/tifandotme/pi-extensions/commit/b2ea1841e99243aa4773bd5c33f43c40248859db)]:
19
- - @tifan/pi-rename@0.5.0
20
-
21
- ## 2.0.0
22
-
23
- ### Major Changes
24
-
25
- - [`297e825`](https://github.com/tifandotme/pi-extensions/commit/297e825ba42eeed32814a34cd4fe5bdbe935b11c) Thanks [@tifandotme](https://github.com/tifandotme)! - Replace `/handoff-session` with the `-handoff` prompt marker and automatically start the new session from the generated handoff.
26
-
27
- ### Patch Changes
28
-
29
- - Updated dependencies [[`e8709bc`](https://github.com/tifandotme/pi-extensions/commit/e8709bc388aa8e094918ec465cfab511358f18ff)]:
30
- - @tifan/pi-rename@0.4.3
31
-
32
- ## 1.1.2
33
-
34
- ### Patch Changes
35
-
36
- - [`edf72a2`](https://github.com/tifandotme/pi-extensions/commit/edf72a238757bfd71d32ebe9f0d3f14653e21d87) Thanks [@tifandotme](https://github.com/tifandotme)! - Use gpt-5.6-luna as the default model for naming handoff sessions.
37
-
38
- - Updated dependencies [[`b27ba8a`](https://github.com/tifandotme/pi-extensions/commit/b27ba8aef49ea00879cec87d913840f39e02b19e)]:
39
- - @tifan/pi-rename@0.4.2
40
-
41
- ## 1.1.1
42
-
43
- ### Patch Changes
44
-
45
- - [`ba259a0`](https://github.com/tifandotme/pi-extensions/commit/ba259a0c990563e4dad3443371cc2ed31d122cd0) Thanks [@tifandotme](https://github.com/tifandotme)! - Keep model-powered handoffs and session names compatible with Pi 0.80.
46
-
47
- - Updated dependencies [[`ba259a0`](https://github.com/tifandotme/pi-extensions/commit/ba259a0c990563e4dad3443371cc2ed31d122cd0)]:
48
- - @tifan/pi-rename@0.4.1
49
-
50
- ## 1.1.0
51
-
52
- ### Minor Changes
53
-
54
- - [`38bebf2`](https://github.com/tifandotme/pi-extensions/commit/38bebf2827c37f1fcefe7de585c9d03dd0a7edee) Thanks [@tifandotme](https://github.com/tifandotme)! - Name new handoff sessions from the current conversation using pi-rename-style rules, with a local fallback when model naming is unavailable.
55
-
56
- ### Patch Changes
57
-
58
- - Updated dependencies [[`416ac2f`](https://github.com/tifandotme/pi-extensions/commit/416ac2fecc6aa731c23ae895220bac87317152e4)]:
59
- - @tifan/pi-rename@0.4.0
60
-
61
- ## 1.0.1
62
-
63
- ### Patch Changes
64
-
65
- - [`f0090c2`](https://github.com/tifandotme/pi-extensions/commit/f0090c2a5c648febc7281f88c25634414af22b99) Thanks [@tifandotme](https://github.com/tifandotme)! - Use Pi 0.78.1's new extension context APIs so `/handoff-session` records loaded skills and context file paths from system prompt options, and gates its custom UI with `ctx.mode`.
66
-
67
- ## 1.0.0
68
-
69
- ### Major Changes
70
-
71
- - [`a049f90`](https://github.com/tifandotme/pi-extensions/commit/a049f90a485de7b893574600d0aec4dbfe678999) Thanks [@tifandotme](https://github.com/tifandotme)! - Replace `/handoff` with `/handoff-session`, which generates a temp handoff document from the installed `handoff` skill, starts a clean parent-linked session, and leaves the continuation prompt in the editor for manual submit.
72
-
73
- ## 0.1.1
74
-
75
- ### Patch Changes
76
-
77
- - [`48e1167`](https://github.com/tifandotme/pi-extensions/commit/48e11674378fd22b74a319d8fd3ce6c7919e47df) Thanks [@tifandotme](https://github.com/tifandotme)! - update readme, fix type error in inline-skills package
78
-
79
- ## 0.1.0
80
-
81
- ### Minor Changes
82
-
83
- - [`de412e0`](https://github.com/tifandotme/pi-extensions/commit/de412e0957517c926c69962fe7ccef36495491e5) Thanks [@tifandotme](https://github.com/tifandotme)! - initial release