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,65 +1,17 @@
|
|
|
1
|
-
import { adminActor } from '../../api.js';
|
|
2
|
-
import {
|
|
1
|
+
import { adminActor } from '../../api/index.js';
|
|
2
|
+
import { bumpSlackDlqRetryCount, listSlackDlq, markSlackDlqRetried, slackDlqEntry, } from '../../store/connectors/slack.js';
|
|
3
|
+
import { replayFailed } from '../dlq.js';
|
|
3
4
|
import { ingestMessage } from './ingest.js';
|
|
4
|
-
import {
|
|
5
|
+
import { resolveTenantForSlackTeam } from './tenant-routing.js';
|
|
5
6
|
import { verifySlackSignature } from './signature.js';
|
|
6
7
|
import { isSlackEventEnvelope, isSlackMessageEvent } from './types.js';
|
|
7
8
|
import { handleMessageDeleted } from './deletion.js';
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
.prepare(`INSERT INTO slack_dlq
|
|
15
|
-
(tenant_id, team_id, raw_payload, error, received_at, bucket, signature, slack_timestamp)
|
|
16
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
17
|
-
.run(opts.tenantId ?? '__unroutable__', opts.teamId ?? null, rawPayload, redacted ? `${opts.error}; ${DLQ_REDACTED_NOTE}` : opts.error, new Date().toISOString(), opts.bucket ?? 'parse_error', redacted ? null : opts.signature ?? null, opts.slackTimestamp ?? null);
|
|
18
|
-
return Number(result.lastInsertRowid);
|
|
19
|
-
}
|
|
20
|
-
export function listDlq(db, opts) {
|
|
21
|
-
// SAFETY: row shape matches the columns named in the SELECT below.
|
|
22
|
-
const rows = db
|
|
23
|
-
.prepare(`SELECT id, tenant_id, team_id, raw_payload, error, received_at, retried_at,
|
|
24
|
-
bucket, retry_count, signature, slack_timestamp
|
|
25
|
-
FROM slack_dlq
|
|
26
|
-
WHERE tenant_id = ?
|
|
27
|
-
ORDER BY received_at ASC
|
|
28
|
-
LIMIT ?`)
|
|
29
|
-
.all(opts.tenantId, opts.limit ?? 100);
|
|
30
|
-
return rows.map(rowToItem);
|
|
31
|
-
}
|
|
32
|
-
export function getDlqEntry(db, id) {
|
|
33
|
-
// SAFETY: row shape matches the columns named in the SELECT below.
|
|
34
|
-
const row = db
|
|
35
|
-
.prepare(`SELECT id, tenant_id, team_id, raw_payload, error, received_at, retried_at,
|
|
36
|
-
bucket, retry_count, signature, slack_timestamp
|
|
37
|
-
FROM slack_dlq
|
|
38
|
-
WHERE id = ?`)
|
|
39
|
-
.get(id);
|
|
40
|
-
if (!row)
|
|
41
|
-
return null;
|
|
42
|
-
return rowToItem(row);
|
|
43
|
-
}
|
|
44
|
-
function rowToItem(r) {
|
|
45
|
-
return {
|
|
46
|
-
id: Number(r.id),
|
|
47
|
-
tenantId: String(r.tenant_id),
|
|
48
|
-
teamId: r.team_id == null ? null : String(r.team_id),
|
|
49
|
-
rawPayload: String(r.raw_payload),
|
|
50
|
-
error: String(r.error),
|
|
51
|
-
receivedAt: String(r.received_at),
|
|
52
|
-
retriedAt: r.retried_at == null ? null : String(r.retried_at),
|
|
53
|
-
bucket: r.bucket == null ? 'parse_error' : String(r.bucket),
|
|
54
|
-
retryCount: Number(r.retry_count ?? 0),
|
|
55
|
-
signature: r.signature == null ? null : String(r.signature),
|
|
56
|
-
slackTimestamp: r.slack_timestamp == null ? null : String(r.slack_timestamp),
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
export function markDlqRetried(db, id) {
|
|
60
|
-
db.prepare(`UPDATE slack_dlq SET retried_at = ?, retry_count = retry_count + 1 WHERE id = ?`)
|
|
61
|
-
.run(new Date().toISOString(), id);
|
|
62
|
-
}
|
|
9
|
+
import { errorMessage } from '../../util/log.js';
|
|
10
|
+
/** Slack's dead-letter table; `teamId` and `slackTimestamp` are the columns only it has. */
|
|
11
|
+
export const slackDlq = {
|
|
12
|
+
letter: (row) => ({ connector: 'slack', ...row }),
|
|
13
|
+
list: listSlackDlq,
|
|
14
|
+
};
|
|
63
15
|
/**
|
|
64
16
|
* Replay a DLQ row through the normal ingest path. Used by `hippo slack dlq
|
|
65
17
|
* replay <id> [--force]`.
|
|
@@ -79,18 +31,10 @@ export function markDlqRetried(db, id) {
|
|
|
79
31
|
* envelope was DLQed. That is intentional: the DLQ exists to be drained after
|
|
80
32
|
* the operator fixed the routing.
|
|
81
33
|
*/
|
|
82
|
-
export function replayDlqEntry(ctx, id, opts = {}) {
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
row = getDlqEntry(db, id);
|
|
87
|
-
}
|
|
88
|
-
finally {
|
|
89
|
-
closeHippoDb(db);
|
|
90
|
-
}
|
|
91
|
-
if (!row) {
|
|
92
|
-
return { ok: false, status: 'not_found', memoryId: null, retryCount: 0, reason: `dlq id ${id} not found` };
|
|
93
|
-
}
|
|
34
|
+
export async function replayDlqEntry(ctx, id, opts = {}) {
|
|
35
|
+
const row = slackDlqEntry(ctx.hippoRoot, id);
|
|
36
|
+
if (!row)
|
|
37
|
+
return replayFailed('not_found', 0, `dlq id ${id} not found`);
|
|
94
38
|
// Signature verification (current secret, not previous).
|
|
95
39
|
if (!opts.force) {
|
|
96
40
|
const sigFailure = checkReplaySignature(row, opts);
|
|
@@ -103,20 +47,13 @@ export function replayDlqEntry(ctx, id, opts = {}) {
|
|
|
103
47
|
parsed = JSON.parse(row.rawPayload);
|
|
104
48
|
}
|
|
105
49
|
catch (e) {
|
|
106
|
-
return failAndBump(ctx.hippoRoot, row, 'parse_error', `still unparseable: ${
|
|
50
|
+
return failAndBump(ctx.hippoRoot, row, 'parse_error', `still unparseable: ${errorMessage(e)}`);
|
|
107
51
|
}
|
|
108
52
|
if (!isSlackEventEnvelope(parsed)) {
|
|
109
53
|
return failAndBump(ctx.hippoRoot, row, 'unhandled', 'not an event_callback envelope');
|
|
110
54
|
}
|
|
111
55
|
// Resolve tenant against current state. If still unroutable, bail.
|
|
112
|
-
const
|
|
113
|
-
let tenant;
|
|
114
|
-
try {
|
|
115
|
-
tenant = resolveTenantForTeam(db2, parsed.team_id);
|
|
116
|
-
}
|
|
117
|
-
finally {
|
|
118
|
-
closeHippoDb(db2);
|
|
119
|
-
}
|
|
56
|
+
const tenant = await resolveTenantForSlackTeam(ctx.hippoRoot, parsed.team_id);
|
|
120
57
|
if (!tenant) {
|
|
121
58
|
return failAndBump(ctx.hippoRoot, row, 'unroutable', `team_id ${parsed.team_id} still unroutable`);
|
|
122
59
|
}
|
|
@@ -130,13 +67,7 @@ export function replayDlqEntry(ctx, id, opts = {}) {
|
|
|
130
67
|
/** The failure result when the row cannot pass the signature gate, else null; never bumps the count. */
|
|
131
68
|
function checkReplaySignature(row, opts) {
|
|
132
69
|
if (!row.signature || !row.slackTimestamp) {
|
|
133
|
-
return
|
|
134
|
-
ok: false,
|
|
135
|
-
status: 'sig_missing',
|
|
136
|
-
memoryId: null,
|
|
137
|
-
retryCount: row.retryCount,
|
|
138
|
-
reason: 'row has no signature/timestamp (legacy, or redacted before storing); pass --force to replay',
|
|
139
|
-
};
|
|
70
|
+
return replayFailed('sig_missing', row.retryCount, 'row has no signature/timestamp (legacy, or redacted before storing); pass --force to replay');
|
|
140
71
|
}
|
|
141
72
|
if (opts.signingSecret) {
|
|
142
73
|
const ok = verifySlackSignature({
|
|
@@ -149,22 +80,16 @@ function checkReplaySignature(row, opts) {
|
|
|
149
80
|
skewSeconds: opts.skewSeconds ?? 60 * 60 * 24 * 365,
|
|
150
81
|
});
|
|
151
82
|
if (!ok) {
|
|
152
|
-
return
|
|
153
|
-
ok: false,
|
|
154
|
-
status: 'sig_fail',
|
|
155
|
-
memoryId: null,
|
|
156
|
-
retryCount: row.retryCount,
|
|
157
|
-
reason: 'signature did not verify against current SLACK_SIGNING_SECRET; pass --force to replay anyway',
|
|
158
|
-
};
|
|
83
|
+
return replayFailed('sig_fail', row.retryCount, 'signature did not verify against current SLACK_SIGNING_SECRET; pass --force to replay anyway');
|
|
159
84
|
}
|
|
160
85
|
}
|
|
161
86
|
return null;
|
|
162
87
|
}
|
|
163
88
|
function failAndBump(hippoRoot, row, status, reason) {
|
|
164
|
-
|
|
165
|
-
return
|
|
89
|
+
bumpSlackDlqRetryCount(hippoRoot, row.id);
|
|
90
|
+
return replayFailed(status, row.retryCount + 1, reason);
|
|
166
91
|
}
|
|
167
|
-
function dispatchReplay(replayCtx, row, parsed) {
|
|
92
|
+
async function dispatchReplay(replayCtx, row, parsed) {
|
|
168
93
|
const { hippoRoot } = replayCtx;
|
|
169
94
|
const id = row.id;
|
|
170
95
|
const inner = parsed.event;
|
|
@@ -172,16 +97,16 @@ function dispatchReplay(replayCtx, row, parsed) {
|
|
|
172
97
|
return failAndBump(hippoRoot, row, 'unhandled', `unhandled inner event type`);
|
|
173
98
|
}
|
|
174
99
|
if (inner.subtype === 'message_deleted' && inner.deleted_ts) {
|
|
175
|
-
const r = handleMessageDeleted(replayCtx, {
|
|
100
|
+
const r = await handleMessageDeleted(replayCtx, {
|
|
176
101
|
teamId: parsed.team_id,
|
|
177
102
|
channelId: inner.channel,
|
|
178
103
|
deletedTs: inner.deleted_ts,
|
|
179
104
|
eventId: parsed.event_id,
|
|
180
105
|
});
|
|
181
|
-
|
|
106
|
+
markSlackDlqRetried(hippoRoot, id);
|
|
182
107
|
return { ok: true, status: r.status, memoryId: r.memoryId, retryCount: row.retryCount + 1 };
|
|
183
108
|
}
|
|
184
|
-
const result = ingestMessage(replayCtx, {
|
|
109
|
+
const result = await ingestMessage(replayCtx, {
|
|
185
110
|
teamId: parsed.team_id,
|
|
186
111
|
channel: {
|
|
187
112
|
id: inner.channel,
|
|
@@ -192,25 +117,7 @@ function dispatchReplay(replayCtx, row, parsed) {
|
|
|
192
117
|
message: inner,
|
|
193
118
|
eventId: parsed.event_id,
|
|
194
119
|
});
|
|
195
|
-
|
|
120
|
+
markSlackDlqRetried(hippoRoot, id);
|
|
196
121
|
return { ok: true, status: result.status, memoryId: result.memoryId, retryCount: row.retryCount + 1 };
|
|
197
122
|
}
|
|
198
|
-
function markRetried(hippoRoot, id) {
|
|
199
|
-
const db = openHippoDb(hippoRoot);
|
|
200
|
-
try {
|
|
201
|
-
markDlqRetried(db, id);
|
|
202
|
-
}
|
|
203
|
-
finally {
|
|
204
|
-
closeHippoDb(db);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
function bumpRetryCount(hippoRoot, id) {
|
|
208
|
-
const db = openHippoDb(hippoRoot);
|
|
209
|
-
try {
|
|
210
|
-
db.prepare(`UPDATE slack_dlq SET retry_count = retry_count + 1 WHERE id = ?`).run(id);
|
|
211
|
-
}
|
|
212
|
-
finally {
|
|
213
|
-
closeHippoDb(db);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
123
|
//# sourceMappingURL=dlq.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Context } from '../../api.js';
|
|
1
|
+
import { type Context } from '../../api/index.js';
|
|
2
2
|
import type { ChannelMeta } from './scope.js';
|
|
3
3
|
import type { SlackMessageEvent } from './types.js';
|
|
4
4
|
export interface IngestInput {
|
|
@@ -13,21 +13,8 @@ export interface IngestResult {
|
|
|
13
13
|
status: IngestStatus;
|
|
14
14
|
memoryId: string | null;
|
|
15
15
|
}
|
|
16
|
-
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
|
|
20
|
-
* - The memory write and the slack_event_log mark commit atomically through
|
|
21
|
-
* `api.remember`'s `afterWrite` hook — a crash between the two cannot
|
|
22
|
-
* produce a duplicate on the next retry.
|
|
23
|
-
* - The afterWrite hook uses an explicit `INSERT OR IGNORE` + changes-check:
|
|
24
|
-
* if a concurrent worker beat us to slack_event_log between the pre-check
|
|
25
|
-
* and the SAVEPOINT, we throw `DuplicateEventError` to roll back the memory
|
|
26
|
-
* write. The pre-check `hasSeenEvent` stays as a fast path for the common
|
|
27
|
-
* already-seen case, but the afterWrite throw is what makes idempotency
|
|
28
|
-
* correct under two-worker concurrency.
|
|
29
|
-
* - Empty-body messages return 'skipped' but still mark seen so a replay
|
|
30
|
-
* returns 'duplicate' rather than re-running the transform.
|
|
31
|
-
*/
|
|
32
|
-
export declare function ingestMessage(ctx: Context, input: IngestInput): IngestResult;
|
|
16
|
+
/** Ingests a Slack message as a kind='raw' memory, once per event id: Slack redelivers within a minute.
|
|
17
|
+
* The pre-check is only the fast path; the store logs the event in the memory's own transaction, which is what holds when two workers race.
|
|
18
|
+
* An empty body is logged with no memory, so its replay skips the transform. */
|
|
19
|
+
export declare function ingestMessage(ctx: Context, input: IngestInput): Promise<IngestResult>;
|
|
33
20
|
//# sourceMappingURL=ingest.d.ts.map
|
|
@@ -1,108 +1,45 @@
|
|
|
1
|
-
import { remember } from '../../api.js';
|
|
2
|
-
import {
|
|
3
|
-
import { RejectedValueError } from '../../rejection.js';
|
|
4
|
-
import { hasSeenEvent, markEventSeen, lookupMemoryByEvent, DuplicateEventError, } from './idempotency.js';
|
|
1
|
+
import { remember } from '../../api/index.js';
|
|
2
|
+
import { requireGroup, storeFor } from '../../store/index.js';
|
|
3
|
+
import { RejectedValueError } from '../../store/rejection.js';
|
|
5
4
|
import { messageToRememberOpts } from './transform.js';
|
|
6
|
-
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
* produce a duplicate on the next retry.
|
|
13
|
-
* - The afterWrite hook uses an explicit `INSERT OR IGNORE` + changes-check:
|
|
14
|
-
* if a concurrent worker beat us to slack_event_log between the pre-check
|
|
15
|
-
* and the SAVEPOINT, we throw `DuplicateEventError` to roll back the memory
|
|
16
|
-
* write. The pre-check `hasSeenEvent` stays as a fast path for the common
|
|
17
|
-
* already-seen case, but the afterWrite throw is what makes idempotency
|
|
18
|
-
* correct under two-worker concurrency.
|
|
19
|
-
* - Empty-body messages return 'skipped' but still mark seen so a replay
|
|
20
|
-
* returns 'duplicate' rather than re-running the transform.
|
|
21
|
-
*/
|
|
22
|
-
export function ingestMessage(ctx, input) {
|
|
5
|
+
/** Ingests a Slack message as a kind='raw' memory, once per event id: Slack redelivers within a minute.
|
|
6
|
+
* The pre-check is only the fast path; the store logs the event in the memory's own transaction, which is what holds when two workers race.
|
|
7
|
+
* An empty body is logged with no memory, so its replay skips the transform. */
|
|
8
|
+
export async function ingestMessage(ctx, input) {
|
|
9
|
+
const events = requireGroup(storeFor(ctx), 'connectorEvents');
|
|
10
|
+
const event = { connector: 'slack', eventId: input.eventId };
|
|
23
11
|
// Idempotency check: if already seen, return the cached memory_id without
|
|
24
12
|
// re-running the transform or hitting api.remember.
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const cachedId = lookupMemoryByEvent(db, input.eventId);
|
|
31
|
-
return { status: cachedId === null ? 'skipped' : 'duplicate', memoryId: cachedId };
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
finally {
|
|
35
|
-
closeHippoDb(db);
|
|
13
|
+
const seen = await events.eventRecord(event);
|
|
14
|
+
if (seen.seen) {
|
|
15
|
+
// Empty-body events are marked seen with memory_id=NULL, so their replay returns the same 'skipped'
|
|
16
|
+
// they first returned; a non-NULL memory_id means a memory was ingested, so 'duplicate'.
|
|
17
|
+
return { status: seen.memoryId === null ? 'skipped' : 'duplicate', memoryId: seen.memoryId };
|
|
36
18
|
}
|
|
37
19
|
const opts = messageToRememberOpts(input);
|
|
38
20
|
if (!opts) {
|
|
39
|
-
|
|
40
|
-
try {
|
|
41
|
-
markEventSeen(db2, input.eventId, null);
|
|
42
|
-
}
|
|
43
|
-
finally {
|
|
44
|
-
closeHippoDb(db2);
|
|
45
|
-
}
|
|
21
|
+
await events.markEventSeen(event);
|
|
46
22
|
return { status: 'skipped', memoryId: null };
|
|
47
23
|
}
|
|
48
|
-
// Atomic write: the afterWrite callback runs inside writeEntry's SAVEPOINT,
|
|
49
|
-
// so the memory row and the slack_event_log row commit (or roll back)
|
|
50
|
-
// together. Slack's 1-minute retry window can no longer produce a duplicate
|
|
51
|
-
// via the crash-between-handles race.
|
|
52
24
|
try {
|
|
53
|
-
return rememberWithEventLog(ctx,
|
|
25
|
+
return await rememberWithEventLog(ctx, event, opts);
|
|
54
26
|
}
|
|
55
27
|
catch (e) {
|
|
56
|
-
if (e instanceof
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
28
|
+
if (!(e instanceof RejectedValueError))
|
|
29
|
+
throw e;
|
|
30
|
+
// A tombstone hit is a PERMANENT skip: a DLQ retry would hit the same refusal forever, so mark the
|
|
31
|
+
// event seen like the empty-body branch above and let a Slack retry ack as done, not error.
|
|
32
|
+
await events.markEventSeen(event);
|
|
33
|
+
return { status: 'skipped', memoryId: null };
|
|
61
34
|
}
|
|
62
35
|
}
|
|
63
|
-
function rememberWithEventLog(ctx,
|
|
36
|
+
async function rememberWithEventLog(ctx, event, opts) {
|
|
64
37
|
// No `|| 'connector:slack'` fallback: the caller always builds ctx with the connector subject, and with
|
|
65
38
|
// an object-shaped Context.actor an OR-fallback would never fire anyway.
|
|
66
|
-
const result = remember(ctx, {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const inserted = innerDb
|
|
71
|
-
.prepare(`INSERT OR IGNORE INTO slack_event_log (event_id, ingested_at, memory_id) VALUES (?, ?, ?)`)
|
|
72
|
-
.run(eventId, new Date().toISOString(), memoryId);
|
|
73
|
-
if ((Number(inserted.changes ?? 0)) === 0) {
|
|
74
|
-
// Two-worker race: another writer reserved this event_id between
|
|
75
|
-
// the pre-check and the write. Throw to roll back the SAVEPOINT
|
|
76
|
-
// in writeEntry — the memory row gets discarded, idempotency
|
|
77
|
-
// holds, exactly one memory exists for this event_id.
|
|
78
|
-
throw new DuplicateEventError(eventId);
|
|
79
|
-
}
|
|
80
|
-
},
|
|
81
|
-
});
|
|
39
|
+
const result = await remember(ctx, { ...opts, untrusted: true, event });
|
|
40
|
+
// Another worker logged this event between the pre-check and the write: its memory stands and ours was not stored.
|
|
41
|
+
if (result.duplicate)
|
|
42
|
+
return { status: 'skipped_duplicate', memoryId: result.duplicate.memoryId };
|
|
82
43
|
return { status: 'ingested', memoryId: result.id };
|
|
83
44
|
}
|
|
84
|
-
function lostRaceResult(ctx, eventId) {
|
|
85
|
-
// The other worker's memory row is already committed. Return its id
|
|
86
|
-
// so the caller behaves identically to the fast-path 'duplicate' branch.
|
|
87
|
-
const db3 = openHippoDb(ctx.hippoRoot);
|
|
88
|
-
try {
|
|
89
|
-
const cachedId = lookupMemoryByEvent(db3, eventId);
|
|
90
|
-
return { status: 'skipped_duplicate', memoryId: cachedId };
|
|
91
|
-
}
|
|
92
|
-
finally {
|
|
93
|
-
closeHippoDb(db3);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
function rejectedValueResult(ctx, eventId) {
|
|
97
|
-
// A tombstone hit is a PERMANENT skip: a DLQ retry would hit the same refusal forever, so mark the
|
|
98
|
-
// event seen like the empty-body branch above and let a Slack retry ack as done, not error.
|
|
99
|
-
const db4 = openHippoDb(ctx.hippoRoot);
|
|
100
|
-
try {
|
|
101
|
-
markEventSeen(db4, eventId, null);
|
|
102
|
-
}
|
|
103
|
-
finally {
|
|
104
|
-
closeHippoDb(db4);
|
|
105
|
-
}
|
|
106
|
-
return { status: 'skipped', memoryId: null };
|
|
107
|
-
}
|
|
108
45
|
//# sourceMappingURL=ingest.js.map
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createHmac, timingSafeEqual } from 'crypto';
|
|
2
|
+
const DEFAULT_SKEW_SECONDS = 5 * 60;
|
|
2
3
|
function verifyOne(rawBody, signature, timestamp, secret) {
|
|
3
4
|
if (!signature.startsWith('v0='))
|
|
4
5
|
return false;
|
|
@@ -12,7 +13,7 @@ function verifyOne(rawBody, signature, timestamp, secret) {
|
|
|
12
13
|
export function verifySlackSignature(opts) {
|
|
13
14
|
const { rawBody, timestamp, signature, signingSecret, previousSecret } = opts;
|
|
14
15
|
const now = opts.now ?? Math.floor(Date.now() / 1000);
|
|
15
|
-
const skew = opts.skewSeconds ??
|
|
16
|
+
const skew = opts.skewSeconds ?? DEFAULT_SKEW_SECONDS;
|
|
16
17
|
const ts = Number(timestamp);
|
|
17
18
|
if (!Number.isFinite(ts))
|
|
18
19
|
return false;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { DatabaseSyncLike } from '../../db.js';
|
|
1
|
+
import type { DatabaseSyncLike } from '../../db/index.js';
|
|
2
|
+
import { type HippoStore } from '../../store/index.js';
|
|
2
3
|
/**
|
|
3
4
|
* Look up the tenant_id for a Slack team_id.
|
|
4
5
|
*
|
|
@@ -16,4 +17,6 @@ import type { DatabaseSyncLike } from '../../db.js';
|
|
|
16
17
|
* workspace's events into the deployment tenant.
|
|
17
18
|
*/
|
|
18
19
|
export declare function resolveTenantForTeam(db: DatabaseSyncLike, teamId: string): string | null;
|
|
20
|
+
/** resolveTenantForTeam through `store`, else hippo.db under `hippoRoot`. */
|
|
21
|
+
export declare function resolveTenantForSlackTeam(hippoRoot: string, teamId: string, store?: HippoStore): Promise<string | null>;
|
|
19
22
|
//# sourceMappingURL=tenant-routing.d.ts.map
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { envSlackAllowUnknownTeamFallback, envTenant } from '../../env.js';
|
|
1
|
+
import { envSlackAllowUnknownTeamFallback, envTenant } from '../../util/env.js';
|
|
2
|
+
import { requireGroup, storeFor } from '../../store/index.js';
|
|
3
|
+
import { slackTeamRouteAt } from '../../store/connectors/slack.js';
|
|
2
4
|
/**
|
|
3
5
|
* Look up the tenant_id for a Slack team_id.
|
|
4
6
|
*
|
|
@@ -16,19 +18,16 @@ import { envSlackAllowUnknownTeamFallback, envTenant } from '../../env.js';
|
|
|
16
18
|
* workspace's events into the deployment tenant.
|
|
17
19
|
*/
|
|
18
20
|
export function resolveTenantForTeam(db, teamId) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
.prepare(`SELECT COUNT(*) AS c FROM slack_workspaces`)
|
|
30
|
-
.get().c;
|
|
31
|
-
if (Number(total) === 0) {
|
|
21
|
+
return tenantForRoute(slackTeamRouteAt(db, teamId));
|
|
22
|
+
}
|
|
23
|
+
/** resolveTenantForTeam through `store`, else hippo.db under `hippoRoot`. */
|
|
24
|
+
export async function resolveTenantForSlackTeam(hippoRoot, teamId, store) {
|
|
25
|
+
return tenantForRoute(await requireGroup(storeFor({ hippoRoot, store }), 'connectorEvents').slackTeamRoute(teamId));
|
|
26
|
+
}
|
|
27
|
+
function tenantForRoute(route) {
|
|
28
|
+
if (route.tenantId !== null)
|
|
29
|
+
return route.tenantId;
|
|
30
|
+
if (route.workspaceCount === 0) {
|
|
32
31
|
// Single-workspace install: env fallback is safe.
|
|
33
32
|
return envTenant();
|
|
34
33
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Slack Events API envelope shapes used by the ingestion connector.
|
|
3
3
|
* Spec: https://api.slack.com/events-api
|
|
4
4
|
*/
|
|
5
|
-
import { type JsonValue } from '../../json.js';
|
|
5
|
+
import { type JsonValue } from '../../util/json.js';
|
|
6
6
|
export interface SlackUrlVerification {
|
|
7
7
|
type: 'url_verification';
|
|
8
8
|
challenge: string;
|
|
@@ -2,18 +2,9 @@
|
|
|
2
2
|
* Slack Events API envelope shapes used by the ingestion connector.
|
|
3
3
|
* Spec: https://api.slack.com/events-api
|
|
4
4
|
*/
|
|
5
|
-
import { isJsonString } from '../../json.js';
|
|
6
|
-
function isJsonNumber(value) {
|
|
7
|
-
return typeof value === 'number';
|
|
8
|
-
}
|
|
9
|
-
function isJsonRecord(value) {
|
|
10
|
-
return (value !== null &&
|
|
11
|
-
value !== undefined &&
|
|
12
|
-
!Array.isArray(value) &&
|
|
13
|
-
typeof value === 'object');
|
|
14
|
-
}
|
|
5
|
+
import { isJsonString, isJsonObject, isJsonNumber } from '../../util/json.js';
|
|
15
6
|
export function isSlackEventEnvelope(x) {
|
|
16
|
-
if (!
|
|
7
|
+
if (!isJsonObject(x))
|
|
17
8
|
return false;
|
|
18
9
|
const o = x;
|
|
19
10
|
if (o.type !== 'event_callback')
|
|
@@ -22,7 +13,7 @@ export function isSlackEventEnvelope(x) {
|
|
|
22
13
|
return false;
|
|
23
14
|
}
|
|
24
15
|
const event = o.event;
|
|
25
|
-
return
|
|
16
|
+
return isJsonObject(event) && isJsonString(event.type);
|
|
26
17
|
}
|
|
27
18
|
export function isSlackMessageEvent(x) {
|
|
28
19
|
if (x === null || typeof x !== 'object' || Array.isArray(x))
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { fetchWithRetry, isRetryableStatus } from '../../http-retry.js';
|
|
2
|
-
import { isJsonString } from '../../json.js';
|
|
1
|
+
import { fetchWithRetry, isRetryableStatus } from '../../util/http-retry.js';
|
|
2
|
+
import { isJsonString } from '../../util/json.js';
|
|
3
3
|
/**
|
|
4
4
|
* Build a SlackHistoryFetcher that pages `conversations.history` over real
|
|
5
5
|
* HTTP. Wraps `fetchWithRetry` so 429 and 5xx handling is automatic. The returned
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { HippoStore } from '../../store/index.js';
|
|
2
|
+
import { type WebhookRequest } from '../../util/http-util.js';
|
|
2
3
|
/**
|
|
3
4
|
* Slack Events API webhook. Auth is signature-based (HMAC over the raw
|
|
4
5
|
* body with SLACK_SIGNING_SECRET); Bearer is NOT required, which is why
|
|
@@ -18,5 +19,5 @@ import { type WebhookRequest } from '../../http-util.js';
|
|
|
18
19
|
*
|
|
19
20
|
* Bearer auth is skipped on purpose: server.ts checks isPublicRoute before calling this.
|
|
20
21
|
*/
|
|
21
|
-
export declare function handleSlackEventsWebhook(
|
|
22
|
+
export declare function handleSlackEventsWebhook(request: WebhookRequest, store?: HippoStore): Promise<void>;
|
|
22
23
|
//# sourceMappingURL=webhook.d.ts.map
|