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/skills.js
DELETED
|
@@ -1,367 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Skills as a first-class, versioned object.
|
|
3
|
-
*
|
|
4
|
-
* A `skill` is a reusable, agent-followable capability: an `instructions` body
|
|
5
|
-
* plus an optional `trigger` ("when to apply"), evolving via the supersede delta
|
|
6
|
-
* lifecycle. "Executable" is scoped to an agent-followable INSTRUCTION that, once
|
|
7
|
-
* exported into the agent's in-force rules (AGENTS.md / CLAUDE.md) via
|
|
8
|
-
* `exportSkills`, is executed by the agent reading it. Literal code/command
|
|
9
|
-
* execution is deferred (security; a future sandbox). The distinguishing
|
|
10
|
-
* capability is therefore the EXPORT renderer, not a runtime.
|
|
11
|
-
*
|
|
12
|
-
* Reuses the process/decision supersede machinery verbatim (superseded_by self-FK
|
|
13
|
-
* + CAS + INSERT-preflight + server-derived version + change_summary + supersede
|
|
14
|
-
* tenant-match trigger). It DROPS process's `steps` (a skill's content is a single
|
|
15
|
-
* `instructions` body) and ADDS `trigger` (stored in the `trigger_text` column -
|
|
16
|
-
* `trigger` is a SQLite reserved keyword).
|
|
17
|
-
*
|
|
18
|
-
* The `skills` table is the source of truth (survives memory decay); the memory
|
|
19
|
-
* mirror is for recall. memory_id is NULLABLE with ON DELETE SET NULL.
|
|
20
|
-
*
|
|
21
|
-
* Lifecycle: active -> superseded (a newer version replaces it) or active ->
|
|
22
|
-
* closed (retired). Export renders ACTIVE skills only.
|
|
23
|
-
*/
|
|
24
|
-
import { BadRequestError, ConflictError, NotFoundError } from './api-errors.js';
|
|
25
|
-
import { openHippoDb, closeHippoDb } from './db.js';
|
|
26
|
-
import { writeEntry } from './store/entry-writes.js';
|
|
27
|
-
import { assertTenantId } from './tenant.js';
|
|
28
|
-
import { createMemory, Layer } from './memory.js';
|
|
29
|
-
import { appendAuditEvent } from './audit.js';
|
|
30
|
-
import { objectHalfLifeDays } from './half-life-migration.js';
|
|
31
|
-
import { keysetAfter } from './keyset.js';
|
|
32
|
-
export const VALID_SKILL_STATES = new Set([
|
|
33
|
-
'active',
|
|
34
|
-
'superseded',
|
|
35
|
-
'closed',
|
|
36
|
-
]);
|
|
37
|
-
/** Field caps (untrusted at the HTTP/SDK boundary). instructions is a body, so a
|
|
38
|
-
* larger cap than the 4096 short-field convention. */
|
|
39
|
-
export const MAX_SKILL_NAME_LEN = 256;
|
|
40
|
-
export const MAX_SKILL_INSTRUCTIONS_LEN = 8192;
|
|
41
|
-
export const MAX_SKILL_TRIGGER_LEN = 1024;
|
|
42
|
-
/** Aggregate bound on a single export render so the export body is never unbounded.
|
|
43
|
-
* Realistic active-skill counts are tens; 1000 is a generous bound. */
|
|
44
|
-
export const MAX_EXPORT_SKILLS = 1000;
|
|
45
|
-
/**
|
|
46
|
-
* Validate + normalise skill fields. skill_name is trimmed and MUST be a single
|
|
47
|
-
* line (no newlines) so it cannot break the H2 header in the export render.
|
|
48
|
-
* instructions are kept verbatim (operator content) but capped.
|
|
49
|
-
* Returns the normalised name + trigger (null when absent/empty).
|
|
50
|
-
*/
|
|
51
|
-
function validateSkillFields(skillName, instructions, trigger) {
|
|
52
|
-
const name = (skillName ?? '').trim();
|
|
53
|
-
if (name.length === 0)
|
|
54
|
-
throw new BadRequestError('saveSkill: skillName is required');
|
|
55
|
-
if (/[\r\n]/.test(name))
|
|
56
|
-
throw new BadRequestError('saveSkill: skillName must be a single line (no newlines)');
|
|
57
|
-
if (name.length > MAX_SKILL_NAME_LEN) {
|
|
58
|
-
throw new BadRequestError(`saveSkill: skillName exceeds the ${MAX_SKILL_NAME_LEN}-char cap`);
|
|
59
|
-
}
|
|
60
|
-
if (!instructions || instructions.trim().length === 0) {
|
|
61
|
-
throw new BadRequestError('saveSkill: instructions are required');
|
|
62
|
-
}
|
|
63
|
-
if (instructions.length > MAX_SKILL_INSTRUCTIONS_LEN) {
|
|
64
|
-
throw new BadRequestError(`saveSkill: instructions exceed the ${MAX_SKILL_INSTRUCTIONS_LEN}-char cap`);
|
|
65
|
-
}
|
|
66
|
-
let triggerVal = null;
|
|
67
|
-
if (trigger !== undefined && trigger !== null && trigger.trim().length > 0) {
|
|
68
|
-
if (trigger.length > MAX_SKILL_TRIGGER_LEN) {
|
|
69
|
-
throw new BadRequestError(`saveSkill: trigger exceeds the ${MAX_SKILL_TRIGGER_LEN}-char cap`);
|
|
70
|
-
}
|
|
71
|
-
// Single-line, like skill_name: a trigger is a short "when to apply" phrase,
|
|
72
|
-
// and a newline would let it forge a heading inside the export **When:** line.
|
|
73
|
-
// Reject rather than emit a multi-line trigger.
|
|
74
|
-
if (/[\r\n]/.test(trigger)) {
|
|
75
|
-
throw new BadRequestError('saveSkill: trigger must be a single line (no newlines)');
|
|
76
|
-
}
|
|
77
|
-
triggerVal = trigger;
|
|
78
|
-
}
|
|
79
|
-
return { name, trigger: triggerVal };
|
|
80
|
-
}
|
|
81
|
-
function rowToSkill(row) {
|
|
82
|
-
return {
|
|
83
|
-
id: row.id,
|
|
84
|
-
memoryId: row.memory_id,
|
|
85
|
-
tenantId: row.tenant_id,
|
|
86
|
-
skillName: row.skill_name,
|
|
87
|
-
instructions: row.instructions,
|
|
88
|
-
trigger: row.trigger_text,
|
|
89
|
-
version: row.version,
|
|
90
|
-
// SAFETY: status is DB-constrained to VALID_SKILL_STATES; this module
|
|
91
|
-
// is the only writer and always inserts one of those literal strings.
|
|
92
|
-
status: row.status,
|
|
93
|
-
supersededBy: row.superseded_by,
|
|
94
|
-
supersededAt: row.superseded_at,
|
|
95
|
-
changeSummary: row.change_summary,
|
|
96
|
-
closedAt: row.closed_at,
|
|
97
|
-
createdAt: row.created_at,
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
const SKILL_COLS = `
|
|
101
|
-
id, memory_id, tenant_id, skill_name, instructions, trigger_text, version, status,
|
|
102
|
-
superseded_by, superseded_at, change_summary, closed_at, created_at
|
|
103
|
-
`;
|
|
104
|
-
/** Recall-surface content for the memory mirror: name + optional trigger +
|
|
105
|
-
* instructions. Named (mirrors buildProcessContent) so the recall surface is
|
|
106
|
-
* deterministic + unit-testable. */
|
|
107
|
-
function buildSkillContent(skillName, instructions, trigger) {
|
|
108
|
-
let content = skillName;
|
|
109
|
-
if (trigger)
|
|
110
|
-
content += `\n\nWhen: ${trigger}`;
|
|
111
|
-
content += `\n\n${instructions}`;
|
|
112
|
-
return content;
|
|
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 / savePolicy.
|
|
118
|
-
function preflightSkillSupersede(db, tenantId, supersedesId) {
|
|
119
|
-
// SAFETY: row shape matches the `status, version` columns named in the SELECT below.
|
|
120
|
-
const pred = db.prepare(`SELECT status, version FROM skills WHERE id = ? AND tenant_id = ?`).get(supersedesId, tenantId);
|
|
121
|
-
if (!pred) {
|
|
122
|
-
throw new NotFoundError(`saveSkill: skill ${supersedesId} to supersede not found for tenant ${tenantId}`);
|
|
123
|
-
}
|
|
124
|
-
if (pred.status !== 'active') {
|
|
125
|
-
throw new ConflictError(`saveSkill: skill ${supersedesId} is not active (status='${pred.status}'); only active skills can be superseded.`);
|
|
126
|
-
}
|
|
127
|
-
return pred.version + 1;
|
|
128
|
-
}
|
|
129
|
-
function insertSkillRow(db, memoryId, w, version) {
|
|
130
|
-
const result = db.prepare(`
|
|
131
|
-
INSERT INTO skills(
|
|
132
|
-
memory_id, tenant_id, skill_name, instructions, trigger_text, version,
|
|
133
|
-
status, superseded_by, superseded_at, change_summary, closed_at, created_at
|
|
134
|
-
) VALUES (?, ?, ?, ?, ?, ?, 'active', NULL, NULL, ?, NULL, ?)
|
|
135
|
-
`).run(memoryId, w.tenantId, w.name, w.instructions, w.trigger, version, w.changeSummary, w.now);
|
|
136
|
-
return Number(result.lastInsertRowid ?? 0);
|
|
137
|
-
}
|
|
138
|
-
function supersedeSkillRow(db, w, supersedesId, skillId, version) {
|
|
139
|
-
const sup = db.prepare(`
|
|
140
|
-
UPDATE skills
|
|
141
|
-
SET status = 'superseded', superseded_by = ?, superseded_at = ?
|
|
142
|
-
WHERE id = ? AND tenant_id = ? AND status = 'active' AND id != ?
|
|
143
|
-
`).run(skillId, w.now, supersedesId, w.tenantId, skillId);
|
|
144
|
-
if (sup.changes === 0) {
|
|
145
|
-
throw new ConflictError(`saveSkill: skill ${supersedesId} could not be superseded (no longer active or self-reference).`);
|
|
146
|
-
}
|
|
147
|
-
appendAuditEvent(db, {
|
|
148
|
-
tenantId: w.tenantId,
|
|
149
|
-
actor: w.actor,
|
|
150
|
-
op: 'skill_supersede',
|
|
151
|
-
targetId: String(supersedesId),
|
|
152
|
-
metadata: {
|
|
153
|
-
skill_id: supersedesId,
|
|
154
|
-
superseded_by: skillId,
|
|
155
|
-
new_version: version,
|
|
156
|
-
},
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
/** The afterWrite body: preflight, INSERT, supersede, reload, create audit, all in one SAVEPOINT. */
|
|
160
|
-
function writeSkillRow(db, memoryId, w) {
|
|
161
|
-
const version = w.supersedesId !== undefined ? preflightSkillSupersede(db, w.tenantId, w.supersedesId) : 1;
|
|
162
|
-
const skillId = insertSkillRow(db, memoryId, w, version);
|
|
163
|
-
if (w.supersedesId !== undefined)
|
|
164
|
-
supersedeSkillRow(db, w, w.supersedesId, skillId, version);
|
|
165
|
-
// SAFETY: row's shape matches the columns named in SKILL_COLS above.
|
|
166
|
-
const row = db.prepare(`SELECT ${SKILL_COLS} FROM skills WHERE id = ?`)
|
|
167
|
-
.get(skillId);
|
|
168
|
-
if (!row)
|
|
169
|
-
throw new Error('saveSkill: failed to reload saved skill row');
|
|
170
|
-
// GDPR-light metadata: ids + flags only, no skill text.
|
|
171
|
-
appendAuditEvent(db, {
|
|
172
|
-
tenantId: w.tenantId,
|
|
173
|
-
actor: w.actor,
|
|
174
|
-
op: 'skill_create',
|
|
175
|
-
targetId: String(skillId),
|
|
176
|
-
metadata: {
|
|
177
|
-
skill_id: skillId,
|
|
178
|
-
version,
|
|
179
|
-
has_trigger: w.trigger !== null,
|
|
180
|
-
},
|
|
181
|
-
});
|
|
182
|
-
return row;
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Create a skill (or a new version that supersedes an existing one). Writes the
|
|
186
|
-
* memory mirror + the skills row atomically inside writeEntry's SAVEPOINT. When
|
|
187
|
-
* supersedesSkillId is given, the referenced ACTIVE row is preflighted (status +
|
|
188
|
-
* version) BEFORE the INSERT, then CAS-UPDATEd -> superseded in the same SAVEPOINT;
|
|
189
|
-
* the new version = predecessor.version + 1 (server-derived).
|
|
190
|
-
*/
|
|
191
|
-
export function saveSkill(hippoRoot, tenantId, opts, actor = 'cli') {
|
|
192
|
-
assertTenantId('saveSkill', tenantId);
|
|
193
|
-
const { name, trigger } = validateSkillFields(opts.skillName, opts.instructions, opts.trigger);
|
|
194
|
-
const isSupersede = opts.supersedesSkillId !== undefined;
|
|
195
|
-
const changeSummary = isSupersede ? (opts.changeSummary ?? null) : null;
|
|
196
|
-
const now = new Date().toISOString();
|
|
197
|
-
const content = buildSkillContent(name, opts.instructions, trigger);
|
|
198
|
-
const tags = ['skill', ...(opts.extraTags ?? [])];
|
|
199
|
-
const mem = createMemory(content, {
|
|
200
|
-
tags,
|
|
201
|
-
layer: Layer.Semantic,
|
|
202
|
-
confidence: 'verified',
|
|
203
|
-
source: 'skill',
|
|
204
|
-
baseHalfLifeDays: objectHalfLifeDays(hippoRoot),
|
|
205
|
-
tenantId,
|
|
206
|
-
});
|
|
207
|
-
const w = {
|
|
208
|
-
tenantId,
|
|
209
|
-
actor,
|
|
210
|
-
name,
|
|
211
|
-
instructions: opts.instructions,
|
|
212
|
-
trigger,
|
|
213
|
-
changeSummary,
|
|
214
|
-
supersedesId: opts.supersedesSkillId,
|
|
215
|
-
now,
|
|
216
|
-
};
|
|
217
|
-
let savedRow;
|
|
218
|
-
writeEntry(hippoRoot, mem, {
|
|
219
|
-
actor,
|
|
220
|
-
afterWrite: (db, memoryId) => {
|
|
221
|
-
savedRow = writeSkillRow(db, memoryId, w);
|
|
222
|
-
},
|
|
223
|
-
});
|
|
224
|
-
if (!savedRow) {
|
|
225
|
-
throw new Error('saveSkill: afterWrite did not populate the row');
|
|
226
|
-
}
|
|
227
|
-
return rowToSkill(savedRow);
|
|
228
|
-
}
|
|
229
|
-
/**
|
|
230
|
-
* Close (retire) an active skill. CAS guard WHERE status='active'; 0 changes
|
|
231
|
-
* distinguishes not-found from not-active. A superseded row is terminal.
|
|
232
|
-
*/
|
|
233
|
-
export function closeSkill(hippoRoot, tenantId, id, actor = 'cli') {
|
|
234
|
-
assertTenantId('closeSkill', tenantId);
|
|
235
|
-
const now = new Date().toISOString();
|
|
236
|
-
const db = openHippoDb(hippoRoot);
|
|
237
|
-
try {
|
|
238
|
-
db.exec('BEGIN IMMEDIATE');
|
|
239
|
-
try {
|
|
240
|
-
const updateResult = db.prepare(`
|
|
241
|
-
UPDATE skills
|
|
242
|
-
SET status = 'closed', closed_at = ?
|
|
243
|
-
WHERE id = ? AND tenant_id = ? AND status = 'active'
|
|
244
|
-
`).run(now, id, tenantId);
|
|
245
|
-
if (updateResult.changes === 0) {
|
|
246
|
-
// SAFETY: row shape matches the single `status` column named in the SELECT above.
|
|
247
|
-
const existing = db.prepare(`SELECT status FROM skills WHERE id = ? AND tenant_id = ?`).get(id, tenantId);
|
|
248
|
-
if (!existing) {
|
|
249
|
-
throw new NotFoundError(`closeSkill: skill ${id} not found for tenant ${tenantId}`);
|
|
250
|
-
}
|
|
251
|
-
throw new ConflictError(`closeSkill: skill ${id} is not active (status='${existing.status}'); only active skills can be closed.`);
|
|
252
|
-
}
|
|
253
|
-
// SAFETY: row's shape matches the columns named in SKILL_COLS above.
|
|
254
|
-
const row = db.prepare(`SELECT ${SKILL_COLS} FROM skills WHERE id = ? AND tenant_id = ?`)
|
|
255
|
-
.get(id, tenantId);
|
|
256
|
-
if (!row)
|
|
257
|
-
throw new NotFoundError(`closeSkill: skill ${id} not found after UPDATE`);
|
|
258
|
-
appendAuditEvent(db, {
|
|
259
|
-
tenantId,
|
|
260
|
-
actor,
|
|
261
|
-
op: 'skill_close',
|
|
262
|
-
targetId: String(id),
|
|
263
|
-
metadata: { skill_id: id },
|
|
264
|
-
});
|
|
265
|
-
db.exec('COMMIT');
|
|
266
|
-
return rowToSkill(row);
|
|
267
|
-
}
|
|
268
|
-
catch (e) {
|
|
269
|
-
try {
|
|
270
|
-
db.exec('ROLLBACK');
|
|
271
|
-
}
|
|
272
|
-
catch {
|
|
273
|
-
// Ignore rollback failures — the throw below is what matters.
|
|
274
|
-
}
|
|
275
|
-
throw e;
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
finally {
|
|
279
|
-
closeHippoDb(db);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
export function loadSkillById(hippoRoot, tenantId, id) {
|
|
283
|
-
assertTenantId('loadSkillById', tenantId);
|
|
284
|
-
const db = openHippoDb(hippoRoot);
|
|
285
|
-
try {
|
|
286
|
-
// SAFETY: row's shape matches the columns named in SKILL_COLS above.
|
|
287
|
-
const row = db.prepare(`SELECT ${SKILL_COLS} FROM skills WHERE id = ? AND tenant_id = ?`)
|
|
288
|
-
.get(id, tenantId);
|
|
289
|
-
return row ? rowToSkill(row) : null;
|
|
290
|
-
}
|
|
291
|
-
finally {
|
|
292
|
-
closeHippoDb(db);
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
export function loadSkills(hippoRoot, tenantId, opts = {}) {
|
|
296
|
-
assertTenantId('loadSkills', tenantId);
|
|
297
|
-
const limit = opts.limit ?? 100;
|
|
298
|
-
const after = keysetAfter('created_at', 'id', opts.after);
|
|
299
|
-
const db = openHippoDb(hippoRoot);
|
|
300
|
-
try {
|
|
301
|
-
let rows;
|
|
302
|
-
if (opts.status) {
|
|
303
|
-
if (!VALID_SKILL_STATES.has(opts.status)) {
|
|
304
|
-
throw new BadRequestError(`loadSkills: status must be one of ${Array.from(VALID_SKILL_STATES).join('|')}; got ${opts.status}`);
|
|
305
|
-
}
|
|
306
|
-
// SAFETY: rows' shape matches the columns named in SKILL_COLS above.
|
|
307
|
-
rows = db.prepare(`
|
|
308
|
-
SELECT ${SKILL_COLS} FROM skills
|
|
309
|
-
WHERE tenant_id = ? AND status = ?${after.sql}
|
|
310
|
-
ORDER BY created_at DESC, id DESC
|
|
311
|
-
LIMIT ?
|
|
312
|
-
`).all(tenantId, opts.status, ...after.params, limit);
|
|
313
|
-
}
|
|
314
|
-
else {
|
|
315
|
-
// SAFETY: rows' shape matches the columns named in SKILL_COLS above.
|
|
316
|
-
rows = db.prepare(`
|
|
317
|
-
SELECT ${SKILL_COLS} FROM skills
|
|
318
|
-
WHERE tenant_id = ?${after.sql}
|
|
319
|
-
ORDER BY created_at DESC, id DESC
|
|
320
|
-
LIMIT ?
|
|
321
|
-
`).all(tenantId, ...after.params, limit);
|
|
322
|
-
}
|
|
323
|
-
return rows.map(rowToSkill);
|
|
324
|
-
}
|
|
325
|
-
finally {
|
|
326
|
-
closeHippoDb(db);
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
export function loadActiveSkills(hippoRoot, tenantId, opts = {}) {
|
|
330
|
-
return loadSkills(hippoRoot, tenantId, { status: 'active', limit: opts.limit });
|
|
331
|
-
}
|
|
332
|
-
/**
|
|
333
|
-
* Render the tenant's ACTIVE skills into ONE AGENTS.md / CLAUDE.md-style markdown
|
|
334
|
-
* block (one H2 per skill, ordered by skill_name ASC for determinism), and RETURN
|
|
335
|
-
* the string. Does NOT write any file. Returns '' when there are no active skills.
|
|
336
|
-
*
|
|
337
|
-
* skill_name is single-line (validated on save) so it cannot break the H2 header;
|
|
338
|
-
* instructions are emitted verbatim (operator content). Bounded by MAX_EXPORT_SKILLS
|
|
339
|
-
* active rows; each field is capped on save, so the rendered string is bounded.
|
|
340
|
-
*/
|
|
341
|
-
export function exportSkills(hippoRoot, tenantId) {
|
|
342
|
-
assertTenantId('exportSkills', tenantId);
|
|
343
|
-
const db = openHippoDb(hippoRoot);
|
|
344
|
-
try {
|
|
345
|
-
// SAFETY: rows' shape matches the columns named in SKILL_COLS above.
|
|
346
|
-
const rows = db.prepare(`
|
|
347
|
-
SELECT ${SKILL_COLS} FROM skills
|
|
348
|
-
WHERE tenant_id = ? AND status = 'active'
|
|
349
|
-
ORDER BY skill_name ASC, id ASC
|
|
350
|
-
LIMIT ?
|
|
351
|
-
`).all(tenantId, MAX_EXPORT_SKILLS);
|
|
352
|
-
return rows
|
|
353
|
-
.map(rowToSkill)
|
|
354
|
-
.map((s) => {
|
|
355
|
-
let block = `## ${s.skillName}`;
|
|
356
|
-
if (s.trigger)
|
|
357
|
-
block += `\n\n**When:** ${s.trigger}`;
|
|
358
|
-
block += `\n\n${s.instructions}`;
|
|
359
|
-
return block;
|
|
360
|
-
})
|
|
361
|
-
.join('\n\n');
|
|
362
|
-
}
|
|
363
|
-
finally {
|
|
364
|
-
closeHippoDb(db);
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
//# sourceMappingURL=skills.js.map
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { type DatabaseSyncLike } from '../db.js';
|
|
2
|
-
import type { EntryWrites, SupersedeWrite } from '../store-port.js';
|
|
3
|
-
/** Each call on its own handle; mirrors and the forgotten counter follow the commit, so a rolled-back write leaves neither. */
|
|
4
|
-
export declare function sqliteEntryWrites(hippoRoot: string): EntryWrites;
|
|
5
|
-
/** Reach, the CAS on the old row, the successor's insert and the supersede row in one BEGIN IMMEDIATE transaction. Two racing supersedes: one CAS wins. */
|
|
6
|
-
export declare function commitSupersede(db: DatabaseSyncLike, write: SupersedeWrite): void;
|
|
7
|
-
/** A mirror left on disk would bring the archived row back on the next import; on failure the reaper retries, as mirror_cleaned_at stays NULL. */
|
|
8
|
-
export declare function cleanArchivedMirrors(db: DatabaseSyncLike, hippoRoot: string, id: string): void;
|
|
9
|
-
//# sourceMappingURL=entry-writes-group.d.ts.map
|
package/dist/store-port.d.ts
DELETED
|
@@ -1,262 +0,0 @@
|
|
|
1
|
-
import type { AmbientTallies } from './ambient.js';
|
|
2
|
-
import { type AmbientStoreFilter } from './ambient-store.js';
|
|
3
|
-
import { type ApiKeyListRow, type ApiKeyRecord, type ListApiKeysOpts, type NewApiKey } from './auth.js';
|
|
4
|
-
import { type AppendAuditOpts, type AuditEvent, type ListAuditAfterOpts } from './audit.js';
|
|
5
|
-
import type { ContinuityBlock } from './api/recall-types.js';
|
|
6
|
-
import { type EmbeddingIndexState } from './embeddings.js';
|
|
7
|
-
import { type ActiveGoals, type GetActiveGoalsOpts, type GoalRecallLogRow } from './goals.js';
|
|
8
|
-
import type { SessionHandoff } from './handoff.js';
|
|
9
|
-
import type { JsonValue } from './json.js';
|
|
10
|
-
import type { MemoryEntry } from './memory.js';
|
|
11
|
-
import type { PhysicsParticle } from './physics.js';
|
|
12
|
-
import { type PlanningFallacyEvidence } from './predictions/planning-fallacy.js';
|
|
13
|
-
import { type RecallTraceInput } from './recall-trace.js';
|
|
14
|
-
import { type AmbientLoadResult, type AmbientRecallRequest, type ContextCandidateFilter, type RecentOrigins } from './store/candidates.js';
|
|
15
|
-
import { type StrengthenOptions } from './store/entry-writes.js';
|
|
16
|
-
import { type OriginFilter, type VectorCandidateSpec } from './store/search-rows.js';
|
|
17
|
-
import { type ContinuityKey } from './store/sessions.js';
|
|
18
|
-
import { type TokenUse } from './token-ledger.js';
|
|
19
|
-
/** The arguments of `loadRecallSearchEntries` after the query, by name. */
|
|
20
|
-
export interface RecallSearchArgs {
|
|
21
|
-
readonly limit: number;
|
|
22
|
-
readonly tenantId?: string;
|
|
23
|
-
readonly requestedScope?: string;
|
|
24
|
-
readonly explicitScopeMode: 'exact' | 'additive';
|
|
25
|
-
readonly includeSuperseded: boolean;
|
|
26
|
-
readonly originProjects?: OriginFilter;
|
|
27
|
-
/** The caller's personal scope, which the default deny admits; undefined admits no personal row. */
|
|
28
|
-
readonly ownScope: string | undefined;
|
|
29
|
-
}
|
|
30
|
-
/** Everything one recall writes once its reply is decided, so a store writes it on one connection. */
|
|
31
|
-
export interface RecallWrites {
|
|
32
|
-
/** Insert or ignore on (memory_id, goal_id), so the first row wins, a duplicate inside this batch included. First drop a row
|
|
33
|
-
* whose memory_id is in no memories row of this store, whatever that row's tenant, as `localGoalRecallRows` does. */
|
|
34
|
-
readonly goalLog: readonly GoalRecallLogRow[];
|
|
35
|
-
/** In the order they happened. */
|
|
36
|
-
readonly audit: readonly AppendAuditOpts[];
|
|
37
|
-
readonly trace?: RecallTraceInput;
|
|
38
|
-
/** Nothing when `recallBoostAblated`. Each id found, in `tenantId` when set, gets the retrieval_count, last_retrieved,
|
|
39
|
-
* half_life_days and strength `markRetrieved` computes from the row read before any update, so a repeated id moves once. */
|
|
40
|
-
readonly strengthen?: {
|
|
41
|
-
readonly ids: readonly string[];
|
|
42
|
-
readonly opts: StrengthenOptions;
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
/** The reads behind recall's vector arm. */
|
|
46
|
-
export interface VectorReads {
|
|
47
|
-
/** The stored model and whether any vector exists, in one snapshot. */
|
|
48
|
-
embeddingIndexState(): Promise<EmbeddingIndexState>;
|
|
49
|
-
storedVectors(ids: readonly string[]): Promise<Map<string, number[]>>;
|
|
50
|
-
/** The `spec.limit ?? 50` rows nearest `queryVector` by `rankVectorRows` among those where the tenant matches (when set), kind is not 'archived', a superseded row
|
|
51
|
-
* shows only with `includeSuperseded`, scope follows `RecallScopeFilter`, and origin is '' or listed (when `spec.origin` is set). */
|
|
52
|
-
nearestEntries(queryVector: readonly number[], spec: VectorCandidateSpec): Promise<MemoryEntry[]>;
|
|
53
|
-
/** The particles of `ids` only; an empty list reads nothing. */
|
|
54
|
-
physicsParticles(ids: readonly string[]): Promise<Map<string, PhysicsParticle>>;
|
|
55
|
-
}
|
|
56
|
-
/** One memory's vector, computed by the caller's embedding provider. */
|
|
57
|
-
export interface VectorRowWrite {
|
|
58
|
-
readonly memoryId: string;
|
|
59
|
-
readonly vector: readonly number[];
|
|
60
|
-
/** Kept only when the memory has no particle yet, under `memoryId` whatever its own memoryId says. */
|
|
61
|
-
readonly particle?: PhysicsParticle;
|
|
62
|
-
}
|
|
63
|
-
export interface VectorWrite {
|
|
64
|
-
readonly tenantId: string;
|
|
65
|
-
/** The index identity the vectors were built by, `embeddingIndexIdentity(provider.id)`. */
|
|
66
|
-
readonly model: string;
|
|
67
|
-
/** Set only by embedAll's rebuild, so a write that read the index state before another process rebuilt it cannot drop that rebuild. */
|
|
68
|
-
readonly replaceIndex: boolean;
|
|
69
|
-
readonly rows: readonly VectorRowWrite[];
|
|
70
|
-
}
|
|
71
|
-
export interface VectorWriteResult {
|
|
72
|
-
readonly written: number;
|
|
73
|
-
/** True when another model built the index and `replaceIndex` is false; the store then keeps nothing and `written` is 0. */
|
|
74
|
-
readonly modelMismatch: boolean;
|
|
75
|
-
}
|
|
76
|
-
export interface VectorBackfillQuery {
|
|
77
|
-
readonly model: string;
|
|
78
|
-
/** Only ids above this one in byte order; unset starts at the first. */
|
|
79
|
-
readonly afterId?: string;
|
|
80
|
-
/** Clamped to 1..500; a non-integer rejects with RangeError `limit must be an integer`. */
|
|
81
|
-
readonly limit: number;
|
|
82
|
-
/** Every tenant when unset, since the backfill covers the whole store. */
|
|
83
|
-
readonly tenantId?: string;
|
|
84
|
-
}
|
|
85
|
-
/** The writes behind embed on write and the backfill: core computes each vector, the store only keeps it.
|
|
86
|
-
* A store deletes a memory's vector and particle when the memory is deleted (hippo.db does it by trigger and foreign-key cascade). */
|
|
87
|
-
export interface VectorWrites {
|
|
88
|
-
/** Memories of any kind with no vector stored under `query.model`, by id ascending in byte order. */
|
|
89
|
-
entriesWithoutVector(query: VectorBackfillQuery): Promise<MemoryEntry[]>;
|
|
90
|
-
/** In one transaction: refuses with `modelMismatch` if `replacesIndex` and not `replaceIndex`; else, when a row is writable (memory in `tenantId`, vector non-empty
|
|
91
|
-
* and finite), drops every vector and particle if `replacesIndex`, keeps each writable row under `model` with its particle where none exists, sets `model`. No audit row. */
|
|
92
|
-
writeVectors(write: VectorWrite): Promise<VectorWriteResult>;
|
|
93
|
-
}
|
|
94
|
-
export interface KeyRevoke {
|
|
95
|
-
readonly tenantId: string;
|
|
96
|
-
readonly keyId: string;
|
|
97
|
-
readonly actor: string;
|
|
98
|
-
readonly at: string;
|
|
99
|
-
}
|
|
100
|
-
export interface KeyAudit {
|
|
101
|
-
/** Sets revoked_at to `at` and appends one auth_revoke row (the key's tenant, `actor`, the key id) in one transaction, then resolves to `at`. A revoked
|
|
102
|
-
* key resolves to its own revoked_at and writes nothing; a key missing from `tenantId` rejects with NotFoundError `Unknown key_id: <keyId>`. */
|
|
103
|
-
revokeApiKey(revoke: KeyRevoke): Promise<string>;
|
|
104
|
-
/** As `listAuditEventsAfter`: rows above `afterId` in ascending id order, with its RangeErrors, limit clamp and tenant filter. */
|
|
105
|
-
auditEventsAfter(opts: ListAuditAfterOpts): Promise<AuditEvent[]>;
|
|
106
|
-
/** The highest audit id ever assigned, pruned rows included, 0 before the first; a tail that sees it drop knows the log was restored. */
|
|
107
|
-
auditHighId(): Promise<number>;
|
|
108
|
-
}
|
|
109
|
-
/** One ambient load: the pins, the `recentNeeded` newest rows `admit` keeps, and the prompt-recall candidates. */
|
|
110
|
-
export interface AmbientCandidateRequest {
|
|
111
|
-
readonly recentNeeded: number;
|
|
112
|
-
/** Sees each row in the order `loadAmbientCandidates` reads them, since the delivery ledger counts its refusals. */
|
|
113
|
-
readonly admit: (e: MemoryEntry) => boolean;
|
|
114
|
-
readonly recall?: AmbientRecallRequest;
|
|
115
|
-
readonly origins?: RecentOrigins;
|
|
116
|
-
}
|
|
117
|
-
/** The reads behind getContext beyond the base `continuity`: its fallback handoff, candidate rows and ambient tallies.
|
|
118
|
-
* getContext with a query under an embedding provider needs `vectors` too, and answers 501 without it. */
|
|
119
|
-
export interface ContextReads {
|
|
120
|
-
/** The newest handoff of the last `maxAgeMs` that is its session's highest id, has no outcome or a partial or failed one, and
|
|
121
|
-
* passes recall's default scope deny, as `loadLatestHandoff` with `unfinishedOnly` and `scopeFilter: 'default-deny'`. Rejects an empty tenant id. */
|
|
122
|
-
unfinishedHandoff(tenantId: string, maxAgeMs: number, key: ContinuityKey | null): Promise<SessionHandoff | null>;
|
|
123
|
-
/** As `loadAmbientCandidates`; `recall` searches with the query `rarestFtsQuery` builds from FTS document counts over every tenant's rows,
|
|
124
|
-
* and finds nothing when no term is indexed. Core keeps only `tenantId`'s rows that its own admit passes, whatever the store returns. */
|
|
125
|
-
ambientCandidates(tenantId: string, request: AmbientCandidateRequest): Promise<AmbientLoadResult>;
|
|
126
|
-
/** As `loadContextCandidates`: at most `filter.cap` live rows, pins and then the least decayed first, returned by created, then id. */
|
|
127
|
-
contextCandidates(tenantId: string, filter: ContextCandidateFilter): Promise<MemoryEntry[]>;
|
|
128
|
-
/** As `loadAmbientTallies`: one aggregate over the live, unarchived rows `filter` admits, less other projects' secret-tagged rows. */
|
|
129
|
-
ambientTallies(tenantId: string, filter: AmbientStoreFilter): Promise<AmbientTallies>;
|
|
130
|
-
}
|
|
131
|
-
export interface EntryWrite {
|
|
132
|
-
readonly entry: MemoryEntry;
|
|
133
|
-
readonly actor: string;
|
|
134
|
-
}
|
|
135
|
-
/** Who acts on which of a tenant's rows; `ownScope` is the caller's personal scope, so every other personal row is out of reach. */
|
|
136
|
-
export interface EntryTarget {
|
|
137
|
-
readonly tenantId: string;
|
|
138
|
-
readonly actor: string;
|
|
139
|
-
readonly ownScope: string | null;
|
|
140
|
-
}
|
|
141
|
-
export interface OutcomeWrite extends EntryTarget {
|
|
142
|
-
readonly ids: readonly string[];
|
|
143
|
-
readonly good: boolean;
|
|
144
|
-
}
|
|
145
|
-
export interface SupersedeWrite extends EntryTarget {
|
|
146
|
-
readonly oldId: string;
|
|
147
|
-
readonly successor: MemoryEntry;
|
|
148
|
-
}
|
|
149
|
-
export interface EntryRemoval extends EntryTarget {
|
|
150
|
-
readonly id: string;
|
|
151
|
-
}
|
|
152
|
-
export interface RawArchive extends EntryRemoval {
|
|
153
|
-
readonly reason: string;
|
|
154
|
-
}
|
|
155
|
-
/** The memory-row writes behind remember, outcome, supersede, archive and forget. Each writes its audit rows in the write's own transaction,
|
|
156
|
-
* a child row's change marks its level 2 or 3 summary parent dirty (one summary_marked_dirty row on the flip), and the schema's rules hold. */
|
|
157
|
-
export interface EntryWrites {
|
|
158
|
-
/** Upserts the row, its full-text row and one remember row ({kind, scope}) in the entry's tenant; an id another tenant holds rejects in the transaction with ConflictError `Memory <id>
|
|
159
|
-
* belongs to another tenant`. Content the write brings into a tenant that tombstoned it rejects with RejectedValueError and writes one reject_refusal row after the rollback, best effort. */
|
|
160
|
-
writeEntry(write: EntryWrite): Promise<void>;
|
|
161
|
-
/** For each id in order, a row of the tenant within reach gets `entryAfterOutcome`, a rewrite as writeEntry does and one outcome row ({good}); other ids are skipped, a repeated id builds
|
|
162
|
-
* on its first outcome. Each read holds the row's lock to commit (SELECT ... FOR UPDATE), so a supersede between read and rewrite is not undone. Resolves to the ids applied, repeats kept. */
|
|
163
|
-
applyOutcome(outcome: OutcomeWrite): Promise<string[]>;
|
|
164
|
-
/** Sets the old row's superseded_by where it is within reach and not yet superseded, both checked in the transaction, else rejects with NotFoundError `memory not found: <oldId>` or
|
|
165
|
-
* ConflictError `Memory <oldId> already superseded by another writer`. Then writes the successor as writeEntry does and one supersede row ({newId}), all or nothing. */
|
|
166
|
-
supersede(write: SupersedeWrite): Promise<void>;
|
|
167
|
-
/** Moves a raw row to raw_archive (metadata only, no content), deletes it and its full-text row and writes one archive_raw row ({reason});
|
|
168
|
-
* resolves to the archived_at written. A row out of reach rejects with NotFoundError `memory not found: <id>`, any other kind with BadRequestError. */
|
|
169
|
-
archiveRaw(archive: RawArchive): Promise<string>;
|
|
170
|
-
/** Deletes the row and its full-text row and writes one forget row; a raw row rejects, being append-only. A row out of reach rejects with
|
|
171
|
-
* NotFoundError `memory not found: <id>`. Archive and forget then add one to the store-wide forgotten counter, best effort. */
|
|
172
|
-
forget(removal: EntryRemoval): Promise<void>;
|
|
173
|
-
}
|
|
174
|
-
/** A key to insert and the actor and metadata of its auth_create row, whose tenant and target are the key's. Neither holds the plaintext. */
|
|
175
|
-
export interface KeyMint {
|
|
176
|
-
readonly key: NewApiKey;
|
|
177
|
-
readonly actor: string;
|
|
178
|
-
readonly metadata: Readonly<Record<string, JsonValue>>;
|
|
179
|
-
}
|
|
180
|
-
export interface SelfKeyMint extends KeyMint {
|
|
181
|
-
readonly key: NewApiKey & {
|
|
182
|
-
readonly ownerSubject: string;
|
|
183
|
-
readonly expiresAt: string;
|
|
184
|
-
};
|
|
185
|
-
/** Live keys the owner may hold in the tenant once this one is in. */
|
|
186
|
-
readonly perSubject: number;
|
|
187
|
-
}
|
|
188
|
-
/** `listApiKeyRows`'s filters, always inside one tenant. */
|
|
189
|
-
export interface KeyListQuery extends Omit<ListApiKeysOpts, 'tenantId'> {
|
|
190
|
-
readonly tenantId: string;
|
|
191
|
-
}
|
|
192
|
-
export interface KeyWrites {
|
|
193
|
-
/** Inserts the key and appends its auth_create row in one transaction; with either one failing, neither is written. A key id taken in any tenant
|
|
194
|
-
* rejects, since keys are looked up by id alone. */
|
|
195
|
-
createApiKey(mint: KeyMint): Promise<void>;
|
|
196
|
-
/** One transaction, serialized per (tenant, owner) before the count (hippo.db BEGIN IMMEDIATE, Postgres pg_advisory_xact_lock on the pair): revoke at `key.createdAt`
|
|
197
|
-
* the owner's oldest live keys in the key's tenant down to `perSubject - 1`, insert the key, append an auth_revoke row `{ replacedBy: <new key id> }` per revoked key,
|
|
198
|
-
* then the auth_create row; resolves to the revoked ids. Live: unrevoked, expires_at null or Date.parse(expires_at) after createdAt (NaN counts as expired). */
|
|
199
|
-
createSelfApiKey(mint: SelfKeyMint): Promise<string[]>;
|
|
200
|
-
/** As `listApiKeyRows`: newest inserted first, each with its scope grants; `active` drops revoked rows and an expires_at not above now's toISOString. */
|
|
201
|
-
listApiKeys(query: KeyListQuery): Promise<ApiKeyListRow[]>;
|
|
202
|
-
}
|
|
203
|
-
/** The optional groups: a store sets each one whole or leaves it unset, and a route or MCP tool names the one it needs. */
|
|
204
|
-
export interface StoreGroups {
|
|
205
|
-
/** Unset on a store built before them, where hybrid and physics recall under an embedding provider answer 501. */
|
|
206
|
-
readonly vectors: VectorReads;
|
|
207
|
-
readonly keyAudit: KeyAudit;
|
|
208
|
-
readonly keyWrites: KeyWrites;
|
|
209
|
-
/** embedMemory and embedAll with a store need it and `vectors`. */
|
|
210
|
-
readonly vectorWrites: VectorWrites;
|
|
211
|
-
readonly entryWrites: EntryWrites;
|
|
212
|
-
readonly contextReads: ContextReads;
|
|
213
|
-
}
|
|
214
|
-
export type StoreGroup = 'base' | keyof StoreGroups;
|
|
215
|
-
export declare function hasGroup(store: HippoStore, group: StoreGroup): boolean;
|
|
216
|
-
/** The group's methods; a store without them throws StoreNotPortedError, which answers 501 as any unported path does. */
|
|
217
|
-
export declare function requireGroup<G extends keyof StoreGroups>(store: HippoStore, group: G): StoreGroups[G];
|
|
218
|
-
/** What `serve()` reads and writes through. Each method is atomic and no transaction spans an await, since SQLite's lock wait blocks the event loop; a lock timeout throws `StoreBusyError`. */
|
|
219
|
-
export interface HippoStore extends Partial<StoreGroups> {
|
|
220
|
-
/** 'sqlite' is hippo.db under the served root. Under any other kind, an unported route answers 501 and a hippo.db open inside a request throws. */
|
|
221
|
-
readonly kind: string;
|
|
222
|
-
/** The api_keys row for `keyId` with its scope grants, revoked or not; null when no row matches. */
|
|
223
|
-
findApiKey(keyId: string): Promise<ApiKeyRecord | null>;
|
|
224
|
-
/** Recall candidates in `loadRecallSearchEntries` order: FTS, then LIKE, then every row in scope. */
|
|
225
|
-
searchRecallEntries(query: string, args: RecallSearchArgs): Promise<MemoryEntry[]>;
|
|
226
|
-
/** The rows among the first 500 ids, a tenant narrowing them, ordered by created, then content, then id, all ascending,
|
|
227
|
-
* as `loadEntriesByIds` does; the input order is ignored. */
|
|
228
|
-
entriesByIds(ids: readonly string[], tenantId?: string): Promise<MemoryEntry[]>;
|
|
229
|
-
/** The session's active goals and their policies, read together so a goal and its policy never disagree. */
|
|
230
|
-
activeGoals(opts: GetActiveGoalsOpts): Promise<ActiveGoals>;
|
|
231
|
-
/** The first `count` (at most 200) unsuperseded raw rows a tenant, a non-empty session id and non-null `origins` (those projects and
|
|
232
|
-
* user-global rows) must narrow, by created descending, then content and id ascending, as `loadFreshRawMemories` does. */
|
|
233
|
-
freshRawEntries(count: number, tenantId: string | undefined, sessionId: string | undefined, origins: readonly string[] | null): Promise<MemoryEntry[]>;
|
|
234
|
-
/** The newest active snapshot a non-null `key` must narrow to one owner and project (null only on an unshared hippo.db), then for its session
|
|
235
|
-
* the newest handoff (same key) and `eventLimit` newest events returned oldest first, each tie broken by the larger id; the caller applies scope. */
|
|
236
|
-
continuity(tenantId: string, eventLimit: number, key: ContinuityKey | null): Promise<ContinuityBlock>;
|
|
237
|
-
/** Resolves a forward claim's tokens to one class and reads its baserate, writing no audit row. */
|
|
238
|
-
planningFallacyEvidence(tenantId: string, classQueryTokens: readonly string[]): Promise<PlanningFallacyEvidence>;
|
|
239
|
-
/** Appends the rows in order, all or none. */
|
|
240
|
-
appendAuditEvents(events: readonly AppendAuditOpts[]): Promise<void>;
|
|
241
|
-
/** Writes the goal log and audit rows in one transaction and rejects with none written if it fails. Then the trace and
|
|
242
|
-
* the strengthen, each on its own: a failure there logs and still resolves, since the reply is already decided. */
|
|
243
|
-
finishRecall(writes: RecallWrites): Promise<void>;
|
|
244
|
-
/** Adds `recalled` to the one store-wide total_recalled counter, no tenant; the SQLite store also rewrites stats.json. */
|
|
245
|
-
bumpRecallStats(recalled: number): Promise<void>;
|
|
246
|
-
/** One token-ledger row. Throws, so the caller decides whether a ledger failure matters. */
|
|
247
|
-
recordTokens(use: TokenUse): Promise<void>;
|
|
248
|
-
/** Releases the store's connections; `serve()` closes only a store it made itself. */
|
|
249
|
-
close(): Promise<void>;
|
|
250
|
-
}
|
|
251
|
-
/** The store a request runs on: the served one, else hippo.db under its root, as the CLI and SDK callers have it. */
|
|
252
|
-
export declare function storeFor(ctx: {
|
|
253
|
-
readonly hippoRoot: string;
|
|
254
|
-
readonly store?: HippoStore;
|
|
255
|
-
}): HippoStore;
|
|
256
|
-
/** The built-in store: today's synchronous hippo.db functions behind the port, each call on its own short-lived handles, so close has nothing to release. */
|
|
257
|
-
export declare function sqliteStore(hippoRoot: string): HippoStore & StoreGroups;
|
|
258
|
-
/** sqliteStore's continuity read, for the synchronous recall that cannot await the port. */
|
|
259
|
-
export declare function continuityAt(hippoRoot: string, tenantId: string, eventLimit: number, key: ContinuityKey | null): ContinuityBlock;
|
|
260
|
-
/** sqliteStore's finishRecall, for the synchronous recall that cannot await the port. */
|
|
261
|
-
export declare function finishRecallAt(hippoRoot: string, writes: RecallWrites): void;
|
|
262
|
-
//# sourceMappingURL=store-port.d.ts.map
|