@herbertgao/pi-extensions 2026.9.5 → 2026.9.7

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 (276) hide show
  1. package/README.md +5 -22
  2. package/THIRD_PARTY_NOTICES.md +0 -4
  3. package/node_modules/@herbertgao/sol-pi/docs/compatibility.md +1 -1
  4. package/node_modules/@herbertgao/sol-pi/package.json +1 -1
  5. package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/action-fusion/index.ts +0 -5
  6. package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/state.ts +3 -1
  7. package/node_modules/@narumitw/pi-btw/README.md +2 -0
  8. package/node_modules/@narumitw/pi-btw/dist/index.ts +284 -365
  9. package/node_modules/@narumitw/pi-btw/dist/index.ts.map +3 -3
  10. package/node_modules/@narumitw/pi-btw/package.json +52 -53
  11. package/node_modules/@narumitw/pi-btw/src/bring-to-main.ts +494 -547
  12. package/node_modules/@narumitw/pi-btw/src/btw.ts +814 -856
  13. package/node_modules/@narumitw/pi-btw/src/fullscreen-ui.ts +673 -674
  14. package/node_modules/@narumitw/pi-btw/src/keybindings.ts +228 -270
  15. package/node_modules/@narumitw/pi-btw/src/main-tree-picker.ts +309 -318
  16. package/node_modules/@narumitw/pi-btw/src/menu.ts +416 -454
  17. package/node_modules/@narumitw/pi-btw/src/settings.ts +203 -219
  18. package/node_modules/@narumitw/pi-btw/src/side-thread.ts +173 -201
  19. package/node_modules/@narumitw/pi-btw/src/text.ts +21 -23
  20. package/node_modules/@narumitw/pi-btw/src/transcript-markdown.ts +65 -0
  21. package/node_modules/@narumitw/pi-btw/src/transcript-pager.ts +611 -662
  22. package/node_modules/pi-lens/CHANGELOG.md +239 -0
  23. package/node_modules/pi-lens/config/dependency-cruiser-eager-allowlist.json +3 -0
  24. package/node_modules/pi-lens/dist/clients/actionable-warnings.js +30 -4
  25. package/node_modules/pi-lens/dist/clients/agent-behavior-client.js +2 -0
  26. package/node_modules/pi-lens/dist/clients/bash-file-access.js +26 -0
  27. package/node_modules/pi-lens/dist/clients/biome-client.js +1 -1
  28. package/node_modules/pi-lens/dist/clients/blocker-freshness.js +403 -35
  29. package/node_modules/pi-lens/dist/clients/bootstrap.js +6 -1
  30. package/node_modules/pi-lens/dist/clients/cascade-format.js +200 -4
  31. package/node_modules/pi-lens/dist/clients/code-quality-warnings.js +10 -2
  32. package/node_modules/pi-lens/dist/clients/degradation-ledger.js +16 -1
  33. package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +12 -1
  34. package/node_modules/pi-lens/dist/clients/dispatch/ast-grep-catalog.js +65 -0
  35. package/node_modules/pi-lens/dist/clients/dispatch/auxiliary-lsp.js +28 -0
  36. package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +9 -2
  37. package/node_modules/pi-lens/dist/clients/dispatch/finding-policy.js +222 -0
  38. package/node_modules/pi-lens/dist/clients/dispatch/indent-detect.js +389 -13
  39. package/node_modules/pi-lens/dist/clients/dispatch/integration.js +175 -25
  40. package/node_modules/pi-lens/dist/clients/dispatch/rule-ignores.js +62 -0
  41. package/node_modules/pi-lens/dist/clients/dispatch/runners/ast-grep-napi.js +21 -41
  42. package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +6 -1
  43. package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +7 -7
  44. package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +2 -12
  45. package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +2 -21
  46. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +1 -1
  47. package/node_modules/pi-lens/dist/clients/dispatch/types.js +4 -1
  48. package/node_modules/pi-lens/dist/clients/disposition-publish.js +1 -0
  49. package/node_modules/pi-lens/dist/clients/effective-config.js +1 -1
  50. package/node_modules/pi-lens/dist/clients/file-kinds.js +26 -1
  51. package/node_modules/pi-lens/dist/clients/file-role.js +21 -21
  52. package/node_modules/pi-lens/dist/clients/file-utils.js +156 -10
  53. package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +56 -9
  54. package/node_modules/pi-lens/dist/clients/format-service.js +39 -21
  55. package/node_modules/pi-lens/dist/clients/formatters.js +60 -13
  56. package/node_modules/pi-lens/dist/clients/generation-guard.js +2 -2
  57. package/node_modules/pi-lens/dist/clients/git-guard.js +11 -3
  58. package/node_modules/pi-lens/dist/clients/indent-retarget.js +78 -8
  59. package/node_modules/pi-lens/dist/clients/installer/index.js +333 -114
  60. package/node_modules/pi-lens/dist/clients/instance-reaper-state.js +7 -0
  61. package/node_modules/pi-lens/dist/clients/instance-reaper.js +20 -10
  62. package/node_modules/pi-lens/dist/clients/language-profile.js +23 -1
  63. package/node_modules/pi-lens/dist/clients/language-registry.js +5 -1
  64. package/node_modules/pi-lens/dist/clients/latency-logger.js +4 -1
  65. package/node_modules/pi-lens/dist/clients/lens-engine.js +12 -3
  66. package/node_modules/pi-lens/dist/clients/lens-events.js +2 -1
  67. package/node_modules/pi-lens/dist/clients/lens-flag-registry.js +79 -0
  68. package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +2 -1
  69. package/node_modules/pi-lens/dist/clients/lsp/client.js +25 -21
  70. package/node_modules/pi-lens/dist/clients/lsp/config.js +2 -2
  71. package/node_modules/pi-lens/dist/clients/lsp/index.js +7 -0
  72. package/node_modules/pi-lens/dist/clients/lsp/launch.js +16 -4
  73. package/node_modules/pi-lens/dist/clients/lsp/server.js +19 -2
  74. package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +2 -1
  75. package/node_modules/pi-lens/dist/clients/lsp-mutation.js +5 -3
  76. package/node_modules/pi-lens/dist/clients/map-with-concurrency.js +12 -8
  77. package/node_modules/pi-lens/dist/clients/mcp/session.js +36 -4
  78. package/node_modules/pi-lens/dist/clients/ndjson-logger.js +24 -7
  79. package/node_modules/pi-lens/dist/clients/observed-mutation.js +40 -2
  80. package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +23 -3
  81. package/node_modules/pi-lens/dist/clients/opengrep-client.js +110 -15
  82. package/node_modules/pi-lens/dist/clients/path-utils.js +123 -3
  83. package/node_modules/pi-lens/dist/clients/performance-report.js +5 -1
  84. package/node_modules/pi-lens/dist/clients/php-cs-fixer-config.js +1 -1
  85. package/node_modules/pi-lens/dist/clients/pipeline.js +74 -5
  86. package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +37 -5
  87. package/node_modules/pi-lens/dist/clients/project-diagnostics/fresh-fetch.js +145 -18
  88. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/dead-code.js +4 -1
  89. package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +59 -3
  90. package/node_modules/pi-lens/dist/clients/project-lens-config.js +45 -2
  91. package/node_modules/pi-lens/dist/clients/read-guard.js +70 -11
  92. package/node_modules/pi-lens/dist/clients/resource-sampler.js +147 -9
  93. package/node_modules/pi-lens/dist/clients/ruff-client.js +1 -1
  94. package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +33 -5
  95. package/node_modules/pi-lens/dist/clients/runtime-context.js +6 -2
  96. package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +77 -7
  97. package/node_modules/pi-lens/dist/clients/runtime-session.js +21 -2
  98. package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +43 -12
  99. package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +330 -85
  100. package/node_modules/pi-lens/dist/clients/runtime-turn.js +147 -17
  101. package/node_modules/pi-lens/dist/clients/safe-spawn.js +258 -5
  102. package/node_modules/pi-lens/dist/clients/scratch-tree-policy.js +6 -0
  103. package/node_modules/pi-lens/dist/clients/session-event-guard.js +50 -5
  104. package/node_modules/pi-lens/dist/clients/sg-runner.js +23 -11
  105. package/node_modules/pi-lens/dist/clients/sgconfig.js +79 -2
  106. package/node_modules/pi-lens/dist/clients/test-runner-client.js +6 -41
  107. package/node_modules/pi-lens/dist/clients/test-runner-delivery.js +43 -0
  108. package/node_modules/pi-lens/dist/clients/tool-agreement.js +423 -0
  109. package/node_modules/pi-lens/dist/clients/tool-config.js +50 -0
  110. package/node_modules/pi-lens/dist/clients/tool-cwd.js +47 -76
  111. package/node_modules/pi-lens/dist/clients/tool-policy.js +163 -7
  112. package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +120 -0
  113. package/node_modules/pi-lens/dist/clients/tree-sitter-query-loader.js +127 -189
  114. package/node_modules/pi-lens/dist/clients/widget-state.js +98 -0
  115. package/node_modules/pi-lens/dist/clients/word-index.js +5 -2
  116. package/node_modules/pi-lens/dist/clients/write-ordering-guard.js +7 -0
  117. package/node_modules/pi-lens/dist/index.js +27416 -24153
  118. package/node_modules/pi-lens/dist/mcp/server.js +5 -2
  119. package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +7 -1
  120. package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +168 -53
  121. package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +244 -72
  122. package/node_modules/pi-lens/docs/audit1.md +5 -5
  123. package/node_modules/pi-lens/docs/dependencies.md +11 -0
  124. package/node_modules/pi-lens/docs/dispositions.md +52 -0
  125. package/node_modules/pi-lens/docs/environment-variables.md +2 -2
  126. package/node_modules/pi-lens/docs/features.md +4 -4
  127. package/node_modules/pi-lens/docs/globalconfig.md +3 -1
  128. package/node_modules/pi-lens/docs/language-coverage.md +1 -0
  129. package/node_modules/pi-lens/docs/pi-lens-fixer.md +53 -94
  130. package/node_modules/pi-lens/docs/pi-lens-investigator.md +43 -38
  131. package/node_modules/pi-lens/docs/pi-lens-retro.md +97 -0
  132. package/node_modules/pi-lens/docs/pi-lens-reviewer.md +53 -66
  133. package/node_modules/pi-lens/docs/release-qa-baseline.md +22 -0
  134. package/node_modules/pi-lens/docs/settings.md +7 -4
  135. package/node_modules/pi-lens/docs/tree-sitter_rules_catalog.md +1 -1
  136. package/node_modules/pi-lens/docs/usage.md +2 -0
  137. package/node_modules/pi-lens/package.json +1 -1
  138. package/node_modules/pi-lens/rules/tree-sitter-queries/typescript/sql-injection.yml +24 -12
  139. package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +40 -0
  140. package/node_modules/pi-lens/skills/pi-lens-ast-grep/SKILL.md +15 -0
  141. package/node_modules/pi-lens/skills/pi-lens-lsp-navigation/SKILL.md +7 -0
  142. package/package.json +6 -17
  143. package/examples/pi-footer.json +0 -275
  144. package/node_modules/@czottmann/pi-automode/CHANGELOG.md +0 -70
  145. package/node_modules/@czottmann/pi-automode/LICENSE.md +0 -21
  146. package/node_modules/@czottmann/pi-automode/README.md +0 -215
  147. package/node_modules/@czottmann/pi-automode/docs/GLOSSARY.md +0 -39
  148. package/node_modules/@czottmann/pi-automode/docs/adr/ADR-001-permission-precedence-and-trust-boundaries.md +0 -46
  149. package/node_modules/@czottmann/pi-automode/docs/adr/ADR-002-global-config-in-extension-data-directory.md +0 -60
  150. package/node_modules/@czottmann/pi-automode/docs/adr/INDEX.md +0 -6
  151. package/node_modules/@czottmann/pi-automode/docs/automode-classifier-flow.md +0 -428
  152. package/node_modules/@czottmann/pi-automode/docs/configuration.md +0 -171
  153. package/node_modules/@czottmann/pi-automode/docs/defaults.md +0 -178
  154. package/node_modules/@czottmann/pi-automode/docs/diagnostics.md +0 -90
  155. package/node_modules/@czottmann/pi-automode/docs/observability-logging.md +0 -160
  156. package/node_modules/@czottmann/pi-automode/examples/automode.local.json +0 -44
  157. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/bash.ts +0 -692
  158. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/classifier.ts +0 -852
  159. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/config.ts +0 -904
  160. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/constants.ts +0 -228
  161. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/extension.ts +0 -954
  162. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/hard-deny.ts +0 -429
  163. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/log.ts +0 -173
  164. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/model-selector.ts +0 -113
  165. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/model.ts +0 -13
  166. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/paths.ts +0 -297
  167. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/permissions.ts +0 -623
  168. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/state.ts +0 -102
  169. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/transcript.ts +0 -236
  170. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/types.ts +0 -205
  171. package/node_modules/@czottmann/pi-automode/extensions/auto-mode/utils.ts +0 -54
  172. package/node_modules/@czottmann/pi-automode/extensions/auto-mode.ts +0 -26
  173. package/node_modules/@czottmann/pi-automode/package.json +0 -61
  174. package/node_modules/@czottmann/pi-automode/skills/automode-diagnostics/SKILL.md +0 -63
  175. package/node_modules/@luxusai/pi-hindsight/CHANGELOG.md +0 -376
  176. package/node_modules/@luxusai/pi-hindsight/README.md +0 -92
  177. package/node_modules/@luxusai/pi-hindsight/docs/adr/001-memory-lifecycle-and-scope.md +0 -56
  178. package/node_modules/@luxusai/pi-hindsight/docs/adr/002-explicit-routing-strategy-seam.md +0 -169
  179. package/node_modules/@luxusai/pi-hindsight/docs/adr/003-tui-memory-mode-vocabulary.md +0 -107
  180. package/node_modules/@luxusai/pi-hindsight/docs/adr/004-lifeos-dual-bank-design.md +0 -89
  181. package/node_modules/@luxusai/pi-hindsight/docs/adr/005-domain-banks-and-agent-first-surface.md +0 -189
  182. package/node_modules/@luxusai/pi-hindsight/docs/assets/logos/pi-hindsight-logo-dark.webp +0 -0
  183. package/node_modules/@luxusai/pi-hindsight/docs/assets/logos/pi-hindsight-logo-dark@2x.webp +0 -0
  184. package/node_modules/@luxusai/pi-hindsight/docs/coding-memory-evaluation.md +0 -54
  185. package/node_modules/@luxusai/pi-hindsight/docs/compatibility.md +0 -75
  186. package/node_modules/@luxusai/pi-hindsight/docs/hindsight-core-functions.md +0 -300
  187. package/node_modules/@luxusai/pi-hindsight/docs/mission-and-mental-model-quality.md +0 -158
  188. package/node_modules/@luxusai/pi-hindsight/docs/next-opt-out-design.md +0 -164
  189. package/node_modules/@luxusai/pi-hindsight/docs/risky-memory-modes.md +0 -139
  190. package/node_modules/@luxusai/pi-hindsight/docs/starter-mental-model-suggestions.md +0 -74
  191. package/node_modules/@luxusai/pi-hindsight/docs/surface-reference.md +0 -261
  192. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-operations.ts +0 -151
  193. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-selection.ts +0 -18
  194. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-settings-presenter.ts +0 -46
  195. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-templates.ts +0 -383
  196. package/node_modules/@luxusai/pi-hindsight/extensions/banks/banking.ts +0 -240
  197. package/node_modules/@luxusai/pi-hindsight/extensions/banks/knowledge-page-seed.ts +0 -176
  198. package/node_modules/@luxusai/pi-hindsight/extensions/banks/retain-strategies.ts +0 -178
  199. package/node_modules/@luxusai/pi-hindsight/extensions/client/client-retry.ts +0 -41
  200. package/node_modules/@luxusai/pi-hindsight/extensions/client/client.ts +0 -386
  201. package/node_modules/@luxusai/pi-hindsight/extensions/client/fetch-compat.ts +0 -39
  202. package/node_modules/@luxusai/pi-hindsight/extensions/client/timeout.ts +0 -34
  203. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-defaults.ts +0 -140
  204. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-editing-model.ts +0 -61
  205. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-editing-registry.ts +0 -925
  206. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-field-paths.ts +0 -247
  207. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-normalize.ts +0 -547
  208. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-writer.ts +0 -480
  209. package/node_modules/@luxusai/pi-hindsight/extensions/config/config.ts +0 -182
  210. package/node_modules/@luxusai/pi-hindsight/extensions/config/setup-gate.ts +0 -86
  211. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-execute.ts +0 -1010
  212. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-parse.ts +0 -175
  213. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-plan.ts +0 -425
  214. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-presentation.ts +0 -210
  215. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-sessions.ts +0 -817
  216. package/node_modules/@luxusai/pi-hindsight/extensions/index.ts +0 -25
  217. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/git-seed.ts +0 -319
  218. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-recall.ts +0 -196
  219. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-retain.ts +0 -189
  220. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-runtime.ts +0 -65
  221. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle.ts +0 -260
  222. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/mental-models.ts +0 -244
  223. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/observation-scopes.ts +0 -59
  224. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall-cleanup.ts +0 -82
  225. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall-visibility.ts +0 -45
  226. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall.ts +0 -331
  227. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-cursor.ts +0 -354
  228. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-job-builder.ts +0 -66
  229. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-receipts.ts +0 -132
  230. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain.ts +0 -228
  231. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-bank-template-operations.ts +0 -74
  232. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-config-operations.ts +0 -16
  233. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-control-operations.ts +0 -648
  234. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-diagnostics-operations.ts +0 -105
  235. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-identity.ts +0 -68
  236. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-operation-service.ts +0 -71
  237. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-operation-types.ts +0 -13
  238. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-recall-operations.ts +0 -162
  239. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-retain-operations.ts +0 -131
  240. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-scope.ts +0 -104
  241. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-session-operations.ts +0 -37
  242. package/node_modules/@luxusai/pi-hindsight/extensions/operations/operation-catalog.ts +0 -893
  243. package/node_modules/@luxusai/pi-hindsight/extensions/operations/reflect-presenter.ts +0 -35
  244. package/node_modules/@luxusai/pi-hindsight/extensions/operations/scope-migrate.ts +0 -177
  245. package/node_modules/@luxusai/pi-hindsight/extensions/operations/tools.ts +0 -7
  246. package/node_modules/@luxusai/pi-hindsight/extensions/queue/flush-presenter.ts +0 -21
  247. package/node_modules/@luxusai/pi-hindsight/extensions/queue/jsonl-queue-store.ts +0 -112
  248. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-delivery.ts +0 -111
  249. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-lock.ts +0 -214
  250. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-operations.ts +0 -70
  251. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue.ts +0 -392
  252. package/node_modules/@luxusai/pi-hindsight/extensions/tui/bank-template-presentation.ts +0 -45
  253. package/node_modules/@luxusai/pi-hindsight/extensions/tui/commands.ts +0 -9
  254. package/node_modules/@luxusai/pi-hindsight/extensions/tui/guided-setup.ts +0 -860
  255. package/node_modules/@luxusai/pi-hindsight/extensions/tui/prefill-input.ts +0 -105
  256. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-flow.ts +0 -189
  257. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-server-probe.ts +0 -299
  258. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-actions.ts +0 -201
  259. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-facts.ts +0 -47
  260. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-render.ts +0 -239
  261. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-types.ts +0 -50
  262. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui.ts +0 -259
  263. package/node_modules/@luxusai/pi-hindsight/extensions/tui/tool-presenters.ts +0 -77
  264. package/node_modules/@luxusai/pi-hindsight/extensions/types.ts +0 -534
  265. package/node_modules/@luxusai/pi-hindsight/extensions/utils/diagnostics.ts +0 -319
  266. package/node_modules/@luxusai/pi-hindsight/extensions/utils/messages.ts +0 -325
  267. package/node_modules/@luxusai/pi-hindsight/extensions/utils/sanitize.ts +0 -42
  268. package/node_modules/@luxusai/pi-hindsight/extensions/utils/session-memory-meta.ts +0 -244
  269. package/node_modules/@luxusai/pi-hindsight/extensions/utils/session-operations.ts +0 -56
  270. package/node_modules/@luxusai/pi-hindsight/extensions/utils/session.ts +0 -50
  271. package/node_modules/@luxusai/pi-hindsight/extensions/utils/status-fields.ts +0 -167
  272. package/node_modules/@luxusai/pi-hindsight/extensions/utils/status-health.ts +0 -207
  273. package/node_modules/@luxusai/pi-hindsight/extensions/utils/status.ts +0 -120
  274. package/node_modules/@luxusai/pi-hindsight/extensions/version.ts +0 -8
  275. package/node_modules/@luxusai/pi-hindsight/package.json +0 -118
  276. package/node_modules/@luxusai/pi-hindsight/skills/hindsight-memory-doctor/SKILL.md +0 -75
