hippo-memory 1.69.0 → 1.71.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 +5 -5
- package/dist/agent-memories/claude-code.js +25 -12
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +26 -14
- 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/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +3 -2
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +5 -3
- package/dist/agent-memories/sync.js +34 -38
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +9 -46
- package/dist/api/assemble.js +44 -54
- package/dist/api/audit.d.ts +8 -7
- package/dist/api/audit.js +15 -21
- package/dist/api/auth.d.ts +17 -39
- package/dist/api/auth.js +76 -216
- 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} +4 -17
- package/dist/{availability.js → api/availability.js} +14 -44
- 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 +39 -48
- package/dist/api/context-types.d.ts +15 -40
- package/dist/api/context.d.ts +7 -26
- package/dist/api/context.js +67 -97
- package/dist/api/dormant.d.ts +7 -23
- package/dist/api/dormant.js +40 -128
- package/dist/api/drill-down.d.ts +9 -48
- package/dist/api/drill-down.js +41 -90
- package/dist/api/forget.d.ts +5 -33
- package/dist/api/forget.js +17 -73
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +28 -0
- package/dist/api/index.js +31 -0
- package/dist/api/instruction-detect.js +85 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +21 -0
- package/dist/api/ledger-db.js +81 -0
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +38 -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/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +16 -31
- package/dist/api/promote.js +38 -123
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
- package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +120 -0
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +64 -0
- package/dist/api/recall-history.js +159 -0
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
- 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 +101 -316
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +92 -91
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +27 -12
- package/dist/api/remember.js +42 -46
- 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 -9
- package/dist/api/sleep-run.js +78 -94
- package/dist/api/sleep.d.ts +10 -29
- package/dist/api/tokens.d.ts +5 -12
- package/dist/api/tokens.js +12 -31
- package/dist/api/types.d.ts +8 -31
- package/dist/api/types.js +5 -23
- 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 +5 -13
- package/dist/capture/command.js +57 -60
- 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 +8 -16
- package/dist/capture/compact.js +56 -47
- 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} +143 -157
- package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
- 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} +2 -6
- package/dist/{session-digest.js → capture/session-digest.js} +29 -29
- 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.d.ts +2 -10
- package/dist/capture/transcript.js +72 -92
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +28 -0
- package/dist/cli/audit-prune.js +40 -0
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +92 -88
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +69 -53
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +76 -202
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +55 -54
- package/dist/cli/client.d.ts +28 -0
- package/dist/{client.js → cli/client.js} +25 -44
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +40 -0
- package/dist/cli/context.d.ts +1 -13
- package/dist/cli/context.js +51 -77
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +153 -145
- package/dist/cli/correction-latency.d.ts +24 -0
- package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +226 -222
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +70 -52
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +129 -253
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +56 -42
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +39 -21
- package/dist/cli/flag-values.d.ts +30 -0
- package/dist/cli/flag-values.js +120 -0
- package/dist/cli/flags.d.ts +304 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/github.d.ts +14 -0
- package/dist/cli/github.js +184 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +76 -75
- package/dist/cli/hook-runtime.d.ts +31 -0
- package/dist/cli/hook-runtime.js +139 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +153 -126
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +101 -0
- package/dist/cli/last-sleep.d.ts +3 -1
- package/dist/cli/last-sleep.js +12 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +41 -42
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +66 -0
- package/dist/cli/owner-validation.d.ts +18 -0
- package/dist/cli/owner-validation.js +33 -0
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +98 -306
- package/dist/cli/print.d.ts +15 -0
- package/dist/cli/print.js +82 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -51
- package/dist/cli/provenance-coverage.d.ts +14 -0
- package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/cli/recall.d.ts +2 -6
- package/dist/cli/recall.js +128 -253
- package/dist/cli/refine-llm.d.ts +35 -0
- package/dist/cli/refine-llm.js +128 -0
- package/dist/cli/remember.d.ts +4 -6
- package/dist/cli/remember.js +193 -230
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
- package/dist/{scheduler.js → cli/scheduler.js} +22 -22
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +46 -7
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +263 -258
- package/dist/cli/setup.d.ts +4 -3
- package/dist/cli/setup.js +55 -37
- package/dist/cli/shared.d.ts +14 -118
- package/dist/cli/shared.js +26 -400
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +46 -74
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +3 -8
- package/dist/cli/sleep.js +34 -91
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +86 -131
- package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
- package/dist/{stdin.js → cli/stdin.js} +8 -9
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +125 -122
- package/dist/cli/usage.js +13 -5
- package/dist/cli.d.ts +69 -167
- package/dist/cli.js +187 -296
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +6 -26
- package/dist/connectors/github/backfill.js +42 -114
- package/dist/connectors/github/deletion.d.ts +6 -21
- package/dist/connectors/github/deletion.js +17 -64
- package/dist/connectors/github/dlq.d.ts +12 -91
- package/dist/connectors/github/dlq.js +23 -140
- package/dist/connectors/github/ingest.d.ts +4 -37
- package/dist/connectors/github/ingest.js +24 -93
- package/dist/connectors/github/octokit-client.d.ts +5 -17
- package/dist/connectors/github/octokit-client.js +29 -25
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +4 -26
- package/dist/connectors/github/tenant-routing.js +13 -61
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +4 -16
- package/dist/connectors/github/types.js +17 -27
- package/dist/connectors/github/webhook.d.ts +5 -18
- package/dist/connectors/github/webhook.js +86 -105
- package/dist/connectors/slack/backfill.d.ts +5 -18
- package/dist/connectors/slack/backfill.js +9 -42
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +9 -68
- package/dist/connectors/slack/dlq.js +26 -136
- package/dist/connectors/slack/ingest.d.ts +4 -18
- package/dist/connectors/slack/ingest.js +26 -91
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -18
- package/dist/connectors/slack/tenant-routing.js +11 -31
- package/dist/connectors/slack/transform.d.ts +3 -19
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +4 -10
- package/dist/connectors/slack/types.js +5 -16
- package/dist/connectors/slack/web-client.js +34 -28
- package/dist/connectors/slack/webhook.d.ts +5 -21
- package/dist/connectors/slack/webhook.js +80 -108
- package/dist/connectors/slack/workspaces.d.ts +8 -41
- package/dist/connectors/slack/workspaces.js +8 -58
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +10 -18
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
- package/dist/{dag.js → consolidate/dag.js} +49 -131
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +35 -41
- package/dist/consolidate/dedupe.d.ts +29 -0
- package/dist/consolidate/dedupe.js +103 -0
- package/dist/consolidate/flush-units.d.ts +5 -6
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +34 -0
- package/dist/consolidate/half-life-migration.js +89 -0
- package/dist/consolidate/llm-passes.js +12 -29
- package/dist/consolidate/memory-value-weights.d.ts +8 -0
- package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
- package/dist/consolidate/memory-value.d.ts +45 -0
- package/dist/consolidate/memory-value.js +164 -0
- package/dist/consolidate/merge.js +65 -83
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
- package/dist/consolidate/physics-pass.js +46 -48
- package/dist/consolidate/replay.d.ts +9 -0
- package/dist/consolidate/replay.js +84 -0
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +2 -9
- package/dist/consolidate/sleep.js +69 -151
- package/dist/consolidate/trace.d.ts +19 -0
- package/dist/{trace.js → consolidate/trace.js} +7 -24
- package/dist/consolidate/traces.js +40 -51
- package/dist/core/ablation.d.ts +15 -0
- package/dist/core/ablation.js +49 -0
- 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.d.ts → core/ambient.d.ts} +1 -8
- package/dist/{ambient.js → core/ambient.js} +13 -18
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
- package/dist/{card.d.ts → core/card.d.ts} +4 -1
- package/dist/{card.js → core/card.js} +8 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.js +70 -0
- package/dist/{config.d.ts → core/config.d.ts} +14 -28
- package/dist/{config.js → core/config.js} +101 -75
- package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
- package/dist/core/handoff.js +81 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
- package/dist/core/memory.d.ts +183 -0
- package/dist/core/memory.js +380 -0
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
- package/dist/{physics-config.js → core/physics-config.js} +3 -8
- package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
- package/dist/{physics.js → core/physics.js} +60 -122
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
- package/dist/{project-identity.js → core/project-identity.js} +22 -55
- package/dist/{project-remote.js → core/project-remote.js} +17 -6
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
- package/dist/{salience.js → core/salience.js} +36 -27
- 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} +7 -7
- 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} +11 -10
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
- package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
- package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
- package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +19 -2
- package/dist/db/busy.js +88 -14
- package/dist/db/connect.d.ts +11 -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 +28 -33
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -36
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +31 -29
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +5 -8
- package/dist/db/migrations/v22.js +28 -38
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +25 -22
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +23 -32
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +23 -31
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +10 -21
- package/dist/db/migrations/v40.js +8 -14
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +2 -3
- 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/v51.js +1 -1
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +11 -1
- package/dist/db/open.js +37 -4
- package/dist/db/physics-state.d.ts +23 -0
- package/dist/{physics-state.js → db/physics-state.js} +34 -52
- package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
- 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} +6 -2
- package/dist/{vector-store.js → db/vector-store.js} +83 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +176 -152
- 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 +5 -4
- package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
- package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
- package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
- package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
- package/dist/{eval.js → eval/eval.js} +35 -55
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
- package/dist/{judgment.js → eval/judgment.js} +23 -20
- package/dist/extensions/openclaw-plugin/index.js +2 -3
- 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} +10 -32
- package/dist/{graph-extract.js → graph/extract.js} +40 -81
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
- package/dist/{graph-recall.js → graph/recall.js} +65 -108
- package/dist/graph/stream.d.ts +38 -0
- package/dist/{graph-stream.js → graph/stream.js} +20 -41
- package/dist/graph/view.d.ts +50 -0
- package/dist/graph/view.js +265 -0
- 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 +16 -17
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +16 -16
- package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
- package/dist/{cli → hooks}/hook-blocks.js +38 -125
- package/dist/hooks/json-hooks.d.ts +5 -37
- package/dist/hooks/json-hooks.js +49 -179
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +44 -103
- package/dist/hooks/shared.d.ts +8 -21
- package/dist/hooks/shared.js +30 -25
- package/dist/importers/core.d.ts +13 -42
- package/dist/importers/core.js +48 -64
- package/dist/importers/markdown-parse.d.ts +9 -32
- package/dist/importers/markdown-parse.js +10 -44
- package/dist/importers/markdown.js +5 -13
- package/dist/importers/sources.js +57 -81
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +95 -172
- package/dist/index.d.ts +26 -22
- package/dist/index.js +25 -21
- package/dist/learn/autolearn.d.ts +29 -0
- package/dist/{autolearn.js → learn/autolearn.js} +26 -51
- 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 +123 -0
- package/dist/learn/forward-claim-detector.d.ts +12 -0
- package/dist/learn/forward-claim-detector.js +60 -0
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
- package/dist/{invalidation.js → learn/invalidation.js} +92 -125
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +39 -64
- 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 +10 -35
- package/dist/mcp/protocol.d.ts +14 -36
- package/dist/mcp/protocol.js +10 -19
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +70 -52
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +71 -85
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +6 -17
- package/dist/mcp/session-state.d.ts +2 -3
- package/dist/mcp/session-state.js +7 -13
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +112 -38
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +7 -5
- package/dist/objects/customer-notes.d.ts +44 -0
- package/dist/objects/customer-notes.js +71 -0
- package/dist/objects/decisions.d.ts +41 -0
- package/dist/objects/decisions.js +63 -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/objects/incidents.d.ts +45 -0
- package/dist/objects/incidents.js +96 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/objects/policies.d.ts +60 -0
- package/dist/objects/policies.js +102 -0
- package/dist/objects/processes.d.ts +43 -0
- package/dist/objects/processes.js +92 -0
- package/dist/objects/project-briefs.d.ts +63 -0
- package/dist/objects/project-briefs.js +194 -0
- package/dist/objects/skills.d.ts +51 -0
- package/dist/objects/skills.js +110 -0
- package/dist/postinstall.js +10 -21
- package/dist/predictions/planning-fallacy.d.ts +14 -109
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +28 -76
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +18 -28
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +36 -52
- package/dist/rerankers/llm.d.ts +2 -13
- package/dist/rerankers/llm.js +42 -59
- package/dist/rerankers/outage-warning.d.ts +8 -0
- package/dist/rerankers/outage-warning.js +32 -0
- package/dist/rerankers/remote.d.ts +4 -0
- package/dist/rerankers/remote.js +25 -0
- package/dist/rerankers/types.d.ts +3 -15
- 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 -3
- package/dist/search/boosts.js +36 -15
- 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/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +6 -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} +9 -8
- package/dist/search/path-context.d.ts +11 -0
- package/dist/{path-context.js → search/path-context.js} +8 -19
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +25 -22
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/rrf.d.ts +15 -0
- package/dist/search/rrf.js +36 -0
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +10 -3
- package/dist/search/vector.js +51 -15
- package/dist/server/auth.d.ts +10 -29
- package/dist/server/auth.js +57 -42
- package/dist/server/boot.d.ts +5 -0
- package/dist/server/boot.js +432 -0
- package/dist/server/client-ip.d.ts +8 -20
- package/dist/server/client-ip.js +23 -34
- 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/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -0
- package/dist/server/key-check-bounds.d.ts +9 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +20 -5
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +44 -68
- package/dist/server/rate-limit.d.ts +21 -0
- package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +14 -12
- package/dist/server/request.js +71 -28
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +202 -0
- package/dist/server/routes/admin.js +29 -30
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +35 -105
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +45 -115
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +44 -105
- package/dist/server/routes/memories.js +21 -43
- package/dist/server/routes/object-routes.d.ts +35 -0
- package/dist/server/routes/object-routes.js +72 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +42 -134
- package/dist/server/routes/predictions.js +35 -63
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +44 -134
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +41 -120
- package/dist/server/routes/recall.js +21 -44
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +40 -138
- package/dist/server/server-detect.d.ts +28 -0
- package/dist/server/server-detect.js +156 -0
- 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 +73 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +35 -14
- package/dist/server/validation.d.ts +6 -5
- package/dist/server/validation.js +16 -34
- package/dist/server.d.ts +39 -61
- package/dist/server.js +26 -569
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +80 -0
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
- package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
- package/dist/sharing/scope.d.ts +7 -0
- package/dist/{scope.js → sharing/scope.js} +5 -12
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +11 -16
- package/dist/store/audit-event.d.ts +15 -17
- package/dist/store/audit-event.js +9 -16
- package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
- package/dist/{audit.js → store/audit.js} +95 -18
- package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
- package/dist/{auth.js → store/auth.js} +108 -99
- package/dist/store/candidates.d.ts +41 -13
- package/dist/store/candidates.js +141 -60
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
- package/dist/{card-detail.js → store/card-detail.js} +3 -2
- package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
- package/dist/{store-cards.js → store/cards.js} +133 -248
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +26 -26
- package/dist/store/conflicts.js +194 -222
- 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 +88 -0
- package/dist/store/delete-and-batch.d.ts +27 -51
- package/dist/store/delete-and-batch.js +100 -92
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
- 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 +44 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/store/dormant.d.ts +105 -0
- package/dist/store/dormant.js +241 -0
- package/dist/store/embeddings/index.d.ts +36 -0
- package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
- package/dist/store/embeddings/provider.d.ts +40 -0
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
- package/dist/store/entry-reads.d.ts +66 -63
- package/dist/store/entry-reads.js +159 -121
- package/dist/store/entry-row.d.ts +14 -37
- package/dist/store/entry-row.js +37 -45
- package/dist/store/entry-writes.d.ts +40 -17
- package/dist/store/entry-writes.js +105 -41
- 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/store/goals.d.ts +96 -0
- package/dist/store/goals.js +260 -0
- package/dist/store/graph-queue.d.ts +13 -0
- package/dist/store/graph-queue.js +70 -0
- package/dist/store/graph-reads.d.ts +41 -0
- package/dist/{graph/read.js → store/graph-reads.js} +72 -162
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
- package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
- package/dist/store/graph-view-rows.d.ts +13 -0
- package/dist/store/graph-view-rows.js +68 -0
- package/dist/store/graph-writes.d.ts +33 -0
- package/dist/store/graph-writes.js +232 -0
- package/dist/store/half-life.d.ts +35 -0
- package/dist/store/half-life.js +75 -0
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +54 -63
- package/dist/store/index-and-stats.d.ts +14 -20
- package/dist/store/index-and-stats.js +74 -119
- 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 +3 -7
- package/dist/store/markdown.js +25 -23
- package/dist/store/mirrors.d.ts +7 -13
- package/dist/store/mirrors.js +52 -47
- 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 +30 -36
- package/dist/store/planning-fallacy-evidence.d.ts +14 -0
- package/dist/store/planning-fallacy-evidence.js +52 -0
- package/dist/store/port.d.ts +649 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
- package/dist/{predictions/store.js → store/predictions.js} +88 -184
- package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/store/raw-archive.d.ts +14 -0
- package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
- package/dist/store/recall-scope.d.ts +78 -0
- package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
- package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +150 -0
- package/dist/store/rejection.d.ts +54 -0
- package/dist/{rejection.js → store/rejection.js} +16 -67
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +11 -22
- package/dist/store/rows.js +52 -43
- package/dist/store/rule-sql.d.ts +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +22 -42
- package/dist/store/search-rows.js +55 -78
- package/dist/store/sessions.d.ts +23 -49
- package/dist/store/sessions.js +96 -118
- 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 +61 -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 +29 -0
- package/dist/store/sqlite/executor.js +287 -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 +39 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +221 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +316 -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 +23 -0
- package/dist/store/sqlite/store.js +294 -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 +135 -0
- package/dist/store/sqlite/worker-ops.js +93 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +79 -0
- package/dist/store/summaries.d.ts +11 -72
- package/dist/store/summaries.js +47 -186
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +11 -0
- package/dist/store/tenant.js +28 -0
- 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} +14 -51
- package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
- 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 +18 -0
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
- package/dist/store/working-memory.js +118 -0
- package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
- package/dist/{yaml.js → store/yaml.js} +2 -6
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +19 -37
- 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 +65 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +58 -0
- package/dist/util/atomic-write.d.ts +4 -0
- package/dist/util/atomic-write.js +138 -0
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/crash-handlers.d.ts +12 -0
- package/dist/util/crash-handlers.js +72 -0
- package/dist/{env.d.ts → util/env.d.ts} +27 -7
- package/dist/{env.js → util/env.js} +33 -8
- package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
- package/dist/util/home-path.js +69 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
- package/dist/util/http-retry.js +103 -0
- 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} +7 -3
- package/dist/{log.js → util/log.js} +36 -11
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +28 -0
- package/dist/util/request-scope.js +48 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
- package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
- 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 +15 -0
- package/dist/util/token-text.js +20 -0
- package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
- package/dist/util/transcript-tail.js +49 -0
- package/dist/util/version.d.ts +11 -0
- package/dist/util/version.js +26 -0
- package/extensions/openclaw-plugin/index.ts +2 -6
- 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/ablation.d.ts +0 -102
- package/dist/ablation.js +0 -136
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/audit-prune.d.ts +0 -62
- package/dist/audit-prune.js +0 -107
- package/dist/autolearn.d.ts +0 -56
- package/dist/client.d.ts +0 -48
- package/dist/compare.d.ts +0 -86
- package/dist/compare.js +0 -117
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/connectors/github/cli-impl.js +0 -227
- 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/correction-latency.d.ts +0 -36
- package/dist/customer-notes.d.ts +0 -96
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.d.ts +0 -94
- package/dist/decisions.js +0 -326
- package/dist/dedupe.d.ts +0 -75
- package/dist/dedupe.js +0 -169
- package/dist/dormant.d.ts +0 -93
- package/dist/dormant.js +0 -137
- package/dist/embedding-provider.d.ts +0 -77
- package/dist/embeddings.d.ts +0 -101
- package/dist/extract.js +0 -133
- package/dist/forward-claim-detector.d.ts +0 -36
- package/dist/forward-claim-detector.js +0 -112
- package/dist/goals.d.ts +0 -173
- package/dist/goals.js +0 -448
- package/dist/graph/read.d.ts +0 -73
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/graph-stream.d.ts +0 -70
- package/dist/graph-view.d.ts +0 -73
- package/dist/graph-view.js +0 -333
- package/dist/half-life-migration.d.ts +0 -63
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/http-retry.js +0 -51
- package/dist/incidents.d.ts +0 -103
- 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/memory-value-weights.d.ts +0 -19
- package/dist/memory-value.d.ts +0 -113
- package/dist/memory-value.js +0 -250
- package/dist/memory.d.ts +0 -294
- package/dist/memory.js +0 -522
- package/dist/owner-validation.d.ts +0 -42
- package/dist/owner-validation.js +0 -56
- package/dist/path-context.d.ts +0 -24
- package/dist/physics-state.d.ts +0 -39
- package/dist/policies.d.ts +0 -151
- package/dist/policies.js +0 -434
- package/dist/processes.d.ts +0 -108
- package/dist/processes.js +0 -371
- package/dist/project-briefs.d.ts +0 -128
- package/dist/project-briefs.js +0 -523
- package/dist/provenance-coverage.d.ts +0 -18
- package/dist/rate-limit.d.ts +0 -34
- package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
- package/dist/raw-archive.d.ts +0 -24
- package/dist/recall-history.d.ts +0 -131
- package/dist/recall-history.js +0 -227
- package/dist/recall-scope.d.ts +0 -138
- package/dist/refine-llm.d.ts +0 -61
- package/dist/refine-llm.js +0 -167
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/rejection.d.ts +0 -100
- package/dist/replay.d.ts +0 -41
- package/dist/replay.js +0 -122
- package/dist/rrf.d.ts +0 -43
- package/dist/rrf.js +0 -61
- package/dist/scope.d.ts +0 -14
- package/dist/server-detect.d.ts +0 -72
- package/dist/server-detect.js +0 -222
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/shared.d.ts +0 -186
- package/dist/shared.js +0 -540
- package/dist/skills.d.ts +0 -101
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store/vector-writes.d.ts +0 -6
- package/dist/store/vector-writes.js +0 -59
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- package/dist/tenant.d.ts +0 -25
- package/dist/tenant.js +0 -43
- package/dist/trace.d.ts +0 -34
- package/dist/transcript-tail.js +0 -48
- package/dist/version.d.ts +0 -26
- package/dist/version.js +0 -41
- package/dist/working-memory.js +0 -154
- /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/{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/{share-scrub.d.ts → capture/share-scrub.d.ts} +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/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +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/{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.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +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/{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/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -1,15 +1,31 @@
|
|
|
1
|
-
import { fetchWithRetry, isRetryableStatus } from '../../http-retry.js';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* Slack omits `channel` from messages in the history response, so we stamp
|
|
9
|
-
* the request channel id onto each parsed message — downstream ingest needs
|
|
10
|
-
* it on every event.
|
|
11
|
-
*/
|
|
1
|
+
import { fetchWithRetry, isRetryableStatus } from '../../util/http-retry.js';
|
|
2
|
+
import { readCappedJson } from '../../util/capped-json.js';
|
|
3
|
+
import { errorMessage } from '../../util/log.js';
|
|
4
|
+
import { isJsonObject, isJsonString } from '../../util/json.js';
|
|
5
|
+
/** Build a SlackHistoryFetcher that pages `conversations.history` over HTTP via `fetchWithRetry` (429 and 5xx handled).
|
|
6
|
+
* Slack omits `channel` from history messages, so the request channel id is stamped onto each one for ingest. */
|
|
12
7
|
const SLACK_TIMEOUT_MS = 30_000;
|
|
8
|
+
// A page is at most 200 messages, each up to 40,000 characters at 4 bytes, carried once as text and once as rich-text blocks.
|
|
9
|
+
const SLACK_MAX_REPLY_BYTES = 64 * 1024 * 1024;
|
|
10
|
+
function isSlackMessage(m) {
|
|
11
|
+
return isJsonObject(m) && m.type === 'message' && isJsonString(m.ts);
|
|
12
|
+
}
|
|
13
|
+
/** The reply as a JSON object. The error names the status and the path only, since the query string carries channel ids and cursors. */
|
|
14
|
+
async function readHistoryReply(r, url) {
|
|
15
|
+
const where = `slack: HTTP ${r.status} on ${url.pathname}`;
|
|
16
|
+
let body;
|
|
17
|
+
try {
|
|
18
|
+
body = await readCappedJson(r, SLACK_MAX_REPLY_BYTES);
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
throw new Error(`${where}: ${errorMessage(err)}`, { cause: err });
|
|
22
|
+
}
|
|
23
|
+
if (!isJsonObject(body))
|
|
24
|
+
throw new Error(`${where}: the reply is not a JSON object`);
|
|
25
|
+
if (body.messages !== undefined && !Array.isArray(body.messages))
|
|
26
|
+
throw new Error(`${where}: \`messages\` is not an array`);
|
|
27
|
+
return body;
|
|
28
|
+
}
|
|
13
29
|
export function slackHistoryFetcher(token, fetchImpl) {
|
|
14
30
|
return async ({ channelId, cursor, oldest }) => {
|
|
15
31
|
const url = new URL('https://slack.com/api/conversations.history');
|
|
@@ -25,27 +41,17 @@ export function slackHistoryFetcher(token, fetchImpl) {
|
|
|
25
41
|
});
|
|
26
42
|
if (isRetryableStatus(r.status))
|
|
27
43
|
throw new Error(`slack: still rate-limited or unavailable (HTTP ${r.status})`);
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const messages = (body.messages ?? [])
|
|
34
|
-
.filter((m) => {
|
|
35
|
-
if (m === null || Array.isArray(m) || typeof m !== 'object') {
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
// SAFETY: the check above just confirmed m is a non-null, non-array
|
|
39
|
-
// plain object, so it's safe to treat as a JSON-shaped record; the
|
|
40
|
-
// `m is SlackMessageEvent` predicate is what validates the fields.
|
|
41
|
-
const o = m;
|
|
42
|
-
return o.type === 'message' && isJsonString(o.ts);
|
|
43
|
-
})
|
|
44
|
+
const body = await readHistoryReply(r, url);
|
|
45
|
+
if (body.ok !== true)
|
|
46
|
+
throw new Error(`slack: ${isJsonString(body.error) ? body.error : 'unknown error'}`);
|
|
47
|
+
const messages = (Array.isArray(body.messages) ? body.messages : [])
|
|
48
|
+
.filter(isSlackMessage)
|
|
44
49
|
// Slack returns messages without `channel`; stamp it from the request.
|
|
45
50
|
.map((m) => ({ ...m, channel: channelId }));
|
|
51
|
+
const nextCursor = isJsonObject(body.response_metadata) ? body.response_metadata.next_cursor : undefined;
|
|
46
52
|
return {
|
|
47
53
|
messages,
|
|
48
|
-
next_cursor:
|
|
54
|
+
next_cursor: isJsonString(nextCursor) ? nextCursor : null,
|
|
49
55
|
};
|
|
50
56
|
};
|
|
51
57
|
}
|
|
@@ -1,22 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*
|
|
5
|
-
|
|
6
|
-
* 1. Echoing the one-time url_verification challenge.
|
|
7
|
-
* 2. Verifying the HMAC on every other inbound payload.
|
|
8
|
-
* 3. Resolving body.team_id → tenantId via slack_workspaces, falling
|
|
9
|
-
* back to HIPPO_TENANT then 'default'.
|
|
10
|
-
* 4. Dispatching event_callback envelopes to ingestMessage /
|
|
11
|
-
* handleMessageDeleted.
|
|
12
|
-
* 5. Parking malformed or unhandled payloads in slack_dlq and STILL
|
|
13
|
-
* ACKing 200 - Slack retries forever otherwise.
|
|
14
|
-
*
|
|
15
|
-
* When SLACK_SIGNING_SECRET is unset we return 404, not
|
|
16
|
-
* 503, so an external probe cannot distinguish "route gated off by config"
|
|
17
|
-
* from "route does not exist on this build".
|
|
18
|
-
*
|
|
19
|
-
* Bearer auth is skipped on purpose: server.ts checks isPublicRoute before calling this.
|
|
20
|
-
*/
|
|
21
|
-
export declare function handleSlackEventsWebhook({ req, res, opts }: WebhookRequest): Promise<void>;
|
|
1
|
+
import type { HippoStore } from '../../store/index.js';
|
|
2
|
+
import { type WebhookRequest } from '../../util/http-util.js';
|
|
3
|
+
/** Slack Events API webhook: HMAC over the raw body with SLACK_SIGNING_SECRET, no Bearer (hence PUBLIC_ROUTES); malformed payloads go to slack_dlq, ACK 200.
|
|
4
|
+
* 404 (not 503) when the secret is unset, so a probe cannot tell a gated-off route from a missing one. */
|
|
5
|
+
export declare function handleSlackEventsWebhook(request: WebhookRequest, store?: HippoStore): Promise<void>;
|
|
22
6
|
//# sourceMappingURL=webhook.d.ts.map
|
|
@@ -1,36 +1,22 @@
|
|
|
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,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
*
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
* 3. Resolving body.team_id → tenantId via slack_workspaces, falling
|
|
18
|
-
* back to HIPPO_TENANT then 'default'.
|
|
19
|
-
* 4. Dispatching event_callback envelopes to ingestMessage /
|
|
20
|
-
* handleMessageDeleted.
|
|
21
|
-
* 5. Parking malformed or unhandled payloads in slack_dlq and STILL
|
|
22
|
-
* ACKing 200 - Slack retries forever otherwise.
|
|
23
|
-
*
|
|
24
|
-
* When SLACK_SIGNING_SECRET is unset we return 404, not
|
|
25
|
-
* 503, so an external probe cannot distinguish "route gated off by config"
|
|
26
|
-
* from "route does not exist on this build".
|
|
27
|
-
*
|
|
28
|
-
* Bearer auth is skipped on purpose: server.ts checks isPublicRoute before calling this.
|
|
29
|
-
*/
|
|
30
|
-
export async function handleSlackEventsWebhook({ req, res, opts }) {
|
|
31
|
-
const rawBody = await readBody(req);
|
|
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';
|
|
12
|
+
/** Slack Events API webhook: HMAC over the raw body with SLACK_SIGNING_SECRET, no Bearer (hence PUBLIC_ROUTES); malformed payloads go to slack_dlq, ACK 200.
|
|
13
|
+
* 404 (not 503) when the secret is unset, so a probe cannot tell a gated-off route from a missing one. */
|
|
14
|
+
export async function handleSlackEventsWebhook(request, store) {
|
|
15
|
+
const { req, res, opts } = request;
|
|
16
|
+
// Secret and headers before the body, so a caller with neither cannot make the server buffer one.
|
|
32
17
|
const secret = envSlackSigningSecret();
|
|
33
18
|
if (!secret) {
|
|
19
|
+
closeIfBodyUnread(request);
|
|
34
20
|
res.writeHead(404, JSON_HEADERS);
|
|
35
21
|
res.end(JSON.stringify({ error: 'not found' }));
|
|
36
22
|
return;
|
|
@@ -40,77 +26,74 @@ export async function handleSlackEventsWebhook({ req, res, opts }) {
|
|
|
40
26
|
const tsHdr = req.headers['x-slack-request-timestamp'];
|
|
41
27
|
const sigStr = isHeaderString(sig) ? sig : null;
|
|
42
28
|
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
|
-
})) {
|
|
29
|
+
if (sigStr === null || tsStr === null) {
|
|
30
|
+
closeIfBodyUnread(request);
|
|
52
31
|
throw new HttpError(401, 'invalid Slack signature');
|
|
53
32
|
}
|
|
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);
|
|
33
|
+
const rawBody = await readWebhookBody(request);
|
|
34
|
+
if (!verifySlackSignature({
|
|
35
|
+
rawBody,
|
|
36
|
+
timestamp: tsStr,
|
|
37
|
+
signature: sigStr,
|
|
38
|
+
signingSecret: secret,
|
|
39
|
+
previousSecret,
|
|
40
|
+
})) {
|
|
41
|
+
throw new HttpError(401, 'invalid Slack signature');
|
|
71
42
|
}
|
|
43
|
+
await routeSignedSlackPayload({ hippoRoot: opts.hippoRoot, store, res, rawBody, signature: sigStr, slackTimestamp: tsStr });
|
|
44
|
+
}
|
|
45
|
+
async function parkAndAck(d, park) {
|
|
46
|
+
const row = {
|
|
47
|
+
tenantId: park.tenantId,
|
|
48
|
+
teamId: park.teamId,
|
|
49
|
+
rawPayload: d.rawBody,
|
|
50
|
+
error: park.error,
|
|
51
|
+
bucket: park.bucket,
|
|
52
|
+
signature: d.signature,
|
|
53
|
+
slackTimestamp: d.slackTimestamp,
|
|
54
|
+
};
|
|
55
|
+
await parkInDlq(slackDlq, d.hippoRoot, row, d.store);
|
|
72
56
|
sendJson(d.res, 200, { ok: true, status: 'dlq' });
|
|
73
57
|
}
|
|
74
|
-
function
|
|
75
|
-
const { rawBody, res } = d;
|
|
58
|
+
function teamIdInRawBody(rawBody) {
|
|
76
59
|
// Cheap regex extracts team_id from a (possibly malformed) raw body so the
|
|
77
60
|
// 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)) {
|
|
61
|
+
const m = rawBody.match(/"team_id"\s*:\s*"([^"]+)"/);
|
|
62
|
+
return m ? m[1] : null;
|
|
63
|
+
}
|
|
64
|
+
/** Answers Slack's URL-verification handshake; false when the payload is anything else. */
|
|
65
|
+
function answerUrlVerification(res, body) {
|
|
66
|
+
if (isJsonObject(body)) {
|
|
91
67
|
const bodyRecord = body;
|
|
92
68
|
if (bodyRecord.type === 'url_verification') {
|
|
93
69
|
sendJson(res, 200, {
|
|
94
70
|
challenge: String(bodyRecord.challenge ?? ''),
|
|
95
71
|
});
|
|
96
|
-
return;
|
|
72
|
+
return true;
|
|
97
73
|
}
|
|
98
74
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
async function routeSignedSlackPayload(d) {
|
|
78
|
+
const { rawBody, res } = d;
|
|
79
|
+
const teamIdFromRaw = teamIdInRawBody(rawBody);
|
|
80
|
+
let body;
|
|
81
|
+
try {
|
|
82
|
+
body = JSON.parse(rawBody);
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
await parkUnparseable(d, teamIdFromRaw);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (answerUrlVerification(res, body))
|
|
89
|
+
return;
|
|
90
|
+
// Fail closed: resolveTenantForSlackTeam returns null for an unknown team on a non-empty slack_workspaces; park it in slack_dlq (bucket='unroutable')
|
|
91
|
+
// and still ACKs 200 so Slack stops retrying; never call ingest.
|
|
103
92
|
let resolvedTenant = null;
|
|
104
93
|
if (body !== undefined && isSlackEventEnvelope(body)) {
|
|
105
|
-
|
|
106
|
-
try {
|
|
107
|
-
resolvedTenant = resolveTenantForTeam(db, body.team_id);
|
|
108
|
-
}
|
|
109
|
-
finally {
|
|
110
|
-
closeHippoDb(db);
|
|
111
|
-
}
|
|
94
|
+
resolvedTenant = await resolveTenantForSlackTeam(d.hippoRoot, body.team_id, d.store);
|
|
112
95
|
if (resolvedTenant === null) {
|
|
113
|
-
|
|
96
|
+
await parkAndAck(d, {
|
|
114
97
|
tenantId: null, // unroutable - stored as '__unroutable__'
|
|
115
98
|
teamId: body.team_id,
|
|
116
99
|
error: `unroutable team_id: ${body.team_id}`,
|
|
@@ -127,9 +110,10 @@ function routeSignedSlackPayload(d) {
|
|
|
127
110
|
hippoRoot: d.hippoRoot,
|
|
128
111
|
tenantId: resolvedTenant,
|
|
129
112
|
actor: { subject: 'connector:slack', role: 'admin' },
|
|
113
|
+
store: d.store,
|
|
130
114
|
};
|
|
131
115
|
if (body === undefined || !isSlackEventEnvelope(body)) {
|
|
132
|
-
|
|
116
|
+
await parkAndAck(d, {
|
|
133
117
|
tenantId: ctx.tenantId,
|
|
134
118
|
teamId: teamIdFromRaw,
|
|
135
119
|
error: 'not an event_callback envelope',
|
|
@@ -137,35 +121,25 @@ function routeSignedSlackPayload(d) {
|
|
|
137
121
|
});
|
|
138
122
|
return;
|
|
139
123
|
}
|
|
140
|
-
dispatchSlackEvent(d, ctx, body);
|
|
124
|
+
await dispatchSlackEvent(d, ctx, body);
|
|
141
125
|
}
|
|
142
|
-
function parkUnparseable(d, teamIdFromRaw) {
|
|
126
|
+
async function parkUnparseable(d, teamIdFromRaw) {
|
|
143
127
|
// Attribute the parse failure to the originating workspace via the regex-extracted
|
|
144
128
|
// 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' });
|
|
129
|
+
const parseFailTenant = teamIdFromRaw !== null ? await resolveTenantForSlackTeam(d.hippoRoot, teamIdFromRaw, d.store) : null;
|
|
130
|
+
await parkAndAck(d, {
|
|
131
|
+
tenantId: parseFailTenant, // null → '__unroutable__' sentinel
|
|
132
|
+
teamId: teamIdFromRaw,
|
|
133
|
+
error: 'invalid JSON',
|
|
134
|
+
bucket: 'parse_error',
|
|
135
|
+
});
|
|
162
136
|
}
|
|
163
|
-
function dispatchSlackEvent(d, ctx, body) {
|
|
137
|
+
async function dispatchSlackEvent(d, ctx, body) {
|
|
164
138
|
const { res } = d;
|
|
165
139
|
const inner = body.event;
|
|
166
140
|
if (isSlackMessageEvent(inner)) {
|
|
167
141
|
if (inner.subtype === 'message_deleted' && inner.deleted_ts) {
|
|
168
|
-
const r = handleMessageDeleted(ctx, {
|
|
142
|
+
const r = await handleMessageDeleted(ctx, {
|
|
169
143
|
teamId: body.team_id,
|
|
170
144
|
channelId: inner.channel,
|
|
171
145
|
deletedTs: inner.deleted_ts,
|
|
@@ -174,11 +148,9 @@ function dispatchSlackEvent(d, ctx, body) {
|
|
|
174
148
|
sendJson(res, 200, { ok: true, status: r.status });
|
|
175
149
|
return;
|
|
176
150
|
}
|
|
177
|
-
const r = ingestMessage(ctx, {
|
|
151
|
+
const r = await ingestMessage(ctx, {
|
|
178
152
|
teamId: body.team_id,
|
|
179
|
-
//
|
|
180
|
-
// proxy. 'group'|'im'|'mpim' → private. 'channel' → public. Unknown
|
|
181
|
-
// → private (fail closed).
|
|
153
|
+
// Channel privacy is not on the inner event, so channel_type is the proxy: 'group'|'im'|'mpim' private, 'channel' public, unknown private.
|
|
182
154
|
channel: {
|
|
183
155
|
id: inner.channel,
|
|
184
156
|
is_private: inner.channel_type !== 'channel',
|
|
@@ -191,7 +163,7 @@ function dispatchSlackEvent(d, ctx, body) {
|
|
|
191
163
|
sendJson(res, 200, { ok: true, status: r.status, memoryId: r.memoryId });
|
|
192
164
|
return;
|
|
193
165
|
}
|
|
194
|
-
|
|
166
|
+
await parkAndAck(d, {
|
|
195
167
|
tenantId: ctx.tenantId,
|
|
196
168
|
teamId: body.team_id,
|
|
197
169
|
error: `unhandled event type: ${inner.type ?? 'unknown'}`,
|
|
@@ -1,46 +1,13 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* Non-empty = multi-workspace install (fail-closed routing via
|
|
7
|
-
* `resolveTenantForTeam`).
|
|
8
|
-
*
|
|
9
|
-
* These helpers give the CLI (`hippo slack workspaces add|list|remove`) a
|
|
10
|
-
* surface, so operators with multiple workspaces need no direct SQL.
|
|
11
|
-
*
|
|
12
|
-
* Design choices:
|
|
13
|
-
* - `add` is an upsert (ON CONFLICT UPDATE). Re-registering an
|
|
14
|
-
* existing team_id with a different tenant_id intentionally
|
|
15
|
-
* overwrites — operators move workspaces between tenants and the
|
|
16
|
-
* CLI shouldn't require a delete+add dance.
|
|
17
|
-
* - `list` sorts by team_id for stable output.
|
|
18
|
-
* - `remove` returns a boolean for the CLI to distinguish "removed"
|
|
19
|
-
* from "not found" without an extra SELECT.
|
|
20
|
-
*/
|
|
21
|
-
import type { DatabaseSyncLike } from '../../db.js';
|
|
22
|
-
export interface SlackWorkspace {
|
|
23
|
-
teamId: string;
|
|
24
|
-
tenantId: string;
|
|
25
|
-
addedAt: string;
|
|
26
|
-
}
|
|
1
|
+
/** Slack workspace registration helpers: the `slack_workspaces` table maps `team_id` to `tenant_id` (empty = single-tenant, non-empty = fail-closed routing).
|
|
2
|
+
* `add` is an upsert that overwrites an existing team_id's tenant on purpose, so moving a workspace needs no delete+add. */
|
|
3
|
+
import { type SlackWorkspace } from '../../store/connectors/slack.js';
|
|
4
|
+
export type { SlackWorkspace };
|
|
5
|
+
export { listSlackWorkspaces as listWorkspaces, removeSlackWorkspace as removeWorkspace } from '../../store/connectors/slack.js';
|
|
27
6
|
export interface AddWorkspaceOpts {
|
|
28
7
|
teamId: string;
|
|
29
8
|
tenantId: string;
|
|
30
9
|
}
|
|
31
|
-
/**
|
|
32
|
-
*
|
|
33
|
-
|
|
34
|
-
*/
|
|
35
|
-
export declare function addWorkspace(db: DatabaseSyncLike, opts: AddWorkspaceOpts): SlackWorkspace;
|
|
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;
|
|
10
|
+
/** Register or re-register a Slack team → tenant mapping. Upserts on
|
|
11
|
+
* team_id conflict (operators move workspaces between tenants). */
|
|
12
|
+
export declare function addWorkspace(hippoRoot: string, opts: AddWorkspaceOpts): SlackWorkspace;
|
|
46
13
|
//# sourceMappingURL=workspaces.d.ts.map
|
|
@@ -1,60 +1,10 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
*
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
* These helpers give the CLI (`hippo slack workspaces add|list|remove`) a
|
|
10
|
-
* surface, so operators with multiple workspaces need no direct SQL.
|
|
11
|
-
*
|
|
12
|
-
* Design choices:
|
|
13
|
-
* - `add` is an upsert (ON CONFLICT UPDATE). Re-registering an
|
|
14
|
-
* existing team_id with a different tenant_id intentionally
|
|
15
|
-
* overwrites — operators move workspaces between tenants and the
|
|
16
|
-
* CLI shouldn't require a delete+add dance.
|
|
17
|
-
* - `list` sorts by team_id for stable output.
|
|
18
|
-
* - `remove` returns a boolean for the CLI to distinguish "removed"
|
|
19
|
-
* from "not found" without an extra SELECT.
|
|
20
|
-
*/
|
|
21
|
-
/**
|
|
22
|
-
* Register or re-register a Slack team → tenant mapping. Upserts on
|
|
23
|
-
* team_id conflict (operators move workspaces between tenants).
|
|
24
|
-
*/
|
|
25
|
-
export function addWorkspace(db, opts) {
|
|
26
|
-
const addedAt = new Date().toISOString();
|
|
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;
|
|
1
|
+
/** Slack workspace registration helpers: the `slack_workspaces` table maps `team_id` to `tenant_id` (empty = single-tenant, non-empty = fail-closed routing).
|
|
2
|
+
* `add` is an upsert that overwrites an existing team_id's tenant on purpose, so moving a workspace needs no delete+add. */
|
|
3
|
+
import { upsertSlackWorkspace } from '../../store/connectors/slack.js';
|
|
4
|
+
export { listSlackWorkspaces as listWorkspaces, removeSlackWorkspace as removeWorkspace } from '../../store/connectors/slack.js';
|
|
5
|
+
/** Register or re-register a Slack team → tenant mapping. Upserts on
|
|
6
|
+
* team_id conflict (operators move workspaces between tenants). */
|
|
7
|
+
export function addWorkspace(hippoRoot, opts) {
|
|
8
|
+
return upsertSlackWorkspace(hippoRoot, opts.teamId, opts.tenantId);
|
|
59
9
|
}
|
|
60
10
|
//# 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,14 +1,10 @@
|
|
|
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
|
-
//
|
|
7
|
-
//
|
|
8
|
-
// conflicts before the polarity heuristics run.
|
|
9
|
-
// Jaccard threshold on stopword-filtered tokens. Only applied after a polarity
|
|
10
|
-
// signal has already been detected (explicit pair or inferred negation), so
|
|
11
|
-
// this just filters out drive-by topic similarity, not semantic drift.
|
|
6
|
+
// Gate contradictions on content overlap, not shared tags (`feedback`/`policy` are too coarse). The Jaccard threshold on stopword-filtered tokens
|
|
7
|
+
// only applies after a polarity signal, so it filters drive-by topic similarity, not semantic drift.
|
|
12
8
|
const CONFLICT_OVERLAP_THRESHOLD = 0.5;
|
|
13
9
|
// Minimum distinctive shared tokens before we trust an overlap score. Filters
|
|
14
10
|
// out cases where two memories share only common English + a project name.
|
|
@@ -41,9 +37,8 @@ rescuedIds = new Set()) {
|
|
|
41
37
|
const partnersOf = overlapPartners(profiles.map((p) => p.distinct), jaccardMinShared(CONFLICT_OVERLAP_THRESHOLD, CONFLICT_MIN_RARE_SHARED));
|
|
42
38
|
for (let i = 0; i < survivors.length; i++) {
|
|
43
39
|
for (const j of partnersOf(i)) {
|
|
44
|
-
// Traces are variants of each other, not contradictions
|
|
45
|
-
//
|
|
46
|
-
// exists for stated-rule disagreement, not strategy diversity.
|
|
40
|
+
// Traces are variants of each other, not contradictions: two strategies for the same task can both be valid,
|
|
41
|
+
// and conflict detection is for stated-rule disagreement, not strategy diversity.
|
|
47
42
|
if (survivors[i].layer === Layer.Trace && survivors[j].layer === Layer.Trace)
|
|
48
43
|
continue;
|
|
49
44
|
if (survivors[i].superseded_by || survivors[j].superseded_by)
|
|
@@ -77,8 +72,7 @@ function recalledTogether(a, b) {
|
|
|
77
72
|
}
|
|
78
73
|
function conflictProfile(text) {
|
|
79
74
|
const opening = openingWindow(text);
|
|
80
|
-
// Polarity is measured only in the first POLARITY_WINDOW_WORDS, so a stray
|
|
81
|
-
// negation deep in a prose memory doesn't flip the intent.
|
|
75
|
+
// Polarity is measured only in the first POLARITY_WINDOW_WORDS, so a stray negation deep in a prose memory doesn't flip the intent.
|
|
82
76
|
// Pad with spaces so space-delimited patterns match words at the start/end.
|
|
83
77
|
return { distinct: distinctiveTokens(text), polarity: inferConflictPolarity(opening), window: ' ' + opening.toLowerCase() + ' ' };
|
|
84
78
|
}
|
|
@@ -128,9 +122,7 @@ function openingWindow(text) {
|
|
|
128
122
|
}
|
|
129
123
|
// Takes opening windows only, so " on " and " off " as prepositions deep in long prose don't read as enabled/disabled.
|
|
130
124
|
function classifyConflictType(a, b, aPolarity, bPolarity) {
|
|
131
|
-
//
|
|
132
|
-
// match "on/off". Pair only `enabled` ↔ `disabled` and explicit on/off in
|
|
133
|
-
// imperative context.
|
|
125
|
+
// Whole-word boundaries so " on " alone doesn't match "on/off"; pair only `enabled` <-> `disabled` and explicit on/off in imperative context.
|
|
134
126
|
const enabledDisabled = (containsAny(a, [' enabled ', ' enable ']) && containsAny(b, [' disabled ', ' disable ']))
|
|
135
127
|
|| (containsAny(b, [' enabled ', ' enable ']) && containsAny(a, [' disabled ', ' disable ']));
|
|
136
128
|
if (enabledDisabled)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface DagSummaryOptions {
|
|
2
|
+
apiKey: string;
|
|
3
|
+
model?: string;
|
|
4
|
+
fetcher?: typeof fetch;
|
|
5
|
+
onError?: (msg: string) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function generateDagSummary(label: string, factContents: string[], opts: DagSummaryOptions): Promise<string | null>;
|
|
8
|
+
//# sourceMappingURL=dag-summary.d.ts.map
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// The one LLM call behind every DAG summary, kept apart from the graph writes so its request bytes are tested on their own.
|
|
2
|
+
import { redactSecretsStrict } from '../util/secret-detect.js';
|
|
3
|
+
import { describeMessageFailure, sendAnthropicMessage } from '../util/anthropic-messages.js';
|
|
4
|
+
import { certainDefect } from '../core/memory-quality.js';
|
|
5
|
+
const DAG_SUMMARY_PROMPT = `You are summarizing a cluster of facts about a specific topic/entity for a memory system.
|
|
6
|
+
|
|
7
|
+
Topic: {label}
|
|
8
|
+
Facts:
|
|
9
|
+
{facts}
|
|
10
|
+
|
|
11
|
+
` +
|
|
12
|
+
'Write a single concise paragraph (2-4 sentences) that captures all the key information from these facts. ' +
|
|
13
|
+
'This summary will be used to quickly determine if this cluster is relevant to a future query, ' +
|
|
14
|
+
'so include specific names, dates, numbers, and key details. Output ONLY the summary paragraph, no preamble.';
|
|
15
|
+
// Output budget for one summary paragraph, and the shortest reply kept as a summary.
|
|
16
|
+
const SUMMARY_MAX_TOKENS = 400;
|
|
17
|
+
const SUMMARY_MIN_CHARS = 20;
|
|
18
|
+
export async function generateDagSummary(label, factContents, opts) {
|
|
19
|
+
const factsBlock = factContents.map((f, i) => `${i + 1}. ${redactSecretsStrict(f)}`).join('\n');
|
|
20
|
+
const prompt = DAG_SUMMARY_PROMPT
|
|
21
|
+
.replace('{label}', redactSecretsStrict(label))
|
|
22
|
+
.replace('{facts}', factsBlock);
|
|
23
|
+
const reply = await sendAnthropicMessage({
|
|
24
|
+
apiKey: opts.apiKey,
|
|
25
|
+
model: opts.model,
|
|
26
|
+
maxTokens: SUMMARY_MAX_TOKENS,
|
|
27
|
+
prompt,
|
|
28
|
+
fetcher: opts.fetcher,
|
|
29
|
+
});
|
|
30
|
+
if (!reply.ok) {
|
|
31
|
+
opts.onError?.(describeMessageFailure(reply.failure));
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
const defect = certainDefect(reply.text);
|
|
35
|
+
if (defect !== null) {
|
|
36
|
+
opts.onError?.(`summary quality refused: ${defect}`);
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
return reply.text.length >= SUMMARY_MIN_CHARS ? reply.text : null;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=dag-summary.js.map
|