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
|
@@ -12,13 +12,18 @@
|
|
|
12
12
|
* - Uses fetch directly so no SDK dependency.
|
|
13
13
|
* - On failure (API error, bad response), the original memory is untouched.
|
|
14
14
|
*/
|
|
15
|
-
import { Layer } from '
|
|
16
|
-
import { writeEntry } from '
|
|
17
|
-
import { loadAllEntries, readEntry } from '
|
|
18
|
-
import { redactSecretsStrict } from '
|
|
19
|
-
import {
|
|
20
|
-
import { log } from '
|
|
15
|
+
import { Layer } from '../core/memory.js';
|
|
16
|
+
import { writeEntry } from '../store/entry-writes.js';
|
|
17
|
+
import { loadAllEntries, readEntry } from '../store/entry-reads.js';
|
|
18
|
+
import { redactSecretsStrict } from '../util/secret-detect.js';
|
|
19
|
+
import { sendAnthropicMessage } from '../util/anthropic-messages.js';
|
|
20
|
+
import { log } from '../util/log.js';
|
|
21
|
+
const MAX_REFINE_SOURCES = 8;
|
|
22
|
+
const REFINE_SOURCE_CHARS = 400;
|
|
21
23
|
const REFINED_TAG = 'llm-refined';
|
|
24
|
+
// Output budget for one refined memory, and the shortest reply kept as a refinement.
|
|
25
|
+
const REFINE_MAX_TOKENS = 800;
|
|
26
|
+
const REFINE_MIN_CHARS = 10;
|
|
22
27
|
const CONSOLIDATED_MARKERS = [
|
|
23
28
|
'[Consolidated from',
|
|
24
29
|
'[Consolidated pattern from',
|
|
@@ -29,11 +34,9 @@ const CONSOLIDATED_MARKERS = [
|
|
|
29
34
|
* `null` when the API call failed.
|
|
30
35
|
*/
|
|
31
36
|
export async function refineSemanticMemory(merged, sources, opts) {
|
|
32
|
-
const model = opts.model ?? 'claude-sonnet-4-6';
|
|
33
|
-
const fetchFn = opts.fetcher ?? fetch;
|
|
34
37
|
const sourceBlock = sources
|
|
35
|
-
.slice(0,
|
|
36
|
-
.map((s, i) => `[source ${i + 1}] ${redactSecretsStrict(s.content).slice(0,
|
|
38
|
+
.slice(0, MAX_REFINE_SOURCES)
|
|
39
|
+
.map((s, i) => `[source ${i + 1}] ${redactSecretsStrict(s.content).slice(0, REFINE_SOURCE_CHARS)}`)
|
|
37
40
|
.join('\n\n');
|
|
38
41
|
const prompt = `You are refining a semantic memory in an agent's memory store. The rule-based consolidator merged several related episodic memories into one, but the output is clumsy. Produce a single coherent semantic memory that captures the underlying principle.
|
|
39
42
|
|
|
@@ -49,47 +52,29 @@ ${redactSecretsStrict(merged)}
|
|
|
49
52
|
|
|
50
53
|
Source memories (up to 8 shown):
|
|
51
54
|
${sourceBlock}`;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
body: JSON.stringify({
|
|
62
|
-
model,
|
|
63
|
-
max_tokens: 800,
|
|
64
|
-
messages: [{ role: 'user', content: prompt }],
|
|
65
|
-
}),
|
|
66
|
-
}, { timeoutMs: llmTimeoutMs(), fetchFn });
|
|
67
|
-
}
|
|
68
|
-
catch (err) {
|
|
69
|
-
log.warn(`refine: request failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
if (!res.ok) {
|
|
73
|
-
log.warn(`refine: API answered HTTP ${res.status}`);
|
|
74
|
-
return null;
|
|
75
|
-
}
|
|
76
|
-
let text;
|
|
77
|
-
try {
|
|
78
|
-
// SAFETY: data is the Anthropic Messages API response body; the
|
|
79
|
-
// documented response shape is `{ content: [{ type, text, ... }] }`
|
|
80
|
-
// for a text-generating request like this one.
|
|
81
|
-
const data = await res.json();
|
|
82
|
-
text = data.content?.[0]?.text?.trim() ?? '';
|
|
83
|
-
}
|
|
84
|
-
catch (err) {
|
|
85
|
-
log.warn(`refine: unreadable response: ${err instanceof Error ? err.message : String(err)}`);
|
|
55
|
+
const reply = await sendAnthropicMessage({
|
|
56
|
+
apiKey: opts.apiKey,
|
|
57
|
+
model: opts.model,
|
|
58
|
+
maxTokens: REFINE_MAX_TOKENS,
|
|
59
|
+
prompt,
|
|
60
|
+
fetcher: opts.fetcher,
|
|
61
|
+
});
|
|
62
|
+
if (!reply.ok) {
|
|
63
|
+
log.warn(describeRefineFailure(reply.failure));
|
|
86
64
|
return null;
|
|
87
65
|
}
|
|
88
|
-
if (text.length <
|
|
66
|
+
if (reply.text.length < REFINE_MIN_CHARS) {
|
|
89
67
|
log.warn('refine: response was empty or too short to use');
|
|
90
68
|
return null;
|
|
91
69
|
}
|
|
92
|
-
return text;
|
|
70
|
+
return reply.text;
|
|
71
|
+
}
|
|
72
|
+
function describeRefineFailure(failure) {
|
|
73
|
+
switch (failure.kind) {
|
|
74
|
+
case 'request': return `refine: request failed: ${failure.message}`;
|
|
75
|
+
case 'http': return `refine: API answered HTTP ${failure.status}`;
|
|
76
|
+
case 'unreadable': return `refine: unreadable response: ${failure.message}`;
|
|
77
|
+
}
|
|
93
78
|
}
|
|
94
79
|
function isConsolidated(entry) {
|
|
95
80
|
if (entry.layer !== Layer.Semantic)
|
|
@@ -125,43 +110,46 @@ export async function refineStore(hippoRoot, opts) {
|
|
|
125
110
|
if (opts.limit !== undefined && processed >= opts.limit)
|
|
126
111
|
break;
|
|
127
112
|
processed++;
|
|
128
|
-
|
|
129
|
-
// parents aren't recorded we still refine using just the merged content.
|
|
130
|
-
const sources = [];
|
|
131
|
-
const parentIds = Array.isArray(entry.parents) ? entry.parents : [];
|
|
132
|
-
for (const pid of parentIds) {
|
|
133
|
-
// Parent lookup scoped by opts.tenantId when provided.
|
|
134
|
-
// Cross-tenant parents return null and are silently skipped — refine
|
|
135
|
-
// still produces output from the merged content alone (graceful
|
|
136
|
-
// degradation rather than refuse-to-refine).
|
|
137
|
-
const p = readEntry(hippoRoot, pid, opts.tenantId);
|
|
138
|
-
if (p)
|
|
139
|
-
sources.push(p);
|
|
140
|
-
}
|
|
141
|
-
const refined = await refineSemanticMemory(entry.content, sources, {
|
|
142
|
-
apiKey: opts.apiKey,
|
|
143
|
-
model: opts.model,
|
|
144
|
-
fetcher: opts.fetcher,
|
|
145
|
-
});
|
|
146
|
-
if (refined === null) {
|
|
147
|
-
result.failed++;
|
|
148
|
-
result.details.push({ id: entry.id, status: 'failed', reason: 'api error or empty response' });
|
|
149
|
-
continue;
|
|
150
|
-
}
|
|
151
|
-
if (opts.dryRun) {
|
|
152
|
-
result.refined++;
|
|
153
|
-
result.details.push({ id: entry.id, status: 'refined', reason: 'dry-run (no write)' });
|
|
154
|
-
continue;
|
|
155
|
-
}
|
|
156
|
-
const updated = {
|
|
157
|
-
...entry,
|
|
158
|
-
content: refined,
|
|
159
|
-
tags: entry.tags.includes(REFINED_TAG) ? entry.tags : [...entry.tags, REFINED_TAG],
|
|
160
|
-
};
|
|
161
|
-
writeEntry(hippoRoot, updated);
|
|
162
|
-
result.refined++;
|
|
163
|
-
result.details.push({ id: entry.id, status: 'refined' });
|
|
113
|
+
await refineOneEntry(hippoRoot, entry, opts, result);
|
|
164
114
|
}
|
|
165
115
|
return result;
|
|
166
116
|
}
|
|
117
|
+
async function refineOneEntry(hippoRoot, entry, opts, result) {
|
|
118
|
+
// Best-effort: walk parents_json (schema v9) to fetch originals. When
|
|
119
|
+
// parents aren't recorded we still refine using just the merged content.
|
|
120
|
+
const sources = [];
|
|
121
|
+
const parentIds = Array.isArray(entry.parents) ? entry.parents : [];
|
|
122
|
+
for (const pid of parentIds) {
|
|
123
|
+
// Parent lookup scoped by opts.tenantId when provided.
|
|
124
|
+
// Cross-tenant parents return null and are silently skipped — refine
|
|
125
|
+
// still produces output from the merged content alone (graceful
|
|
126
|
+
// degradation rather than refuse-to-refine).
|
|
127
|
+
const p = readEntry(hippoRoot, pid, opts.tenantId);
|
|
128
|
+
if (p)
|
|
129
|
+
sources.push(p);
|
|
130
|
+
}
|
|
131
|
+
const refined = await refineSemanticMemory(entry.content, sources, {
|
|
132
|
+
apiKey: opts.apiKey,
|
|
133
|
+
model: opts.model,
|
|
134
|
+
fetcher: opts.fetcher,
|
|
135
|
+
});
|
|
136
|
+
if (refined === null) {
|
|
137
|
+
result.failed++;
|
|
138
|
+
result.details.push({ id: entry.id, status: 'failed', reason: 'api error or empty response' });
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
if (opts.dryRun) {
|
|
142
|
+
result.refined++;
|
|
143
|
+
result.details.push({ id: entry.id, status: 'refined', reason: 'dry-run (no write)' });
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const updated = {
|
|
147
|
+
...entry,
|
|
148
|
+
content: refined,
|
|
149
|
+
tags: entry.tags.includes(REFINED_TAG) ? entry.tags : [...entry.tags, REFINED_TAG],
|
|
150
|
+
};
|
|
151
|
+
writeEntry(hippoRoot, updated);
|
|
152
|
+
result.refined++;
|
|
153
|
+
result.details.push({ id: entry.id, status: 'refined' });
|
|
154
|
+
}
|
|
167
155
|
//# sourceMappingURL=refine-llm.js.map
|
package/dist/cli/remember.d.ts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { type CommandContext } from './
|
|
2
|
-
/** @internal Exported so tests/remember-origin-parity.test.ts runs the real direct write; not a stable public API. */
|
|
3
|
-
export declare function cmdRemember(hippoRoot: string, text: string, flags: Record<string, string | boolean | string[]>): Promise<void>;
|
|
1
|
+
import { type CommandContext } from './flag-values.js';
|
|
4
2
|
export declare function handleRemember({ hippoRoot, args, flags }: CommandContext): Promise<void>;
|
|
5
3
|
export declare function handleSupersede({ hippoRoot, args, flags }: CommandContext): void;
|
|
6
4
|
export declare function handleTrace({ hippoRoot, args, flags }: CommandContext): void;
|
package/dist/cli/remember.js
CHANGED
|
@@ -1,28 +1,35 @@
|
|
|
1
1
|
// The write verbs: `hippo remember`, `hippo supersede` and `hippo trace`.
|
|
2
|
-
import { envAnthropicApiKey } from '../env.js';
|
|
3
|
-
import { evalNow } from '../ablation.js';
|
|
2
|
+
import { envAnthropicApiKey } from '../util/env.js';
|
|
3
|
+
import { evalNow } from '../core/ablation.js';
|
|
4
4
|
import * as fs from 'fs';
|
|
5
|
-
import { createMemory, createSuccessor, calculateStrength, calculateRewardFactor, confidenceFacets, confidenceLabel,
|
|
5
|
+
import { createMemory, createSuccessor, calculateStrength, calculateRewardFactor, confidenceFacets, confidenceLabel, Layer, } from '../core/memory.js';
|
|
6
6
|
import { isInitialized } from '../store/open.js';
|
|
7
7
|
import { writeEntry } from '../store/entry-writes.js';
|
|
8
8
|
import { readEntry, loadAllEntries } from '../store/entry-reads.js';
|
|
9
|
+
import { loadNewestEntries, schemaFitInStore } from '../store/candidates.js';
|
|
9
10
|
import { updateStats } from '../store/index-and-stats.js';
|
|
10
11
|
import { listMemoryConflicts } from '../store/conflicts.js';
|
|
11
|
-
import { RejectedValueError } from '../rejection.js';
|
|
12
|
-
import { renderTraceContent, parseSteps } from '../trace.js';
|
|
13
|
-
import { embedMemory } from '../embeddings.js';
|
|
14
|
-
import { loadConfig } from '../config.js';
|
|
15
|
-
import { extractPathTags } from '../path-context.js';
|
|
16
|
-
import { detectScope } from '../scope.js';
|
|
17
|
-
import { assertClientScope } from '../recall-scope.js';
|
|
18
|
-
import { getGlobalRoot, initGlobal } from '../shared.js';
|
|
19
|
-
import { vetSecrets } from '../secret-detect.js';
|
|
20
|
-
import * as client from '
|
|
21
|
-
import { resolveTenantId } from '../tenant.js';
|
|
22
|
-
import { computeSalience } from '../salience.js';
|
|
23
|
-
import { validateOwner, isStrictOwnerEnv } from '
|
|
12
|
+
import { RejectedValueError } from '../store/rejection.js';
|
|
13
|
+
import { renderTraceContent, parseSteps } from '../consolidate/trace.js';
|
|
14
|
+
import { embedMemory } from '../store/embeddings/index.js';
|
|
15
|
+
import { loadConfig } from '../core/config.js';
|
|
16
|
+
import { extractPathTags } from '../search/path-context.js';
|
|
17
|
+
import { detectScope } from '../sharing/scope.js';
|
|
18
|
+
import { assertClientScope } from '../store/recall-scope.js';
|
|
19
|
+
import { getGlobalRoot, initGlobal } from '../sharing/shared.js';
|
|
20
|
+
import { vetSecrets } from '../util/secret-detect.js';
|
|
21
|
+
import * as client from './client.js';
|
|
22
|
+
import { resolveTenantId } from '../store/tenant.js';
|
|
23
|
+
import { computeSalience } from '../core/salience.js';
|
|
24
|
+
import { validateOwner, isStrictOwnerEnv } from './owner-validation.js';
|
|
24
25
|
import { printError } from './output.js';
|
|
25
|
-
import { emitCliAudit, requireInit, runViaServerIfAvailable
|
|
26
|
+
import { emitCliAudit, requireInit, runViaServerIfAvailable } from './shared.js';
|
|
27
|
+
import { fmt } from './print.js';
|
|
28
|
+
import { boolFlag, flagIsTrue, stringFlag } from './flag-values.js';
|
|
29
|
+
import { DAY_MS } from '../util/time.js';
|
|
30
|
+
import { errorMessage } from '../util/log.js';
|
|
31
|
+
const PARENT_PREVIEW_CHARS = 70;
|
|
32
|
+
const DETAIL_CONTENT_CHARS = 160;
|
|
26
33
|
// Shared by the direct write and the routed request so both store the same tags.
|
|
27
34
|
function rememberTags(flags, cwd) {
|
|
28
35
|
const requested = Array.isArray(flags['tag']) ? [...flags['tag']] : [];
|
|
@@ -54,7 +61,7 @@ function rememberConfidence(flags) {
|
|
|
54
61
|
return confidence;
|
|
55
62
|
}
|
|
56
63
|
function parseKindFlag(flags) {
|
|
57
|
-
const kindFlagRaw =
|
|
64
|
+
const kindFlagRaw = stringFlag(flags, 'kind');
|
|
58
65
|
const kindFlag = kindFlagRaw === undefined ? undefined : kindFlagRaw.toLowerCase();
|
|
59
66
|
// CLI surface intentionally restricted: 'raw' is reserved for ingestion connectors
|
|
60
67
|
// that route deletions through archiveRawMemory. Existing
|
|
@@ -71,7 +78,7 @@ function parseKindFlag(flags) {
|
|
|
71
78
|
}
|
|
72
79
|
function parseRememberEnvelope(flags) {
|
|
73
80
|
const kind = parseKindFlag(flags);
|
|
74
|
-
const ownerRaw =
|
|
81
|
+
const ownerRaw = stringFlag(flags, 'owner') ?? null;
|
|
75
82
|
const ownerCheck = validateOwner(ownerRaw, { strict: isStrictOwnerEnv() });
|
|
76
83
|
if (!ownerCheck.ok) {
|
|
77
84
|
printError(ownerCheck.message);
|
|
@@ -80,14 +87,13 @@ function parseRememberEnvelope(flags) {
|
|
|
80
87
|
if (ownerCheck.message)
|
|
81
88
|
printError(ownerCheck.message);
|
|
82
89
|
const owner = ownerCheck.value ?? null;
|
|
83
|
-
const artifactRef =
|
|
84
|
-
const scope =
|
|
90
|
+
const artifactRef = stringFlag(flags, 'artifact-ref') ?? null;
|
|
91
|
+
const scope = stringFlag(flags, 'scope')?.trim() || null;
|
|
85
92
|
assertClientScope(scope);
|
|
86
93
|
return { kind, owner, artifactRef, scope };
|
|
87
94
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
const useGlobal = Boolean(flags['global']);
|
|
95
|
+
async function cmdRemember(hippoRoot, text, flags) {
|
|
96
|
+
const useGlobal = boolFlag(flags, 'global');
|
|
91
97
|
const targetRoot = useGlobal ? getGlobalRoot() : hippoRoot;
|
|
92
98
|
if (useGlobal) {
|
|
93
99
|
initGlobal();
|
|
@@ -98,8 +104,7 @@ export async function cmdRemember(hippoRoot, text, flags) {
|
|
|
98
104
|
const { requested: requestedTags, all: allTags } = rememberTags(flags, process.cwd());
|
|
99
105
|
const confidence = rememberConfidence(flags);
|
|
100
106
|
// Schema fit needs the store, which the routed request has no access to, so it stays here.
|
|
101
|
-
const
|
|
102
|
-
const schemaFit = computeSchemaFit(text, requestedTags, existing);
|
|
107
|
+
const schemaFit = schemaFitInStore(targetRoot, resolveTenantId({}), text, requestedTags);
|
|
103
108
|
const envelope = parseRememberEnvelope(flags);
|
|
104
109
|
// Stamp tenant_id from env (HIPPO_TENANT) so recall isolation can filter on this row; unauthenticated CLI gets 'default'.
|
|
105
110
|
const tenantId = resolveTenantId({});
|
|
@@ -107,7 +112,7 @@ export async function cmdRemember(hippoRoot, text, flags) {
|
|
|
107
112
|
const entry = createMemory(text, {
|
|
108
113
|
layer: Layer.Episodic,
|
|
109
114
|
tags: allTags,
|
|
110
|
-
pinned:
|
|
115
|
+
pinned: boolFlag(flags, 'pin'),
|
|
111
116
|
source: useGlobal ? 'cli-global' : 'cli',
|
|
112
117
|
confidence,
|
|
113
118
|
schema_fit: schemaFit,
|
|
@@ -118,7 +123,7 @@ export async function cmdRemember(hippoRoot, text, flags) {
|
|
|
118
123
|
tenantId,
|
|
119
124
|
baseHalfLifeDays: rememberConfig.defaultHalfLifeDays,
|
|
120
125
|
});
|
|
121
|
-
if (!passesSalienceGate(entry, text,
|
|
126
|
+
if (!passesSalienceGate(entry, text, targetRoot, rememberConfig, flags))
|
|
122
127
|
return;
|
|
123
128
|
writeEntry(targetRoot, entry);
|
|
124
129
|
updateStats(targetRoot, { remembered: 1 });
|
|
@@ -127,10 +132,15 @@ export async function cmdRemember(hippoRoot, text, flags) {
|
|
|
127
132
|
await extractRememberFacts(targetRoot, entry, flags);
|
|
128
133
|
}
|
|
129
134
|
/** False when the gate skips the write; a start_weak verdict weakens `entry` in place. */
|
|
130
|
-
function passesSalienceGate(entry, text,
|
|
131
|
-
if (!rememberConfig.salience.enabled ||
|
|
135
|
+
function passesSalienceGate(entry, text, targetRoot, rememberConfig, flags) {
|
|
136
|
+
if (!rememberConfig.salience.enabled || boolFlag(flags, 'pin') || boolFlag(flags, 'force'))
|
|
132
137
|
return true;
|
|
133
|
-
|
|
138
|
+
// computeSalience compares against the last `recentWindow` rows only; below 1 its slice takes every row, so that case still loads them all.
|
|
139
|
+
const window = Math.trunc(rememberConfig.salience.recentWindow);
|
|
140
|
+
const recent = Number.isSafeInteger(window) && window >= 1
|
|
141
|
+
? loadNewestEntries(targetRoot, entry.tenantId, window)
|
|
142
|
+
: loadAllEntries(targetRoot, entry.tenantId);
|
|
143
|
+
const salienceResult = computeSalience(text, entry.tags, recent, {
|
|
134
144
|
recentWindow: rememberConfig.salience.recentWindow,
|
|
135
145
|
overlapThreshold: rememberConfig.salience.overlapThreshold,
|
|
136
146
|
minContentLength: rememberConfig.salience.minContentLength,
|
|
@@ -164,7 +174,7 @@ async function extractRememberFacts(targetRoot, entry, flags) {
|
|
|
164
174
|
const apiKey = envAnthropicApiKey() ?? '';
|
|
165
175
|
if (shouldExtract && apiKey) {
|
|
166
176
|
try {
|
|
167
|
-
const { extractFacts, storeExtractedFacts } = await import('../extract.js');
|
|
177
|
+
const { extractFacts, storeExtractedFacts } = await import('../learn/extract.js');
|
|
168
178
|
const facts = await extractFacts(entry.content, {
|
|
169
179
|
apiKey,
|
|
170
180
|
model: config.extraction.model,
|
|
@@ -177,13 +187,33 @@ async function extractRememberFacts(targetRoot, entry, flags) {
|
|
|
177
187
|
}
|
|
178
188
|
catch (err) {
|
|
179
189
|
// Extraction is best-effort: report it, never block remember.
|
|
180
|
-
printError(` (extraction failed: ${
|
|
190
|
+
printError(` (extraction failed: ${errorMessage(err)})`);
|
|
181
191
|
}
|
|
182
192
|
}
|
|
183
193
|
else if (shouldExtract && !apiKey) {
|
|
184
194
|
printError(' (extraction skipped: ANTHROPIC_API_KEY not set)');
|
|
185
195
|
}
|
|
186
196
|
}
|
|
197
|
+
function supersedeTags(flags) {
|
|
198
|
+
const rawTags = flags['tag'];
|
|
199
|
+
return Array.isArray(rawTags)
|
|
200
|
+
? rawTags.map((t) => String(t))
|
|
201
|
+
: typeof rawTags === 'string'
|
|
202
|
+
? rawTags.split(',').map((t) => t.trim()).filter(Boolean)
|
|
203
|
+
: undefined;
|
|
204
|
+
}
|
|
205
|
+
function writeSuccessor(hippoRoot, newEntry) {
|
|
206
|
+
try {
|
|
207
|
+
writeEntry(hippoRoot, newEntry);
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
if (err instanceof RejectedValueError) {
|
|
211
|
+
printError(`Error: ${err.message}`);
|
|
212
|
+
process.exit(1);
|
|
213
|
+
}
|
|
214
|
+
throw err;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
187
217
|
function cmdSupersede(hippoRoot, oldId, newContent, flags) {
|
|
188
218
|
requireInit(hippoRoot);
|
|
189
219
|
const old = readEntry(hippoRoot, oldId, resolveTenantId({}));
|
|
@@ -195,14 +225,9 @@ function cmdSupersede(hippoRoot, oldId, newContent, flags) {
|
|
|
195
225
|
printError(`Error: memory ${oldId} is already superseded by ${old.superseded_by}. Supersede that one instead.`);
|
|
196
226
|
process.exit(1);
|
|
197
227
|
}
|
|
198
|
-
const layer =
|
|
199
|
-
const
|
|
200
|
-
const
|
|
201
|
-
? rawTags.map((t) => String(t))
|
|
202
|
-
: typeof rawTags === 'string'
|
|
203
|
-
? rawTags.split(',').map((t) => t.trim()).filter(Boolean)
|
|
204
|
-
: undefined;
|
|
205
|
-
const pinned = flags['pin'] === true || old.pinned;
|
|
228
|
+
const layer = stringFlag(flags, 'layer');
|
|
229
|
+
const tags = supersedeTags(flags);
|
|
230
|
+
const pinned = flagIsTrue(flags, 'pin') || old.pinned;
|
|
206
231
|
const newEntry = createSuccessor(old, newContent, {
|
|
207
232
|
tenantId: old.tenantId,
|
|
208
233
|
baseHalfLifeDays: loadConfig(hippoRoot).defaultHalfLifeDays,
|
|
@@ -212,21 +237,29 @@ function cmdSupersede(hippoRoot, oldId, newContent, flags) {
|
|
|
212
237
|
});
|
|
213
238
|
// Write the SUCCESSOR first: a rejection-guard refusal then mutates nothing, and an old-row failure leaves an
|
|
214
239
|
// orphan successor rather than a dangling pointer. Unlike api.supersede this path is two non-atomic writes.
|
|
215
|
-
|
|
216
|
-
writeEntry(hippoRoot, newEntry);
|
|
217
|
-
}
|
|
218
|
-
catch (err) {
|
|
219
|
-
if (err instanceof RejectedValueError) {
|
|
220
|
-
printError(`Error: ${err.message}`);
|
|
221
|
-
process.exit(1);
|
|
222
|
-
}
|
|
223
|
-
throw err;
|
|
224
|
-
}
|
|
240
|
+
writeSuccessor(hippoRoot, newEntry);
|
|
225
241
|
old.superseded_by = newEntry.id;
|
|
226
242
|
writeEntry(hippoRoot, old);
|
|
227
243
|
emitCliAudit(hippoRoot, 'supersede', oldId, { newId: newEntry.id });
|
|
228
244
|
console.log(`Superseded ${oldId} → ${newEntry.id}`);
|
|
229
245
|
}
|
|
246
|
+
function parseStepsOrExit(stepsJson) {
|
|
247
|
+
try {
|
|
248
|
+
return parseSteps(stepsJson);
|
|
249
|
+
}
|
|
250
|
+
catch (err) {
|
|
251
|
+
printError(errorMessage(err));
|
|
252
|
+
process.exit(1);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
function traceTags(flags) {
|
|
256
|
+
const rawTags = flags['tag'];
|
|
257
|
+
return Array.isArray(rawTags)
|
|
258
|
+
? rawTags.map((t) => String(t))
|
|
259
|
+
: rawTags !== undefined
|
|
260
|
+
? [String(rawTags)]
|
|
261
|
+
: [];
|
|
262
|
+
}
|
|
230
263
|
function cmdTraceRecord(hippoRoot, flags) {
|
|
231
264
|
requireInit(hippoRoot);
|
|
232
265
|
const task = String(flags['task'] ?? '').trim();
|
|
@@ -241,21 +274,9 @@ function cmdTraceRecord(hippoRoot, flags) {
|
|
|
241
274
|
printError(`Invalid outcome: "${outcome}". Must be one of: ${validOutcomes.join(', ')}.`);
|
|
242
275
|
process.exit(1);
|
|
243
276
|
}
|
|
244
|
-
|
|
245
|
-
try {
|
|
246
|
-
steps = parseSteps(stepsJson);
|
|
247
|
-
}
|
|
248
|
-
catch (err) {
|
|
249
|
-
printError(String(err instanceof Error ? err.message : err));
|
|
250
|
-
process.exit(1);
|
|
251
|
-
}
|
|
277
|
+
const steps = parseStepsOrExit(stepsJson);
|
|
252
278
|
const sessionId = String(flags['session'] ?? '').trim() || null;
|
|
253
|
-
const
|
|
254
|
-
const tags = Array.isArray(rawTags)
|
|
255
|
-
? rawTags.map((t) => String(t))
|
|
256
|
-
: rawTags !== undefined
|
|
257
|
-
? [String(rawTags)]
|
|
258
|
-
: [];
|
|
279
|
+
const tags = traceTags(flags);
|
|
259
280
|
const content = renderTraceContent({
|
|
260
281
|
task,
|
|
261
282
|
steps,
|
|
@@ -275,7 +296,7 @@ function cmdTraceRecord(hippoRoot, flags) {
|
|
|
275
296
|
}
|
|
276
297
|
function cmdTrace(hippoRoot, id, flags) {
|
|
277
298
|
requireInit(hippoRoot);
|
|
278
|
-
const asJson =
|
|
299
|
+
const asJson = boolFlag(flags, 'json');
|
|
279
300
|
const tenantId = resolveTenantId({});
|
|
280
301
|
// Look in local store first, then global.
|
|
281
302
|
let entry = readEntry(hippoRoot, id, tenantId);
|
|
@@ -307,13 +328,13 @@ function traceStats(entry) {
|
|
|
307
328
|
const rewardFactor = calculateRewardFactor(entry);
|
|
308
329
|
const effHalfLife = halfLife * rewardFactor;
|
|
309
330
|
const createdMs = new Date(entry.created).getTime();
|
|
310
|
-
const ageDays = (now.getTime() - createdMs) /
|
|
331
|
+
const ageDays = (now.getTime() - createdMs) / DAY_MS;
|
|
311
332
|
const lastMs = new Date(entry.last_retrieved).getTime();
|
|
312
|
-
const sinceLast = (now.getTime() - lastMs) /
|
|
333
|
+
const sinceLast = (now.getTime() - lastMs) / DAY_MS;
|
|
313
334
|
const facets = confidenceFacets(entry, now);
|
|
314
335
|
const conf = confidenceLabel(entry, now).text;
|
|
315
336
|
// Projected strength: same decay curve, just push `now` out.
|
|
316
|
-
const projectedAt = (days) => calculateStrength(entry, new Date(now.getTime() + days *
|
|
337
|
+
const projectedAt = (days) => calculateStrength(entry, new Date(now.getTime() + days * DAY_MS));
|
|
317
338
|
return { strength, halfLife, rewardFactor, effHalfLife, ageDays, sinceLast, facets, conf, projectedAt };
|
|
318
339
|
}
|
|
319
340
|
function traceLineage(hippoRoot, globalRoot, entry, id, tenantId) {
|
|
@@ -321,7 +342,7 @@ function traceLineage(hippoRoot, globalRoot, entry, id, tenantId) {
|
|
|
321
342
|
const parents = Array.isArray(entry.parents) ? entry.parents : [];
|
|
322
343
|
const parentPreviews = parents.map((pid) => {
|
|
323
344
|
const p = readEntry(hippoRoot, pid, tenantId) ?? (isInitialized(globalRoot) ? readEntry(globalRoot, pid, tenantId) : null);
|
|
324
|
-
return { id: pid, content: p ? p.content.replace(/\s+/g, ' ').slice(0,
|
|
345
|
+
return { id: pid, content: p ? p.content.replace(/\s+/g, ' ').slice(0, PARENT_PREVIEW_CHARS) : '(not found)' };
|
|
325
346
|
});
|
|
326
347
|
// Open conflicts involving this memory.
|
|
327
348
|
const allConflicts = [
|
|
@@ -365,7 +386,7 @@ function printTraceText(t) {
|
|
|
365
386
|
const { parentPreviews, myConflicts } = t;
|
|
366
387
|
console.log(`Memory: ${entry.id} [${sourceLabel}]`);
|
|
367
388
|
console.log('='.repeat(50));
|
|
368
|
-
console.log(`Content: ${entry.content.replace(/\s+/g, ' ').slice(0,
|
|
389
|
+
console.log(`Content: ${entry.content.replace(/\s+/g, ' ').slice(0, DETAIL_CONTENT_CHARS)}${entry.content.length > DETAIL_CONTENT_CHARS ? '...' : ''}`);
|
|
369
390
|
console.log(`Layer: ${entry.layer.padEnd(10)} Confidence: ${conf.padEnd(14)} Pinned: ${entry.pinned ? 'yes' : 'no'}${entry.starred ? ' Starred: yes' : ''}`);
|
|
370
391
|
console.log(`Tags: ${entry.tags.join(', ') || '(none)'}`);
|
|
371
392
|
console.log(`Created: ${entry.created} (${fmt(ageDays, 1)} days ago)`);
|
|
@@ -418,40 +439,40 @@ export async function handleRemember({ hippoRoot, args, flags }) {
|
|
|
418
439
|
const richFlag = flags['pin'] || flags['global'] || flags['extract'] || flags['force'] ||
|
|
419
440
|
flags['observed'] || flags['inferred'] || flags['verified'] ||
|
|
420
441
|
flags['layer'] !== undefined;
|
|
421
|
-
if (!richFlag)
|
|
422
|
-
|
|
423
|
-
const rememberKindAllowed = ['distilled', 'superseded'];
|
|
424
|
-
if (rememberKindRaw === undefined || rememberKindAllowed.includes(rememberKindRaw)) {
|
|
425
|
-
const tags = rememberTags(flags, process.cwd()).all;
|
|
426
|
-
// Validate --owner on the thin-client path too, so validation is the same whether or not a server is up.
|
|
427
|
-
const thinOwnerRaw = typeof flags['owner'] === 'string' ? flags['owner'] : undefined;
|
|
428
|
-
const thinOwnerCheck = validateOwner(thinOwnerRaw, { strict: isStrictOwnerEnv() });
|
|
429
|
-
if (!thinOwnerCheck.ok) {
|
|
430
|
-
printError(thinOwnerCheck.message);
|
|
431
|
-
process.exit(1);
|
|
432
|
-
}
|
|
433
|
-
if (thinOwnerCheck.message)
|
|
434
|
-
printError(thinOwnerCheck.message);
|
|
435
|
-
const remembered = await runViaServerIfAvailable(hippoRoot, async (info, apiKey) => {
|
|
436
|
-
const result = await client.remember(info.url, apiKey, {
|
|
437
|
-
content: text,
|
|
438
|
-
kind: rememberKindRaw,
|
|
439
|
-
scope: typeof flags['scope'] === 'string' ? flags['scope'] : undefined,
|
|
440
|
-
owner: thinOwnerCheck.value,
|
|
441
|
-
artifactRef: typeof flags['artifact-ref'] === 'string' ? flags['artifact-ref'] : undefined,
|
|
442
|
-
tags,
|
|
443
|
-
});
|
|
444
|
-
console.log(`Remembered [${result.id}] (via ${info.url})`);
|
|
445
|
-
console.log(` Kind: ${result.kind} | Tenant: ${result.tenantId}`);
|
|
446
|
-
for (const w of result.warnings ?? [])
|
|
447
|
-
printError(`Warning: ${w}`);
|
|
448
|
-
});
|
|
449
|
-
if (remembered)
|
|
450
|
-
return;
|
|
451
|
-
}
|
|
452
|
-
}
|
|
442
|
+
if (!richFlag && await rememberViaThinClient(hippoRoot, text, flags))
|
|
443
|
+
return;
|
|
453
444
|
await cmdRemember(hippoRoot, text, flags);
|
|
454
445
|
}
|
|
446
|
+
async function rememberViaThinClient(hippoRoot, text, flags) {
|
|
447
|
+
const rememberKindRaw = stringFlag(flags, 'kind')?.toLowerCase();
|
|
448
|
+
const rememberKindAllowed = ['distilled', 'superseded'];
|
|
449
|
+
if (rememberKindRaw !== undefined && !rememberKindAllowed.includes(rememberKindRaw))
|
|
450
|
+
return false;
|
|
451
|
+
const tags = rememberTags(flags, process.cwd()).all;
|
|
452
|
+
// Validate --owner on the thin-client path too, so validation is the same whether or not a server is up.
|
|
453
|
+
const thinOwnerRaw = stringFlag(flags, 'owner');
|
|
454
|
+
const thinOwnerCheck = validateOwner(thinOwnerRaw, { strict: isStrictOwnerEnv() });
|
|
455
|
+
if (!thinOwnerCheck.ok) {
|
|
456
|
+
printError(thinOwnerCheck.message);
|
|
457
|
+
process.exit(1);
|
|
458
|
+
}
|
|
459
|
+
if (thinOwnerCheck.message)
|
|
460
|
+
printError(thinOwnerCheck.message);
|
|
461
|
+
return runViaServerIfAvailable(hippoRoot, async (info, apiKey) => {
|
|
462
|
+
const result = await client.remember(info.url, apiKey, {
|
|
463
|
+
content: text,
|
|
464
|
+
kind: rememberKindRaw,
|
|
465
|
+
scope: stringFlag(flags, 'scope'),
|
|
466
|
+
owner: thinOwnerCheck.value,
|
|
467
|
+
artifactRef: stringFlag(flags, 'artifact-ref'),
|
|
468
|
+
tags,
|
|
469
|
+
});
|
|
470
|
+
console.log(`Remembered [${result.id}] (via ${info.url})`);
|
|
471
|
+
console.log(` Kind: ${result.kind} | Tenant: ${result.tenantId}`);
|
|
472
|
+
for (const w of result.warnings ?? [])
|
|
473
|
+
printError(`Warning: ${w}`);
|
|
474
|
+
});
|
|
475
|
+
}
|
|
455
476
|
export function handleSupersede({ hippoRoot, args, flags }) {
|
|
456
477
|
const oldId = args[0];
|
|
457
478
|
const newContent = args.slice(1).join(' ').trim();
|
|
@@ -15,7 +15,7 @@ export interface SchedulerFsDeps {
|
|
|
15
15
|
existsSync: typeof fs.existsSync;
|
|
16
16
|
readFileSync: typeof fs.readFileSync;
|
|
17
17
|
mkdirSync: typeof fs.mkdirSync;
|
|
18
|
-
|
|
18
|
+
writeFile: (file: string, text: string) => void;
|
|
19
19
|
renameSync: typeof fs.renameSync;
|
|
20
20
|
}
|
|
21
21
|
/** Test-only override. Not part of this module's public API surface. */
|
|
@@ -28,6 +28,8 @@ export declare function listRegisteredWorkspaces(globalRoot: string): string[];
|
|
|
28
28
|
export declare function buildDailyRunnerCommand(projectDir: string, platform?: NodeJS.Platform): string;
|
|
29
29
|
/** What the Windows task runs. A plain `cmd /c` task opens a visible console every morning. */
|
|
30
30
|
export declare function buildWindowsTaskRun(cmd: string): string;
|
|
31
|
+
/** `text` for the inside of one double-quoted Windows argument: a backslash run before a quote or the end doubles, so no quote ends the argument early. */
|
|
32
|
+
export declare function quoteInsideWindowsArg(text: string): string;
|
|
31
33
|
/** Argv for `schtasks`, passed without a shell: through cmd.exe the `&&` in /tr split the command. */
|
|
32
34
|
export declare function buildSchtasksCreateArgs(taskName: string, cmd: string): string[];
|
|
33
35
|
export declare function runDailyMaintenance(workspaces: readonly string[], runCommand: (cwd: string, args: string[]) => void): void;
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
-
import { log } from '
|
|
3
|
+
import { errorMessage, log } from '../util/log.js';
|
|
4
|
+
import { writeFileAtomic } from '../util/atomic-write.js';
|
|
4
5
|
export const DAILY_TASK_NAME = 'hippo-daily-runner';
|
|
5
6
|
let fsDeps = {
|
|
6
7
|
existsSync: fs.existsSync,
|
|
7
8
|
readFileSync: fs.readFileSync,
|
|
8
9
|
mkdirSync: fs.mkdirSync,
|
|
9
|
-
|
|
10
|
+
// One rename, so a crash mid-save cannot leave a truncated registry that reads as corrupt.
|
|
11
|
+
writeFile: writeFileAtomic,
|
|
10
12
|
renameSync: fs.renameSync,
|
|
11
13
|
};
|
|
12
14
|
/** Test-only override. Not part of this module's public API surface. */
|
|
@@ -34,7 +36,7 @@ export function loadWorkspaceRegistry(globalRoot) {
|
|
|
34
36
|
text = fsDeps.readFileSync(registryPath, 'utf8');
|
|
35
37
|
}
|
|
36
38
|
catch (err) {
|
|
37
|
-
log.warn(`workspace registry ${registryPath} could not be read (${
|
|
39
|
+
log.warn(`workspace registry ${registryPath} could not be read (${errorMessage(err)}); starting with no workspaces`);
|
|
38
40
|
return defaultRegistry();
|
|
39
41
|
}
|
|
40
42
|
try {
|
|
@@ -54,22 +56,22 @@ export function loadWorkspaceRegistry(globalRoot) {
|
|
|
54
56
|
}
|
|
55
57
|
}
|
|
56
58
|
function setAsideCorruptRegistry(registryPath, err) {
|
|
57
|
-
const reason =
|
|
59
|
+
const reason = errorMessage(err);
|
|
58
60
|
const aside = `${registryPath}.corrupt-${new Date().toISOString().replace(/[:.]/g, '-')}`;
|
|
59
61
|
try {
|
|
60
62
|
fsDeps.renameSync(registryPath, aside);
|
|
61
63
|
log.warn(`workspace registry ${registryPath} is corrupt (${reason}); moved it to ${aside} and starting with no workspaces`);
|
|
62
64
|
}
|
|
63
65
|
catch (renameErr) {
|
|
64
|
-
log.warn(`workspace registry ${registryPath} is corrupt (${reason}) and could not be moved aside (${
|
|
66
|
+
log.warn(`workspace registry ${registryPath} is corrupt (${reason}) and could not be moved aside (${errorMessage(renameErr)}); starting with no workspaces`);
|
|
65
67
|
}
|
|
66
68
|
}
|
|
67
69
|
export function saveWorkspaceRegistry(globalRoot, registry) {
|
|
68
70
|
fsDeps.mkdirSync(globalRoot, { recursive: true, mode: 0o700 });
|
|
69
|
-
fsDeps.
|
|
71
|
+
fsDeps.writeFile(workspaceRegistryPath(globalRoot), JSON.stringify({
|
|
70
72
|
version: 1,
|
|
71
73
|
workspaces: [...new Set(registry.workspaces.map(normalizeWorkspace))].sort(),
|
|
72
|
-
}, null, 2) + '\n'
|
|
74
|
+
}, null, 2) + '\n');
|
|
73
75
|
}
|
|
74
76
|
export function registerWorkspace(globalRoot, projectDir) {
|
|
75
77
|
const registry = loadWorkspaceRegistry(globalRoot);
|
|
@@ -92,6 +94,10 @@ export function buildDailyRunnerCommand(projectDir, platform = process.platform)
|
|
|
92
94
|
export function buildWindowsTaskRun(cmd) {
|
|
93
95
|
return `conhost.exe --headless cmd /c ${cmd}`;
|
|
94
96
|
}
|
|
97
|
+
/** `text` for the inside of one double-quoted Windows argument: a backslash run before a quote or the end doubles, so no quote ends the argument early. */
|
|
98
|
+
export function quoteInsideWindowsArg(text) {
|
|
99
|
+
return text.replace(/(\\*)"/g, '$1$1\\"').replace(/\\+$/, '$&$&');
|
|
100
|
+
}
|
|
95
101
|
/** Argv for `schtasks`, passed without a shell: through cmd.exe the `&&` in /tr split the command. */
|
|
96
102
|
export function buildSchtasksCreateArgs(taskName, cmd) {
|
|
97
103
|
return ['/create', '/tn', taskName, '/tr', buildWindowsTaskRun(cmd), '/sc', 'daily', '/st', '06:15', '/f'];
|
package/dist/cli/serve.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type CommandContext } from './
|
|
1
|
+
import { type CommandContext } from './flag-values.js';
|
|
2
2
|
export declare function handleDashboard({ hippoRoot, flags }: CommandContext): Promise<void>;
|
|
3
3
|
export declare function handleMcp(): Promise<void>;
|
|
4
4
|
export declare function handleServe({ hippoRoot, flags }: CommandContext): Promise<void>;
|