@herbertgao/pi-extensions 2026.8.11 → 2026.8.13

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 (476) hide show
  1. package/README.md +23 -10
  2. package/{node_modules/@herbertgao/pi-mermaid-open/LICENSE → THIRD_PARTY_NOTICES.md} +19 -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/@juicesharp/rpiv-ask-user-question/package.json +2 -2
  46. package/node_modules/@luxusai/pi-hindsight/CHANGELOG.md +376 -0
  47. package/node_modules/@luxusai/pi-hindsight/README.md +92 -0
  48. package/node_modules/@luxusai/pi-hindsight/docs/adr/001-memory-lifecycle-and-scope.md +56 -0
  49. package/node_modules/@luxusai/pi-hindsight/docs/adr/002-explicit-routing-strategy-seam.md +169 -0
  50. package/node_modules/@luxusai/pi-hindsight/docs/adr/003-tui-memory-mode-vocabulary.md +107 -0
  51. package/node_modules/@luxusai/pi-hindsight/docs/adr/004-lifeos-dual-bank-design.md +89 -0
  52. package/node_modules/@luxusai/pi-hindsight/docs/adr/005-domain-banks-and-agent-first-surface.md +189 -0
  53. package/node_modules/@luxusai/pi-hindsight/docs/assets/logos/pi-hindsight-logo-dark.webp +0 -0
  54. package/node_modules/@luxusai/pi-hindsight/docs/assets/logos/pi-hindsight-logo-dark@2x.webp +0 -0
  55. package/node_modules/@luxusai/pi-hindsight/docs/coding-memory-evaluation.md +54 -0
  56. package/node_modules/@luxusai/pi-hindsight/docs/compatibility.md +75 -0
  57. package/node_modules/@luxusai/pi-hindsight/docs/hindsight-core-functions.md +300 -0
  58. package/node_modules/@luxusai/pi-hindsight/docs/mission-and-mental-model-quality.md +158 -0
  59. package/node_modules/@luxusai/pi-hindsight/docs/next-opt-out-design.md +164 -0
  60. package/node_modules/@luxusai/pi-hindsight/docs/risky-memory-modes.md +139 -0
  61. package/node_modules/@luxusai/pi-hindsight/docs/starter-mental-model-suggestions.md +74 -0
  62. package/node_modules/@luxusai/pi-hindsight/docs/surface-reference.md +261 -0
  63. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-operations.ts +151 -0
  64. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-selection.ts +18 -0
  65. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-settings-presenter.ts +46 -0
  66. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-templates.ts +383 -0
  67. package/node_modules/@luxusai/pi-hindsight/extensions/banks/banking.ts +240 -0
  68. package/node_modules/@luxusai/pi-hindsight/extensions/banks/knowledge-page-seed.ts +176 -0
  69. package/node_modules/@luxusai/pi-hindsight/extensions/banks/retain-strategies.ts +178 -0
  70. package/node_modules/@luxusai/pi-hindsight/extensions/client/client-retry.ts +41 -0
  71. package/node_modules/@luxusai/pi-hindsight/extensions/client/client.ts +386 -0
  72. package/node_modules/@luxusai/pi-hindsight/extensions/client/fetch-compat.ts +39 -0
  73. package/node_modules/@luxusai/pi-hindsight/extensions/client/timeout.ts +34 -0
  74. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-defaults.ts +140 -0
  75. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-editing-model.ts +61 -0
  76. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-editing-registry.ts +925 -0
  77. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-field-paths.ts +247 -0
  78. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-normalize.ts +547 -0
  79. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-writer.ts +480 -0
  80. package/node_modules/@luxusai/pi-hindsight/extensions/config/config.ts +182 -0
  81. package/node_modules/@luxusai/pi-hindsight/extensions/config/setup-gate.ts +86 -0
  82. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-execute.ts +1010 -0
  83. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-parse.ts +175 -0
  84. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-plan.ts +425 -0
  85. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-presentation.ts +210 -0
  86. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-sessions.ts +817 -0
  87. package/node_modules/@luxusai/pi-hindsight/extensions/index.ts +25 -0
  88. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/git-seed.ts +319 -0
  89. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-recall.ts +196 -0
  90. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-retain.ts +189 -0
  91. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-runtime.ts +65 -0
  92. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle.ts +260 -0
  93. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/mental-models.ts +244 -0
  94. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/observation-scopes.ts +59 -0
  95. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall-cleanup.ts +82 -0
  96. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall-visibility.ts +45 -0
  97. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall.ts +331 -0
  98. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-cursor.ts +354 -0
  99. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-job-builder.ts +66 -0
  100. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-receipts.ts +132 -0
  101. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain.ts +228 -0
  102. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-bank-template-operations.ts +74 -0
  103. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-config-operations.ts +16 -0
  104. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-control-operations.ts +648 -0
  105. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-diagnostics-operations.ts +105 -0
  106. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-identity.ts +68 -0
  107. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-operation-service.ts +71 -0
  108. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-operation-types.ts +13 -0
  109. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-recall-operations.ts +162 -0
  110. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-retain-operations.ts +131 -0
  111. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-scope.ts +104 -0
  112. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-session-operations.ts +37 -0
  113. package/node_modules/@luxusai/pi-hindsight/extensions/operations/operation-catalog.ts +893 -0
  114. package/node_modules/@luxusai/pi-hindsight/extensions/operations/reflect-presenter.ts +35 -0
  115. package/node_modules/@luxusai/pi-hindsight/extensions/operations/scope-migrate.ts +177 -0
  116. package/node_modules/@luxusai/pi-hindsight/extensions/operations/tools.ts +7 -0
  117. package/node_modules/@luxusai/pi-hindsight/extensions/queue/flush-presenter.ts +21 -0
  118. package/node_modules/@luxusai/pi-hindsight/extensions/queue/jsonl-queue-store.ts +112 -0
  119. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-delivery.ts +111 -0
  120. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-lock.ts +214 -0
  121. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-operations.ts +70 -0
  122. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue.ts +392 -0
  123. package/node_modules/@luxusai/pi-hindsight/extensions/tui/bank-template-presentation.ts +45 -0
  124. package/node_modules/@luxusai/pi-hindsight/extensions/tui/commands.ts +9 -0
  125. package/node_modules/@luxusai/pi-hindsight/extensions/tui/guided-setup.ts +860 -0
  126. package/node_modules/@luxusai/pi-hindsight/extensions/tui/prefill-input.ts +105 -0
  127. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-flow.ts +189 -0
  128. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-server-probe.ts +299 -0
  129. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-actions.ts +201 -0
  130. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-facts.ts +47 -0
  131. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-render.ts +239 -0
  132. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-types.ts +50 -0
  133. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui.ts +259 -0
  134. package/node_modules/@luxusai/pi-hindsight/extensions/tui/tool-presenters.ts +77 -0
  135. package/node_modules/@luxusai/pi-hindsight/extensions/types.ts +534 -0
  136. package/node_modules/@luxusai/pi-hindsight/extensions/utils/diagnostics.ts +319 -0
  137. package/node_modules/@luxusai/pi-hindsight/extensions/utils/messages.ts +325 -0
  138. package/node_modules/@luxusai/pi-hindsight/extensions/utils/sanitize.ts +42 -0
  139. package/node_modules/@luxusai/pi-hindsight/extensions/utils/session-memory-meta.ts +244 -0
  140. package/node_modules/@luxusai/pi-hindsight/extensions/utils/session-operations.ts +56 -0
  141. package/node_modules/@luxusai/pi-hindsight/extensions/utils/session.ts +50 -0
  142. package/node_modules/@luxusai/pi-hindsight/extensions/utils/status-fields.ts +167 -0
  143. package/node_modules/@luxusai/pi-hindsight/extensions/utils/status-health.ts +207 -0
  144. package/node_modules/@luxusai/pi-hindsight/extensions/utils/status.ts +120 -0
  145. package/node_modules/@luxusai/pi-hindsight/extensions/version.ts +8 -0
  146. package/node_modules/@luxusai/pi-hindsight/package.json +118 -0
  147. package/node_modules/@luxusai/pi-hindsight/skills/hindsight-memory-doctor/SKILL.md +75 -0
  148. package/node_modules/@narumitw/pi-btw/dist/index.ts +143 -46
  149. package/node_modules/@narumitw/pi-btw/dist/index.ts.map +3 -3
  150. package/node_modules/@narumitw/pi-btw/package.json +6 -6
  151. package/node_modules/@narumitw/pi-btw/src/fullscreen-ui.ts +136 -22
  152. package/node_modules/{@herbertgao → @tifan}/pi-copy-response/README.md +2 -4
  153. package/node_modules/{@herbertgao → @tifan}/pi-copy-response/package.json +5 -15
  154. package/node_modules/{@herbertgao → @tifan}/pi-handoff/README.md +4 -6
  155. package/node_modules/@tifan/pi-handoff/package.json +43 -0
  156. package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/index.ts +1 -1
  157. package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/README.md +2 -4
  158. package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/package.json +5 -15
  159. package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/README.md +5 -7
  160. package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/package.json +5 -19
  161. package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/README.md +4 -6
  162. package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/package.json +6 -16
  163. package/node_modules/{@herbertgao → @tifan}/pi-preferred-thinking/src/index.ts +1 -6
  164. package/node_modules/{@herbertgao → @tifan}/pi-recap/README.md +4 -6
  165. package/node_modules/@tifan/pi-recap/package.json +42 -0
  166. package/node_modules/{@herbertgao → @tifan}/pi-recap/src/models.ts +1 -6
  167. package/node_modules/{@herbertgao → @tifan}/pi-rename/README.md +13 -8
  168. package/node_modules/@tifan/pi-rename/package.json +47 -0
  169. package/node_modules/@tifan/pi-rename/src/herdr-label.ts +4 -0
  170. package/node_modules/{@herbertgao → @tifan}/pi-rename/src/index.ts +4 -16
  171. package/node_modules/{@herbertgao → @tifan}/pi-rename/src/models.ts +1 -6
  172. package/node_modules/{@herbertgao → @tifan}/pi-titlebar-spinner/README.md +2 -4
  173. package/node_modules/{@herbertgao → @tifan}/pi-titlebar-spinner/package.json +5 -15
  174. package/node_modules/pi-lens/CHANGELOG.md +96 -1
  175. package/node_modules/pi-lens/dist/clients/actionable-warnings-logger.js +2 -1
  176. package/node_modules/pi-lens/dist/clients/actionable-warnings.js +14 -5
  177. package/node_modules/pi-lens/dist/clients/advisory-provenance.js +48 -18
  178. package/node_modules/pi-lens/dist/clients/ast-grep-client.js +1 -3
  179. package/node_modules/pi-lens/dist/clients/atomic-write-staging.js +16 -4
  180. package/node_modules/pi-lens/dist/clients/bash-file-access.js +3 -1
  181. package/node_modules/pi-lens/dist/clients/biome-client.js +1 -3
  182. package/node_modules/pi-lens/dist/clients/blocker-freshness.js +21 -8
  183. package/node_modules/pi-lens/dist/clients/bounded-cache.js +24 -8
  184. package/node_modules/pi-lens/dist/clients/bounded-pid-file-lock.js +4 -3
  185. package/node_modules/pi-lens/dist/clients/cache-manager.js +6 -7
  186. package/node_modules/pi-lens/dist/clients/cache-observability.js +461 -66
  187. package/node_modules/pi-lens/dist/clients/call-graph.js +238 -63
  188. package/node_modules/pi-lens/dist/clients/codebase-model.js +13 -5
  189. package/node_modules/pi-lens/dist/clients/complexity-client.js +1 -3
  190. package/node_modules/pi-lens/dist/clients/dead-code-client.js +19 -8
  191. package/node_modules/pi-lens/dist/clients/dead-code-logger.js +1 -2
  192. package/node_modules/pi-lens/dist/clients/deadline-utils.js +3 -1
  193. package/node_modules/pi-lens/dist/clients/debug-heap.js +8 -1
  194. package/node_modules/pi-lens/dist/clients/degradation-ledger.js +1 -1
  195. package/node_modules/pi-lens/dist/clients/dependency-checker.js +11 -7
  196. package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +39 -2
  197. package/node_modules/pi-lens/dist/clients/diagnostic-line-freshness.js +5 -1
  198. package/node_modules/pi-lens/dist/clients/dispatch/auxiliary-lsp.js +2 -3
  199. package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +13 -1
  200. package/node_modules/pi-lens/dist/clients/dispatch/facts/function-facts.js +3 -1
  201. package/node_modules/pi-lens/dist/clients/dispatch/facts/import-facts.js +2 -1
  202. package/node_modules/pi-lens/dist/clients/dispatch/facts/tree-sitter-facts.js +1 -1
  203. package/node_modules/pi-lens/dist/clients/dispatch/integration.js +9 -4
  204. package/node_modules/pi-lens/dist/clients/dispatch/rules/error-swallowing.js +3 -1
  205. package/node_modules/pi-lens/dist/clients/dispatch/rules/pass-through-wrappers.js +6 -2
  206. package/node_modules/pi-lens/dist/clients/dispatch/rules/unsafe-boundary.js +31 -7
  207. package/node_modules/pi-lens/dist/clients/dispatch/runners/actionlint.js +5 -2
  208. package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +10 -14
  209. package/node_modules/pi-lens/dist/clients/dispatch/runners/cpp-check.js +5 -1
  210. package/node_modules/pi-lens/dist/clients/dispatch/runners/dotnet-build.js +1 -1
  211. package/node_modules/pi-lens/dist/clients/dispatch/runners/elixir-check.js +3 -1
  212. package/node_modules/pi-lens/dist/clients/dispatch/runners/eslint.js +25 -6
  213. package/node_modules/pi-lens/dist/clients/dispatch/runners/fish-indent.js +1 -1
  214. package/node_modules/pi-lens/dist/clients/dispatch/runners/gleam-check.js +1 -1
  215. package/node_modules/pi-lens/dist/clients/dispatch/runners/golangci-lint.js +3 -1
  216. package/node_modules/pi-lens/dist/clients/dispatch/runners/hadolint.js +13 -8
  217. package/node_modules/pi-lens/dist/clients/dispatch/runners/helm-lint.js +4 -1
  218. package/node_modules/pi-lens/dist/clients/dispatch/runners/htmlhint.js +25 -10
  219. package/node_modules/pi-lens/dist/clients/dispatch/runners/javac.js +1 -1
  220. package/node_modules/pi-lens/dist/clients/dispatch/runners/ktlint.js +1 -1
  221. package/node_modules/pi-lens/dist/clients/dispatch/runners/lsp.js +1 -1
  222. package/node_modules/pi-lens/dist/clients/dispatch/runners/markdownlint.js +28 -4
  223. package/node_modules/pi-lens/dist/clients/dispatch/runners/mypy.js +6 -8
  224. package/node_modules/pi-lens/dist/clients/dispatch/runners/oxlint.js +212 -11
  225. package/node_modules/pi-lens/dist/clients/dispatch/runners/php-lint.js +1 -1
  226. package/node_modules/pi-lens/dist/clients/dispatch/runners/phpstan.js +8 -4
  227. package/node_modules/pi-lens/dist/clients/dispatch/runners/psscriptanalyzer.js +10 -6
  228. package/node_modules/pi-lens/dist/clients/dispatch/runners/pyright.js +23 -14
  229. package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +1 -1
  230. package/node_modules/pi-lens/dist/clients/dispatch/runners/shellcheck.js +7 -9
  231. package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +5 -2
  232. package/node_modules/pi-lens/dist/clients/dispatch/runners/sqlfluff.js +7 -7
  233. package/node_modules/pi-lens/dist/clients/dispatch/runners/stylelint.js +6 -8
  234. package/node_modules/pi-lens/dist/clients/dispatch/runners/terragrunt.js +13 -8
  235. package/node_modules/pi-lens/dist/clients/dispatch/runners/tflint.js +13 -8
  236. package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +17 -3
  237. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/candidate-probe.js +7 -1
  238. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +24 -1
  239. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/tool-failure.js +35 -0
  240. package/node_modules/pi-lens/dist/clients/dispatch/runners/yaml-rule-parser.js +1 -3
  241. package/node_modules/pi-lens/dist/clients/dispatch/runners/yamllint.js +6 -8
  242. package/node_modules/pi-lens/dist/clients/dispatch/runners/zig-check.js +1 -1
  243. package/node_modules/pi-lens/dist/clients/dispatch/suppress-writer.js +2 -1
  244. package/node_modules/pi-lens/dist/clients/dispatch/types.js +6 -1
  245. package/node_modules/pi-lens/dist/clients/dispatch/utils/lsp-diagnostics.js +6 -2
  246. package/node_modules/pi-lens/dist/clients/extension-log.js +5 -3
  247. package/node_modules/pi-lens/dist/clients/feature-hints.js +8 -1
  248. package/node_modules/pi-lens/dist/clients/file-kinds.js +34 -129
  249. package/node_modules/pi-lens/dist/clients/file-utils.js +17 -1
  250. package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +57 -2
  251. package/node_modules/pi-lens/dist/clients/formatters.js +144 -27
  252. package/node_modules/pi-lens/dist/clients/freshness.js +38 -0
  253. package/node_modules/pi-lens/dist/clients/git-guard.js +43 -13
  254. package/node_modules/pi-lens/dist/clients/go-client.js +1 -3
  255. package/node_modules/pi-lens/dist/clients/grammar-source.js +1 -1
  256. package/node_modules/pi-lens/dist/clients/gzip-stage-write.js +30 -4
  257. package/node_modules/pi-lens/dist/clients/host-edit-normalize.js +1 -3
  258. package/node_modules/pi-lens/dist/clients/install-diagnostics.js +4 -2
  259. package/node_modules/pi-lens/dist/clients/installer/index.js +86 -77
  260. package/node_modules/pi-lens/dist/clients/instance-reaper.js +5 -2
  261. package/node_modules/pi-lens/dist/clients/instance-registry.js +4 -2
  262. package/node_modules/pi-lens/dist/clients/jscpd-client.js +6 -1
  263. package/node_modules/pi-lens/dist/clients/knip-client.js +29 -15
  264. package/node_modules/pi-lens/dist/clients/language-profile.js +4 -1
  265. package/node_modules/pi-lens/dist/clients/latency-logger.js +13 -2
  266. package/node_modules/pi-lens/dist/clients/lens-config.js +1 -1
  267. package/node_modules/pi-lens/dist/clients/lens-map.js +8 -3
  268. package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +1 -1
  269. package/node_modules/pi-lens/dist/clients/lsp/config.js +4 -6
  270. package/node_modules/pi-lens/dist/clients/lsp/edits.js +119 -32
  271. package/node_modules/pi-lens/dist/clients/lsp/index.js +94 -35
  272. package/node_modules/pi-lens/dist/clients/lsp/inferred-project.js +2 -1
  273. package/node_modules/pi-lens/dist/clients/lsp/jvm-runtime.js +4 -1
  274. package/node_modules/pi-lens/dist/clients/lsp/launch.js +11 -3
  275. package/node_modules/pi-lens/dist/clients/lsp/pending-aux-coverage.js +152 -0
  276. package/node_modules/pi-lens/dist/clients/lsp/server.js +19 -7
  277. package/node_modules/pi-lens/dist/clients/lsp/tsserver-sync.js +10 -2
  278. package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +9 -4
  279. package/node_modules/pi-lens/dist/clients/lsp-document-symbols.js +1 -3
  280. package/node_modules/pi-lens/dist/clients/lsp-mutation.js +10 -20
  281. package/node_modules/pi-lens/dist/clients/mcp/host-shim.js +1 -1
  282. package/node_modules/pi-lens/dist/clients/memory-sampler.js +73 -7
  283. package/node_modules/pi-lens/dist/clients/metrics-client.js +1 -3
  284. package/node_modules/pi-lens/dist/clients/middle-man-analysis.js +8 -3
  285. package/node_modules/pi-lens/dist/clients/module-report-lsp.js +7 -1
  286. package/node_modules/pi-lens/dist/clients/module-report.js +14 -17
  287. package/node_modules/pi-lens/dist/clients/ndjson-logger.js +3 -5
  288. package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +220 -0
  289. package/node_modules/pi-lens/dist/clients/package-manager.js +6 -1
  290. package/node_modules/pi-lens/dist/clients/pipeline.js +57 -9
  291. package/node_modules/pi-lens/dist/clients/project-conventions.js +2 -8
  292. package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +10 -7
  293. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +2 -1
  294. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +3 -1
  295. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +13 -9
  296. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/trivy.js +3 -1
  297. package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +5 -2
  298. package/node_modules/pi-lens/dist/clients/project-lens-config.js +12 -5
  299. package/node_modules/pi-lens/dist/clients/project-snapshot-fingerprint.js +48 -0
  300. package/node_modules/pi-lens/dist/clients/project-snapshot-persist-worker.js +15 -1
  301. package/node_modules/pi-lens/dist/clients/project-snapshot.js +472 -66
  302. package/node_modules/pi-lens/dist/clients/read-expansion.js +12 -2
  303. package/node_modules/pi-lens/dist/clients/read-guard-logger.js +5 -4
  304. package/node_modules/pi-lens/dist/clients/read-guard-tool-lines.js +5 -2
  305. package/node_modules/pi-lens/dist/clients/read-guard.js +1 -1
  306. package/node_modules/pi-lens/dist/clients/resource-sampler.js +1 -1
  307. package/node_modules/pi-lens/dist/clients/reverse-deps.js +6 -5
  308. package/node_modules/pi-lens/dist/clients/review-graph/builder.js +42 -17
  309. package/node_modules/pi-lens/dist/clients/review-graph/git-identity.js +8 -2
  310. package/node_modules/pi-lens/dist/clients/review-graph/import-resolvers.js +10 -1
  311. package/node_modules/pi-lens/dist/clients/review-graph/query.js +2 -1
  312. package/node_modules/pi-lens/dist/clients/review-graph/tsconfig-paths.js +4 -2
  313. package/node_modules/pi-lens/dist/clients/review-graph/workspace-modules.js +2 -2
  314. package/node_modules/pi-lens/dist/clients/ruff-client.js +6 -5
  315. package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +63 -31
  316. package/node_modules/pi-lens/dist/clients/runtime-context.js +12 -4
  317. package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +83 -4
  318. package/node_modules/pi-lens/dist/clients/runtime-session.js +14 -0
  319. package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +59 -3
  320. package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +148 -34
  321. package/node_modules/pi-lens/dist/clients/runtime-turn.js +147 -6
  322. package/node_modules/pi-lens/dist/clients/rust-client.js +1 -3
  323. package/node_modules/pi-lens/dist/clients/safe-spawn.js +150 -11
  324. package/node_modules/pi-lens/dist/clients/security-scan-client.js +1 -3
  325. package/node_modules/pi-lens/dist/clients/session-summary.js +3 -1
  326. package/node_modules/pi-lens/dist/clients/sg-runner.js +1 -3
  327. package/node_modules/pi-lens/dist/clients/source-filter.js +10 -6
  328. package/node_modules/pi-lens/dist/clients/source-walker.js +1 -1
  329. package/node_modules/pi-lens/dist/clients/spawn-timeout-cooldown.js +96 -0
  330. package/node_modules/pi-lens/dist/clients/startup-scan.js +4 -1
  331. package/node_modules/pi-lens/dist/clients/tool-definition.js +7 -0
  332. package/node_modules/pi-lens/dist/clients/tool-policy.js +26 -11
  333. package/node_modules/pi-lens/dist/clients/tool-render.js +2 -1
  334. package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +10 -4
  335. package/node_modules/pi-lens/dist/clients/tree-sitter-logger.js +2 -2
  336. package/node_modules/pi-lens/dist/clients/tree-sitter-symbol-extractor.js +12 -5
  337. package/node_modules/pi-lens/dist/clients/warm-attach.js +12 -5
  338. package/node_modules/pi-lens/dist/clients/widget-state.js +27 -11
  339. package/node_modules/pi-lens/dist/clients/word-index.js +3 -1
  340. package/node_modules/pi-lens/dist/clients/workspace-topology.js +8 -2
  341. package/node_modules/pi-lens/dist/clients/zizmor-config.js +9 -1
  342. package/node_modules/pi-lens/dist/i18n.js +13 -5
  343. package/node_modules/pi-lens/dist/index.js +10797 -8627
  344. package/node_modules/pi-lens/dist/mcp/server.js +3 -1
  345. package/node_modules/pi-lens/dist/tools/ast-grep-replace.js +68 -12
  346. package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +21 -7
  347. package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +164 -35
  348. package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +24 -7
  349. package/node_modules/pi-lens/dist/tools/lsp-navigation.js +3 -1
  350. package/node_modules/pi-lens/dist/tools/module-report.js +1 -1
  351. package/node_modules/pi-lens/dist/tools/project-report.js +1 -1
  352. package/node_modules/pi-lens/dist/tools/symbol-search.js +5 -2
  353. package/node_modules/pi-lens/docs/durable-store-audit-1202.md +1 -1
  354. package/node_modules/pi-lens/docs/servercapabilities.md +1 -1
  355. package/node_modules/pi-lens/package.json +160 -156
  356. package/node_modules/pi-lens/rules/typos/_typos.toml +2 -2
  357. package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +31 -13
  358. package/node_modules/pi-lens/scripts/download-grammars.js +9 -3
  359. package/node_modules/pi-lens/scripts/rpc-load-check.mjs +30 -9
  360. package/node_modules/pi-mcp-adapter/CHANGELOG.md +47 -0
  361. package/node_modules/pi-mcp-adapter/README.md +42 -13
  362. package/node_modules/pi-mcp-adapter/commands.ts +4 -2
  363. package/node_modules/pi-mcp-adapter/config.ts +45 -5
  364. package/node_modules/pi-mcp-adapter/direct-tools.ts +103 -92
  365. package/node_modules/pi-mcp-adapter/dist/agent-dir.d.ts +10 -0
  366. package/node_modules/pi-mcp-adapter/dist/agent-dir.js +63 -0
  367. package/node_modules/pi-mcp-adapter/dist/agent-dir.js.map +1 -0
  368. package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.d.ts +8 -0
  369. package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.js +356 -0
  370. package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.js.map +1 -0
  371. package/node_modules/pi-mcp-adapter/dist/config.d.ts +123 -0
  372. package/node_modules/pi-mcp-adapter/dist/config.js +1087 -0
  373. package/node_modules/pi-mcp-adapter/dist/config.js.map +1 -0
  374. package/node_modules/pi-mcp-adapter/dist/metadata-cache.d.ts +19 -0
  375. package/node_modules/pi-mcp-adapter/dist/metadata-cache.js +319 -0
  376. package/node_modules/pi-mcp-adapter/dist/metadata-cache.js.map +1 -0
  377. package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.d.ts +2 -0
  378. package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.js +156 -0
  379. package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.js.map +1 -0
  380. package/node_modules/pi-mcp-adapter/dist/resource-tools.d.ts +1 -0
  381. package/node_modules/pi-mcp-adapter/dist/resource-tools.js +15 -0
  382. package/node_modules/pi-mcp-adapter/dist/resource-tools.js.map +1 -0
  383. package/node_modules/pi-mcp-adapter/dist/types.d.ts +564 -0
  384. package/node_modules/pi-mcp-adapter/dist/types.js +287 -0
  385. package/node_modules/pi-mcp-adapter/dist/types.js.map +1 -0
  386. package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.d.ts +6 -0
  387. package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.js +37 -0
  388. package/node_modules/pi-mcp-adapter/dist/ui-app-bridge-helpers.js.map +1 -0
  389. package/node_modules/pi-mcp-adapter/dist/ui-stream-types.d.ts +104 -0
  390. package/node_modules/pi-mcp-adapter/dist/ui-stream-types.js +59 -0
  391. package/node_modules/pi-mcp-adapter/dist/ui-stream-types.js.map +1 -0
  392. package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.d.ts +4 -0
  393. package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.js +27 -0
  394. package/node_modules/pi-mcp-adapter/dist/ui-tool-visibility.js.map +1 -0
  395. package/node_modules/pi-mcp-adapter/dist/utils.d.ts +32 -0
  396. package/node_modules/pi-mcp-adapter/dist/utils.js +338 -0
  397. package/node_modules/pi-mcp-adapter/dist/utils.js.map +1 -0
  398. package/node_modules/pi-mcp-adapter/failure-backoff.ts +23 -0
  399. package/node_modules/pi-mcp-adapter/index.ts +204 -82
  400. package/node_modules/pi-mcp-adapter/init.ts +41 -30
  401. package/node_modules/pi-mcp-adapter/lifecycle.ts +16 -8
  402. package/node_modules/pi-mcp-adapter/mcp-code.ts +2 -0
  403. package/node_modules/pi-mcp-adapter/mcp-oauth-provider.ts +66 -16
  404. package/node_modules/pi-mcp-adapter/mcp-output-guard.ts +95 -7
  405. package/node_modules/pi-mcp-adapter/mcp-probe.ts +18 -4
  406. package/node_modules/pi-mcp-adapter/mcp-references.ts +368 -0
  407. package/node_modules/pi-mcp-adapter/mcp-status.ts +8 -19
  408. package/node_modules/pi-mcp-adapter/metadata-cache.ts +20 -12
  409. package/node_modules/pi-mcp-adapter/namespace-tools.ts +276 -0
  410. package/node_modules/pi-mcp-adapter/package.json +24 -6
  411. package/node_modules/pi-mcp-adapter/proxy-modes.ts +66 -10
  412. package/node_modules/pi-mcp-adapter/search-ranking.ts +2 -0
  413. package/node_modules/pi-mcp-adapter/server-manager.ts +63 -12
  414. package/node_modules/pi-mcp-adapter/state.ts +1 -3
  415. package/node_modules/pi-mcp-adapter/tool-result-renderer.ts +16 -2
  416. package/node_modules/pi-mcp-adapter/types.ts +48 -1
  417. package/node_modules/pi-mcp-adapter/ui-server.ts +3 -19
  418. package/node_modules/pi-mcp-adapter/ui-session.ts +2 -1
  419. package/node_modules/pi-mcp-adapter/utils.ts +21 -19
  420. package/node_modules/pi-web-access/CHANGELOG.md +26 -0
  421. package/node_modules/pi-web-access/README.md +71 -14
  422. package/node_modules/pi-web-access/chrome-cookies.ts +115 -35
  423. package/node_modules/pi-web-access/credential-source.ts +6 -2
  424. package/node_modules/pi-web-access/curator-page.ts +5 -3
  425. package/node_modules/pi-web-access/curator-server.ts +2 -1
  426. package/node_modules/pi-web-access/extract.ts +89 -9
  427. package/node_modules/pi-web-access/fetch-params.ts +13 -0
  428. package/node_modules/pi-web-access/gemini-adc.ts +298 -0
  429. package/node_modules/pi-web-access/gemini-api.ts +59 -15
  430. package/node_modules/pi-web-access/gemini-search.ts +58 -18
  431. package/node_modules/pi-web-access/gemini-url-context.ts +3 -2
  432. package/node_modules/pi-web-access/gemini-web-config.ts +57 -7
  433. package/node_modules/pi-web-access/gemini-web.ts +9 -3
  434. package/node_modules/pi-web-access/github-api.ts +5 -4
  435. package/node_modules/pi-web-access/github-issue-pr.ts +700 -0
  436. package/node_modules/pi-web-access/index.ts +403 -297
  437. package/node_modules/pi-web-access/kimi-search.ts +234 -0
  438. package/node_modules/pi-web-access/openai-search.ts +118 -21
  439. package/node_modules/pi-web-access/package.json +3 -2
  440. package/node_modules/pi-web-access/ssrf-protection.ts +4 -1
  441. package/node_modules/pi-web-access/utils.ts +307 -1
  442. package/node_modules/pi-web-access/youtube-extract.ts +2 -2
  443. package/package.json +46 -37
  444. package/node_modules/@herbertgao/pi-copy-response/CHANGELOG.md +0 -49
  445. package/node_modules/@herbertgao/pi-copy-response/LICENSE +0 -22
  446. package/node_modules/@herbertgao/pi-handoff/CHANGELOG.md +0 -83
  447. package/node_modules/@herbertgao/pi-handoff/LICENSE +0 -22
  448. package/node_modules/@herbertgao/pi-handoff/package.json +0 -60
  449. package/node_modules/@herbertgao/pi-inline-skills/CHANGELOG.md +0 -57
  450. package/node_modules/@herbertgao/pi-inline-skills/LICENSE +0 -22
  451. package/node_modules/@herbertgao/pi-mermaid-open/CHANGELOG.md +0 -39
  452. package/node_modules/@herbertgao/pi-preferred-thinking/CHANGELOG.md +0 -63
  453. package/node_modules/@herbertgao/pi-preferred-thinking/LICENSE +0 -22
  454. package/node_modules/@herbertgao/pi-recap/CHANGELOG.md +0 -101
  455. package/node_modules/@herbertgao/pi-recap/LICENSE +0 -22
  456. package/node_modules/@herbertgao/pi-recap/package.json +0 -55
  457. package/node_modules/@herbertgao/pi-rename/CHANGELOG.md +0 -49
  458. package/node_modules/@herbertgao/pi-rename/LICENSE +0 -22
  459. package/node_modules/@herbertgao/pi-rename/package.json +0 -63
  460. package/node_modules/@herbertgao/pi-titlebar-spinner/CHANGELOG.md +0 -25
  461. package/node_modules/@herbertgao/pi-titlebar-spinner/LICENSE +0 -22
  462. /package/node_modules/{@herbertgao → @tifan}/pi-copy-response/src/index.ts +0 -0
  463. /package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/complete-text.ts +0 -0
  464. /package/node_modules/{@herbertgao → @tifan}/pi-handoff/src/session-query.ts +0 -0
  465. /package/node_modules/{@herbertgao → @tifan}/pi-inline-skills/src/index.ts +0 -0
  466. /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/herdr-plugin/herdr-plugin.toml +0 -0
  467. /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/herdr-plugin/viewer.mjs +0 -0
  468. /package/node_modules/{@herbertgao → @tifan}/pi-mermaid-open/src/index.ts +0 -0
  469. /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/index.ts +0 -0
  470. /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/model-picker.ts +0 -0
  471. /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/sanitize.ts +0 -0
  472. /package/node_modules/{@herbertgao → @tifan}/pi-recap/src/tui.ts +0 -0
  473. /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/model-picker.ts +0 -0
  474. /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/naming.ts +0 -0
  475. /package/node_modules/{@herbertgao → @tifan}/pi-rename/src/sanitize.ts +0 -0
  476. /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.11",
