@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.
- package/README.md +3 -8
- package/THIRD_PARTY_NOTICES.md +0 -4
- package/node_modules/@narumitw/pi-btw/README.md +2 -0
- package/node_modules/@narumitw/pi-btw/dist/index.ts +284 -365
- package/node_modules/@narumitw/pi-btw/dist/index.ts.map +3 -3
- package/node_modules/@narumitw/pi-btw/package.json +52 -53
- package/node_modules/@narumitw/pi-btw/src/bring-to-main.ts +494 -547
- package/node_modules/@narumitw/pi-btw/src/btw.ts +814 -856
- package/node_modules/@narumitw/pi-btw/src/fullscreen-ui.ts +673 -674
- package/node_modules/@narumitw/pi-btw/src/keybindings.ts +228 -270
- package/node_modules/@narumitw/pi-btw/src/main-tree-picker.ts +309 -318
- package/node_modules/@narumitw/pi-btw/src/menu.ts +416 -454
- package/node_modules/@narumitw/pi-btw/src/settings.ts +203 -219
- package/node_modules/@narumitw/pi-btw/src/side-thread.ts +173 -201
- package/node_modules/@narumitw/pi-btw/src/text.ts +21 -23
- package/node_modules/@narumitw/pi-btw/src/transcript-markdown.ts +65 -0
- package/node_modules/@narumitw/pi-btw/src/transcript-pager.ts +611 -662
- package/node_modules/pi-lens/CHANGELOG.md +239 -0
- package/node_modules/pi-lens/config/dependency-cruiser-eager-allowlist.json +3 -0
- package/node_modules/pi-lens/dist/clients/actionable-warnings.js +30 -4
- package/node_modules/pi-lens/dist/clients/agent-behavior-client.js +2 -0
- package/node_modules/pi-lens/dist/clients/bash-file-access.js +26 -0
- package/node_modules/pi-lens/dist/clients/biome-client.js +1 -1
- package/node_modules/pi-lens/dist/clients/blocker-freshness.js +403 -35
- package/node_modules/pi-lens/dist/clients/bootstrap.js +6 -1
- package/node_modules/pi-lens/dist/clients/cascade-format.js +200 -4
- package/node_modules/pi-lens/dist/clients/code-quality-warnings.js +10 -2
- package/node_modules/pi-lens/dist/clients/degradation-ledger.js +16 -1
- package/node_modules/pi-lens/dist/clients/diagnostic-dispositions.js +12 -1
- package/node_modules/pi-lens/dist/clients/dispatch/ast-grep-catalog.js +65 -0
- package/node_modules/pi-lens/dist/clients/dispatch/auxiliary-lsp.js +28 -0
- package/node_modules/pi-lens/dist/clients/dispatch/dispatcher.js +9 -2
- package/node_modules/pi-lens/dist/clients/dispatch/finding-policy.js +222 -0
- package/node_modules/pi-lens/dist/clients/dispatch/indent-detect.js +389 -13
- package/node_modules/pi-lens/dist/clients/dispatch/integration.js +175 -25
- package/node_modules/pi-lens/dist/clients/dispatch/rule-ignores.js +62 -0
- package/node_modules/pi-lens/dist/clients/dispatch/runners/ast-grep-napi.js +21 -41
- package/node_modules/pi-lens/dist/clients/dispatch/runners/biome-check.js +6 -1
- package/node_modules/pi-lens/dist/clients/dispatch/runners/rust-clippy.js +7 -7
- package/node_modules/pi-lens/dist/clients/dispatch/runners/shfmt.js +2 -12
- package/node_modules/pi-lens/dist/clients/dispatch/runners/tree-sitter.js +2 -21
- package/node_modules/pi-lens/dist/clients/dispatch/runners/utils/runner-helpers.js +1 -1
- package/node_modules/pi-lens/dist/clients/dispatch/types.js +4 -1
- package/node_modules/pi-lens/dist/clients/disposition-publish.js +1 -0
- package/node_modules/pi-lens/dist/clients/effective-config.js +1 -1
- package/node_modules/pi-lens/dist/clients/file-kinds.js +26 -1
- package/node_modules/pi-lens/dist/clients/file-role.js +21 -21
- package/node_modules/pi-lens/dist/clients/file-utils.js +156 -10
- package/node_modules/pi-lens/dist/clients/finding-delivery-gate.js +56 -9
- package/node_modules/pi-lens/dist/clients/format-service.js +39 -21
- package/node_modules/pi-lens/dist/clients/formatters.js +60 -13
- package/node_modules/pi-lens/dist/clients/generation-guard.js +2 -2
- package/node_modules/pi-lens/dist/clients/git-guard.js +11 -3
- package/node_modules/pi-lens/dist/clients/indent-retarget.js +78 -8
- package/node_modules/pi-lens/dist/clients/installer/index.js +333 -114
- package/node_modules/pi-lens/dist/clients/instance-reaper-state.js +7 -0
- package/node_modules/pi-lens/dist/clients/instance-reaper.js +20 -10
- package/node_modules/pi-lens/dist/clients/language-profile.js +23 -1
- package/node_modules/pi-lens/dist/clients/language-registry.js +5 -1
- package/node_modules/pi-lens/dist/clients/latency-logger.js +4 -1
- package/node_modules/pi-lens/dist/clients/lens-engine.js +12 -3
- package/node_modules/pi-lens/dist/clients/lens-events.js +2 -1
- package/node_modules/pi-lens/dist/clients/lens-flag-registry.js +79 -0
- package/node_modules/pi-lens/dist/clients/live-bus-emitter.js +2 -1
- package/node_modules/pi-lens/dist/clients/lsp/client.js +25 -21
- package/node_modules/pi-lens/dist/clients/lsp/config.js +2 -2
- package/node_modules/pi-lens/dist/clients/lsp/index.js +7 -0
- package/node_modules/pi-lens/dist/clients/lsp/launch.js +16 -4
- package/node_modules/pi-lens/dist/clients/lsp/server.js +19 -2
- package/node_modules/pi-lens/dist/clients/lsp/workspace-diagnostics-cache.js +2 -1
- package/node_modules/pi-lens/dist/clients/lsp-mutation.js +5 -3
- package/node_modules/pi-lens/dist/clients/map-with-concurrency.js +12 -8
- package/node_modules/pi-lens/dist/clients/mcp/session.js +36 -4
- package/node_modules/pi-lens/dist/clients/ndjson-logger.js +24 -7
- package/node_modules/pi-lens/dist/clients/observed-mutation.js +40 -2
- package/node_modules/pi-lens/dist/clients/opaque-mutation-scan.js +23 -3
- package/node_modules/pi-lens/dist/clients/opengrep-client.js +110 -15
- package/node_modules/pi-lens/dist/clients/path-utils.js +123 -3
- package/node_modules/pi-lens/dist/clients/performance-report.js +5 -1
- package/node_modules/pi-lens/dist/clients/php-cs-fixer-config.js +1 -1
- package/node_modules/pi-lens/dist/clients/pipeline.js +74 -5
- package/node_modules/pi-lens/dist/clients/project-diagnostics/cache.js +37 -5
- package/node_modules/pi-lens/dist/clients/project-diagnostics/fresh-fetch.js +145 -18
- package/node_modules/pi-lens/dist/clients/project-diagnostics/runner-adapters/dead-code.js +4 -1
- package/node_modules/pi-lens/dist/clients/project-diagnostics/scanner.js +59 -3
- package/node_modules/pi-lens/dist/clients/project-lens-config.js +45 -2
- package/node_modules/pi-lens/dist/clients/read-guard.js +70 -11
- package/node_modules/pi-lens/dist/clients/resource-sampler.js +147 -9
- package/node_modules/pi-lens/dist/clients/ruff-client.js +1 -1
- package/node_modules/pi-lens/dist/clients/runtime-agent-end.js +33 -5
- package/node_modules/pi-lens/dist/clients/runtime-context.js +6 -2
- package/node_modules/pi-lens/dist/clients/runtime-coordinator.js +77 -7
- package/node_modules/pi-lens/dist/clients/runtime-session.js +21 -2
- package/node_modules/pi-lens/dist/clients/runtime-tool-call.js +43 -12
- package/node_modules/pi-lens/dist/clients/runtime-tool-result.js +330 -85
- package/node_modules/pi-lens/dist/clients/runtime-turn.js +147 -17
- package/node_modules/pi-lens/dist/clients/safe-spawn.js +258 -5
- package/node_modules/pi-lens/dist/clients/scratch-tree-policy.js +6 -0
- package/node_modules/pi-lens/dist/clients/session-event-guard.js +50 -5
- package/node_modules/pi-lens/dist/clients/sg-runner.js +23 -11
- package/node_modules/pi-lens/dist/clients/sgconfig.js +79 -2
- package/node_modules/pi-lens/dist/clients/test-runner-client.js +6 -41
- package/node_modules/pi-lens/dist/clients/test-runner-delivery.js +43 -0
- package/node_modules/pi-lens/dist/clients/tool-agreement.js +423 -0
- package/node_modules/pi-lens/dist/clients/tool-config.js +50 -0
- package/node_modules/pi-lens/dist/clients/tool-cwd.js +47 -76
- package/node_modules/pi-lens/dist/clients/tool-policy.js +163 -7
- package/node_modules/pi-lens/dist/clients/tree-sitter-client.js +120 -0
- package/node_modules/pi-lens/dist/clients/tree-sitter-query-loader.js +127 -189
- package/node_modules/pi-lens/dist/clients/widget-state.js +98 -0
- package/node_modules/pi-lens/dist/clients/word-index.js +5 -2
- package/node_modules/pi-lens/dist/clients/write-ordering-guard.js +7 -0
- package/node_modules/pi-lens/dist/index.js +27416 -24153
- package/node_modules/pi-lens/dist/mcp/server.js +5 -2
- package/node_modules/pi-lens/dist/tools/lens-diagnostic-mark.js +7 -1
- package/node_modules/pi-lens/dist/tools/lens-diagnostics.js +168 -53
- package/node_modules/pi-lens/dist/tools/lsp-diagnostics.js +244 -72
- package/node_modules/pi-lens/docs/audit1.md +5 -5
- package/node_modules/pi-lens/docs/dependencies.md +11 -0
- package/node_modules/pi-lens/docs/dispositions.md +52 -0
- package/node_modules/pi-lens/docs/environment-variables.md +2 -2
- package/node_modules/pi-lens/docs/features.md +4 -4
- package/node_modules/pi-lens/docs/globalconfig.md +3 -1
- package/node_modules/pi-lens/docs/language-coverage.md +1 -0
- package/node_modules/pi-lens/docs/pi-lens-fixer.md +53 -94
- package/node_modules/pi-lens/docs/pi-lens-investigator.md +43 -38
- package/node_modules/pi-lens/docs/pi-lens-retro.md +97 -0
- package/node_modules/pi-lens/docs/pi-lens-reviewer.md +53 -66
- package/node_modules/pi-lens/docs/release-qa-baseline.md +22 -0
- package/node_modules/pi-lens/docs/settings.md +7 -4
- package/node_modules/pi-lens/docs/tree-sitter_rules_catalog.md +1 -1
- package/node_modules/pi-lens/docs/usage.md +2 -0
- package/node_modules/pi-lens/package.json +1 -1
- package/node_modules/pi-lens/rules/tree-sitter-queries/typescript/sql-injection.yml +24 -12
- package/node_modules/pi-lens/scripts/analyze-pi-lens-logs.mjs +40 -0
- package/node_modules/pi-lens/skills/pi-lens-ast-grep/SKILL.md +15 -0
- package/node_modules/pi-lens/skills/pi-lens-lsp-navigation/SKILL.md +7 -0
- package/package.json +5 -11
- package/node_modules/@luxusai/pi-hindsight/CHANGELOG.md +0 -376
- package/node_modules/@luxusai/pi-hindsight/README.md +0 -92
- package/node_modules/@luxusai/pi-hindsight/docs/adr/001-memory-lifecycle-and-scope.md +0 -56
- package/node_modules/@luxusai/pi-hindsight/docs/adr/002-explicit-routing-strategy-seam.md +0 -169
- package/node_modules/@luxusai/pi-hindsight/docs/adr/003-tui-memory-mode-vocabulary.md +0 -107
- package/node_modules/@luxusai/pi-hindsight/docs/adr/004-lifeos-dual-bank-design.md +0 -89
- package/node_modules/@luxusai/pi-hindsight/docs/adr/005-domain-banks-and-agent-first-surface.md +0 -189
- package/node_modules/@luxusai/pi-hindsight/docs/assets/logos/pi-hindsight-logo-dark.webp +0 -0
- package/node_modules/@luxusai/pi-hindsight/docs/assets/logos/pi-hindsight-logo-dark@2x.webp +0 -0
- package/node_modules/@luxusai/pi-hindsight/docs/coding-memory-evaluation.md +0 -54
- package/node_modules/@luxusai/pi-hindsight/docs/compatibility.md +0 -75
- package/node_modules/@luxusai/pi-hindsight/docs/hindsight-core-functions.md +0 -300
- package/node_modules/@luxusai/pi-hindsight/docs/mission-and-mental-model-quality.md +0 -158
- package/node_modules/@luxusai/pi-hindsight/docs/next-opt-out-design.md +0 -164
- package/node_modules/@luxusai/pi-hindsight/docs/risky-memory-modes.md +0 -139
- package/node_modules/@luxusai/pi-hindsight/docs/starter-mental-model-suggestions.md +0 -74
- package/node_modules/@luxusai/pi-hindsight/docs/surface-reference.md +0 -261
- package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-operations.ts +0 -151
- package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-selection.ts +0 -18
- package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-settings-presenter.ts +0 -46
- package/node_modules/@luxusai/pi-hindsight/extensions/banks/bank-templates.ts +0 -383
- package/node_modules/@luxusai/pi-hindsight/extensions/banks/banking.ts +0 -240
- package/node_modules/@luxusai/pi-hindsight/extensions/banks/knowledge-page-seed.ts +0 -176
- package/node_modules/@luxusai/pi-hindsight/extensions/banks/retain-strategies.ts +0 -178
- package/node_modules/@luxusai/pi-hindsight/extensions/client/client-retry.ts +0 -41
- package/node_modules/@luxusai/pi-hindsight/extensions/client/client.ts +0 -386
- package/node_modules/@luxusai/pi-hindsight/extensions/client/fetch-compat.ts +0 -39
- package/node_modules/@luxusai/pi-hindsight/extensions/client/timeout.ts +0 -34
- package/node_modules/@luxusai/pi-hindsight/extensions/config/config-defaults.ts +0 -140
- package/node_modules/@luxusai/pi-hindsight/extensions/config/config-editing-model.ts +0 -61
- package/node_modules/@luxusai/pi-hindsight/extensions/config/config-editing-registry.ts +0 -925
- package/node_modules/@luxusai/pi-hindsight/extensions/config/config-field-paths.ts +0 -247
- package/node_modules/@luxusai/pi-hindsight/extensions/config/config-normalize.ts +0 -547
- package/node_modules/@luxusai/pi-hindsight/extensions/config/config-writer.ts +0 -480
- package/node_modules/@luxusai/pi-hindsight/extensions/config/config.ts +0 -182
- package/node_modules/@luxusai/pi-hindsight/extensions/config/setup-gate.ts +0 -86
- package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-execute.ts +0 -1010
- package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-parse.ts +0 -175
- package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-plan.ts +0 -425
- package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-presentation.ts +0 -210
- package/node_modules/@luxusai/pi-hindsight/extensions/imports/import-sessions.ts +0 -817
- package/node_modules/@luxusai/pi-hindsight/extensions/index.ts +0 -25
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/git-seed.ts +0 -319
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-recall.ts +0 -196
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-retain.ts +0 -189
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle-runtime.ts +0 -65
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/memory-lifecycle.ts +0 -260
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/mental-models.ts +0 -244
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/observation-scopes.ts +0 -59
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall-cleanup.ts +0 -82
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall-visibility.ts +0 -45
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/recall.ts +0 -331
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-cursor.ts +0 -354
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-job-builder.ts +0 -66
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain-receipts.ts +0 -132
- package/node_modules/@luxusai/pi-hindsight/extensions/lifecycle/retain.ts +0 -228
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-bank-template-operations.ts +0 -74
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-config-operations.ts +0 -16
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-control-operations.ts +0 -648
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-diagnostics-operations.ts +0 -105
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-identity.ts +0 -68
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-operation-service.ts +0 -71
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-operation-types.ts +0 -13
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-recall-operations.ts +0 -162
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-retain-operations.ts +0 -131
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-scope.ts +0 -104
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-session-operations.ts +0 -37
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/operation-catalog.ts +0 -893
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/reflect-presenter.ts +0 -35
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/scope-migrate.ts +0 -177
- package/node_modules/@luxusai/pi-hindsight/extensions/operations/tools.ts +0 -7
- package/node_modules/@luxusai/pi-hindsight/extensions/queue/flush-presenter.ts +0 -21
- package/node_modules/@luxusai/pi-hindsight/extensions/queue/jsonl-queue-store.ts +0 -112
- package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-delivery.ts +0 -111
- package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-lock.ts +0 -214
- package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue-operations.ts +0 -70
- package/node_modules/@luxusai/pi-hindsight/extensions/queue/queue.ts +0 -392
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/bank-template-presentation.ts +0 -45
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/commands.ts +0 -9
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/guided-setup.ts +0 -860
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/prefill-input.ts +0 -105
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-flow.ts +0 -189
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-server-probe.ts +0 -299
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-actions.ts +0 -201
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-facts.ts +0 -47
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-render.ts +0 -239
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui-types.ts +0 -50
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/setup-tui.ts +0 -259
- package/node_modules/@luxusai/pi-hindsight/extensions/tui/tool-presenters.ts +0 -77
- package/node_modules/@luxusai/pi-hindsight/extensions/types.ts +0 -534
- package/node_modules/@luxusai/pi-hindsight/extensions/utils/diagnostics.ts +0 -319
- package/node_modules/@luxusai/pi-hindsight/extensions/utils/messages.ts +0 -325
- package/node_modules/@luxusai/pi-hindsight/extensions/utils/sanitize.ts +0 -42
- package/node_modules/@luxusai/pi-hindsight/extensions/utils/session-memory-meta.ts +0 -244
- package/node_modules/@luxusai/pi-hindsight/extensions/utils/session-operations.ts +0 -56
- package/node_modules/@luxusai/pi-hindsight/extensions/utils/session.ts +0 -50
- package/node_modules/@luxusai/pi-hindsight/extensions/utils/status-fields.ts +0 -167
- package/node_modules/@luxusai/pi-hindsight/extensions/utils/status-health.ts +0 -207
- package/node_modules/@luxusai/pi-hindsight/extensions/utils/status.ts +0 -120
- package/node_modules/@luxusai/pi-hindsight/extensions/version.ts +0 -8
- package/node_modules/@luxusai/pi-hindsight/package.json +0 -118
- 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
|
-
}
|