@@ -1,386 +0,0 @@
1
- import {
2
- CLIENT_VERSION,
3
- HindsightClient,
4
- HindsightError,
5
- createClient,
6
- createConfig,
7
- sdk,
8
- } from "@vectorize-io/hindsight-client";
9
- import type { BankTemplateManifest, Client, ReflectRequest } from "@vectorize-io/hindsight-client";
10
- import { redactError } from "../utils/sanitize.js";
11
- import type { HindsightLikeClient, ResolvedConfig } from "../types.js";
12
- import { PI_HINDSIGHT_USER_AGENT } from "../version.js";
13
- import { withRetry } from "./client-retry.js";
14
- import { installFetchRequestCompat } from "./fetch-compat.js";
15
- import { withTimeout } from "./timeout.js";
16
-
17
- type ReflectOptions = Parameters<HindsightLikeClient["reflect"]>[2];
18
- type RetainOptions = Parameters<HindsightLikeClient["retain"]>[2];
19
-
20
- function sdkHeaders(config: ResolvedConfig): Record<string, string> {
21
- const headers: Record<string, string> = {
22
- "User-Agent": PI_HINDSIGHT_USER_AGENT,
23
- };
24
- if (config.hindsight.apiKey) headers.Authorization = `Bearer ${config.hindsight.apiKey}`;
25
- return headers;
26
- }
27
-
28
- function createLowLevelClient(config: ResolvedConfig): Client {
29
- return createClient(
30
- createConfig({
31
- baseUrl: config.hindsight.baseUrl.replace(/\/$/, ""),
32
- headers: sdkHeaders(config),
33
- }),
34
- );
35
- }
36
-
37
- function unwrapSdkResponse<T>(
38
- response: { data?: T; error?: unknown; response?: Response },
39
- operation: string,
40
- ): T {
41
- if (response.data !== undefined) return response.data;
42
- const error = response.error as { detail?: unknown; message?: string } | undefined;
43
- const statusCode = response.response?.status;
44
- const details = error?.detail ?? error?.message ?? error;
45
- throw new HindsightError(`${operation} failed: ${JSON.stringify(details)}`, statusCode, details);
46
- }
47
-
48
- function reflectInclude(options: ReflectOptions): ReflectRequest["include"] | undefined {
49
- if (options?.includeFacts === undefined && options?.includeToolCalls === undefined) {
50
- return undefined;
51
- }
52
- const include: NonNullable<ReflectRequest["include"]> = {};
53
- if (options?.includeFacts !== undefined) {
54
- include.facts = options.includeFacts ? {} : null;
55
- }
56
- if (options?.includeToolCalls !== undefined) {
57
- include.tool_calls = options.includeToolCalls
58
- ? options.includeToolCallOutput === false
59
- ? { output: false }
60
- : {}
61
- : null;
62
- }
63
- return include;
64
- }
65
-
66
- function reflectRequestBody(query: string, options: ReflectOptions | undefined): ReflectRequest {
67
- const body: ReflectRequest = {
68
- query,
69
- budget: options?.budget ?? "low",
70
- };
71
- if (options?.context) body.context = options.context;
72
- if (options?.maxTokens !== undefined) body.max_tokens = options.maxTokens;
73
- if (options?.responseSchema) body.response_schema = options.responseSchema;
74
- if (options?.factTypes) body.fact_types = options.factTypes;
75
- if (options?.excludeMentalModels !== undefined) {
76
- body.exclude_mental_models = options.excludeMentalModels;
77
- }
78
- if (options?.excludeMentalModelIds) {
79
- body.exclude_mental_model_ids = options.excludeMentalModelIds;
80
- }
81
- if (options?.tagGroups) body.tag_groups = options.tagGroups;
82
- else if (options?.tags) body.tags = options.tags;
83
- if (!options?.tagGroups && options?.tagsMatch) body.tags_match = options.tagsMatch;
84
- const include = reflectInclude(options);
85
- if (include) body.include = include;
86
- return body;
87
- }
88
-
89
- function retainBatchItem(content: string, options: RetainOptions) {
90
- return {
91
- content,
92
- ...(options?.timestamp ? { timestamp: options.timestamp } : {}),
93
- ...(options?.context ? { context: options.context } : {}),
94
- ...(options?.metadata ? { metadata: options.metadata } : {}),
95
- ...(options?.documentId ? { document_id: options.documentId } : {}),
96
- ...(options?.entities?.length ? { entities: options.entities } : {}),
97
- ...(options?.tags ? { tags: options.tags } : {}),
98
- ...(options?.observationScopes?.length
99
- ? { observation_scopes: options.observationScopes }
100
- : {}),
101
- ...(options?.updateMode ? { update_mode: options.updateMode } : {}),
102
- ...(options?.strategy ? { strategy: options.strategy } : {}),
103
- };
104
- }
105
-
106
- function retainSingle(
107
- raw: HindsightClient,
108
- bankId: string,
109
- content: string,
110
- options: RetainOptions,
111
- signal: AbortSignal,
112
- ) {
113
- if (options?.documentTags?.length) {
114
- return raw.retainBatch(bankId, [retainBatchItem(content, options)], {
115
- ...(options.async !== undefined ? { async: options.async } : {}),
116
- ...(options.async === true && options.operationId != null
117
- ? { operationId: options.operationId }
118
- : {}),
119
- documentTags: options.documentTags,
120
- signal,
121
- });
122
- }
123
-
124
- const { documentTags: _documentTags, signal: _signal, ...retainOptions } = options ?? {};
125
- return raw.retain(bankId, content, { ...retainOptions, signal });
126
- }
127
-
128
- async function reflect(
129
- args: {
130
- raw: HindsightClient;
131
- lowLevel: Client;
132
- bankId: string;
133
- query: string;
134
- options: ReflectOptions;
135
- },
136
- signal: AbortSignal,
137
- ): Promise<unknown> {
138
- if (args.options?.maxTokens !== undefined) {
139
- const response = await sdk.reflect({
140
- client: args.lowLevel,
141
- path: { bank_id: args.bankId },
142
- body: reflectRequestBody(args.query, args.options),
143
- signal,
144
- });
145
- return unwrapSdkResponse(response, "reflect");
146
- }
147
-
148
- return args.raw.reflect(args.bankId, args.query, { ...args.options, signal });
149
- }
150
-
151
- async function importBankTemplate(
152
- lowLevel: Client,
153
- bankId: string,
154
- manifest: BankTemplateManifest,
155
- options: { dryRun?: boolean } | undefined,
156
- signal: AbortSignal,
157
- ): Promise<unknown> {
158
- const response = await sdk.importBankTemplate({
159
- client: lowLevel,
160
- path: { bank_id: bankId },
161
- ...(options?.dryRun ? { query: { dry_run: true } } : {}),
162
- // The generated SDK types `body` as `never` for this endpoint: the OpenAPI schema
163
- // declares a raw JSON object rather than a typed model. The request body is still the
164
- // documented BankTemplateManifest shape (Hindsight's Bank Templates API docs).
165
- body: manifest as never,
166
- signal,
167
- });
168
- return unwrapSdkResponse(response, "importBankTemplate");
169
- }
170
-
171
- export function createHindsightClient(config: ResolvedConfig): HindsightLikeClient {
172
- installFetchRequestCompat();
173
-
174
- const raw = new HindsightClient({
175
- baseUrl: config.hindsight.baseUrl,
176
- ...(config.hindsight.apiKey ? { apiKey: config.hindsight.apiKey } : {}),
177
- userAgent: PI_HINDSIGHT_USER_AGENT,
178
- });
179
- const lowLevel = createLowLevelClient(config);
180
- const timeoutMs = config.hindsight.timeoutMs;
181
-
182
- return {
183
- retain: (bankId, content, options) =>
184
- withTimeout(
185
- "hindsight retain",
186
- timeoutMs,
187
- (signal) => retainSingle(raw, bankId, content, options, signal),
188
- options?.signal,
189
- ),
190
- retainBatch: (...args) =>
191
- withTimeout(
192
- "hindsight retainBatch",
193
- timeoutMs,
194
- (signal) => {
195
- const [bankId, items, options] = args;
196
- return raw.retainBatch(bankId, items, { ...options, signal });
197
- },
198
- args[2]?.signal,
199
- ),
200
- recall: (...args) => {
201
- const [bankId, query, options] = args;
202
- return withTimeout(
203
- "hindsight recall",
204
- timeoutMs,
205
- (signal) => raw.recall(bankId, query, { ...options, signal }),
206
- options?.signal,
207
- );
208
- },
209
- reflect: (bankId, query, options) =>
210
- withTimeout(
211
- "hindsight reflect",
212
- timeoutMs,
213
- (signal) => reflect({ raw, lowLevel, bankId, query, options }, signal),
214
- options?.signal,
215
- ),
216
- createBank: (...args) =>
217
- withTimeout("hindsight createBank", timeoutMs, (signal) => {
218
- const [bankId, options] = args;
219
- return raw.createBank(bankId, { ...options, signal });
220
- }),
221
- getBankProfile: (...args) =>
222
- withTimeout("hindsight getBankProfile", timeoutMs, (signal) =>
223
- withRetry("getBankProfile", () => raw.getBankProfile(args[0], { signal })),
224
- ),
225
- getBankStats: (bankId) =>
226
- withTimeout("hindsight getBankStats", timeoutMs, (signal) =>
227
- withRetry("getBankStats", async () => {
228
- const response = await sdk.getAgentStats({
229
- client: lowLevel,
230
- path: { bank_id: bankId },
231
- signal,
232
- });
233
- return unwrapSdkResponse(response, "getBankStats");
234
- }),
235
- ),
236
- getBankConfig: (bankId) =>
237
- withTimeout("hindsight getBankConfig", timeoutMs, (signal) =>
238
- withRetry("getBankConfig", () => raw.getBankConfig(bankId, { signal })),
239
- ),
240
- importBankTemplate: (bankId, manifest, options) =>
241
- withTimeout(
242
- "hindsight importBankTemplate",
243
- timeoutMs,
244
- (signal) => importBankTemplate(lowLevel, bankId, manifest, options, signal),
245
- options?.signal,
246
- ),
247
- listMentalModels: (bankId, options) =>
248
- withTimeout(
249
- "hindsight listMentalModels",
250
- timeoutMs,
251
- (signal) => raw.listMentalModels(bankId, { ...options, signal }),
252
- options?.signal,
253
- ),
254
- getMentalModel: (bankId, mentalModelId, options) =>
255
- withTimeout(
256
- "hindsight getMentalModel",
257
- timeoutMs,
258
- (signal) => raw.getMentalModel(bankId, mentalModelId, { ...options, signal }),
259
- options?.signal,
260
- ),
261
- createMentalModel: (bankId, name, sourceQuery, options) =>
262
- withTimeout(
263
- "hindsight createMentalModel",
264
- timeoutMs,
265
- (signal) => raw.createMentalModel(bankId, name, sourceQuery, { ...options, signal }),
266
- options?.signal,
267
- ),
268
- updateMentalModel: (bankId, mentalModelId, options) =>
269
- withTimeout(
270
- "hindsight updateMentalModel",
271
- timeoutMs,
272
- (signal) => raw.updateMentalModel(bankId, mentalModelId, { ...options, signal }),
273
- options?.signal,
274
- ),
275
- refreshMentalModel: (bankId, mentalModelId, options) =>
276
- withTimeout(
277
- "hindsight refreshMentalModel",
278
- timeoutMs,
279
- (signal) => raw.refreshMentalModel(bankId, mentalModelId, { ...options, signal }),
280
- options?.signal,
281
- ),
282
- deleteMentalModel: (bankId, mentalModelId, options) =>
283
- withTimeout(
284
- "hindsight deleteMentalModel",
285
- timeoutMs,
286
- async (signal) => {
287
- if (options?.dryRun) {
288
- return { dryRun: true, bankId, mentalModelId, wouldDelete: true };
289
- }
290
- await raw.deleteMentalModel(bankId, mentalModelId, { signal });
291
- return { deleted: true, bankId, mentalModelId };
292
- },
293
- options?.signal,
294
- ),
295
- getKnowledgeBaseTree: (bankId, options) =>
296
- withTimeout(
297
- "hindsight getKnowledgeBaseTree",
298
- timeoutMs,
299
- (signal) => raw.getKnowledgeBaseTree(bankId, { ...options, signal }),
300
- options?.signal,
301
- ),
302
- createKnowledgeFolder: (bankId, name, options) =>
303
- withTimeout(
304
- "hindsight createKnowledgeFolder",
305
- timeoutMs,
306
- (signal) => raw.createKnowledgeFolder(bankId, name, { ...options, signal }),
307
- options?.signal,
308
- ),
309
- createKnowledgePage: (bankId, name, sourceQuery, options) =>
310
- withTimeout(
311
- "hindsight createKnowledgePage",
312
- timeoutMs,
313
- (signal) => raw.createKnowledgePage(bankId, name, sourceQuery, { ...options, signal }),
314
- options?.signal,
315
- ),
316
- getKnowledgePage: (bankId, pageId, options) =>
317
- withTimeout(
318
- "hindsight getKnowledgePage",
319
- timeoutMs,
320
- (signal) => raw.getKnowledgePage(bankId, pageId, { ...options, signal }),
321
- options?.signal,
322
- ),
323
- searchKnowledgeBase: (bankId, query, options) =>
324
- withTimeout(
325
- "hindsight searchKnowledgeBase",
326
- timeoutMs,
327
- (signal) => raw.searchKnowledgeBase(bankId, query, { ...options, signal }),
328
- options?.signal,
329
- ),
330
- updateKnowledgeNode: (bankId, nodeId, options) =>
331
- withTimeout(
332
- "hindsight updateKnowledgeNode",
333
- timeoutMs,
334
- (signal) => raw.updateKnowledgeNode(bankId, nodeId, { ...options, signal }),
335
- options?.signal,
336
- ),
337
- deleteKnowledgeNode: (bankId, nodeId, options) =>
338
- withTimeout(
339
- "hindsight deleteKnowledgeNode",
340
- timeoutMs,
341
- (signal) => raw.deleteKnowledgeNode(bankId, nodeId, { ...options, signal }),
342
- options?.signal,
343
- ),
344
- exportKnowledgeBase: (bankId, options) =>
345
- withTimeout(
346
- "hindsight exportKnowledgeBase",
347
- timeoutMs,
348
- (signal) => raw.exportKnowledgeBase(bankId, { ...options, signal }),
349
- options?.signal,
350
- ),
351
- updateBankConfig: (bankId, options) =>
352
- withTimeout(
353
- "hindsight updateBankConfig",
354
- timeoutMs,
355
- (signal) => raw.updateBankConfig(bankId, { ...options, signal }),
356
- options?.signal,
357
- ),
358
- health: () =>
359
- withTimeout("hindsight health", timeoutMs, (signal) =>
360
- withRetry("health", async () => {
361
- const response = await sdk.healthEndpointHealthGet({ client: lowLevel, signal });
362
- return unwrapSdkResponse(response, "health");
363
- }),
364
- ),
365
- getVersion: () =>
366
- withTimeout("hindsight getVersion", timeoutMs, (signal) =>
367
- withRetry("getVersion", () => raw.getVersion({ signal })),
368
- ),
369
- };
370
- }
371
-
372
- export async function checkHindsight(
373
- client: HindsightLikeClient,
374
- bankId: string,
375
- ): Promise<{ ok: boolean; error?: string }> {
376
- try {
377
- if (client.health) await client.health();
378
- else if (client.getBankProfile) await client.getBankProfile(bankId);
379
- else await client.recall(bankId, "health check", { maxTokens: 1, budget: "low" });
380
- return { ok: true };
381
- } catch (error) {
382
- return { ok: false, error: redactError(error) };
383
- }
384
- }
385
-
386
- export const HINDSIGHT_CLIENT_VERSION = CLIENT_VERSION;
@@ -1,39 +0,0 @@
1
- const PATCH_MARKER: unique symbol = Symbol("@luxusai/pi-hindsight.fetch-request-compat");
2
-
3
- type FetchWithMarker = typeof fetch & { [PATCH_MARKER]?: true };
4
- type RequestInitWithDuplex = RequestInit & { duplex?: "half" };
5
-
6
- function isRequest(value: unknown): value is Request {
7
- return typeof Request !== "undefined" && value instanceof Request;
8
- }
9
-
10
- function requestToInit(request: Request): RequestInitWithDuplex {
11
- return {
12
- method: request.method,
13
- headers: request.headers,
14
- body: request.body,
15
- signal: request.signal,
16
- redirect: request.redirect,
17
- credentials: request.credentials,
18
- cache: request.cache,
19
- mode: request.mode,
20
- referrer: request.referrer,
21
- referrerPolicy: request.referrerPolicy,
22
- integrity: request.integrity,
23
- keepalive: request.keepalive,
24
- ...(request.body ? { duplex: "half" as const } : {}),
25
- };
26
- }
27
-
28
- export function installFetchRequestCompat(): void {
29
- const currentFetch = globalThis.fetch as FetchWithMarker | undefined;
30
- if (!currentFetch || currentFetch[PATCH_MARKER]) return;
31
-
32
- const originalFetch = currentFetch.bind(globalThis) as typeof fetch;
33
- const patchedFetch: FetchWithMarker = ((input: RequestInfo | URL, init?: RequestInit) => {
34
- if (!isRequest(input)) return originalFetch(input, init);
35
- return originalFetch(input.url, { ...requestToInit(input), ...init });
36
- }) as FetchWithMarker;
37
- patchedFetch[PATCH_MARKER] = true;
38
- globalThis.fetch = patchedFetch;
39
- }
@@ -1,34 +0,0 @@
1
- export async function withTimeout<T>(
2
- operation: string,
3
- timeoutMs: number,
4
- fn: (signal: AbortSignal) => Promise<T>,
5
- parentSignal?: AbortSignal,
6
- ): Promise<T> {
7
- if (parentSignal?.aborted) throw new Error(`${operation} aborted`);
8
-
9
- const controller = new AbortController();
10
- let timer: NodeJS.Timeout | undefined;
11
- let removeAbortListener: (() => void) | undefined;
12
- try {
13
- const timeout = new Promise<never>((_resolve, reject) => {
14
- timer = setTimeout(() => {
15
- controller.abort();
16
- reject(new Error(`${operation} timed out after ${timeoutMs}ms`));
17
- }, timeoutMs);
18
- });
19
- const abort = parentSignal
20
- ? new Promise<never>((_resolve, reject) => {
21
- const onAbort = () => {
22
- controller.abort(parentSignal.reason);
23
- reject(new Error(`${operation} aborted`));
24
- };
25
- parentSignal.addEventListener("abort", onAbort, { once: true });
26
- removeAbortListener = () => parentSignal.removeEventListener("abort", onAbort);
27
- })
28
- : undefined;
29
- return await Promise.race([fn(controller.signal), timeout, ...(abort ? [abort] : [])]);
30
- } finally {
31
- if (timer) clearTimeout(timer);
32
- removeAbortListener?.();
33
- }
34
- }
@@ -1,140 +0,0 @@
1
- import type { ResolvedConfig } from "../types.js";
2
-
3
- export const DEFAULT_CONFIG: ResolvedConfig = {
4
- enabled: true,
5
- setupComplete: false,
6
- scope: {
7
- mode: "domain-tagged",
8
- projectIdStrategy: "remote",
9
- includeSharedObservations: false,
10
- },
11
- hindsight: { baseUrl: "http://localhost:8888", timeoutMs: 30_000 },
12
- agentUse: "coding",
13
- mentalModels: {
14
- inject: true,
15
- maxChars: 12_000,
16
- cacheTtlMs: 300_000,
17
- },
18
- banks: {
19
- project: { enabled: true, derive: "repo" },
20
- global: { enabled: false },
21
- user: { enabled: false },
22
- },
23
- recall: {
24
- enabled: true,
25
- budget: "mid",
26
- maxTokens: 800,
27
- userMaxTokens: 400,
28
- types: ["observation"],
29
- includeSourceFacts: false,
30
- maxSourceFactsTokens: 4096,
31
- contextTurns: 2,
32
- roles: ["user", "assistant"],
33
- maxQueryChars: 800,
34
- queryPreamble: "Pi coding task memory lookup.",
35
- projectQueryPreamble:
36
- "Project memory lookup for current repo architecture, tasks, bugs, decisions, and constraints.",
37
- globalQueryPreamble:
38
- "User memory lookup for durable user preferences, recurring workflows, coding habits, and cross-project context.",
39
- userQueryPreamble:
40
- "User memory lookup for durable user preferences, recurring workflows, coding habits, and cross-project context.",
41
- includeDateInQuery: false,
42
- includeRepoHintsInQuery: true,
43
- storeLastRecall: false,
44
- storeLastRecallFailures: false,
45
- lastRecallPath: ".pi/hindsight/last-recall.json",
46
- topK: 8,
47
- timeoutMs: 40_000,
48
- cacheTtlMs: 60_000,
49
- injectionMode: "context",
50
- injectionPosition: "append",
51
- includeFactsInDebug: false,
52
- preferObservations: true,
53
- },
54
- observations: {
55
- enabled: true,
56
- // Project-stable scope; {repoKey} remains a supported placeholder for legacy configs.
57
- scopes: [["harness:pi"], ["project:{projectId}"]],
58
- },
59
- globalRetain: {
60
- mode: "explicit-only",
61
- },
62
- userRetain: {
63
- mode: "explicit-only",
64
- },
65
- retain: {
66
- enabled: true,
67
- async: true,
68
- delivery: "immediate",
69
- updateMode: "append",
70
- content: {
71
- user: ["text"],
72
- assistant: ["text", "toolCall"],
73
- toolResult: ["error"],
74
- },
75
- toolFilter: {
76
- toolCall: {
77
- exclude: [
78
- "hindsight_retain",
79
- "hindsight_retain_global",
80
- "hindsight_delete_document",
81
- "hindsight_retain_receipts",
82
- "hindsight_route_memory",
83
- "hindsight_recall",
84
- "hindsight_reflect",
85
- ],
86
- },
87
- toolResult: {
88
- exclude: [
89
- "hindsight_retain",
90
- "hindsight_retain_global",
91
- "hindsight_delete_document",
92
- "hindsight_retain_receipts",
93
- "hindsight_route_memory",
94
- "hindsight_recall",
95
- "hindsight_reflect",
96
- "read",
97
- "grep",
98
- "find",
99
- "find_files",
100
- "ls",
101
- ],
102
- },
103
- },
104
- compactToolCalls: true,
105
- strip: { message: ["usage", "cost", "responseId"], topLevel: ["id", "parentId"] },
106
- redactSecrets: true,
107
- entities: [],
108
- queuePath: ".pi/hindsight/retain-queue.jsonl",
109
- flushIntervalMs: 0,
110
- periodicFlushMaxJobs: 1,
111
- periodicFlushTimeoutMs: 2_000,
112
- shutdownFlushMaxJobs: 10,
113
- shutdownFlushTimeoutMs: 2_000,
114
- postRetainReflect: false,
115
- },
116
- import: {
117
- mode: "curated",
118
- qualityProfile: "compatible",
119
- turnsPerDocument: 12,
120
- maxDocumentBytes: 80_000,
121
- includeBranches: "current-only",
122
- toolResults: "errors-only",
123
- toolResultSummaryMaxChars: 500,
124
- replaceExistingImportedDocs: true,
125
- manifestPath: ".pi/hindsight/import-manifest.json",
126
- checkpointPath: ".pi/hindsight/import-checkpoint.json",
127
- resume: true,
128
- },
129
- status: {
130
- style: "text",
131
- detail: "activity",
132
- maxLength: 24,
133
- showActivity: true,
134
- },
135
- notifications: {
136
- startup: true,
137
- recall: false,
138
- retain: false,
139
- },
140
- };
@@ -1,61 +0,0 @@
1
- import type { ResolvedConfig } from "../types.js";
2
- import { readGlobalConfig, readProjectConfig } from "./config-writer.js";
3
- import type {
4
- ConfigEditingField,
5
- ConfigEditingTab,
6
- ConfigLayers,
7
- TabId,
8
- } from "./config-editing-registry.js";
9
- import {
10
- buildConfigEditingFieldsFromRegistry,
11
- buildStatusFacts,
12
- } from "./config-editing-registry.js";
13
-
14
- export type {
15
- ConfigEditingField,
16
- ConfigEditingKind,
17
- ConfigEditingTab,
18
- ConfigLayers,
19
- FieldId,
20
- TabId,
21
- } from "./config-editing-registry.js";
22
- export {
23
- enabledDisabled,
24
- inputDefaultForConfigEditingField,
25
- parseConfigEditingFieldInput,
26
- patchForConfigEditingField,
27
- } from "./config-editing-registry.js";
28
-
29
- export function readConfigLayers(cwd: string): ConfigLayers {
30
- return { project: readProjectConfig(cwd), global: readGlobalConfig(), env: process.env };
31
- }
32
-
33
- export function buildConfigEditingFields(
34
- config: ResolvedConfig,
35
- projectBankId: string,
36
- layers: ConfigLayers,
37
- ): ConfigEditingField[] {
38
- return buildConfigEditingFieldsFromRegistry(config, projectBankId, layers);
39
- }
40
-
41
- export function buildConfigEditingTabs(
42
- config: ResolvedConfig,
43
- projectBankId: string,
44
- layers: ConfigLayers,
45
- statusFacts: Array<[string, string]> = [],
46
- options: { showAdvanced?: boolean } = {},
47
- ): ConfigEditingTab[] {
48
- const fields = buildConfigEditingFields(config, projectBankId, layers);
49
- // Default hub is Status only; advanced unlocks full settings tabs.
50
- const ids: TabId[] = options.showAdvanced
51
- ? ["Status", "Connection", "Banks", "Recall", "Retain", "Import", "UI"]
52
- : ["Status"];
53
- return ids.map((id) => ({
54
- id,
55
- fields:
56
- id === "Status"
57
- ? []
58
- : fields.filter((field) => field.tab === id && (options.showAdvanced || !field.advanced)),
59
- ...(id === "Status" ? { facts: buildStatusFacts(config, projectBankId, statusFacts) } : {}),
60
- }));
61
- }