3
+ "version": "2026.8.13",
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,57 +37,61 @@
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",
48
+ "@herbertgao/pi-subagents": "0.17.0",
56
49
  "@herbertgao/resume-from": "0.2.0",
57
- "@juicesharp/rpiv-ask-user-question": "2.7.0",
58
- "@juicesharp/rpiv-config": "^2.7.0",
50
+ "@juicesharp/rpiv-ask-user-question": "2.7.1",
51
+ "@juicesharp/rpiv-config": "^2.7.1",
52
+ "@luxusai/pi-hindsight": "0.12.0",
59
53
  "@modelcontextprotocol/client": "2.0.0",
60
54
  "@modelcontextprotocol/core": "2.0.0",
61
55
  "@modelcontextprotocol/ext-apps": "^1.2.2",
62
56
  "@modelcontextprotocol/sdk": "^1.29.0",
63
57
  "@mozilla/readability": "^0.6.0",
64
58
  "@napi-rs/keyring": "^1.3.0",
65
- "@narumitw/pi-btw": "0.55.1",
66
- "@narumitw/pi-tui-kit": "^0.57.0",
59
+ "@narumitw/pi-btw": "0.55.4",
60
+ "@narumitw/pi-tui-kit": "^0.59.0",
67
61
  "@noble/ed25519": "^3.1.0",
