hippo-memory 1.68.0 → 1.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.d.ts +3 -1
- package/dist/agent-memories/copilot.js +5 -4
- package/dist/agent-memories/files.js +3 -2
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +14 -4
- package/dist/api/context-select.js +50 -60
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +113 -85
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +4 -13
- package/dist/api/forget.js +13 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +9 -46
- package/dist/api/outcome.js +15 -57
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/promote.d.ts +7 -18
- package/dist/api/promote.js +30 -152
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +12 -13
- package/dist/api/remember.js +38 -27
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +1 -1
- package/dist/capture/command.js +54 -41
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +4 -1
- package/dist/capture/compact.js +59 -22
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.d.ts +3 -0
- package/dist/capture/copilot-transcript.js +9 -2
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.d.ts +13 -0
- package/dist/capture/session-worker.js +196 -0
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +265 -191
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +111 -45
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +8 -3
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -82
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -48
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -90
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/core/capture-contract.js +149 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +19 -5
- package/dist/{memory.js → core/memory.js} +117 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +5 -0
- package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +14 -15
- package/dist/hooks/copilot.d.ts +48 -13
- package/dist/hooks/copilot.js +124 -39
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +3 -1
- package/dist/hooks/json-hooks.js +40 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +7 -5
- package/dist/hooks/shared.js +19 -8
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.d.ts +2 -2
- package/dist/mcp/memory-tools.js +12 -31
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +65 -63
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -1
- package/dist/search/boosts.js +34 -13
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +21 -20
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +3 -2
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +41 -50
- package/dist/server.js +26 -560
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +12 -6
- package/dist/store/audit-event.js +6 -5
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +6 -3
- package/dist/store/handoffs.js +70 -31
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +8 -4
- package/dist/store/open.js +34 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +5 -3
- package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
- package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +43 -36
- package/dist/store/sessions.d.ts +18 -2
- package/dist/store/sessions.js +83 -46
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/sqlite/entry-writes-group.js +170 -0
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +28 -0
- package/dist/store/sqlite/executor.js +286 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +26 -0
- package/dist/store/sqlite/store.js +295 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +17 -2
- package/dist/{env.js → util/env.js} +22 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/capture-contract.js +0 -49
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store-port.d.ts +0 -191
- package/dist/store-port.js +0 -166
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { ApiError } from '
|
|
2
|
-
import { SqliteBlockedError } from './
|
|
1
|
+
import { ApiError } from '../core/api-errors.js';
|
|
2
|
+
import { SqliteBlockedError } from './sqlite-blocked.js';
|
|
3
|
+
import { envBodyTimeoutMs } from './env.js';
|
|
3
4
|
// Leaf module shared by server.ts and the connector webhook receivers; it must not import either.
|
|
4
|
-
export function isJsonObjectRecord(value) {
|
|
5
|
-
return value !== undefined && value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
6
|
-
}
|
|
7
5
|
// node:http header values are `string | string[] | undefined` (never a bare
|
|
8
6
|
// unknown), so this gets its own predicate rather than reusing isJsonString.
|
|
9
7
|
export function isHeaderString(value) {
|
|
@@ -11,7 +9,7 @@ export function isHeaderString(value) {
|
|
|
11
9
|
}
|
|
12
10
|
// 1 MB body cap. The CLI never sends payloads near this; anything bigger is
|
|
13
11
|
// almost certainly a misconfigured client or a deliberate memory-blowup attempt.
|
|
14
|
-
const MAX_BODY_BYTES = 1024 * 1024;
|
|
12
|
+
export const MAX_BODY_BYTES = 1024 * 1024;
|
|
15
13
|
function sizeLabel(bytes) {
|
|
16
14
|
return bytes % (1024 * 1024) === 0 ? `${bytes / (1024 * 1024)}MB` : `${Math.ceil(bytes / 1024)}KB`;
|
|
17
15
|
}
|
|
@@ -30,6 +28,13 @@ export class HttpError extends Error {
|
|
|
30
28
|
this.retryAfterSec = retryAfterSec;
|
|
31
29
|
}
|
|
32
30
|
}
|
|
31
|
+
/** A request, or a store call it waited on, ran past the request's deadline; the reply carries `code` so a client branches without parsing prose. */
|
|
32
|
+
export class DeadlineExceededError extends HttpError {
|
|
33
|
+
code = 'deadline_exceeded';
|
|
34
|
+
constructor(message) {
|
|
35
|
+
super(504, message);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
33
38
|
export class BodyTooLargeError extends Error {
|
|
34
39
|
}
|
|
35
40
|
/** The body did not arrive in time. Its own class so mapApiError answers 408 and the server drops the socket. */
|
|
@@ -62,12 +67,16 @@ export function sendJson(res, status, body) {
|
|
|
62
67
|
res.writeHead(status, JSON_HEADERS);
|
|
63
68
|
res.end(text);
|
|
64
69
|
}
|
|
70
|
+
const DEFAULT_BODY_DEADLINE_MS = 30_000;
|
|
71
|
+
/** How long any route waits for a request body, so a client that sends headers and then stalls cannot hold a request open: 30 s, or HIPPO_BODY_TIMEOUT_MS. */
|
|
72
|
+
export function bodyDeadlineMs() {
|
|
73
|
+
return envBodyTimeoutMs() ?? DEFAULT_BODY_DEADLINE_MS;
|
|
74
|
+
}
|
|
65
75
|
/** The body as text, refused mid-stream past maxBytes and past deadlineMs, so an oversized or slow sender cannot tie up the server. */
|
|
66
|
-
export function readBody(req, { maxBytes = MAX_BODY_BYTES, deadlineMs } = {}) {
|
|
76
|
+
export function readBody(req, { maxBytes = MAX_BODY_BYTES, deadlineMs = bodyDeadlineMs() } = {}) {
|
|
67
77
|
return new Promise((resolve, reject) => {
|
|
68
78
|
const chunks = [];
|
|
69
79
|
let total = 0;
|
|
70
|
-
let timer;
|
|
71
80
|
const refuse = (err) => {
|
|
72
81
|
clearTimeout(timer);
|
|
73
82
|
req.off('data', onData);
|
|
@@ -83,9 +92,7 @@ export function readBody(req, { maxBytes = MAX_BODY_BYTES, deadlineMs } = {}) {
|
|
|
83
92
|
}
|
|
84
93
|
refuse(new BodyTooLargeError(`request body exceeds ${sizeLabel(maxBytes)}`));
|
|
85
94
|
};
|
|
86
|
-
|
|
87
|
-
timer = setTimeout(() => refuse(new BodyTimeoutError(`request body not received within ${deadlineMs} ms`)), deadlineMs);
|
|
88
|
-
}
|
|
95
|
+
const timer = setTimeout(() => refuse(new BodyTimeoutError(`request body not received within ${deadlineMs} ms`)), deadlineMs);
|
|
89
96
|
req.on('data', onData);
|
|
90
97
|
req.once('end', () => {
|
|
91
98
|
clearTimeout(timer);
|
|
@@ -116,4 +123,17 @@ export function isCrossSite(req) {
|
|
|
116
123
|
const origin = req.headers.origin;
|
|
117
124
|
return origin !== undefined && origin !== `http://${req.headers.host}`;
|
|
118
125
|
}
|
|
126
|
+
// A webhook route takes no key, so anyone holding a signature header could otherwise keep a socket open with a body that never ends.
|
|
127
|
+
const WEBHOOK_BODY_DEADLINE_MS = 10_000;
|
|
128
|
+
/** Call before refusing a webhook unread: a caller still sending its body loses the socket once the reply is out, as it does after a 413. */
|
|
129
|
+
export function closeIfBodyUnread({ req, res }) {
|
|
130
|
+
res.once('finish', () => {
|
|
131
|
+
if (!req.complete)
|
|
132
|
+
closeAfterReply(req);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
/** A webhook's raw body, exactly as sent, for the receiver's HMAC check; call it only once a secret is configured and the signature headers are present. */
|
|
136
|
+
export function readWebhookBody({ req, opts }) {
|
|
137
|
+
return readBody(req, { deadlineMs: opts.webhookBodyDeadlineMs ?? WEBHOOK_BODY_DEADLINE_MS });
|
|
138
|
+
}
|
|
119
139
|
//# sourceMappingURL=http-util.js.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type JsonValue = string | number | boolean | null | JsonValue[] | {
|
|
2
|
+
[key: string]: JsonValue;
|
|
3
|
+
};
|
|
4
|
+
export declare function isJsonString(value: JsonValue | undefined): value is string;
|
|
5
|
+
export declare function isJsonNumber(value: JsonValue | undefined): value is number;
|
|
6
|
+
export declare function isJsonBoolean(value: JsonValue | undefined): value is boolean;
|
|
7
|
+
/** A non-null, non-array object. */
|
|
8
|
+
export declare function isJsonObject(value: JsonValue | undefined): value is {
|
|
9
|
+
[key: string]: JsonValue;
|
|
10
|
+
};
|
|
11
|
+
/** Like `isJsonObject`, but also false for an object whose own `constructor` key shadows `Object`. */
|
|
12
|
+
export declare function isJsonObjectLiteral(value: JsonValue | undefined): value is {
|
|
13
|
+
[key: string]: JsonValue;
|
|
14
|
+
};
|
|
15
|
+
/** Windows PowerShell 5.1 saves JSON with a UTF-8 byte order mark that JSON.parse rejects, so one leading mark is dropped. */
|
|
16
|
+
export declare function readJsonFile(file: string): JsonValue;
|
|
17
|
+
//# sourceMappingURL=json.d.ts.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Leaf module: the one value space JSON.parse can produce, so boundary guards narrow a shared type.
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
export function isJsonString(value) {
|
|
4
|
+
return typeof value === 'string';
|
|
5
|
+
}
|
|
6
|
+
export function isJsonNumber(value) {
|
|
7
|
+
return typeof value === 'number';
|
|
8
|
+
}
|
|
9
|
+
export function isJsonBoolean(value) {
|
|
10
|
+
return typeof value === 'boolean';
|
|
11
|
+
}
|
|
12
|
+
/** A non-null, non-array object. */
|
|
13
|
+
export function isJsonObject(value) {
|
|
14
|
+
return value !== undefined && value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
15
|
+
}
|
|
16
|
+
/** Like `isJsonObject`, but also false for an object whose own `constructor` key shadows `Object`. */
|
|
17
|
+
export function isJsonObjectLiteral(value) {
|
|
18
|
+
return value !== undefined && value !== null && !Array.isArray(value) && value.constructor === Object;
|
|
19
|
+
}
|
|
20
|
+
/** Windows PowerShell 5.1 saves JSON with a UTF-8 byte order mark that JSON.parse rejects, so one leading mark is dropped. */
|
|
21
|
+
export function readJsonFile(file) {
|
|
22
|
+
const text = fs.readFileSync(file, 'utf8');
|
|
23
|
+
return JSON.parse(text.codePointAt(0) === 0xfeff ? text.slice(1) : text);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
/** Leveled stderr logger. `HIPPO_LOG` picks the threshold (error, warn, info, debug); unset or unknown means warn. */
|
|
1
|
+
/** Leveled stderr logger. `HIPPO_LOG` picks the threshold (error, warn, info, debug); unset or unknown means warn. `HIPPO_LOG_FORMAT=json` writes JSON lines. */
|
|
2
2
|
export type LogLevel = 'error' | 'warn' | 'info' | 'debug';
|
|
3
|
-
/** Extra key=value pairs appended to the line
|
|
3
|
+
/** Extra key=value pairs appended to the line. `ts` and, inside a request, `requestId` are added to every line written. */
|
|
4
4
|
export interface LogFields {
|
|
5
|
+
ts?: string;
|
|
5
6
|
requestId?: string;
|
|
6
7
|
[key: string]: string | number | boolean | undefined;
|
|
7
8
|
}
|
|
@@ -10,6 +11,8 @@ export declare function logThreshold(): LogLevel;
|
|
|
10
11
|
export declare function isLevelEnabled(level: LogLevel): boolean;
|
|
11
12
|
/** Same `[hippo] ` prefix the existing stderr lines use, so default-level output reads as before. */
|
|
12
13
|
export declare function formatLogLine(level: LogLevel, message: string, fields?: LogFields): string;
|
|
14
|
+
/** One JSON object per line for a log collector; JSON escaping keeps a multi-line value on the one line. */
|
|
15
|
+
export declare function formatLogJson(level: LogLevel, message: string, fields?: LogFields): string;
|
|
13
16
|
/** Write `message` at `level` the first time `key` is seen in this process; later calls are dropped. */
|
|
14
17
|
declare function once(key: string, level: LogLevel, message: string, fields?: LogFields): void;
|
|
15
18
|
/** Warn the first time `key` is seen in this process, then log at debug, so a repeating failure stays findable without flooding stderr. */
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
/** Leveled stderr logger. `HIPPO_LOG` picks the threshold (error, warn, info, debug); unset or unknown means warn. */
|
|
2
|
-
import { envLogLevel } from './env.js';
|
|
1
|
+
/** Leveled stderr logger. `HIPPO_LOG` picks the threshold (error, warn, info, debug); unset or unknown means warn. `HIPPO_LOG_FORMAT=json` writes JSON lines. */
|
|
2
|
+
import { envLogJson, envLogLevel } from './env.js';
|
|
3
|
+
import { currentRequestId } from './request-scope.js';
|
|
3
4
|
const RANK = { error: 0, warn: 1, info: 2, debug: 3 };
|
|
4
5
|
function isLogLevel(value) {
|
|
5
6
|
return Object.hasOwn(RANK, value);
|
|
@@ -22,10 +23,18 @@ export function formatLogLine(level, message, fields = {}) {
|
|
|
22
23
|
.join('');
|
|
23
24
|
return `[hippo] ${level}: ${oneLine(message)}${extras}`;
|
|
24
25
|
}
|
|
26
|
+
/** One JSON object per line for a log collector; JSON escaping keeps a multi-line value on the one line. */
|
|
27
|
+
export function formatLogJson(level, message, fields = {}) {
|
|
28
|
+
const { ts, ...rest } = fields;
|
|
29
|
+
return JSON.stringify({ ts, level, msg: message, ...rest });
|
|
30
|
+
}
|
|
25
31
|
function write(level, message, fields) {
|
|
26
32
|
if (!isLevelEnabled(level))
|
|
27
33
|
return;
|
|
28
|
-
|
|
34
|
+
// The request id is ambient, so a line logged deep in a library call still names the request it ran for.
|
|
35
|
+
const stamped = { ts: new Date().toISOString(), requestId: currentRequestId(), ...fields };
|
|
36
|
+
const format = envLogJson() ? formatLogJson : formatLogLine;
|
|
37
|
+
process.stderr.write(`${format(level, message, stamped)}\n`);
|
|
29
38
|
}
|
|
30
39
|
const onceKeys = new Set();
|
|
31
40
|
/** Write `message` at `level` the first time `key` is seen in this process; later calls are dropped. */
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Leaf module: path canonicalisation shared by project identity and the importers.
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { errorMessage, log } from './log.js';
|
|
5
|
+
/** Dereferences symlinks and junctions and normalises case on Windows; falls back to path.resolve when the path does not exist yet. */
|
|
6
|
+
export function realpathOrResolve(p) {
|
|
7
|
+
try {
|
|
8
|
+
return fs.realpathSync.native(p);
|
|
9
|
+
}
|
|
10
|
+
catch (err) {
|
|
11
|
+
log.debug(`realpath fell back to resolve for ${p}: ${errorMessage(err)}`);
|
|
12
|
+
return path.resolve(p);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=real-path.js.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
/** What every scope carries; the store layer's RequestStores is one, and adds its handles. */
|
|
3
|
+
export interface RequestScope {
|
|
4
|
+
/** Ties every log line written inside the scope to one request. */
|
|
5
|
+
readonly requestId: string | undefined;
|
|
6
|
+
/** Set for a served request that must be answered by a given time. */
|
|
7
|
+
readonly deadline?: RequestDeadline | undefined;
|
|
8
|
+
}
|
|
9
|
+
/** When a request must be answered, and the store calls it still waits on: the store ends each of those soon after `at`, with the outcome only it knows. */
|
|
10
|
+
export declare class RequestDeadline {
|
|
11
|
+
#private;
|
|
12
|
+
/** Epoch milliseconds. */
|
|
13
|
+
readonly at: number;
|
|
14
|
+
constructor(at: number);
|
|
15
|
+
/** Counts `call` as one the request waits on until it settles. */
|
|
16
|
+
track<T>(call: Promise<T>): Promise<T>;
|
|
17
|
+
/** Runs `fn` now, or once the last store call the request waits on has settled. */
|
|
18
|
+
onceIdle(fn: () => void): void;
|
|
19
|
+
}
|
|
20
|
+
export declare const requestScopes: AsyncLocalStorage<RequestScope>;
|
|
21
|
+
/** The id of the request this code runs for, if any. */
|
|
22
|
+
export declare function currentRequestId(): string | undefined;
|
|
23
|
+
/** The deadline of the request this code runs for, if it has one. */
|
|
24
|
+
export declare function currentDeadline(): RequestDeadline | undefined;
|
|
25
|
+
/** Runs `fn` with `requestId` on every log line it writes, including the ones from timers and promises it starts. `deadline` reaches every store call made inside. */
|
|
26
|
+
export declare function runWithRequestId<T>(requestId: string, fn: () => T, deadline?: RequestDeadline): T;
|
|
27
|
+
//# sourceMappingURL=request-scope.d.ts.map
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// The one ambient scope of a request. A leaf module, so the logger can read the request id without importing the store layer.
|
|
2
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
3
|
+
/** When a request must be answered, and the store calls it still waits on: the store ends each of those soon after `at`, with the outcome only it knows. */
|
|
4
|
+
export class RequestDeadline {
|
|
5
|
+
/** Epoch milliseconds. */
|
|
6
|
+
at;
|
|
7
|
+
#storeCalls = 0;
|
|
8
|
+
#whenIdle;
|
|
9
|
+
constructor(at) {
|
|
10
|
+
this.at = at;
|
|
11
|
+
}
|
|
12
|
+
/** Counts `call` as one the request waits on until it settles. */
|
|
13
|
+
track(call) {
|
|
14
|
+
this.#storeCalls += 1;
|
|
15
|
+
const done = () => {
|
|
16
|
+
this.#storeCalls -= 1;
|
|
17
|
+
if (this.#storeCalls > 0)
|
|
18
|
+
return;
|
|
19
|
+
const idle = this.#whenIdle;
|
|
20
|
+
this.#whenIdle = undefined;
|
|
21
|
+
idle?.();
|
|
22
|
+
};
|
|
23
|
+
call.then(done, done);
|
|
24
|
+
return call;
|
|
25
|
+
}
|
|
26
|
+
/** Runs `fn` now, or once the last store call the request waits on has settled. */
|
|
27
|
+
onceIdle(fn) {
|
|
28
|
+
if (this.#storeCalls === 0)
|
|
29
|
+
fn();
|
|
30
|
+
else
|
|
31
|
+
this.#whenIdle = fn;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export const requestScopes = new AsyncLocalStorage();
|
|
35
|
+
/** The id of the request this code runs for, if any. */
|
|
36
|
+
export function currentRequestId() {
|
|
37
|
+
return requestScopes.getStore()?.requestId;
|
|
38
|
+
}
|
|
39
|
+
/** The deadline of the request this code runs for, if it has one. */
|
|
40
|
+
export function currentDeadline() {
|
|
41
|
+
return requestScopes.getStore()?.deadline;
|
|
42
|
+
}
|
|
43
|
+
/** Runs `fn` with `requestId` on every log line it writes, including the ones from timers and promises it starts. `deadline` reaches every store call made inside. */
|
|
44
|
+
export function runWithRequestId(requestId, fn, deadline) {
|
|
45
|
+
return requestScopes.run({ requestId, deadline }, fn);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=request-scope.js.map
|
|
@@ -26,10 +26,11 @@ const SECRET_PATTERNS = [
|
|
|
26
26
|
{ name: 'aws-access-key', re: /\bAKIA[0-9A-Z]{16}\b/ },
|
|
27
27
|
{ name: 'github-token', re: /\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{36}\b/ },
|
|
28
28
|
{ name: 'github-fine-grained-pat', re: /\bgithub_pat_[A-Za-z0-9_]{22,}\b/ },
|
|
29
|
-
|
|
29
|
+
// A token may end in a hyphen, where `\b` holds only before a word character: a class that holds `-` runs to its end, and a fixed length may also close on a hyphen.
|
|
30
|
+
{ name: 'slack-token', re: /\bxox[baprs]-[A-Za-z0-9-]{10,}/ },
|
|
30
31
|
{ name: 'stripe-key', re: /\b[sr]k_(?:live|test)_[A-Za-z0-9]{16,}\b/ },
|
|
31
|
-
{ name: 'google-api-key', re: /\bAIza[0-9A-Za-z_-]{35}
|
|
32
|
-
// hk_ is hippo's own API key (src/auth.ts); npm, Hugging Face, GitLab and Slack webhook shapes follow gitleaks' rules.
|
|
32
|
+
{ name: 'google-api-key', re: /\bAIza[0-9A-Za-z_-]{35}(?:\b|(?<=-))/ },
|
|
33
|
+
// hk_ is hippo's own API key (src/store/auth.ts); npm, Hugging Face, GitLab and Slack webhook shapes follow gitleaks' rules.
|
|
33
34
|
{ name: 'hippo-api-key', re: /\bhk_[a-z2-7]{24}\.[a-z2-7]{32}\b/ },
|
|
34
35
|
{ name: 'npm-token', re: /\bnpm_[A-Za-z0-9]{36}\b/ },
|
|
35
36
|
{ name: 'huggingface-token', re: /\bhf_[A-Za-z]{34}\b/ },
|
|
@@ -42,7 +43,7 @@ const SECRET_PATTERNS = [
|
|
|
42
43
|
// like "the sk- prefix identifies API keys" without an actual long token
|
|
43
44
|
// does not flag, but a stored key ("prod API key sk_live_...")
|
|
44
45
|
// does.
|
|
45
|
-
{ name: 'sk-style-key', re: /\bsk-[A-Za-z0-9_-]{20,}
|
|
46
|
+
{ name: 'sk-style-key', re: /\bsk-[A-Za-z0-9_-]{20,}/ },
|
|
46
47
|
{ name: 'sk-underscore-key', re: /\bsk_[A-Za-z0-9]+_[A-Za-z0-9_]{6,}\b/ },
|
|
47
48
|
// The value needs 12+ token-safe chars and a digit, or `token = estimateTokens(...)` and doc templates like user:password@ would hide code lessons from ambient context.
|
|
48
49
|
// Secret names end in the keyword (dbPassword, PGPASSWORD) and token_url does not, so the match opens there and scans no prefix; pwd and pass need a _ as OLDPWD and bypass are not secrets.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Where the value lives. The value itself is never logged: it is caller-written text. */
|
|
2
|
+
export interface StoredJsonSite {
|
|
3
|
+
table: string;
|
|
4
|
+
id: string | number;
|
|
5
|
+
column: string;
|
|
6
|
+
}
|
|
7
|
+
/** Warns the first time this row's column is found damaged, then logs at debug, so a row read on every recall cannot flood stderr. */
|
|
8
|
+
export declare function warnDamagedColumn(site: StoredJsonSite, problem: 'not valid JSON' | 'wrong shape'): void;
|
|
9
|
+
//# sourceMappingURL=stored-json.d.ts.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// One log line for a stored JSON column that will not read, so a reader that degrades to an empty value still leaves a trace.
|
|
2
|
+
import { log } from './log.js';
|
|
3
|
+
/** Warns the first time this row's column is found damaged, then logs at debug, so a row read on every recall cannot flood stderr. */
|
|
4
|
+
export function warnDamagedColumn(site, problem) {
|
|
5
|
+
const { table, id, column } = site;
|
|
6
|
+
log.warnThenDebug(`damaged-column:${table}:${id}:${column}`, `store: ${table}.${column} is ${problem}; read as empty`, { table, id, column });
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=stored-json.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Hex characters kept from a SHA-256 when it fingerprints a block, key or turn. */
|
|
2
|
+
export declare const FINGERPRINT_HEX_CHARS = 16;
|
|
3
|
+
/** Hex characters kept from a hash or UUID to build a short id. */
|
|
4
|
+
export declare const ID_SUFFIX_CHARS = 12;
|
|
5
|
+
/** Characters of a rejected-value or tombstone digest shown to a person. */
|
|
6
|
+
export declare const DIGEST_DISPLAY_CHARS = 12;
|
|
7
|
+
/** Length of the YYYY-MM-DD head of an ISO timestamp. */
|
|
8
|
+
export declare const DATE_PREFIX_CHARS = 10;
|
|
9
|
+
/** Characters of memory content shown as a one-line preview. */
|
|
10
|
+
export declare const CONTENT_PREVIEW_CHARS = 80;
|
|
11
|
+
/**
|
|
12
|
+
* Rough token estimate: characters / 4. The single estimate behind every
|
|
13
|
+
* token budget and ledger count in hippo.
|
|
14
|
+
*/
|
|
15
|
+
export declare function estimateTokens(text: string): number;
|
|
16
|
+
/** Stable 16-hex-char hash of a rendered block, for change detection. */
|
|
17
|
+
export declare function blockHash(text: string): string;
|
|
18
|
+
//# sourceMappingURL=token-text.d.ts.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
/** Hex characters kept from a SHA-256 when it fingerprints a block, key or turn. */
|
|
3
|
+
export const FINGERPRINT_HEX_CHARS = 16;
|
|
4
|
+
/** Hex characters kept from a hash or UUID to build a short id. */
|
|
5
|
+
export const ID_SUFFIX_CHARS = 12;
|
|
6
|
+
/** Characters of a rejected-value or tombstone digest shown to a person. */
|
|
7
|
+
export const DIGEST_DISPLAY_CHARS = 12;
|
|
8
|
+
/** Length of the YYYY-MM-DD head of an ISO timestamp. */
|
|
9
|
+
export const DATE_PREFIX_CHARS = 10;
|
|
10
|
+
/** Characters of memory content shown as a one-line preview. */
|
|
11
|
+
export const CONTENT_PREVIEW_CHARS = 80;
|
|
12
|
+
/**
|
|
13
|
+
* Rough token estimate: characters / 4. The single estimate behind every
|
|
14
|
+
* token budget and ledger count in hippo.
|
|
15
|
+
*/
|
|
16
|
+
export function estimateTokens(text) {
|
|
17
|
+
return Math.ceil(text.length / 4);
|
|
18
|
+
}
|
|
19
|
+
/** Stable 16-hex-char hash of a rendered block, for change detection. */
|
|
20
|
+
export function blockHash(text) {
|
|
21
|
+
return createHash('sha256').update(text).digest('hex').slice(0, FINGERPRINT_HEX_CHARS);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=token-text.js.map
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* an ESM `import` can resolve cleanly, and a hardcoded constant survives
|
|
17
17
|
* any packager that drops .json files.
|
|
18
18
|
*/
|
|
19
|
-
export declare const PACKAGE_VERSION = "1.
|
|
19
|
+
export declare const PACKAGE_VERSION = "1.70.0";
|
|
20
20
|
/** The floor a store takes on its first expiring key: the first release with schema v53, set by hand in that release; scripts/check-expiring-keys-floor.mjs gates it. */
|
|
21
21
|
export declare const EXPIRING_KEYS_MIN_BINARY = "1.64.0";
|
|
22
22
|
/** The floor a store takes on its first session bind or owner snapshot: first release with v54; set by hand in that release. */
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* an ESM `import` can resolve cleanly, and a hardcoded constant survives
|
|
17
17
|
* any packager that drops .json files.
|
|
18
18
|
*/
|
|
19
|
-
export const PACKAGE_VERSION = '1.
|
|
19
|
+
export const PACKAGE_VERSION = '1.70.0';
|
|
20
20
|
/** The floor a store takes on its first expiring key: the first release with schema v53, set by hand in that release; scripts/check-expiring-keys-floor.mjs gates it. */
|
|
21
21
|
export const EXPIRING_KEYS_MIN_BINARY = '1.64.0';
|
|
22
22
|
/** The floor a store takes on its first session bind or owner snapshot: first release with v54; set by hand in that release. */
|
|
@@ -294,12 +294,8 @@ export default function register(api: any) {
|
|
|
294
294
|
async execute(_id: string, params: { query: string; budget?: number }) {
|
|
295
295
|
const cfg = getConfig(api);
|
|
296
296
|
const budget = params.budget ?? cfg.budget ?? 1500;
|
|
297
|
-
const framing = cfg.framing ?? 'observe';
|
|
298
297
|
const hippoCwd = resolveHippoCwdFromContext(api, ctx, cfg.root);
|
|
299
|
-
const result = runHippo(
|
|
300
|
-
['recall', params.query, '--budget', String(budget), '--framing', framing],
|
|
301
|
-
hippoCwd,
|
|
302
|
-
);
|
|
298
|
+
const result = runHippo(['recall', params.query, '--budget', String(budget)], hippoCwd);
|
|
303
299
|
return { content: [{ type: 'text', text: result || 'No relevant memories found.' }] };
|
|
304
300
|
},
|
|
305
301
|
}));
|
package/openclaw.plugin.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "hippo-memory",
|
|
3
3
|
"name": "Hippo Memory",
|
|
4
4
|
"description": "Make your agent's memory work like a brain. Hippo is long-term memory for coding agents.",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.70.0",
|
|
6
6
|
"configSchema": {
|
|
7
7
|
"type": "object",
|
|
8
8
|
"additionalProperties": false,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hippo-memory",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.70.0",
|
|
4
4
|
"description": "Make your agent's memory work like a brain. Hippo is long-term memory for coding agents.",
|
|
5
5
|
"mcpName": "io.github.kitfunso/hippo-memory",
|
|
6
6
|
"type": "module",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"test:eval": "vitest run --config vitest.eval.config.ts",
|
|
44
44
|
"lint": "oxlint",
|
|
45
45
|
"sbom": "node scripts/sbom.mjs",
|
|
46
|
-
"audit:security": "npm audit --audit-level=
|
|
46
|
+
"audit:security": "npm audit --audit-level=moderate && npm --prefix ui audit --audit-level=moderate",
|
|
47
47
|
"postinstall": "node scripts/postinstall.cjs",
|
|
48
48
|
"smoke:pack": "node scripts/smoke-pack.mjs",
|
|
49
49
|
"smoke:openclaw-install": "node scripts/smoke-openclaw-install.mjs",
|
package/dist/api.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export { ApiError, BadRequestError, ConflictError, ForbiddenError, NotFoundError } from './api-errors.js';
|
|
2
|
-
export { isPrivateScope, passesScopeFilterForRecall } from './recall-scope.js';
|
|
3
|
-
export { passesCliRecallScopeFilter, ScopeForbiddenError } from './recall-scope.js';
|
|
4
|
-
export type { TokenSummary, TokenSurface, TokenSurfaceSummary } from './token-ledger.js';
|
|
5
|
-
export type { FailureSummary } from './failure-log.js';
|
|
6
|
-
export { classifyOriginProject } from './project-identity.js';
|
|
7
|
-
export * from './api/types.js';
|
|
8
|
-
export * from './api/remember.js';
|
|
9
|
-
export * from './api/recall-types.js';
|
|
10
|
-
export * from './api/recall.js';
|
|
11
|
-
export * from './api/assemble.js';
|
|
12
|
-
export * from './api/drill-down.js';
|
|
13
|
-
export * from './api/outcome.js';
|
|
14
|
-
export * from './api/forget.js';
|
|
15
|
-
export * from './api/promote.js';
|
|
16
|
-
export * from './api/auth.js';
|
|
17
|
-
export * from './api/audit.js';
|
|
18
|
-
export * from './api/context-types.js';
|
|
19
|
-
export * from './api/context.js';
|
|
20
|
-
export * from './api/tokens.js';
|
|
21
|
-
export * from './api/dormant.js';
|
|
22
|
-
export * from './api/quarantine.js';
|
|
23
|
-
export * from './api/sleep.js';
|
|
24
|
-
export * from './api/goals.js';
|
|
25
|
-
export * from './api/learn.js';
|
|
26
|
-
//# sourceMappingURL=api.d.ts.map
|
package/dist/api.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
// Domain API layer: Context-taking functions that the CLI, the HTTP server and MCP all call, so the
|
|
2
|
-
// business logic lives in one place. The code lives in src/api/, one module per domain; this barrel
|
|
3
|
-
// keeps every import path that callers already use.
|
|
4
|
-
export { ApiError, BadRequestError, ConflictError, ForbiddenError, NotFoundError } from './api-errors.js';
|
|
5
|
-
// The recall-side scope predicates live in recall-scope.ts (leaf) so shared.ts can use them without an import cycle.
|
|
6
|
-
export { isPrivateScope, passesScopeFilterForRecall } from './recall-scope.js';
|
|
7
|
-
export { passesCliRecallScopeFilter, ScopeForbiddenError } from './recall-scope.js';
|
|
8
|
-
// classifyOriginProject lives in project-identity.ts (leaf) for the same reason.
|
|
9
|
-
export { classifyOriginProject } from './project-identity.js';
|
|
10
|
-
export * from './api/types.js';
|
|
11
|
-
export * from './api/remember.js';
|
|
12
|
-
export * from './api/recall-types.js';
|
|
13
|
-
export * from './api/recall.js';
|
|
14
|
-
export * from './api/assemble.js';
|
|
15
|
-
export * from './api/drill-down.js';
|
|
16
|
-
export * from './api/outcome.js';
|
|
17
|
-
export * from './api/forget.js';
|
|
18
|
-
export * from './api/promote.js';
|
|
19
|
-
export * from './api/auth.js';
|
|
20
|
-
export * from './api/audit.js';
|
|
21
|
-
export * from './api/context-types.js';
|
|
22
|
-
export * from './api/context.js';
|
|
23
|
-
export * from './api/tokens.js';
|
|
24
|
-
export * from './api/dormant.js';
|
|
25
|
-
export * from './api/quarantine.js';
|
|
26
|
-
export * from './api/sleep.js';
|
|
27
|
-
export * from './api/goals.js';
|
|
28
|
-
export * from './api/learn.js';
|
|
29
|
-
//# sourceMappingURL=api.js.map
|
package/dist/capture-contract.js
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
// The shared shape every agent adapter turns a host payload into, so capture code is written once for all runtimes.
|
|
2
|
-
// Field meanings, statuses and how to add a runtime: docs/integrations/agent-inventory.md.
|
|
3
|
-
/** A string guard that avoids `typeof`; it matches it for every value `JSON.parse` can produce. */
|
|
4
|
-
export function isStringValue(value) {
|
|
5
|
-
return String(value) === value;
|
|
6
|
-
}
|
|
7
|
-
/** An object guard that avoids `typeof`; arrays count as objects, as they do for `typeof`. */
|
|
8
|
-
export function isObjectLike(value) {
|
|
9
|
-
return value !== null && value instanceof Object;
|
|
10
|
-
}
|
|
11
|
-
/** Reads a Claude Code PreCompact payload, or a Copilot one after stdin.ts mapped it to the same snake_case keys; only an empty stdin counts as a manual run. */
|
|
12
|
-
export function readClaudeCodePreCompact(stdinText, timedOut, runtime = 'claude-code') {
|
|
13
|
-
const empty = !stdinText || stdinText.trim() === '';
|
|
14
|
-
if (timedOut && empty) {
|
|
15
|
-
return { status: 'unavailable', reason: 'no PreCompact payload arrived before the stdin wait window closed' };
|
|
16
|
-
}
|
|
17
|
-
const base = { runtime, event: 'pre-compact' };
|
|
18
|
-
if (empty) {
|
|
19
|
-
return { status: 'received', input: { ...base, manual: true, sessionId: null, cwd: null, transcriptPath: null, trigger: null } };
|
|
20
|
-
}
|
|
21
|
-
let payload;
|
|
22
|
-
try {
|
|
23
|
-
payload = JSON.parse(stdinText.trim());
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
// Non-JSON stdin leaves payload undefined, which the shape check rejects like an explicit null.
|
|
27
|
-
}
|
|
28
|
-
// A bad payload is skipped, never treated as manual: discovery could pick up another session's transcript.
|
|
29
|
-
if (!isObjectLike(payload) || !('transcript_path' in payload) || !isStringValue(payload.transcript_path)) {
|
|
30
|
-
return { status: 'skipped', reason: 'malformed or incomplete PreCompact payload (missing string transcript_path)' };
|
|
31
|
-
}
|
|
32
|
-
const transcriptPath = payload.transcript_path;
|
|
33
|
-
// Path shape only: CLAUDE_CONFIG_DIR can move the transcript root, and a same-user process can already read every transcript.
|
|
34
|
-
if (!/\.jsonl$/i.test(transcriptPath)) {
|
|
35
|
-
return { status: 'skipped', reason: `payload transcript_path is not a .jsonl file: ${transcriptPath}` };
|
|
36
|
-
}
|
|
37
|
-
return {
|
|
38
|
-
status: 'received',
|
|
39
|
-
input: {
|
|
40
|
-
...base,
|
|
41
|
-
manual: false,
|
|
42
|
-
sessionId: 'session_id' in payload && isStringValue(payload.session_id) ? payload.session_id : null,
|
|
43
|
-
cwd: 'cwd' in payload && isStringValue(payload.cwd) ? payload.cwd : null,
|
|
44
|
-
transcriptPath,
|
|
45
|
-
trigger: 'trigger' in payload && isStringValue(payload.trigger) ? payload.trigger : null,
|
|
46
|
-
},
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=capture-contract.js.map
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { DatabaseSyncLike } from '../../db.js';
|
|
2
|
-
/**
|
|
3
|
-
* Thrown by ingest's afterWrite hook when a concurrent worker has already
|
|
4
|
-
* inserted github_event_log for the same idempotency_key. Roll back the
|
|
5
|
-
* SAVEPOINT so exactly one memory row exists per key.
|
|
6
|
-
*/
|
|
7
|
-
export declare class DuplicateIdempotencyError extends Error {
|
|
8
|
-
readonly idempotencyKey: string;
|
|
9
|
-
constructor(idempotencyKey: string);
|
|
10
|
-
}
|
|
11
|
-
export declare function hasSeenKey(db: DatabaseSyncLike, idempotencyKey: string): boolean;
|
|
12
|
-
export declare function markKeySeen(db: DatabaseSyncLike, args: {
|
|
13
|
-
idempotencyKey: string;
|
|
14
|
-
deliveryId: string;
|
|
15
|
-
eventName: string;
|
|
16
|
-
memoryId: string | null;
|
|
17
|
-
}): void;
|
|
18
|
-
export declare function lookupMemoryByKey(db: DatabaseSyncLike, idempotencyKey: string): string | null;
|
|
19
|
-
//# sourceMappingURL=idempotency.d.ts.map
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Thrown by ingest's afterWrite hook when a concurrent worker has already
|
|
3
|
-
* inserted github_event_log for the same idempotency_key. Roll back the
|
|
4
|
-
* SAVEPOINT so exactly one memory row exists per key.
|
|
5
|
-
*/
|
|
6
|
-
export class DuplicateIdempotencyError extends Error {
|
|
7
|
-
idempotencyKey;
|
|
8
|
-
constructor(idempotencyKey) {
|
|
9
|
-
super(`duplicate github idempotency_key: ${idempotencyKey}`);
|
|
10
|
-
this.name = 'DuplicateIdempotencyError';
|
|
11
|
-
this.idempotencyKey = idempotencyKey;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
export function hasSeenKey(db, idempotencyKey) {
|
|
15
|
-
const row = db.prepare(`SELECT 1 FROM github_event_log WHERE idempotency_key = ?`).get(idempotencyKey);
|
|
16
|
-
return !!row;
|
|
17
|
-
}
|
|
18
|
-
export function markKeySeen(db, args) {
|
|
19
|
-
db.prepare(`INSERT OR IGNORE INTO github_event_log (idempotency_key, delivery_id, event_name, ingested_at, memory_id) VALUES (?, ?, ?, ?, ?)`).run(args.idempotencyKey, args.deliveryId, args.eventName, new Date().toISOString(), args.memoryId);
|
|
20
|
-
}
|
|
21
|
-
export function lookupMemoryByKey(db, idempotencyKey) {
|
|
22
|
-
// SAFETY: the row comes from the SELECT above, which projects exactly the
|
|
23
|
-
// memory_id column of github_event_log.
|
|
24
|
-
const row = db.prepare(`SELECT memory_id FROM github_event_log WHERE idempotency_key = ?`).get(idempotencyKey);
|
|
25
|
-
return row?.memory_id ?? null;
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=idempotency.js.map
|