hippo-memory 1.68.0 → 1.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.d.ts +3 -1
- package/dist/agent-memories/copilot.js +5 -4
- package/dist/agent-memories/files.js +3 -2
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +14 -4
- package/dist/api/context-select.js +50 -60
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +113 -85
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +4 -13
- package/dist/api/forget.js +13 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +9 -46
- package/dist/api/outcome.js +15 -57
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/promote.d.ts +7 -18
- package/dist/api/promote.js +30 -152
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +12 -13
- package/dist/api/remember.js +38 -27
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +1 -1
- package/dist/capture/command.js +54 -41
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +4 -1
- package/dist/capture/compact.js +59 -22
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.d.ts +3 -0
- package/dist/capture/copilot-transcript.js +9 -2
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.d.ts +13 -0
- package/dist/capture/session-worker.js +196 -0
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +265 -191
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +111 -45
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +8 -3
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -82
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -48
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -90
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/core/capture-contract.js +149 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +19 -5
- package/dist/{memory.js → core/memory.js} +117 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +5 -0
- package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +14 -15
- package/dist/hooks/copilot.d.ts +48 -13
- package/dist/hooks/copilot.js +124 -39
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +3 -1
- package/dist/hooks/json-hooks.js +40 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +7 -5
- package/dist/hooks/shared.js +19 -8
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.d.ts +2 -2
- package/dist/mcp/memory-tools.js +12 -31
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +65 -63
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -1
- package/dist/search/boosts.js +34 -13
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +21 -20
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +3 -2
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +41 -50
- package/dist/server.js +26 -560
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +12 -6
- package/dist/store/audit-event.js +6 -5
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +6 -3
- package/dist/store/handoffs.js +70 -31
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +8 -4
- package/dist/store/open.js +34 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +5 -3
- package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
- package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +43 -36
- package/dist/store/sessions.d.ts +18 -2
- package/dist/store/sessions.js +83 -46
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/sqlite/entry-writes-group.js +170 -0
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +28 -0
- package/dist/store/sqlite/executor.js +286 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +26 -0
- package/dist/store/sqlite/store.js +295 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +17 -2
- package/dist/{env.js → util/env.js} +22 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/capture-contract.js +0 -49
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store-port.d.ts +0 -191
- package/dist/store-port.js +0 -166
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { envSlackSigningSecret, envSlackSigningSecretPrevious } from '../../env.js';
|
|
1
|
+
import { envSlackSigningSecret, envSlackSigningSecretPrevious } from '../../util/env.js';
|
|
2
2
|
import { verifySlackSignature } from './signature.js';
|
|
3
3
|
import { isSlackEventEnvelope, isSlackMessageEvent } from './types.js';
|
|
4
4
|
import { ingestMessage } from './ingest.js';
|
|
5
5
|
import { handleMessageDeleted } from './deletion.js';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { HttpError, JSON_HEADERS, isHeaderString,
|
|
6
|
+
import { parkInDlq } from '../dlq.js';
|
|
7
|
+
import { slackDlq } from './dlq.js';
|
|
8
|
+
import { resolveTenantForSlackTeam } from './tenant-routing.js';
|
|
9
|
+
import { resolveTenantId } from '../../store/tenant.js';
|
|
10
|
+
import { HttpError, JSON_HEADERS, isHeaderString, closeIfBodyUnread, readWebhookBody, sendJson } from '../../util/http-util.js';
|
|
11
|
+
import { isJsonObject } from '../../util/json.js';
|
|
11
12
|
/**
|
|
12
13
|
* Slack Events API webhook. Auth is signature-based (HMAC over the raw
|
|
13
14
|
* body with SLACK_SIGNING_SECRET); Bearer is NOT required, which is why
|
|
@@ -27,10 +28,12 @@ import { HttpError, JSON_HEADERS, isHeaderString, isJsonObjectRecord, readBody,
|
|
|
27
28
|
*
|
|
28
29
|
* Bearer auth is skipped on purpose: server.ts checks isPublicRoute before calling this.
|
|
29
30
|
*/
|
|
30
|
-
export async function handleSlackEventsWebhook(
|
|
31
|
-
const
|
|
31
|
+
export async function handleSlackEventsWebhook(request, store) {
|
|
32
|
+
const { req, res, opts } = request;
|
|
33
|
+
// Secret and headers before the body, so a caller with neither cannot make the server buffer one.
|
|
32
34
|
const secret = envSlackSigningSecret();
|
|
33
35
|
if (!secret) {
|
|
36
|
+
closeIfBodyUnread(request);
|
|
34
37
|
res.writeHead(404, JSON_HEADERS);
|
|
35
38
|
res.end(JSON.stringify({ error: 'not found' }));
|
|
36
39
|
return;
|
|
@@ -40,77 +43,76 @@ export async function handleSlackEventsWebhook({ req, res, opts }) {
|
|
|
40
43
|
const tsHdr = req.headers['x-slack-request-timestamp'];
|
|
41
44
|
const sigStr = isHeaderString(sig) ? sig : null;
|
|
42
45
|
const tsStr = isHeaderString(tsHdr) ? tsHdr : null;
|
|
43
|
-
if (sigStr === null ||
|
|
44
|
-
|
|
45
|
-
!verifySlackSignature({
|
|
46
|
-
rawBody,
|
|
47
|
-
timestamp: tsStr,
|
|
48
|
-
signature: sigStr,
|
|
49
|
-
signingSecret: secret,
|
|
50
|
-
previousSecret,
|
|
51
|
-
})) {
|
|
46
|
+
if (sigStr === null || tsStr === null) {
|
|
47
|
+
closeIfBodyUnread(request);
|
|
52
48
|
throw new HttpError(401, 'invalid Slack signature');
|
|
53
49
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
error: park.error,
|
|
64
|
-
bucket: park.bucket,
|
|
65
|
-
signature: d.signature,
|
|
66
|
-
slackTimestamp: d.slackTimestamp,
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
finally {
|
|
70
|
-
closeHippoDb(db);
|
|
50
|
+
const rawBody = await readWebhookBody(request);
|
|
51
|
+
if (!verifySlackSignature({
|
|
52
|
+
rawBody,
|
|
53
|
+
timestamp: tsStr,
|
|
54
|
+
signature: sigStr,
|
|
55
|
+
signingSecret: secret,
|
|
56
|
+
previousSecret,
|
|
57
|
+
})) {
|
|
58
|
+
throw new HttpError(401, 'invalid Slack signature');
|
|
71
59
|
}
|
|
60
|
+
await routeSignedSlackPayload({ hippoRoot: opts.hippoRoot, store, res, rawBody, signature: sigStr, slackTimestamp: tsStr });
|
|
61
|
+
}
|
|
62
|
+
async function parkAndAck(d, park) {
|
|
63
|
+
const row = {
|
|
64
|
+
tenantId: park.tenantId,
|
|
65
|
+
teamId: park.teamId,
|
|
66
|
+
rawPayload: d.rawBody,
|
|
67
|
+
error: park.error,
|
|
68
|
+
bucket: park.bucket,
|
|
69
|
+
signature: d.signature,
|
|
70
|
+
slackTimestamp: d.slackTimestamp,
|
|
71
|
+
};
|
|
72
|
+
await parkInDlq(slackDlq, d.hippoRoot, row, d.store);
|
|
72
73
|
sendJson(d.res, 200, { ok: true, status: 'dlq' });
|
|
73
74
|
}
|
|
74
|
-
function
|
|
75
|
-
const { rawBody, res } = d;
|
|
75
|
+
function teamIdInRawBody(rawBody) {
|
|
76
76
|
// Cheap regex extracts team_id from a (possibly malformed) raw body so the
|
|
77
77
|
// DLQ row carries it for triage even when JSON.parse fails.
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
body = JSON.parse(rawBody);
|
|
85
|
-
}
|
|
86
|
-
catch {
|
|
87
|
-
parkUnparseable(d, teamIdFromRaw);
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
if (isJsonObjectRecord(body)) {
|
|
78
|
+
const m = rawBody.match(/"team_id"\s*:\s*"([^"]+)"/);
|
|
79
|
+
return m ? m[1] : null;
|
|
80
|
+
}
|
|
81
|
+
/** Answers Slack's URL-verification handshake; false when the payload is anything else. */
|
|
82
|
+
function answerUrlVerification(res, body) {
|
|
83
|
+
if (isJsonObject(body)) {
|
|
91
84
|
const bodyRecord = body;
|
|
92
85
|
if (bodyRecord.type === 'url_verification') {
|
|
93
86
|
sendJson(res, 200, {
|
|
94
87
|
challenge: String(bodyRecord.challenge ?? ''),
|
|
95
88
|
});
|
|
96
|
-
return;
|
|
89
|
+
return true;
|
|
97
90
|
}
|
|
98
91
|
}
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
async function routeSignedSlackPayload(d) {
|
|
95
|
+
const { rawBody, res } = d;
|
|
96
|
+
const teamIdFromRaw = teamIdInRawBody(rawBody);
|
|
97
|
+
let body;
|
|
98
|
+
try {
|
|
99
|
+
body = JSON.parse(rawBody);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
await parkUnparseable(d, teamIdFromRaw);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (answerUrlVerification(res, body))
|
|
106
|
+
return;
|
|
99
107
|
// Resolve tenant, failing closed: when slack_workspaces is non-empty
|
|
100
108
|
// and the team_id is unknown, resolveTenantForTeam returns null and we
|
|
101
109
|
// park the envelope in slack_dlq with bucket='unroutable'. Mandatory ACK
|
|
102
110
|
// 200 so Slack stops retrying; do NOT call ingest.
|
|
103
111
|
let resolvedTenant = null;
|
|
104
112
|
if (body !== undefined && isSlackEventEnvelope(body)) {
|
|
105
|
-
|
|
106
|
-
try {
|
|
107
|
-
resolvedTenant = resolveTenantForTeam(db, body.team_id);
|
|
108
|
-
}
|
|
109
|
-
finally {
|
|
110
|
-
closeHippoDb(db);
|
|
111
|
-
}
|
|
113
|
+
resolvedTenant = await resolveTenantForSlackTeam(d.hippoRoot, body.team_id, d.store);
|
|
112
114
|
if (resolvedTenant === null) {
|
|
113
|
-
|
|
115
|
+
await parkAndAck(d, {
|
|
114
116
|
tenantId: null, // unroutable - stored as '__unroutable__'
|
|
115
117
|
teamId: body.team_id,
|
|
116
118
|
error: `unroutable team_id: ${body.team_id}`,
|
|
@@ -127,9 +129,10 @@ function routeSignedSlackPayload(d) {
|
|
|
127
129
|
hippoRoot: d.hippoRoot,
|
|
128
130
|
tenantId: resolvedTenant,
|
|
129
131
|
actor: { subject: 'connector:slack', role: 'admin' },
|
|
132
|
+
store: d.store,
|
|
130
133
|
};
|
|
131
134
|
if (body === undefined || !isSlackEventEnvelope(body)) {
|
|
132
|
-
|
|
135
|
+
await parkAndAck(d, {
|
|
133
136
|
tenantId: ctx.tenantId,
|
|
134
137
|
teamId: teamIdFromRaw,
|
|
135
138
|
error: 'not an event_callback envelope',
|
|
@@ -137,35 +140,25 @@ function routeSignedSlackPayload(d) {
|
|
|
137
140
|
});
|
|
138
141
|
return;
|
|
139
142
|
}
|
|
140
|
-
dispatchSlackEvent(d, ctx, body);
|
|
143
|
+
await dispatchSlackEvent(d, ctx, body);
|
|
141
144
|
}
|
|
142
|
-
function parkUnparseable(d, teamIdFromRaw) {
|
|
145
|
+
async function parkUnparseable(d, teamIdFromRaw) {
|
|
143
146
|
// Attribute the parse failure to the originating workspace via the regex-extracted
|
|
144
147
|
// team_id; a null or unknown team writes tenantId=null, which lands as '__unroutable__'.
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
error: 'invalid JSON',
|
|
153
|
-
bucket: 'parse_error',
|
|
154
|
-
signature: d.signature,
|
|
155
|
-
slackTimestamp: d.slackTimestamp,
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
finally {
|
|
159
|
-
closeHippoDb(db);
|
|
160
|
-
}
|
|
161
|
-
sendJson(d.res, 200, { ok: true, status: 'dlq' });
|
|
148
|
+
const parseFailTenant = teamIdFromRaw !== null ? await resolveTenantForSlackTeam(d.hippoRoot, teamIdFromRaw, d.store) : null;
|
|
149
|
+
await parkAndAck(d, {
|
|
150
|
+
tenantId: parseFailTenant, // null → '__unroutable__' sentinel
|
|
151
|
+
teamId: teamIdFromRaw,
|
|
152
|
+
error: 'invalid JSON',
|
|
153
|
+
bucket: 'parse_error',
|
|
154
|
+
});
|
|
162
155
|
}
|
|
163
|
-
function dispatchSlackEvent(d, ctx, body) {
|
|
156
|
+
async function dispatchSlackEvent(d, ctx, body) {
|
|
164
157
|
const { res } = d;
|
|
165
158
|
const inner = body.event;
|
|
166
159
|
if (isSlackMessageEvent(inner)) {
|
|
167
160
|
if (inner.subtype === 'message_deleted' && inner.deleted_ts) {
|
|
168
|
-
const r = handleMessageDeleted(ctx, {
|
|
161
|
+
const r = await handleMessageDeleted(ctx, {
|
|
169
162
|
teamId: body.team_id,
|
|
170
163
|
channelId: inner.channel,
|
|
171
164
|
deletedTs: inner.deleted_ts,
|
|
@@ -174,7 +167,7 @@ function dispatchSlackEvent(d, ctx, body) {
|
|
|
174
167
|
sendJson(res, 200, { ok: true, status: r.status });
|
|
175
168
|
return;
|
|
176
169
|
}
|
|
177
|
-
const r = ingestMessage(ctx, {
|
|
170
|
+
const r = await ingestMessage(ctx, {
|
|
178
171
|
teamId: body.team_id,
|
|
179
172
|
// channel privacy isn't on the inner event; use channel_type as a
|
|
180
173
|
// proxy. 'group'|'im'|'mpim' → private. 'channel' → public. Unknown
|
|
@@ -191,7 +184,7 @@ function dispatchSlackEvent(d, ctx, body) {
|
|
|
191
184
|
sendJson(res, 200, { ok: true, status: r.status, memoryId: r.memoryId });
|
|
192
185
|
return;
|
|
193
186
|
}
|
|
194
|
-
|
|
187
|
+
await parkAndAck(d, {
|
|
195
188
|
tenantId: ctx.tenantId,
|
|
196
189
|
teamId: body.team_id,
|
|
197
190
|
error: `unhandled event type: ${inner.type ?? 'unknown'}`,
|
|
@@ -18,12 +18,9 @@
|
|
|
18
18
|
* - `remove` returns a boolean for the CLI to distinguish "removed"
|
|
19
19
|
* from "not found" without an extra SELECT.
|
|
20
20
|
*/
|
|
21
|
-
import type
|
|
22
|
-
export
|
|
23
|
-
|
|
24
|
-
tenantId: string;
|
|
25
|
-
addedAt: string;
|
|
26
|
-
}
|
|
21
|
+
import { type SlackWorkspace } from '../../store/connectors/slack.js';
|
|
22
|
+
export type { SlackWorkspace };
|
|
23
|
+
export { listSlackWorkspaces as listWorkspaces, removeSlackWorkspace as removeWorkspace } from '../../store/connectors/slack.js';
|
|
27
24
|
export interface AddWorkspaceOpts {
|
|
28
25
|
teamId: string;
|
|
29
26
|
tenantId: string;
|
|
@@ -32,15 +29,5 @@ export interface AddWorkspaceOpts {
|
|
|
32
29
|
* Register or re-register a Slack team → tenant mapping. Upserts on
|
|
33
30
|
* team_id conflict (operators move workspaces between tenants).
|
|
34
31
|
*/
|
|
35
|
-
export declare function addWorkspace(
|
|
36
|
-
/**
|
|
37
|
-
* List all registered workspaces, sorted by team_id for stable output.
|
|
38
|
-
*/
|
|
39
|
-
export declare function listWorkspaces(db: DatabaseSyncLike): SlackWorkspace[];
|
|
40
|
-
/**
|
|
41
|
-
* Remove a workspace registration by team_id. Returns true if a row was
|
|
42
|
-
* deleted, false if no row matched (so the CLI can report not-found
|
|
43
|
-
* without a separate lookup).
|
|
44
|
-
*/
|
|
45
|
-
export declare function removeWorkspace(db: DatabaseSyncLike, teamId: string): boolean;
|
|
32
|
+
export declare function addWorkspace(hippoRoot: string, opts: AddWorkspaceOpts): SlackWorkspace;
|
|
46
33
|
//# sourceMappingURL=workspaces.d.ts.map
|
|
@@ -18,43 +18,13 @@
|
|
|
18
18
|
* - `remove` returns a boolean for the CLI to distinguish "removed"
|
|
19
19
|
* from "not found" without an extra SELECT.
|
|
20
20
|
*/
|
|
21
|
+
import { upsertSlackWorkspace } from '../../store/connectors/slack.js';
|
|
22
|
+
export { listSlackWorkspaces as listWorkspaces, removeSlackWorkspace as removeWorkspace } from '../../store/connectors/slack.js';
|
|
21
23
|
/**
|
|
22
24
|
* Register or re-register a Slack team → tenant mapping. Upserts on
|
|
23
25
|
* team_id conflict (operators move workspaces between tenants).
|
|
24
26
|
*/
|
|
25
|
-
export function addWorkspace(
|
|
26
|
-
|
|
27
|
-
db.prepare(`INSERT INTO slack_workspaces (team_id, tenant_id, added_at)
|
|
28
|
-
VALUES (?, ?, ?)
|
|
29
|
-
ON CONFLICT(team_id) DO UPDATE SET
|
|
30
|
-
tenant_id = excluded.tenant_id,
|
|
31
|
-
added_at = excluded.added_at`).run(opts.teamId, opts.tenantId, addedAt);
|
|
32
|
-
return { teamId: opts.teamId, tenantId: opts.tenantId, addedAt };
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* List all registered workspaces, sorted by team_id for stable output.
|
|
36
|
-
*/
|
|
37
|
-
export function listWorkspaces(db) {
|
|
38
|
-
// SAFETY: query selects exactly team_id, tenant_id, added_at, all NOT NULL
|
|
39
|
-
// text columns in the slack_workspaces schema, so each row has this shape.
|
|
40
|
-
const rows = db
|
|
41
|
-
.prepare(`SELECT team_id, tenant_id, added_at FROM slack_workspaces ORDER BY team_id`)
|
|
42
|
-
.all();
|
|
43
|
-
return rows.map((r) => ({
|
|
44
|
-
teamId: r.team_id,
|
|
45
|
-
tenantId: r.tenant_id,
|
|
46
|
-
addedAt: r.added_at,
|
|
47
|
-
}));
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Remove a workspace registration by team_id. Returns true if a row was
|
|
51
|
-
* deleted, false if no row matched (so the CLI can report not-found
|
|
52
|
-
* without a separate lookup).
|
|
53
|
-
*/
|
|
54
|
-
export function removeWorkspace(db, teamId) {
|
|
55
|
-
const result = db
|
|
56
|
-
.prepare(`DELETE FROM slack_workspaces WHERE team_id = ?`)
|
|
57
|
-
.run(teamId);
|
|
58
|
-
return Number(result.changes) > 0;
|
|
27
|
+
export function addWorkspace(hippoRoot, opts) {
|
|
28
|
+
return upsertSlackWorkspace(hippoRoot, opts.teamId, opts.tenantId);
|
|
59
29
|
}
|
|
60
30
|
//# sourceMappingURL=workspaces.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { MemoryEntry, type DecayOptions } from '../memory.js';
|
|
1
|
+
import { MemoryEntry, type DecayOptions } from '../core/memory.js';
|
|
2
2
|
/** Pairs of live non-semantic memories that contradict each other, in survivor order. */
|
|
3
3
|
export declare function detectConflicts(entries: MemoryEntry[], now: Date, decayOpts?: DecayOptions, rescuedIds?: Set<string>): Array<{
|
|
4
4
|
memory_a_id: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Layer, calculateStrength } from '../memory.js';
|
|
2
|
-
import { jaccardMinShared, overlapPartners } from '
|
|
3
|
-
import { isQuarantineScope } from '../quarantine.js';
|
|
4
|
-
import { isPersonalScope } from '../recall-scope.js';
|
|
1
|
+
import { Layer, calculateStrength } from '../core/memory.js';
|
|
2
|
+
import { jaccardMinShared, overlapPartners } from './overlap-index.js';
|
|
3
|
+
import { isQuarantineScope } from '../trust/quarantine.js';
|
|
4
|
+
import { isPersonalScope } from '../store/recall-scope.js';
|
|
5
5
|
import { DECAY_THRESHOLD } from './decay.js';
|
|
6
6
|
// Contradictions should be gated by content overlap, not shared tags. Tags like
|
|
7
7
|
// `feedback` / `policy` are too coarse and can make unrelated rules look like
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import { createMemory, Layer } from '
|
|
2
|
-
import { writeEntry } from '
|
|
3
|
-
import { loadAllDirtySummaries, loadChildrenOfSummary, applyRebuildResult, clearSummaryDirtyAfterBuild, } from '
|
|
4
|
-
import { RejectedValueError } from '
|
|
5
|
-
import { redactSecretsStrict } from '
|
|
6
|
-
import {
|
|
7
|
-
import { derivationScope, derivationPartitionKey } from '
|
|
8
|
-
import { loadConfig } from '
|
|
9
|
-
import { neverAutoShareTags } from '
|
|
10
|
-
import { log } from '
|
|
11
|
-
import { certainDefect } from '
|
|
1
|
+
import { createMemory, Layer } from '../core/memory.js';
|
|
2
|
+
import { writeEntry, writeEntriesTogether } from '../store/entry-writes.js';
|
|
3
|
+
import { loadAllDirtySummaries, loadChildrenOfSummary, applyRebuildResult, clearSummaryDirtyAfterBuild, } from '../store/summaries.js';
|
|
4
|
+
import { RejectedValueError } from '../store/rejection.js';
|
|
5
|
+
import { redactSecretsStrict } from '../util/secret-detect.js';
|
|
6
|
+
import { describeMessageFailure, sendAnthropicMessage } from '../util/anthropic-messages.js';
|
|
7
|
+
import { derivationScope, derivationPartitionKey } from '../store/recall-scope.js';
|
|
8
|
+
import { loadConfig } from '../core/config.js';
|
|
9
|
+
import { neverAutoShareTags } from '../sharing/shared.js';
|
|
10
|
+
import { errorMessage, log } from '../util/log.js';
|
|
11
|
+
import { certainDefect } from '../core/memory-quality.js';
|
|
12
|
+
const SUMMARY_FALLBACK_CHARS = 40;
|
|
13
|
+
const DEFAULT_REBUILD_CAP = 20;
|
|
12
14
|
export function clusterFacts(facts) {
|
|
13
15
|
if (facts.length === 0)
|
|
14
16
|
return [];
|
|
@@ -35,7 +37,7 @@ export function clusterFacts(facts) {
|
|
|
35
37
|
const sharedTags = entityTags[cluster[0]].filter((t) => cluster.every((idx) => entityTags[idx].includes(t)));
|
|
36
38
|
const label = sharedTags
|
|
37
39
|
.map((t) => t.split(':')[1])
|
|
38
|
-
.join(': ') || members[0].content.slice(0,
|
|
40
|
+
.join(': ') || members[0].content.slice(0, SUMMARY_FALLBACK_CHARS);
|
|
39
41
|
clusters.push({ label, members, entityTags: sharedTags });
|
|
40
42
|
}
|
|
41
43
|
return clusters;
|
|
@@ -47,51 +49,31 @@ Facts:
|
|
|
47
49
|
{facts}
|
|
48
50
|
|
|
49
51
|
Write a single concise paragraph (2-4 sentences) that captures all the key information from these facts. This summary will be used to quickly determine if this cluster is relevant to a future query, so include specific names, dates, numbers, and key details. Output ONLY the summary paragraph, no preamble.`;
|
|
52
|
+
// Output budget for one summary paragraph, and the shortest reply kept as a summary.
|
|
53
|
+
const SUMMARY_MAX_TOKENS = 400;
|
|
54
|
+
const SUMMARY_MIN_CHARS = 20;
|
|
50
55
|
export async function generateDagSummary(label, factContents, opts) {
|
|
51
|
-
const model = opts.model ?? 'claude-sonnet-4-6';
|
|
52
|
-
const fetchFn = opts.fetcher ?? fetch;
|
|
53
56
|
const factsBlock = factContents.map((f, i) => `${i + 1}. ${redactSecretsStrict(f)}`).join('\n');
|
|
54
57
|
const prompt = DAG_SUMMARY_PROMPT
|
|
55
58
|
.replace('{label}', redactSecretsStrict(label))
|
|
56
59
|
.replace('{facts}', factsBlock);
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
body: JSON.stringify({
|
|
67
|
-
model,
|
|
68
|
-
max_tokens: 400,
|
|
69
|
-
messages: [{ role: 'user', content: prompt }],
|
|
70
|
-
}),
|
|
71
|
-
}, { timeoutMs: llmTimeoutMs(), fetchFn });
|
|
72
|
-
}
|
|
73
|
-
catch (err) {
|
|
74
|
-
opts.onError?.(`request failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
75
|
-
return null;
|
|
76
|
-
}
|
|
77
|
-
if (!res.ok) {
|
|
78
|
-
opts.onError?.(`HTTP ${res.status}`);
|
|
60
|
+
const reply = await sendAnthropicMessage({
|
|
61
|
+
apiKey: opts.apiKey,
|
|
62
|
+
model: opts.model,
|
|
63
|
+
maxTokens: SUMMARY_MAX_TOKENS,
|
|
64
|
+
prompt,
|
|
65
|
+
fetcher: opts.fetcher,
|
|
66
|
+
});
|
|
67
|
+
if (!reply.ok) {
|
|
68
|
+
opts.onError?.(describeMessageFailure(reply.failure));
|
|
79
69
|
return null;
|
|
80
70
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
const defect = certainDefect(text);
|
|
85
|
-
if (defect !== null) {
|
|
86
|
-
opts.onError?.(`summary quality refused: ${defect}`);
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
return text.length >= 20 ? text : null;
|
|
90
|
-
}
|
|
91
|
-
catch (err) {
|
|
92
|
-
opts.onError?.(`unparseable response: ${err instanceof Error ? err.message : String(err)}`);
|
|
71
|
+
const defect = certainDefect(reply.text);
|
|
72
|
+
if (defect !== null) {
|
|
73
|
+
opts.onError?.(`summary quality refused: ${defect}`);
|
|
93
74
|
return null;
|
|
94
75
|
}
|
|
76
|
+
return reply.text.length >= SUMMARY_MIN_CHARS ? reply.text : null;
|
|
95
77
|
}
|
|
96
78
|
// Partition BEFORE clustering so one LLM summary never mixes facts from different tenants.
|
|
97
79
|
// Map keeps insertion order, so a single-tenant store iterates in its original order.
|
|
@@ -152,11 +134,7 @@ async function summarizeCluster(hippoRoot, cluster, home, opts, result) {
|
|
|
152
134
|
throw err;
|
|
153
135
|
}
|
|
154
136
|
result.summariesCreated++;
|
|
155
|
-
|
|
156
|
-
const updated = { ...member, dag_parent_id: summaryEntry.id };
|
|
157
|
-
writeEntry(hippoRoot, updated);
|
|
158
|
-
result.factsLinked++;
|
|
159
|
-
}
|
|
137
|
+
result.factsLinked += writeEntriesTogether(hippoRoot, cluster.members.map((member) => ({ ...member, dag_parent_id: summaryEntry.id })));
|
|
160
138
|
// Member writes just marked this fresh summary dirty; clear it, or the same sleep cycle's
|
|
161
139
|
// rebuild pass would re-rebuild every new summary at twice the LLM cost.
|
|
162
140
|
clearSummaryDirtyAfterBuild(hippoRoot, summaryEntry.id, summaryEntry.tenantId, 'buildDag');
|
|
@@ -185,29 +163,10 @@ export async function buildDag(hippoRoot, facts, opts) {
|
|
|
185
163
|
async function rebuildOneSummary(hippoRoot, summary, opts, result) {
|
|
186
164
|
const children = loadChildrenOfSummary(hippoRoot, summary.id, summary.tenantId);
|
|
187
165
|
if (children.length === 0) {
|
|
188
|
-
|
|
189
|
-
const { changed } = applyRebuildResult(hippoRoot, summary, {
|
|
190
|
-
content: summary.content,
|
|
191
|
-
descendant_count: 0,
|
|
192
|
-
earliest_at: null,
|
|
193
|
-
latest_at: null,
|
|
194
|
-
bumpRebuildCount: false,
|
|
195
|
-
zeroChildren: true,
|
|
196
|
-
actor: 'sleep',
|
|
197
|
-
});
|
|
198
|
-
if (changed)
|
|
199
|
-
result.zeroChildSkipped++;
|
|
200
|
-
// changed=false → race lost / row vanished; silently skip. `refused`
|
|
201
|
-
// is always false here — applyRebuildResult only checks the
|
|
202
|
-
// tombstone when bumpRebuildCount is true (store/summaries.ts).
|
|
166
|
+
clearZeroChildSummary(hippoRoot, summary, result);
|
|
203
167
|
return;
|
|
204
168
|
}
|
|
205
|
-
|
|
206
|
-
const entityTags = summary.tags.filter((t) => t.startsWith('speaker:') || t.startsWith('topic:'));
|
|
207
|
-
const label = entityTags.length > 0
|
|
208
|
-
? entityTags.map((t) => t.split(':')[1]).join(': ')
|
|
209
|
-
: summary.content.slice(0, 40);
|
|
210
|
-
const newContent = await generateDagSummary(label, children.map((c) => c.content), opts);
|
|
169
|
+
const newContent = await generateDagSummary(summaryLabel(summary), children.map((c) => c.content), opts);
|
|
211
170
|
if (!newContent) {
|
|
212
171
|
// LLM null / fetch error → leave dirty for next cycle
|
|
213
172
|
result.failed++;
|
|
@@ -232,6 +191,30 @@ async function rebuildOneSummary(hippoRoot, summary, opts, result) {
|
|
|
232
191
|
// changed=false (refused also false) → race lost; not failure, not
|
|
233
192
|
// success, silently skip
|
|
234
193
|
}
|
|
194
|
+
/** Zero-child case: clear dirty + zero counts, no LLM call, no rebuild_count bump. */
|
|
195
|
+
function clearZeroChildSummary(hippoRoot, summary, result) {
|
|
196
|
+
const { changed } = applyRebuildResult(hippoRoot, summary, {
|
|
197
|
+
content: summary.content,
|
|
198
|
+
descendant_count: 0,
|
|
199
|
+
earliest_at: null,
|
|
200
|
+
latest_at: null,
|
|
201
|
+
bumpRebuildCount: false,
|
|
202
|
+
zeroChildren: true,
|
|
203
|
+
actor: 'sleep',
|
|
204
|
+
});
|
|
205
|
+
if (changed)
|
|
206
|
+
result.zeroChildSkipped++;
|
|
207
|
+
// changed=false → race lost / row vanished; silently skip. `refused`
|
|
208
|
+
// is always false here — applyRebuildResult only checks the
|
|
209
|
+
// tombstone when bumpRebuildCount is true (store/summaries.ts).
|
|
210
|
+
}
|
|
211
|
+
// Derive label from summary's existing entity tags (mirrors clusterFacts)
|
|
212
|
+
function summaryLabel(summary) {
|
|
213
|
+
const entityTags = summary.tags.filter((t) => t.startsWith('speaker:') || t.startsWith('topic:'));
|
|
214
|
+
return entityTags.length > 0
|
|
215
|
+
? entityTags.map((t) => t.split(':')[1]).join(': ')
|
|
216
|
+
: summary.content.slice(0, SUMMARY_FALLBACK_CHARS);
|
|
217
|
+
}
|
|
235
218
|
/**
|
|
236
219
|
* Sleep-cycle phase that drains the dirty L2 summary queue.
|
|
237
220
|
* Thin orchestrator; the heavy lifting lives in store.ts (load + apply)
|
|
@@ -246,7 +229,7 @@ async function rebuildOneSummary(hippoRoot, summary, opts, result) {
|
|
|
246
229
|
* A tombstone hit counts as `refused`, not `rebuilt`; dirty clears either way.
|
|
247
230
|
*/
|
|
248
231
|
export async function rebuildDirtySummaries(hippoRoot, opts) {
|
|
249
|
-
const cap = opts.cap ??
|
|
232
|
+
const cap = opts.cap ?? DEFAULT_REBUILD_CAP;
|
|
250
233
|
const dirty = loadAllDirtySummaries(hippoRoot);
|
|
251
234
|
const capped = dirty.length > cap;
|
|
252
235
|
const queue = dirty.slice(0, cap);
|
|
@@ -275,7 +258,7 @@ export async function rebuildDirtySummaries(hippoRoot, opts) {
|
|
|
275
258
|
// One throw doesn't abort the queue; log enough to triage an exotic
|
|
276
259
|
// failure (SQLite I/O, prepare), since audit() already catches its own.
|
|
277
260
|
result.failed++;
|
|
278
|
-
log.error(`rebuildDirtySummaries: summary ${summary.id} (tenant ${summary.tenantId}) failed: ${
|
|
261
|
+
log.error(`rebuildDirtySummaries: summary ${summary.id} (tenant ${summary.tenantId}) failed: ${errorMessage(err)}`);
|
|
279
262
|
}
|
|
280
263
|
}
|
|
281
264
|
return result;
|
|
@@ -321,11 +304,7 @@ async function profileCluster(hippoRoot, cluster, home, opts, result) {
|
|
|
321
304
|
throw err;
|
|
322
305
|
}
|
|
323
306
|
result.profilesCreated++;
|
|
324
|
-
|
|
325
|
-
const updated = { ...member, dag_parent_id: profileEntry.id };
|
|
326
|
-
writeEntry(hippoRoot, updated);
|
|
327
|
-
result.l2sLinked++;
|
|
328
|
-
}
|
|
307
|
+
result.l2sLinked += writeEntriesTogether(hippoRoot, cluster.members.map((member) => ({ ...member, dag_parent_id: profileEntry.id })));
|
|
329
308
|
// Re-linking just marked the fresh L3 dirty; clear it so this cycle's rebuild skips it.
|
|
330
309
|
// The distinct source tags the audit row.
|
|
331
310
|
clearSummaryDirtyAfterBuild(hippoRoot, profileEntry.id, home.tenantId, 'buildEntityProfiles', 'buildEntityProfiles-clean');
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { MemoryEntry } from '../memory.js';
|
|
2
|
-
import { type MvRankInfo } from '
|
|
1
|
+
import { MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import { type MvRankInfo } from './memory-value.js';
|
|
3
3
|
import type { SleepRun } from './run.js';
|
|
4
4
|
export declare const DECAY_THRESHOLD = 0.05;
|
|
5
5
|
/** What the decay pass hands to the conflict check and the rescue audit at the end of the run. */
|