@herbertgao/pi-extensions 2026.9.6 → 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 (240) hide show
  1. package/README.md +3 -8
  2. package/THIRD_PARTY_NOTICES.md +0 -4
  3. package/node_modules/@narumitw/pi-btw/README.md +2 -0
  4. package/node_modules/@narumitw/pi-btw/dist/index.ts +284 -365
  5. package/node_modules/@narumitw/pi-btw/dist/index.ts.map +3 -3
  6. package/node_modules/@narumitw/pi-btw/package.json +52 -53
  7. package/node_modules/@narumitw/pi-btw/src/bring-to-main.ts +494 -547
  8. package/node_modules/@narumitw/pi-btw/src/btw.ts +814 -856
  9. package/node_modules/@narumitw/pi-btw/src/fullscreen-ui.ts +673 -674
  10. package/node_modules/@narumitw/pi-btw/src/keybindings.ts +228 -270
  11. package/node_modules/@narumitw/pi-btw/src/main-tree-picker.ts +309 -318
  12. package/node_modules/@narumitw/pi-btw/src/menu.ts +416 -454
  13. package/node_modules/@narumitw/pi-btw/src/settings.ts +203 -219
  14. package/node_modules/@narumitw/pi-btw/src/side-thread.ts +173 -201
  15. package/node_modules/@narumitw/pi-btw/src/text.ts +21 -23
  16. package/node_modules/@narumitw/pi-btw/src/transcript-markdown.ts +65 -0
  17. package/node_modules/@narumitw/pi-btw/src/transcript-pager.ts +611 -662
  18. package/node_modules/pi-lens/CHANGELOG.md +239 -0
  19. package/node_modules/pi-lens/config/dependency-cruiser-eager-allowlist.json +3 -0
  20. package/node_modules/pi-lens/dist/clients/actionable-warnings.js +30 -4
  21. package/node_modules/pi-lens/dist/clients/agent-behavior-client.js +2 -0
  22. package/node_modules/pi-lens/dist/clients/bash-file-access.js +26 -0
  23. package/node_modules/pi-lens/dist/clients/biome-client.js +1 -1
  24. package/node_modules/pi-lens/dist/clients/blocker-freshness.js +403 -35
  25. package/node_modules/pi-lens/dist/clients/bootstrap.js +6 -1
  26. package/node_modules/pi-lens/dist/clients/cascade-format.js +200 -4
  27. package/node_modules/pi-lens/dist/clients/code-quality-warnings.js +10 -2
  28. package/node_modules/pi-lens/dist/clients/degradation-ledger.js +16 -1
  29. package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +12 -1
  30. package/node_modules/pi-lens/dist/clients/dispatch/ast-grep-catalog.js +65 -0
  31. package/node_modules/pi-lens/dist/clients/dispatch/auxiliary-lsp.js +28 -0
  32. package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +9 -2
  33. package/node_modules/pi-lens/dist/clients/dispatch/finding-policy.js +222 -0
  34. package/node_modules/pi-lens/dist/clients/dispatch/indent-detect.js +389 -13
  35. package/node_modules/pi-lens/dist/clients/dispatch/integration.js +175 -25
  36. package/node_modules/pi-lens/dist/clients/dispatch/rule-ignores.js +62 -0
  37. package/node_modules/pi-lens/dist/clients/dispatch/runners/ast-grep-napi.js +21 -41
  38. package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +6 -1
  39. package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +7 -7
  40. package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +2 -12
  41. package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +2 -21
  42. package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +1 -1
  43. package/node_modules/pi-lens/dist/clients/dispatch/types.js +4 -1
  44. package/node_modules/pi-lens/dist/clients/disposition-publish.js +1 -0
  45. package/node_modules/pi-lens/dist/clients/effective-config.js +1 -1
  46. package/node_modules/pi-lens/dist/clients/file-kinds.js +26 -1
  47. package/node_modules/pi-lens/dist/clients/file-role.js +21 -21
  48. package/node_modules/pi-lens/dist/clients/file-utils.js +156 -10
  49. package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +56 -9
  50. package/node_modules/pi-lens/dist/clients/format-service.js +39 -21
  51. package/node_modules/pi-lens/dist/clients/formatters.js +60 -13
  52. package/node_modules/pi-lens/dist/clients/generation-guard.js +2 -2
  53. package/node_modules/pi-lens/dist/clients/git-guard.js +11 -3
  54. package/node_modules/pi-lens/dist/clients/indent-retarget.js +78 -8
  55. package/node_modules/pi-lens/dist/clients/installer/index.js +333 -114
  56. package/node_modules/pi-lens/dist/clients/instance-reaper-state.js +7 -0
  57. package/node_modules/pi-lens/dist/clients/instance-reaper.js +20 -10
  58. package/node_modules/pi-lens/dist/clients/language-profile.js +23 -1
  59. package/node_modules/pi-lens/dist/clients/language-registry.js +5 -1
  60. package/node_modules/pi-lens/dist/clients/latency-logger.js +4 -1
  61. package/node_modules/pi-lens/dist/clients/lens-engine.js +12 -3
  62. package/node_modules/pi-lens/dist/clients/lens-events.js +2 -1
  63. package/node_modules/pi-lens/dist/clients/lens-flag-registry.js +79 -0
  64. package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +2 -1
  65. package/node_modules/pi-lens/dist/clients/lsp/client.js +25 -21
  66. package/node_modules/pi-lens/dist/clients/lsp/config.js +2 -2
  67. package/node_modules/pi-lens/dist/clients/lsp/index.js +7 -0
  68. package/node_modules/pi-lens/dist/clients/lsp/launch.js +16 -4
  69. package/node_modules/pi-lens/dist/clients/lsp/server.js +19 -2
  70. package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +2 -1
  71. package/node_modules/pi-lens/dist/clients/lsp-mutation.js +5 -3
  72. package/node_modules/pi-lens/dist/clients/map-with-concurrency.js +12 -8
  73. package/node_modules/pi-lens/dist/clients/mcp/session.js +36 -4
  74. package/node_modules/pi-lens/dist/clients/ndjson-logger.js +24 -7
  75. package/node_modules/pi-lens/dist/clients/observed-mutation.js +40 -2
  76. package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +23 -3
  77. package/node_modules/pi-lens/dist/clients/opengrep-client.js +110 -15
  78. package/node_modules/pi-lens/dist/clients/path-utils.js +123 -3
  79. package/node_modules/pi-lens/dist/clients/performance-report.js +5 -1
  80. package/node_modules/pi-lens/dist/clients/php-cs-fixer-config.js +1 -1
  81. package/node_modules/pi-lens/dist/clients/pipeline.js +74 -5
  82. package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +37 -5
  83. package/node_modules/pi-lens/dist/clients/project-diagnostics/fresh-fetch.js +145 -18
  84. package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/dead-code.js +4 -1
  85. package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +59 -3
  86. package/node_modules/pi-lens/dist/clients/project-lens-config.js +45 -2
  87. package/node_modules/pi-lens/dist/clients/read-guard.js +70 -11
  88. package/node_modules/pi-lens/dist/clients/resource-sampler.js +147 -9
  89. package/node_modules/pi-lens/dist/clients/ruff-client.js +1 -1
  90. package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +33 -5
  91. package/node_modules/pi-lens/dist/clients/runtime-context.js +6 -2
  92. package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +77 -7
  93. package/node_modules/pi-lens/dist/clients/runtime-session.js +21 -2
  94. package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +43 -12
  95. package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +330 -85
  96. package/node_modules/pi-lens/dist/clients/runtime-turn.js +147 -17
  97. package/node_modules/pi-lens/dist/clients/safe-spawn.js +258 -5
  98. package/node_modules/pi-lens/dist/clients/scratch-tree-policy.js +6 -0
  99. package/node_modules/pi-lens/dist/clients/session-event-guard.js +50 -5
  100. package/node_modules/pi-lens/dist/clients/sg-runner.js +23 -11
  101. package/node_modules/pi-lens/dist/clients/sgconfig.js +79 -2
  102. package/node_modules/pi-lens/dist/clients/test-runner-client.js +6 -41
  103. package/node_modules/pi-lens/dist/clients/test-runner-delivery.js +43 -0
  104. package/node_modules/pi-lens/dist/clients/tool-agreement.js +423 -0
  105. package/node_modules/pi-lens/dist/clients/tool-config.js +50 -0
  106. package/node_modules/pi-lens/dist/clients/tool-cwd.js +47 -76
  107. package/node_modules/pi-lens/dist/clients/tool-policy.js +163 -7
  108. package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +120 -0
  109. package/node_modules/pi-lens/dist/clients/tree-sitter-query-loader.js +127 -189
  110. package/node_modules/pi-lens/dist/clients/widget-state.js +98 -0
  111. package/node_modules/pi-lens/dist/clients/word-index.js +5 -2
  112. package/node_modules/pi-lens/dist/clients/write-ordering-guard.js +7 -0
  113. package/node_modules/pi-lens/dist/index.js +27416 -24153
  114. package/node_modules/pi-lens/dist/mcp/server.js +5 -2
  115. package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +7 -1
  116. package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +168 -53
  117. package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +244 -72
  118. package/node_modules/pi-lens/docs/audit1.md +5 -5
  119. package/node_modules/pi-lens/docs/dependencies.md +11 -0
  120. package/node_modules/pi-lens/docs/dispositions.md +52 -0
  121. package/node_modules/pi-lens/docs/environment-variables.md +2 -2
  122. package/node_modules/pi-lens/docs/features.md +4 -4
  123. package/node_modules/pi-lens/docs/globalconfig.md +3 -1
  124. package/node_modules/pi-lens/docs/language-coverage.md +1 -0
  125. package/node_modules/pi-lens/docs/pi-lens-fixer.md +53 -94
  126. package/node_modules/pi-lens/docs/pi-lens-investigator.md +43 -38
  127. package/node_modules/pi-lens/docs/pi-lens-retro.md +97 -0
  128. package/node_modules/pi-lens/docs/pi-lens-reviewer.md +53 -66
  129. package/node_modules/pi-lens/docs/release-qa-baseline.md +22 -0
  130. package/node_modules/pi-lens/docs/settings.md +7 -4
  131. package/node_modules/pi-lens/docs/tree-sitter_rules_catalog.md +1 -1
  132. package/node_modules/pi-lens/docs/usage.md +2 -0
  133. package/node_modules/pi-lens/package.json +1 -1
  134. package/node_modules/pi-lens/rules/tree-sitter-queries/typescript/sql-injection.yml +24 -12
  135. package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +40 -0
  136. package/node_modules/pi-lens/skills/pi-lens-ast-grep/SKILL.md +15 -0
  137. package/node_modules/pi-lens/skills/pi-lens-lsp-navigation/SKILL.md +7 -0
  138. package/package.json +5 -11
  139. package/node_modules/@luxusai/pi-hindsight/CHANGELOG.md +0 -376
  140. package/node_modules/@luxusai/pi-hindsight/README.md +0 -92
  141. package/node_modules/@luxusai/pi-hindsight/docs/adr/001-memory-lifecycle-and-scope.md +0 -56
  142. package/node_modules/@luxusai/pi-hindsight/docs/adr/002-explicit-routing-strategy-seam.md +0 -169
  143. package/node_modules/@luxusai/pi-hindsight/docs/adr/003-tui-memory-mode-vocabulary.md +0 -107
  144. package/node_modules/@luxusai/pi-hindsight/docs/adr/004-lifeos-dual-bank-design.md +0 -89
  145. package/node_modules/@luxusai/pi-hindsight/docs/adr/005-domain-banks-and-agent-first-surface.md +0 -189
  146. package/node_modules/@luxusai/pi-hindsight/docs/assets/logos/pi-hindsight-logo-dark.webp +0 -0
  147. package/node_modules/@luxusai/pi-hindsight/docs/assets/logos/pi-hindsight-logo-dark@2x.webp +0 -0
  148. package/node_modules/@luxusai/pi-hindsight/docs/coding-memory-evaluation.md +0 -54
  149. package/node_modules/@luxusai/pi-hindsight/docs/compatibility.md +0 -75
  150. package/node_modules/@luxusai/pi-hindsight/docs/hindsight-core-functions.md +0 -300
  151. package/node_modules/@luxusai/pi-hindsight/docs/mission-and-mental-model-quality.md +0 -158
  152. package/node_modules/@luxusai/pi-hindsight/docs/next-opt-out-design.md +0 -164
  153. package/node_modules/@luxusai/pi-hindsight/docs/risky-memory-modes.md +0 -139
  154. package/node_modules/@luxusai/pi-hindsight/docs/starter-mental-model-suggestions.md +0 -74
  155. package/node_modules/@luxusai/pi-hindsight/docs/surface-reference.md +0 -261
  156. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-operations.ts +0 -151
  157. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-selection.ts +0 -18
  158. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-settings-presenter.ts +0 -46
  159. package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-templates.ts +0 -383
  160. package/node_modules/@luxusai/pi-hindsight/extensions/banks/banking.ts +0 -240
  161. package/node_modules/@luxusai/pi-hindsight/extensions/banks/knowledge-page-seed.ts +0 -176
  162. package/node_modules/@luxusai/pi-hindsight/extensions/banks/retain-strategies.ts +0 -178
  163. package/node_modules/@luxusai/pi-hindsight/extensions/client/client-retry.ts +0 -41
  164. package/node_modules/@luxusai/pi-hindsight/extensions/client/client.ts +0 -386
  165. package/node_modules/@luxusai/pi-hindsight/extensions/client/fetch-compat.ts +0 -39
  166. package/node_modules/@luxusai/pi-hindsight/extensions/client/timeout.ts +0 -34
  167. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-defaults.ts +0 -140
  168. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-editing-model.ts +0 -61
  169. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-editing-registry.ts +0 -925
  170. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-field-paths.ts +0 -247
  171. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-normalize.ts +0 -547
  172. package/node_modules/@luxusai/pi-hindsight/extensions/config/config-writer.ts +0 -480
  173. package/node_modules/@luxusai/pi-hindsight/extensions/config/config.ts +0 -182
  174. package/node_modules/@luxusai/pi-hindsight/extensions/config/setup-gate.ts +0 -86
  175. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-execute.ts +0 -1010
  176. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-parse.ts +0 -175
  177. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-plan.ts +0 -425
  178. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-presentation.ts +0 -210
  179. package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-sessions.ts +0 -817
  180. package/node_modules/@luxusai/pi-hindsight/extensions/index.ts +0 -25
  181. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/git-seed.ts +0 -319
  182. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-recall.ts +0 -196
  183. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-retain.ts +0 -189
  184. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-runtime.ts +0 -65
  185. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle.ts +0 -260
  186. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/mental-models.ts +0 -244
  187. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/observation-scopes.ts +0 -59
  188. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall-cleanup.ts +0 -82
  189. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall-visibility.ts +0 -45
  190. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall.ts +0 -331
  191. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-cursor.ts +0 -354
  192. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-job-builder.ts +0 -66
  193. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-receipts.ts +0 -132
  194. package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain.ts +0 -228
  195. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-bank-template-operations.ts +0 -74
  196. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-config-operations.ts +0 -16
  197. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-control-operations.ts +0 -648
  198. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-diagnostics-operations.ts +0 -105
  199. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-identity.ts +0 -68
  200. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-operation-service.ts +0 -71
  201. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-operation-types.ts +0 -13
  202. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-recall-operations.ts +0 -162
  203. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-retain-operations.ts +0 -131
  204. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-scope.ts +0 -104
  205. package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-session-operations.ts +0 -37
  206. package/node_modules/@luxusai/pi-hindsight/extensions/operations/operation-catalog.ts +0 -893
  207. package/node_modules/@luxusai/pi-hindsight/extensions/operations/reflect-presenter.ts +0 -35
  208. package/node_modules/@luxusai/pi-hindsight/extensions/operations/scope-migrate.ts +0 -177
  209. package/node_modules/@luxusai/pi-hindsight/extensions/operations/tools.ts +0 -7
  210. package/node_modules/@luxusai/pi-hindsight/extensions/queue/flush-presenter.ts +0 -21
  211. package/node_modules/@luxusai/pi-hindsight/extensions/queue/jsonl-queue-store.ts +0 -112
  212. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-delivery.ts +0 -111
  213. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-lock.ts +0 -214
  214. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-operations.ts +0 -70
  215. package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue.ts +0 -392
  216. package/node_modules/@luxusai/pi-hindsight/extensions/tui/bank-template-presentation.ts +0 -45
  217. package/node_modules/@luxusai/pi-hindsight/extensions/tui/commands.ts +0 -9
  218. package/node_modules/@luxusai/pi-hindsight/extensions/tui/guided-setup.ts +0 -860
  219. package/node_modules/@luxusai/pi-hindsight/extensions/tui/prefill-input.ts +0 -105
  220. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-flow.ts +0 -189
  221. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-server-probe.ts +0 -299
  222. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-actions.ts +0 -201
  223. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-facts.ts +0 -47
  224. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-render.ts +0 -239
  225. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-types.ts +0 -50
  226. package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui.ts +0 -259
  227. package/node_modules/@luxusai/pi-hindsight/extensions/tui/tool-presenters.ts +0 -77
  228. package/node_modules/@luxusai/pi-hindsight/extensions/types.ts +0 -534
  229. package/node_modules/@luxusai/pi-hindsight/extensions/utils/diagnostics.ts +0 -319
  230. package/node_modules/@luxusai/pi-hindsight/extensions/utils/messages.ts +0 -325
  231. package/node_modules/@luxusai/pi-hindsight/extensions/utils/sanitize.ts +0 -42
  232. package/node_modules/@luxusai/pi-hindsight/extensions/utils/session-memory-meta.ts +0 -244
  233. package/node_modules/@luxusai/pi-hindsight/extensions/utils/session-operations.ts +0 -56
  234. package/node_modules/@luxusai/pi-hindsight/extensions/utils/session.ts +0 -50
  235. package/node_modules/@luxusai/pi-hindsight/extensions/utils/status-fields.ts +0 -167
  236. package/node_modules/@luxusai/pi-hindsight/extensions/utils/status-health.ts +0 -207
  237. package/node_modules/@luxusai/pi-hindsight/extensions/utils/status.ts +0 -120
  238. package/node_modules/@luxusai/pi-hindsight/extensions/version.ts +0 -8
  239. package/node_modules/@luxusai/pi-hindsight/package.json +0 -118
  240. package/node_modules/@luxusai/pi-hindsight/skills/hindsight-memory-doctor/SKILL.md +0 -75
