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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Context } from '../api/types.js';
|
|
2
|
-
import { type CallerProject } from '../prompt-hook.js';
|
|
2
|
+
import { type CallerProject } from '../api/prompt-hook.js';
|
|
3
3
|
import { type CaptureTally } from './command.js';
|
|
4
4
|
export interface SessionCaptureRequest {
|
|
5
5
|
readonly sessionId: string;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// `hippo capture --last-session` for a caller whose transcript was read on another machine: its project names the rows, never the store's folder.
|
|
2
|
-
import { BadRequestError } from '../api-errors.js';
|
|
3
|
-
import { assertCallerIds } from '../prompt-hook.js';
|
|
4
|
-
import { assertCallerProject, projectNames } from '../project-identity.js';
|
|
5
|
-
import { longestWord, storedTextKeys } from '../same-text.js';
|
|
6
|
-
import { scrubForSharing } from '
|
|
2
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
3
|
+
import { assertCallerIds } from '../api/prompt-hook.js';
|
|
4
|
+
import { assertCallerProject, projectNames } from '../core/project-identity.js';
|
|
5
|
+
import { longestWord, storedTextKeys } from '../util/same-text.js';
|
|
6
|
+
import { scrubForSharing } from './share-scrub.js';
|
|
7
7
|
import { loadTextsHoldingWords } from '../store/candidates.js';
|
|
8
8
|
import { captureExtractedItems } from './command.js';
|
|
9
9
|
import { extractFromTexts } from './extract.js';
|
|
@@ -4,9 +4,10 @@ import * as fs from 'fs';
|
|
|
4
4
|
import * as path from 'path';
|
|
5
5
|
import { createHash } from 'node:crypto';
|
|
6
6
|
import { homeDir } from '../hooks/shared.js';
|
|
7
|
-
import { errorMessage } from '../log.js';
|
|
8
|
-
import { isObjectLike, isStringValue } from '../capture-contract.js';
|
|
7
|
+
import { errorMessage, log as logger } from '../util/log.js';
|
|
8
|
+
import { isObjectLike, isStringValue } from '../core/capture-contract.js';
|
|
9
9
|
import { SESSION_ID_RE } from './copilot-transcript.js';
|
|
10
|
+
import { FINGERPRINT_HEX_CHARS } from '../util/token-text.js';
|
|
10
11
|
/** Null for a missing id or one that could climb out of the sessions folder. */
|
|
11
12
|
function sessionStateFiles(sessionId) {
|
|
12
13
|
if (sessionId === null || !SESSION_ID_RE.test(sessionId))
|
|
@@ -73,8 +74,9 @@ function releaseSessionLock(lock) {
|
|
|
73
74
|
try {
|
|
74
75
|
fs.rmSync(lock, { force: true });
|
|
75
76
|
}
|
|
76
|
-
catch {
|
|
77
|
+
catch (err) {
|
|
77
78
|
// A lock left behind names this pid, which is dead once the worker exits, so the next taker clears it.
|
|
79
|
+
logger.debug(`session lock not removed: ${errorMessage(err)}`);
|
|
78
80
|
}
|
|
79
81
|
}
|
|
80
82
|
/** False when the sessions folder cannot be written, so the caller runs unlocked as before. */
|
|
@@ -133,7 +135,7 @@ export async function runSessionWorker(sessionId, mode, work) {
|
|
|
133
135
|
}
|
|
134
136
|
}
|
|
135
137
|
function turnKey(turn) {
|
|
136
|
-
return createHash('sha256').update(`${turn.role}\n${turn.text}`).digest('hex').slice(0,
|
|
138
|
+
return createHash('sha256').update(`${turn.role}\n${turn.text}`).digest('hex').slice(0, FINGERPRINT_HEX_CHARS);
|
|
137
139
|
}
|
|
138
140
|
/** The cursor position after `turns`: how many there were and a hash of the last. */
|
|
139
141
|
export function turnPosition(turns) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// The scrub for transcript text that leaves the machine it was typed on.
|
|
2
|
-
import { maskHomePaths } from '
|
|
3
|
-
import { maskEmails, redactSecretsStrict } from '
|
|
2
|
+
import { maskHomePaths } from '../util/home-path.js';
|
|
3
|
+
import { maskEmails, redactSecretsStrict } from '../util/secret-detect.js';
|
|
4
4
|
/** Secrets first, then emails, then home paths: a home-path mask could split a secret so that no pattern matches it. */
|
|
5
5
|
export function scrubForSharing(text) {
|
|
6
6
|
return maskHomePaths(maskEmails(redactSecretsStrict(text)));
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { envHomeDir, processEnv } from '../env.js';
|
|
1
|
+
import { envHomeDir, processEnv } from '../util/env.js';
|
|
2
2
|
import { claudeConfigDir } from '../hooks/shared.js';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import * as path from 'path';
|
|
5
|
-
import { isObjectLike, isStringValue } from '../capture-contract.js';
|
|
5
|
+
import { isObjectLike, isStringValue, readSessionEnd } from '../core/capture-contract.js';
|
|
6
6
|
import { copilotTurn } from './copilot-transcript.js';
|
|
7
|
+
const RECENT_USER_TURNS = 20;
|
|
8
|
+
const RECENT_ASSISTANT_TURNS = 10;
|
|
7
9
|
/**
|
|
8
10
|
* Build a compact text summary from a Claude Code / OpenCode / Copilot JSONL transcript.
|
|
9
11
|
* Keeps plain user messages and the final chunk of assistant text, drops
|
|
@@ -54,69 +56,69 @@ export function collectSessionTurns(jsonl, visit) {
|
|
|
54
56
|
if (!isObjectLike(entry) || !('type' in entry))
|
|
55
57
|
continue;
|
|
56
58
|
visit?.(entry);
|
|
57
|
-
const
|
|
58
|
-
if (
|
|
59
|
-
turns.push(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
turns.push({ role: 'assistant', text: chunks.join('\n') });
|
|
85
|
-
}
|
|
59
|
+
const turn = copilotTurn(entry) ?? claudeCodeTurn(entry) ?? codexTurn(entry);
|
|
60
|
+
if (turn !== null)
|
|
61
|
+
turns.push(turn);
|
|
62
|
+
}
|
|
63
|
+
return turns;
|
|
64
|
+
}
|
|
65
|
+
/** The turn a Claude Code `user` or `assistant` line carries; null for any other line or one with no human or reply text. */
|
|
66
|
+
function claudeCodeTurn(entry) {
|
|
67
|
+
if (entry.type !== 'user' && entry.type !== 'assistant')
|
|
68
|
+
return null;
|
|
69
|
+
const message = 'message' in entry && isObjectLike(entry.message) ? entry.message : undefined;
|
|
70
|
+
if (!message)
|
|
71
|
+
return null;
|
|
72
|
+
const content = 'content' in message ? message.content : undefined;
|
|
73
|
+
if (entry.type === 'user') {
|
|
74
|
+
const text = humanUserText(entry, message);
|
|
75
|
+
return text ? { role: 'user', text } : null;
|
|
76
|
+
}
|
|
77
|
+
if (!Array.isArray(content))
|
|
78
|
+
return null;
|
|
79
|
+
// Keep assistant text blocks; drop thinking + tool_use
|
|
80
|
+
const chunks = [];
|
|
81
|
+
for (const block of content) {
|
|
82
|
+
if (isObjectLike(block)) {
|
|
83
|
+
const blockText = 'type' in block && block.type === 'text' && 'text' in block ? block.text : undefined;
|
|
84
|
+
if (isStringValue(blockText) && blockText.trim()) {
|
|
85
|
+
chunks.push(blockText.trim());
|
|
86
86
|
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return chunks.length > 0 ? { role: 'assistant', text: chunks.join('\n') } : null;
|
|
90
|
+
}
|
|
91
|
+
// Codex rollout transcript shape: response_item -> payload.message
|
|
92
|
+
function codexTurn(entry) {
|
|
93
|
+
if (entry.type !== 'response_item')
|
|
94
|
+
return null;
|
|
95
|
+
const payload = 'payload' in entry && isObjectLike(entry.payload) ? entry.payload : undefined;
|
|
96
|
+
if (!payload || !('type' in payload) || payload.type !== 'message')
|
|
97
|
+
return null;
|
|
98
|
+
const role = 'role' in payload ? payload.role : undefined;
|
|
99
|
+
const content = 'content' in payload ? payload.content : undefined;
|
|
100
|
+
if (!Array.isArray(content))
|
|
101
|
+
return null;
|
|
102
|
+
const chunks = [];
|
|
103
|
+
for (const block of content) {
|
|
104
|
+
if (!isObjectLike(block))
|
|
87
105
|
continue;
|
|
106
|
+
const blockType = 'type' in block ? block.type : undefined;
|
|
107
|
+
const blockText = 'text' in block ? block.text : undefined;
|
|
108
|
+
if (role === 'user' && blockType === 'input_text' && isStringValue(blockText) && blockText.trim()) {
|
|
109
|
+
chunks.push(blockText.trim());
|
|
88
110
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
const payload = 'payload' in entry && isObjectLike(entry.payload) ? entry.payload : undefined;
|
|
92
|
-
if (!payload || !('type' in payload) || payload.type !== 'message')
|
|
93
|
-
continue;
|
|
94
|
-
const role = 'role' in payload ? payload.role : undefined;
|
|
95
|
-
const content = 'content' in payload ? payload.content : undefined;
|
|
96
|
-
if (!Array.isArray(content))
|
|
97
|
-
continue;
|
|
98
|
-
const chunks = [];
|
|
99
|
-
for (const block of content) {
|
|
100
|
-
if (!isObjectLike(block))
|
|
101
|
-
continue;
|
|
102
|
-
const blockType = 'type' in block ? block.type : undefined;
|
|
103
|
-
const blockText = 'text' in block ? block.text : undefined;
|
|
104
|
-
if (role === 'user' && blockType === 'input_text' && isStringValue(blockText) && blockText.trim()) {
|
|
105
|
-
chunks.push(blockText.trim());
|
|
106
|
-
}
|
|
107
|
-
if (role === 'assistant' && blockType === 'output_text' && isStringValue(blockText) && blockText.trim()) {
|
|
108
|
-
chunks.push(blockText.trim());
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
if (chunks.length === 0)
|
|
112
|
-
continue;
|
|
113
|
-
if (role === 'user')
|
|
114
|
-
turns.push({ role: 'user', text: chunks.join('\n') });
|
|
115
|
-
if (role === 'assistant')
|
|
116
|
-
turns.push({ role: 'assistant', text: chunks.join('\n') });
|
|
111
|
+
if (role === 'assistant' && blockType === 'output_text' && isStringValue(blockText) && blockText.trim()) {
|
|
112
|
+
chunks.push(blockText.trim());
|
|
117
113
|
}
|
|
118
114
|
}
|
|
119
|
-
|
|
115
|
+
if (chunks.length === 0)
|
|
116
|
+
return null;
|
|
117
|
+
if (role === 'user')
|
|
118
|
+
return { role: 'user', text: chunks.join('\n') };
|
|
119
|
+
if (role === 'assistant')
|
|
120
|
+
return { role: 'assistant', text: chunks.join('\n') };
|
|
121
|
+
return null;
|
|
120
122
|
}
|
|
121
123
|
export function summariseTranscript(jsonl) {
|
|
122
124
|
return summariseSessionTurns(collectSessionTurns(jsonl));
|
|
@@ -124,8 +126,8 @@ export function summariseTranscript(jsonl) {
|
|
|
124
126
|
/** The last 20 user turns and last 10 replies: session-end is about what was decided near the end, not at the start. */
|
|
125
127
|
export function sessionTail(turns) {
|
|
126
128
|
return {
|
|
127
|
-
users: turns.filter((t) => t.role === 'user').map((t) => t.text).slice(-
|
|
128
|
-
assistants: turns.filter((t) => t.role === 'assistant').map((t) => t.text).slice(-
|
|
129
|
+
users: turns.filter((t) => t.role === 'user').map((t) => t.text).slice(-RECENT_USER_TURNS),
|
|
130
|
+
assistants: turns.filter((t) => t.role === 'assistant').map((t) => t.text).slice(-RECENT_ASSISTANT_TURNS),
|
|
129
131
|
};
|
|
130
132
|
}
|
|
131
133
|
export function summariseSessionTurns(turns) {
|
|
@@ -157,18 +159,10 @@ export function resolveLastSessionTranscript(explicit, stdinText, opts) {
|
|
|
157
159
|
if (explicit)
|
|
158
160
|
return fs.existsSync(explicit) ? explicit : null;
|
|
159
161
|
if (stdinText && stdinText.trim() !== '') {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
if (isStringValue(tp) && fs.existsSync(tp))
|
|
165
|
-
return tp;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
catch {
|
|
169
|
-
// not JSON, but still a payload, so no scan
|
|
170
|
-
}
|
|
171
|
-
return null;
|
|
162
|
+
const receipt = readSessionEnd(stdinText, false);
|
|
163
|
+
// A refused payload is still a payload, so no scan.
|
|
164
|
+
const tp = receipt.status === 'received' ? receipt.input.transcriptPath : null;
|
|
165
|
+
return tp !== null && fs.existsSync(tp) ? tp : null;
|
|
172
166
|
}
|
|
173
167
|
if (!opts.mayScan)
|
|
174
168
|
return null;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
import type { TaskSnapshot } from '../store/rows.js';
|
|
2
|
-
export declare const PRE_COMPACT_TASK_CAP = 200;
|
|
3
|
-
export declare const PRE_COMPACT_SUMMARY_CAP = 2000;
|
|
4
|
-
export declare const PRE_COMPACT_NEXT_STEP_CAP = 500;
|
|
5
2
|
/** The longest each field of {@link transcriptWorkingState} can be, so a check of a sent working state imports these instead of copying them. */
|
|
6
3
|
export declare const WORKING_STATE_CAPS: {
|
|
7
4
|
readonly task: 200;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// A session's working state read from its transcript tail, with no store in the imports, so a hook with no store can derive it.
|
|
2
2
|
import * as fs from 'fs';
|
|
3
|
-
import { maskEmails, redactSecretsStrict } from '../secret-detect.js';
|
|
4
|
-
import { isObjectLike, isStringValue } from '../capture-contract.js';
|
|
5
|
-
import { errorMessage } from '../log.js';
|
|
6
|
-
import { PRE_COMPACT_TAIL_BYTES, readTranscriptTail, truncateCodePointSafe } from '../transcript-tail.js';
|
|
3
|
+
import { maskEmails, redactSecretsStrict } from '../util/secret-detect.js';
|
|
4
|
+
import { isObjectLike, isStringValue } from '../core/capture-contract.js';
|
|
5
|
+
import { errorMessage } from '../util/log.js';
|
|
6
|
+
import { PRE_COMPACT_TAIL_BYTES, readTranscriptTail, truncateCodePointSafe } from '../util/transcript-tail.js';
|
|
7
7
|
import { humanUserText, summariseTranscript } from './transcript.js';
|
|
8
8
|
import { copilotTurn } from './copilot-transcript.js';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
const PRE_COMPACT_TASK_CAP = 200;
|
|
10
|
+
const PRE_COMPACT_SUMMARY_CAP = 2000;
|
|
11
|
+
const PRE_COMPACT_NEXT_STEP_CAP = 500;
|
|
12
12
|
const TRIM_MARKER = '[...earlier turns trimmed]\n';
|
|
13
13
|
/** The longest each field of {@link transcriptWorkingState} can be, so a check of a sent working state imports these instead of copying them. */
|
|
14
14
|
export const WORKING_STATE_CAPS = {
|
|
@@ -23,7 +23,6 @@
|
|
|
23
23
|
* - The audit_prune row itself is NEVER pruned by the same call (it's
|
|
24
24
|
* written AFTER the DELETE WHERE ts < cutoff, so ts > cutoff).
|
|
25
25
|
*/
|
|
26
|
-
import type { DatabaseSyncLike } from './db.js';
|
|
27
26
|
export interface PruneAuditOpts {
|
|
28
27
|
/** Cutoff in days. Rows with `ts < (now - N days)` are deleted. */
|
|
29
28
|
olderThanDays: number;
|
|
@@ -53,7 +52,7 @@ export declare function computeCutoff(days: number, now?: Date): string;
|
|
|
53
52
|
*
|
|
54
53
|
* Throws on invalid inputs (non-positive days, missing tenantId).
|
|
55
54
|
*/
|
|
56
|
-
export declare function pruneAuditLog(
|
|
55
|
+
export declare function pruneAuditLog(hippoRoot: string, opts: PruneAuditOpts): PruneAuditResult;
|
|
57
56
|
/**
|
|
58
57
|
* Parse the `--older-than <value>` flag. Accepts either bare integer days
|
|
59
58
|
* (`30`) or integer with `d` suffix (`30d`). Throws on invalid format.
|
|
@@ -23,13 +23,14 @@
|
|
|
23
23
|
* - The audit_prune row itself is NEVER pruned by the same call (it's
|
|
24
24
|
* written AFTER the DELETE WHERE ts < cutoff, so ts > cutoff).
|
|
25
25
|
*/
|
|
26
|
-
import {
|
|
26
|
+
import { pruneAuditRows } from '../store/audit.js';
|
|
27
|
+
import { DAY_MS } from '../util/time.js';
|
|
27
28
|
/**
|
|
28
29
|
* Compute the cutoff ISO timestamp for an N-days-ago cutoff. Exported for
|
|
29
30
|
* testability so tests can pin "now" without mocking Date.
|
|
30
31
|
*/
|
|
31
32
|
export function computeCutoff(days, now = new Date()) {
|
|
32
|
-
const cutoff = new Date(now.getTime() - days *
|
|
33
|
+
const cutoff = new Date(now.getTime() - days * DAY_MS);
|
|
33
34
|
return cutoff.toISOString();
|
|
34
35
|
}
|
|
35
36
|
function isTenantIdString(value) {
|
|
@@ -41,7 +42,7 @@ function isTenantIdString(value) {
|
|
|
41
42
|
*
|
|
42
43
|
* Throws on invalid inputs (non-positive days, missing tenantId).
|
|
43
44
|
*/
|
|
44
|
-
export function pruneAuditLog(
|
|
45
|
+
export function pruneAuditLog(hippoRoot, opts) {
|
|
45
46
|
if (!Number.isFinite(opts.olderThanDays) || opts.olderThanDays <= 0) {
|
|
46
47
|
throw new Error(`pruneAuditLog: olderThanDays must be a positive number, got ${opts.olderThanDays}`);
|
|
47
48
|
}
|
|
@@ -51,42 +52,7 @@ export function pruneAuditLog(db, opts) {
|
|
|
51
52
|
const dryRun = opts.dryRun === true;
|
|
52
53
|
const actor = opts.actor ?? 'cli';
|
|
53
54
|
const cutoff = computeCutoff(opts.olderThanDays);
|
|
54
|
-
|
|
55
|
-
if (dryRun) {
|
|
56
|
-
// Dry-run: just count, no DELETE.
|
|
57
|
-
// SAFETY: row comes from `SELECT COUNT(*) AS c` above; COUNT(*) always
|
|
58
|
-
// yields exactly one row with a numeric `c` column (number or bigint
|
|
59
|
-
// depending on the node:sqlite driver's integer handling).
|
|
60
|
-
const row = db
|
|
61
|
-
.prepare(`SELECT COUNT(*) AS c FROM audit_log WHERE tenant_id = ? AND ts < ?`)
|
|
62
|
-
.get(opts.tenantId, cutoff);
|
|
63
|
-
count = Number(row.c);
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
db.exec('BEGIN IMMEDIATE');
|
|
67
|
-
try {
|
|
68
|
-
const result = db
|
|
69
|
-
.prepare(`DELETE FROM audit_log WHERE tenant_id = ? AND ts < ?`)
|
|
70
|
-
.run(opts.tenantId, cutoff);
|
|
71
|
-
count = Number(result.changes ?? 0);
|
|
72
|
-
// Record the prune itself in the audit trail. This row has ts = now,
|
|
73
|
-
// so it's not eligible for the cutoff that was just applied.
|
|
74
|
-
appendAuditEvent(db, {
|
|
75
|
-
tenantId: opts.tenantId,
|
|
76
|
-
actor,
|
|
77
|
-
op: 'audit_prune',
|
|
78
|
-
metadata: { cutoff, count, dryRun: false, olderThanDays: opts.olderThanDays },
|
|
79
|
-
});
|
|
80
|
-
db.exec('COMMIT');
|
|
81
|
-
}
|
|
82
|
-
catch (e) {
|
|
83
|
-
try {
|
|
84
|
-
db.exec('ROLLBACK');
|
|
85
|
-
}
|
|
86
|
-
catch { /* already rolled back; keep the original error */ }
|
|
87
|
-
throw e;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
55
|
+
const count = pruneAuditRows(hippoRoot, { tenantId: opts.tenantId, cutoff, actor, olderThanDays: opts.olderThanDays, dryRun });
|
|
90
56
|
return { cutoff, count, dryRun };
|
|
91
57
|
}
|
|
92
58
|
/**
|
package/dist/cli/audit.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { type CommandContext } from './
|
|
2
|
-
export declare function handleAudit({ hippoRoot, args, flags }: CommandContext): void
|
|
1
|
+
import { type CommandContext } from './flag-values.js';
|
|
2
|
+
export declare function handleAudit({ hippoRoot, args, flags }: CommandContext): Promise<void>;
|
|
3
3
|
//# sourceMappingURL=audit.d.ts.map
|
package/dist/cli/audit.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
// `hippo audit`: list and prune the audit log.
|
|
2
2
|
import { loadAllEntries } from '../store/entry-reads.js';
|
|
3
3
|
import { deleteEntry, memoriesBackingObjects } from '../store/delete-and-batch.js';
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import { pruneAuditLog, parseOlderThanFlag } from '../audit-prune.js';
|
|
4
|
+
import { auditMemories, AUDIT_OPS } from '../store/audit.js';
|
|
5
|
+
import * as api from '../api/index.js';
|
|
6
|
+
import { resolveTenantId } from '../store/tenant.js';
|
|
7
|
+
import { pruneAuditLog, parseOlderThanFlag } from './audit-prune.js';
|
|
9
8
|
import { printError } from './output.js';
|
|
9
|
+
import { boolFlag, flagIsTrue, stringFlag } from './flag-values.js';
|
|
10
10
|
import { requireInit, resolveAuthRoot } from './shared.js';
|
|
11
|
-
import { repairAutomaticMemories } from '
|
|
12
|
-
import { getGlobalRoot } from '../shared.js';
|
|
11
|
+
import { repairAutomaticMemories } from './quality-repair.js';
|
|
12
|
+
import { getGlobalRoot } from '../sharing/shared.js';
|
|
13
|
+
import { errorMessage } from '../util/log.js';
|
|
13
14
|
// ---------------------------------------------------------------------------
|
|
14
15
|
// Audit log subcommands (`hippo audit list`)
|
|
15
16
|
// ---------------------------------------------------------------------------
|
|
@@ -19,23 +20,17 @@ function formatAuditRow(ev) {
|
|
|
19
20
|
const meta = JSON.stringify(ev.metadata ?? {});
|
|
20
21
|
return `${ev.ts} ${ev.actor} ${ev.op} ${target} ${meta}`;
|
|
21
22
|
}
|
|
22
|
-
function
|
|
23
|
-
const
|
|
24
|
-
const asJson = Boolean(flags['json']);
|
|
25
|
-
const tenantId = resolveTenantId({});
|
|
26
|
-
const opFlag = typeof flags['op'] === 'string' ? flags['op'] : undefined;
|
|
23
|
+
function readAuditOp(flags) {
|
|
24
|
+
const opFlag = stringFlag(flags, 'op');
|
|
27
25
|
if (opFlag && !VALID_AUDIT_OPS.has(opFlag)) {
|
|
28
26
|
// Built from the Set so the message cannot drift from the valid ops.
|
|
29
27
|
const expected = Array.from(VALID_AUDIT_OPS).join(' | ');
|
|
30
28
|
printError(`Unknown --op value: ${opFlag}. Expected one of: ${expected}.`);
|
|
31
29
|
process.exit(1);
|
|
32
30
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
printError(`Invalid --since: ${since} (expected an ISO timestamp like 2026-04-22 or 2026-04-22T12:00:00Z).`);
|
|
37
|
-
process.exit(1);
|
|
38
|
-
}
|
|
31
|
+
return opFlag;
|
|
32
|
+
}
|
|
33
|
+
function readAuditLimit(flags) {
|
|
39
34
|
const limitRaw = flags['limit'];
|
|
40
35
|
let limit = 100;
|
|
41
36
|
if (limitRaw !== undefined && typeof limitRaw !== 'boolean') {
|
|
@@ -50,8 +45,21 @@ function cmdAuditList(hippoRoot, flags) {
|
|
|
50
45
|
printError(`--limit must be between 1 and 10000 (got ${limit}).`);
|
|
51
46
|
process.exit(1);
|
|
52
47
|
}
|
|
48
|
+
return limit;
|
|
49
|
+
}
|
|
50
|
+
async function cmdAuditList(hippoRoot, flags) {
|
|
51
|
+
const root = resolveAuthRoot(hippoRoot, flags);
|
|
52
|
+
const asJson = boolFlag(flags, 'json');
|
|
53
|
+
const tenantId = resolveTenantId({});
|
|
54
|
+
const op = readAuditOp(flags);
|
|
55
|
+
const since = stringFlag(flags, 'since');
|
|
56
|
+
if (since !== undefined && !Number.isFinite(new Date(since).getTime())) {
|
|
57
|
+
printError(`Invalid --since: ${since} (expected an ISO timestamp like 2026-04-22 or 2026-04-22T12:00:00Z).`);
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
const limit = readAuditLimit(flags);
|
|
53
61
|
const ctx = { hippoRoot: root, tenantId, actor: { subject: 'cli', role: 'admin' } };
|
|
54
|
-
const events = api.auditList(ctx, { op, since, limit });
|
|
62
|
+
const events = await api.auditList(ctx, { op, since, limit });
|
|
55
63
|
if (asJson) {
|
|
56
64
|
console.log(JSON.stringify(events));
|
|
57
65
|
return;
|
|
@@ -66,7 +74,7 @@ function cmdAuditList(hippoRoot, flags) {
|
|
|
66
74
|
}
|
|
67
75
|
}
|
|
68
76
|
function cmdAuditPrune(hippoRoot, flags) {
|
|
69
|
-
const olderThanRaw =
|
|
77
|
+
const olderThanRaw = stringFlag(flags, 'older-than') ?? '';
|
|
70
78
|
if (!olderThanRaw) {
|
|
71
79
|
printError('Usage: hippo audit prune --older-than <Nd> [--dry-run] [--tenant <t>]');
|
|
72
80
|
process.exit(1);
|
|
@@ -76,22 +84,13 @@ function cmdAuditPrune(hippoRoot, flags) {
|
|
|
76
84
|
olderThanDays = parseOlderThanFlag(olderThanRaw);
|
|
77
85
|
}
|
|
78
86
|
catch (e) {
|
|
79
|
-
printError(e
|
|
87
|
+
printError(errorMessage(e));
|
|
80
88
|
process.exit(1);
|
|
81
89
|
}
|
|
82
|
-
const tenantId =
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
const
|
|
86
|
-
const asJson = Boolean(flags['json']);
|
|
87
|
-
const db = openHippoDb(hippoRoot);
|
|
88
|
-
let result;
|
|
89
|
-
try {
|
|
90
|
-
result = pruneAuditLog(db, { olderThanDays, tenantId, dryRun, actor: 'cli' });
|
|
91
|
-
}
|
|
92
|
-
finally {
|
|
93
|
-
closeHippoDb(db);
|
|
94
|
-
}
|
|
90
|
+
const tenantId = stringFlag(flags, 'tenant')?.trim() || resolveTenantId({});
|
|
91
|
+
const dryRun = flagIsTrue(flags, 'dry-run');
|
|
92
|
+
const asJson = boolFlag(flags, 'json');
|
|
93
|
+
const result = pruneAuditLog(hippoRoot, { olderThanDays, tenantId, dryRun, actor: 'cli' });
|
|
95
94
|
if (asJson) {
|
|
96
95
|
console.log(JSON.stringify(result));
|
|
97
96
|
return;
|
|
@@ -102,10 +101,10 @@ function cmdAuditPrune(hippoRoot, flags) {
|
|
|
102
101
|
console.log('(dry-run; re-run without --dry-run to actually delete)');
|
|
103
102
|
}
|
|
104
103
|
}
|
|
105
|
-
function cmdAuditLog(hippoRoot, args, flags) {
|
|
104
|
+
async function cmdAuditLog(hippoRoot, args, flags) {
|
|
106
105
|
const sub = args[0];
|
|
107
106
|
if (sub === 'list') {
|
|
108
|
-
cmdAuditList(hippoRoot, flags);
|
|
107
|
+
await cmdAuditList(hippoRoot, flags);
|
|
109
108
|
return;
|
|
110
109
|
}
|
|
111
110
|
if (sub === 'prune') {
|
|
@@ -115,41 +114,59 @@ function cmdAuditLog(hippoRoot, args, flags) {
|
|
|
115
114
|
printError(`Unknown audit subcommand: ${sub}. Expected: list | prune.`);
|
|
116
115
|
process.exit(1);
|
|
117
116
|
}
|
|
118
|
-
|
|
117
|
+
function auditRepair(hippoRoot, flags) {
|
|
118
|
+
const apply = flagIsTrue(flags, 'apply') && flags['dry-run'] !== true;
|
|
119
|
+
const result = repairAutomaticMemories(flags['global'] ? getGlobalRoot() : hippoRoot, { tenantId: resolveTenantId({}), apply });
|
|
120
|
+
if (flags['json']) {
|
|
121
|
+
console.log(JSON.stringify(result));
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
console.log(`Quality repair ${apply ? 'apply' : 'preview'}: ${result.issues.length} issue(s) across ${result.total} memories.`);
|
|
125
|
+
for (const issue of result.issues)
|
|
126
|
+
console.log(` [${issue.disposition}] ${issue.id}: ${issue.reason}${issue.protection ? ` (${issue.protection})` : ''}`);
|
|
127
|
+
for (const blocker of result.blockers)
|
|
128
|
+
console.log(` Blocked: ${blocker}. Repair never upgrades a store; any other hippo command does, then run repair again.`);
|
|
129
|
+
const restore = `hippo dormant restore <id>${flags['global'] ? ' --global' : ''}`;
|
|
130
|
+
if (result.backup)
|
|
131
|
+
console.log(`Backup: ${result.backup}\nMoved ${result.appliedIds.length} memories to dormant storage. Recovery: ${restore}.`);
|
|
132
|
+
else if (apply && result.supported)
|
|
133
|
+
console.log('Nothing moved: no unprotected memory has a certain defect.');
|
|
134
|
+
for (const warning of result.warnings)
|
|
135
|
+
console.log(`Warning: ${warning}`);
|
|
136
|
+
if (!apply)
|
|
137
|
+
console.log('Preview only. Add --apply to move set-aside memories to dormant storage. Pin a review memory to keep it.');
|
|
138
|
+
}
|
|
139
|
+
function fixAuditErrors(hippoRoot, result, flags) {
|
|
140
|
+
const errors = result.issues.filter(i => i.severity === 'error');
|
|
141
|
+
if (errors.length > 0 && flagIsTrue(flags, 'dry-run')) {
|
|
142
|
+
console.log(`\nWould remove ${errors.length} error-severity memories (dry run, nothing deleted).`);
|
|
143
|
+
console.log(`${result.issues.length - errors.length} warnings would remain (review manually).`);
|
|
144
|
+
}
|
|
145
|
+
else if (errors.length > 0) {
|
|
146
|
+
const removedCount = errors.filter((issue) => deleteEntry(hippoRoot, issue.memoryId, { reason: `audit --fix: ${issue.reason}`, automatic: true })).length;
|
|
147
|
+
console.log(`\nRemoved ${removedCount} error-severity memories.`);
|
|
148
|
+
console.log(`${result.issues.length - errors.length} warnings remain (review manually).`);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
console.log(`\nNo error-severity issues. Warnings require manual review.`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
export async function handleAudit({ hippoRoot, args, flags }) {
|
|
119
155
|
if (args[0] === 'repair') {
|
|
120
|
-
|
|
121
|
-
const result = repairAutomaticMemories(flags['global'] ? getGlobalRoot() : hippoRoot, { tenantId: resolveTenantId({}), apply });
|
|
122
|
-
if (flags['json']) {
|
|
123
|
-
console.log(JSON.stringify(result));
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
console.log(`Quality repair ${apply ? 'apply' : 'preview'}: ${result.issues.length} issue(s) across ${result.total} memories.`);
|
|
127
|
-
for (const issue of result.issues)
|
|
128
|
-
console.log(` [${issue.disposition}] ${issue.id}: ${issue.reason}${issue.protection ? ` (${issue.protection})` : ''}`);
|
|
129
|
-
for (const blocker of result.blockers)
|
|
130
|
-
console.log(` Blocked: ${blocker}. Repair never upgrades a store; any other hippo command does, then run repair again.`);
|
|
131
|
-
const restore = `hippo dormant restore <id>${flags['global'] ? ' --global' : ''}`;
|
|
132
|
-
if (result.backup)
|
|
133
|
-
console.log(`Backup: ${result.backup}\nMoved ${result.appliedIds.length} memories to dormant storage. Recovery: ${restore}.`);
|
|
134
|
-
else if (apply && result.supported)
|
|
135
|
-
console.log('Nothing moved: no unprotected memory has a certain defect.');
|
|
136
|
-
for (const warning of result.warnings)
|
|
137
|
-
console.log(`Warning: ${warning}`);
|
|
138
|
-
if (!apply)
|
|
139
|
-
console.log('Preview only. Add --apply to move set-aside memories to dormant storage. Pin a review memory to keep it.');
|
|
156
|
+
auditRepair(hippoRoot, flags);
|
|
140
157
|
return;
|
|
141
158
|
}
|
|
142
159
|
// `audit list` and `audit prune` -> audit-log subcommands.
|
|
143
160
|
// Other forms (no sub, --fix) keep the existing memory-quality auditor
|
|
144
161
|
// for backwards compatibility.
|
|
145
162
|
if (args[0] === 'list' || args[0] === 'prune') {
|
|
146
|
-
cmdAuditLog(hippoRoot, args, flags);
|
|
163
|
+
await cmdAuditLog(hippoRoot, args, flags);
|
|
147
164
|
return;
|
|
148
165
|
}
|
|
149
166
|
requireInit(hippoRoot);
|
|
150
167
|
const entries = loadAllEntries(hippoRoot, resolveTenantId({}));
|
|
151
168
|
const result = auditMemories(entries, memoriesBackingObjects(hippoRoot));
|
|
152
|
-
const shouldFix =
|
|
169
|
+
const shouldFix = boolFlag(flags, 'fix');
|
|
153
170
|
if (result.issues.length === 0) {
|
|
154
171
|
console.log(`All ${result.total} memories passed quality checks.`);
|
|
155
172
|
}
|
|
@@ -161,19 +178,7 @@ export function handleAudit({ hippoRoot, args, flags }) {
|
|
|
161
178
|
console.log(` "${issue.content.slice(0, 80)}${issue.content.length > 80 ? '...' : ''}"`);
|
|
162
179
|
}
|
|
163
180
|
if (shouldFix) {
|
|
164
|
-
|
|
165
|
-
if (errors.length > 0 && flags['dry-run'] === true) {
|
|
166
|
-
console.log(`\nWould remove ${errors.length} error-severity memories (dry run, nothing deleted).`);
|
|
167
|
-
console.log(`${result.issues.length - errors.length} warnings would remain (review manually).`);
|
|
168
|
-
}
|
|
169
|
-
else if (errors.length > 0) {
|
|
170
|
-
const removedCount = errors.filter((issue) => deleteEntry(hippoRoot, issue.memoryId, { reason: `audit --fix: ${issue.reason}`, automatic: true })).length;
|
|
171
|
-
console.log(`\nRemoved ${removedCount} error-severity memories.`);
|
|
172
|
-
console.log(`${result.issues.length - errors.length} warnings remain (review manually).`);
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
console.log(`\nNo error-severity issues. Warnings require manual review.`);
|
|
176
|
-
}
|
|
181
|
+
fixAuditErrors(hippoRoot, result, flags);
|
|
177
182
|
}
|
|
178
183
|
else {
|
|
179
184
|
console.log(`\nRun with --fix to auto-remove error-severity issues.`);
|
package/dist/cli/auth.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
import { type CliFlags } from './flag-values.js';
|
|
2
|
+
export declare function cmdAuth(hippoRoot: string, args: string[], flags: CliFlags): void;
|
|
2
3
|
//# sourceMappingURL=auth.d.ts.map
|