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
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skills as a first-class, versioned object.
|
|
3
|
+
*
|
|
4
|
+
* A `skill` is a reusable, agent-followable capability: an `instructions` body
|
|
5
|
+
* plus an optional `trigger` ("when to apply"), evolving via the supersede delta
|
|
6
|
+
* lifecycle. "Executable" is scoped to an agent-followable INSTRUCTION that, once
|
|
7
|
+
* exported into the agent's in-force rules (AGENTS.md / CLAUDE.md) via
|
|
8
|
+
* `exportSkills`, is executed by the agent reading it. Literal code/command
|
|
9
|
+
* execution is deferred (security; a future sandbox). The distinguishing
|
|
10
|
+
* capability is therefore the EXPORT renderer, not a runtime.
|
|
11
|
+
*
|
|
12
|
+
* Reuses the process/decision supersede machinery verbatim (superseded_by self-FK
|
|
13
|
+
* + CAS + INSERT-preflight + server-derived version + change_summary + supersede
|
|
14
|
+
* tenant-match trigger). It DROPS process's `steps` (a skill's content is a single
|
|
15
|
+
* `instructions` body) and ADDS `trigger` (stored in the `trigger_text` column -
|
|
16
|
+
* `trigger` is a SQLite reserved keyword).
|
|
17
|
+
*
|
|
18
|
+
* The `skills` table is the source of truth (survives memory decay); the memory
|
|
19
|
+
* mirror is for recall. memory_id is NULLABLE with ON DELETE SET NULL.
|
|
20
|
+
*
|
|
21
|
+
* Lifecycle: active -> superseded (a newer version replaces it) or active ->
|
|
22
|
+
* closed (retired). Export renders ACTIVE skills only.
|
|
23
|
+
*/
|
|
24
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
25
|
+
import { assertTenantId } from '../store/tenant.js';
|
|
26
|
+
import { checkText, requireLine } from './fields.js';
|
|
27
|
+
import { closeObjectAt, listObjectsAt, objectByIdAt, saveObjectAt } from './lifecycle.js';
|
|
28
|
+
import { sqliteObjects } from '../store/sqlite/objects-group.js';
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// Domain types
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
export const VALID_SKILL_STATES = new Set([
|
|
33
|
+
'active',
|
|
34
|
+
'superseded',
|
|
35
|
+
'closed',
|
|
36
|
+
]);
|
|
37
|
+
/** Field caps (untrusted at the HTTP/SDK boundary). instructions is a body, so a
|
|
38
|
+
* larger cap than the 4096 short-field convention. */
|
|
39
|
+
export const MAX_SKILL_NAME_LEN = 256;
|
|
40
|
+
export const MAX_SKILL_INSTRUCTIONS_LEN = 8192;
|
|
41
|
+
export const MAX_SKILL_TRIGGER_LEN = 1024;
|
|
42
|
+
/** Aggregate bound on a single export render so the export body is never unbounded.
|
|
43
|
+
* Realistic active-skill counts are tens; 1000 is a generous bound. */
|
|
44
|
+
export const MAX_EXPORT_SKILLS = 1000;
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
// Validation
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
/** The trigger as stored, or null for none. One line, because a newline would forge a heading inside the exported **When:** line. */
|
|
49
|
+
function checkTrigger(trigger) {
|
|
50
|
+
if (trigger === undefined || trigger === null || trigger.trim().length === 0)
|
|
51
|
+
return null;
|
|
52
|
+
if (trigger.length > MAX_SKILL_TRIGGER_LEN) {
|
|
53
|
+
throw new BadRequestError(`saveSkill: trigger exceeds the ${MAX_SKILL_TRIGGER_LEN}-char cap`);
|
|
54
|
+
}
|
|
55
|
+
if (/[\r\n]/.test(trigger)) {
|
|
56
|
+
throw new BadRequestError('saveSkill: trigger must be a single line (no newlines)');
|
|
57
|
+
}
|
|
58
|
+
return trigger;
|
|
59
|
+
}
|
|
60
|
+
/** Recall-surface content for the memory mirror: name + optional trigger +
|
|
61
|
+
* instructions. Named (mirrors buildProcessContent) so the recall surface is
|
|
62
|
+
* deterministic + unit-testable. */
|
|
63
|
+
function buildSkillContent(skillName, instructions, trigger) {
|
|
64
|
+
let content = skillName;
|
|
65
|
+
if (trigger)
|
|
66
|
+
content += `\n\nWhen: ${trigger}`;
|
|
67
|
+
content += `\n\n${instructions}`;
|
|
68
|
+
return content;
|
|
69
|
+
}
|
|
70
|
+
export const SKILL = {
|
|
71
|
+
kind: 'skill',
|
|
72
|
+
label: 'skill',
|
|
73
|
+
plural: 'skills',
|
|
74
|
+
fn: { get: 'loadSkillById', close: 'closeSkill', list: 'loadSkills', save: 'saveSkill' },
|
|
75
|
+
states: VALID_SKILL_STATES,
|
|
76
|
+
closableFrom: ['active'],
|
|
77
|
+
draft(opts) {
|
|
78
|
+
// The name becomes an H2 header in the export, so it must be one line.
|
|
79
|
+
const name = requireLine(opts.skillName, MAX_SKILL_NAME_LEN, {
|
|
80
|
+
required: 'saveSkill: skillName is required',
|
|
81
|
+
singleLine: 'saveSkill: skillName must be a single line (no newlines)',
|
|
82
|
+
tooLong: `saveSkill: skillName exceeds the ${MAX_SKILL_NAME_LEN}-char cap`,
|
|
83
|
+
});
|
|
84
|
+
checkText(opts.instructions, MAX_SKILL_INSTRUCTIONS_LEN, {
|
|
85
|
+
required: 'saveSkill: instructions are required',
|
|
86
|
+
tooLong: `saveSkill: instructions exceed the ${MAX_SKILL_INSTRUCTIONS_LEN}-char cap`,
|
|
87
|
+
});
|
|
88
|
+
const trigger = checkTrigger(opts.trigger);
|
|
89
|
+
return {
|
|
90
|
+
fields: { name, instructions: opts.instructions, trigger },
|
|
91
|
+
content: buildSkillContent(name, opts.instructions, trigger),
|
|
92
|
+
tags: opts.extraTags ?? [],
|
|
93
|
+
supersedesId: opts.supersedesSkillId,
|
|
94
|
+
changeSummary: opts.changeSummary,
|
|
95
|
+
at: new Date().toISOString(),
|
|
96
|
+
};
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
// ---------------------------------------------------------------------------
|
|
100
|
+
// Public API
|
|
101
|
+
// ---------------------------------------------------------------------------
|
|
102
|
+
/**
|
|
103
|
+
* Create a skill (or a new version that supersedes an existing one). Writes the
|
|
104
|
+
* memory mirror + the skills row in the `objects` store group's one transaction. When
|
|
105
|
+
* supersedesSkillId is given, the referenced ACTIVE row is preflighted (status +
|
|
106
|
+
* version) BEFORE the INSERT, then CAS-UPDATEd -> superseded in the same transaction;
|
|
107
|
+
* the new version = predecessor.version + 1 (server-derived).
|
|
108
|
+
*/
|
|
109
|
+
export function saveSkill(hippoRoot, tenantId, opts, actor = 'cli') {
|
|
110
|
+
return saveObjectAt(SKILL, { hippoRoot, tenantId, actor }, opts);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Close (retire) an active skill. A superseded row is terminal.
|
|
114
|
+
*/
|
|
115
|
+
export function closeSkill(hippoRoot, tenantId, id, actor = 'cli') {
|
|
116
|
+
return closeObjectAt(hippoRoot, SKILL, tenantId, id, actor);
|
|
117
|
+
}
|
|
118
|
+
export function loadSkillById(hippoRoot, tenantId, id) {
|
|
119
|
+
return objectByIdAt(hippoRoot, SKILL, tenantId, id);
|
|
120
|
+
}
|
|
121
|
+
export function loadSkills(hippoRoot, tenantId, opts = {}) {
|
|
122
|
+
return listObjectsAt(hippoRoot, SKILL, tenantId, opts);
|
|
123
|
+
}
|
|
124
|
+
export function loadActiveSkills(hippoRoot, tenantId, opts = {}) {
|
|
125
|
+
return loadSkills(hippoRoot, tenantId, { status: 'active', limit: opts.limit });
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Render the tenant's ACTIVE skills into ONE AGENTS.md / CLAUDE.md-style markdown
|
|
129
|
+
* block (one H2 per skill, ordered by skill_name ASC for determinism), and RETURN
|
|
130
|
+
* the string. Does NOT write any file. Returns '' when there are no active skills.
|
|
131
|
+
*
|
|
132
|
+
* skill_name is single-line (validated on save) so it cannot break the H2 header;
|
|
133
|
+
* instructions are emitted verbatim (operator content). Bounded by MAX_EXPORT_SKILLS
|
|
134
|
+
* active rows; each field is capped on save, so the rendered string is bounded.
|
|
135
|
+
*/
|
|
136
|
+
export function exportSkills(hippoRoot, tenantId) {
|
|
137
|
+
assertTenantId('exportSkills', tenantId);
|
|
138
|
+
return skillsBlock(sqliteObjects(hippoRoot).activeSkillsByName(tenantId, MAX_EXPORT_SKILLS));
|
|
139
|
+
}
|
|
140
|
+
/** `exportSkills` over a served store's group. */
|
|
141
|
+
export async function skillsMarkdown(objects, tenantId) {
|
|
142
|
+
assertTenantId('exportSkills', tenantId);
|
|
143
|
+
return skillsBlock(await objects.activeSkillsByName(tenantId, MAX_EXPORT_SKILLS));
|
|
144
|
+
}
|
|
145
|
+
function skillsBlock(skills) {
|
|
146
|
+
return skills
|
|
147
|
+
.map((s) => {
|
|
148
|
+
let block = `## ${s.skillName}`;
|
|
149
|
+
if (s.trigger)
|
|
150
|
+
block += `\n\n**When:** ${s.trigger}`;
|
|
151
|
+
block += `\n\n${s.instructions}`;
|
|
152
|
+
return block;
|
|
153
|
+
})
|
|
154
|
+
.join('\n\n');
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=skills.js.map
|
package/dist/postinstall.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { envSkipPostinstall } from './env.js';
|
|
1
|
+
import { envSkipPostinstall } from './util/env.js';
|
|
2
2
|
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
6
|
import { claudeConfigDir } from './hooks/shared.js';
|
|
7
|
+
import { errorMessage, log } from './util/log.js';
|
|
7
8
|
function main() {
|
|
8
9
|
if (envSkipPostinstall())
|
|
9
10
|
return;
|
|
@@ -13,8 +14,9 @@ function main() {
|
|
|
13
14
|
// hijacking, so first install is `hippo hook install codex` only.
|
|
14
15
|
repairCodexWrapperIfInstalled();
|
|
15
16
|
}
|
|
16
|
-
catch {
|
|
17
|
+
catch (err) {
|
|
17
18
|
// Never fail package install because auto-integration could not be applied.
|
|
19
|
+
log.debug(`postinstall: codex wrapper not repaired: ${errorMessage(err)}`);
|
|
18
20
|
}
|
|
19
21
|
try {
|
|
20
22
|
printClaudeCodeNudge();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { type ForwardClaimMatch } from '../forward-claim-detector.js';
|
|
3
|
-
import {
|
|
1
|
+
import type { AppendAuditOpts } from '../store/audit.js';
|
|
2
|
+
import { type ForwardClaimMatch } from '../learn/forward-claim-detector.js';
|
|
3
|
+
import type { PlanningFallacyEvidence } from '../store/planning-fallacy-evidence.js';
|
|
4
4
|
/**
|
|
5
5
|
* Surface delivered on `RecallResult.planningFallacyHint` when an
|
|
6
6
|
* agent's recall query carries a forward-prediction phrase AND the closest
|
|
@@ -47,8 +47,7 @@ export interface PlanningFallacyWatching {
|
|
|
47
47
|
suggestion: string;
|
|
48
48
|
}
|
|
49
49
|
/**
|
|
50
|
-
*
|
|
51
|
-
* `computePlanningFallacyOutput`. Carries EITHER `hint` (baserate
|
|
50
|
+
* What `decidePlanningFallacy` hands to recall. Carries EITHER `hint` (baserate
|
|
52
51
|
* available) OR `watching` (regex fired, no baserate), or NEITHER (mode=off,
|
|
53
52
|
* no queryText, no regex match, or nClosed=0 silent path). Never both.
|
|
54
53
|
*/
|
|
@@ -63,85 +62,14 @@ export interface ComputePlanningFallacyHintOpts {
|
|
|
63
62
|
* reload). 'off' short-circuits to null BEFORE the regex gate so the
|
|
64
63
|
* AUTODEBIAS=off path pays zero work. */
|
|
65
64
|
mode?: AutodebiasMode;
|
|
66
|
-
/** Actor for any audit emissions. Defaults to 'recall' (caller didn't
|
|
67
|
-
* specify). MUST thread through to the inner computePredictionBaserate
|
|
68
|
-
* call (passed as its `actor` arg) so MCP/HTTP-originated auto-hints
|
|
69
|
-
* carry the right attribution instead of the 'cli' default. */
|
|
70
|
-
actor?: string;
|
|
71
|
-
}
|
|
72
|
-
export interface ClassResolution {
|
|
73
|
-
classTag: string | null;
|
|
74
|
-
/** True when ≥2 classes tied at the best overlap score AND best ≥ 1.
|
|
75
|
-
* Caller emits `recall_autodebias_hint_tiebreak` audit and returns
|
|
76
|
-
* null hint (silent — prevents the "show wrong class half the time"
|
|
77
|
-
* failure mode the alphabetical-tiebreak alternative would create). */
|
|
78
|
-
tiebreak: boolean;
|
|
79
|
-
}
|
|
80
|
-
/** The prediction class a forward claim resolves to, and that class's closed-prediction stats when one resolved. */
|
|
81
|
-
export interface PlanningFallacyEvidence extends ClassResolution {
|
|
82
|
-
readonly baserate: PredictionBaserate | null;
|
|
83
65
|
}
|
|
84
66
|
/** The output a claim earns from its evidence, and the audit row that records the decision when there is one. */
|
|
85
67
|
export interface PlanningFallacyDecision {
|
|
86
68
|
output: PlanningFallacyOutput;
|
|
87
69
|
audit?: AppendAuditOpts;
|
|
88
70
|
}
|
|
89
|
-
/**
|
|
90
|
-
* Resolve a query-token set to a unique best-matching class_tag for the
|
|
91
|
-
* tenant. Scores by lower-cased token overlap; requires best score ≥ 1
|
|
92
|
-
* AND strictly greater than the 2nd-best score.
|
|
93
|
-
*
|
|
94
|
-
* Indexed via idx_predictions_tenant_class (db.ts:1015) → O(log n) seek
|
|
95
|
-
* plus a small DISTINCT scan over the per-tenant class-tag set.
|
|
96
|
-
*
|
|
97
|
-
* Scope behaviour (deliberate): class_tag selection is TENANT-GLOBAL,
|
|
98
|
-
* NOT scope-filtered against
|
|
99
|
-
* the recall's opts.scope. The class_tag is an aggregator label across
|
|
100
|
-
* historical predictions in the class, not a per-memory scope-bound
|
|
101
|
-
* property. A no-scope recall CAN surface a class_tag from a privately-
|
|
102
|
-
* scoped prediction's class in PlanningFallacyHint.classTag — by design,
|
|
103
|
-
* because base-rate reasoning needs the full historical sample.
|
|
104
|
-
* Implications:
|
|
105
|
-
* - The hint payload itself carries no memory content (only the aggregate
|
|
106
|
-
* summary string + numeric stats), so memory bodies do not leak.
|
|
107
|
-
* - The class_tag NAME is the side-channel. If sensitive labels are a
|
|
108
|
-
* concern, callers should either use opaque class names (e.g. hashes
|
|
109
|
-
* or numeric tokens) or set HIPPO_AUTODEBIAS=off.
|
|
110
|
-
* - tests/api-recall-autodebias.test.ts locks this with an explicit
|
|
111
|
-
* test asserting that scope-set predictions surface via no-scope
|
|
112
|
-
* recalls (so future "fix" attempts that scope-filter trip CI).
|
|
113
|
-
*/
|
|
114
|
-
export declare function resolveClassFromTokens(hippoRoot: string, tenantId: string, queryTokens: readonly string[]): ClassResolution;
|
|
115
|
-
/**
|
|
116
|
-
* Planning-fallacy orchestrator.
|
|
117
|
-
*
|
|
118
|
-
* Composes the forward-claim detector + class resolver + baserate compute,
|
|
119
|
-
* with telemetry-grade audit emission at every decision point (success,
|
|
120
|
-
* no-class-match, tiebreak).
|
|
121
|
-
*
|
|
122
|
-
* Returns `{}` (neither hint nor watching) on:
|
|
123
|
-
* - mode === 'off' (env-disabled; pays only the env read, skips regex)
|
|
124
|
-
* - empty queryText
|
|
125
|
-
* - no forward-claim regex match
|
|
126
|
-
* - resolved class has nClosed=0 (no historical data yet; silent)
|
|
127
|
-
*
|
|
128
|
-
* Returns `{ watching: ... }` on:
|
|
129
|
-
* - resolver returns no class (no overlap ≥ 1; emits no_class_match audit)
|
|
130
|
-
* - resolver returns tiebreak (≥2 classes tied at best; emits tiebreak audit)
|
|
131
|
-
*
|
|
132
|
-
* Returns `{ hint: ... }` on success: calls computePredictionBaserate(...,
|
|
133
|
-
* emitAudit=false) so the predict_baserate audit channel stays scoped to
|
|
134
|
-
* deliberate predict-baserate calls (the orchestrator's own recall_autodebias_hint
|
|
135
|
-
* audit carries n_closed + mean_ratio in metadata so no telemetry is lost),
|
|
136
|
-
* then emits recall_autodebias_hint audit + returns the hint.
|
|
137
|
-
*
|
|
138
|
-
* Latency budget: well under 50ms; a miss pays only the regex.
|
|
139
|
-
*/
|
|
140
|
-
export declare function computePlanningFallacyOutput(hippoRoot: string, tenantId: string, queryText: string, opts?: ComputePlanningFallacyHintOpts): PlanningFallacyOutput;
|
|
141
71
|
/** The forward claim in a recall query; null when HIPPO_AUTODEBIAS=off, the query is empty or no claim matches. */
|
|
142
72
|
export declare function detectPlanningClaim(queryText: string, opts?: ComputePlanningFallacyHintOpts): ForwardClaimMatch | null;
|
|
143
|
-
/** Resolves a claim's tokens to one class and reads its baserate, writing no audit row. */
|
|
144
|
-
export declare function planningFallacyEvidenceAt(hippoRoot: string, tenantId: string, classQueryTokens: readonly string[]): PlanningFallacyEvidence;
|
|
145
73
|
/** The hint, the watching variant or nothing for a claim and its class evidence; reads and writes nothing itself. */
|
|
146
74
|
export declare function decidePlanningFallacy(match: ForwardClaimMatch, evidence: PlanningFallacyEvidence, tenantId: string, actor: string): PlanningFallacyDecision;
|
|
147
75
|
//# sourceMappingURL=planning-fallacy.d.ts.map
|
|
@@ -1,114 +1,6 @@
|
|
|
1
|
-
import { envAutodebiasOff } from '../env.js';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
import { detectForwardClaim } from '../forward-claim-detector.js';
|
|
5
|
-
import { computePredictionBaserate } from './store.js';
|
|
6
|
-
/**
|
|
7
|
-
* Resolve a query-token set to a unique best-matching class_tag for the
|
|
8
|
-
* tenant. Scores by lower-cased token overlap; requires best score ≥ 1
|
|
9
|
-
* AND strictly greater than the 2nd-best score.
|
|
10
|
-
*
|
|
11
|
-
* Indexed via idx_predictions_tenant_class (db.ts:1015) → O(log n) seek
|
|
12
|
-
* plus a small DISTINCT scan over the per-tenant class-tag set.
|
|
13
|
-
*
|
|
14
|
-
* Scope behaviour (deliberate): class_tag selection is TENANT-GLOBAL,
|
|
15
|
-
* NOT scope-filtered against
|
|
16
|
-
* the recall's opts.scope. The class_tag is an aggregator label across
|
|
17
|
-
* historical predictions in the class, not a per-memory scope-bound
|
|
18
|
-
* property. A no-scope recall CAN surface a class_tag from a privately-
|
|
19
|
-
* scoped prediction's class in PlanningFallacyHint.classTag — by design,
|
|
20
|
-
* because base-rate reasoning needs the full historical sample.
|
|
21
|
-
* Implications:
|
|
22
|
-
* - The hint payload itself carries no memory content (only the aggregate
|
|
23
|
-
* summary string + numeric stats), so memory bodies do not leak.
|
|
24
|
-
* - The class_tag NAME is the side-channel. If sensitive labels are a
|
|
25
|
-
* concern, callers should either use opaque class names (e.g. hashes
|
|
26
|
-
* or numeric tokens) or set HIPPO_AUTODEBIAS=off.
|
|
27
|
-
* - tests/api-recall-autodebias.test.ts locks this with an explicit
|
|
28
|
-
* test asserting that scope-set predictions surface via no-scope
|
|
29
|
-
* recalls (so future "fix" attempts that scope-filter trip CI).
|
|
30
|
-
*/
|
|
31
|
-
export function resolveClassFromTokens(hippoRoot, tenantId, queryTokens) {
|
|
32
|
-
if (queryTokens.length === 0)
|
|
33
|
-
return { classTag: null, tiebreak: false };
|
|
34
|
-
const db = openHippoDb(hippoRoot);
|
|
35
|
-
try {
|
|
36
|
-
// SAFETY: rows' shape matches the single `class_tag` column named in the SELECT above.
|
|
37
|
-
const rows = db.prepare(`SELECT DISTINCT class_tag FROM predictions WHERE tenant_id = ?`).all(tenantId);
|
|
38
|
-
const querySet = new Set(queryTokens);
|
|
39
|
-
let bestScore = 0;
|
|
40
|
-
let bestClass = null;
|
|
41
|
-
let secondBest = 0;
|
|
42
|
-
for (const { class_tag } of rows) {
|
|
43
|
-
const classTokens = class_tag
|
|
44
|
-
.toLowerCase()
|
|
45
|
-
.split(/[-_\s]+/)
|
|
46
|
-
.filter((t) => t.length >= 3);
|
|
47
|
-
let score = 0;
|
|
48
|
-
for (const t of classTokens)
|
|
49
|
-
if (querySet.has(t))
|
|
50
|
-
score++;
|
|
51
|
-
if (score > bestScore) {
|
|
52
|
-
secondBest = bestScore;
|
|
53
|
-
bestScore = score;
|
|
54
|
-
bestClass = class_tag;
|
|
55
|
-
}
|
|
56
|
-
else if (score === bestScore && score > 0) {
|
|
57
|
-
// Tie at current best — bump secondBest. Do NOT update bestClass
|
|
58
|
-
// (alphabetical tiebreak would pick wrong class on ambiguous query
|
|
59
|
-
// like "migration will take 3 days" between migration-effort vs
|
|
60
|
-
// migration-risk; silent on tie instead).
|
|
61
|
-
secondBest = score;
|
|
62
|
-
}
|
|
63
|
-
else if (score > secondBest) {
|
|
64
|
-
secondBest = score;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
if (bestScore < 1)
|
|
68
|
-
return { classTag: null, tiebreak: false };
|
|
69
|
-
if (bestScore === secondBest)
|
|
70
|
-
return { classTag: null, tiebreak: true };
|
|
71
|
-
return { classTag: bestClass, tiebreak: false };
|
|
72
|
-
}
|
|
73
|
-
finally {
|
|
74
|
-
closeHippoDb(db);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Planning-fallacy orchestrator.
|
|
79
|
-
*
|
|
80
|
-
* Composes the forward-claim detector + class resolver + baserate compute,
|
|
81
|
-
* with telemetry-grade audit emission at every decision point (success,
|
|
82
|
-
* no-class-match, tiebreak).
|
|
83
|
-
*
|
|
84
|
-
* Returns `{}` (neither hint nor watching) on:
|
|
85
|
-
* - mode === 'off' (env-disabled; pays only the env read, skips regex)
|
|
86
|
-
* - empty queryText
|
|
87
|
-
* - no forward-claim regex match
|
|
88
|
-
* - resolved class has nClosed=0 (no historical data yet; silent)
|
|
89
|
-
*
|
|
90
|
-
* Returns `{ watching: ... }` on:
|
|
91
|
-
* - resolver returns no class (no overlap ≥ 1; emits no_class_match audit)
|
|
92
|
-
* - resolver returns tiebreak (≥2 classes tied at best; emits tiebreak audit)
|
|
93
|
-
*
|
|
94
|
-
* Returns `{ hint: ... }` on success: calls computePredictionBaserate(...,
|
|
95
|
-
* emitAudit=false) so the predict_baserate audit channel stays scoped to
|
|
96
|
-
* deliberate predict-baserate calls (the orchestrator's own recall_autodebias_hint
|
|
97
|
-
* audit carries n_closed + mean_ratio in metadata so no telemetry is lost),
|
|
98
|
-
* then emits recall_autodebias_hint audit + returns the hint.
|
|
99
|
-
*
|
|
100
|
-
* Latency budget: well under 50ms; a miss pays only the regex.
|
|
101
|
-
*/
|
|
102
|
-
export function computePlanningFallacyOutput(hippoRoot, tenantId, queryText, opts = {}) {
|
|
103
|
-
const match = detectPlanningClaim(queryText, opts);
|
|
104
|
-
if (!match)
|
|
105
|
-
return {};
|
|
106
|
-
const actor = opts.actor ?? 'recall';
|
|
107
|
-
const { output, audit } = decidePlanningFallacy(match, planningFallacyEvidenceAt(hippoRoot, tenantId, match.classQueryTokens), tenantId, actor);
|
|
108
|
-
if (audit)
|
|
109
|
-
appendAuditEventOnce(hippoRoot, audit);
|
|
110
|
-
return output;
|
|
111
|
-
}
|
|
1
|
+
import { envAutodebiasOff } from '../util/env.js';
|
|
2
|
+
import { detectForwardClaim } from '../learn/forward-claim-detector.js';
|
|
3
|
+
const TARGET_ID_CHARS = 100;
|
|
112
4
|
/** The forward claim in a recall query; null when HIPPO_AUTODEBIAS=off, the query is empty or no claim matches. */
|
|
113
5
|
export function detectPlanningClaim(queryText, opts = {}) {
|
|
114
6
|
// Env read FIRST so AUTODEBIAS=off pays zero regex cost; read per call so tests can toggle it without a module reload.
|
|
@@ -119,13 +11,6 @@ export function detectPlanningClaim(queryText, opts = {}) {
|
|
|
119
11
|
return null;
|
|
120
12
|
return detectForwardClaim(queryText);
|
|
121
13
|
}
|
|
122
|
-
/** Resolves a claim's tokens to one class and reads its baserate, writing no audit row. */
|
|
123
|
-
export function planningFallacyEvidenceAt(hippoRoot, tenantId, classQueryTokens) {
|
|
124
|
-
const resolution = resolveClassFromTokens(hippoRoot, tenantId, classQueryTokens);
|
|
125
|
-
// emitAudit=false: the recall_autodebias_hint row carries n_closed and mean_ratio, so predict_baserate stays off.
|
|
126
|
-
const baserate = resolution.classTag ? computePredictionBaserate(hippoRoot, tenantId, resolution.classTag, 'recall', false) : null;
|
|
127
|
-
return { ...resolution, baserate };
|
|
128
|
-
}
|
|
129
14
|
/** The hint, the watching variant or nothing for a claim and its class evidence; reads and writes nothing itself. */
|
|
130
15
|
export function decidePlanningFallacy(match, evidence, tenantId, actor) {
|
|
131
16
|
if (evidence.tiebreak) {
|
|
@@ -168,16 +53,6 @@ export function decidePlanningFallacy(match, evidence, tenantId, actor) {
|
|
|
168
53
|
}
|
|
169
54
|
const TIEBREAK_SUGGESTION = 'Multiple prediction classes tied on this query. Refine the query or rename overlapping classes to break the tie.';
|
|
170
55
|
const NO_CLASS_MATCH_SUGGESTION = 'No matching prediction class for this forward-claim. Tag your prediction with `hippo predict --class <name>` to start tracking this class.';
|
|
171
|
-
/** One audit row on its own short-lived connection. */
|
|
172
|
-
function appendAuditEventOnce(hippoRoot, event) {
|
|
173
|
-
const db = openHippoDb(hippoRoot);
|
|
174
|
-
try {
|
|
175
|
-
appendAuditEvent(db, event);
|
|
176
|
-
}
|
|
177
|
-
finally {
|
|
178
|
-
closeHippoDb(db);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
56
|
function watchingWithAudit(tenantId, actor, match, reason, suggestion) {
|
|
182
57
|
return {
|
|
183
58
|
output: {
|
|
@@ -191,7 +66,7 @@ function watchingWithAudit(tenantId, actor, match, reason, suggestion) {
|
|
|
191
66
|
tenantId,
|
|
192
67
|
actor,
|
|
193
68
|
op: reason === 'tiebreak' ? 'recall_autodebias_hint_tiebreak' : 'recall_autodebias_hint_no_class_match',
|
|
194
|
-
targetId: match.phrase.slice(0,
|
|
69
|
+
targetId: match.phrase.slice(0, TARGET_ID_CHARS),
|
|
195
70
|
metadata: { detected_phrase: match.phrase, token_count: match.classQueryTokens.length },
|
|
196
71
|
},
|
|
197
72
|
};
|
package/dist/rerankers/clef.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { RerankerFn, RerankProvenance } from './types.js';
|
|
2
|
-
import type
|
|
2
|
+
import { type JsonValue } from '../util/json.js';
|
|
3
3
|
/** The two pretrained CLEF decision models served by Cloudflare Workers AI. */
|
|
4
4
|
export type ClefModel = 'clef-flash' | 'clef';
|
|
5
5
|
/** True when `name` is one of the CLEF reranker names. */
|
|
@@ -19,11 +19,7 @@ interface ClefScores {
|
|
|
19
19
|
export declare function resolveClefRoute(model: ClefModel): ClefRoute;
|
|
20
20
|
/** Unwraps a Workers AI `{ result }` envelope or a bare System One reply and checks model and `c1..cN`; a string is the rejection reason. */
|
|
21
21
|
export declare function parseClefReply(body: JsonValue, n: number, model: ClefModel, requireModel: boolean): ClefScores | string;
|
|
22
|
-
/** A CLEF reranker for one model: Jev's request shape and pool; any failure keeps the native order (never paid Jev)
|
|
22
|
+
/** A CLEF reranker for one model: Jev's request shape and pool; any failure keeps the native order (never paid Jev) and warns. */
|
|
23
23
|
export declare function createClefReranker(model: ClefModel): RerankerFn;
|
|
24
|
-
/** Opt-in CLEF-flash reranker (Cloudflare Workers AI or HIPPO_CLEF_ENDPOINT); off unless named, so defaults stay native. */
|
|
25
|
-
export declare const clefFlashReranker: RerankerFn;
|
|
26
|
-
/** Opt-in CLEF reranker, the larger model. Same transport and fallback as clef-flash. */
|
|
27
|
-
export declare const clefReranker: RerankerFn;
|
|
28
24
|
export {};
|
|
29
25
|
//# sourceMappingURL=clef.d.ts.map
|
package/dist/rerankers/clef.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import { envClefEndpoint, envClefEndpointToken, envClefTimeoutMs, envCloudflareAccountId, envCloudflareApiToken } from '../env.js';
|
|
1
|
+
import { envClefEndpoint, envClefEndpointToken, envClefTimeoutMs, envCloudflareAccountId, envCloudflareApiToken } from '../util/env.js';
|
|
2
2
|
import { buildRelevanceRequest, JEV_DEFAULT_TOP_K, rankByScores } from './jev.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { createOutageWarning } from './outage-warning.js';
|
|
4
|
+
import { rerankerPost } from './remote.js';
|
|
5
|
+
import { isJsonObject } from '../util/json.js';
|
|
6
|
+
import { errorMessage } from '../util/log.js';
|
|
7
|
+
const RAY_ID_MAX_CHARS = 64;
|
|
5
8
|
const CLEF_MODELS = ['clef-flash', 'clef'];
|
|
6
9
|
const DEFAULT_TIMEOUT_MS = 15_000;
|
|
7
10
|
const MAX_TIMEOUT_MS = 120_000;
|
|
@@ -73,12 +76,12 @@ export function resolveClefRoute(model) {
|
|
|
73
76
|
}
|
|
74
77
|
/** Unwraps a Workers AI `{ result }` envelope or a bare System One reply and checks model and `c1..cN`; a string is the rejection reason. */
|
|
75
78
|
export function parseClefReply(body, n, model, requireModel) {
|
|
76
|
-
if (!
|
|
79
|
+
if (!isJsonObject(body))
|
|
77
80
|
return 'reply is not a JSON object';
|
|
78
81
|
if (body.success === false)
|
|
79
82
|
return 'provider reported failure';
|
|
80
83
|
const reply = body.result === undefined ? body : body.result;
|
|
81
|
-
if (!
|
|
84
|
+
if (!isJsonObject(reply))
|
|
82
85
|
return 'reply has no result object';
|
|
83
86
|
const actual = reply.model;
|
|
84
87
|
if (actual !== undefined && (!isString(actual) || actual.trim() !== model))
|
|
@@ -86,21 +89,21 @@ export function parseClefReply(body, n, model, requireModel) {
|
|
|
86
89
|
if (actual === undefined && requireModel)
|
|
87
90
|
return 'reply does not name its model';
|
|
88
91
|
const answers = reply.answers;
|
|
89
|
-
if (!
|
|
92
|
+
if (!isJsonObject(answers))
|
|
90
93
|
return 'reply has no answers';
|
|
91
94
|
if (Object.keys(answers).length !== n)
|
|
92
95
|
return 'incomplete or out-of-range answers';
|
|
93
96
|
const scores = [];
|
|
94
97
|
for (let i = 1; i <= n; i++) {
|
|
95
98
|
const a = answers[`c${i}`];
|
|
96
|
-
if (!
|
|
99
|
+
if (!isJsonObject(a) || (a.type !== undefined && a.type !== 'noul'))
|
|
97
100
|
return 'incomplete or out-of-range answers';
|
|
98
101
|
const v = a.noul;
|
|
99
102
|
if (!isNumber(v) || v < 0 || v > 1)
|
|
100
103
|
return 'incomplete or out-of-range answers';
|
|
101
104
|
scores.push(v);
|
|
102
105
|
}
|
|
103
|
-
const usage =
|
|
106
|
+
const usage = isJsonObject(reply.usage) ? reply.usage : {};
|
|
104
107
|
return {
|
|
105
108
|
scores,
|
|
106
109
|
actualModel: isString(actual) ? actual.trim() : undefined,
|
|
@@ -143,35 +146,18 @@ async function requestScores(model, query, head, route) {
|
|
|
143
146
|
const headers = new Headers({ 'content-type': 'application/json' });
|
|
144
147
|
if (route.token)
|
|
145
148
|
headers.set('authorization', `Bearer ${route.token}`);
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
body: JSON.stringify({ state, model, questions }),
|
|
153
|
-
signal: controller.signal,
|
|
154
|
-
});
|
|
155
|
-
if (!resp.ok) {
|
|
156
|
-
// A third-party header ends up on stderr, so keep printable ASCII only.
|
|
157
|
-
const ray = resp.headers.get('cf-ray')?.replace(/[^\x20-\x7e]/g, '').slice(0, 64);
|
|
158
|
-
await resp.body?.cancel();
|
|
159
|
-
throw new Error(`HTTP ${resp.status}${ray ? `, ray ${ray}` : ''}`);
|
|
160
|
-
}
|
|
161
|
-
const body = await readCappedJson(resp);
|
|
162
|
-
const parsed = parseClefReply(body, head.length, model, route.backend === 'cloudflare');
|
|
163
|
-
if (isRejection(parsed))
|
|
164
|
-
throw new Error(parsed);
|
|
165
|
-
return parsed;
|
|
166
|
-
}
|
|
167
|
-
catch (err) {
|
|
168
|
-
if (err instanceof Error && err.name === 'AbortError')
|
|
169
|
-
throw new Error(`no answer within ${timeoutMs} ms`);
|
|
170
|
-
throw err;
|
|
171
|
-
}
|
|
172
|
-
finally {
|
|
173
|
-
clearTimeout(timer);
|
|
149
|
+
const resp = await rerankerPost(route.url, { headers, body: JSON.stringify({ state, model, questions }) }, timeoutMs);
|
|
150
|
+
if (!resp.ok) {
|
|
151
|
+
// A third-party header ends up on stderr, so keep printable ASCII only.
|
|
152
|
+
const ray = resp.headers.get('cf-ray')?.replace(/[^\x20-\x7e]/g, '').slice(0, RAY_ID_MAX_CHARS);
|
|
153
|
+
await resp.body?.cancel();
|
|
154
|
+
throw new Error(`HTTP ${resp.status}${ray ? `, ray ${ray}` : ''}`);
|
|
174
155
|
}
|
|
156
|
+
const body = await readCappedJson(resp);
|
|
157
|
+
const parsed = parseClefReply(body, head.length, model, route.backend === 'cloudflare');
|
|
158
|
+
if (isRejection(parsed))
|
|
159
|
+
throw new Error(parsed);
|
|
160
|
+
return parsed;
|
|
175
161
|
}
|
|
176
162
|
/** The input order, unchanged, with the reason recorded. Never a partial reorder. */
|
|
177
163
|
function nativeOrder(head, provenance) {
|
|
@@ -184,9 +170,9 @@ function nativeOrder(head, provenance) {
|
|
|
184
170
|
rerankProvenance: { ...provenance },
|
|
185
171
|
}));
|
|
186
172
|
}
|
|
187
|
-
/** A CLEF reranker for one model: Jev's request shape and pool; any failure keeps the native order (never paid Jev)
|
|
173
|
+
/** A CLEF reranker for one model: Jev's request shape and pool; any failure keeps the native order (never paid Jev) and warns. */
|
|
188
174
|
export function createClefReranker(model) {
|
|
189
|
-
|
|
175
|
+
const outage = createOutageWarning(model, 'keeping the native order');
|
|
190
176
|
return async (query, results, options) => {
|
|
191
177
|
const head = results.slice(0, options?.topK ?? JEV_DEFAULT_TOP_K);
|
|
192
178
|
if (head.length === 0)
|
|
@@ -198,13 +184,11 @@ export function createClefReranker(model) {
|
|
|
198
184
|
throw new Error(`more than ${MAX_CANDIDATES} candidates`);
|
|
199
185
|
route = resolveClefRoute(model);
|
|
200
186
|
got = await requestScores(model, query, head, route);
|
|
187
|
+
outage.answered();
|
|
201
188
|
}
|
|
202
189
|
catch (err) {
|
|
203
|
-
const reason = err
|
|
204
|
-
|
|
205
|
-
warned = true;
|
|
206
|
-
log.warn(`${model} reranker unavailable (${reason}); keeping the native order. Subsequent calls will not repeat this warning.`);
|
|
207
|
-
}
|
|
190
|
+
const reason = errorMessage(err);
|
|
191
|
+
outage.failed(reason);
|
|
208
192
|
return nativeOrder(head, { backend: 'native', requestedModel: model, fallbackReason: reason });
|
|
209
193
|
}
|
|
210
194
|
const rerankProvenance = {
|
|
@@ -217,8 +201,4 @@ export function createClefReranker(model) {
|
|
|
217
201
|
return rankByScores(head, got.scores).map((r) => ({ ...r, rerankProvenance: { ...rerankProvenance } }));
|
|
218
202
|
};
|
|
219
203
|
}
|
|
220
|
-
/** Opt-in CLEF-flash reranker (Cloudflare Workers AI or HIPPO_CLEF_ENDPOINT); off unless named, so defaults stay native. */
|
|
221
|
-
export const clefFlashReranker = createClefReranker('clef-flash');
|
|
222
|
-
/** Opt-in CLEF reranker, the larger model. Same transport and fallback as clef-flash. */
|
|
223
|
-
export const clefReranker = createClefReranker('clef');
|
|
224
204
|
//# sourceMappingURL=clef.js.map
|
|
@@ -1,11 +1,4 @@
|
|
|
1
1
|
import type { RerankerFn } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* True if a Transformers.js backend is importable. Note: this does NOT confirm
|
|
4
|
-
* that the model is downloadable from Hugging Face CDN — in sandboxed
|
|
5
|
-
* environments the package may import but the model fetch may be blocked.
|
|
6
|
-
* The reranker silently falls back to identity ordering in that case.
|
|
7
|
-
*/
|
|
8
|
-
export declare function isCrossEncoderAvailable(): Promise<boolean>;
|
|
9
2
|
/** Track 2 reranker: MS-MARCO MiniLM cross-encoder, identity fallback if the model will not load. */
|
|
10
3
|
export declare const crossEncoderReranker: RerankerFn;
|
|
11
4
|
//# sourceMappingURL=cross-encoder.d.ts.map
|