68
62
  "@pi-plugins/fast-mode": "0.1.10",
69
63
  "@shikijs/cli": "^4.0.2",
70
64
  "@sinclair/typebox": "^0.34.49",
65
+ "@tifan/pi-copy-response": "0.2.6",
66
+ "@tifan/pi-handoff": "2.0.1",
67
+ "@tifan/pi-inline-skills": "1.0.5",
68
+ "@tifan/pi-mermaid-open": "0.2.0",
69
+ "@tifan/pi-preferred-thinking": "1.0.0",
70
+ "@tifan/pi-recap": "0.4.5",
71
+ "@tifan/pi-rename": "0.5.1",
72
+ "@tifan/pi-titlebar-spinner": "0.1.3",
73
+ "@vectorize-io/hindsight-client": "^0.9.0",
71
74
  "ajv": "^8.17.1",
72
75
  "ajv-formats": "^3.0.1",
73
76
  "chalk": "^6.0.0",
74
77
  "croner": "^10.0.1",
75
78
  "cross-spawn": "^7.0.6",
79
+ "defuddle": "0.19.3",
76
80
  "effect": "4.0.0-beta.103",
77
81
  "gpt-tokenizer": "^3.4.0",
78
82
  "grok-mermaid": "0.2.2",
79
83
  "jiti": "^2.7.0",