@@ -1,259 +0,0 @@
1
- import type { ExtensionCommandContext } from "@earendil-works/pi-coding-agent";
2
- import { redactError } from "../utils/sanitize.js";
3
- import type { FieldId } from "../config/config-editing-model.js";
4
- import {
5
- createMemoryOperations,
6
- type MemoryOperationsDeps,
7
- } from "../operations/memory-operation-service.js";
8
- import {
9
- flushRetainQueueNotifyLevel,
10
- formatFlushRetainQueueResult,
11
- } from "../queue/flush-presenter.js";
12
- import { defaultTemplateIdFor, listBankTemplatesForAgentUse } from "../banks/bank-templates.js";
13
- import {
14
- buildIgnoreRepoPatch,
15
- hasProjectHindsightConfig,
16
- maybeOfferHistoricalImportForSetup,
17
- runGuidedSetup,
18
- } from "./guided-setup.js";
19
- import {
20
- renderBankTemplateApplyResult,
21
- renderBankTemplateMentalModelDetails,
22
- } from "./bank-template-presentation.js";
23
- import { buildSetupTabs } from "./setup-tui-facts.js";
24
- import { createSetupComponent } from "./setup-tui-render.js";
25
- import { handleDeployment, handleFieldEdit, handleResetFieldAction } from "./setup-tui-actions.js";
26
- import type { SetupActionId, SetupUiState, ThemeLike } from "./setup-tui-types.js";
27
- import { CANCEL } from "./setup-tui-types.js";
28
- import type { SessionMemoryMode } from "../utils/session-memory-meta.js";
29
- import { getSessionFile } from "../utils/session.js";
30
-
31
- export { buildRetainReceiptStatusFacts, createSetupComponent } from "./setup-tui-render.js";
32
- export {
33
- applySetupIntent,
34
- currentSetupTab,
35
- normalizeSetupUiState,
36
- selectedSetupField,
37
- selectedSetupIndex,
38
- setupIntentFromInput,
39
- } from "./setup-flow.js";
40
- export type { SetupIntent, SetupResult } from "./setup-flow.js";
41
- export type {
42
- SetupActionId,
43
- SetupProfileChoice,
44
- SetupStep,
45
- SetupUiState,
46
- ThemeLike,
47
- } from "./setup-tui-types.js";
48
-
49
- async function showSetupTui(
50
- ctx: ExtensionCommandContext,
51
- deps: MemoryOperationsDeps,
52
- state: SetupUiState,
53
- ): Promise<SetupActionId | null> {
54
- const config = deps.getConfig();
55
- const projectBankId = deps.getProjectBankId();
56
- const tabs = await buildSetupTabs({ ctx, config, projectBankId, deps, state });
57
- return ctx.ui.custom<SetupActionId | null>((tui, theme, _keybindings, done) => {
58
- const component = createSetupComponent(tabs, theme as ThemeLike, state, done);
59
- return {
60
- render: (width: number) => component.render(width),
61
- invalidate: () => component.invalidate(),
62
- handleInput: (data: string) => {
63
- component.handleInput?.(data);
64
- tui.requestRender();
65
- },
66
- };
67
- });
68
- }
69
-
70
- async function handleSetMode(
71
- ctx: ExtensionCommandContext,
72
- deps: MemoryOperationsDeps,
73
- ): Promise<void> {
74
- const choice = await ctx.ui.select("Session memory mode", [
75
- "normal",
76
- "read-only",
77
- "ignored",
78
- CANCEL,
79
- ]);
80
- if (!choice || choice === CANCEL) return;
81
- const sessionFile = getSessionFile(ctx);
82
- const result = await createMemoryOperations(deps).setSessionMode(
83
- ctx.cwd,
84
- sessionFile,
85
- choice as SessionMemoryMode,
86
- );
87
- ctx.ui.notify(`Session memory mode: ${result.meta.mode}`, "info");
88
- }
89
-
90
- async function handleNextOptOut(
91
- ctx: ExtensionCommandContext,
92
- deps: MemoryOperationsDeps,
93
- ): Promise<void> {
94
- const sessionFile = getSessionFile(ctx);
95
- const result = await createMemoryOperations(deps).setNextRetainOff(ctx.cwd, sessionFile);
96
- ctx.ui.notify(
97
- `Hindsight will skip automatic retain for the next agent run. nextRetain=${result.meta.nextRetainMode}`,
98
- "info",
99
- );
100
- }
101
-
102
- async function handleApplyMentalModels(
103
- ctx: ExtensionCommandContext,
104
- deps: MemoryOperationsDeps,
105
- ): Promise<void> {
106
- const operations = createMemoryOperations(deps);
107
- const config = deps.getConfig();
108
- const templates = [...listBankTemplatesForAgentUse(config.agentUse)];
109
- const labels = templates.map(
110
- (template) => `${template.id} — ${template.label} (${template.target})`,
111
- );
112
- const choice = await ctx.ui.select(`Mental model sets for agent use “${config.agentUse}”`, [
113
- ...labels,
114
- CANCEL,
115
- ]);
116
- if (!choice || choice === CANCEL) return;
117
- const index = labels.indexOf(choice);
118
- const template = index >= 0 ? templates[index] : undefined;
119
- if (!template) {
120
- ctx.ui.notify(`Unknown template selection: ${choice}`, "warning");
121
- return;
122
- }
123
- const dryRun = await operations.applyBankTemplate({ templateId: template.id, dryRun: true });
124
- const details = renderBankTemplateMentalModelDetails(dryRun.template);
125
- const confirmed = await ctx.ui.confirm(
126
- `Apply ${template.id} to ${dryRun.bankId}?`,
127
- `${details ? `${details}\n\n` : ""}${renderBankTemplateApplyResult(dryRun)}\n\nThis writes bank config and creates/updates mental models. Continue?`,
128
- );
129
- if (!confirmed) return;
130
- const applied = await operations.applyBankTemplate({ templateId: template.id, dryRun: false });
131
- ctx.ui.notify(renderBankTemplateApplyResult(applied), "info");
132
- }
133
-
134
- async function handleImportSessions(
135
- ctx: ExtensionCommandContext,
136
- deps: MemoryOperationsDeps,
137
- ): Promise<void> {
138
- const config = deps.getConfig();
139
- const setupProfile = config.banks.project.enabled
140
- ? config.banks.user.enabled
141
- ? "project-user"
142
- : "project-only"
143
- : config.banks.user.enabled
144
- ? "user-only"
145
- : "recall-only";
146
- await maybeOfferHistoricalImportForSetup({
147
- ctx,
148
- operations: createMemoryOperations(deps),
149
- setupProfile,
150
- cwd: ctx.cwd,
151
- projectBankId: deps.getProjectBankId(),
152
- ...(config.banks.user.bankId ? { globalBankId: config.banks.user.bankId } : {}),
153
- });
154
- }
155
-
156
- async function handleDoctor(
157
- ctx: ExtensionCommandContext,
158
- deps: MemoryOperationsDeps,
159
- ): Promise<void> {
160
- const sessionFile = getSessionFile(ctx);
161
- const report = await createMemoryOperations(deps).doctor(ctx.cwd, sessionFile);
162
- ctx.ui.notify(report, "info");
163
- }
164
-
165
- async function handleInitConfig(
166
- ctx: ExtensionCommandContext,
167
- deps: MemoryOperationsDeps,
168
- ): Promise<void> {
169
- const result = await createMemoryOperations(deps).init(ctx.cwd);
170
- ctx.ui.notify(
171
- `Wrote ${result.path}; project bank ${result.projectBankId}. Mental models: apply from hub (t).`,
172
- "info",
173
- );
174
- }
175
-
176
- async function handleIgnoreRepo(
177
- ctx: ExtensionCommandContext,
178
- deps: MemoryOperationsDeps,
179
- ): Promise<boolean> {
180
- const confirmed = await ctx.ui.confirm(
181
- "Ignore Hindsight in this repo?",
182
- "Writes project config with enabled=false, setupComplete=true, and status.style=off. Automatic memory, status bar, and tool calls stay off; /hindsight remains available to re-enable.",
183
- );
184
- if (!confirmed) return false;
185
- const result = await createMemoryOperations(deps).configure(ctx.cwd, buildIgnoreRepoPatch());
186
- try {
187
- ctx.ui.setStatus?.("hindsight", undefined);
188
- } catch {
189
- // Best effort; some hosts may not expose setStatus on command UI.
190
- }
191
- ctx.ui.notify(
192
- `Wrote ${result.path}: Hindsight disabled for this repo (enabled=false, status.style=off). Tools refuse calls until re-enabled via /hindsight.`,
193
- "info",
194
- );
195
- return true;
196
- }
197
-
198
- export async function runHindsightSetupTui(
199
- ctx: ExtensionCommandContext,
200
- deps: MemoryOperationsDeps,
201
- ): Promise<void> {
202
- const state: SetupUiState = { tabIndex: 0, selectedByTab: {} };
203
- if (!hasProjectHindsightConfig(ctx.cwd)) {
204
- const choice = await ctx.ui.select("No project Hindsight config found", [
205
- "Guided setup",
206
- "Open hub",
207
- "Ignore this repo",
208
- "Skip for now",
209
- ]);
210
- if (choice === "Guided setup") await runGuidedSetup({ ctx, deps, cwd: ctx.cwd });
211
- else if (choice === "Ignore this repo") {
212
- await handleIgnoreRepo(ctx, deps);
213
- return;
214
- } else if (choice === "Skip for now" || !choice) return;
215
- }
216
- while (true) {
217
- const config = deps.getConfig();
218
- const projectBankId = deps.getProjectBankId();
219
- const action = await showSetupTui(ctx, deps, state);
220
- if (!action || action === "done") return;
221
- try {
222
- if (action === "choose-deployment") await handleDeployment(ctx, deps, config);
223
- else if (action === "guided-setup") await runGuidedSetup({ ctx, deps, cwd: ctx.cwd });
224
- else if (action === "flush-queue") {
225
- const result = await createMemoryOperations(deps).flush(ctx.cwd);
226
- ctx.ui.notify(formatFlushRetainQueueResult(result), flushRetainQueueNotifyLevel(result));
227
- } else if (action === "set-mode") await handleSetMode(ctx, deps);
228
- else if (action === "next-opt-out") await handleNextOptOut(ctx, deps);
229
- else if (action === "apply-mental-models") await handleApplyMentalModels(ctx, deps);
230
- else if (action === "import-sessions") await handleImportSessions(ctx, deps);
231
- else if (action === "run-doctor") await handleDoctor(ctx, deps);
232
- else if (action === "init-config") await handleInitConfig(ctx, deps);
233
- else if (action === "toggle-advanced") {
234
- state.showAdvanced = !state.showAdvanced;
235
- state.selectedByTab = {};
236
- state.tabIndex = 0;
237
- } else if (action.startsWith("reset:")) {
238
- await handleResetFieldAction({
239
- ctx,
240
- deps,
241
- config,
242
- projectBankId,
243
- fieldId: action.slice("reset:".length) as FieldId,
244
- });
245
- } else
246
- await handleFieldEdit({ fieldId: action as FieldId, ctx, deps, config, projectBankId });
247
- } catch (error) {
248
- ctx.ui.notify(redactError(error), "error");
249
- }
250
- }
251
- }
252
-
253
- /** Shared helper for guided setup: default template id for active agent use. */
254
- export function guidedMentalModelTemplateId(
255
- target: "project" | "user",
256
- agentUse: "coding" | "conversation",
257
- ): string {
258
- return defaultTemplateIdFor(target, agentUse);
259
- }
@@ -1,77 +0,0 @@
1
- import { keyText, type Theme, type ToolRenderResultOptions } from "@earendil-works/pi-coding-agent";
2
- import { Text } from "@earendil-works/pi-tui";
3
- import type { MemoryOperations } from "../operations/memory-operation-service.js";
4
-
5
- type ToolTextResponse<Details> = {
6
- content: Array<{ type: "text"; text: string }>;
7
- details: Details;
8
- };
9
-
10
- type ToolTextContent = { type: string; text?: string };
11
-
12
- export const DEFAULT_COLLAPSED_TOOL_RESULT_LINES = 12;
13
-
14
- export type NormalizedToolText = {
15
- text: string;
16
- hiddenLineCount: number;
17
- totalLineCount: number;
18
- canFold: boolean;
19
- };
20
-
21
- export type RetainToolResult = Awaited<ReturnType<MemoryOperations["retainExplicit"]>>;
22
-
23
- export function normalizeToolResultText(
24
- text: string,
25
- expanded: boolean,
26
- maxLines = DEFAULT_COLLAPSED_TOOL_RESULT_LINES,
27
- ): NormalizedToolText {
28
- const lines = text.split("\n");
29
- const canFold = lines.length > maxLines;
30
- const hiddenLineCount = canFold && !expanded ? lines.length - maxLines : 0;
31
- return {
32
- text: hiddenLineCount > 0 ? lines.slice(0, maxLines).join("\n") : text,
33
- hiddenLineCount,
34
- totalLineCount: lines.length,
35
- canFold,
36
- };
37
- }
38
-
39
- function renderFoldHint(normalized: NormalizedToolText, theme: Theme) {
40
- if (!normalized.canFold) return "";
41
- if (normalized.hiddenLineCount > 0) {
42
- const plural = normalized.hiddenLineCount === 1 ? "" : "s";
43
- return `\n${theme.fg("muted", `... ${normalized.hiddenLineCount} more line${plural} (`)}${theme.fg(
44
- "dim",
45
- keyText("app.tools.expand"),
46
- )}${theme.fg("muted", " to expand)")}`;
47
- }
48
- return `\n${theme.fg("muted", "(")}${theme.fg("dim", keyText("app.tools.expand"))}${theme.fg(
49
- "muted",
50
- " to collapse)",
51
- )}`;
52
- }
53
-
54
- export function renderMemoryToolTextResult(
55
- result: { content: ToolTextContent[] },
56
- options: Pick<ToolRenderResultOptions, "expanded">,
57
- theme: Theme,
58
- ) {
59
- const rawText = result.content.find((part) => part.type === "text")?.text ?? "";
60
- const normalized = normalizeToolResultText(rawText, options.expanded);
61
- const text = normalized.text || theme.fg("dim", "(no text output)");
62
- return new Text(`${text}${renderFoldHint(normalized, theme)}`, 0, 0);
63
- }
64
-
65
- export function retainToolResponse(result: RetainToolResult): ToolTextResponse<RetainToolResult> {
66
- const deadLetterStatus = result.deadLettered
67
- ? ` ${result.deadLettered} job${result.deadLettered === 1 ? "" : "s"} moved to dead-letter queue; run /hindsight to inspect.`
68
- : "";
69
- const text =
70
- result.remaining > 0
71
- ? `Queued for ${result.bankId}; ${result.remaining} job${result.remaining === 1 ? "" : "s"} pending.${deadLetterStatus}`
72
- : `Retained in ${result.bankId} as ${result.documentId}.${deadLetterStatus}`;
73
- const operationText = result.operationIds?.length
74
- ? ` Operation IDs: ${result.operationIds.join(", ")}.`
75
- : "";
76
- return { content: [{ type: "text", text: `${text}${operationText}` }], details: result };
77
- }