@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,66 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
2
|
-
import type {
|
|
3
|
-
HindsightObservationScopes,
|
|
4
|
-
ResolvedConfig,
|
|
5
|
-
RetainJob,
|
|
6
|
-
UpdateMode,
|
|
7
|
-
} from "../types.js";
|
|
8
|
-
import { redactSecrets } from "../utils/sanitize.js";
|
|
9
|
-
|
|
10
|
-
export interface RetainJobBuildArgs {
|
|
11
|
-
config: ResolvedConfig;
|
|
12
|
-
bankId: string;
|
|
13
|
-
content: string;
|
|
14
|
-
context: string;
|
|
15
|
-
tags: string[];
|
|
16
|
-
documentId: string;
|
|
17
|
-
updateMode: UpdateMode;
|
|
18
|
-
metadata?: Record<string, string>;
|
|
19
|
-
timestamp?: string;
|
|
20
|
-
observationScopes?: HindsightObservationScopes;
|
|
21
|
-
documentTags?: string[];
|
|
22
|
-
entities?: RetainJob["item"]["entities"];
|
|
23
|
-
async?: boolean;
|
|
24
|
-
/** Named bank retain strategy (e.g. conversation, gitlog). Overrides bank default for this item. */
|
|
25
|
-
strategy?: string;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function sanitizedMetadata(
|
|
29
|
-
metadata: Record<string, string> | undefined,
|
|
30
|
-
redact: boolean,
|
|
31
|
-
): Record<string, string> | undefined {
|
|
32
|
-
if (!metadata) return undefined;
|
|
33
|
-
if (!redact) return metadata;
|
|
34
|
-
return Object.fromEntries(
|
|
35
|
-
Object.entries(metadata).map(([key, value]) => [key, redactSecrets(value)]),
|
|
36
|
-
);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export function buildRetainJob(args: RetainJobBuildArgs): RetainJob {
|
|
40
|
-
const redact = args.config.retain.redactSecrets;
|
|
41
|
-
const content = redact ? redactSecrets(args.content) : args.content;
|
|
42
|
-
const context = redact ? redactSecrets(args.context) : args.context;
|
|
43
|
-
const metadata = sanitizedMetadata(args.metadata, redact);
|
|
44
|
-
return {
|
|
45
|
-
id: randomUUID(),
|
|
46
|
-
bankId: args.bankId,
|
|
47
|
-
createdAt: new Date().toISOString(),
|
|
48
|
-
documentId: args.documentId,
|
|
49
|
-
updateMode: args.updateMode,
|
|
50
|
-
item: {
|
|
51
|
-
content,
|
|
52
|
-
context,
|
|
53
|
-
timestamp: args.timestamp ?? new Date().toISOString(),
|
|
54
|
-
async: args.async ?? args.config.retain.async,
|
|
55
|
-
...((args.entities?.length ?? args.config.retain.entities.length)
|
|
56
|
-
? { entities: [...args.config.retain.entities, ...(args.entities ?? [])] }
|
|
57
|
-
: {}),
|
|
58
|
-
tags: args.tags,
|
|
59
|
-
...(metadata ? { metadata } : {}),
|
|
60
|
-
...(args.observationScopes?.length ? { observationScopes: args.observationScopes } : {}),
|
|
61
|
-
...(args.documentTags?.length ? { documentTags: args.documentTags } : {}),
|
|
62
|
-
...(args.strategy ? { strategy: args.strategy } : {}),
|
|
63
|
-
},
|
|
64
|
-
retries: 0,
|
|
65
|
-
};
|
|
66
|
-
}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
|
|
2
|
-
import { dirname, resolve } from "node:path";
|
|
3
|
-
import { redactSecrets } from "../utils/sanitize.js";
|
|
4
|
-
import type { RetainOutcome, UpdateMode } from "../types.js";
|
|
5
|
-
|
|
6
|
-
export interface RetainReceipt {
|
|
7
|
-
createdAt: string;
|
|
8
|
-
bankId: string;
|
|
9
|
-
documentId: string;
|
|
10
|
-
queueJobId: string;
|
|
11
|
-
updateMode: UpdateMode;
|
|
12
|
-
source: "tool" | "import" | "queue";
|
|
13
|
-
context: string;
|
|
14
|
-
tags: string[];
|
|
15
|
-
outcome?: RetainOutcome;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export interface RetainReceiptHistory {
|
|
19
|
-
version: 1;
|
|
20
|
-
receipts: RetainReceipt[];
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const MAX_RECEIPTS = 50;
|
|
24
|
-
const MAX_RECEIPT_CONTEXT_CHARS = 1000;
|
|
25
|
-
|
|
26
|
-
export function retainReceiptsPath(cwd: string): string {
|
|
27
|
-
return resolve(cwd, ".pi/hindsight/retain-receipts.json");
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function emptyHistory(): RetainReceiptHistory {
|
|
31
|
-
return { version: 1, receipts: [] };
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export async function readRetainReceipts(path: string): Promise<RetainReceiptHistory> {
|
|
35
|
-
try {
|
|
36
|
-
const parsed = JSON.parse(await readFile(path, "utf8")) as Partial<RetainReceiptHistory>;
|
|
37
|
-
if (parsed.version !== 1 || !Array.isArray(parsed.receipts)) return emptyHistory();
|
|
38
|
-
return { version: 1, receipts: parsed.receipts.filter(isRetainReceipt).slice(0, MAX_RECEIPTS) };
|
|
39
|
-
} catch (error) {
|
|
40
|
-
if ((error as NodeJS.ErrnoException).code === "ENOENT") return emptyHistory();
|
|
41
|
-
return emptyHistory();
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function isRetainReceipt(value: unknown): value is RetainReceipt {
|
|
46
|
-
if (!value || typeof value !== "object") return false;
|
|
47
|
-
const receipt = value as Record<string, unknown>;
|
|
48
|
-
return (
|
|
49
|
-
typeof receipt.createdAt === "string" &&
|
|
50
|
-
typeof receipt.bankId === "string" &&
|
|
51
|
-
typeof receipt.documentId === "string" &&
|
|
52
|
-
typeof receipt.queueJobId === "string" &&
|
|
53
|
-
(receipt.updateMode === "append" || receipt.updateMode === "replace") &&
|
|
54
|
-
(receipt.source === "tool" || receipt.source === "import" || receipt.source === "queue") &&
|
|
55
|
-
typeof receipt.context === "string" &&
|
|
56
|
-
Array.isArray(receipt.tags) &&
|
|
57
|
-
receipt.tags.every((tag) => typeof tag === "string")
|
|
58
|
-
);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
type ReceiptInput = Omit<RetainReceipt, "createdAt"> & { createdAt?: string };
|
|
62
|
-
type ReceiptOptions = { redactSecrets?: boolean; maxContextChars?: number };
|
|
63
|
-
|
|
64
|
-
function receiptContext(context: string, options: ReceiptOptions): string {
|
|
65
|
-
const redacted = options.redactSecrets === false ? context : redactSecrets(context);
|
|
66
|
-
const maxChars = options.maxContextChars ?? MAX_RECEIPT_CONTEXT_CHARS;
|
|
67
|
-
if (redacted.length <= maxChars) return redacted;
|
|
68
|
-
return `${redacted.slice(0, maxChars)}…[truncated]`;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function buildReceipt(receipt: ReceiptInput, options: ReceiptOptions): RetainReceipt {
|
|
72
|
-
return {
|
|
73
|
-
createdAt: receipt.createdAt ?? new Date().toISOString(),
|
|
74
|
-
bankId: receipt.bankId,
|
|
75
|
-
documentId: receipt.documentId,
|
|
76
|
-
queueJobId: receipt.queueJobId,
|
|
77
|
-
updateMode: receipt.updateMode,
|
|
78
|
-
source: receipt.source,
|
|
79
|
-
context: receiptContext(receipt.context, options),
|
|
80
|
-
tags: receipt.tags,
|
|
81
|
-
...(receipt.outcome ? { outcome: receipt.outcome } : {}),
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
function mergeReceipt(receipts: RetainReceipt[], next: RetainReceipt): RetainReceipt[] {
|
|
86
|
-
return [
|
|
87
|
-
next,
|
|
88
|
-
...receipts.filter(
|
|
89
|
-
(existing) => existing.documentId !== next.documentId || existing.bankId !== next.bankId,
|
|
90
|
-
),
|
|
91
|
-
];
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
async function writeReceiptHistory(
|
|
95
|
-
cwd: string,
|
|
96
|
-
receipts: RetainReceipt[],
|
|
97
|
-
): Promise<RetainReceiptHistory> {
|
|
98
|
-
const path = retainReceiptsPath(cwd);
|
|
99
|
-
const history = { version: 1 as const, receipts: receipts.slice(0, MAX_RECEIPTS) };
|
|
100
|
-
await mkdir(dirname(path), { recursive: true });
|
|
101
|
-
const tempPath = `${path}.${process.pid}.${Date.now()}.tmp`;
|
|
102
|
-
await writeFile(tempPath, `${JSON.stringify(history, null, 2)}\n`, "utf8");
|
|
103
|
-
await rename(tempPath, path);
|
|
104
|
-
return history;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
export async function appendRetainReceipt(
|
|
108
|
-
cwd: string,
|
|
109
|
-
receipt: ReceiptInput,
|
|
110
|
-
options: ReceiptOptions = {},
|
|
111
|
-
): Promise<RetainReceiptHistory> {
|
|
112
|
-
const current = await readRetainReceipts(retainReceiptsPath(cwd));
|
|
113
|
-
return writeReceiptHistory(cwd, mergeReceipt(current.receipts, buildReceipt(receipt, options)));
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
export async function appendRetainReceipts(
|
|
117
|
-
cwd: string,
|
|
118
|
-
receiptInputs: ReceiptInput[],
|
|
119
|
-
options: ReceiptOptions = {},
|
|
120
|
-
): Promise<RetainReceiptHistory> {
|
|
121
|
-
if (receiptInputs.length === 0) return readRetainReceipts(retainReceiptsPath(cwd));
|
|
122
|
-
const current = await readRetainReceipts(retainReceiptsPath(cwd));
|
|
123
|
-
let receipts = current.receipts;
|
|
124
|
-
for (const input of receiptInputs)
|
|
125
|
-
receipts = mergeReceipt(receipts, buildReceipt(input, options));
|
|
126
|
-
return writeReceiptHistory(cwd, receipts);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
export async function listRetainReceipts(cwd: string, limit = 10): Promise<RetainReceipt[]> {
|
|
130
|
-
const history = await readRetainReceipts(retainReceiptsPath(cwd));
|
|
131
|
-
return history.receipts.slice(0, Math.max(0, limit));
|
|
132
|
-
}
|
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
import type { AgentEndEvent } from "@earendil-works/pi-coding-agent";
|
|
2
|
-
import type {
|
|
3
|
-
HindsightLikeClient,
|
|
4
|
-
HindsightObservationScopes,
|
|
5
|
-
ResolvedConfig,
|
|
6
|
-
RetainJob,
|
|
7
|
-
RetainOutcome,
|
|
8
|
-
UpdateMode,
|
|
9
|
-
} from "../types.js";
|
|
10
|
-
import { baseTags } from "../banks/banking.js";
|
|
11
|
-
import { projectMessages } from "../utils/messages.js";
|
|
12
|
-
import { redactError } from "../utils/sanitize.js";
|
|
13
|
-
import { contextLabel, liveDocumentId, stableSessionId } from "../utils/session.js";
|
|
14
|
-
import {
|
|
15
|
-
enqueueRetain,
|
|
16
|
-
enqueueRetainCoalesced,
|
|
17
|
-
flushRetain,
|
|
18
|
-
summarizeRetain,
|
|
19
|
-
summarizeRetainQueue,
|
|
20
|
-
retainQueuePath,
|
|
21
|
-
type FlushRetainQueueResult,
|
|
22
|
-
} from "../queue/queue.js";
|
|
23
|
-
import { createMemoryIdentity } from "../operations/memory-identity.js";
|
|
24
|
-
import { LIVE_SESSION_RETAIN_STRATEGY } from "../banks/retain-strategies.js";
|
|
25
|
-
import { expandObservationScopes } from "./observation-scopes.js";
|
|
26
|
-
import { buildRetainJob as buildRetainJobCore } from "./retain-job-builder.js";
|
|
27
|
-
import { appendRetainReceipts } from "./retain-receipts.js";
|
|
28
|
-
|
|
29
|
-
function hasRetainOutcome(outcome: { itemsCount?: number; operations?: number; tokens?: number }) {
|
|
30
|
-
return (
|
|
31
|
-
outcome.itemsCount !== undefined ||
|
|
32
|
-
outcome.operations !== undefined ||
|
|
33
|
-
outcome.tokens !== undefined
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export async function recordRetainDeliveries(
|
|
38
|
-
cwd: string,
|
|
39
|
-
config: ResolvedConfig,
|
|
40
|
-
result: FlushRetainQueueResult,
|
|
41
|
-
): Promise<void> {
|
|
42
|
-
if (!result.delivered?.length) return;
|
|
43
|
-
await appendRetainReceipts(
|
|
44
|
-
cwd,
|
|
45
|
-
result.delivered.map((delivery) => ({
|
|
46
|
-
queueJobId: delivery.queueJobId,
|
|
47
|
-
bankId: delivery.bankId,
|
|
48
|
-
documentId: delivery.documentId,
|
|
49
|
-
updateMode: delivery.updateMode,
|
|
50
|
-
source: "queue" as const,
|
|
51
|
-
context: delivery.context,
|
|
52
|
-
tags: delivery.tags,
|
|
53
|
-
...(hasRetainOutcome(delivery.outcome) ? { outcome: delivery.outcome } : {}),
|
|
54
|
-
})),
|
|
55
|
-
{ redactSecrets: config.retain.redactSecrets },
|
|
56
|
-
);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export function buildRetainJob(args: {
|
|
60
|
-
config: ResolvedConfig;
|
|
61
|
-
cwd: string;
|
|
62
|
-
sessionFile?: string;
|
|
63
|
-
bankId: string;
|
|
64
|
-
messages: AgentEndEvent["messages"];
|
|
65
|
-
extraTags?: string[];
|
|
66
|
-
}): RetainJob | undefined {
|
|
67
|
-
const projected = projectMessages(args.messages, args.config);
|
|
68
|
-
if (projected.length === 0) return undefined;
|
|
69
|
-
const content = JSON.stringify(projected, null, 2);
|
|
70
|
-
const sessionId = stableSessionId(args.sessionFile, args.cwd);
|
|
71
|
-
const identity = createMemoryIdentity(args.cwd, args.config, args.sessionFile);
|
|
72
|
-
const observationScopes = args.config.observations.enabled
|
|
73
|
-
? expandObservationScopes(args.config.observations.scopes, {
|
|
74
|
-
...identity,
|
|
75
|
-
projectBankId: args.bankId,
|
|
76
|
-
})
|
|
77
|
-
: [];
|
|
78
|
-
return buildRetainJobCore({
|
|
79
|
-
config: args.config,
|
|
80
|
-
bankId: args.bankId,
|
|
81
|
-
content,
|
|
82
|
-
context: contextLabel(args.cwd, args.sessionFile, args.config.agentUse),
|
|
83
|
-
documentId: liveDocumentId(args.sessionFile, args.cwd),
|
|
84
|
-
updateMode: args.config.retain.updateMode,
|
|
85
|
-
tags: [...new Set([...baseTags(args.cwd, sessionId, args.config), ...(args.extraTags ?? [])])],
|
|
86
|
-
metadata: {
|
|
87
|
-
cwd: args.cwd,
|
|
88
|
-
imported: "false",
|
|
89
|
-
...(args.sessionFile ? { pi_session_file: args.sessionFile } : {}),
|
|
90
|
-
},
|
|
91
|
-
...(observationScopes.length ? { observationScopes } : {}),
|
|
92
|
-
// Coding bank templates define named strategies; live sessions use conversation.
|
|
93
|
-
strategy: LIVE_SESSION_RETAIN_STRATEGY,
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
export async function enqueueRetainFromAgentEnd(args: {
|
|
98
|
-
event: AgentEndEvent;
|
|
99
|
-
cwd: string;
|
|
100
|
-
sessionFile?: string;
|
|
101
|
-
config: ResolvedConfig;
|
|
102
|
-
client: HindsightLikeClient;
|
|
103
|
-
bankId: string;
|
|
104
|
-
extraTags?: string[];
|
|
105
|
-
}): Promise<{ queued: boolean; sent: number; remaining: number; reflectError?: string }> {
|
|
106
|
-
if (!args.config.enabled || !args.config.retain.enabled)
|
|
107
|
-
return { queued: false, sent: 0, remaining: 0 };
|
|
108
|
-
const job = buildRetainJob({
|
|
109
|
-
config: args.config,
|
|
110
|
-
cwd: args.cwd,
|
|
111
|
-
...(args.sessionFile ? { sessionFile: args.sessionFile } : {}),
|
|
112
|
-
bankId: args.bankId,
|
|
113
|
-
messages: args.event.messages,
|
|
114
|
-
...(args.extraTags ? { extraTags: args.extraTags } : {}),
|
|
115
|
-
});
|
|
116
|
-
if (!job) return { queued: false, sent: 0, remaining: 0 };
|
|
117
|
-
|
|
118
|
-
// Coalesced delivery: merge this delta into any compatible pending job and defer the
|
|
119
|
-
// remote flush to the session boundary (shutdown) / periodic flush. This collapses the
|
|
120
|
-
// per-agent_end write storm into a few larger operations. Durability is unchanged: the
|
|
121
|
-
// job is persisted to the on-disk queue before we return.
|
|
122
|
-
if (args.config.retain.delivery === "coalesced") {
|
|
123
|
-
await enqueueRetainCoalesced(args.cwd, args.config, job);
|
|
124
|
-
const summary = await summarizeRetainQueue(retainQueuePath(args.cwd, args.config));
|
|
125
|
-
return { queued: true, sent: 0, remaining: summary.active.valid };
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
await enqueueRetain(args.cwd, args.config, job);
|
|
129
|
-
const result = await flushRetain(args.cwd, args.config, args.client);
|
|
130
|
-
await recordRetainDeliveries(args.cwd, args.config, result);
|
|
131
|
-
let reflectError: string | undefined;
|
|
132
|
-
if (args.config.retain.postRetainReflect) {
|
|
133
|
-
try {
|
|
134
|
-
await args.client.reflect(
|
|
135
|
-
args.bankId,
|
|
136
|
-
"Reflect on the recently retained session to extract insights",
|
|
137
|
-
{ context: "Post-retain reflection" },
|
|
138
|
-
);
|
|
139
|
-
} catch (error) {
|
|
140
|
-
// Best-effort reflect after retain; the retain itself already succeeded above.
|
|
141
|
-
// Surface the (redacted) cause to the caller instead of swallowing it silently,
|
|
142
|
-
// so callers with a notification channel can make it debug-visible.
|
|
143
|
-
reflectError = redactError(error);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
return {
|
|
147
|
-
queued: true,
|
|
148
|
-
sent: result.sent,
|
|
149
|
-
remaining: result.remaining,
|
|
150
|
-
...(reflectError ? { reflectError } : {}),
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
export type DurableRetainSource = "auto" | "tool" | "command" | "import";
|
|
155
|
-
|
|
156
|
-
export interface RetainDurablyArgs {
|
|
157
|
-
cwd: string;
|
|
158
|
-
config: ResolvedConfig;
|
|
159
|
-
client: HindsightLikeClient;
|
|
160
|
-
bankId: string;
|
|
161
|
-
content: string;
|
|
162
|
-
context: string;
|
|
163
|
-
tags: string[];
|
|
164
|
-
documentId: string;
|
|
165
|
-
updateMode: UpdateMode;
|
|
166
|
-
metadata?: Record<string, string>;
|
|
167
|
-
source: DurableRetainSource;
|
|
168
|
-
timestamp?: string;
|
|
169
|
-
observationScopes?: HindsightObservationScopes;
|
|
170
|
-
documentTags?: string[];
|
|
171
|
-
entities?: RetainJob["item"]["entities"];
|
|
172
|
-
async?: boolean;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
export interface RetainDurablyResult {
|
|
176
|
-
enqueued: boolean;
|
|
177
|
-
sent: number;
|
|
178
|
-
remaining: number;
|
|
179
|
-
deadLettered: number;
|
|
180
|
-
bankId: string;
|
|
181
|
-
documentId: string;
|
|
182
|
-
queueJobId: string;
|
|
183
|
-
updateMode: UpdateMode;
|
|
184
|
-
operationIds?: string[];
|
|
185
|
-
outcome?: RetainOutcome;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
export function buildDurableRetainJob(args: Omit<RetainDurablyArgs, "client">): RetainJob {
|
|
189
|
-
return buildRetainJobCore({
|
|
190
|
-
...args,
|
|
191
|
-
metadata: {
|
|
192
|
-
...args.metadata,
|
|
193
|
-
source: "pi-hindsight",
|
|
194
|
-
retainSource: args.source,
|
|
195
|
-
},
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
export async function retainDurably(args: RetainDurablyArgs): Promise<RetainDurablyResult> {
|
|
200
|
-
const job = buildDurableRetainJob(args);
|
|
201
|
-
const receipt = {
|
|
202
|
-
bankId: job.bankId,
|
|
203
|
-
documentId: job.documentId,
|
|
204
|
-
queueJobId: job.id,
|
|
205
|
-
updateMode: job.updateMode,
|
|
206
|
-
};
|
|
207
|
-
const enqueueResult = await enqueueRetain(args.cwd, args.config, job);
|
|
208
|
-
if (enqueueResult.previousLength > 0) {
|
|
209
|
-
const summary = await summarizeRetain(args.cwd, args.config);
|
|
210
|
-
return {
|
|
211
|
-
...receipt,
|
|
212
|
-
enqueued: true,
|
|
213
|
-
sent: 0,
|
|
214
|
-
remaining: summary.active.valid + summary.active.malformed,
|
|
215
|
-
deadLettered: 0,
|
|
216
|
-
};
|
|
217
|
-
}
|
|
218
|
-
const result = await flushRetain(args.cwd, args.config, args.client, { maxJobs: 1 });
|
|
219
|
-
return {
|
|
220
|
-
...receipt,
|
|
221
|
-
enqueued: true,
|
|
222
|
-
sent: result.sent,
|
|
223
|
-
remaining: result.remaining,
|
|
224
|
-
deadLettered: result.deadLettered,
|
|
225
|
-
...(result.operationIds ? { operationIds: result.operationIds } : {}),
|
|
226
|
-
...(result.outcome ? { outcome: result.outcome } : {}),
|
|
227
|
-
};
|
|
228
|
-
}
|
package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-bank-template-operations.ts
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
getBuiltInBankTemplate,
|
|
3
|
-
listBankTemplatesForAgentUse,
|
|
4
|
-
listBuiltInBankTemplates,
|
|
5
|
-
resolveBankTemplateManifest,
|
|
6
|
-
} from "../banks/bank-templates.js";
|
|
7
|
-
import { resolveProjectIdentity } from "../banks/banking.js";
|
|
8
|
-
import { resolveOperationBank } from "../banks/bank-selection.js";
|
|
9
|
-
import { seedKnowledgePages } from "../banks/knowledge-page-seed.js";
|
|
10
|
-
import type { MemoryOperationsDeps } from "./memory-operation-types.js";
|
|
11
|
-
|
|
12
|
-
export function createBankTemplateOperations(deps: MemoryOperationsDeps) {
|
|
13
|
-
return {
|
|
14
|
-
listBankTemplates() {
|
|
15
|
-
return listBuiltInBankTemplates();
|
|
16
|
-
},
|
|
17
|
-
|
|
18
|
-
listBankTemplatesForAgentUse() {
|
|
19
|
-
return listBankTemplatesForAgentUse(deps.getConfig().agentUse);
|
|
20
|
-
},
|
|
21
|
-
|
|
22
|
-
async applyBankTemplate(args: { templateId: string; dryRun?: boolean }) {
|
|
23
|
-
const template = getBuiltInBankTemplate(args.templateId);
|
|
24
|
-
if (!template) {
|
|
25
|
-
throw new Error(
|
|
26
|
-
`Unknown bank template id: ${args.templateId}. Open /hindsight and press t to list sets for the current agent use.`,
|
|
27
|
-
);
|
|
28
|
-
}
|
|
29
|
-
const client = deps.getClient();
|
|
30
|
-
if (!client.importBankTemplate) {
|
|
31
|
-
throw new Error("Hindsight client does not support bank template import.");
|
|
32
|
-
}
|
|
33
|
-
const config = deps.getConfig();
|
|
34
|
-
// Each bundled template already declares which bank kind it targets, so apply resolves
|
|
35
|
-
// that bank directly instead of taking a separate --bank override.
|
|
36
|
-
const bankId = resolveOperationBank({
|
|
37
|
-
requestedBank: template.target === "user" ? "global" : undefined,
|
|
38
|
-
config,
|
|
39
|
-
projectBankId: deps.getProjectBankId(),
|
|
40
|
-
});
|
|
41
|
-
const bankMissionSettings =
|
|
42
|
-
template.target === "user" ? config.banks.user : config.banks.project;
|
|
43
|
-
const cwd = (deps as { getCwd?: () => string }).getCwd?.() ?? process.cwd();
|
|
44
|
-
const resolvedProjectId =
|
|
45
|
-
template.target === "project" ? resolveProjectIdentity(cwd, config).projectId : undefined;
|
|
46
|
-
const manifest = resolveBankTemplateManifest(template, bankMissionSettings, {
|
|
47
|
-
...(resolvedProjectId ? { projectId: resolvedProjectId } : {}),
|
|
48
|
-
});
|
|
49
|
-
const dryRun = args.dryRun ?? true;
|
|
50
|
-
const result = await client.importBankTemplate(bankId, manifest, { dryRun });
|
|
51
|
-
// Coding project templates also seed the knowledge-page taxonomy when the server supports pages.
|
|
52
|
-
let knowledgeSeed: Awaited<ReturnType<typeof seedKnowledgePages>> | undefined;
|
|
53
|
-
if (template.id === "pi-coding-project") {
|
|
54
|
-
const baseTags = [
|
|
55
|
-
"source:pi",
|
|
56
|
-
...(resolvedProjectId ? [`project:${resolvedProjectId}`] : []),
|
|
57
|
-
];
|
|
58
|
-
knowledgeSeed = await seedKnowledgePages({
|
|
59
|
-
client,
|
|
60
|
-
bankId,
|
|
61
|
-
baseTags,
|
|
62
|
-
dryRun,
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
return {
|
|
66
|
-
bankId,
|
|
67
|
-
template,
|
|
68
|
-
dryRun,
|
|
69
|
-
result,
|
|
70
|
-
...(knowledgeSeed ? { knowledgeSeed } : {}),
|
|
71
|
-
};
|
|
72
|
-
},
|
|
73
|
-
};
|
|
74
|
-
}
|
package/node_modules/@luxusai/pi-hindsight/extensions/operations/memory-config-operations.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { ConfigureMemoryArgs, MemoryOperationsDeps } from "./memory-operation-types.js";
|
|
2
|
-
import { configureMemory, initMemoryConfig } from "../config/config-writer.js";
|
|
3
|
-
|
|
4
|
-
export function createConfigOperations(deps: MemoryOperationsDeps) {
|
|
5
|
-
return {
|
|
6
|
-
async configure(cwd: string, args: ConfigureMemoryArgs) {
|
|
7
|
-
return configureMemory(cwd, args, deps);
|
|
8
|
-
},
|
|
9
|
-
|
|
10
|
-
async init(cwd: string) {
|
|
11
|
-
const result = await initMemoryConfig(cwd, deps);
|
|
12
|
-
deps.reloadConfig?.(cwd);
|
|
13
|
-
return result;
|
|
14
|
-
},
|
|
15
|
-
};
|
|
16
|
-
}
|