hippo-memory 1.69.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 +5 -2
- 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.js +3 -2
- 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 +5 -5
- package/dist/api/context-select.js +37 -45
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +48 -61
- 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 +2 -11
- package/dist/api/forget.js +13 -46
- 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 +5 -42
- package/dist/api/outcome.js +15 -80
- 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 +4 -15
- package/dist/api/promote.js +29 -106
- 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 +10 -12
- package/dist/api/remember.js +29 -45
- 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 +40 -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.js +1 -1
- 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.js +6 -4
- 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 +190 -184
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +41 -21
- 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 +4 -2
- 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 -83
- 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 -49
- 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 -91
- 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} +13 -2
- package/dist/{capture-contract.js → core/capture-contract.js} +64 -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} +17 -5
- package/dist/{memory.js → core/memory.js} +110 -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.js → core/prompt-recall.js} +1 -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 +1 -8
- package/dist/hooks/copilot.js +14 -15
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +1 -1
- package/dist/hooks/json-hooks.js +31 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +0 -4
- package/dist/hooks/shared.js +1 -5
- 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.js +7 -27
- 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 +62 -60
- 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 +12 -14
- 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} +1 -1
- 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 +39 -61
- package/dist/server.js +24 -568
- 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 +11 -5
- package/dist/store/audit-event.js +5 -4
- 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 +1 -1
- package/dist/store/handoffs.js +39 -30
- 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 +6 -4
- package/dist/store/open.js +24 -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} +3 -1
- package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
- package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
- 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 +41 -28
- package/dist/store/sessions.d.ts +13 -2
- package/dist/store/sessions.js +79 -45
- 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/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- 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} +15 -2
- package/dist/{env.js → util/env.js} +20 -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/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/entry-writes-group.d.ts +0 -9
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- /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/{prompt-recall.d.ts → core/prompt-recall.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
|
@@ -2,33 +2,17 @@
|
|
|
2
2
|
* Graph observability and visualization, READ-ONLY over the entity/relation
|
|
3
3
|
* graph.
|
|
4
4
|
*
|
|
5
|
-
* This module only READS the graph (
|
|
5
|
+
* This module only READS the graph (through the store's graph reads) and renders
|
|
6
6
|
* view-models; it issues no INSERT/UPDATE/DELETE, so `scripts/check-graph-writes.mjs`
|
|
7
7
|
* stays green. Used by the CLI (`hippo graph show` / `hippo graph view`) and the
|
|
8
8
|
* HTTP `GET /v1/graph` route, which all build the same `GraphModel`.
|
|
9
9
|
*/
|
|
10
|
-
import {
|
|
10
|
+
import { withGraphReadSnapshot } from '../store/graph-reads.js';
|
|
11
|
+
import { graphViewRows } from '../store/graph-view-rows.js';
|
|
12
|
+
const DEFAULT_LAYOUT_ITERATIONS = 300;
|
|
13
|
+
const NODE_LABEL_MAX_CHARS = 22;
|
|
11
14
|
/** Default bound for the CLI viewer / show so an unbounded set is never laid out. */
|
|
12
15
|
export const DEFAULT_VIEW_LIMIT = 500;
|
|
13
|
-
// graph/read.ts's IN-list chunk, so one statement stays far under SQLite's bound-parameter limit.
|
|
14
|
-
const MEMORY_ID_CHUNK = 400;
|
|
15
|
-
/** The items whose source memory `canRead` admits: a NULL memoryId has no scope to hide, and a missing memory fails closed. */
|
|
16
|
-
function readableOnly(db, tenantId, items, canRead) {
|
|
17
|
-
if (!canRead)
|
|
18
|
-
return items;
|
|
19
|
-
const ids = [...new Set(items.flatMap((i) => (i.memoryId === null ? [] : [i.memoryId])))];
|
|
20
|
-
const readable = new Set();
|
|
21
|
-
for (let i = 0; i < ids.length; i += MEMORY_ID_CHUNK) {
|
|
22
|
-
const slice = ids.slice(i, i + MEMORY_ID_CHUNK);
|
|
23
|
-
// SAFETY: rows' shape matches the id and scope columns named in the SELECT.
|
|
24
|
-
const rows = db.prepare(`SELECT id, scope FROM memories WHERE tenant_id = ? AND id IN (${slice.map(() => '?').join(',')})`)
|
|
25
|
-
.all(tenantId, ...slice);
|
|
26
|
-
for (const r of rows)
|
|
27
|
-
if (canRead(r.scope))
|
|
28
|
-
readable.add(r.id);
|
|
29
|
-
}
|
|
30
|
-
return items.filter((i) => i.memoryId === null || readable.has(i.memoryId));
|
|
31
|
-
}
|
|
32
16
|
/**
|
|
33
17
|
* Build the view-model from the graph (reads only). With `opts.entity`, returns a
|
|
34
18
|
* focus subgraph: every entity whose name === entity, plus their 1-hop neighbours,
|
|
@@ -37,71 +21,90 @@ function readableOnly(db, tenantId, items, canRead) {
|
|
|
37
21
|
*/
|
|
38
22
|
export function buildGraphModel(hippoRoot, tenantId, opts = {}) {
|
|
39
23
|
const limit = opts.limit ?? DEFAULT_VIEW_LIMIT;
|
|
40
|
-
//
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
// A hidden focus must not answer through its neighbours that the name exists.
|
|
56
|
-
const focus = readableOnly(db, tenantId, named, opts.canRead);
|
|
57
|
-
if (focus.length === 0)
|
|
58
|
-
return { nodes: [], edges: [], truncated: false };
|
|
59
|
-
const focusIds = focus.map((e) => e.id);
|
|
60
|
-
const hop = loadNeighborRelations(hippoRoot, tenantId, focusIds, { limit }, db);
|
|
61
|
-
const union = new Set(focusIds);
|
|
62
|
-
let neighboursCapped = false;
|
|
63
|
-
for (const r of hop) {
|
|
64
|
-
if (union.size >= limit) {
|
|
65
|
-
neighboursCapped = true; // node cap filled before all neighbours were added
|
|
66
|
-
break;
|
|
67
|
-
}
|
|
68
|
-
union.add(r.fromEntityId);
|
|
69
|
-
union.add(r.toEntityId);
|
|
70
|
-
}
|
|
71
|
-
const unionIds = [...union].slice(0, limit);
|
|
72
|
-
nodeEntities = loadEntitiesByIds(hippoRoot, tenantId, unionIds, db);
|
|
73
|
-
// Edges AMONG the union (BOTH endpoints in the set): includes
|
|
74
|
-
// neighbour-to-neighbour edges, and the LIMIT can never drop a valid in-union
|
|
75
|
-
// edge in favour of out-of-union rows.
|
|
76
|
-
relations = loadRelationsAmong(hippoRoot, tenantId, unionIds, { limit }, db);
|
|
77
|
-
truncated =
|
|
78
|
-
named.length >= limit ||
|
|
79
|
-
hop.length >= limit || // neighbour scan capped -> a 1-hop neighbour may be omitted
|
|
80
|
-
neighboursCapped || // node cap filled before all neighbours were consumed
|
|
81
|
-
union.size > unionIds.length ||
|
|
82
|
-
relations.length >= limit;
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
nodeEntities = loadEntities(hippoRoot, tenantId, { limit }, db);
|
|
86
|
-
relations = loadRelations(hippoRoot, tenantId, { limit }, db);
|
|
87
|
-
truncated = nodeEntities.length >= limit || relations.length >= limit;
|
|
88
|
-
}
|
|
89
|
-
nodeEntities = readableOnly(db, tenantId, nodeEntities, opts.canRead);
|
|
90
|
-
relations = readableOnly(db, tenantId, relations, opts.canRead);
|
|
91
|
-
const nodeIds = new Set(nodeEntities.map((e) => e.id));
|
|
92
|
-
const nodes = nodeEntities.map((e) => ({
|
|
93
|
-
id: e.id,
|
|
94
|
-
type: e.entityType,
|
|
95
|
-
name: e.name,
|
|
96
|
-
}));
|
|
97
|
-
const edges = relations
|
|
98
|
-
.filter((r) => nodeIds.has(r.fromEntityId) && nodeIds.has(r.toEntityId))
|
|
99
|
-
.map((r) => ({ from: r.fromEntityId, to: r.toEntityId, relType: r.relType }));
|
|
100
|
-
return { nodes, edges, truncated };
|
|
101
|
-
});
|
|
24
|
+
// One read snapshot, so a concurrent graph rebuild cannot make the model mix old entity ids with new relation ids.
|
|
25
|
+
return withGraphReadSnapshot(hippoRoot, (db) => graphModelOf(graphViewRows(hippoRoot, db, tenantId, { entity: opts.entity, limit, canRead: opts.canRead })));
|
|
26
|
+
}
|
|
27
|
+
/** The reply model of the rows a store read: an edge with an endpoint outside the node set is dropped. */
|
|
28
|
+
export function graphModelOf({ entities, relations, truncated }) {
|
|
29
|
+
const nodeIds = new Set(entities.map((e) => e.id));
|
|
30
|
+
const nodes = entities.map((e) => ({
|
|
31
|
+
id: e.id,
|
|
32
|
+
type: e.entityType,
|
|
33
|
+
name: e.name,
|
|
34
|
+
}));
|
|
35
|
+
const edges = relations
|
|
36
|
+
.filter((r) => nodeIds.has(r.fromEntityId) && nodeIds.has(r.toEntityId))
|
|
37
|
+
.map((r) => ({ from: r.fromEntityId, to: r.toEntityId, relType: r.relType }));
|
|
38
|
+
return { nodes, edges, truncated };
|
|
102
39
|
}
|
|
103
40
|
const LAYOUT_W = 1000;
|
|
104
41
|
const LAYOUT_H = 700;
|
|
42
|
+
function seedCircle(nodes, width, height) {
|
|
43
|
+
const pos = new Map();
|
|
44
|
+
const n = nodes.length;
|
|
45
|
+
const radius = Math.min(width, height) * 0.4;
|
|
46
|
+
nodes.forEach((node, i) => {
|
|
47
|
+
const angle = (2 * Math.PI * i) / n;
|
|
48
|
+
pos.set(node.id, {
|
|
49
|
+
x: width / 2 + radius * Math.cos(angle),
|
|
50
|
+
y: height / 2 + radius * Math.sin(angle),
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
return pos;
|
|
54
|
+
}
|
|
55
|
+
function addRepulsion(nodes, pos, disp, k) {
|
|
56
|
+
const n = nodes.length;
|
|
57
|
+
for (let i = 0; i < n; i++) {
|
|
58
|
+
const pi = pos.get(nodes[i].id);
|
|
59
|
+
for (let j = i + 1; j < n; j++) {
|
|
60
|
+
const pj = pos.get(nodes[j].id);
|
|
61
|
+
const dx = pi.x - pj.x;
|
|
62
|
+
const dy = pi.y - pj.y;
|
|
63
|
+
const dist = Math.hypot(dx, dy) || 0.01;
|
|
64
|
+
const rep = (k * k) / dist;
|
|
65
|
+
const ux = dx / dist;
|
|
66
|
+
const uy = dy / dist;
|
|
67
|
+
disp[i].x += ux * rep;
|
|
68
|
+
disp[i].y += uy * rep;
|
|
69
|
+
disp[j].x -= ux * rep;
|
|
70
|
+
disp[j].y -= uy * rep;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function addAttraction(edges, idIndex, pos, disp, k) {
|
|
75
|
+
for (const e of edges) {
|
|
76
|
+
const i = idIndex.get(e.from);
|
|
77
|
+
const j = idIndex.get(e.to);
|
|
78
|
+
if (i === undefined || j === undefined)
|
|
79
|
+
continue;
|
|
80
|
+
const pi = pos.get(e.from);
|
|
81
|
+
const pj = pos.get(e.to);
|
|
82
|
+
const dx = pi.x - pj.x;
|
|
83
|
+
const dy = pi.y - pj.y;
|
|
84
|
+
const dist = Math.hypot(dx, dy) || 0.01;
|
|
85
|
+
const att = (dist * dist) / k;
|
|
86
|
+
const ux = dx / dist;
|
|
87
|
+
const uy = dy / dist;
|
|
88
|
+
disp[i].x -= ux * att;
|
|
89
|
+
disp[i].y -= uy * att;
|
|
90
|
+
disp[j].x += ux * att;
|
|
91
|
+
disp[j].y += uy * att;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function applyDisplacement(nodes, pos, disp, temp, width, height) {
|
|
95
|
+
nodes.forEach((node, i) => {
|
|
96
|
+
const p = pos.get(node.id);
|
|
97
|
+
const dl = Math.hypot(disp[i].x, disp[i].y) || 0.01;
|
|
98
|
+
let nx = p.x + (disp[i].x / dl) * Math.min(dl, temp);
|
|
99
|
+
let ny = p.y + (disp[i].y / dl) * Math.min(dl, temp);
|
|
100
|
+
if (!Number.isFinite(nx))
|
|
101
|
+
nx = width / 2;
|
|
102
|
+
if (!Number.isFinite(ny))
|
|
103
|
+
ny = height / 2;
|
|
104
|
+
p.x = Math.max(20, Math.min(width - 20, nx));
|
|
105
|
+
p.y = Math.max(20, Math.min(height - 20, ny));
|
|
106
|
+
});
|
|
107
|
+
}
|
|
105
108
|
/**
|
|
106
109
|
* Deterministic Fruchterman-Reingold-style force layout. Seeded circular init +
|
|
107
110
|
* fixed iterations, NO `Math.random`, so the same model always yields the same
|
|
@@ -111,77 +114,22 @@ const LAYOUT_H = 700;
|
|
|
111
114
|
export function layoutGraph(model, opts = {}) {
|
|
112
115
|
const width = opts.width ?? LAYOUT_W;
|
|
113
116
|
const height = opts.height ?? LAYOUT_H;
|
|
114
|
-
const iterations = opts.iterations ??
|
|
115
|
-
const cx = width / 2;
|
|
116
|
-
const cy = height / 2;
|
|
117
|
+
const iterations = opts.iterations ?? DEFAULT_LAYOUT_ITERATIONS;
|
|
117
118
|
const nodes = model.nodes;
|
|
118
119
|
const n = nodes.length;
|
|
119
|
-
const pos = new Map();
|
|
120
120
|
if (n === 0)
|
|
121
|
-
return
|
|
122
|
-
if (n === 1)
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
const radius = Math.min(width, height) * 0.4;
|
|
127
|
-
nodes.forEach((node, i) => {
|
|
128
|
-
const angle = (2 * Math.PI * i) / n;
|
|
129
|
-
pos.set(node.id, { x: cx + radius * Math.cos(angle), y: cy + radius * Math.sin(angle) });
|
|
130
|
-
});
|
|
121
|
+
return new Map();
|
|
122
|
+
if (n === 1)
|
|
123
|
+
return new Map([[nodes[0].id, { x: width / 2, y: height / 2 }]]);
|
|
124
|
+
const pos = seedCircle(nodes, width, height);
|
|
131
125
|
const idIndex = new Map(nodes.map((node, i) => [node.id, i]));
|
|
132
126
|
const k = Math.sqrt((width * height) / n); // ideal edge length
|
|
133
127
|
for (let iter = 0; iter < iterations; iter++) {
|
|
134
128
|
const disp = nodes.map(() => ({ x: 0, y: 0 }));
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
const pi = pos.get(nodes[i].id);
|
|
138
|
-
for (let j = i + 1; j < n; j++) {
|
|
139
|
-
const pj = pos.get(nodes[j].id);
|
|
140
|
-
const dx = pi.x - pj.x;
|
|
141
|
-
const dy = pi.y - pj.y;
|
|
142
|
-
const dist = Math.hypot(dx, dy) || 0.01;
|
|
143
|
-
const rep = (k * k) / dist;
|
|
144
|
-
const ux = dx / dist;
|
|
145
|
-
const uy = dy / dist;
|
|
146
|
-
disp[i].x += ux * rep;
|
|
147
|
-
disp[i].y += uy * rep;
|
|
148
|
-
disp[j].x -= ux * rep;
|
|
149
|
-
disp[j].y -= uy * rep;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
// Attraction along edges.
|
|
153
|
-
for (const e of model.edges) {
|
|
154
|
-
const i = idIndex.get(e.from);
|
|
155
|
-
const j = idIndex.get(e.to);
|
|
156
|
-
if (i === undefined || j === undefined)
|
|
157
|
-
continue;
|
|
158
|
-
const pi = pos.get(e.from);
|
|
159
|
-
const pj = pos.get(e.to);
|
|
160
|
-
const dx = pi.x - pj.x;
|
|
161
|
-
const dy = pi.y - pj.y;
|
|
162
|
-
const dist = Math.hypot(dx, dy) || 0.01;
|
|
163
|
-
const att = (dist * dist) / k;
|
|
164
|
-
const ux = dx / dist;
|
|
165
|
-
const uy = dy / dist;
|
|
166
|
-
disp[i].x -= ux * att;
|
|
167
|
-
disp[i].y -= uy * att;
|
|
168
|
-
disp[j].x += ux * att;
|
|
169
|
-
disp[j].y += uy * att;
|
|
170
|
-
}
|
|
171
|
-
// Apply with cooling; clamp.
|
|
129
|
+
addRepulsion(nodes, pos, disp, k);
|
|
130
|
+
addAttraction(model.edges, idIndex, pos, disp, k);
|
|
172
131
|
const temp = Math.max(1, (width / 10) * (1 - iter / iterations));
|
|
173
|
-
nodes
|
|
174
|
-
const p = pos.get(node.id);
|
|
175
|
-
const dl = Math.hypot(disp[i].x, disp[i].y) || 0.01;
|
|
176
|
-
let nx = p.x + (disp[i].x / dl) * Math.min(dl, temp);
|
|
177
|
-
let ny = p.y + (disp[i].y / dl) * Math.min(dl, temp);
|
|
178
|
-
if (!Number.isFinite(nx))
|
|
179
|
-
nx = cx;
|
|
180
|
-
if (!Number.isFinite(ny))
|
|
181
|
-
ny = cy;
|
|
182
|
-
p.x = Math.max(20, Math.min(width - 20, nx));
|
|
183
|
-
p.y = Math.max(20, Math.min(height - 20, ny));
|
|
184
|
-
});
|
|
132
|
+
applyDisplacement(nodes, pos, disp, temp, width, height);
|
|
185
133
|
}
|
|
186
134
|
return pos;
|
|
187
135
|
}
|
|
@@ -241,18 +189,9 @@ const STYLE = [
|
|
|
241
189
|
".legend{position:fixed;top:10px;left:12px;color:#94a3b8;font-size:12px;line-height:1.6}",
|
|
242
190
|
".legend b{color:#e2e8f0}",
|
|
243
191
|
].join("\n");
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
* strings are escaped per sink: SVG `<text>`/`<title>` via `escapeHtml`; the model
|
|
248
|
-
* is inlined in a `<script type="application/json">` block with `<`/`>`/`&`
|
|
249
|
-
* unicode-escaped so a `</script>` inside an entity name cannot break out (the
|
|
250
|
-
* client `JSON.parse`s it back and never `innerHTML`s a user string).
|
|
251
|
-
*/
|
|
252
|
-
export function renderGraphHtml(model) {
|
|
253
|
-
const pos = layoutGraph(model);
|
|
254
|
-
const color = (t) => NODE_COLORS[t] ?? '#64748b';
|
|
255
|
-
const edgeSvg = model.edges
|
|
192
|
+
const nodeColor = (t) => NODE_COLORS[t] ?? '#64748b';
|
|
193
|
+
function renderEdgeSvg(model, pos) {
|
|
194
|
+
return model.edges
|
|
256
195
|
.map((e) => {
|
|
257
196
|
const a = pos.get(e.from);
|
|
258
197
|
const b = pos.get(e.to);
|
|
@@ -262,29 +201,50 @@ export function renderGraphHtml(model) {
|
|
|
262
201
|
`x1="${a.x.toFixed(1)}" y1="${a.y.toFixed(1)}" x2="${b.x.toFixed(1)}" y2="${b.y.toFixed(1)}"/>`);
|
|
263
202
|
})
|
|
264
203
|
.join('');
|
|
265
|
-
|
|
204
|
+
}
|
|
205
|
+
function renderNodeSvg(model, pos) {
|
|
206
|
+
return model.nodes
|
|
266
207
|
.map((node) => {
|
|
267
208
|
const p = pos.get(node.id);
|
|
268
209
|
if (!p)
|
|
269
210
|
return '';
|
|
270
|
-
const label = node.name.length >
|
|
211
|
+
const label = node.name.length > NODE_LABEL_MAX_CHARS ? node.name.slice(0, NODE_LABEL_MAX_CHARS - 1) + '…' : node.name;
|
|
271
212
|
return (`<g class="node" data-id="${node.id}" transform="translate(${p.x.toFixed(1)},${p.y.toFixed(1)})">` +
|
|
272
213
|
`<title>${escapeHtml(node.type + ': ' + node.name)}</title>` +
|
|
273
|
-
`<circle r="7" fill="${
|
|
214
|
+
`<circle r="7" fill="${nodeColor(node.type)}"/>` +
|
|
274
215
|
`<text x="10" y="4">${escapeHtml(label)}</text>` +
|
|
275
216
|
`</g>`);
|
|
276
217
|
})
|
|
277
218
|
.join('');
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
219
|
+
}
|
|
220
|
+
// Safe inline JSON for the client: unicode-escape the HTML-significant chars so
|
|
221
|
+
// the content cannot terminate the <script> block; JSON.parse restores them.
|
|
222
|
+
function inlineModelJson(model) {
|
|
223
|
+
return JSON.stringify(model)
|
|
281
224
|
.replace(/</g, '\\u003c')
|
|
282
225
|
.replace(/>/g, '\\u003e')
|
|
283
226
|
.replace(/&/g, '\\u0026');
|
|
227
|
+
}
|
|
228
|
+
function renderLegend(model) {
|
|
284
229
|
const types = [...new Set(model.nodes.map((nd) => nd.type))];
|
|
285
|
-
|
|
286
|
-
.map((t) => `<span style="color:${
|
|
230
|
+
return types
|
|
231
|
+
.map((t) => `<span style="color:${nodeColor(t)}">●</span> ${escapeHtml(t)}`)
|
|
287
232
|
.join(' ');
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Render the model as a SELF-CONTAINED, dependency-free, offline interactive HTML
|
|
236
|
+
* node-link diagram. Positions are computed server-side (deterministic). User
|
|
237
|
+
* strings are escaped per sink: SVG `<text>`/`<title>` via `escapeHtml`; the model
|
|
238
|
+
* is inlined in a `<script type="application/json">` block with `<`/`>`/`&`
|
|
239
|
+
* unicode-escaped so a `</script>` inside an entity name cannot break out (the
|
|
240
|
+
* client `JSON.parse`s it back and never `innerHTML`s a user string).
|
|
241
|
+
*/
|
|
242
|
+
export function renderGraphHtml(model) {
|
|
243
|
+
const pos = layoutGraph(model);
|
|
244
|
+
const edgeSvg = renderEdgeSvg(model, pos);
|
|
245
|
+
const nodeSvg = renderNodeSvg(model, pos);
|
|
246
|
+
const dataJson = inlineModelJson(model);
|
|
247
|
+
const legend = renderLegend(model);
|
|
288
248
|
return [
|
|
289
249
|
'<!doctype html>',
|
|
290
250
|
'<html lang="en"><head><meta charset="utf-8">',
|
|
@@ -330,4 +290,4 @@ export function renderGraphCanvas(model) {
|
|
|
330
290
|
}));
|
|
331
291
|
return JSON.stringify({ nodes, edges }, null, 2);
|
|
332
292
|
}
|
|
333
|
-
//# sourceMappingURL=
|
|
293
|
+
//# sourceMappingURL=view.js.map
|
package/dist/graph/write.d.ts
CHANGED
|
@@ -1,86 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
* Graph layer over consolidated state - the graph-on-consolidated guard.
|
|
3
|
-
*
|
|
4
|
-
* A graph of canonical `entities` (person/project/customer/system/policy/decision) and
|
|
5
|
-
* `relations` (owns/supersedes/depends-on/blocked-by/references) sits ON TOP OF
|
|
6
|
-
* consolidated memories. The hard rule: the graph NEVER indexes the raw layer - every
|
|
7
|
-
* entity and relation references a memory whose `kind IN ('distilled','superseded')`,
|
|
8
|
-
* never `kind='raw'`. Enforced at the DB level (CHECK on source_kind/kind + BEFORE
|
|
9
|
-
* INSERT and BEFORE UPDATE triggers that tie source_kind/kind to the FK'd memory's
|
|
10
|
-
* actual kind and enforce tenant-match - relations also reject cross-tenant edges), so
|
|
11
|
-
* the forbidden state is unrepresentable regardless of code path. These helpers
|
|
12
|
-
* surface the same guard as clear throws BEFORE hitting the trigger backstop.
|
|
13
|
-
*/
|
|
14
|
-
import { type GraphTxDb, type SourceObjectType, type Entity, type Relation, type GraphQueueItem, type InsertEntityOpts, type InsertRelationOpts, type UpdateEntityOpts } from './types.js';
|
|
1
|
+
import type { DatabaseSyncLike } from '../db/index.js';
|
|
15
2
|
import type { GraphOp } from './delta.js';
|
|
16
|
-
/**
|
|
17
|
-
* Insert a graph entity extracted from a consolidated memory. Throws if the source
|
|
18
|
-
* memory is missing / cross-tenant / raw (the DB trigger is the backstop).
|
|
19
|
-
*/
|
|
20
|
-
export declare function insertEntity(hippoRoot: string, tenantId: string, opts: InsertEntityOpts, txDb?: GraphTxDb): Entity;
|
|
21
|
-
/** Renames an entity or moves its memory provenance in place, keeping id and created_at; null when the row is gone.
|
|
22
|
-
* A delete plus an insert would cascade away every relation that points at it. */
|
|
23
|
-
export declare function updateEntity(hippoRoot: string, tenantId: string, id: number, opts: UpdateEntityOpts, txDb?: GraphTxDb): Entity | null;
|
|
24
|
-
/**
|
|
25
|
-
* Insert a graph relation between two entities, sourced from a consolidated memory.
|
|
26
|
-
* Both entities must exist in the same tenant; the source memory must be consolidated.
|
|
27
|
-
*/
|
|
28
|
-
export declare function insertRelation(hippoRoot: string, tenantId: string, opts: InsertRelationOpts, txDb?: GraphTxDb): Relation;
|
|
29
|
-
/**
|
|
30
|
-
* Enqueue a consolidated memory for later graph extraction. Rejects a raw / missing /
|
|
31
|
-
* cross-tenant memory (the DB trigger is the backstop).
|
|
32
|
-
*/
|
|
33
|
-
export declare function enqueueExtraction(hippoRoot: string, tenantId: string, memoryId: string): GraphQueueItem;
|
|
34
|
-
/**
|
|
35
|
-
* Mark a queue item terminal (processed | skipped). Only `status`/`processed_at`
|
|
36
|
-
* change, so the consolidated-source guard trigger (which fires on
|
|
37
|
-
* memory_id/kind/tenant_id changes) is not involved. CAS on the current status to a
|
|
38
|
-
* non-terminal 'pending'.
|
|
39
|
-
*/
|
|
40
|
-
export declare function markExtractionProcessed(hippoRoot: string, tenantId: string, id: number, status?: 'processed' | 'skipped'): GraphQueueItem;
|
|
41
3
|
export interface ApplyGraphOpsResult {
|
|
42
4
|
readonly next: number;
|
|
43
5
|
readonly skipped: number;
|
|
44
6
|
}
|
|
45
|
-
/** Applies `ops` from index `from` on the caller's open transaction and stops at the first op boundary past `opts.holdMs`.
|
|
7
|
+
/** Applies `ops` from index `opts.from` on the caller's open transaction and stops at the first op boundary past `opts.holdMs`.
|
|
46
8
|
* Returns where the next chunk starts and how many ops were skipped as stale. */
|
|
47
|
-
export declare function applyGraphOps(db:
|
|
9
|
+
export declare function applyGraphOps(db: DatabaseSyncLike, hippoRoot: string, tenantId: string, ops: readonly GraphOp[], opts: {
|
|
10
|
+
readonly from: number;
|
|
48
11
|
readonly holdMs: number;
|
|
49
12
|
readonly clock?: () => number;
|
|
50
13
|
}): ApplyGraphOpsResult;
|
|
51
|
-
/** Runs one tenant's graph writes in `fn` on `txDb` under one BEGIN IMMEDIATE, so two rebuilds serialize instead of
|
|
52
|
-
* interleaving and a throw rolls back the whole chunk. The sole sanctioned place to wrap graph writes in a transaction. */
|
|
53
|
-
export declare function runGraphRebuildTransaction<T>(hippoRoot: string, tenantId: string, fn: (txDb: GraphTxDb) => T, opts?: {
|
|
54
|
-
busyWaitMs?: number;
|
|
55
|
-
}): T;
|
|
56
|
-
/**
|
|
57
|
-
* Fail-soft producer hook: mark a tenant dirty for graph re-extraction by
|
|
58
|
-
* enqueuing its consolidated mirror memory. NEVER throws into the caller — a
|
|
59
|
-
* graph-dirty signal failing must not abort a core object write. Graph staleness is
|
|
60
|
-
* recoverable (next sleep / manual `graph extract`); a broken `hippo decide` is
|
|
61
|
-
* not. Called POST-COMMIT from the graph-source save/close mutations of
|
|
62
|
-
* decision, policy, customer_note and project_brief. A null memoryId (a
|
|
63
|
-
* forgotten mirror) is a no-op.
|
|
64
|
-
*/
|
|
65
|
-
export declare function markGraphDirty(hippoRoot: string, tenantId: string, memoryId: string | null): void;
|
|
66
|
-
/**
|
|
67
|
-
* Remove the graph rows sourced from one first-class object, by its (type, id). Used when a
|
|
68
|
-
* MIRRORLESS object is closed: it has no mirror memory, so `markGraphDirty` cannot
|
|
69
|
-
* enqueue a rebuild (the queue is memory-keyed). Closing must still drop the object's
|
|
70
|
-
* now-stale entity + edges from the graph, so we remove them directly here. Fail-soft
|
|
71
|
-
* like `markGraphDirty` (never throws into the object close caller; graph staleness is
|
|
72
|
-
* recoverable). Deleting the entity cascade-deletes any relation where it is an endpoint
|
|
73
|
-
* (relations FK entities ON DELETE CASCADE); the explicit relations DELETE also covers a
|
|
74
|
-
* relation whose OWN provenance is this object (defensive — every such edge has the object
|
|
75
|
-
* as an endpoint today, so the cascade already covers it). DELETE fires no BEFORE
|
|
76
|
-
* INSERT/UPDATE guard trigger.
|
|
77
|
-
*/
|
|
78
|
-
export declare function removeGraphEntitiesForObject(hippoRoot: string, tenantId: string, sourceObjectType: SourceObjectType, sourceObjectId: number): void;
|
|
79
|
-
/**
|
|
80
|
-
* Mark every pending queue item for a tenant with `id <= maxId` processed, in
|
|
81
|
-
* one UPDATE. Status/processed_at only, so the consolidated-source guard trigger
|
|
82
|
-
* is not involved (same as markExtractionProcessed). Returns the count marked.
|
|
83
|
-
* The `<= maxId` watermark excludes items enqueued after the drain snapshot.
|
|
84
|
-
*/
|
|
85
|
-
export declare function markPendingProcessedUpTo(hippoRoot: string, tenantId: string, maxId: number): number;
|
|
86
14
|
//# sourceMappingURL=write.d.ts.map
|