hippo-memory 1.71.0 → 2.0.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 +7 -5
- package/dist/agent-memories/apply.d.ts +0 -11
- package/dist/agent-memories/apply.js +11 -26
- package/dist/agent-memories/claude-code.js +1 -1
- package/dist/agent-memories/codex.js +1 -1
- package/dist/agent-memories/copilot.d.ts +1 -3
- package/dist/agent-memories/copilot.js +1 -17
- package/dist/agent-memories/project-folds.d.ts +10 -0
- package/dist/agent-memories/project-folds.js +34 -0
- package/dist/agent-memories/sync.js +8 -6
- package/dist/api/assemble.js +3 -2
- package/dist/api/audit.d.ts +30 -2
- package/dist/api/audit.js +48 -7
- package/dist/api/auth.d.ts +11 -9
- package/dist/api/auth.js +39 -40
- package/dist/api/auto-sleep.d.ts +5 -2
- package/dist/api/auto-sleep.js +7 -3
- package/dist/api/availability.js +2 -3
- package/dist/api/cards.d.ts +42 -0
- package/dist/api/cards.js +52 -0
- package/dist/api/conflicts.d.ts +28 -0
- package/dist/api/conflicts.js +61 -0
- package/dist/api/context-auto.js +4 -2
- package/dist/api/context-render.js +4 -3
- package/dist/api/context-select.js +15 -29
- package/dist/api/context.js +29 -18
- package/dist/api/continuity.d.ts +47 -0
- package/dist/api/continuity.js +66 -0
- package/dist/api/dormant.js +4 -2
- package/dist/api/drill-down.js +3 -2
- package/dist/api/embeddings.d.ts +17 -0
- package/dist/api/embeddings.js +28 -0
- package/dist/api/error-reply.d.ts +8 -0
- package/dist/api/error-reply.js +21 -0
- package/dist/api/forget.d.ts +7 -3
- package/dist/api/forget.js +24 -14
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +5 -9
- package/dist/api/graph.js +2 -1
- package/dist/api/index.d.ts +4 -2
- package/dist/api/index.js +4 -2
- package/dist/api/instruction-detect.js +5 -1
- package/dist/api/learn.d.ts +5 -1
- package/dist/api/learn.js +71 -44
- package/dist/api/ledger-db.d.ts +2 -6
- package/dist/api/ledger-db.js +4 -36
- package/dist/api/memories.d.ts +21 -1
- package/dist/api/memories.js +51 -1
- package/dist/api/objects.d.ts +1 -1
- package/dist/api/objects.js +2 -1
- package/dist/api/outcome.d.ts +5 -5
- package/dist/api/outcome.js +17 -16
- package/dist/api/pilot-arm.d.ts +1 -11
- package/dist/api/pilot-arm.js +5 -45
- package/dist/api/predictions.d.ts +3 -1
- package/dist/api/predictions.js +8 -1
- package/dist/api/projects.d.ts +21 -0
- package/dist/api/projects.js +24 -0
- package/dist/api/promote.d.ts +3 -3
- package/dist/api/promote.js +26 -28
- package/dist/api/prompt-hook.d.ts +17 -2
- package/dist/api/prompt-hook.js +45 -4
- package/dist/api/quarantine.js +2 -1
- package/dist/api/recall-cli.d.ts +3 -0
- package/dist/api/recall-cli.js +13 -4
- package/dist/api/recall-core.js +10 -5
- package/dist/api/recall-pipeline.js +23 -24
- package/dist/api/recall-request.js +1 -1
- package/dist/api/recall-types.d.ts +3 -1
- package/dist/api/recall.d.ts +0 -3
- package/dist/api/recall.js +51 -73
- package/dist/api/remember-local.d.ts +5 -2
- package/dist/api/remember-local.js +15 -7
- package/dist/api/remember.d.ts +7 -3
- package/dist/api/remember.js +19 -16
- package/dist/api/session-end.d.ts +46 -0
- package/dist/api/session-end.js +131 -0
- package/dist/api/sleep-run.d.ts +1 -1
- package/dist/api/sleep-run.js +16 -11
- package/dist/api/sleep.js +4 -3
- package/dist/api/status.d.ts +24 -0
- package/dist/api/status.js +40 -0
- package/dist/api/store-init.d.ts +4 -0
- package/dist/api/store-init.js +9 -0
- package/dist/api/tokens.js +2 -2
- package/dist/api/types.d.ts +3 -7
- package/dist/api/types.js +6 -1
- package/dist/capture/caller-session.d.ts +0 -3
- package/dist/capture/caller-session.js +1 -12
- package/dist/capture/capture-error.d.ts +2 -2
- package/dist/capture/capture-error.js +23 -18
- package/dist/capture/codex-patch.js +3 -1
- package/dist/capture/command.js +36 -95
- package/dist/capture/compact.js +10 -5
- package/dist/capture/compaction-items-caller.js +11 -20
- package/dist/capture/compaction-record.d.ts +7 -93
- package/dist/capture/compaction-record.js +29 -426
- package/dist/capture/compaction-spool.d.ts +7 -7
- package/dist/capture/compaction-spool.js +60 -51
- package/dist/capture/copilot-transcript.d.ts +2 -1
- package/dist/capture/copilot-transcript.js +2 -1
- package/dist/capture/extract.d.ts +5 -2
- package/dist/capture/extract.js +4 -3
- package/dist/capture/failure-caller.d.ts +1 -1
- package/dist/capture/failure-caller.js +21 -16
- package/dist/capture/failure-reading.d.ts +2 -1
- package/dist/capture/failure-reading.js +7 -9
- package/dist/capture/pre-compact-caller.js +5 -4
- package/dist/capture/session-digest.js +4 -3
- package/dist/capture/session-end-caller.js +3 -2
- package/dist/capture/session-worker.js +22 -10
- package/dist/capture/transcript.d.ts +2 -1
- package/dist/capture/transcript.js +6 -3
- package/dist/capture/working-state.d.ts +4 -2
- package/dist/capture/working-state.js +4 -2
- package/dist/cli/audit-prune.d.ts +0 -25
- package/dist/cli/audit-prune.js +1 -27
- package/dist/cli/audit.js +20 -20
- package/dist/cli/auth.d.ts +1 -1
- package/dist/cli/auth.js +16 -17
- package/dist/cli/briefs.d.ts +1 -4
- package/dist/cli/briefs.js +37 -292
- package/dist/cli/card.js +41 -33
- package/dist/cli/client.d.ts +6 -2
- package/dist/cli/client.js +37 -21
- package/dist/cli/compact-resume-payload.js +1 -1
- package/dist/cli/context.d.ts +1 -1
- package/dist/cli/context.js +13 -13
- package/dist/cli/continuity.d.ts +1 -1
- package/dist/cli/continuity.js +36 -39
- package/dist/cli/curate.d.ts +2 -2
- package/dist/cli/curate.js +32 -36
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +23 -8
- package/dist/cli/decisions.d.ts +0 -2
- package/dist/cli/decisions.js +7 -285
- package/dist/cli/eval.d.ts +1 -1
- package/dist/cli/eval.js +12 -13
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +21 -25
- package/dist/cli/flag-values.js +16 -6
- package/dist/cli/flags.d.ts +0 -289
- package/dist/cli/flags.js +3 -138
- package/dist/cli/graph.d.ts +3 -0
- package/dist/cli/graph.js +83 -0
- package/dist/cli/hook-runtime.d.ts +6 -6
- package/dist/cli/hook-runtime.js +9 -36
- package/dist/cli/incidents.d.ts +3 -0
- package/dist/cli/incidents.js +112 -0
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +28 -19
- package/dist/cli/install-steps.d.ts +2 -1
- package/dist/cli/install-steps.js +11 -3
- package/dist/cli/last-sleep.js +1 -1
- package/dist/cli/maintenance.d.ts +3 -3
- package/dist/cli/maintenance.js +29 -30
- package/dist/cli/notes.d.ts +2 -0
- package/dist/cli/notes.js +41 -0
- package/dist/cli/object-verbs.d.ts +2 -2
- package/dist/cli/object-verbs.js +4 -4
- package/dist/cli/open-browser.d.ts +14 -0
- package/dist/cli/open-browser.js +26 -0
- package/dist/cli/playbooks.d.ts +3 -4
- package/dist/cli/playbooks.js +126 -290
- package/dist/cli/predictions.d.ts +3 -0
- package/dist/cli/predictions.js +174 -0
- package/dist/cli/print.js +2 -1
- package/dist/cli/projects.js +30 -22
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +6 -5
- package/dist/cli/recall.js +13 -7
- package/dist/cli/refine-llm.js +18 -17
- package/dist/cli/remember.js +17 -17
- package/dist/cli/scheduler.js +2 -1
- package/dist/cli/serve.js +11 -6
- package/dist/cli/session-hooks.d.ts +1 -5
- package/dist/cli/session-hooks.js +89 -168
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.js +17 -10
- package/dist/cli/shared.d.ts +2 -6
- package/dist/cli/shared.js +9 -29
- package/dist/cli/sleep-render.js +6 -3
- package/dist/cli/sleep.js +6 -37
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +32 -35
- package/dist/cli/transfer.d.ts +3 -3
- package/dist/cli/transfer.js +64 -43
- package/dist/cli/usage.d.ts +1 -80
- package/dist/cli/usage.js +2 -696
- package/dist/cli/verb-row.d.ts +34 -0
- package/dist/cli/verb-row.js +6 -0
- package/dist/cli/verbs/health.d.ts +27 -0
- package/dist/cli/verbs/health.js +234 -0
- package/dist/cli/verbs/memory.d.ts +16 -0
- package/dist/cli/verbs/memory.js +236 -0
- package/dist/cli/verbs/objects.d.ts +20 -0
- package/dist/cli/verbs/objects.js +257 -0
- package/dist/cli/verbs/sessions.d.ts +31 -0
- package/dist/cli/verbs/sessions.js +314 -0
- package/dist/cli/verbs.d.ts +81 -0
- package/dist/cli/verbs.js +7 -0
- package/dist/cli/versioned-verbs.d.ts +51 -0
- package/dist/cli/versioned-verbs.js +79 -0
- package/dist/cli.d.ts +1 -272
- package/dist/cli.js +24 -315
- package/dist/connectors/dlq.d.ts +39 -3
- package/dist/connectors/dlq.js +39 -4
- package/dist/connectors/github/backfill.js +12 -3
- package/dist/connectors/github/deletion.js +2 -1
- package/dist/connectors/github/dlq.js +31 -73
- package/dist/connectors/github/ingest.d.ts +2 -6
- package/dist/connectors/github/ingest.js +5 -29
- package/dist/connectors/github/tenant-routing.js +2 -1
- package/dist/connectors/github/webhook.d.ts +2 -1
- package/dist/connectors/github/webhook.js +35 -2
- package/dist/connectors/ingest.d.ts +10 -0
- package/dist/connectors/ingest.js +29 -0
- package/dist/connectors/slack/deletion.js +2 -1
- package/dist/connectors/slack/dlq.js +49 -71
- package/dist/connectors/slack/ingest.d.ts +2 -6
- package/dist/connectors/slack/ingest.js +4 -28
- package/dist/connectors/slack/tenant-routing.js +2 -1
- package/dist/connectors/slack/webhook.d.ts +2 -1
- package/dist/connectors/slack/webhook.js +2 -1
- package/dist/consolidate/conflicts.js +2 -2
- package/dist/consolidate/dag.js +29 -18
- package/dist/consolidate/dedupe.d.ts +7 -0
- package/dist/consolidate/dedupe.js +6 -4
- package/dist/consolidate/llm-passes.js +45 -19
- package/dist/consolidate/memory-value.js +3 -2
- package/dist/consolidate/merge.js +8 -8
- package/dist/consolidate/physics-pass.d.ts +6 -1
- package/dist/consolidate/physics-pass.js +26 -6
- package/dist/consolidate/replay.js +11 -4
- package/dist/consolidate/sleep.js +9 -6
- package/dist/consolidate/traces.js +5 -5
- package/dist/core/ablation.d.ts +10 -0
- package/dist/core/ablation.js +12 -0
- package/dist/{sharing/scope.d.ts → core/active-scope.d.ts} +1 -1
- package/dist/{sharing/scope.js → core/active-scope.js} +1 -1
- package/dist/core/ambient.d.ts +4 -0
- package/dist/core/ambient.js +39 -18
- package/dist/core/api-errors.d.ts +16 -0
- package/dist/core/api-errors.js +20 -0
- package/dist/core/card.js +3 -1
- package/dist/core/compaction-timing.d.ts +7 -0
- package/dist/core/compaction-timing.js +9 -0
- package/dist/core/config.d.ts +1 -1
- package/dist/core/config.js +22 -18
- package/dist/core/cosine.d.ts +3 -0
- package/dist/core/cosine.js +19 -0
- package/dist/{store → core}/markdown.d.ts +1 -1
- package/dist/{store → core}/markdown.js +4 -4
- package/dist/core/memory-audit.d.ts +17 -0
- package/dist/core/memory-audit.js +54 -0
- package/dist/core/memory.d.ts +14 -8
- package/dist/core/memory.js +35 -23
- package/dist/{consolidate → core}/merged-row.d.ts +1 -1
- package/dist/{consolidate → core}/merged-row.js +1 -1
- package/dist/core/physics.d.ts +3 -1
- package/dist/core/physics.js +23 -18
- package/dist/core/prediction.d.ts +3 -0
- package/dist/core/prediction.js +6 -0
- package/dist/core/project-identity.d.ts +3 -0
- package/dist/core/project-identity.js +12 -2
- package/dist/{store → core}/recall-scope.d.ts +1 -10
- package/dist/{store → core}/recall-scope.js +2 -19
- package/dist/core/search-types.d.ts +1 -1
- package/dist/dashboard/dashboard-actions.d.ts +2 -2
- package/dist/dashboard/dashboard-actions.js +5 -5
- package/dist/dashboard/dashboard-queries.js +2 -7
- package/dist/dashboard/dashboard-snapshot.js +1 -3
- package/dist/dashboard/dashboard.js +16 -5
- package/dist/db/busy.d.ts +2 -7
- package/dist/db/busy.js +21 -26
- package/dist/db/connect.d.ts +2 -2
- package/dist/db/connect.js +7 -7
- package/dist/db/index.d.ts +3 -3
- package/dist/db/index.js +3 -3
- package/dist/db/migrate.js +14 -7
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/v11.js +1 -0
- package/dist/db/migrations/v14.js +1 -0
- package/dist/db/migrations/v55.d.ts +3 -0
- package/dist/db/migrations/v55.js +17 -0
- package/dist/db/open.d.ts +0 -2
- package/dist/db/open.js +6 -10
- package/dist/db/physics-state.d.ts +0 -4
- package/dist/db/physics-state.js +7 -33
- package/dist/db/request-stores.d.ts +1 -0
- package/dist/db/request-stores.js +2 -1
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -2
- package/dist/db/vector-store.js +19 -5
- package/dist/db/wal-checkpointer.js +2 -1
- package/dist/doctor.d.ts +3 -0
- package/dist/doctor.js +18 -15
- package/dist/embeddings/local.d.ts +62 -0
- package/dist/embeddings/local.js +146 -0
- package/dist/{store/embeddings → embeddings}/provider.d.ts +5 -2
- package/dist/{store/embeddings → embeddings}/provider.js +19 -25
- package/dist/embeddings/transformers.d.ts +26 -0
- package/dist/embeddings/transformers.js +89 -0
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +1 -1
- package/dist/entry/store-kit.d.ts +37 -0
- package/dist/entry/store-kit.js +25 -0
- package/dist/entry/testing.d.ts +6 -0
- package/dist/entry/testing.js +7 -0
- package/dist/eval/eval-suite.js +17 -11
- package/dist/eval/eval.js +1 -1
- package/dist/eval/judgment.js +12 -5
- package/dist/graph/extract.js +3 -3
- package/dist/graph/recall.js +1 -1
- package/dist/graph/view.js +13 -5
- package/dist/graph/write.d.ts +1 -1
- package/dist/graph/write.js +9 -9
- package/dist/hooks/codex-session.js +3 -2
- package/dist/hooks/codex-wrapper.js +2 -1
- package/dist/hooks/json-hooks.js +10 -4
- package/dist/hooks/opencode.js +8 -5
- package/dist/hooks/shared.d.ts +0 -6
- package/dist/hooks/shared.js +4 -15
- package/dist/importers/core.js +4 -4
- package/dist/importers/sources.js +5 -4
- package/dist/importers/vault.d.ts +1 -1
- package/dist/importers/vault.js +25 -23
- package/dist/index.d.ts +5 -4
- package/dist/index.js +4 -3
- package/dist/learn/autolearn.d.ts +15 -3
- package/dist/learn/autolearn.js +38 -16
- package/dist/learn/churn-git.js +13 -4
- package/dist/learn/extract.d.ts +3 -2
- package/dist/learn/extract.js +7 -5
- package/dist/learn/forward-claim-detector.js +4 -2
- package/dist/learn/invalidation.d.ts +2 -1
- package/dist/learn/invalidation.js +18 -9
- package/dist/mcp/admin-tools.d.ts +2 -2
- package/dist/mcp/admin-tools.js +27 -48
- package/dist/mcp/format.js +3 -2
- package/dist/mcp/framing.d.ts +1 -0
- package/dist/mcp/framing.js +1 -1
- package/dist/mcp/memory-tools.d.ts +1 -1
- package/dist/mcp/memory-tools.js +8 -9
- package/dist/mcp/protocol.d.ts +11 -7
- package/dist/mcp/protocol.js +25 -12
- package/dist/mcp/recall-tools.js +12 -9
- package/dist/mcp/request.js +22 -20
- package/dist/mcp/stdio.js +37 -16
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +44 -21
- package/dist/objects/customer-notes.d.ts +2 -2
- package/dist/objects/decisions.d.ts +2 -2
- package/dist/objects/descriptor.d.ts +1 -1
- package/dist/objects/incidents.d.ts +2 -2
- package/dist/objects/lifecycle.d.ts +1 -1
- package/dist/objects/lifecycle.js +2 -1
- package/dist/objects/policies.d.ts +2 -2
- package/dist/objects/policies.js +2 -1
- package/dist/objects/processes.d.ts +2 -2
- package/dist/objects/project-briefs.d.ts +2 -2
- package/dist/objects/project-briefs.js +2 -3
- package/dist/objects/skills.d.ts +2 -2
- package/dist/postinstall.js +1 -1
- package/dist/rerankers/clef.js +3 -6
- package/dist/rerankers/cross-encoder.d.ts +31 -2
- package/dist/rerankers/cross-encoder.js +71 -98
- package/dist/rerankers/index.js +5 -4
- package/dist/rerankers/jev.js +2 -4
- package/dist/rerankers/outage-warning.d.ts +3 -1
- package/dist/rerankers/outage-warning.js +5 -3
- package/dist/search/bm25-search.js +1 -1
- package/dist/search/boosts.js +1 -1
- package/dist/search/embed-memories.d.ts +12 -0
- package/dist/search/embed-memories.js +389 -0
- package/dist/search/engine.d.ts +8 -0
- package/dist/search/engine.js +10 -0
- package/dist/search/goal-boost.d.ts +1 -1
- package/dist/search/goal-boost.js +6 -3
- package/dist/search/hybrid.d.ts +9 -2
- package/dist/search/hybrid.js +9 -4
- package/dist/search/physics-search.d.ts +6 -3
- package/dist/search/physics-search.js +22 -15
- package/dist/search/rerank.js +1 -1
- package/dist/search/vector.d.ts +8 -6
- package/dist/search/vector.js +14 -17
- package/dist/server/auth.d.ts +3 -1
- package/dist/server/auth.js +24 -15
- package/dist/server/boot.d.ts +2 -1
- package/dist/server/boot.js +34 -84
- package/dist/server/client-ip.d.ts +9 -6
- package/dist/server/client-ip.js +36 -17
- package/dist/server/deadline.d.ts +0 -2
- package/dist/server/deadline.js +1 -7
- package/dist/server/defaults.d.ts +1 -0
- package/dist/server/defaults.js +1 -0
- package/dist/server/mcp-http.js +16 -11
- package/dist/server/request.js +7 -2
- package/dist/server/route-checks.d.ts +7 -0
- package/dist/server/route-checks.js +42 -0
- package/dist/server/route-table.d.ts +9 -8
- package/dist/server/route-table.js +127 -133
- package/dist/server/routes/admin.d.ts +8 -8
- package/dist/server/routes/admin.js +13 -21
- package/dist/server/routes/customer-notes.d.ts +6 -6
- package/dist/server/routes/customer-notes.js +1 -2
- package/dist/server/routes/decisions.d.ts +6 -6
- package/dist/server/routes/decisions.js +2 -4
- package/dist/server/routes/incidents.d.ts +6 -6
- package/dist/server/routes/incidents.js +2 -5
- package/dist/server/routes/memories.d.ts +9 -9
- package/dist/server/routes/memories.js +19 -40
- package/dist/server/routes/object-routes.d.ts +6 -6
- package/dist/server/routes/object-routes.js +4 -7
- package/dist/server/routes/policies.d.ts +7 -7
- package/dist/server/routes/policies.js +2 -4
- package/dist/server/routes/predictions.d.ts +6 -6
- package/dist/server/routes/predictions.js +9 -13
- package/dist/server/routes/processes.d.ts +6 -6
- package/dist/server/routes/processes.js +1 -2
- package/dist/server/routes/project-briefs.d.ts +7 -7
- package/dist/server/routes/project-briefs.js +2 -4
- package/dist/server/routes/recall.d.ts +5 -5
- package/dist/server/routes/recall.js +6 -10
- package/dist/server/routes/skills.d.ts +7 -7
- package/dist/server/routes/skills.js +2 -4
- package/dist/server/server-detect.d.ts +7 -1
- package/dist/server/server-detect.js +36 -11
- package/dist/server/sleep-child.js +26 -7
- package/dist/server/sleep-offload.d.ts +11 -5
- package/dist/server/sleep-offload.js +17 -11
- package/dist/server/tls.d.ts +7 -2
- package/dist/server/tls.js +17 -5
- package/dist/server/types.d.ts +29 -12
- package/dist/server/validation.d.ts +1 -2
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +4 -40
- package/dist/server.js +3 -29
- package/dist/sharing/global-store.d.ts +4 -5
- package/dist/sharing/global-store.js +8 -13
- package/dist/sharing/global-sync.js +38 -45
- package/dist/sharing/project-merge.d.ts +7 -14
- package/dist/sharing/project-merge.js +57 -121
- package/dist/sharing/search-both.js +10 -3
- package/dist/sharing/share.d.ts +2 -0
- package/dist/sharing/share.js +39 -38
- package/dist/store/ambient.js +7 -7
- package/dist/store/audit-event.d.ts +1 -1
- package/dist/store/audit.d.ts +0 -16
- package/dist/store/audit.js +4 -55
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +7 -3
- package/dist/store/candidates.d.ts +3 -2
- package/dist/store/candidates.js +59 -30
- package/dist/store/capture-write.d.ts +17 -0
- package/dist/store/capture-write.js +35 -0
- package/dist/store/cards.js +6 -5
- package/dist/store/compaction-caller.d.ts +18 -0
- package/dist/store/compaction-caller.js +29 -0
- package/dist/store/compactions-record.d.ts +115 -0
- package/dist/store/compactions-record.js +418 -0
- package/dist/store/compactions.js +6 -4
- package/dist/store/conflicts.d.ts +7 -1
- package/dist/store/conflicts.js +13 -9
- package/dist/store/connectors/dlq.d.ts +10 -0
- package/dist/store/connectors/dlq.js +33 -0
- package/dist/store/connectors/event-log.d.ts +13 -0
- package/dist/store/connectors/event-log.js +24 -0
- package/dist/store/connectors/github.d.ts +7 -9
- package/dist/store/connectors/github.js +35 -60
- package/dist/store/connectors/slack.d.ts +2 -11
- package/dist/store/connectors/slack.js +24 -57
- package/dist/store/dashboard-reads.js +8 -6
- package/dist/store/delete-and-batch.d.ts +6 -0
- package/dist/store/delete-and-batch.js +40 -6
- package/dist/store/delivery-recorder.d.ts +12 -5
- package/dist/store/delivery-recorder.js +13 -11
- package/dist/store/descendant-page.js +8 -4
- package/dist/store/dormant.d.ts +1 -1
- package/dist/store/dormant.js +10 -4
- package/dist/store/embeddings/index.d.ts +2 -12
- package/dist/store/embeddings/index.js +5 -374
- package/dist/store/entry-reads.d.ts +35 -4
- package/dist/store/entry-reads.js +86 -19
- package/dist/store/entry-row.js +9 -2
- package/dist/store/entry-writes.d.ts +15 -12
- package/dist/store/entry-writes.js +54 -22
- package/dist/store/failure-log-at.d.ts +8 -0
- package/dist/store/failure-log-at.js +16 -0
- package/dist/store/failure-log.d.ts +2 -2
- package/dist/store/failure-log.js +5 -3
- package/dist/{trust → store}/gated-write.d.ts +3 -1
- package/dist/{trust → store}/gated-write.js +7 -5
- package/dist/store/goals.js +22 -19
- package/dist/store/graph-reads.js +9 -6
- package/dist/store/graph-view-rows.js +2 -1
- package/dist/store/graph-writes.d.ts +6 -6
- package/dist/store/graph-writes.js +48 -71
- package/dist/store/half-life.js +2 -2
- package/dist/store/handoffs.d.ts +10 -4
- package/dist/store/handoffs.js +10 -9
- package/dist/store/index-and-stats.js +2 -2
- package/dist/store/index.d.ts +2 -2
- package/dist/store/index.js +1 -1
- package/dist/store/key-writes.js +1 -1
- package/dist/store/ledger-turn.d.ts +9 -0
- package/dist/store/ledger-turn.js +38 -0
- package/dist/store/mirrors.js +19 -10
- package/dist/store/open.d.ts +2 -5
- package/dist/store/open.js +42 -54
- package/dist/store/pilot-arm.d.ts +12 -0
- package/dist/store/pilot-arm.js +42 -0
- package/dist/store/port.d.ts +68 -6
- package/dist/store/port.js +8 -0
- package/dist/store/predictions.d.ts +1 -2
- package/dist/store/predictions.js +3 -6
- package/dist/store/project-tags.d.ts +62 -0
- package/dist/store/project-tags.js +67 -0
- package/dist/store/quality-repair.js +1 -1
- package/dist/store/quarantine.js +2 -1
- package/dist/store/recall-trace.d.ts +2 -0
- package/dist/store/recall-trace.js +20 -3
- package/dist/store/rejected-values.js +16 -10
- package/dist/store/rejection-probe.d.ts +4 -0
- package/dist/store/rejection-probe.js +19 -0
- package/dist/store/rejection.d.ts +0 -17
- package/dist/store/rejection.js +1 -21
- package/dist/store/rows.js +2 -2
- package/dist/store/rule-sql.d.ts +11 -0
- package/dist/store/rule-sql.js +31 -6
- package/dist/store/search-rows.d.ts +5 -5
- package/dist/store/search-rows.js +18 -16
- package/dist/store/sessions.js +4 -2
- package/dist/store/set-aside.d.ts +14 -0
- package/dist/store/set-aside.js +23 -0
- package/dist/store/sqlite/busy.d.ts +3 -0
- package/dist/store/sqlite/busy.js +8 -0
- package/dist/store/sqlite/connector-events-group.js +4 -7
- package/dist/store/sqlite/connector-writes-group.js +6 -4
- package/dist/store/sqlite/entry-writes-group.d.ts +3 -3
- package/dist/store/sqlite/entry-writes-group.js +3 -3
- package/dist/store/sqlite/error-codec.js +4 -3
- package/dist/store/sqlite/executor.js +10 -4
- package/dist/store/sqlite/graph-reads-group.js +1 -1
- package/dist/store/sqlite/held-connection.d.ts +11 -0
- package/dist/store/sqlite/held-connection.js +41 -0
- package/dist/store/sqlite/last-recall-group.d.ts +13 -0
- package/dist/store/sqlite/last-recall-group.js +57 -0
- package/dist/store/sqlite/local.d.ts +0 -17
- package/dist/store/sqlite/local.js +0 -31
- package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
- package/dist/store/sqlite/maintenance-groups.js +60 -0
- package/dist/store/sqlite/object-rows.d.ts +1 -1
- package/dist/store/sqlite/objects-group.d.ts +1 -1
- package/dist/store/sqlite/objects-group.js +15 -7
- package/dist/store/sqlite/store.d.ts +1 -8
- package/dist/store/sqlite/store.js +13 -22
- package/dist/store/summaries.d.ts +10 -3
- package/dist/store/summaries.js +54 -11
- package/dist/store/token-ledger-rows.js +3 -2
- package/dist/store/token-ledger.d.ts +0 -7
- package/dist/store/token-ledger.js +0 -35
- package/dist/store/vector-index.js +8 -4
- package/dist/support-bundle.js +2 -3
- package/dist/trust/reject-flow.js +2 -2
- package/dist/util/agent-homes.d.ts +15 -0
- package/dist/util/agent-homes.js +34 -0
- package/dist/util/anthropic-messages.d.ts +6 -1
- package/dist/util/anthropic-messages.js +26 -7
- package/dist/util/atomic-write.d.ts +5 -2
- package/dist/util/atomic-write.js +12 -8
- package/dist/util/chunked.d.ts +3 -0
- package/dist/util/chunked.js +10 -0
- package/dist/util/ellipsize.d.ts +3 -0
- package/dist/util/ellipsize.js +5 -0
- package/dist/util/env.d.ts +12 -2
- package/dist/util/env.js +12 -2
- package/dist/util/format.d.ts +5 -0
- package/dist/util/format.js +10 -0
- package/dist/util/hook-payload.d.ts +8 -0
- package/dist/util/hook-payload.js +37 -0
- package/dist/util/http-retry.d.ts +6 -0
- package/dist/util/http-retry.js +43 -5
- package/dist/util/http-util.d.ts +0 -8
- package/dist/util/http-util.js +10 -21
- package/dist/util/limits.d.ts +7 -0
- package/dist/util/limits.js +14 -0
- package/dist/util/log.d.ts +4 -0
- package/dist/util/log.js +9 -0
- package/dist/util/request-scope.d.ts +9 -3
- package/dist/util/request-scope.js +18 -9
- package/dist/util/secret-detect.js +6 -1
- package/dist/util/spawn-argv.d.ts +9 -0
- package/dist/util/spawn-argv.js +57 -0
- package/dist/util/sql.d.ts +3 -0
- package/dist/util/sql.js +6 -0
- package/dist/util/sqlite-blocked.d.ts +2 -0
- package/dist/util/sqlite-blocked.js +5 -0
- package/dist/util/stream-tee.d.ts +3 -0
- package/dist/util/stream-tee.js +35 -0
- package/dist/util/time.d.ts +4 -0
- package/dist/util/time.js +4 -0
- package/dist/util/vector-codec.d.ts +4 -0
- package/dist/util/vector-codec.js +15 -0
- package/dist/util/version.d.ts +1 -1
- package/dist/util/version.js +1 -1
- 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 +4 -2
- package/dist/api/on-store.d.ts +0 -16
- package/dist/api/on-store.js +0 -38
- package/dist/store/embeddings/local.d.ts +0 -15
- package/dist/store/embeddings/local.js +0 -175
- /package/dist/{cli → api}/correction-latency.d.ts +0 -0
- /package/dist/{cli → api}/correction-latency.js +0 -0
- /package/dist/{cli → api}/provenance-coverage.d.ts +0 -0
- /package/dist/{cli → api}/provenance-coverage.js +0 -0
- /package/dist/{store → core}/object-types.d.ts +0 -0
- /package/dist/{store → core}/object-types.js +0 -0
- /package/dist/{capture → util}/compaction-items.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.js +0 -0
- /package/dist/{store → util}/yaml.d.ts +0 -0
- /package/dist/{store → util}/yaml.js +0 -0
package/dist/mcp/tool-args.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// Hand-written for the JSON Schema subset the hippo tool definitions use, so the MCP server needs no validator dependency.
|
|
2
|
+
import { truncateWithEllipsis } from '../util/ellipsize.js';
|
|
2
3
|
const ARG_PREVIEW_CHARS = 40;
|
|
3
4
|
function isArgString(v) {
|
|
4
5
|
return typeof v === 'string';
|
|
@@ -24,7 +25,7 @@ function describeValue(v) {
|
|
|
24
25
|
if (Array.isArray(v))
|
|
25
26
|
return 'array';
|
|
26
27
|
if (isArgString(v))
|
|
27
|
-
return JSON.stringify(v
|
|
28
|
+
return JSON.stringify(truncateWithEllipsis(v, ARG_PREVIEW_CHARS));
|
|
28
29
|
if (isArgNumber(v) || isArgBoolean(v))
|
|
29
30
|
return String(v);
|
|
30
31
|
return 'object';
|
package/dist/mcp/tools.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
// Tool definitions and input schemas served by tools/list.
|
|
2
2
|
import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
3
3
|
import { DEFAULT_ASSEMBLE_BUDGET } from '../api/assemble.js';
|
|
4
|
-
import { MAX_ID_LEN } from '../util/
|
|
4
|
+
import { MAX_ID_LEN, MAX_LIST_LIMIT } from '../util/limits.js';
|
|
5
5
|
import { DEFAULT_SEARCH_CANDIDATE_LIMIT } from '../store/rows.js';
|
|
6
6
|
import { DEFAULT_CONFIG } from '../core/config.js';
|
|
7
7
|
// ── Tool definitions ──
|
|
8
8
|
// HTTP sets no budget cap; 25x the recall default leaves room for large-context clients while bounding one call's work.
|
|
9
9
|
const MAX_BUDGET_TOKENS = 25 * DEFAULT_RECALL_BUDGET;
|
|
10
|
-
// Same ceiling as the HTTP list routes' parseListLimit.
|
|
11
|
-
const MAX_LIST_LIMIT = 1000;
|
|
12
10
|
export const TOOLS = [
|
|
13
11
|
{
|
|
14
12
|
name: 'hippo_recall',
|
|
15
|
-
description: 'Retrieve relevant memories from the project memory store. Returns memories ranked by relevance, strength, and recency within the token budget. Use
|
|
13
|
+
description: 'Retrieve relevant memories from the project memory store. Returns memories ranked by relevance, strength, and recency within the token budget. Use ' +
|
|
14
|
+
'at session start or when you need context about a topic. Pass include_continuity=true to also surface the active task snapshot, latest matching ' +
|
|
15
|
+
'session handoff, and recent session events as a "## Continuity" appendix.',
|
|
16
16
|
inputSchema: {
|
|
17
17
|
type: 'object',
|
|
18
18
|
properties: {
|
|
@@ -29,28 +29,37 @@ export const TOOLS = [
|
|
|
29
29
|
},
|
|
30
30
|
scope: {
|
|
31
31
|
type: 'string',
|
|
32
|
-
description: 'Restrict results and continuity to memories/rows matching this scope exactly. When omitted, default-deny applies to ANY
|
|
32
|
+
description: 'Restrict results and continuity to memories/rows matching this scope exactly. When omitted, default-deny applies to ANY ' +
|
|
33
|
+
'<source>:private:* (slack, github, ...) and unknown-legacy rows.',
|
|
33
34
|
},
|
|
34
35
|
fresh_tail_count: {
|
|
35
36
|
type: 'number',
|
|
36
|
-
description: 'When > 0, surface the last N kind=raw rows tagged isFreshTail=true regardless of query match. Useful for "what did I just see"
|
|
37
|
+
description: 'When > 0, surface the last N kind=raw rows tagged isFreshTail=true regardless of query match. Useful for "what did I just see" ' +
|
|
38
|
+
'continuity. Capped at 200.',
|
|
37
39
|
},
|
|
38
40
|
fresh_tail_session_id: {
|
|
39
41
|
type: 'string',
|
|
40
|
-
description: 'Restrict the fresh-tail window to a specific session. Without this, fresh-tail is tenant-wide (legacy v1.5.2 behaviour, pre-v1.6.3
|
|
42
|
+
description: 'Restrict the fresh-tail window to a specific session. Without this, fresh-tail is tenant-wide (legacy v1.5.2 behaviour, pre-v1.6.3 ' +
|
|
43
|
+
'default).',
|
|
41
44
|
},
|
|
42
45
|
summarize_overflow: {
|
|
43
46
|
type: 'boolean',
|
|
44
|
-
description: 'When true (default), entries that overflow the limit and share a level-2 parent summary cause that summary to be appended in their
|
|
47
|
+
description: 'When true (default), entries that overflow the limit and share a level-2 parent summary cause that summary to be appended in their ' +
|
|
48
|
+
'place. Set false for strict-limit behaviour.',
|
|
45
49
|
},
|
|
46
50
|
scorer_window: {
|
|
47
51
|
type: 'number',
|
|
48
|
-
description: `How many of the top-ranked memories the fresh-tail and summarize-overflow appendix is worked out against.
|
|
52
|
+
description: `How many of the top-ranked memories the fresh-tail and summarize-overflow appendix is worked out against. ` +
|
|
53
|
+
`The main list ranks the whole tenant store, so scorer_window does not narrow it. ` +
|
|
54
|
+
`Default ${DEFAULT_SEARCH_CANDIDATE_LIMIT}. ` +
|
|
55
|
+
`Rejected as RecallContractError code=invalid_scorer_window if 0/negative/non-finite/non-numeric.`,
|
|
49
56
|
},
|
|
50
57
|
session_id: {
|
|
51
58
|
type: 'string',
|
|
52
59
|
maxLength: MAX_ID_LEN,
|
|
53
|
-
description: `Optional session id (v1.7.4). When set AND (tenant, session) has active goals,
|
|
60
|
+
description: `Optional session id (v1.7.4). When set AND (tenant, session) has active goals, ` +
|
|
61
|
+
`applies the dlPFC goal-stack boost to the ranked memories before formatting. ` +
|
|
62
|
+
`Mirrors fresh_tail_session_id shape (${MAX_ID_LEN}-char cap).`,
|
|
54
63
|
},
|
|
55
64
|
},
|
|
56
65
|
required: ['query'],
|
|
@@ -58,7 +67,9 @@ export const TOOLS = [
|
|
|
58
67
|
},
|
|
59
68
|
{
|
|
60
69
|
name: 'hippo_assemble',
|
|
61
|
-
description: 'Build a chronologically-ordered context window for a session. Returns ordered items: fresh-tail raw rows + level-2 summary substitutions for older
|
|
70
|
+
description: 'Build a chronologically-ordered context window for a session. Returns ordered items: fresh-tail raw rows + level-2 summary substitutions for older ' +
|
|
71
|
+
'rows + budget-fit. Hippo-additive vs lossless-claw: eviction picks lowest-strength non-fresh-tail items first instead of oldest-first. ' +
|
|
72
|
+
'Tenant-scoped; default-deny on private scopes.',
|
|
62
73
|
inputSchema: {
|
|
63
74
|
type: 'object',
|
|
64
75
|
properties: {
|
|
@@ -82,7 +93,8 @@ export const TOOLS = [
|
|
|
82
93
|
},
|
|
83
94
|
scope: {
|
|
84
95
|
type: 'string',
|
|
85
|
-
description: 'Restrict to memories whose scope matches exactly. When omitted, default-deny applies to ANY <source>:private:* scope and
|
|
96
|
+
description: 'Restrict to memories whose scope matches exactly. When omitted, default-deny applies to ANY <source>:private:* scope and ' +
|
|
97
|
+
'unknown:legacy rows. Pass an explicit scope to assemble a private session with consent.',
|
|
86
98
|
},
|
|
87
99
|
},
|
|
88
100
|
required: ['session_id'],
|
|
@@ -90,7 +102,8 @@ export const TOOLS = [
|
|
|
90
102
|
},
|
|
91
103
|
{
|
|
92
104
|
name: 'hippo_drill',
|
|
93
|
-
description: 'Walk one step down the DAG from a level-2+ topic summary to its direct children. Companion to hippo_recall: when recall returns an item with
|
|
105
|
+
description: 'Walk one step down the DAG from a level-2+ topic summary to its direct children. Companion to hippo_recall: when recall returns an item with ' +
|
|
106
|
+
'isSummary=true and substitutedFor=[ids], pass the summary id here to recover the original detail. Tenant-scoped; default-deny on private scopes.',
|
|
94
107
|
inputSchema: {
|
|
95
108
|
type: 'object',
|
|
96
109
|
properties: {
|
|
@@ -114,7 +127,8 @@ export const TOOLS = [
|
|
|
114
127
|
type: 'integer',
|
|
115
128
|
minimum: 1,
|
|
116
129
|
maximum: 10,
|
|
117
|
-
description: 'v0.30 / E5: walk N levels down (default 1 = direct children only). Higher values include children of children. Token budget remains
|
|
130
|
+
description: 'v0.30 / E5: walk N levels down (default 1 = direct children only). Higher values include children of children. Token budget remains ' +
|
|
131
|
+
'GLOBAL across levels. Hard cap 10.',
|
|
118
132
|
},
|
|
119
133
|
},
|
|
120
134
|
required: ['summary_id'],
|
|
@@ -122,7 +136,8 @@ export const TOOLS = [
|
|
|
122
136
|
},
|
|
123
137
|
{
|
|
124
138
|
name: 'hippo_remember',
|
|
125
|
-
description: 'Store a new memory. Use when you learn something non-obvious, hit an error, or discover a useful pattern. Memories decay over time unless retrieved.
|
|
139
|
+
description: 'Store a new memory. Use when you learn something non-obvious, hit an error, or discover a useful pattern. Memories decay over time unless retrieved. ' +
|
|
140
|
+
'Errors get 2x half-life.',
|
|
126
141
|
inputSchema: {
|
|
127
142
|
type: 'object',
|
|
128
143
|
properties: {
|
|
@@ -133,14 +148,16 @@ export const TOOLS = [
|
|
|
133
148
|
error: { type: 'boolean', description: 'Mark as error memory (doubles half-life)' },
|
|
134
149
|
pin: { type: 'boolean', description: 'Pin memory (never decays)' },
|
|
135
150
|
tag: { type: 'string', description: 'Optional tag for categorization' },
|
|
136
|
-
personal: { type: 'boolean', description: 'Store it as your own private memory: only you can recall it, in every project. Needs a key you minted or
|
|
151
|
+
personal: { type: 'boolean', description: 'Store it as your own private memory: only you can recall it, in every project. Needs a key you minted or ' +
|
|
152
|
+
'a sign-in.' },
|
|
137
153
|
},
|
|
138
154
|
required: ['text'],
|
|
139
155
|
},
|
|
140
156
|
},
|
|
141
157
|
{
|
|
142
158
|
name: 'hippo_outcome',
|
|
143
|
-
description: "Report whether recalled memories were useful. Good outcomes slow a memory's decay and bad ones speed it up, in proportion to its record. Call after
|
|
159
|
+
description: "Report whether recalled memories were useful. Good outcomes slow a memory's decay and bad ones speed it up, in proportion to its record. Call after " +
|
|
160
|
+
"completing work.",
|
|
144
161
|
inputSchema: {
|
|
145
162
|
type: 'object',
|
|
146
163
|
properties: {
|
|
@@ -154,7 +171,9 @@ export const TOOLS = [
|
|
|
154
171
|
},
|
|
155
172
|
{
|
|
156
173
|
name: 'hippo_context',
|
|
157
|
-
description: 'Smart context injection: auto-detects current task from git state and returns relevant memories plus the active task snapshot, session handoff and
|
|
174
|
+
description: 'Smart context injection: auto-detects current task from git state and returns relevant memories plus the active task snapshot, session handoff and ' +
|
|
175
|
+
'recent session trail (the same bundle as GET /v1/context). Use at the start of any session. Memories and those sections are scope-filtered: a ' +
|
|
176
|
+
'no-scope caller does NOT see ANY <source>:private:* (slack, github, ...) or legacy-quarantine rows.',
|
|
158
177
|
inputSchema: {
|
|
159
178
|
type: 'object',
|
|
160
179
|
properties: {
|
|
@@ -166,7 +185,8 @@ export const TOOLS = [
|
|
|
166
185
|
},
|
|
167
186
|
scope: {
|
|
168
187
|
type: 'string',
|
|
169
|
-
description: 'Restrict memories, snapshot, handoff and trail to this scope exactly. When omitted, default-deny applies to ANY <source>:private:*
|
|
188
|
+
description: 'Restrict memories, snapshot, handoff and trail to this scope exactly. When omitted, default-deny applies to ANY <source>:private:* ' +
|
|
189
|
+
'(slack, github, ...) and unknown-legacy rows.',
|
|
170
190
|
},
|
|
171
191
|
},
|
|
172
192
|
},
|
|
@@ -234,13 +254,16 @@ export const TOOLS = [
|
|
|
234
254
|
},
|
|
235
255
|
{
|
|
236
256
|
name: 'hippo_predict_baserate',
|
|
237
|
-
description: 'J3 reference-class / planning-fallacy detector. Get base-rate stats for closed predictions in a class. Call this when you make a forward-looking
|
|
257
|
+
description: 'J3 reference-class / planning-fallacy detector. Get base-rate stats for closed predictions in a class. Call this when you make a forward-looking ' +
|
|
258
|
+
'claim (effort estimate, rollout risk, deadline) to anchor on the past track record rather than the inside view. Returns count + mean estimate + ' +
|
|
259
|
+
'mean actual + mean ratio + median ratio + MAE + a human-readable summary. Tenant-scoped.',
|
|
238
260
|
inputSchema: {
|
|
239
261
|
type: 'object',
|
|
240
262
|
properties: {
|
|
241
263
|
class_tag: {
|
|
242
264
|
type: 'string',
|
|
243
|
-
description: 'Cohort label, e.g. "migration-effort", "rollout-risk", "deadline-week". Must match the class_tag used when the predictions were
|
|
265
|
+
description: 'Cohort label, e.g. "migration-effort", "rollout-risk", "deadline-week". Must match the class_tag used when the predictions were ' +
|
|
266
|
+
'created via hippo_predict (or `hippo predict ...`).',
|
|
244
267
|
},
|
|
245
268
|
},
|
|
246
269
|
required: ['class_tag'],
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* The `customer_notes` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall. */
|
|
3
3
|
import type { KeysetPosition } from '../util/keyset.js';
|
|
4
4
|
import type { SavableDescriptor } from './descriptor.js';
|
|
5
|
-
import type { CustomerNote, NoteStatus } from '../
|
|
6
|
-
export type { CustomerNote, NoteStatus } from '../
|
|
5
|
+
import type { CustomerNote, NoteStatus } from '../core/object-types.js';
|
|
6
|
+
export type { CustomerNote, NoteStatus } from '../core/object-types.js';
|
|
7
7
|
export declare const VALID_NOTE_STATES: ReadonlySet<NoteStatus>;
|
|
8
8
|
/** Field caps (untrusted at the HTTP/SDK boundary). note is a body, so a larger cap
|
|
9
9
|
* than the 4096 short-field convention. */
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
import type { MemoryEntry } from '../core/memory.js';
|
|
4
4
|
import type { KeysetPosition } from '../util/keyset.js';
|
|
5
5
|
import type { SavableDescriptor } from './descriptor.js';
|
|
6
|
-
import type { Decision, DecisionStatus } from '../
|
|
7
|
-
export type { Decision, DecisionStatus } from '../
|
|
6
|
+
import type { Decision, DecisionStatus } from '../core/object-types.js';
|
|
7
|
+
export type { Decision, DecisionStatus } from '../core/object-types.js';
|
|
8
8
|
export declare const VALID_DECISION_STATES: ReadonlySet<DecisionStatus>;
|
|
9
9
|
export interface SaveDecisionOpts {
|
|
10
10
|
decisionText: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { KeysetPosition } from '../util/keyset.js';
|
|
2
|
-
import type { ObjectByKind, ObjectFields, ObjectKind, SavableKind } from '../
|
|
2
|
+
import type { ObjectByKind, ObjectFields, ObjectKind, SavableKind } from '../core/object-types.js';
|
|
3
3
|
export interface ObjectDescriptor<K extends ObjectKind> {
|
|
4
4
|
readonly kind: K;
|
|
5
5
|
/** The nouns error text uses: "brief 3 not found", "only active briefs". */
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* linked_memory_ids must all exist in the SAME tenant or save throws before the insert. */
|
|
4
4
|
import type { KeysetPosition } from '../util/keyset.js';
|
|
5
5
|
import type { ObjectDescriptor } from './descriptor.js';
|
|
6
|
-
import type { Incident, IncidentStatus } from '../
|
|
6
|
+
import type { Incident, IncidentStatus } from '../core/object-types.js';
|
|
7
7
|
import { type Objects } from '../store/port.js';
|
|
8
|
-
export type { Incident, IncidentStatus } from '../
|
|
8
|
+
export type { Incident, IncidentStatus } from '../core/object-types.js';
|
|
9
9
|
export declare const VALID_INCIDENT_STATES: ReadonlySet<IncidentStatus>;
|
|
10
10
|
export interface SaveIncidentOpts {
|
|
11
11
|
incidentText: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type MemoryEntry } from '../core/memory.js';
|
|
2
|
-
import type { ObjectByKind, ObjectKind, SavableKind } from '../
|
|
2
|
+
import type { ObjectByKind, ObjectKind, SavableKind } from '../core/object-types.js';
|
|
3
3
|
import { type Objects } from '../store/port.js';
|
|
4
4
|
import type { ObjectDescriptor, ObjectListOpts, SavableDescriptor } from './descriptor.js';
|
|
5
5
|
/** Newest first. */
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Save, close, load-by-id and list for every typed object: the checks, the mirror memory and the error text, over the `objects` store group.
|
|
2
2
|
// Each flow is written twice over the same steps: `...At` answers at once on hippo.db for the CLI, and the other awaits a served store's group for the routes.
|
|
3
3
|
// The tenant, the fields and the list status are checked first, so a bad request fails before a store is asked.
|
|
4
|
+
import { DEFAULT_LIST_LIMIT } from '../util/limits.js';
|
|
4
5
|
import { BadRequestError, ConflictError, NotFoundError } from '../core/api-errors.js';
|
|
5
6
|
import { loadConfig } from '../core/config.js';
|
|
6
7
|
import { createMemory, Layer } from '../core/memory.js';
|
|
@@ -13,7 +14,7 @@ function listQuery(d, tenantId, opts) {
|
|
|
13
14
|
if (opts.status && !d.states.has(opts.status)) {
|
|
14
15
|
throw new BadRequestError(`${d.fn.list}: status must be one of ${Array.from(d.states).join('|')}; got ${opts.status}`);
|
|
15
16
|
}
|
|
16
|
-
return { status: opts.status || undefined, filter: opts.filter || undefined, limit: opts.limit ??
|
|
17
|
+
return { status: opts.status || undefined, filter: opts.filter || undefined, limit: opts.limit ?? DEFAULT_LIST_LIMIT, after: opts.after };
|
|
17
18
|
}
|
|
18
19
|
/** Newest first. */
|
|
19
20
|
export function listObjectsAt(hippoRoot, d, tenantId, opts) {
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* All dates are normalised to ISO-8601 (`toISOString`) at the store boundary so the lexical half-open comparison is sound. */
|
|
4
4
|
import type { KeysetPosition } from '../util/keyset.js';
|
|
5
5
|
import type { SavableDescriptor } from './descriptor.js';
|
|
6
|
-
import type { Policy, PolicyStatus } from '../
|
|
6
|
+
import type { Policy, PolicyStatus } from '../core/object-types.js';
|
|
7
7
|
import type { Objects } from '../store/port.js';
|
|
8
|
-
export type { Policy, PolicyStatus } from '../
|
|
8
|
+
export type { Policy, PolicyStatus } from '../core/object-types.js';
|
|
9
9
|
export declare const VALID_POLICY_STATES: ReadonlySet<PolicyStatus>;
|
|
10
10
|
export interface SavePolicyOpts {
|
|
11
11
|
policyName: string;
|
package/dist/objects/policies.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/** Policy object: a rule in force over a valid-time range [valid_from, valid_to), evolving via supersession; `loadPoliciesAsOf` queries it.
|
|
2
2
|
* Transaction-time travel (what we believed at past system time T) is deferred. Superseding keeps the predecessor's valid-time range.
|
|
3
3
|
* All dates are normalised to ISO-8601 (`toISOString`) at the store boundary so the lexical half-open comparison is sound. */
|
|
4
|
+
import { DEFAULT_LIST_LIMIT } from '../util/limits.js';
|
|
4
5
|
import { BadRequestError } from '../core/api-errors.js';
|
|
5
6
|
import { assertTenantId } from '../store/tenant.js';
|
|
6
7
|
import { closeObjectAt, listObjectsAt, objectByIdAt, saveObjectAt } from './lifecycle.js';
|
|
@@ -97,6 +98,6 @@ function inForceQuery(tenantId, asOfDate, opts) {
|
|
|
97
98
|
const asOf = /^\d{4}-\d{2}-\d{2}$/.test(asOfDate.trim())
|
|
98
99
|
? normalizePolicyDate(`${asOfDate.trim()}T23:59:59.999Z`, 'asOfDate')
|
|
99
100
|
: normalizePolicyDate(asOfDate, 'asOfDate');
|
|
100
|
-
return { asOf, name: opts.name, limit: opts.limit ??
|
|
101
|
+
return { asOf, name: opts.name, limit: opts.limit ?? DEFAULT_LIST_LIMIT };
|
|
101
102
|
}
|
|
102
103
|
//# sourceMappingURL=policies.js.map
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
import type { KeysetPosition } from '../util/keyset.js';
|
|
5
5
|
import { type JsonValue } from '../util/json.js';
|
|
6
6
|
import type { SavableDescriptor } from './descriptor.js';
|
|
7
|
-
import type { Process, ProcessStatus } from '../
|
|
8
|
-
export type { Process, ProcessStatus } from '../
|
|
7
|
+
import type { Process, ProcessStatus } from '../core/object-types.js';
|
|
8
|
+
export type { Process, ProcessStatus } from '../core/object-types.js';
|
|
9
9
|
export declare const VALID_PROCESS_STATES: ReadonlySet<ProcessStatus>;
|
|
10
10
|
/** DoS / abuse caps on the steps body (untrusted at the HTTP/SDK boundary). */
|
|
11
11
|
export declare const MAX_PROCESS_STEPS = 200;
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
import type { KeysetPosition } from '../util/keyset.js';
|
|
5
5
|
import type { SavableDescriptor } from './descriptor.js';
|
|
6
6
|
import { type ObjectSaveSite } from './lifecycle.js';
|
|
7
|
-
import type { BriefStatus, ProjectBrief } from '../
|
|
7
|
+
import type { BriefStatus, ProjectBrief } from '../core/object-types.js';
|
|
8
8
|
import type { Objects } from '../store/port.js';
|
|
9
|
-
export type { BriefStatus, ProjectBrief } from '../
|
|
9
|
+
export type { BriefStatus, ProjectBrief } from '../core/object-types.js';
|
|
10
10
|
export declare const VALID_BRIEF_STATES: ReadonlySet<BriefStatus>;
|
|
11
11
|
/** Field caps (untrusted at the HTTP/SDK boundary). summary is a body, so a larger
|
|
12
12
|
* cap than the 4096 short-field convention. */
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/** Project_brief object: the living, repo-scoped `summary` of a repository, evolving via supersession.
|
|
2
2
|
* `refreshBrief` assembles recent `path:<repo>` receipts with a deterministic (no-LLM) assembler; an LLM pipeline is deferred.
|
|
3
3
|
* The `project_briefs` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall. */
|
|
4
|
+
import { truncateWithEllipsis } from '../util/ellipsize.js';
|
|
4
5
|
import { BadRequestError } from '../core/api-errors.js';
|
|
5
6
|
import { assertTenantId } from '../store/tenant.js';
|
|
6
7
|
import { checkText, requireLine } from './fields.js';
|
|
@@ -87,9 +88,7 @@ function newestActive(repo) {
|
|
|
87
88
|
function receiptHeadline(content) {
|
|
88
89
|
const firstLine = (content ?? '').split(/\r?\n/).find((l) => l.trim().length > 0) ?? '';
|
|
89
90
|
const trimmed = firstLine.trim();
|
|
90
|
-
return trimmed
|
|
91
|
-
? `${trimmed.slice(0, MAX_RECEIPT_HEADLINE_LEN)}...`
|
|
92
|
-
: trimmed;
|
|
91
|
+
return truncateWithEllipsis(trimmed, MAX_RECEIPT_HEADLINE_LEN);
|
|
93
92
|
}
|
|
94
93
|
/** The tag a memory of the repo carries; the store matches it whole, so `path:hip` never matches `path:hippo`. */
|
|
95
94
|
function receiptTag(normalizedRepo) {
|
package/dist/objects/skills.d.ts
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* `trigger` is stored in `trigger_text` because it is a SQLite reserved keyword. */
|
|
4
4
|
import type { KeysetPosition } from '../util/keyset.js';
|
|
5
5
|
import type { SavableDescriptor } from './descriptor.js';
|
|
6
|
-
import type { Skill, SkillStatus } from '../
|
|
6
|
+
import type { Skill, SkillStatus } from '../core/object-types.js';
|
|
7
7
|
import type { Objects } from '../store/port.js';
|
|
8
|
-
export type { Skill, SkillStatus } from '../
|
|
8
|
+
export type { Skill, SkillStatus } from '../core/object-types.js';
|
|
9
9
|
export declare const VALID_SKILL_STATES: ReadonlySet<SkillStatus>;
|
|
10
10
|
/** Field caps (untrusted at the HTTP/SDK boundary). instructions is a body, so a
|
|
11
11
|
* larger cap than the 4096 short-field convention. */
|
package/dist/postinstall.js
CHANGED
|
@@ -3,7 +3,7 @@ import * as fs from 'node:fs';
|
|
|
3
3
|
import * as os from 'node:os';
|
|
4
4
|
import * as path from 'node:path';
|
|
5
5
|
import { detectRealCodexPath, isCodexWrapperInstalled, repairCodexWrapperIfInstalled } from './hooks/codex-wrapper.js';
|
|
6
|
-
import { claudeConfigDir } from './
|
|
6
|
+
import { claudeConfigDir } from './util/agent-homes.js';
|
|
7
7
|
import { errorMessage, log } from './util/log.js';
|
|
8
8
|
function main() {
|
|
9
9
|
if (envSkipPostinstall())
|
package/dist/rerankers/clef.js
CHANGED
|
@@ -3,7 +3,7 @@ import { buildRelevanceRequest, JEV_DEFAULT_TOP_K, rankByScores } from './jev.js
|
|
|
3
3
|
import { createOutageWarning } from './outage-warning.js';
|
|
4
4
|
import { rerankerPost, RERANKER_MAX_REPLY_BYTES } from './remote.js';
|
|
5
5
|
import { readCappedJson } from '../util/capped-json.js';
|
|
6
|
-
import { isJsonObject } from '../util/json.js';
|
|
6
|
+
import { isJsonObject, isJsonString } from '../util/json.js';
|
|
7
7
|
import { errorMessage } from '../util/log.js';
|
|
8
8
|
const RAY_ID_MAX_CHARS = 64;
|
|
9
9
|
const CLEF_MODELS = ['clef-flash', 'clef'];
|
|
@@ -23,9 +23,6 @@ function isLoopback(hostname) {
|
|
|
23
23
|
function isNumber(v) {
|
|
24
24
|
return Number.isFinite(v);
|
|
25
25
|
}
|
|
26
|
-
function isString(v) {
|
|
27
|
-
return v !== undefined && v !== null && v.constructor === String;
|
|
28
|
-
}
|
|
29
26
|
function isRejection(v) {
|
|
30
27
|
return v.constructor === String;
|
|
31
28
|
}
|
|
@@ -83,7 +80,7 @@ export function parseClefReply(body, n, model, requireModel) {
|
|
|
83
80
|
if (!isJsonObject(reply))
|
|
84
81
|
return 'reply has no result object';
|
|
85
82
|
const actual = reply.model;
|
|
86
|
-
if (actual !== undefined && (!
|
|
83
|
+
if (actual !== undefined && (!isJsonString(actual) || actual.trim() !== model))
|
|
87
84
|
return 'reply names a different model';
|
|
88
85
|
if (actual === undefined && requireModel)
|
|
89
86
|
return 'reply does not name its model';
|
|
@@ -105,7 +102,7 @@ export function parseClefReply(body, n, model, requireModel) {
|
|
|
105
102
|
const usage = isJsonObject(reply.usage) ? reply.usage : {};
|
|
106
103
|
return {
|
|
107
104
|
scores,
|
|
108
|
-
actualModel:
|
|
105
|
+
actualModel: isJsonString(actual) ? actual.trim() : undefined,
|
|
109
106
|
inputTokens: isNumber(usage.input_tokens) ? usage.input_tokens : undefined,
|
|
110
107
|
outputTokens: isNumber(usage.output_tokens) ? usage.output_tokens : undefined,
|
|
111
108
|
};
|
|
@@ -1,4 +1,33 @@
|
|
|
1
1
|
import type { RerankerFn } from './types.js';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
interface Tokenized {
|
|
3
|
+
readonly input_ids: object;
|
|
4
|
+
readonly attention_mask: object;
|
|
5
|
+
}
|
|
6
|
+
type TokenizerFn = (text: string, opts: {
|
|
7
|
+
text_pair: string;
|
|
8
|
+
padding: boolean;
|
|
9
|
+
truncation: boolean;
|
|
10
|
+
}) => Promise<Tokenized>;
|
|
11
|
+
type SeqClsModel = (inputs: Tokenized) => Promise<{
|
|
12
|
+
logits: {
|
|
13
|
+
data: ArrayLike<number>;
|
|
14
|
+
};
|
|
15
|
+
}>;
|
|
16
|
+
interface FromPretrained<T> {
|
|
17
|
+
from_pretrained: (model: string) => Promise<T>;
|
|
18
|
+
}
|
|
19
|
+
interface TransformersExports {
|
|
20
|
+
AutoTokenizer?: FromPretrained<TokenizerFn>;
|
|
21
|
+
AutoModelForSequenceClassification?: FromPretrained<SeqClsModel>;
|
|
22
|
+
}
|
|
23
|
+
interface TransformersModuleNamespace extends TransformersExports {
|
|
24
|
+
default?: TransformersExports;
|
|
25
|
+
}
|
|
26
|
+
type ImportModule = () => Promise<{
|
|
27
|
+
readonly name: string;
|
|
28
|
+
readonly mod: TransformersModuleNamespace;
|
|
29
|
+
} | null>;
|
|
30
|
+
/** Track 2 reranker: MS-MARCO MiniLM cross-encoder, identity fallback if the model will not load. Each instance owns its model and outage warning. */
|
|
31
|
+
export declare function createCrossEncoderReranker(importModule?: ImportModule): RerankerFn;
|
|
32
|
+
export {};
|
|
4
33
|
//# sourceMappingURL=cross-encoder.d.ts.map
|
|
@@ -1,112 +1,59 @@
|
|
|
1
|
-
import { createRequire } from 'node:module';
|
|
2
|
-
import { pathToFileURL } from 'node:url';
|
|
3
1
|
import { createOutageWarning } from './outage-warning.js';
|
|
4
2
|
import { compareScoresDesc } from '../core/compare.js';
|
|
5
|
-
import {
|
|
3
|
+
import { createModelLoads, importTransformers, MODEL_LOAD_POLICY } from '../embeddings/transformers.js';
|
|
4
|
+
import { errorFields, errorMessage, log } from '../util/log.js';
|
|
6
5
|
const DEFAULT_CROSS_ENCODER_TOP_K = 50;
|
|
7
6
|
const MODEL_NAME = 'Xenova/ms-marco-MiniLM-L-6-v2';
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
// import.meta.resolve is missing under some module runners (vitest's
|
|
19
|
-
// included); fall through to the require-based resolve there.
|
|
20
|
-
try {
|
|
21
|
-
return pathToFileURL(_require.resolve(name)).href;
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
// Try the legacy fallback only when the preferred package is not installed.
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
async function loadTransformersModule() {
|
|
31
|
-
// Import one backend only. Loading both native ONNX runtimes in one process
|
|
32
|
-
// can abort during finalization; Hugging Face is the maintained default.
|
|
33
|
-
const url = resolveTransformersPackage();
|
|
34
|
-
if (!url)
|
|
35
|
-
return null;
|
|
36
|
-
try {
|
|
37
|
-
const mod = await import(/* @vite-ignore */ url);
|
|
38
|
-
const tok = mod.AutoTokenizer ?? mod.default?.AutoTokenizer;
|
|
39
|
-
const seq = mod.AutoModelForSequenceClassification ?? mod.default?.AutoModelForSequenceClassification;
|
|
40
|
-
return tok && seq ? { AutoTokenizer: tok, AutoModelForSequenceClassification: seq } : null;
|
|
41
|
-
}
|
|
42
|
-
catch (err) {
|
|
43
|
-
log.debug(`cross-encoder: transformers import failed: ${errorMessage(err)}`);
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
7
|
+
async function importModelClasses(importModule) {
|
|
8
|
+
const imported = await importModule();
|
|
9
|
+
if (!imported)
|
|
10
|
+
throw new Error('no Transformers.js package is installed');
|
|
11
|
+
const { name, mod } = imported;
|
|
12
|
+
const tok = mod.AutoTokenizer ?? mod.default?.AutoTokenizer;
|
|
13
|
+
const seq = mod.AutoModelForSequenceClassification ?? mod.default?.AutoModelForSequenceClassification;
|
|
14
|
+
if (!tok || !seq)
|
|
15
|
+
throw new Error(`${name} exports no AutoTokenizer or AutoModelForSequenceClassification`);
|
|
16
|
+
return { AutoTokenizer: tok, AutoModelForSequenceClassification: seq };
|
|
46
17
|
}
|
|
47
|
-
let pipelineLoading = null;
|
|
48
|
-
const outage = createOutageWarning('cross-encoder', 'falling back to identity ordering');
|
|
49
18
|
// NOT the text-classification pipeline: this is a num_labels=1 regression head and that pipeline softmaxes a length-1 logit vector (always 1.0).
|
|
50
19
|
// Read the logit, then squash it.
|
|
51
|
-
async function buildPipeline() {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
throw new Error('cross-encoder returned a non-finite score');
|
|
72
|
-
return score;
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
catch (err) {
|
|
76
|
-
log.debug(`cross-encoder: model load failed: ${errorMessage(err)}`);
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
20
|
+
async function buildPipeline(importModule) {
|
|
21
|
+
const mod = await importModelClasses(importModule);
|
|
22
|
+
const [tokenizer, model] = await Promise.all([
|
|
23
|
+
mod.AutoTokenizer.from_pretrained(MODEL_NAME),
|
|
24
|
+
mod.AutoModelForSequenceClassification.from_pretrained(MODEL_NAME),
|
|
25
|
+
]);
|
|
26
|
+
return async (query, candidate) => {
|
|
27
|
+
const inputs = await tokenizer(query, {
|
|
28
|
+
text_pair: candidate,
|
|
29
|
+
padding: true,
|
|
30
|
+
truncation: true,
|
|
31
|
+
});
|
|
32
|
+
const { logits } = await model(inputs);
|
|
33
|
+
const score = 1 / (1 + Math.exp(-Number(logits.data[0])));
|
|
34
|
+
// NaN would make the sort comparator a no-op; throwing hands this
|
|
35
|
+
// candidate to the per-candidate fallback instead.
|
|
36
|
+
if (!Number.isFinite(score))
|
|
37
|
+
throw new Error('cross-encoder returned a non-finite score');
|
|
38
|
+
return score;
|
|
39
|
+
};
|
|
79
40
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
});
|
|
88
|
-
return pipelineLoading;
|
|
41
|
+
/** The head in its input order, scored as it came. */
|
|
42
|
+
function identityOrder(head) {
|
|
43
|
+
return head.map((r, i) => ({
|
|
44
|
+
...r,
|
|
45
|
+
rerankScore: r.score,
|
|
46
|
+
preRerankRank: r.preRerankRank ?? i + 1,
|
|
47
|
+
postRerankRank: i + 1,
|
|
48
|
+
}));
|
|
89
49
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
const topK = options?.topK ?? DEFAULT_CROSS_ENCODER_TOP_K;
|
|
93
|
-
const head = results.slice(0, topK);
|
|
94
|
-
const pipe = await loadPipeline();
|
|
95
|
-
if (!pipe) {
|
|
96
|
-
// A silent identity fallback otherwise reads as a working reranker.
|
|
97
|
-
outage.failed('no Transformers.js backend, or model fetch blocked');
|
|
98
|
-
return head.map((r, i) => ({
|
|
99
|
-
...r,
|
|
100
|
-
rerankScore: r.score,
|
|
101
|
-
preRerankRank: r.preRerankRank ?? i + 1,
|
|
102
|
-
postRerankRank: i + 1,
|
|
103
|
-
}));
|
|
104
|
-
}
|
|
105
|
-
outage.answered();
|
|
50
|
+
async function scoreHead(pipe, query, head) {
|
|
51
|
+
let succeeded = 0;
|
|
106
52
|
const scored = await Promise.all(head.map(async (r, i) => {
|
|
107
53
|
let ceScore;
|
|
108
54
|
try {
|
|
109
55
|
ceScore = await pipe(query, r.entry.content);
|
|
56
|
+
succeeded++;
|
|
110
57
|
}
|
|
111
58
|
catch (err) {
|
|
112
59
|
// One bad inference must not sink the whole pass.
|
|
@@ -124,6 +71,32 @@ export const crossEncoderReranker = async (query, results, options) => {
|
|
|
124
71
|
// relevance order, never an arbitrary content order.
|
|
125
72
|
scored.sort((a, b) => compareScoresDesc(a.rerankScore, b.rerankScore));
|
|
126
73
|
scored.forEach((r, i) => (r.postRerankRank = i + 1));
|
|
127
|
-
return scored;
|
|
128
|
-
}
|
|
74
|
+
return { results: scored, succeeded };
|
|
75
|
+
}
|
|
76
|
+
/** Track 2 reranker: MS-MARCO MiniLM cross-encoder, identity fallback if the model will not load. Each instance owns its model and outage warning. */
|
|
77
|
+
export function createCrossEncoderReranker(importModule = importTransformers) {
|
|
78
|
+
const outage = createOutageWarning('cross-encoder', 'falling back to identity ordering');
|
|
79
|
+
// The outage warning already says each failure, at most once per window, so the loads report nothing themselves.
|
|
80
|
+
const pipelines = createModelLoads(MODEL_LOAD_POLICY);
|
|
81
|
+
return async (query, results, options) => {
|
|
82
|
+
const head = results.slice(0, options?.topK ?? DEFAULT_CROSS_ENCODER_TOP_K);
|
|
83
|
+
let pipe;
|
|
84
|
+
try {
|
|
85
|
+
// One shared load per backoff window: two first calls fetch the model once, and a failure is not fetched again on every recall.
|
|
86
|
+
pipe = await pipelines.load(MODEL_NAME, () => buildPipeline(importModule));
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
// A silent identity fallback otherwise reads as a working reranker.
|
|
90
|
+
outage.failed(errorMessage(err), errorFields(err));
|
|
91
|
+
return identityOrder(head);
|
|
92
|
+
}
|
|
93
|
+
const { results: scored, succeeded } = await scoreHead(pipe, query, head);
|
|
94
|
+
// A loaded model whose every call throws is as dead as one that never loaded.
|
|
95
|
+
if (head.length > 0 && succeeded === 0)
|
|
96
|
+
outage.failed('every inference failed');
|
|
97
|
+
else
|
|
98
|
+
outage.answered();
|
|
99
|
+
return scored;
|
|
100
|
+
};
|
|
101
|
+
}
|
|
129
102
|
//# sourceMappingURL=cross-encoder.js.map
|