hippo-memory 1.69.0 → 1.70.0
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 +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +3 -2
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +37 -45
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +48 -61
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +2 -11
- package/dist/api/forget.js +13 -46
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/promote.d.ts +4 -15
- package/dist/api/promote.js +29 -106
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +10 -12
- package/dist/api/remember.js +29 -45
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +1 -1
- package/dist/capture/command.js +54 -41
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +4 -1
- package/dist/capture/compact.js +40 -22
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +190 -184
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +41 -21
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +4 -2
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -83
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -91
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
- package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
- package/dist/{memory.js → core/memory.js} +110 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +14 -15
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +14 -15
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +1 -1
- package/dist/hooks/json-hooks.js +31 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +0 -4
- package/dist/hooks/shared.js +1 -5
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +7 -27
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +62 -60
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -1
- package/dist/search/boosts.js +34 -13
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +12 -14
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +1 -1
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +39 -61
- package/dist/server.js +24 -568
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +11 -5
- package/dist/store/audit-event.js +5 -4
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +1 -1
- package/dist/store/handoffs.js +39 -30
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +24 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
- package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
- package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +41 -28
- package/dist/store/sessions.d.ts +13 -2
- package/dist/store/sessions.js +79 -45
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +28 -0
- package/dist/store/sqlite/executor.js +286 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +26 -0
- package/dist/store/sqlite/store.js +295 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +15 -2
- package/dist/{env.js → util/env.js} +20 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
package/dist/api/dormant.js
CHANGED
|
@@ -1,30 +1,19 @@
|
|
|
1
1
|
// Dormant memories: list, restore, forget and check.
|
|
2
|
-
import {
|
|
3
|
-
import { ConflictError, NotFoundError } from '../api-errors.js';
|
|
4
|
-
import { auditRejectionRefusal } from '../store/audit-event.js';
|
|
2
|
+
import { ConflictError, NotFoundError } from '../core/api-errors.js';
|
|
5
3
|
import { stampOriginProject } from '../store/entry-row.js';
|
|
6
|
-
import { writeEntryDbOnly, writeEntryMirrors } from '../store/entry-writes.js';
|
|
7
4
|
import { updateStatsUnlessBusy } from '../store/index-and-stats.js';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { loadConfig } from '../config.js';
|
|
13
|
-
import { canTouchScope, personalScopeOf, touchableScopeSql } from '../recall-scope.js';
|
|
5
|
+
import { loadDormantMemories, holdsDormantMemory, restoreDormantMemory, forgetDormantMemory, } from '../store/dormant.js';
|
|
6
|
+
import { createMemory, calculateStrength } from '../core/memory.js';
|
|
7
|
+
import { loadConfig } from '../core/config.js';
|
|
8
|
+
import { canTouchScope, personalScopeOf, touchableScopeSql } from '../store/recall-scope.js';
|
|
14
9
|
const touchable = (ctx) => touchableScopeSql('', personalScopeOf(ctx.actor));
|
|
15
10
|
/**
|
|
16
|
-
* A tenant's dormant memories (src/dormant.ts): what sleep moved out of
|
|
11
|
+
* A tenant's dormant memories (src/store/dormant.ts): what sleep moved out of
|
|
17
12
|
* active memory instead of deleting, when `dormant.enabled` is on. Newest
|
|
18
13
|
* first; `opts.query` keeps rows containing every term (case-insensitive).
|
|
19
14
|
*/
|
|
20
15
|
export function listDormant(ctx, opts = {}) {
|
|
21
|
-
|
|
22
|
-
try {
|
|
23
|
-
return listDormantRows(db, ctx.tenantId, opts, touchable(ctx));
|
|
24
|
-
}
|
|
25
|
-
finally {
|
|
26
|
-
closeHippoDb(db);
|
|
27
|
-
}
|
|
16
|
+
return loadDormantMemories(ctx.hippoRoot, ctx.tenantId, opts, touchable(ctx));
|
|
28
17
|
}
|
|
29
18
|
/**
|
|
30
19
|
* Bring a dormant memory back into active memory. It returns as if just
|
|
@@ -38,67 +27,34 @@ export function listDormant(ctx, opts = {}) {
|
|
|
38
27
|
* throw the dormant copy stays where it is.
|
|
39
28
|
*/
|
|
40
29
|
export function restoreDormant(ctx, id) {
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
const now = new Date();
|
|
54
|
-
// Dormant rows are long-lived, so a snapshot can predate a field added
|
|
55
|
-
// later: createMemory supplies a default for anything it lacks, then
|
|
56
|
-
// the snapshot overrides every field it does carry, content included.
|
|
57
|
-
// (The placeholder only satisfies createMemory's minimum length, so a
|
|
58
|
-
// legacy row shorter than 3 chars can still be restored.)
|
|
59
|
-
const revived = {
|
|
60
|
-
...createMemory('dormant snapshot defaults', { baseHalfLifeDays: loadConfig(ctx.hippoRoot).defaultHalfLifeDays }),
|
|
61
|
-
...dormant.entry,
|
|
62
|
-
last_retrieved: now.toISOString(),
|
|
63
|
-
};
|
|
64
|
-
if (dormant.reason === 'quality-repair')
|
|
65
|
-
revived.confidence = 'verified';
|
|
66
|
-
restored = stampOriginProject(ctx.hippoRoot, { ...revived, strength: calculateStrength(revived, now) });
|
|
67
|
-
writeEntryDbOnly(db, restored, { actor: ctx.actor.subject });
|
|
68
|
-
deleteDormantRow(db, ctx.tenantId, id);
|
|
69
|
-
// A restore is a labelled "forgot it, then needed it" event: the
|
|
70
|
-
// signal a learned lifecycle trains on. Same transaction
|
|
71
|
-
// as the restore, so the label exists exactly when the restore does.
|
|
72
|
-
appendAuditEvent(db, {
|
|
73
|
-
tenantId: ctx.tenantId,
|
|
74
|
-
actor: ctx.actor.subject,
|
|
75
|
-
op: 'dormant_restore',
|
|
76
|
-
targetId: id,
|
|
77
|
-
metadata: {
|
|
78
|
-
reason: dormant.reason,
|
|
79
|
-
strengthAtDormancy: dormant.strength,
|
|
80
|
-
dormantAt: dormant.dormantAt,
|
|
81
|
-
daysDormant: Math.max(0, (now.getTime() - Date.parse(dormant.dormantAt)) / (24 * 60 * 60 * 1000)),
|
|
82
|
-
},
|
|
83
|
-
});
|
|
84
|
-
db.exec('COMMIT');
|
|
85
|
-
}
|
|
86
|
-
catch (err) {
|
|
87
|
-
try {
|
|
88
|
-
db.exec('ROLLBACK');
|
|
89
|
-
}
|
|
90
|
-
catch { /* already rolled back */ }
|
|
91
|
-
if (err instanceof RejectedValueError) {
|
|
92
|
-
auditRejectionRefusal(db, err, ctx.actor.subject);
|
|
93
|
-
}
|
|
94
|
-
throw err;
|
|
95
|
-
}
|
|
96
|
-
writeEntryMirrors(ctx.hippoRoot, restored);
|
|
97
|
-
return restored;
|
|
98
|
-
}
|
|
99
|
-
finally {
|
|
100
|
-
closeHippoDb(db);
|
|
30
|
+
const outcome = restoreDormantMemory(ctx.hippoRoot, {
|
|
31
|
+
tenantId: ctx.tenantId,
|
|
32
|
+
id,
|
|
33
|
+
actor: ctx.actor.subject,
|
|
34
|
+
inReach: (scope) => canTouchScope(ctx.actor, scope),
|
|
35
|
+
revive: (snapshot, now) => reviveSnapshot(ctx, snapshot, now),
|
|
36
|
+
});
|
|
37
|
+
if (outcome.status === 'missing')
|
|
38
|
+
throw new NotFoundError(`dormant memory not found: ${id}`);
|
|
39
|
+
if (outcome.status === 'active') {
|
|
40
|
+
throw new ConflictError(`memory ${id} is already active; forget it before restoring its dormant copy`);
|
|
101
41
|
}
|
|
42
|
+
return outcome.entry;
|
|
43
|
+
}
|
|
44
|
+
function reviveSnapshot(ctx, dormant, now) {
|
|
45
|
+
// Dormant rows are long-lived, so a snapshot can predate a field added
|
|
46
|
+
// later: createMemory supplies a default for anything it lacks, then
|
|
47
|
+
// the snapshot overrides every field it does carry, content included.
|
|
48
|
+
// (The placeholder only satisfies createMemory's minimum length, so a
|
|
49
|
+
// legacy row shorter than 3 chars can still be restored.)
|
|
50
|
+
const revived = {
|
|
51
|
+
...createMemory('dormant snapshot defaults', { baseHalfLifeDays: loadConfig(ctx.hippoRoot).defaultHalfLifeDays }),
|
|
52
|
+
...dormant.entry,
|
|
53
|
+
last_retrieved: now.toISOString(),
|
|
54
|
+
};
|
|
55
|
+
if (dormant.reason === 'quality-repair')
|
|
56
|
+
revived.confidence = 'verified';
|
|
57
|
+
return stampOriginProject(ctx.hippoRoot, { ...revived, strength: calculateStrength(revived, now) });
|
|
102
58
|
}
|
|
103
59
|
/**
|
|
104
60
|
* Permanently delete a dormant memory: the explicit "forget it for good"
|
|
@@ -106,39 +62,14 @@ export function restoreDormant(ctx, id) {
|
|
|
106
62
|
* dormant memory with that id.
|
|
107
63
|
*/
|
|
108
64
|
export function forgetDormant(ctx, id) {
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
throw new NotFoundError(`dormant memory not found: ${id}`);
|
|
113
|
-
}
|
|
114
|
-
try {
|
|
115
|
-
appendAuditEvent(db, {
|
|
116
|
-
tenantId: ctx.tenantId,
|
|
117
|
-
actor: ctx.actor.subject,
|
|
118
|
-
op: 'forget',
|
|
119
|
-
targetId: id,
|
|
120
|
-
metadata: { dormant: true },
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
catch (error) {
|
|
124
|
-
// Best-effort, like every other forget audit row: the delete stands.
|
|
125
|
-
reportAuditWriteFailure('forget', String(error), id);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
finally {
|
|
129
|
-
closeHippoDb(db);
|
|
130
|
-
}
|
|
65
|
+
const forgotten = forgetDormantMemory(ctx.hippoRoot, { tenantId: ctx.tenantId, id, actor: ctx.actor.subject, admit: touchable(ctx) });
|
|
66
|
+
if (!forgotten)
|
|
67
|
+
throw new NotFoundError(`dormant memory not found: ${id}`);
|
|
131
68
|
// Counted like every other permanent removal (forget, archiveRaw).
|
|
132
69
|
updateStatsUnlessBusy(ctx.hippoRoot, { forgotten: 1 }, `removed ${id}`);
|
|
133
70
|
}
|
|
134
71
|
/** Whether the tenant holds a dormant memory with this id that the caller may touch (for "not found" hints). */
|
|
135
72
|
export function isDormant(ctx, id) {
|
|
136
|
-
|
|
137
|
-
try {
|
|
138
|
-
return hasDormantRow(db, ctx.tenantId, id, touchable(ctx));
|
|
139
|
-
}
|
|
140
|
-
finally {
|
|
141
|
-
closeHippoDb(db);
|
|
142
|
-
}
|
|
73
|
+
return holdsDormantMemory(ctx.hippoRoot, ctx.tenantId, id, touchable(ctx));
|
|
143
74
|
}
|
|
144
75
|
//# sourceMappingURL=dormant.js.map
|
package/dist/api/drill-down.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CallerProject } from '
|
|
1
|
+
import type { CallerProject } from './prompt-hook.js';
|
|
2
2
|
import type { Context } from './types.js';
|
|
3
3
|
export interface DrillDownOpts {
|
|
4
4
|
/** Cap on number of children returned. Default 50. */
|
|
@@ -82,5 +82,5 @@ export type DrillDownOutcome = DrillDownResult | DrillDownFailure;
|
|
|
82
82
|
* Pre-v1.6.4 returned null for all three cases. JS callers migrate via
|
|
83
83
|
* `'failure' in result` checks; HTTP route maps `not_drillable` to 422.
|
|
84
84
|
*/
|
|
85
|
-
export declare function drillDown(ctx: Context, summaryId: string, opts?: DrillDownOpts): DrillDownOutcome
|
|
85
|
+
export declare function drillDown(ctx: Context, summaryId: string, opts?: DrillDownOpts): Promise<DrillDownOutcome>;
|
|
86
86
|
//# sourceMappingURL=drill-down.d.ts.map
|
package/dist/api/drill-down.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
// DAG drill-down from a summary to its children.
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
import { classifyOriginProject } from '../project-identity.js';
|
|
2
|
+
import { requireGroup, storeFor } from '../store/index.js';
|
|
3
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
4
|
+
import { passesScopeFilterForRecall, personalScopeOf } from '../store/recall-scope.js';
|
|
5
|
+
import { classifyOriginProject } from '../core/project-identity.js';
|
|
6
|
+
const DEFAULT_DRILL_DOWN_LIMIT = 50;
|
|
8
7
|
/**
|
|
9
8
|
* Walk one step down the DAG from a level-2 (or higher) summary to its direct
|
|
10
9
|
* children. Companion to `recall(... summarizeOverflow: true)` — when recall
|
|
@@ -24,47 +23,48 @@ import { classifyOriginProject } from '../project-identity.js';
|
|
|
24
23
|
* Pre-v1.6.4 returned null for all three cases. JS callers migrate via
|
|
25
24
|
* `'failure' in result` checks; HTTP route maps `not_drillable` to 422.
|
|
26
25
|
*/
|
|
27
|
-
export function drillDown(ctx, summaryId, opts = {}) {
|
|
28
|
-
const limit = opts.limit ??
|
|
26
|
+
export async function drillDown(ctx, summaryId, opts = {}) {
|
|
27
|
+
const limit = opts.limit ?? DEFAULT_DRILL_DOWN_LIMIT;
|
|
29
28
|
// v0.30 / E5: depth defaults 1 (backward compat); hard cap 10 levels
|
|
30
29
|
// prevents pathological deep trees. CLI/HTTP/MCP reject invalid values.
|
|
31
30
|
const depth = Math.max(1, Math.min(Math.trunc(opts.depth ?? 1), 10));
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
31
|
+
const own = personalScopeOf(ctx.actor) ?? undefined;
|
|
32
|
+
const readable = (row) => passesScopeFilterForRecall(row.scope ?? null, undefined, own)
|
|
33
|
+
&& (!opts.project || classifyOriginProject(row.origin_project, opts.project) !== 'cross-project');
|
|
34
|
+
const pastLimit = Math.floor(limit) + 1;
|
|
35
|
+
const walked = await requireGroup(storeFor(ctx), 'dagReads').summaryWithDescendants(ctx.tenantId, summaryId, {
|
|
36
|
+
depth,
|
|
37
|
+
// A leaf answers not_drillable, so nothing under it is read.
|
|
38
|
+
admit: (row) => readable(row) && (row.id !== summaryId || isDrillable(row)),
|
|
39
|
+
page: limit >= 0 && Number.isSafeInteger(pastLimit) ? { rows: pastLimit, admit: readable } : undefined,
|
|
40
|
+
});
|
|
42
41
|
// No unscoped cross-tenant probe here: the tenant-scoped read's miss covers
|
|
43
42
|
// both "doesn't exist" and "exists in another tenant" by design.
|
|
44
43
|
// Distinguishing them via an unscoped lookup would leak existence to
|
|
45
44
|
// unauthorised tenants. The two cases collapse into not_found.
|
|
46
|
-
if (!
|
|
45
|
+
if (!walked)
|
|
47
46
|
return { failure: 'not_found' };
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
// "scope_blocked" tells a no-scope caller "this row exists, just
|
|
52
|
-
// not for you" — same existence-leak the HTTP 404 collapse was
|
|
53
|
-
// already preventing. Match the HTTP behaviour at the API level.
|
|
54
|
-
return { failure: 'not_found' };
|
|
55
|
-
}
|
|
56
|
-
const shown = (row) => !opts.project || classifyOriginProject(row.origin_project, opts.project) !== 'cross-project';
|
|
57
|
-
if (!shown(summary))
|
|
47
|
+
// A distinguishable "scope_blocked" would tell a no-scope caller "this row
|
|
48
|
+
// exists, just not for you", the existence leak the HTTP 404 collapse prevents.
|
|
49
|
+
if (!readable(walked.summary))
|
|
58
50
|
return { failure: 'not_found' };
|
|
59
|
-
if ((summary
|
|
51
|
+
if (!isDrillable(walked.summary))
|
|
60
52
|
return { failure: 'not_drillable' };
|
|
61
|
-
|
|
53
|
+
return drillResult(walked, opts, limit);
|
|
54
|
+
}
|
|
55
|
+
function isDrillable(row) {
|
|
56
|
+
return (row.dag_level ?? 0) >= 2;
|
|
57
|
+
}
|
|
58
|
+
function drillResult({ summary, levels, sizes: counted }, opts, limit) {
|
|
59
|
+
const collected = levels.flat();
|
|
60
|
+
const sizes = counted ?? levels.map((level) => level.length);
|
|
61
|
+
const total = sizes.reduce((sum, n) => sum + n, 0);
|
|
62
62
|
const summaryOut = {
|
|
63
63
|
id: summary.id,
|
|
64
64
|
content: summary.content,
|
|
65
65
|
// v0.30 / E5: the STORED direct-child count; the legacy fallback counts
|
|
66
66
|
// level-0 children, never the BFS-depth-N total (independent-review MED #4).
|
|
67
|
-
descendantCount: summary.descendant_count ??
|
|
67
|
+
descendantCount: summary.descendant_count ?? (sizes[0] ?? 0),
|
|
68
68
|
earliestAt: summary.earliest_at ?? null,
|
|
69
69
|
latestAt: summary.latest_at ?? null,
|
|
70
70
|
};
|
|
@@ -75,54 +75,26 @@ function drillDownOn(db, ctx, summaryId, depth, opts, limit) {
|
|
|
75
75
|
dagLevel: c.dag_level ?? 0,
|
|
76
76
|
created: c.created,
|
|
77
77
|
}));
|
|
78
|
-
const
|
|
78
|
+
const fixed = opts.budget !== undefined ? opts.cost?.fixed(summaryOut, total) ?? 0 : 0;
|
|
79
|
+
const { children, truncated } = capChildren(all, fixed, opts, limit);
|
|
79
80
|
return {
|
|
80
81
|
summary: summaryOut,
|
|
81
82
|
children,
|
|
82
83
|
// v0.30 / E5: totalChildren = BFS-collected count (depth-aware). For
|
|
83
84
|
// depth=1 this equals the eligible direct-children count (backward
|
|
84
85
|
// compat). For depth>1 it is the cumulative count across levels.
|
|
85
|
-
totalChildren:
|
|
86
|
+
totalChildren: total,
|
|
86
87
|
truncated,
|
|
87
88
|
};
|
|
88
89
|
}
|
|
89
|
-
// BFS with a visited set: dag_parent_id is not unique, so a misconfigured tree could emit a child twice past depth 1.
|
|
90
|
-
// The level-0 count is kept apart so a legacy summary's descendantCount fallback counts direct children only.
|
|
91
|
-
function collectDescendants(db, tenantId, summaryId, depth, own, shown) {
|
|
92
|
-
const collected = [];
|
|
93
|
-
const visited = new Set([summaryId]);
|
|
94
|
-
let frontier = [summaryId];
|
|
95
|
-
let level0DirectCount = 0;
|
|
96
|
-
for (let level = 0; level < depth; level++) {
|
|
97
|
-
const nextFrontier = [];
|
|
98
|
-
const kidsByParent = selectChildrenByParent(db, frontier, tenantId);
|
|
99
|
-
for (const parentId of frontier) {
|
|
100
|
-
const kids = kidsByParent.get(parentId) ?? [];
|
|
101
|
-
const eligibleKids = kids.filter((c) => passesScopeFilterForRecall(c.scope ?? null, undefined, own) && shown(c));
|
|
102
|
-
for (const k of eligibleKids) {
|
|
103
|
-
if (visited.has(k.id))
|
|
104
|
-
continue;
|
|
105
|
-
visited.add(k.id);
|
|
106
|
-
collected.push(k);
|
|
107
|
-
nextFrontier.push(k.id);
|
|
108
|
-
if (level === 0)
|
|
109
|
-
level0DirectCount++;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
if (nextFrontier.length === 0)
|
|
113
|
-
break;
|
|
114
|
-
frontier = nextFrontier;
|
|
115
|
-
}
|
|
116
|
-
return { collected, level0DirectCount };
|
|
117
|
-
}
|
|
118
90
|
/** Global cumulative token budget first, then the `limit` cap. */
|
|
119
|
-
function capChildren(all,
|
|
91
|
+
function capChildren(all, fixed, opts, limit) {
|
|
120
92
|
let children = all;
|
|
121
93
|
let truncated = false;
|
|
122
94
|
if (opts.budget !== undefined) {
|
|
123
95
|
const out = [];
|
|
124
96
|
let used = 0;
|
|
125
|
-
const room = opts.budget -
|
|
97
|
+
const room = opts.budget - fixed;
|
|
126
98
|
for (const c of all) {
|
|
127
99
|
const t = opts.cost ? opts.cost.child(c) : estimateTokens(c.content);
|
|
128
100
|
if (out.length > 0 && used + t > room) {
|
package/dist/api/forget.d.ts
CHANGED
|
@@ -1,15 +1,6 @@
|
|
|
1
|
-
import type { RejectedValueRow } from '../rejection.js';
|
|
1
|
+
import type { RejectedValueRow } from '../store/rejection.js';
|
|
2
2
|
import type { Context, StoreReply } from './types.js';
|
|
3
|
-
/**
|
|
4
|
-
* Delete a memory by id. `deleteEntry` threads ctx.actor.subject into its internal
|
|
5
|
-
* audit hook, so exactly one 'forget' event lands with the supplied actor.
|
|
6
|
-
*
|
|
7
|
-
* Tenant scope: deleteEntry looks up the row by id alone, so without an
|
|
8
|
-
* explicit tenant guard a Bearer for tenant A could delete tenant B's row
|
|
9
|
-
* by guessing or leaking the id. Pre-check the row's tenant_id and deny
|
|
10
|
-
* cross-tenant access with a not-found error (no info leak about whether
|
|
11
|
-
* the id exists in another tenant).
|
|
12
|
-
*/
|
|
3
|
+
/** Delete a memory by id. Reach is checked inside the delete's write scope, and a row out of reach answers as not found, so a caller learns nothing about it. */
|
|
13
4
|
export interface ForgetResult {
|
|
14
5
|
ok: true;
|
|
15
6
|
id: string;
|
package/dist/api/forget.js
CHANGED
|
@@ -1,42 +1,15 @@
|
|
|
1
1
|
// Forget a memory, and reject or unreject a value so it cannot be stored again.
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { requireGroup } from '../store-port.js';
|
|
8
|
-
import { selectMemoryReach } from '../store/tenant-lookup.js';
|
|
9
|
-
import { canTouchScope, personalScopeOf } from '../recall-scope.js';
|
|
2
|
+
import { BadRequestError, NotFoundError } from '../core/api-errors.js';
|
|
3
|
+
import { rejectValue, unrejectValue, listRejectionsForTenant } from '../trust/reject-flow.js';
|
|
4
|
+
import { andThen, notPorted, onStore } from './on-store.js';
|
|
5
|
+
import { readEntry } from '../store/entry-reads.js';
|
|
6
|
+
import { canTouchScope, personalScopeOf } from '../store/recall-scope.js';
|
|
10
7
|
export function forget(ctx, id) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const entryWrites = requireGroup(store, 'entryWrites');
|
|
17
|
-
await entryWrites.forget({ tenantId: ctx.tenantId, actor: ctx.actor.subject, ownScope: personalScopeOf(ctx.actor), id });
|
|
18
|
-
return { ok: true, id };
|
|
19
|
-
}
|
|
20
|
-
function forgetOnHippoDb(ctx, id) {
|
|
21
|
-
const db = openHippoDb(ctx.hippoRoot);
|
|
22
|
-
try {
|
|
23
|
-
const reach = selectMemoryReach(db, id);
|
|
24
|
-
if (reach?.tenantId !== ctx.tenantId || !canTouchScope(ctx.actor, reach.scope)) {
|
|
25
|
-
throw new NotFoundError(`memory not found: ${id}`);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
finally {
|
|
29
|
-
closeHippoDb(db);
|
|
30
|
-
}
|
|
31
|
-
const removed = deleteEntry(ctx.hippoRoot, id, { actor: ctx.actor.subject });
|
|
32
|
-
if (!removed) {
|
|
33
|
-
throw new NotFoundError(`memory not found: ${id}`);
|
|
34
|
-
}
|
|
35
|
-
// Counted here, not in the CLI: both callers of this function (cmdForget and
|
|
36
|
-
// the HTTP route) are the two paths of one user command, so neither can miss
|
|
37
|
-
// it. api.remember cannot take the same move; see the server route.
|
|
38
|
-
updateStatsUnlessBusy(ctx.hippoRoot, { forgotten: 1 }, `removed ${id}`);
|
|
39
|
-
return { ok: true, id };
|
|
8
|
+
return onStore(ctx, (port) => {
|
|
9
|
+
const entryWrites = port.entryWrites ?? notPorted(port, 'entryWrites');
|
|
10
|
+
const removal = { tenantId: ctx.tenantId, actor: ctx.actor.subject, ownScope: personalScopeOf(ctx.actor), id };
|
|
11
|
+
return andThen(entryWrites.forget(removal), () => ({ ok: true, id }));
|
|
12
|
+
});
|
|
40
13
|
}
|
|
41
14
|
/**
|
|
42
15
|
* Reject a value: tombstone its normalized digest so a matching write is
|
|
@@ -57,15 +30,9 @@ export function reject(ctx, opts) {
|
|
|
57
30
|
// Tenant scope, same not-found-shaped denial as forget/promote above:
|
|
58
31
|
// rejectValue itself also tenant-checks the id, but pre-checking here
|
|
59
32
|
// keeps the error message consistent with the rest of this module.
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
if (reach?.tenantId !== ctx.tenantId || !canTouchScope(ctx.actor, reach.scope)) {
|
|
64
|
-
throw new NotFoundError(`memory not found: ${opts.memoryId}`);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
finally {
|
|
68
|
-
closeHippoDb(db);
|
|
33
|
+
const entry = readEntry(ctx.hippoRoot, opts.memoryId);
|
|
34
|
+
if (entry?.tenantId !== ctx.tenantId || !canTouchScope(ctx.actor, entry.scope)) {
|
|
35
|
+
throw new NotFoundError(`memory not found: ${opts.memoryId}`);
|
|
69
36
|
}
|
|
70
37
|
}
|
|
71
38
|
const result = rejectValue({
|
package/dist/api/goals.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type CompleteGoalOpts, type Goal, type PushGoalOpts } from '../goals.js';
|
|
1
|
+
import { type CompleteGoalOpts, type Goal, type PushGoalOpts } from '../store/goals.js';
|
|
2
2
|
import type { Context } from './types.js';
|
|
3
3
|
/** What a new goal carries; its tenant is always the caller's. */
|
|
4
4
|
export type GoalPushOpts = Omit<PushGoalOpts, 'tenantId'>;
|
package/dist/api/goals.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// The per-session goal stack that recall boosts: push, list, complete, suspend and resume.
|
|
2
|
-
import { ForbiddenError } from '../api-errors.js';
|
|
3
|
-
import { completeGoal, getActiveGoals, getSessionGoals, pushGoal, resumeGoal, suspendGoal, } from '../goals.js';
|
|
2
|
+
import { ForbiddenError } from '../core/api-errors.js';
|
|
3
|
+
import { completeGoal, getActiveGoals, getSessionGoals, pushGoal, resumeGoal, suspendGoal, } from '../store/goals.js';
|
|
4
4
|
/** Push a goal onto `sessionId`'s stack in the caller's tenant. */
|
|
5
5
|
export function goalPush(ctx, opts) {
|
|
6
6
|
return pushGoal(ctx.hippoRoot, { ...opts, tenantId: ctx.tenantId });
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export { ApiError, BadRequestError, ConflictError, ForbiddenError, NotFoundError } from '../core/api-errors.js';
|
|
2
|
+
export { isPrivateScope, passesScopeFilterForRecall } from '../store/recall-scope.js';
|
|
3
|
+
export { passesCliRecallScopeFilter, ScopeForbiddenError } from '../store/recall-scope.js';
|
|
4
|
+
export type { TokenSummary, TokenSurface, TokenSurfaceSummary } from '../store/token-ledger.js';
|
|
5
|
+
export type { FailureSummary } from '../store/failure-log.js';
|
|
6
|
+
export { classifyOriginProject } from '../core/project-identity.js';
|
|
7
|
+
export * from './types.js';
|
|
8
|
+
export * from './remember.js';
|
|
9
|
+
export * from './recall-types.js';
|
|
10
|
+
export * from './recall.js';
|
|
11
|
+
export * from './assemble.js';
|
|
12
|
+
export * from './drill-down.js';
|
|
13
|
+
export * from './outcome.js';
|
|
14
|
+
export * from './forget.js';
|
|
15
|
+
export * from './promote.js';
|
|
16
|
+
export * from './auth.js';
|
|
17
|
+
export * from './audit.js';
|
|
18
|
+
export * from './context-types.js';
|
|
19
|
+
export * from './context.js';
|
|
20
|
+
export * from './tokens.js';
|
|
21
|
+
export * from './dormant.js';
|
|
22
|
+
export * from './quarantine.js';
|
|
23
|
+
export * from './sleep.js';
|
|
24
|
+
export * from './goals.js';
|
|
25
|
+
export * from './learn.js';
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// Domain API layer: Context-taking functions that the CLI, the HTTP server and MCP all call, so the
|
|
2
|
+
// business logic lives in one place. The code lives in src/api/, one module per domain; this barrel
|
|
3
|
+
// keeps every import path that callers already use.
|
|
4
|
+
export { ApiError, BadRequestError, ConflictError, ForbiddenError, NotFoundError } from '../core/api-errors.js';
|
|
5
|
+
// The recall-side scope predicates live in recall-scope.ts (leaf) so shared.ts can use them without an import cycle.
|
|
6
|
+
export { isPrivateScope, passesScopeFilterForRecall } from '../store/recall-scope.js';
|
|
7
|
+
export { passesCliRecallScopeFilter, ScopeForbiddenError } from '../store/recall-scope.js';
|
|
8
|
+
// classifyOriginProject lives in project-identity.ts (leaf) for the same reason.
|
|
9
|
+
export { classifyOriginProject } from '../core/project-identity.js';
|
|
10
|
+
export * from './types.js';
|
|
11
|
+
export * from './remember.js';
|
|
12
|
+
export * from './recall-types.js';
|
|
13
|
+
export * from './recall.js';
|
|
14
|
+
export * from './assemble.js';
|
|
15
|
+
export * from './drill-down.js';
|
|
16
|
+
export * from './outcome.js';
|
|
17
|
+
export * from './forget.js';
|
|
18
|
+
export * from './promote.js';
|
|
19
|
+
export * from './auth.js';
|
|
20
|
+
export * from './audit.js';
|
|
21
|
+
export * from './context-types.js';
|
|
22
|
+
export * from './context.js';
|
|
23
|
+
export * from './tokens.js';
|
|
24
|
+
export * from './dormant.js';
|
|
25
|
+
export * from './quarantine.js';
|
|
26
|
+
export * from './sleep.js';
|
|
27
|
+
export * from './goals.js';
|
|
28
|
+
export * from './learn.js';
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/** Prompt-injection detection for untrusted memory content. Same shape as secret-detect.ts; leaf module, no store/api/shared imports. */
|
|
2
|
+
const INSTRUCTION_PATTERNS = [
|
|
3
|
+
{ name: 'override-instructions', re: /\b(?:ignore|disregard|forget)\b[^.\n]{0,40}\b(?:previous|prior|above)\b[^.\n]{0,40}\binstructions?\b/i },
|
|
4
|
+
{ name: 'role-reassignment', re: /\b(?:you are now|act as|pretend to be)\b[^.\n]{0,40}\b(?:an?\s+)?(?:ai|assistant|agent|system)\b/i },
|
|
5
|
+
{ name: 'chat-role-markup', re: /<\|im_start\|>|<\|system\|>|\[INST\]|<\/?system>|###\s*system\s*:/i },
|
|
6
|
+
{ name: 'system-prompt-reference', re: /\b(?:(?:override|ignore|bypass|replace|reveal)\b[^.\n]{0,40}\b(?:system prompt|developer message)|(?:system prompt|developer message)\b[^.\n]{0,40}\b(?:override|ignore|bypass|replace|reveal))\b/i },
|
|
7
|
+
// "always"/"never" alone (ordinary PR prose) doesn't flag without an agent-facing target nearby too.
|
|
8
|
+
{ name: 'standing-order', re: /\b(?:from now on|whenever you|always|never)\b[^.\n]{0,50}\b(?:you must|(?:the ai|the assistant|the agent|claude|copilot)\s+(?:must|should|will)\b)/i },
|
|
9
|
+
{ name: 'concealment', re: /\b(?:do not|never|don't)\b[^.\n]{0,40}\b(?:tell|mention|reveal)\b[^.\n]{0,40}\bthe user\b/i },
|
|
10
|
+
{ name: 'remote-script-exec', re: /\b(?:curl|wget)\b[^\n|]{0,80}\|\s*(?:sudo\s+)?(?:sh|bash|zsh)\b|\biex\s*\(\s*(?:iwr|invoke-webrequest|new-object\s+net\.webclient)/i },
|
|
11
|
+
{ name: 'exfiltration', re: /\b(?:send|post|upload|exfiltrate)\b[^.\n]{0,40}\b(?:secrets?|tokens?|api[- ]?keys?|credentials?|env(?:ironment)? variables?)\b/i },
|
|
12
|
+
{ name: 'unicode-tag-chars', re: /[\u{E0000}-\u{E007F}]/u },
|
|
13
|
+
];
|
|
14
|
+
// A stray zero-width char has legitimate uses (ZWJ); only a run of 3+ adjacent ones reads as smuggling.
|
|
15
|
+
const ZERO_WIDTH_RUN_RE = /[\u200B-\u200F\u2060-\u2064]{3,}/;
|
|
16
|
+
// Reorders what is drawn without changing a byte a pattern reads, and ordinary right-to-left prose never needs one.
|
|
17
|
+
const BIDI_CONTROL_RE = /[\u202A-\u202E\u2066-\u2069]/;
|
|
18
|
+
// A renderer draws a reference as the character it names: decimal, hex, or one of the five names XML defines.
|
|
19
|
+
const CHARACTER_REFERENCE_RE = /&(?:#(\d{1,7})|#[xX]([0-9a-fA-F]{1,6})|(amp|lt|gt|quot|apos));/g;
|
|
20
|
+
const NAMED_REFERENCES = new Map([['amp', '&'], ['lt', '<'], ['gt', '>'], ['quot', '"'], ['apos', "'"]]);
|
|
21
|
+
// Drawn with no width, so one inside a word splits it for a pattern and not for a reader: soft hyphen, joiners, zero-width and bidi format characters.
|
|
22
|
+
const INVISIBLE_RE = /[\u034F\u00AD\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u2069\uFEFF]/g;
|
|
23
|
+
// Cyrillic, then Greek, letters drawn like a c e i j o p s x y; closed at those, so Russian or Greek prose folds into no phrase a pattern names.
|
|
24
|
+
const LOOKALIKES = new Map([
|
|
25
|
+
['\u0430', 'a'], ['\u0441', 'c'], ['\u0435', 'e'], ['\u0456', 'i'], ['\u0458', 'j'], ['\u043E', 'o'], ['\u0440', 'p'], ['\u0455', 's'], ['\u0445', 'x'], ['\u0443', 'y'],
|
|
26
|
+
['\u0410', 'A'], ['\u0421', 'C'], ['\u0415', 'E'], ['\u0406', 'I'], ['\u0408', 'J'], ['\u041E', 'O'], ['\u0420', 'P'], ['\u0405', 'S'], ['\u0425', 'X'], ['\u0423', 'Y'],
|
|
27
|
+
['\u03B1', 'a'], ['\u03B5', 'e'], ['\u03B9', 'i'], ['\u03F3', 'j'], ['\u03BF', 'o'], ['\u03C1', 'p'], ['\u03C7', 'x'], ['\u03B3', 'y'],
|
|
28
|
+
['\u0391', 'A'], ['\u0395', 'E'], ['\u0399', 'I'], ['\u037F', 'J'], ['\u039F', 'O'], ['\u03A1', 'P'], ['\u03A7', 'X'], ['\u03A5', 'Y'],
|
|
29
|
+
]);
|
|
30
|
+
const GREEK_OR_CYRILLIC_RE = /[\u0370-\u03FF\u0400-\u04FF]/g;
|
|
31
|
+
// A line break stays: it is the sentence bound the patterns rely on where a list or a chat message ends a line with no full stop.
|
|
32
|
+
const SPACE_RUN_RE = /[^\S\n]+/g;
|
|
33
|
+
function referencedCharacter(reference, decimal, hex, name) {
|
|
34
|
+
if (name !== undefined)
|
|
35
|
+
return NAMED_REFERENCES.get(name) ?? reference;
|
|
36
|
+
const code = decimal !== undefined ? Number.parseInt(decimal, 10) : Number.parseInt(hex ?? '', 16);
|
|
37
|
+
// NUL, half a surrogate pair and a number past Unicode name no character, so the reference is read as written.
|
|
38
|
+
const drawn = code > 0 && code <= 0x10ffff && (code < 0xd800 || code > 0xdfff);
|
|
39
|
+
return drawn ? String.fromCodePoint(code) : reference;
|
|
40
|
+
}
|
|
41
|
+
/** `content` as a reader or a model takes it in. For matching only: what is stored is never this. */
|
|
42
|
+
function screeningForm(content) {
|
|
43
|
+
return content
|
|
44
|
+
.replace(CHARACTER_REFERENCE_RE, referencedCharacter)
|
|
45
|
+
// Full-width, mathematical and enclosed letters become the plain ones, and every space character a U+0020.
|
|
46
|
+
.normalize('NFKC')
|
|
47
|
+
.replace(INVISIBLE_RE, '')
|
|
48
|
+
.replace(GREEK_OR_CYRILLIC_RE, (letter) => LOOKALIKES.get(letter) ?? letter)
|
|
49
|
+
.replace(SPACE_RUN_RE, ' ');
|
|
50
|
+
}
|
|
51
|
+
function matchedPattern(text) {
|
|
52
|
+
for (const { name, re } of INSTRUCTION_PATTERNS) {
|
|
53
|
+
if (re.test(text))
|
|
54
|
+
return `pattern:${name}`;
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
export function detectInstruction(content) {
|
|
59
|
+
// The text as written goes first: a phrase in plain sight is named before any smuggling rule, and the screening form only adds flags.
|
|
60
|
+
const plain = matchedPattern(content);
|
|
61
|
+
if (plain !== null)
|
|
62
|
+
return { flagged: true, reason: plain };
|
|
63
|
+
if (ZERO_WIDTH_RUN_RE.test(content)) {
|
|
64
|
+
return { flagged: true, reason: 'pattern:zero-width-smuggling' };
|
|
65
|
+
}
|
|
66
|
+
const screened = screeningForm(content);
|
|
67
|
+
const disguised = screened === content ? null : matchedPattern(screened);
|
|
68
|
+
if (disguised !== null)
|
|
69
|
+
return { flagged: true, reason: disguised };
|
|
70
|
+
if (BIDI_CONTROL_RE.test(content))
|
|
71
|
+
return { flagged: true, reason: 'pattern:bidi-control' };
|
|
72
|
+
return { flagged: false, reason: null };
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=instruction-detect.js.map
|