hippo-memory 1.68.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 +6 -3
- 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.d.ts +3 -1
- package/dist/agent-memories/copilot.js +5 -4
- 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 +14 -4
- package/dist/api/context-select.js +50 -60
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +113 -85
- 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 +4 -13
- package/dist/api/forget.js +13 -35
- 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 +9 -46
- package/dist/api/outcome.js +15 -57
- 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 +7 -18
- package/dist/api/promote.js +30 -152
- 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 +12 -13
- package/dist/api/remember.js +38 -27
- 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 +59 -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.d.ts +3 -0
- package/dist/capture/copilot-transcript.js +9 -2
- 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.d.ts +13 -0
- package/dist/capture/session-worker.js +196 -0
- 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 +265 -191
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +111 -45
- 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 +8 -3
- 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 -82
- 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 -48
- 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 -90
- 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} +16 -3
- package/dist/core/capture-contract.js +149 -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} +19 -5
- package/dist/{memory.js → core/memory.js} +117 -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.d.ts → core/prompt-recall.d.ts} +5 -0
- package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -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 +48 -13
- package/dist/hooks/copilot.js +124 -39
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +3 -1
- package/dist/hooks/json-hooks.js +40 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +7 -5
- package/dist/hooks/shared.js +19 -8
- 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.d.ts +2 -2
- package/dist/mcp/memory-tools.js +12 -31
- 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 +65 -63
- 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 +21 -20
- 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} +3 -2
- 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 +41 -50
- package/dist/server.js +26 -560
- 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 +12 -6
- package/dist/store/audit-event.js +6 -5
- 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 +6 -3
- package/dist/store/handoffs.js +70 -31
- 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 +8 -4
- package/dist/store/open.js +34 -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} +5 -3
- package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
- package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
- 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 +43 -36
- package/dist/store/sessions.d.ts +18 -2
- package/dist/store/sessions.js +83 -46
- 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/sqlite/entry-writes-group.js +170 -0
- 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} +17 -2
- package/dist/{env.js → util/env.js} +22 -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/capture-contract.js +0 -49
- 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-port.d.ts +0 -191
- package/dist/store-port.js +0 -166
- /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/{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/ledger-db.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { openHippoDb } from './db.js';
|
|
2
|
-
export interface LedgerRootOpts {
|
|
3
|
-
/** The store serves many people, so the global store of the user running it belongs to none of them. */
|
|
4
|
-
readonly sharedStore?: boolean;
|
|
5
|
-
}
|
|
6
|
-
/** `hippoRoot` when it holds a store, else the global store (the prompt hook fires where no local one exists), else null. */
|
|
7
|
-
export declare function ledgerRoot(hippoRoot: string, opts?: LedgerRootOpts): string | null;
|
|
8
|
-
/** Runs `fn` on ledgerRoot's store. Best-effort: undefined on any failure, because a ledger failure must not break context or recall. */
|
|
9
|
-
export declare function withLedgerDb<T>(hippoRoot: string, fn: (db: ReturnType<typeof openHippoDb>) => T, opts?: LedgerRootOpts): T | undefined;
|
|
10
|
-
//# sourceMappingURL=ledger-db.d.ts.map
|
package/dist/ledger-db.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
// The store the token ledger writes to for a caller's root; context, recall and the session hooks share it.
|
|
2
|
-
import { closeHippoDb, isSqliteBusy, noteStoreBusy, openHippoDb } from './db.js';
|
|
3
|
-
import { getGlobalRoot } from './shared.js';
|
|
4
|
-
import { isInitialized } from './store/open.js';
|
|
5
|
-
/** `hippoRoot` when it holds a store, else the global store (the prompt hook fires where no local one exists), else null. */
|
|
6
|
-
export function ledgerRoot(hippoRoot, opts) {
|
|
7
|
-
if (isInitialized(hippoRoot))
|
|
8
|
-
return hippoRoot;
|
|
9
|
-
if (opts?.sharedStore)
|
|
10
|
-
return null;
|
|
11
|
-
const globalRoot = getGlobalRoot();
|
|
12
|
-
return isInitialized(globalRoot) ? globalRoot : null;
|
|
13
|
-
}
|
|
14
|
-
/** Runs `fn` on ledgerRoot's store. Best-effort: undefined on any failure, because a ledger failure must not break context or recall. */
|
|
15
|
-
export function withLedgerDb(hippoRoot, fn, opts) {
|
|
16
|
-
let root = null;
|
|
17
|
-
try {
|
|
18
|
-
root = ledgerRoot(hippoRoot, opts);
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
// An unreadable store root means no ledger write; the ledger must never break context or recall.
|
|
22
|
-
return undefined;
|
|
23
|
-
}
|
|
24
|
-
if (root === null)
|
|
25
|
-
return undefined;
|
|
26
|
-
let db;
|
|
27
|
-
try {
|
|
28
|
-
db = openHippoDb(root);
|
|
29
|
-
return fn(db);
|
|
30
|
-
}
|
|
31
|
-
catch (error) {
|
|
32
|
-
// Best effort, but a busy store is the one failure an operator can act on, so it warns once.
|
|
33
|
-
if (isSqliteBusy(error))
|
|
34
|
-
noteStoreBusy('token ledger row skipped');
|
|
35
|
-
return undefined;
|
|
36
|
-
}
|
|
37
|
-
finally {
|
|
38
|
-
if (db)
|
|
39
|
-
closeHippoDb(db);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=ledger-db.js.map
|
package/dist/policies.js
DELETED
|
@@ -1,434 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Policy first-class object.
|
|
3
|
-
*
|
|
4
|
-
* The "bi-temporal-first" object type: a named rule/statement that is in force
|
|
5
|
-
* over an EFFECTIVE-TIME range and evolves via supersession. Two time axes:
|
|
6
|
-
*
|
|
7
|
-
* - Valid time (effective time): when the policy is in force in the real world,
|
|
8
|
-
* as first-class columns `valid_from` (required; defaults to creation time)
|
|
9
|
-
* and `valid_to` (nullable = open-ended). This is the queryable axis: see
|
|
10
|
-
* `loadPoliciesAsOf` (the active policies in force at a given valid-time).
|
|
11
|
-
* - Transaction time (system time): when the row was recorded / retired, via
|
|
12
|
-
* `created_at` + the supersede chain's `superseded_at`. Present, but
|
|
13
|
-
* time-travel ("what did we BELIEVE was in force at past system time T") is
|
|
14
|
-
* deferred to a future version.
|
|
15
|
-
*
|
|
16
|
-
* The delta lifecycle reuses the process/decision supersede machinery verbatim
|
|
17
|
-
* (superseded_by self-FK + CAS + INSERT-preflight + server-derived version +
|
|
18
|
-
* change_summary + supersede tenant-match trigger). It DROPS process's `steps`
|
|
19
|
-
* (a policy has `policy_text`) and ADDS `valid_from`/`valid_to`.
|
|
20
|
-
*
|
|
21
|
-
* The `policies` table is the source of truth (survives memory decay); the
|
|
22
|
-
* memory mirror is for recall only. memory_id is NULLABLE with ON DELETE SET
|
|
23
|
-
* NULL so forget/consolidate/archive gracefully orphans the policy row.
|
|
24
|
-
*
|
|
25
|
-
* Lifecycle: active -> superseded (a newer version replaces it) or active ->
|
|
26
|
-
* closed (retired with no successor). Superseding leaves the predecessor's
|
|
27
|
-
* valid-time range intact (it WAS effective then); only the status flips.
|
|
28
|
-
*
|
|
29
|
-
* Date handling: every date input (savePolicy's valid_from/valid_to,
|
|
30
|
-
* loadPoliciesAsOf's asOfDate) is normalized to canonical ISO-8601 datetime
|
|
31
|
-
* (`toISOString`) at the store boundary BEFORE any persist or compare, so the
|
|
32
|
-
* fixed-width values sort lexically and the half-open [valid_from, valid_to)
|
|
33
|
-
* comparison is correct (a date-only asOf vs a datetime valid_from would
|
|
34
|
-
* otherwise make a same-day policy invisible).
|
|
35
|
-
*
|
|
36
|
-
* Dual-write atomicity: `savePolicy` writes the memory + policies row (and, on
|
|
37
|
-
* supersede, the predecessor's UPDATE) inside writeEntry's SAVEPOINT.
|
|
38
|
-
*/
|
|
39
|
-
import { BadRequestError, ConflictError, NotFoundError } from './api-errors.js';
|
|
40
|
-
import { openHippoDb, closeHippoDb } from './db.js';
|
|
41
|
-
import { writeEntry } from './store/entry-writes.js';
|
|
42
|
-
import { assertTenantId } from './tenant.js';
|
|
43
|
-
import { markGraphDirty, removeGraphEntitiesForObject } from './graph/write.js';
|
|
44
|
-
import { createMemory, Layer } from './memory.js';
|
|
45
|
-
import { appendAuditEvent } from './audit.js';
|
|
46
|
-
import { objectHalfLifeDays } from './half-life-migration.js';
|
|
47
|
-
import { keysetAfter } from './keyset.js';
|
|
48
|
-
export const VALID_POLICY_STATES = new Set([
|
|
49
|
-
'active',
|
|
50
|
-
'superseded',
|
|
51
|
-
'closed',
|
|
52
|
-
]);
|
|
53
|
-
// ---------------------------------------------------------------------------
|
|
54
|
-
// Date normalization + validation (the bi-temporal correctness core)
|
|
55
|
-
// ---------------------------------------------------------------------------
|
|
56
|
-
/**
|
|
57
|
-
* Parse + canonicalize a date input to ISO-8601 datetime (`toISOString`). Throws
|
|
58
|
-
* on an unparseable value. Whatever `new Date()` accepts is re-emitted in the
|
|
59
|
-
* single fixed-width canonical form, so date-only and datetime inputs collapse to
|
|
60
|
-
* comparable values and lexical ordering is sound. (Overflow inputs like
|
|
61
|
-
* '2026-02-30' roll forward per JS Date semantics rather than throwing; the
|
|
62
|
-
* stored value is still canonical.)
|
|
63
|
-
*/
|
|
64
|
-
export function normalizePolicyDate(input, label = 'date') {
|
|
65
|
-
const d = new Date(input);
|
|
66
|
-
if (Number.isNaN(d.getTime())) {
|
|
67
|
-
throw new BadRequestError(`policy: invalid ${label} "${input}" (expected an ISO-8601 date or datetime)`);
|
|
68
|
-
}
|
|
69
|
-
return d.toISOString();
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Normalize valid_from (defaulting to `nowIso` when undefined) + valid_to (null
|
|
73
|
-
* when undefined), then enforce valid_to > valid_from. Returns the canonical pair.
|
|
74
|
-
*/
|
|
75
|
-
export function validatePolicyDates(validFromRaw, validToRaw, nowIso) {
|
|
76
|
-
const validFrom = validFromRaw !== undefined ? normalizePolicyDate(validFromRaw, 'valid_from') : nowIso;
|
|
77
|
-
const validTo = validToRaw !== undefined && validToRaw !== null
|
|
78
|
-
? normalizePolicyDate(validToRaw, 'valid_to')
|
|
79
|
-
: null;
|
|
80
|
-
if (validTo !== null && validTo <= validFrom) {
|
|
81
|
-
throw new BadRequestError(`policy: valid_to (${validTo}) must be strictly after valid_from (${validFrom})`);
|
|
82
|
-
}
|
|
83
|
-
return { validFrom, validTo };
|
|
84
|
-
}
|
|
85
|
-
function rowToPolicy(row) {
|
|
86
|
-
return {
|
|
87
|
-
id: row.id,
|
|
88
|
-
memoryId: row.memory_id,
|
|
89
|
-
tenantId: row.tenant_id,
|
|
90
|
-
policyName: row.policy_name,
|
|
91
|
-
policyText: row.policy_text,
|
|
92
|
-
validFrom: row.valid_from,
|
|
93
|
-
validTo: row.valid_to,
|
|
94
|
-
version: row.version,
|
|
95
|
-
// SAFETY: row.status is DB-constrained to PolicyStatus values; every INSERT/
|
|
96
|
-
// UPDATE in this file writes only the literal 'active' | 'superseded' | 'closed'.
|
|
97
|
-
status: row.status,
|
|
98
|
-
supersededBy: row.superseded_by,
|
|
99
|
-
supersededAt: row.superseded_at,
|
|
100
|
-
changeSummary: row.change_summary,
|
|
101
|
-
closedAt: row.closed_at,
|
|
102
|
-
createdAt: row.created_at,
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
const POLICY_COLS = `
|
|
106
|
-
id, memory_id, tenant_id, policy_name, policy_text, valid_from, valid_to,
|
|
107
|
-
version, status, superseded_by, superseded_at, change_summary, closed_at, created_at
|
|
108
|
-
`;
|
|
109
|
-
/** Recall-surface content for the memory mirror: name + rule + effective range. */
|
|
110
|
-
function buildPolicyContent(policyName, policyText, validFrom, validTo) {
|
|
111
|
-
const range = validTo ? `${validFrom} to ${validTo}` : `${validFrom} onward`;
|
|
112
|
-
return `${policyName}\n\n${policyText}\n\nEffective: ${range}`;
|
|
113
|
-
}
|
|
114
|
-
// Preflight the supersede target BEFORE inserting the new row (so the new
|
|
115
|
-
// autoincrement id can never be its own supersede target); read the
|
|
116
|
-
// predecessor version in the same SELECT for server-derived versioning.
|
|
117
|
-
// Mirrors saveProcess / saveDecision.
|
|
118
|
-
function preflightPolicySupersede(db, tenantId, supersedesId) {
|
|
119
|
-
// SAFETY: SELECT projects exactly status, version; .get() returns that
|
|
120
|
-
// shape for the matching row, or undefined when no policy/tenant pair matches.
|
|
121
|
-
const pred = db.prepare(`SELECT status, version FROM policies WHERE id = ? AND tenant_id = ?`).get(supersedesId, tenantId);
|
|
122
|
-
if (!pred) {
|
|
123
|
-
throw new NotFoundError(`savePolicy: policy ${supersedesId} to supersede not found for tenant ${tenantId}`);
|
|
124
|
-
}
|
|
125
|
-
if (pred.status !== 'active') {
|
|
126
|
-
throw new ConflictError(`savePolicy: policy ${supersedesId} is not active (status='${pred.status}'); only active policies can be superseded.`);
|
|
127
|
-
}
|
|
128
|
-
return pred.version + 1;
|
|
129
|
-
}
|
|
130
|
-
function insertPolicyRow(db, memoryId, w, version) {
|
|
131
|
-
const result = db.prepare(`
|
|
132
|
-
INSERT INTO policies(
|
|
133
|
-
memory_id, tenant_id, policy_name, policy_text, valid_from, valid_to,
|
|
134
|
-
version, status, superseded_by, superseded_at, change_summary, closed_at, created_at
|
|
135
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, 'active', NULL, NULL, ?, NULL, ?)
|
|
136
|
-
`).run(memoryId, w.tenantId, w.policyName, w.policyText, w.validFrom, w.validTo, version, w.changeSummary, w.now);
|
|
137
|
-
return Number(result.lastInsertRowid ?? 0);
|
|
138
|
-
}
|
|
139
|
-
function supersedePolicyRow(db, w, supersedesId, policyId, version) {
|
|
140
|
-
const sup = db.prepare(`
|
|
141
|
-
UPDATE policies
|
|
142
|
-
SET status = 'superseded', superseded_by = ?, superseded_at = ?
|
|
143
|
-
WHERE id = ? AND tenant_id = ? AND status = 'active' AND id != ?
|
|
144
|
-
`).run(policyId, w.now, supersedesId, w.tenantId, policyId);
|
|
145
|
-
if (sup.changes === 0) {
|
|
146
|
-
throw new ConflictError(`savePolicy: policy ${supersedesId} could not be superseded (no longer active or self-reference).`);
|
|
147
|
-
}
|
|
148
|
-
appendAuditEvent(db, {
|
|
149
|
-
tenantId: w.tenantId,
|
|
150
|
-
actor: w.actor,
|
|
151
|
-
op: 'policy_supersede',
|
|
152
|
-
targetId: String(supersedesId),
|
|
153
|
-
metadata: {
|
|
154
|
-
policy_id: supersedesId,
|
|
155
|
-
superseded_by: policyId,
|
|
156
|
-
new_version: version,
|
|
157
|
-
},
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
/** The afterWrite body: preflight, INSERT, supersede, reload, create audit, all in one SAVEPOINT. */
|
|
161
|
-
function writePolicyRow(db, memoryId, w) {
|
|
162
|
-
const version = w.supersedesId !== undefined ? preflightPolicySupersede(db, w.tenantId, w.supersedesId) : 1;
|
|
163
|
-
const policyId = insertPolicyRow(db, memoryId, w, version);
|
|
164
|
-
if (w.supersedesId !== undefined)
|
|
165
|
-
supersedePolicyRow(db, w, w.supersedesId, policyId, version);
|
|
166
|
-
// SAFETY: SELECT ${POLICY_COLS} projects exactly the PolicyRow columns;
|
|
167
|
-
// .get() returns that row, or undefined only if the just-inserted id can't
|
|
168
|
-
// be found.
|
|
169
|
-
const row = db.prepare(`SELECT ${POLICY_COLS} FROM policies WHERE id = ?`)
|
|
170
|
-
.get(policyId);
|
|
171
|
-
if (!row)
|
|
172
|
-
throw new Error('savePolicy: failed to reload saved policy row');
|
|
173
|
-
// GDPR-light metadata: ids + flags only, no policy text.
|
|
174
|
-
appendAuditEvent(db, {
|
|
175
|
-
tenantId: w.tenantId,
|
|
176
|
-
actor: w.actor,
|
|
177
|
-
op: 'policy_create',
|
|
178
|
-
targetId: String(policyId),
|
|
179
|
-
metadata: {
|
|
180
|
-
policy_id: policyId,
|
|
181
|
-
version,
|
|
182
|
-
open_ended: w.validTo === null,
|
|
183
|
-
},
|
|
184
|
-
});
|
|
185
|
-
return row;
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Create a policy (or a new version that supersedes an existing one). Writes the
|
|
189
|
-
* memory mirror + the policies row atomically inside writeEntry's SAVEPOINT.
|
|
190
|
-
* valid_from defaults to now; valid_to must be > valid_from (validatePolicyDates).
|
|
191
|
-
* When supersedesPolicyId is given, the referenced ACTIVE row is preflighted
|
|
192
|
-
* (status + version) BEFORE the INSERT, then CAS-UPDATEd -> superseded in the same
|
|
193
|
-
* SAVEPOINT; the new version = predecessor.version + 1 (server-derived).
|
|
194
|
-
*/
|
|
195
|
-
export function savePolicy(hippoRoot, tenantId, opts, actor = 'cli') {
|
|
196
|
-
assertTenantId('savePolicy', tenantId);
|
|
197
|
-
if (!opts.policyName || opts.policyName.trim().length === 0) {
|
|
198
|
-
throw new BadRequestError('savePolicy: policyName is required');
|
|
199
|
-
}
|
|
200
|
-
if (!opts.policyText || opts.policyText.trim().length === 0) {
|
|
201
|
-
throw new BadRequestError('savePolicy: policyText is required');
|
|
202
|
-
}
|
|
203
|
-
const now = new Date().toISOString();
|
|
204
|
-
// valid_from defaults to the precise creation instant (the honest effective
|
|
205
|
-
// time). The same-day date-only as-of workflow is handled on the READ side
|
|
206
|
-
// (a date-only asOf resolves to end-of-day in loadPoliciesAsOf), NOT by
|
|
207
|
-
// backdating the stored valid_from - backdating to midnight would make an
|
|
208
|
-
// earlier-same-day as-of wrongly report the policy already in force and would
|
|
209
|
-
// hide a superseded predecessor for that earlier time. An explicit --from is honored as-is.
|
|
210
|
-
const { validFrom, validTo } = validatePolicyDates(opts.validFrom, opts.validTo, now);
|
|
211
|
-
const isSupersede = opts.supersedesPolicyId !== undefined;
|
|
212
|
-
const changeSummary = isSupersede ? (opts.changeSummary ?? null) : null;
|
|
213
|
-
const content = buildPolicyContent(opts.policyName, opts.policyText, validFrom, validTo);
|
|
214
|
-
const tags = ['policy', ...(opts.extraTags ?? [])];
|
|
215
|
-
const mem = createMemory(content, {
|
|
216
|
-
tags,
|
|
217
|
-
layer: Layer.Semantic,
|
|
218
|
-
confidence: 'verified',
|
|
219
|
-
source: 'policy',
|
|
220
|
-
baseHalfLifeDays: objectHalfLifeDays(hippoRoot),
|
|
221
|
-
tenantId,
|
|
222
|
-
});
|
|
223
|
-
const w = {
|
|
224
|
-
tenantId,
|
|
225
|
-
actor,
|
|
226
|
-
policyName: opts.policyName,
|
|
227
|
-
policyText: opts.policyText,
|
|
228
|
-
validFrom,
|
|
229
|
-
validTo,
|
|
230
|
-
changeSummary,
|
|
231
|
-
supersedesId: opts.supersedesPolicyId,
|
|
232
|
-
now,
|
|
233
|
-
};
|
|
234
|
-
let savedRow;
|
|
235
|
-
writeEntry(hippoRoot, mem, {
|
|
236
|
-
actor,
|
|
237
|
-
afterWrite: (db, memoryId) => {
|
|
238
|
-
savedRow = writePolicyRow(db, memoryId, w);
|
|
239
|
-
},
|
|
240
|
-
afterCommit: () => markGraphDirty(hippoRoot, tenantId, mem.id),
|
|
241
|
-
});
|
|
242
|
-
if (!savedRow) {
|
|
243
|
-
throw new Error('savePolicy: afterWrite did not populate the row');
|
|
244
|
-
}
|
|
245
|
-
return rowToPolicy(savedRow);
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* Close (retire) an active policy with no successor. CAS guard WHERE
|
|
249
|
-
* status='active'; 0 changes distinguishes not-found from not-active. A
|
|
250
|
-
* superseded row is terminal and cannot be closed.
|
|
251
|
-
*/
|
|
252
|
-
export function closePolicy(hippoRoot, tenantId, id, actor = 'cli') {
|
|
253
|
-
assertTenantId('closePolicy', tenantId);
|
|
254
|
-
const now = new Date().toISOString();
|
|
255
|
-
const db = openHippoDb(hippoRoot);
|
|
256
|
-
try {
|
|
257
|
-
db.exec('BEGIN IMMEDIATE');
|
|
258
|
-
try {
|
|
259
|
-
const updateResult = db.prepare(`
|
|
260
|
-
UPDATE policies
|
|
261
|
-
SET status = 'closed', closed_at = ?
|
|
262
|
-
WHERE id = ? AND tenant_id = ? AND status = 'active'
|
|
263
|
-
`).run(now, id, tenantId);
|
|
264
|
-
if (updateResult.changes === 0) {
|
|
265
|
-
// SAFETY: SELECT projects exactly the status column; .get() returns that
|
|
266
|
-
// shape, or undefined when the id/tenant pair doesn't exist.
|
|
267
|
-
const existing = db.prepare(`SELECT status FROM policies WHERE id = ? AND tenant_id = ?`).get(id, tenantId);
|
|
268
|
-
if (!existing) {
|
|
269
|
-
throw new NotFoundError(`closePolicy: policy ${id} not found for tenant ${tenantId}`);
|
|
270
|
-
}
|
|
271
|
-
throw new ConflictError(`closePolicy: policy ${id} is not active (status='${existing.status}'); only active policies can be closed.`);
|
|
272
|
-
}
|
|
273
|
-
// SAFETY: SELECT ${POLICY_COLS} projects exactly the PolicyRow columns;
|
|
274
|
-
// .get() returns that row for the just-updated id, or undefined only in an
|
|
275
|
-
// impossible race since the UPDATE above already matched it.
|
|
276
|
-
const row = db.prepare(`SELECT ${POLICY_COLS} FROM policies WHERE id = ? AND tenant_id = ?`)
|
|
277
|
-
.get(id, tenantId);
|
|
278
|
-
if (!row)
|
|
279
|
-
throw new NotFoundError(`closePolicy: policy ${id} not found after UPDATE`);
|
|
280
|
-
appendAuditEvent(db, {
|
|
281
|
-
tenantId,
|
|
282
|
-
actor,
|
|
283
|
-
op: 'policy_close',
|
|
284
|
-
targetId: String(id),
|
|
285
|
-
metadata: { policy_id: id },
|
|
286
|
-
});
|
|
287
|
-
db.exec('COMMIT');
|
|
288
|
-
const closed = rowToPolicy(row);
|
|
289
|
-
// Closing removes the object from the graph. Remove its rows DIRECTLY (deterministic),
|
|
290
|
-
// not only via an enqueued rebuild whose queue item is lost if the mirror is later
|
|
291
|
-
// forgotten (the queue row cascade-deletes with the memory), which would leave the closed
|
|
292
|
-
// object stale and could block that forget. Still enqueue when a mirror exists
|
|
293
|
-
// so a concurrent rebuild re-derives consistently (harmless if it also runs).
|
|
294
|
-
removeGraphEntitiesForObject(hippoRoot, tenantId, 'policy', closed.id);
|
|
295
|
-
if (closed.memoryId) {
|
|
296
|
-
markGraphDirty(hippoRoot, tenantId, closed.memoryId);
|
|
297
|
-
}
|
|
298
|
-
return closed;
|
|
299
|
-
}
|
|
300
|
-
catch (e) {
|
|
301
|
-
try {
|
|
302
|
-
db.exec('ROLLBACK');
|
|
303
|
-
}
|
|
304
|
-
catch {
|
|
305
|
-
// Ignore rollback failures — the throw below is what matters.
|
|
306
|
-
}
|
|
307
|
-
throw e;
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
finally {
|
|
311
|
-
closeHippoDb(db);
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
export function loadPolicyById(hippoRoot, tenantId, id) {
|
|
315
|
-
assertTenantId('loadPolicyById', tenantId);
|
|
316
|
-
const db = openHippoDb(hippoRoot);
|
|
317
|
-
try {
|
|
318
|
-
// SAFETY: SELECT ${POLICY_COLS} projects exactly the PolicyRow columns;
|
|
319
|
-
// .get() returns that row, or undefined when the id/tenant pair doesn't exist.
|
|
320
|
-
const row = db.prepare(`SELECT ${POLICY_COLS} FROM policies WHERE id = ? AND tenant_id = ?`)
|
|
321
|
-
.get(id, tenantId);
|
|
322
|
-
return row ? rowToPolicy(row) : null;
|
|
323
|
-
}
|
|
324
|
-
finally {
|
|
325
|
-
closeHippoDb(db);
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
export function loadPolicies(hippoRoot, tenantId, opts = {}) {
|
|
329
|
-
assertTenantId('loadPolicies', tenantId);
|
|
330
|
-
const limit = opts.limit ?? 100;
|
|
331
|
-
const after = keysetAfter('created_at', 'id', opts.after);
|
|
332
|
-
const db = openHippoDb(hippoRoot);
|
|
333
|
-
try {
|
|
334
|
-
let rows;
|
|
335
|
-
if (opts.status) {
|
|
336
|
-
if (!VALID_POLICY_STATES.has(opts.status)) {
|
|
337
|
-
throw new BadRequestError(`loadPolicies: status must be one of ${Array.from(VALID_POLICY_STATES).join('|')}; got ${opts.status}`);
|
|
338
|
-
}
|
|
339
|
-
// SAFETY: SELECT ${POLICY_COLS} projects exactly the PolicyRow columns;
|
|
340
|
-
// .all() returns rows in that shape regardless of the status filter applied.
|
|
341
|
-
rows = db.prepare(`
|
|
342
|
-
SELECT ${POLICY_COLS} FROM policies
|
|
343
|
-
WHERE tenant_id = ? AND status = ?${after.sql}
|
|
344
|
-
ORDER BY created_at DESC, id DESC
|
|
345
|
-
LIMIT ?
|
|
346
|
-
`).all(tenantId, opts.status, ...after.params, limit);
|
|
347
|
-
}
|
|
348
|
-
else {
|
|
349
|
-
// SAFETY: SELECT ${POLICY_COLS} projects exactly the PolicyRow columns;
|
|
350
|
-
// .all() returns rows in that shape for every tenant-scoped row.
|
|
351
|
-
rows = db.prepare(`
|
|
352
|
-
SELECT ${POLICY_COLS} FROM policies
|
|
353
|
-
WHERE tenant_id = ?${after.sql}
|
|
354
|
-
ORDER BY created_at DESC, id DESC
|
|
355
|
-
LIMIT ?
|
|
356
|
-
`).all(tenantId, ...after.params, limit);
|
|
357
|
-
}
|
|
358
|
-
return rows.map(rowToPolicy);
|
|
359
|
-
}
|
|
360
|
-
finally {
|
|
361
|
-
closeHippoDb(db);
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
export function loadActivePolicies(hippoRoot, tenantId, opts = {}) {
|
|
365
|
-
return loadPolicies(hippoRoot, tenantId, { status: 'active', limit: opts.limit });
|
|
366
|
-
}
|
|
367
|
-
/**
|
|
368
|
-
* The bi-temporal as-of query: the policies in force at `asOfDate` (a valid-time)
|
|
369
|
-
* per current knowledge. Half-open interval [valid_from, valid_to): a row covers
|
|
370
|
-
* T when valid_from <= asOf AND (valid_to IS NULL OR asOf < valid_to). asOfDate is
|
|
371
|
-
* normalized to canonical datetime first so the lexical comparison is sound.
|
|
372
|
-
*
|
|
373
|
-
* A row is returned when it covers T AND it is the live answer for T:
|
|
374
|
-
* - `active` rows that cover T, OR
|
|
375
|
-
* - `superseded` rows that cover T BUT whose successor was not yet effective at T
|
|
376
|
-
* (successor.valid_from > asOf) - i.e. an earlier version that was genuinely in
|
|
377
|
-
* force then. This is the core valid-time correctness: a Jan-Jun policy
|
|
378
|
-
* superseded in May is still the answer for `asof March`. Filtering on
|
|
379
|
-
* status='active' alone would conflate transaction-time with valid-time; the
|
|
380
|
-
* successor-aware filter mirrors the existing recall-history.ts asOf pattern.
|
|
381
|
-
*
|
|
382
|
-
* `closed` rows are EXCLUDED: closing is a deliberate transaction-time retirement,
|
|
383
|
-
* and resurrecting closed policies for a historical valid-time is full
|
|
384
|
-
* transaction-time-travel (deferred). Returns an ARRAY (overlapping same-name
|
|
385
|
-
* ranges are allowed in v1). Optionally filtered to one policy_name.
|
|
386
|
-
*
|
|
387
|
-
* Date-only `asOfDate` (YYYY-MM-DD, no time component) resolves to the END
|
|
388
|
-
* of that UTC day (23:59:59.999Z), so "as of [day D]" includes a policy that
|
|
389
|
-
* became effective at any instant during D - this is the read-side fix for the
|
|
390
|
-
* common create-then-asof-today workflow, keeping the stored valid_from honest.
|
|
391
|
-
* A full datetime asOf is used as the precise instant.
|
|
392
|
-
*/
|
|
393
|
-
export function loadPoliciesAsOf(hippoRoot, tenantId, asOfDate, opts = {}) {
|
|
394
|
-
assertTenantId('loadPoliciesAsOf', tenantId);
|
|
395
|
-
// A bare date means "as of (the whole of) that day" -> end-of-day instant; a
|
|
396
|
-
// datetime is used precisely. normalizePolicyDate validates/canonicalizes both.
|
|
397
|
-
const asOf = /^\d{4}-\d{2}-\d{2}$/.test(asOfDate.trim())
|
|
398
|
-
? normalizePolicyDate(`${asOfDate.trim()}T23:59:59.999Z`, 'asOfDate')
|
|
399
|
-
: normalizePolicyDate(asOfDate, 'asOfDate');
|
|
400
|
-
const limit = opts.limit ?? 100;
|
|
401
|
-
const db = openHippoDb(hippoRoot);
|
|
402
|
-
try {
|
|
403
|
-
// LEFT JOIN the successor so a superseded row is kept only while its
|
|
404
|
-
// successor is not yet effective at asOf. p.status != 'closed' drops retired
|
|
405
|
-
// rows; the OR keeps active heads + still-in-force superseded versions.
|
|
406
|
-
const nameClause = opts.name !== undefined ? 'AND p.policy_name = ?' : '';
|
|
407
|
-
const params = [tenantId, asOf, asOf, asOf];
|
|
408
|
-
if (opts.name !== undefined)
|
|
409
|
-
params.push(opts.name);
|
|
410
|
-
params.push(limit);
|
|
411
|
-
// SAFETY: the SELECT list explicitly aliases p.* to exactly the PolicyRow
|
|
412
|
-
// columns (id, memory_id, tenant_id, policy_name, policy_text, valid_from,
|
|
413
|
-
// valid_to, version, status, superseded_by, superseded_at, change_summary,
|
|
414
|
-
// closed_at, created_at); .all() returns rows in that shape.
|
|
415
|
-
const rows = db.prepare(`
|
|
416
|
-
SELECT p.id, p.memory_id, p.tenant_id, p.policy_name, p.policy_text,
|
|
417
|
-
p.valid_from, p.valid_to, p.version, p.status, p.superseded_by,
|
|
418
|
-
p.superseded_at, p.change_summary, p.closed_at, p.created_at
|
|
419
|
-
FROM policies p
|
|
420
|
-
LEFT JOIN policies s ON s.id = p.superseded_by
|
|
421
|
-
WHERE p.tenant_id = ? AND p.status != 'closed'
|
|
422
|
-
AND p.valid_from <= ? AND (p.valid_to IS NULL OR ? < p.valid_to)
|
|
423
|
-
AND (p.status = 'active' OR (s.id IS NOT NULL AND s.valid_from > ?))
|
|
424
|
-
${nameClause}
|
|
425
|
-
ORDER BY p.valid_from DESC, p.id DESC
|
|
426
|
-
LIMIT ?
|
|
427
|
-
`).all(...params);
|
|
428
|
-
return rows.map(rowToPolicy);
|
|
429
|
-
}
|
|
430
|
-
finally {
|
|
431
|
-
closeHippoDb(db);
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
//# sourceMappingURL=policies.js.map
|