80
84
  "js-yaml": "^5.2.2",
85
+ "jsonc-parser": "^3.3.1",
81
86
  "linkedom": "^0.16.0",
82
87
  "minimatch": "^10.2.6",
83
88
  "nanoid": "^5.0.0",
84
89
  "open": "^10.2.0",
85
90
  "p-limit": "^6.1.0",
86
91
  "pi-footer": "0.5.1",
87
- "pi-lens": "4.1.1",
88
- "pi-mcp-adapter": "2.27.0",
89
- "pi-web-access": "0.24.2",
92
+ "pi-lens": "4.1.2",
93
+ "pi-mcp-adapter": "2.29.0",
94
+ "pi-web-access": "0.25.0",
90
95
  "pidusage": "^4.0.1",
91
96
  "promise.try": "^2.0.1",
92
97
  "qrcode-terminal": "^0.12.0",
@@ -96,6 +101,7 @@
96
101
  "strip-json-comments": "^5.0.3",
97
102
  "turndown": "^7.2.0",
98
103
  "typebox": "^1.1.38",
104
+ "unbash": "4.0.10",
99
105
  "undici": "^8.9.0",
100
106
  "unpdf": "^1.6.2",
101
107
  "vscode-jsonrpc": "^9.0.0",
@@ -109,20 +115,21 @@
109
115
  "@czottmann/pi-automode",
110
116
  "@dietrichgebert/ponytail",
111
117
  "@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
118
  "@herbertgao/pi-stash",
120
119
  "@herbertgao/pi-subagents",
121
- "@herbertgao/pi-titlebar-spinner",
122
120
  "@herbertgao/resume-from",
123
121
  "@juicesharp/rpiv-ask-user-question",
122
+ "@luxusai/pi-hindsight",
124
123
  "@narumitw/pi-btw",
125
124
  "@pi-plugins/fast-mode",
125
+ "@tifan/pi-copy-response",
126
+ "@tifan/pi-handoff",
127
+ "@tifan/pi-inline-skills",
128
+ "@tifan/pi-mermaid-open",
129
+ "@tifan/pi-preferred-thinking",
130
+ "@tifan/pi-recap",
131
+ "@tifan/pi-rename",
132
+ "@tifan/pi-titlebar-spinner",
126
133
  "pi-footer",
127
134
  "pi-lens",
128
135
  "pi-mcp-adapter",
@@ -136,19 +143,20 @@
136
143
  "extensions": [
137
144
  "./node_modules/@dietrichgebert/ponytail/pi-extension/index.js",
138
145
  "./node_modules/@herbertgao/pi-cc-extensions/extensions/index.ts",
139
- "./node_modules/@herbertgao/pi-copy-response/src/index.ts",
146
+ "./node_modules/@tifan/pi-copy-response/src/index.ts",
140
147
  "./node_modules/@herbertgao/resume-from/shims/pi/extensions/resume-from.js",
141
- "./node_modules/@herbertgao/pi-handoff/src/index.ts",
142
- "./node_modules/@herbertgao/pi-handoff/src/session-query.ts",
143
- "./node_modules/@herbertgao/pi-inline-skills/src/index.ts",
144
- "./node_modules/@herbertgao/pi-mermaid-open/src/index.ts",
145
- "./node_modules/@herbertgao/pi-preferred-thinking/src/index.ts",
146
- "./node_modules/@herbertgao/pi-recap/src/index.ts",
147
- "./node_modules/@herbertgao/pi-rename/src/index.ts",
148
+ "./node_modules/@tifan/pi-handoff/src/index.ts",
149
+ "./node_modules/@tifan/pi-handoff/src/session-query.ts",
150
+ "./node_modules/@tifan/pi-inline-skills/src/index.ts",
151
+ "./node_modules/@tifan/pi-mermaid-open/src/index.ts",
152
+ "./node_modules/@tifan/pi-preferred-thinking/src/index.ts",
153
+ "./node_modules/@tifan/pi-recap/src/index.ts",
154
+ "./node_modules/@tifan/pi-rename/src/index.ts",
148
155
  "./node_modules/@herbertgao/pi-stash/src/index.ts",
149
156
  "./node_modules/@herbertgao/pi-subagents/src/index.ts",
150
- "./node_modules/@herbertgao/pi-titlebar-spinner/src/index.ts",
157
+ "./node_modules/@tifan/pi-titlebar-spinner/src/index.ts",
151
158
  "./node_modules/@juicesharp/rpiv-ask-user-question/index.ts",
159
+ "./node_modules/@luxusai/pi-hindsight/extensions/index.ts",
152
160
  "./node_modules/@narumitw/pi-btw/dist/index.ts",
153
161
  "./node_modules/@pi-plugins/fast-mode/dist/index.mjs",
154
162
  "./node_modules/pi-mcp-adapter/index.ts",
@@ -165,6 +173,7 @@
165
173
  "skills": [
166
174
  "./node_modules/@czottmann/pi-automode/skills",
167
175
  "./node_modules/@dietrichgebert/ponytail/skills",
176
+ "./node_modules/@luxusai/pi-hindsight/skills",
168
177
  "./node_modules/pi-mcp-adapter/skills",
169
178
  "./node_modules/pi-lens/skills"
170
179
  ]
@@ -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