hippo-memory 1.70.0 → 1.72.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 +2 -2
- package/dist/agent-memories/apply.d.ts +0 -11
- package/dist/agent-memories/apply.js +6 -21
- package/dist/agent-memories/claude-code.d.ts +4 -2
- package/dist/agent-memories/claude-code.js +15 -6
- package/dist/agent-memories/codex.js +1 -1
- package/dist/agent-memories/copilot.d.ts +1 -3
- package/dist/agent-memories/copilot.js +1 -17
- package/dist/agent-memories/files.js +23 -12
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/project-folds.d.ts +10 -0
- package/dist/agent-memories/project-folds.js +34 -0
- package/dist/agent-memories/report.js +2 -1
- package/dist/agent-memories/sync.d.ts +4 -2
- package/dist/agent-memories/sync.js +18 -11
- package/dist/api/assemble.d.ts +7 -44
- package/dist/api/assemble.js +3 -23
- package/dist/api/audit.d.ts +33 -1
- package/dist/api/audit.js +48 -1
- package/dist/api/auth.d.ts +20 -26
- package/dist/api/auth.js +43 -29
- package/dist/api/auto-sleep.d.ts +5 -2
- package/dist/api/auto-sleep.js +9 -5
- package/dist/api/availability.d.ts +2 -15
- package/dist/api/availability.js +4 -18
- package/dist/api/cards.d.ts +42 -0
- package/dist/api/cards.js +52 -0
- package/dist/api/conflicts.d.ts +28 -0
- package/dist/api/conflicts.js +61 -0
- package/dist/api/context-render.js +4 -3
- package/dist/api/context-select.js +12 -15
- package/dist/api/context-types.d.ts +10 -35
- package/dist/api/context.d.ts +5 -22
- package/dist/api/context.js +38 -46
- package/dist/api/continuity.d.ts +47 -0
- package/dist/api/continuity.js +66 -0
- package/dist/{cli → api}/correction-latency.d.ts +2 -14
- package/dist/{cli → api}/correction-latency.js +2 -14
- package/dist/api/dormant.d.ts +5 -21
- package/dist/api/dormant.js +11 -28
- package/dist/api/drill-down.d.ts +7 -46
- package/dist/api/drill-down.js +6 -27
- package/dist/api/embeddings.d.ts +17 -0
- package/dist/api/embeddings.js +28 -0
- package/dist/api/error-reply.d.ts +8 -0
- package/dist/api/error-reply.js +21 -0
- package/dist/api/forget.d.ts +11 -26
- package/dist/api/forget.js +23 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +5 -9
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +6 -2
- package/dist/api/index.js +6 -2
- package/dist/api/instruction-detect.js +21 -6
- package/dist/api/learn.d.ts +4 -0
- package/dist/api/learn.js +53 -27
- package/dist/api/ledger-db.d.ts +2 -5
- package/dist/api/ledger-db.js +5 -35
- package/dist/api/memories.d.ts +23 -0
- package/dist/api/memories.js +46 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.js +5 -3
- package/dist/api/outcome.js +1 -1
- package/dist/api/pilot-arm.d.ts +1 -11
- package/dist/api/pilot-arm.js +5 -45
- package/dist/api/predictions.d.ts +11 -0
- package/dist/api/predictions.js +24 -0
- package/dist/api/projects.d.ts +21 -0
- package/dist/api/projects.js +24 -0
- package/dist/api/promote.d.ts +13 -17
- package/dist/api/promote.js +12 -20
- package/dist/api/prompt-hook.d.ts +19 -6
- package/dist/api/prompt-hook.js +54 -13
- package/dist/api/provenance-coverage.d.ts +14 -0
- package/dist/{cli → api}/provenance-coverage.js +2 -6
- package/dist/api/recall-cli.d.ts +58 -0
- package/dist/api/recall-cli.js +103 -0
- package/dist/api/recall-core.js +17 -9
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +17 -84
- package/dist/api/recall-history.js +15 -88
- package/dist/api/recall-pipeline.d.ts +2 -3
- package/dist/api/recall-pipeline.js +21 -15
- package/dist/api/recall-request.js +1 -1
- package/dist/api/recall-types.d.ts +64 -304
- package/dist/api/recall.d.ts +3 -34
- package/dist/api/recall.js +63 -89
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +20 -2
- package/dist/api/remember.js +16 -3
- package/dist/api/session-end.d.ts +22 -0
- package/dist/api/session-end.js +101 -0
- package/dist/api/sleep-run.d.ts +2 -4
- package/dist/api/sleep-run.js +28 -28
- package/dist/api/sleep.d.ts +9 -28
- package/dist/api/status.d.ts +24 -0
- package/dist/api/status.js +40 -0
- package/dist/api/store-init.d.ts +4 -0
- package/dist/api/store-init.js +9 -0
- package/dist/api/tokens.d.ts +3 -10
- package/dist/api/tokens.js +4 -11
- package/dist/api/types.d.ts +8 -29
- package/dist/api/types.js +10 -23
- package/dist/capture/caller-session.d.ts +0 -3
- package/dist/capture/caller-session.js +1 -12
- package/dist/capture/capture-error.d.ts +2 -2
- package/dist/capture/capture-error.js +23 -18
- package/dist/capture/codex-patch.js +3 -1
- package/dist/capture/command.d.ts +4 -12
- package/dist/capture/command.js +39 -114
- package/dist/capture/compact.d.ts +4 -15
- package/dist/capture/compact.js +26 -30
- package/dist/capture/compaction-items-caller.js +11 -20
- package/dist/capture/compaction-record.d.ts +7 -93
- package/dist/capture/compaction-record.js +34 -399
- package/dist/capture/compaction-spool.d.ts +5 -3
- package/dist/capture/compaction-spool.js +21 -7
- package/dist/capture/copilot-transcript.d.ts +2 -1
- package/dist/capture/copilot-transcript.js +2 -1
- package/dist/capture/extract.d.ts +5 -2
- package/dist/capture/extract.js +4 -3
- package/dist/capture/failure-caller.d.ts +1 -1
- package/dist/capture/failure-caller.js +21 -16
- package/dist/capture/failure-reading.d.ts +2 -1
- package/dist/capture/failure-reading.js +7 -9
- package/dist/capture/pre-compact-caller.js +5 -4
- package/dist/capture/session-digest.d.ts +1 -1
- package/dist/capture/session-digest.js +17 -10
- package/dist/capture/session-end-caller.js +2 -1
- package/dist/capture/session-worker.js +3 -4
- package/dist/capture/transcript.d.ts +4 -11
- package/dist/capture/transcript.js +10 -21
- package/dist/capture/working-state.d.ts +4 -2
- package/dist/capture/working-state.js +4 -2
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +1 -59
- package/dist/cli/audit-prune.js +2 -61
- package/dist/cli/audit.d.ts +1 -1
- package/dist/cli/audit.js +42 -43
- package/dist/cli/auth.d.ts +2 -2
- package/dist/cli/auth.js +61 -44
- package/dist/cli/briefs.d.ts +1 -4
- package/dist/cli/briefs.js +42 -301
- package/dist/cli/card.d.ts +2 -2
- package/dist/cli/card.js +63 -56
- package/dist/cli/client.d.ts +12 -27
- package/dist/cli/client.js +41 -44
- package/dist/cli/compact-resume-payload.js +4 -3
- package/dist/cli/context.d.ts +2 -3
- package/dist/cli/context.js +22 -18
- package/dist/cli/continuity.d.ts +6 -6
- package/dist/cli/continuity.js +81 -86
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +88 -116
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +55 -34
- package/dist/cli/decisions.d.ts +2 -4
- package/dist/cli/decisions.js +18 -309
- package/dist/cli/eval.d.ts +1 -1
- package/dist/cli/eval.js +27 -26
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +2 -3
- package/dist/cli/explain.js +25 -27
- package/dist/cli/flag-values.d.ts +6 -1
- package/dist/cli/flag-values.js +42 -15
- package/dist/cli/flags.d.ts +0 -288
- package/dist/cli/flags.js +3 -138
- package/dist/cli/github.d.ts +14 -0
- package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
- package/dist/cli/goals.d.ts +2 -2
- package/dist/cli/goals.js +46 -50
- package/dist/cli/graph.d.ts +3 -0
- package/dist/cli/graph.js +83 -0
- package/dist/cli/hook-runtime.d.ts +12 -32
- package/dist/cli/hook-runtime.js +21 -64
- package/dist/cli/incidents.d.ts +3 -0
- package/dist/cli/incidents.js +112 -0
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.js +33 -30
- package/dist/cli/install-steps.d.ts +2 -1
- package/dist/cli/install-steps.js +13 -14
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +4 -1
- package/dist/cli/lenient-id.d.ts +2 -0
- package/dist/cli/lenient-id.js +13 -0
- package/dist/cli/maintenance.d.ts +5 -5
- package/dist/cli/maintenance.js +37 -43
- package/dist/cli/notes.d.ts +2 -0
- package/dist/cli/notes.js +41 -0
- package/dist/cli/object-verbs.js +4 -3
- package/dist/cli/open-browser.d.ts +14 -0
- package/dist/cli/open-browser.js +26 -0
- package/dist/cli/owner-validation.d.ts +5 -28
- package/dist/cli/owner-validation.js +5 -28
- package/dist/cli/playbooks.d.ts +3 -4
- package/dist/cli/playbooks.js +131 -300
- package/dist/cli/predictions.d.ts +3 -0
- package/dist/cli/predictions.js +175 -0
- package/dist/cli/print.d.ts +2 -5
- package/dist/cli/print.js +3 -5
- package/dist/cli/projects.d.ts +2 -2
- package/dist/cli/projects.js +31 -25
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +67 -137
- package/dist/cli/refine-llm.d.ts +5 -31
- package/dist/cli/refine-llm.js +23 -50
- package/dist/cli/remember.d.ts +3 -3
- package/dist/cli/remember.js +134 -192
- package/dist/cli/scheduler.d.ts +2 -17
- package/dist/cli/scheduler.js +14 -19
- package/dist/cli/serve.js +23 -14
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +143 -214
- package/dist/cli/setup.d.ts +4 -4
- package/dist/cli/setup.js +35 -30
- package/dist/cli/shared.d.ts +7 -25
- package/dist/cli/shared.js +17 -60
- package/dist/cli/slack.d.ts +2 -2
- package/dist/cli/slack.js +19 -23
- package/dist/cli/sleep-render.js +6 -3
- package/dist/cli/sleep.d.ts +3 -2
- package/dist/cli/sleep.js +17 -49
- package/dist/cli/status.d.ts +11 -14
- package/dist/cli/status.js +74 -120
- package/dist/cli/stdin.d.ts +4 -6
- package/dist/cli/stdin.js +2 -3
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +87 -108
- package/dist/cli/usage.d.ts +0 -79
- package/dist/cli/usage.js +1 -689
- package/dist/cli/verb-row.d.ts +32 -0
- package/dist/cli/verb-row.js +6 -0
- package/dist/cli/verbs/health.d.ts +27 -0
- package/dist/cli/verbs/health.js +232 -0
- package/dist/cli/verbs/memory.d.ts +16 -0
- package/dist/cli/verbs/memory.js +244 -0
- package/dist/cli/verbs/objects.d.ts +20 -0
- package/dist/cli/verbs/objects.js +254 -0
- package/dist/cli/verbs/sessions.d.ts +31 -0
- package/dist/cli/verbs/sessions.js +312 -0
- package/dist/cli/verbs.d.ts +81 -0
- package/dist/cli/verbs.js +7 -0
- package/dist/cli/versioned-verbs.d.ts +51 -0
- package/dist/cli/versioned-verbs.js +79 -0
- package/dist/cli.d.ts +1 -654
- package/dist/cli.js +44 -510
- package/dist/connectors/dlq.d.ts +39 -3
- package/dist/connectors/dlq.js +37 -3
- package/dist/connectors/github/backfill.d.ts +5 -25
- package/dist/connectors/github/backfill.js +26 -52
- package/dist/connectors/github/deletion.d.ts +4 -18
- package/dist/connectors/github/deletion.js +2 -15
- package/dist/connectors/github/dlq.d.ts +8 -33
- package/dist/connectors/github/dlq.js +34 -93
- package/dist/connectors/github/ingest.d.ts +4 -12
- package/dist/connectors/github/ingest.js +5 -36
- package/dist/connectors/github/octokit-client.d.ts +4 -16
- package/dist/connectors/github/octokit-client.js +27 -24
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +2 -24
- package/dist/connectors/github/tenant-routing.js +4 -26
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +3 -15
- package/dist/connectors/github/types.js +2 -9
- package/dist/connectors/github/webhook.d.ts +3 -16
- package/dist/connectors/github/webhook.js +38 -23
- package/dist/connectors/ingest.d.ts +10 -0
- package/dist/connectors/ingest.js +28 -0
- package/dist/connectors/slack/backfill.d.ts +4 -17
- package/dist/connectors/slack/backfill.js +4 -13
- package/dist/connectors/slack/dlq.d.ts +2 -19
- package/dist/connectors/slack/dlq.js +51 -90
- package/dist/connectors/slack/ingest.d.ts +4 -9
- package/dist/connectors/slack/ingest.js +4 -30
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/tenant-routing.d.ts +2 -19
- package/dist/connectors/slack/tenant-routing.js +2 -21
- package/dist/connectors/slack/transform.d.ts +2 -18
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +3 -9
- package/dist/connectors/slack/types.js +2 -4
- package/dist/connectors/slack/web-client.js +33 -27
- package/dist/connectors/slack/webhook.d.ts +3 -19
- package/dist/connectors/slack/webhook.js +6 -26
- package/dist/connectors/slack/workspaces.d.ts +4 -24
- package/dist/connectors/slack/workspaces.js +4 -24
- package/dist/consolidate/conflicts.js +7 -15
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/consolidate/dag.d.ts +5 -28
- package/dist/consolidate/dag.js +29 -84
- package/dist/consolidate/decay.js +7 -19
- package/dist/consolidate/dedupe.d.ts +13 -52
- package/dist/consolidate/dedupe.js +18 -74
- package/dist/consolidate/flush-units.d.ts +3 -4
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +3 -26
- package/dist/consolidate/half-life-migration.js +11 -28
- package/dist/consolidate/llm-passes.js +49 -40
- package/dist/consolidate/memory-value-weights.d.ts +2 -13
- package/dist/consolidate/memory-value-weights.js +2 -13
- package/dist/consolidate/memory-value.d.ts +11 -84
- package/dist/consolidate/memory-value.js +18 -105
- package/dist/consolidate/merge.js +12 -33
- package/dist/consolidate/physics-pass.d.ts +6 -1
- package/dist/consolidate/physics-pass.js +27 -9
- package/dist/consolidate/replay.d.ts +6 -38
- package/dist/consolidate/replay.js +25 -56
- package/dist/consolidate/run.js +1 -1
- package/dist/consolidate/sleep.d.ts +1 -8
- package/dist/consolidate/sleep.js +13 -22
- package/dist/consolidate/trace.d.ts +3 -18
- package/dist/consolidate/trace.js +3 -18
- package/dist/consolidate/traces.js +9 -25
- package/dist/core/ablation.d.ts +14 -91
- package/dist/core/ablation.js +16 -91
- package/dist/core/active-scope.d.ts +7 -0
- package/dist/{sharing/scope.js → core/active-scope.js} +5 -12
- package/dist/core/ambient.d.ts +5 -8
- package/dist/core/ambient.js +40 -26
- package/dist/core/api-errors.d.ts +16 -0
- package/dist/core/api-errors.js +20 -0
- package/dist/core/capture-contract.d.ts +4 -2
- package/dist/core/capture-contract.js +4 -2
- package/dist/core/card.d.ts +4 -1
- package/dist/core/card.js +11 -1
- package/dist/core/compaction-timing.d.ts +7 -0
- package/dist/core/compaction-timing.js +9 -0
- package/dist/core/compare.d.ts +11 -67
- package/dist/core/compare.js +9 -63
- package/dist/core/config.d.ts +10 -24
- package/dist/core/config.js +20 -16
- package/dist/core/cosine.d.ts +3 -0
- package/dist/core/cosine.js +19 -0
- package/dist/core/handoff.d.ts +1 -7
- package/dist/core/handoff.js +1 -7
- package/dist/core/markdown.d.ts +6 -0
- package/dist/{store → core}/markdown.js +23 -22
- package/dist/core/memory-audit.d.ts +17 -0
- package/dist/core/memory-audit.js +54 -0
- package/dist/core/memory-quality.js +1 -1
- package/dist/core/memory.d.ts +51 -168
- package/dist/core/memory.js +76 -239
- package/dist/{consolidate → core}/merged-row.d.ts +1 -1
- package/dist/{consolidate → core}/merged-row.js +3 -2
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/core/physics-config.d.ts +1 -4
- package/dist/core/physics-config.js +3 -8
- package/dist/core/physics.d.ts +15 -61
- package/dist/core/physics.js +65 -138
- package/dist/core/prediction.d.ts +3 -0
- package/dist/core/prediction.js +6 -0
- package/dist/core/project-identity.d.ts +20 -58
- package/dist/core/project-identity.js +27 -39
- package/dist/core/project-remote.js +13 -2
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/core/recall-scope.d.ts +69 -0
- package/dist/core/recall-scope.js +138 -0
- package/dist/core/salience.d.ts +1 -7
- package/dist/core/salience.js +1 -7
- package/dist/dashboard/dashboard-actions.js +2 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
- package/dist/dashboard/dashboard-snapshot.js +11 -2
- package/dist/dashboard/dashboard-types.d.ts +2 -1
- package/dist/dashboard/dashboard.d.ts +1 -0
- package/dist/dashboard/dashboard.js +50 -4
- package/dist/db/busy.d.ts +3 -8
- package/dist/db/busy.js +37 -33
- package/dist/db/connect.js +7 -8
- package/dist/db/index.d.ts +3 -3
- package/dist/db/index.js +3 -3
- package/dist/db/migrate.js +3 -3
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v14.js +2 -3
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +2 -3
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +2 -7
- package/dist/db/migrations/v22.js +4 -17
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +2 -4
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +4 -18
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +2 -15
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +9 -20
- package/dist/db/migrations/v40.js +2 -9
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +1 -1
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v55.d.ts +3 -0
- package/dist/db/migrations/v55.js +17 -0
- package/dist/db/open.d.ts +2 -2
- package/dist/db/open.js +21 -9
- package/dist/db/physics-state.d.ts +6 -22
- package/dist/db/physics-state.js +28 -39
- package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
- package/dist/db/raw-archive-mirror-cleanup.js +2 -17
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -2
- package/dist/db/vector-store.d.ts +2 -0
- package/dist/db/vector-store.js +25 -5
- package/dist/db/wal-checkpointer.js +2 -1
- package/dist/doctor.js +85 -27
- package/dist/embeddings/local.d.ts +62 -0
- package/dist/embeddings/local.js +146 -0
- package/dist/embeddings/provider.d.ts +43 -0
- package/dist/{store/embeddings → embeddings}/provider.js +58 -83
- package/dist/embeddings/transformers.d.ts +26 -0
- package/dist/embeddings/transformers.js +89 -0
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +3 -2
- package/dist/eval/eval-stats.d.ts +15 -53
- package/dist/eval/eval-stats.js +12 -42
- package/dist/eval/eval-suite.d.ts +2 -13
- package/dist/eval/eval-suite.js +91 -45
- package/dist/eval/eval.d.ts +6 -24
- package/dist/eval/eval.js +8 -35
- package/dist/eval/judgment.d.ts +0 -3
- package/dist/eval/judgment.js +30 -15
- package/dist/extensions/openclaw-plugin/index.js +1 -1
- package/dist/graph/extract.d.ts +5 -27
- package/dist/graph/extract.js +10 -36
- package/dist/graph/recall.d.ts +7 -20
- package/dist/graph/recall.js +15 -77
- package/dist/graph/stream.d.ts +7 -39
- package/dist/graph/stream.js +11 -34
- package/dist/graph/view.d.ts +9 -35
- package/dist/graph/view.js +24 -44
- package/dist/graph/write.d.ts +1 -1
- package/dist/graph/write.js +9 -9
- package/dist/hooks/codex-session.js +3 -2
- package/dist/hooks/codex-wrapper.js +4 -3
- package/dist/hooks/copilot.js +2 -1
- package/dist/hooks/hook-blocks.d.ts +6 -2
- package/dist/hooks/hook-blocks.js +37 -124
- package/dist/hooks/json-hooks.d.ts +4 -36
- package/dist/hooks/json-hooks.js +22 -59
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +17 -81
- package/dist/hooks/shared.d.ts +6 -21
- package/dist/hooks/shared.js +31 -33
- package/dist/importers/core.d.ts +12 -37
- package/dist/importers/core.js +10 -28
- package/dist/importers/markdown-parse.d.ts +8 -22
- package/dist/importers/markdown-parse.js +8 -25
- package/dist/importers/markdown.js +3 -12
- package/dist/importers/sources.js +12 -39
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +31 -85
- package/dist/index.d.ts +8 -3
- package/dist/index.js +8 -3
- package/dist/learn/autolearn.d.ts +23 -42
- package/dist/learn/autolearn.js +45 -52
- package/dist/learn/churn-git.js +13 -4
- package/dist/learn/extract.d.ts +3 -2
- package/dist/learn/extract.js +8 -8
- package/dist/learn/forward-claim-detector.d.ts +6 -30
- package/dist/learn/forward-claim-detector.js +18 -68
- package/dist/learn/invalidation.d.ts +6 -18
- package/dist/learn/invalidation.js +18 -31
- package/dist/mcp/admin-tools.d.ts +2 -2
- package/dist/mcp/admin-tools.js +30 -53
- package/dist/mcp/format.js +3 -2
- package/dist/mcp/framing.d.ts +1 -0
- package/dist/mcp/framing.js +1 -1
- package/dist/mcp/memory-tools.js +7 -10
- package/dist/mcp/protocol.d.ts +15 -29
- package/dist/mcp/protocol.js +26 -16
- package/dist/mcp/recall-tools.js +14 -11
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +12 -27
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +5 -16
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +5 -11
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +68 -16
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +47 -22
- package/dist/objects/customer-notes.d.ts +9 -44
- package/dist/objects/customer-notes.js +7 -48
- package/dist/objects/decisions.d.ts +14 -52
- package/dist/objects/decisions.js +15 -53
- package/dist/objects/descriptor.d.ts +1 -1
- package/dist/objects/incidents.d.ts +9 -40
- package/dist/objects/incidents.js +7 -41
- package/dist/objects/lifecycle.d.ts +1 -1
- package/dist/objects/lifecycle.js +2 -1
- package/dist/objects/policies.d.ts +13 -91
- package/dist/objects/policies.js +13 -99
- package/dist/objects/processes.d.ts +9 -54
- package/dist/objects/processes.js +7 -61
- package/dist/objects/project-briefs.d.ts +13 -57
- package/dist/objects/project-briefs.js +16 -78
- package/dist/objects/skills.d.ts +9 -44
- package/dist/objects/skills.js +8 -54
- package/dist/postinstall.js +7 -20
- package/dist/predictions/planning-fallacy.d.ts +11 -34
- package/dist/rerankers/clef.js +6 -37
- package/dist/rerankers/cross-encoder.d.ts +31 -2
- package/dist/rerankers/cross-encoder.js +65 -101
- package/dist/rerankers/index.js +5 -4
- package/dist/rerankers/jev.js +11 -10
- package/dist/rerankers/llm.d.ts +2 -11
- package/dist/rerankers/llm.js +14 -14
- package/dist/rerankers/outage-warning.d.ts +5 -2
- package/dist/rerankers/outage-warning.js +7 -4
- package/dist/rerankers/remote.d.ts +1 -0
- package/dist/rerankers/remote.js +2 -0
- package/dist/rerankers/types.d.ts +2 -14
- package/dist/search/bm25-search.js +1 -1
- package/dist/search/boosts.d.ts +0 -2
- package/dist/search/boosts.js +3 -3
- package/dist/search/embed-memories.d.ts +9 -0
- package/dist/search/embed-memories.js +377 -0
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +93 -0
- package/dist/search/hybrid.d.ts +11 -2
- package/dist/search/hybrid.js +9 -4
- package/dist/search/multihop.js +2 -3
- package/dist/search/path-context.d.ts +5 -18
- package/dist/search/path-context.js +5 -18
- package/dist/search/physics-search.d.ts +6 -3
- package/dist/search/physics-search.js +29 -19
- package/dist/search/rerank.js +1 -1
- package/dist/search/rrf.d.ts +7 -35
- package/dist/search/rrf.js +5 -30
- package/dist/search/vector.d.ts +13 -4
- package/dist/search/vector.js +40 -13
- package/dist/server/auth.d.ts +11 -28
- package/dist/server/auth.js +49 -32
- package/dist/server/boot.d.ts +2 -21
- package/dist/server/boot.js +69 -161
- package/dist/server/client-ip.d.ts +3 -21
- package/dist/server/client-ip.js +8 -30
- package/dist/server/deadline.d.ts +0 -2
- package/dist/server/deadline.js +1 -7
- package/dist/server/defaults.d.ts +4 -0
- package/dist/server/defaults.js +5 -0
- package/dist/server/key-check-bounds.d.ts +2 -1
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +19 -4
- package/dist/server/mcp-http.js +24 -53
- package/dist/server/rate-limit.d.ts +5 -18
- package/dist/server/rate-limit.js +4 -13
- package/dist/server/request.d.ts +4 -8
- package/dist/server/request.js +16 -19
- package/dist/server/route-checks.d.ts +7 -0
- package/dist/server/route-checks.js +42 -0
- package/dist/server/route-table.d.ts +9 -8
- package/dist/server/route-table.js +127 -139
- package/dist/server/routes/admin.d.ts +8 -8
- package/dist/server/routes/admin.js +35 -49
- package/dist/server/routes/customer-notes.d.ts +6 -6
- package/dist/server/routes/customer-notes.js +8 -14
- package/dist/server/routes/decisions.d.ts +6 -6
- package/dist/server/routes/decisions.js +12 -21
- package/dist/server/routes/incidents.d.ts +6 -6
- package/dist/server/routes/incidents.js +14 -25
- package/dist/server/routes/memories.d.ts +9 -9
- package/dist/server/routes/memories.js +20 -63
- package/dist/server/routes/object-routes.d.ts +6 -11
- package/dist/server/routes/object-routes.js +11 -22
- package/dist/server/routes/policies.d.ts +7 -7
- package/dist/server/routes/policies.js +12 -22
- package/dist/server/routes/predictions.d.ts +6 -6
- package/dist/server/routes/predictions.js +22 -38
- package/dist/server/routes/processes.d.ts +6 -6
- package/dist/server/routes/processes.js +17 -28
- package/dist/server/routes/project-briefs.d.ts +7 -7
- package/dist/server/routes/project-briefs.js +11 -20
- package/dist/server/routes/recall.d.ts +5 -5
- package/dist/server/routes/recall.js +16 -45
- package/dist/server/routes/skills.d.ts +7 -7
- package/dist/server/routes/skills.js +10 -22
- package/dist/server/server-detect.d.ts +15 -53
- package/dist/server/server-detect.js +55 -96
- package/dist/server/sleep-child.js +26 -7
- package/dist/server/sleep-offload.d.ts +11 -5
- package/dist/server/sleep-offload.js +21 -12
- package/dist/server/types.d.ts +32 -18
- package/dist/server/validation.d.ts +3 -2
- package/dist/server/validation.js +15 -33
- package/dist/server.d.ts +7 -6
- package/dist/server.js +8 -6
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +73 -0
- package/dist/sharing/project-merge.d.ts +11 -19
- package/dist/sharing/project-merge.js +63 -125
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +40 -0
- package/dist/sharing/share.js +229 -0
- package/dist/store/ambient.js +9 -15
- package/dist/store/audit-event.d.ts +5 -13
- package/dist/store/audit-event.js +4 -12
- package/dist/store/audit.d.ts +2 -21
- package/dist/store/audit.js +8 -67
- package/dist/store/auth.d.ts +10 -8
- package/dist/store/auth.js +17 -12
- package/dist/store/candidates.d.ts +23 -5
- package/dist/store/candidates.js +119 -71
- package/dist/store/capture-write.d.ts +17 -0
- package/dist/store/capture-write.js +35 -0
- package/dist/store/card-detail.d.ts +2 -1
- package/dist/store/card-detail.js +2 -1
- package/dist/store/cards.d.ts +14 -9
- package/dist/store/cards.js +72 -126
- package/dist/store/compaction-caller.d.ts +18 -0
- package/dist/store/compaction-caller.js +29 -0
- package/dist/store/compactions-record.d.ts +115 -0
- package/dist/store/compactions-record.js +417 -0
- package/dist/store/compactions.js +6 -4
- package/dist/store/conflicts.d.ts +4 -21
- package/dist/store/conflicts.js +76 -152
- package/dist/store/connectors/dlq.d.ts +10 -0
- package/dist/store/connectors/dlq.js +32 -0
- package/dist/store/connectors/github.d.ts +14 -16
- package/dist/store/connectors/github.js +34 -57
- package/dist/store/connectors/slack.d.ts +2 -11
- package/dist/store/connectors/slack.js +18 -47
- package/dist/store/dashboard-reads.js +11 -14
- package/dist/store/delete-and-batch.d.ts +17 -31
- package/dist/store/delete-and-batch.js +84 -67
- package/dist/store/delivery-recorder.d.ts +15 -4
- package/dist/store/delivery-recorder.js +34 -17
- package/dist/store/descendant-page.js +6 -3
- package/dist/store/diagnostics.js +6 -13
- package/dist/store/dormant.d.ts +8 -30
- package/dist/store/dormant.js +18 -57
- package/dist/store/embeddings/index.d.ts +11 -90
- package/dist/store/embeddings/index.js +18 -523
- package/dist/store/entry-reads.d.ts +34 -61
- package/dist/store/entry-reads.js +111 -136
- package/dist/store/entry-row.d.ts +6 -35
- package/dist/store/entry-row.js +9 -37
- package/dist/store/entry-writes.d.ts +12 -18
- package/dist/store/entry-writes.js +46 -44
- package/dist/store/failure-log-at.d.ts +8 -0
- package/dist/store/failure-log-at.js +16 -0
- package/dist/store/failure-log.d.ts +2 -2
- package/dist/store/failure-log.js +5 -3
- package/dist/{trust → store}/gated-write.d.ts +3 -1
- package/dist/{trust → store}/gated-write.js +7 -5
- package/dist/store/goals.d.ts +3 -40
- package/dist/store/goals.js +41 -178
- package/dist/store/graph-queue.d.ts +6 -22
- package/dist/store/graph-queue.js +14 -45
- package/dist/store/graph-reads.d.ts +11 -35
- package/dist/store/graph-reads.js +24 -60
- package/dist/store/graph-rows.d.ts +3 -6
- package/dist/store/graph-rows.js +6 -9
- package/dist/store/graph-view-rows.d.ts +2 -1
- package/dist/store/graph-view-rows.js +2 -1
- package/dist/store/graph-writes.d.ts +10 -35
- package/dist/store/graph-writes.js +59 -106
- package/dist/store/half-life.d.ts +2 -1
- package/dist/store/half-life.js +14 -16
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +22 -40
- package/dist/store/index-and-stats.d.ts +6 -19
- package/dist/store/index-and-stats.js +36 -84
- package/dist/store/key-writes.js +1 -1
- package/dist/store/ledger-turn.d.ts +9 -0
- package/dist/store/ledger-turn.js +38 -0
- package/dist/store/mirrors.d.ts +2 -6
- package/dist/store/mirrors.js +24 -29
- package/dist/store/open.d.ts +0 -4
- package/dist/store/open.js +42 -62
- package/dist/store/pilot-arm.d.ts +12 -0
- package/dist/store/pilot-arm.js +42 -0
- package/dist/store/planning-fallacy-evidence.d.ts +2 -30
- package/dist/store/planning-fallacy-evidence.js +8 -37
- package/dist/store/port.d.ts +91 -82
- package/dist/store/port.js +8 -0
- package/dist/store/predictions.d.ts +12 -53
- package/dist/store/predictions.js +41 -125
- package/dist/store/project-tags.d.ts +62 -0
- package/dist/store/project-tags.js +67 -0
- package/dist/{cli → store}/quality-repair.js +15 -31
- package/dist/store/quarantine.js +2 -1
- package/dist/store/raw-archive.d.ts +4 -16
- package/dist/store/raw-archive.js +14 -29
- package/dist/store/recall-trace.d.ts +12 -77
- package/dist/store/recall-trace.js +37 -97
- package/dist/store/rejected-values.js +9 -20
- package/dist/store/rejection-probe.d.ts +4 -0
- package/dist/store/rejection-probe.js +19 -0
- package/dist/store/rejection.d.ts +10 -73
- package/dist/store/rejection.js +12 -84
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +9 -19
- package/dist/store/rows.js +36 -34
- package/dist/store/rule-sql.d.ts +14 -0
- package/dist/store/rule-sql.js +56 -0
- package/dist/store/search-rows.d.ts +7 -38
- package/dist/store/search-rows.js +23 -54
- package/dist/store/sessions.d.ts +10 -47
- package/dist/store/sessions.js +21 -75
- package/dist/store/set-aside.d.ts +14 -0
- package/dist/store/set-aside.js +23 -0
- package/dist/store/sqlite/busy.d.ts +3 -0
- package/dist/store/sqlite/busy.js +8 -0
- package/dist/store/sqlite/connector-events-group.js +5 -8
- package/dist/store/sqlite/connector-writes-group.js +3 -3
- package/dist/store/sqlite/entry-writes-group.js +4 -4
- package/dist/store/sqlite/error-codec.js +8 -5
- package/dist/store/sqlite/executor.d.ts +2 -1
- package/dist/store/sqlite/executor.js +12 -5
- package/dist/store/sqlite/graph-reads-group.js +1 -1
- package/dist/store/sqlite/held-connection.d.ts +9 -0
- package/dist/store/sqlite/held-connection.js +41 -0
- package/dist/store/sqlite/local.d.ts +3 -3
- package/dist/store/sqlite/local.js +1 -0
- package/dist/store/sqlite/object-rows.d.ts +1 -1
- package/dist/store/sqlite/object-rows.js +6 -3
- package/dist/store/sqlite/objects-group.d.ts +1 -1
- package/dist/store/sqlite/objects-group.js +5 -3
- package/dist/store/sqlite/quarantine-group.js +2 -2
- package/dist/store/sqlite/store.d.ts +1 -4
- package/dist/store/sqlite/store.js +16 -15
- package/dist/store/sqlite/vector-reads-group.js +2 -2
- package/dist/store/sqlite/worker-jobs.js +1 -1
- package/dist/store/sqlite/worker-ops.d.ts +13 -2
- package/dist/store/sqlite/worker-ops.js +13 -2
- package/dist/store/sqlite/worker-store.js +5 -2
- package/dist/store/summaries.d.ts +11 -63
- package/dist/store/summaries.js +37 -148
- package/dist/store/summary-dirty.js +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +2 -16
- package/dist/store/tenant.js +4 -19
- package/dist/store/token-ledger.d.ts +13 -50
- package/dist/store/token-ledger.js +19 -85
- package/dist/store/usage-reports.js +5 -13
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +171 -0
- package/dist/store/working-memory.d.ts +6 -25
- package/dist/store/working-memory.js +18 -52
- package/dist/support-bundle.js +9 -8
- package/dist/trust/reject-flow.js +3 -5
- package/dist/util/agent-homes.d.ts +15 -0
- package/dist/util/agent-homes.js +34 -0
- package/dist/util/anthropic-messages.d.ts +3 -0
- package/dist/util/anthropic-messages.js +35 -6
- package/dist/util/atomic-write.d.ts +2 -1
- package/dist/util/atomic-write.js +35 -4
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/chunked.d.ts +3 -0
- package/dist/util/chunked.js +10 -0
- package/dist/util/crash-handlers.d.ts +8 -1
- package/dist/util/crash-handlers.js +52 -10
- package/dist/util/ellipsize.d.ts +3 -0
- package/dist/util/ellipsize.js +5 -0
- package/dist/util/env.d.ts +14 -6
- package/dist/util/env.js +15 -7
- package/dist/util/format.d.ts +3 -0
- package/dist/util/format.js +6 -0
- package/dist/util/home-path.d.ts +2 -1
- package/dist/util/home-path.js +4 -2
- package/dist/util/hook-payload.d.ts +8 -0
- package/dist/util/hook-payload.js +37 -0
- package/dist/util/http-retry.d.ts +9 -1
- package/dist/util/http-retry.js +67 -8
- package/dist/util/http-util.d.ts +0 -8
- package/dist/util/http-util.js +10 -21
- package/dist/util/limits.d.ts +7 -0
- package/dist/util/limits.js +14 -0
- package/dist/util/log.d.ts +7 -2
- package/dist/util/log.js +34 -9
- package/dist/util/request-scope.d.ts +5 -2
- package/dist/util/request-scope.js +13 -7
- package/dist/util/secret-detect.d.ts +5 -30
- package/dist/util/secret-detect.js +19 -40
- package/dist/util/sqlite-blocked.d.ts +2 -0
- package/dist/util/sqlite-blocked.js +5 -0
- package/dist/util/stored-json.d.ts +1 -1
- package/dist/util/stored-json.js +1 -1
- package/dist/util/stream-tee.d.ts +3 -0
- package/dist/util/stream-tee.js +35 -0
- package/dist/util/time.d.ts +4 -0
- package/dist/util/time.js +4 -0
- package/dist/util/token-text.d.ts +1 -4
- package/dist/util/token-text.js +1 -4
- package/dist/util/transcript-tail.d.ts +2 -0
- package/dist/util/transcript-tail.js +24 -23
- package/dist/util/version.d.ts +5 -20
- package/dist/util/version.js +5 -20
- package/dist/{store → util}/yaml.d.ts +1 -5
- package/dist/{store → util}/yaml.js +2 -6
- package/extensions/openclaw-plugin/index.ts +1 -1
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/cli/provenance-coverage.d.ts +0 -18
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/sharing/scope.d.ts +0 -14
- package/dist/sharing/shared.d.ts +0 -187
- package/dist/sharing/shared.js +0 -563
- package/dist/store/embeddings/local.d.ts +0 -15
- package/dist/store/embeddings/local.js +0 -192
- package/dist/store/embeddings/provider.d.ts +0 -77
- package/dist/store/markdown.d.ts +0 -10
- package/dist/store/recall-scope.d.ts +0 -138
- package/dist/store/recall-scope.js +0 -216
- package/dist/store/vector-writes.d.ts +0 -13
- package/dist/store/vector-writes.js +0 -89
- /package/dist/{store → core}/object-types.d.ts +0 -0
- /package/dist/{store → core}/object-types.js +0 -0
- /package/dist/{cli → store}/quality-repair.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.js +0 -0
package/dist/graph/view.d.ts
CHANGED
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
* graph.
|
|
4
|
-
*
|
|
5
|
-
* This module only READS the graph (through the store's graph reads) and renders
|
|
6
|
-
* view-models; it issues no INSERT/UPDATE/DELETE, so `scripts/check-graph-writes.mjs`
|
|
7
|
-
* stays green. Used by the CLI (`hippo graph show` / `hippo graph view`) and the
|
|
8
|
-
* HTTP `GET /v1/graph` route, which all build the same `GraphModel`.
|
|
9
|
-
*/
|
|
1
|
+
/** Graph observability and visualization, READ-ONLY over the entity/relation graph (no writes, so `scripts/check-graph-writes.mjs` stays green).
|
|
2
|
+
* Shared by `hippo graph show|view` and the HTTP `GET /v1/graph` route, which all build the same `GraphModel`. */
|
|
10
3
|
import type { GraphRows } from '../store/port.js';
|
|
11
4
|
import type { EntityType, RelationType } from '../store/graph-rows.js';
|
|
12
5
|
export interface GraphNode {
|
|
@@ -28,12 +21,8 @@ export interface GraphModel {
|
|
|
28
21
|
}
|
|
29
22
|
/** Default bound for the CLI viewer / show so an unbounded set is never laid out. */
|
|
30
23
|
export declare const DEFAULT_VIEW_LIMIT = 500;
|
|
31
|
-
/**
|
|
32
|
-
*
|
|
33
|
-
* focus subgraph: every entity whose name === entity, plus their 1-hop neighbours,
|
|
34
|
-
* plus the edges among that union. Dangling edges (an endpoint outside the node
|
|
35
|
-
* set) are always dropped.
|
|
36
|
-
*/
|
|
24
|
+
/** Build the view-model (reads only); with `opts.entity`, a focus subgraph of the entities named so plus their 1-hop neighbours.
|
|
25
|
+
* Dangling edges (an endpoint outside the node set) are always dropped. */
|
|
37
26
|
export declare function buildGraphModel(hippoRoot: string, tenantId: string, opts?: {
|
|
38
27
|
entity?: string;
|
|
39
28
|
limit?: number;
|
|
@@ -41,12 +30,8 @@ export declare function buildGraphModel(hippoRoot: string, tenantId: string, opt
|
|
|
41
30
|
}): GraphModel;
|
|
42
31
|
/** The reply model of the rows a store read: an edge with an endpoint outside the node set is dropped. */
|
|
43
32
|
export declare function graphModelOf({ entities, relations, truncated }: GraphRows): GraphModel;
|
|
44
|
-
/**
|
|
45
|
-
*
|
|
46
|
-
* fixed iterations, NO `Math.random`, so the same model always yields the same
|
|
47
|
-
* positions (testable, stable output). Non-finite coordinates from a degenerate
|
|
48
|
-
* step are clamped to the viewport centre; all positions are clamped in-bounds.
|
|
49
|
-
*/
|
|
33
|
+
/** Deterministic Fruchterman-Reingold-style force layout: seeded circular init, fixed iterations, no `Math.random`, so one model gives the same positions.
|
|
34
|
+
* Non-finite coordinates are clamped to the viewport centre and all positions to the bounds. */
|
|
50
35
|
export declare function layoutGraph(model: GraphModel, opts?: {
|
|
51
36
|
width?: number;
|
|
52
37
|
height?: number;
|
|
@@ -57,20 +42,9 @@ export declare function layoutGraph(model: GraphModel, opts?: {
|
|
|
57
42
|
}>;
|
|
58
43
|
/** HTML-escape for SVG text / title / markup content (XSS guard). */
|
|
59
44
|
export declare function escapeHtml(s: string): string;
|
|
60
|
-
/**
|
|
61
|
-
*
|
|
62
|
-
* node-link diagram. Positions are computed server-side (deterministic). User
|
|
63
|
-
* strings are escaped per sink: SVG `<text>`/`<title>` via `escapeHtml`; the model
|
|
64
|
-
* is inlined in a `<script type="application/json">` block with `<`/`>`/`&`
|
|
65
|
-
* unicode-escaped so a `</script>` inside an entity name cannot break out (the
|
|
66
|
-
* client `JSON.parse`s it back and never `innerHTML`s a user string).
|
|
67
|
-
*/
|
|
45
|
+
/** Render the model as a self-contained, offline interactive HTML node-link diagram with server-side deterministic positions.
|
|
46
|
+
* The model is inlined as `<script type="application/json">` with `<`, `>`, `&` unicode-escaped so a `</script>` in an entity name cannot break out. */
|
|
68
47
|
export declare function renderGraphHtml(model: GraphModel): string;
|
|
69
|
-
/**
|
|
70
|
-
* Render the model as a JSON Canvas (jsoncanvas.org) document — `nodes[]` of
|
|
71
|
-
* type `text` positioned by the same deterministic layout, `edges[]` linking
|
|
72
|
-
* them by id. Opens natively in Obsidian. Pure JSON; entity names live in the
|
|
73
|
-
* `text` field (Obsidian renders/sanitizes them).
|
|
74
|
-
*/
|
|
48
|
+
/** Render the model as a JSON Canvas (jsoncanvas.org) document: `text` nodes at the same deterministic layout positions, `edges[]` linking them by id. */
|
|
75
49
|
export declare function renderGraphCanvas(model: GraphModel): string;
|
|
76
50
|
//# sourceMappingURL=view.d.ts.map
|
package/dist/graph/view.js
CHANGED
|
@@ -1,24 +1,13 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
* graph.
|
|
4
|
-
*
|
|
5
|
-
* This module only READS the graph (through the store's graph reads) and renders
|
|
6
|
-
* view-models; it issues no INSERT/UPDATE/DELETE, so `scripts/check-graph-writes.mjs`
|
|
7
|
-
* stays green. Used by the CLI (`hippo graph show` / `hippo graph view`) and the
|
|
8
|
-
* HTTP `GET /v1/graph` route, which all build the same `GraphModel`.
|
|
9
|
-
*/
|
|
1
|
+
/** Graph observability and visualization, READ-ONLY over the entity/relation graph (no writes, so `scripts/check-graph-writes.mjs` stays green).
|
|
2
|
+
* Shared by `hippo graph show|view` and the HTTP `GET /v1/graph` route, which all build the same `GraphModel`. */
|
|
10
3
|
import { withGraphReadSnapshot } from '../store/graph-reads.js';
|
|
11
4
|
import { graphViewRows } from '../store/graph-view-rows.js';
|
|
12
5
|
const DEFAULT_LAYOUT_ITERATIONS = 300;
|
|
13
6
|
const NODE_LABEL_MAX_CHARS = 22;
|
|
14
7
|
/** Default bound for the CLI viewer / show so an unbounded set is never laid out. */
|
|
15
8
|
export const DEFAULT_VIEW_LIMIT = 500;
|
|
16
|
-
/**
|
|
17
|
-
*
|
|
18
|
-
* focus subgraph: every entity whose name === entity, plus their 1-hop neighbours,
|
|
19
|
-
* plus the edges among that union. Dangling edges (an endpoint outside the node
|
|
20
|
-
* set) are always dropped.
|
|
21
|
-
*/
|
|
9
|
+
/** Build the view-model (reads only); with `opts.entity`, a focus subgraph of the entities named so plus their 1-hop neighbours.
|
|
10
|
+
* Dangling edges (an endpoint outside the node set) are always dropped. */
|
|
22
11
|
export function buildGraphModel(hippoRoot, tenantId, opts = {}) {
|
|
23
12
|
const limit = opts.limit ?? DEFAULT_VIEW_LIMIT;
|
|
24
13
|
// One read snapshot, so a concurrent graph rebuild cannot make the model mix old entity ids with new relation ids.
|
|
@@ -105,12 +94,8 @@ function applyDisplacement(nodes, pos, disp, temp, width, height) {
|
|
|
105
94
|
p.y = Math.max(20, Math.min(height - 20, ny));
|
|
106
95
|
});
|
|
107
96
|
}
|
|
108
|
-
/**
|
|
109
|
-
*
|
|
110
|
-
* fixed iterations, NO `Math.random`, so the same model always yields the same
|
|
111
|
-
* positions (testable, stable output). Non-finite coordinates from a degenerate
|
|
112
|
-
* step are clamped to the viewport centre; all positions are clamped in-bounds.
|
|
113
|
-
*/
|
|
97
|
+
/** Deterministic Fruchterman-Reingold-style force layout: seeded circular init, fixed iterations, no `Math.random`, so one model gives the same positions.
|
|
98
|
+
* Non-finite coordinates are clamped to the viewport centre and all positions to the bounds. */
|
|
114
99
|
export function layoutGraph(model, opts = {}) {
|
|
115
100
|
const width = opts.width ?? LAYOUT_W;
|
|
116
101
|
const height = opts.height ?? LAYOUT_H;
|
|
@@ -150,10 +135,8 @@ const NODE_COLORS = {
|
|
|
150
135
|
person: '#3b82f6',
|
|
151
136
|
system: '#64748b',
|
|
152
137
|
};
|
|
153
|
-
// Client script: pan
|
|
154
|
-
//
|
|
155
|
-
// strings never reach an HTML sink here. No template literals / `${}` so it nests
|
|
156
|
-
// safely inside this module's own template strings.
|
|
138
|
+
// Client script: pan, zoom, click-to-highlight. It reads the inlined model via JSON.parse (never innerHTML)
|
|
139
|
+
// and uses no template literals or `${}`, so it nests in this module's template strings.
|
|
157
140
|
const CLIENT_JS = [
|
|
158
141
|
"(function(){",
|
|
159
142
|
" var svg=document.getElementById('g');",
|
|
@@ -163,15 +146,23 @@ const CLIENT_JS = [
|
|
|
163
146
|
" var panning=false,sx=0,sy=0;",
|
|
164
147
|
" svg.addEventListener('mousedown',function(e){if(e.target.closest('.node'))return;panning=true;sx=e.clientX;sy=e.clientY;});",
|
|
165
148
|
" window.addEventListener('mouseup',function(){panning=false;});",
|
|
166
|
-
" window.addEventListener('mousemove',function(e){if(!panning)return;var r=svg.getBoundingClientRect();var
|
|
167
|
-
|
|
168
|
-
" var
|
|
149
|
+
" window.addEventListener('mousemove',function(e){if(!panning)return;var r=svg.getBoundingClientRect();var " +
|
|
150
|
+
"k=view.w/r.width;view.x-=(e.clientX-sx)*k;view.y-=(e.clientY-sy)*k;sx=e.clientX;sy=e.clientY;apply();});",
|
|
151
|
+
" svg.addEventListener('wheel',function(e){e.preventDefault();var r=svg.getBoundingClientRect();var mx=view.x+(e.clientX-r.left)/r.width*view.w;var " +
|
|
152
|
+
"my=view.y+(e.clientY-r.top)/r.height*view.h;var " +
|
|
153
|
+
"f=e.deltaY<0?0.9:1.1;view.x=mx-(mx-view.x)*f;view.y=my-(my-view.y)*f;view.w*=f;view.h*=f;apply();},{passive:false});",
|
|
154
|
+
" var data={};try{data=JSON.parse(document.getElementById('graph-data').textContent);}",
|
|
155
|
+
" catch(e){console.error('hippo graph: embedded model is not valid JSON',e);}",
|
|
169
156
|
" var adj={};(data.edges||[]).forEach(function(e){(adj[e.from]=adj[e.from]||[]).push(e.to);(adj[e.to]=adj[e.to]||[]).push(e.from);});",
|
|
170
157
|
" var active=null;",
|
|
171
|
-
" document.querySelectorAll('.node').forEach(function(g){g.addEventListener('click',function(ev){ev.stopPropagation();var
|
|
158
|
+
" document.querySelectorAll('.node').forEach(function(g){g.addEventListener('click',function(ev){ev.stopPropagation();var " +
|
|
159
|
+
"id=g.getAttribute('data-id');if(active===id){clearHi();active=null;return;}active=id;highlight(id);});});",
|
|
172
160
|
" svg.addEventListener('click',function(){clearHi();active=null;});",
|
|
173
161
|
" function clearHi(){svg.classList.remove('focused');document.querySelectorAll('.hi').forEach(function(el){el.classList.remove('hi');});}",
|
|
174
|
-
" function highlight(id){clearHi();svg.classList.add('focused');var
|
|
162
|
+
" function highlight(id){clearHi();svg.classList.add('focused');var " +
|
|
163
|
+
"keep={};keep[id]=1;(adj[id]||[]).forEach(function(n){keep[n]=1;});document.querySelectorAll('.node').forEach(" +
|
|
164
|
+
"function(g){if(keep[g.getAttribute('data-id')])g.classList.add('hi');});document.querySelectorAll('.edge').forEach(" +
|
|
165
|
+
"function(l){if(l.getAttribute('data-from')===id||l.getAttribute('data-to')===id)l.classList.add('hi');});}",
|
|
175
166
|
"})();",
|
|
176
167
|
].join("\n");
|
|
177
168
|
const STYLE = [
|
|
@@ -231,14 +222,8 @@ function renderLegend(model) {
|
|
|
231
222
|
.map((t) => `<span style="color:${nodeColor(t)}">●</span> ${escapeHtml(t)}`)
|
|
232
223
|
.join(' ');
|
|
233
224
|
}
|
|
234
|
-
/**
|
|
235
|
-
*
|
|
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
|
-
*/
|
|
225
|
+
/** Render the model as a self-contained, offline interactive HTML node-link diagram with server-side deterministic positions.
|
|
226
|
+
* The model is inlined as `<script type="application/json">` with `<`, `>`, `&` unicode-escaped so a `</script>` in an entity name cannot break out. */
|
|
242
227
|
export function renderGraphHtml(model) {
|
|
243
228
|
const pos = layoutGraph(model);
|
|
244
229
|
const edgeSvg = renderEdgeSvg(model, pos);
|
|
@@ -262,12 +247,7 @@ export function renderGraphHtml(model) {
|
|
|
262
247
|
'</body></html>',
|
|
263
248
|
].join('\n');
|
|
264
249
|
}
|
|
265
|
-
/**
|
|
266
|
-
* Render the model as a JSON Canvas (jsoncanvas.org) document — `nodes[]` of
|
|
267
|
-
* type `text` positioned by the same deterministic layout, `edges[]` linking
|
|
268
|
-
* them by id. Opens natively in Obsidian. Pure JSON; entity names live in the
|
|
269
|
-
* `text` field (Obsidian renders/sanitizes them).
|
|
270
|
-
*/
|
|
250
|
+
/** Render the model as a JSON Canvas (jsoncanvas.org) document: `text` nodes at the same deterministic layout positions, `edges[]` linking them by id. */
|
|
271
251
|
export function renderGraphCanvas(model) {
|
|
272
252
|
const pos = layoutGraph(model, { width: 2400, height: 1600 });
|
|
273
253
|
const nodes = model.nodes.map((node) => {
|
package/dist/graph/write.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export interface ApplyGraphOpsResult {
|
|
|
6
6
|
}
|
|
7
7
|
/** Applies `ops` from index `opts.from` on the caller's open transaction and stops at the first op boundary past `opts.holdMs`.
|
|
8
8
|
* Returns where the next chunk starts and how many ops were skipped as stale. */
|
|
9
|
-
export declare function applyGraphOps(db: DatabaseSyncLike,
|
|
9
|
+
export declare function applyGraphOps(db: DatabaseSyncLike, tenantId: string, ops: readonly GraphOp[], opts: {
|
|
10
10
|
readonly from: number;
|
|
11
11
|
readonly holdMs: number;
|
|
12
12
|
readonly clock?: () => number;
|
package/dist/graph/write.js
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
// Applies a rebuild's op list on the caller's transaction. The statements and the consolidated-source guard sit in the store's graph writers.
|
|
2
2
|
import { assertTenantId } from '../store/tenant.js';
|
|
3
3
|
import { clock } from '../util/write-budget.js';
|
|
4
|
-
import { deleteEntityRow, deleteRelationRow, entityIdBySource,
|
|
5
|
-
function insertDesiredRelation(db,
|
|
4
|
+
import { deleteEntityRow, deleteRelationRow, entityIdBySource, insertEntityRow, insertRelationRow, objectInForce, relationPresent, updateEntityRow } from '../store/graph-writes.js';
|
|
5
|
+
function insertDesiredRelation(db, tenantId, rel) {
|
|
6
6
|
const fromEntityId = entityIdBySource(db, tenantId, rel.from.entityType, rel.from.sourceObject);
|
|
7
7
|
const toEntityId = entityIdBySource(db, tenantId, rel.to.entityType, rel.to.sourceObject);
|
|
8
8
|
if (fromEntityId === undefined || toEntityId === undefined || !objectInForce(db, tenantId, rel.sourceObject))
|
|
9
9
|
return false;
|
|
10
10
|
if (relationPresent(db, tenantId, fromEntityId, toEntityId, rel.relType))
|
|
11
11
|
return false;
|
|
12
|
-
|
|
12
|
+
insertRelationRow(db, tenantId, { fromEntityId, toEntityId, relType: rel.relType, memoryId: rel.memoryId, sourceObject: rel.sourceObject });
|
|
13
13
|
return true;
|
|
14
14
|
}
|
|
15
15
|
/** Applies one op; false when a writer since the diff made it stale, which the next run's diff repairs. */
|
|
16
|
-
function applyGraphOp(db,
|
|
16
|
+
function applyGraphOp(db, tenantId, op) {
|
|
17
17
|
switch (op.op) {
|
|
18
18
|
case 'deleteEntity':
|
|
19
19
|
deleteEntityRow(db, tenantId, op.id);
|
|
@@ -24,27 +24,27 @@ function applyGraphOp(db, hippoRoot, tenantId, op) {
|
|
|
24
24
|
case 'updateEntity':
|
|
25
25
|
if (!objectInForce(db, tenantId, op.entity.sourceObject))
|
|
26
26
|
return false;
|
|
27
|
-
return
|
|
27
|
+
return updateEntityRow(db, tenantId, op.id, op.entity) !== null;
|
|
28
28
|
case 'insertEntity':
|
|
29
29
|
// A mirrorless object closed since the load is never enqueued again, so a stale insert would stay for good.
|
|
30
30
|
if (!objectInForce(db, tenantId, op.entity.sourceObject) || entityIdBySource(db, tenantId, op.entity.entityType, op.entity.sourceObject) !== undefined)
|
|
31
31
|
return false;
|
|
32
|
-
|
|
32
|
+
insertEntityRow(db, tenantId, op.entity);
|
|
33
33
|
return true;
|
|
34
34
|
case 'insertRelation':
|
|
35
|
-
return insertDesiredRelation(db,
|
|
35
|
+
return insertDesiredRelation(db, tenantId, op.relation);
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
/** Applies `ops` from index `opts.from` on the caller's open transaction and stops at the first op boundary past `opts.holdMs`.
|
|
39
39
|
* Returns where the next chunk starts and how many ops were skipped as stale. */
|
|
40
|
-
export function applyGraphOps(db,
|
|
40
|
+
export function applyGraphOps(db, tenantId, ops, opts) {
|
|
41
41
|
assertTenantId('applyGraphOps', tenantId);
|
|
42
42
|
const now = opts.clock ?? clock;
|
|
43
43
|
const begunAt = now();
|
|
44
44
|
let next = opts.from;
|
|
45
45
|
let skipped = 0;
|
|
46
46
|
while (next < ops.length) {
|
|
47
|
-
if (!applyGraphOp(db,
|
|
47
|
+
if (!applyGraphOp(db, tenantId, ops[next]))
|
|
48
48
|
skipped += 1;
|
|
49
49
|
next += 1;
|
|
50
50
|
if (now() - begunAt >= opts.holdMs)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import { isJsonString } from '../util/json.js';
|
|
4
|
+
import { errorMessage, log } from '../util/log.js';
|
|
4
5
|
function collectFiles(dir) {
|
|
5
6
|
if (!fs.existsSync(dir))
|
|
6
7
|
return [];
|
|
@@ -42,8 +43,8 @@ function readCodexSessionIdsFromHistoryDelta(historyPath, startOffsetBytes) {
|
|
|
42
43
|
ordered.push(sessionId);
|
|
43
44
|
}
|
|
44
45
|
}
|
|
45
|
-
catch {
|
|
46
|
-
|
|
46
|
+
catch (err) {
|
|
47
|
+
log.warn(`codex history ${historyPath}: skipped a malformed JSONL line (${errorMessage(err)})`);
|
|
47
48
|
}
|
|
48
49
|
}
|
|
49
50
|
return ordered;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { envPath } from '../util/env.js';
|
|
2
2
|
import * as fs from 'fs';
|
|
3
3
|
import * as path from 'path';
|
|
4
|
-
import {
|
|
4
|
+
import { PACKAGE_ROOT } from '../core/package-root.js';
|
|
5
5
|
import { errorMessage, log } from '../util/log.js';
|
|
6
|
-
import { HIPPO_CODEX_WRAPPER_MARKER,
|
|
6
|
+
import { HIPPO_CODEX_WRAPPER_MARKER, ensureDir } from './shared.js';
|
|
7
|
+
import { homeDir, codexHomeDir } from '../util/agent-homes.js';
|
|
7
8
|
import { isJsonString } from '../util/json.js';
|
|
8
9
|
import { writeFileAtomic } from '../util/atomic-write.js';
|
|
9
10
|
export function resolveCodexWrapperPaths() {
|
|
@@ -68,7 +69,7 @@ function isCodexWrapperMetadataValid(metadata) {
|
|
|
68
69
|
isHippoCodexWrapperFile(metadata.commandPath));
|
|
69
70
|
}
|
|
70
71
|
function resolveHippoCliPath() {
|
|
71
|
-
return
|
|
72
|
+
return path.join(PACKAGE_ROOT, 'bin', 'hippo.js');
|
|
72
73
|
}
|
|
73
74
|
function quoteForShell(value) {
|
|
74
75
|
return `"${value.replace(/(["\\$`])/g, '\\$1')}"`;
|
package/dist/hooks/copilot.js
CHANGED
|
@@ -77,7 +77,8 @@ function hippoCommand() {
|
|
|
77
77
|
export const COPILOT_CLI_MCP = { key: 'mcpServers', server: () => ({ type: 'local', command: hippoCommand(), args: ['mcp'], env: {}, tools: ['*'] }) };
|
|
78
78
|
/** VS Code's mcp.json keeps stdio servers under "servers"; it has no "mcpServers" key. */
|
|
79
79
|
export const VSCODE_MCP = { key: 'servers', server: () => ({ type: 'stdio', command: hippoCommand(), args: ['mcp'] }) };
|
|
80
|
-
/** Only a server hippo wrote counts as hippo's: another command, other args, or
|
|
80
|
+
/** Only a server hippo wrote counts as hippo's: another command, other args, or
|
|
81
|
+
* any key or value setup does not write (an env you added) makes it the user's. */
|
|
81
82
|
function isHipposServer(entry, host) {
|
|
82
83
|
if (!isJsonObjectLiteral(entry) || !('command' in entry) || !('args' in entry))
|
|
83
84
|
return false;
|
|
@@ -2,11 +2,15 @@ export declare const HOOK_MARKERS: {
|
|
|
2
2
|
start: string;
|
|
3
3
|
end: string;
|
|
4
4
|
};
|
|
5
|
-
export
|
|
5
|
+
export interface HookSpec {
|
|
6
6
|
file: string;
|
|
7
7
|
content: string;
|
|
8
8
|
description: string;
|
|
9
|
-
}
|
|
9
|
+
}
|
|
10
|
+
export interface HookTable {
|
|
11
|
+
[agent: string]: HookSpec;
|
|
12
|
+
}
|
|
13
|
+
export declare const HOOKS: HookTable;
|
|
10
14
|
/** The first hippo block in `text` and the agent whose current or shipped text it is; `owner` is undefined for an edited block. */
|
|
11
15
|
export declare function hippoBlock(text: string): {
|
|
12
16
|
start: number;
|
|
@@ -5,71 +5,22 @@ export const HOOK_MARKERS = {
|
|
|
5
5
|
start: '<!-- hippo:start -->',
|
|
6
6
|
end: '<!-- hippo:end -->',
|
|
7
7
|
};
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
Pinned rules and recent writes auto-inject at every prompt via the installed
|
|
16
|
-
UserPromptSubmit hook; never re-run that part manually. At the START of a
|
|
17
|
-
task (not per prompt), additionally load task-specific context: git-aware
|
|
18
|
-
recall over the full store that per-prompt injection does not cover. Also
|
|
19
|
-
run it if the hook is not installed:
|
|
20
|
-
\`\`\`bash
|
|
21
|
-
hippo context --auto --budget 1500
|
|
22
|
-
\`\`\`
|
|
23
|
-
|
|
24
|
-
When you find out why something failed, record it right then, while you
|
|
25
|
-
work, never as a closing step:
|
|
26
|
-
\`\`\`bash
|
|
27
|
-
hippo remember "<what went wrong and why>" --error
|
|
28
|
-
\`\`\`
|
|
29
|
-
|
|
30
|
-
The installed hooks store failed tool calls and capture the session when it
|
|
31
|
-
ends, so there is nothing to run before you finish.
|
|
32
|
-
`.trim(),
|
|
33
|
-
},
|
|
34
|
-
'codex': {
|
|
35
|
-
file: 'AGENTS.md',
|
|
36
|
-
description: 'OpenAI Codex',
|
|
37
|
-
content: `
|
|
38
|
-
## Project Memory (Hippo)
|
|
39
|
-
|
|
40
|
-
At the start of every task, run:
|
|
41
|
-
\`\`\`bash
|
|
42
|
-
hippo context --auto --budget 1500
|
|
43
|
-
\`\`\`
|
|
44
|
-
Read the output before writing any code.
|
|
45
|
-
|
|
46
|
-
On errors or unexpected behaviour, record it right then, while you work,
|
|
47
|
-
never as a closing step:
|
|
48
|
-
\`\`\`bash
|
|
49
|
-
hippo remember "<description of what went wrong>" --error
|
|
50
|
-
\`\`\`
|
|
51
|
-
|
|
52
|
-
When you learn something that should outlive this session (a decision and
|
|
53
|
-
its reason, a user preference, a lesson), record it right then, while you
|
|
54
|
-
work, never as a closing step. Leave out secrets and personal details:
|
|
55
|
-
\`\`\`bash
|
|
56
|
-
hippo remember "<what you learned and why>"
|
|
57
|
-
\`\`\`
|
|
58
|
-
|
|
59
|
-
When Hippo's Codex wrapper is installed, session-end capture runs automatically.
|
|
60
|
-
If the wrapper is not installed, capture a brief summary manually:
|
|
8
|
+
// Shared by the agents that differ only in the noun, an optional recall paragraph and an optional footer.
|
|
9
|
+
const PI_FOOTER = 'For full integration, copy the hippo-memory Pi extension to `~/.pi/agent/extensions/hippo-memory/`.';
|
|
10
|
+
function agentsBlock(noun, opts = {}) {
|
|
11
|
+
const recall = opts.recall
|
|
12
|
+
? `
|
|
13
|
+
When stuck or repeating yourself, check if this happened before:
|
|
61
14
|
\`\`\`bash
|
|
62
|
-
hippo
|
|
15
|
+
hippo recall "<what's going wrong>" --budget 2000
|
|
63
16
|
\`\`\`
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
'
|
|
67
|
-
|
|
68
|
-
description: 'Cursor',
|
|
69
|
-
content: `
|
|
17
|
+
`
|
|
18
|
+
: '';
|
|
19
|
+
const footer = opts.footer ? `\n${opts.footer}\n` : '';
|
|
20
|
+
return `
|
|
70
21
|
## Project Memory (Hippo)
|
|
71
22
|
|
|
72
|
-
At the start of every
|
|
23
|
+
At the start of every ${noun}, run:
|
|
73
24
|
\`\`\`bash
|
|
74
25
|
hippo context --auto --budget 1500
|
|
75
26
|
\`\`\`
|
|
@@ -87,47 +38,42 @@ work, never as a closing step. Leave out secrets and personal details:
|
|
|
87
38
|
\`\`\`bash
|
|
88
39
|
hippo remember "<what you learned and why>"
|
|
89
40
|
\`\`\`
|
|
90
|
-
|
|
41
|
+
${recall}
|
|
91
42
|
When ending a session, capture a brief summary:
|
|
92
43
|
\`\`\`bash
|
|
93
44
|
hippo capture --stdin <<< '<decisions, errors, lessons: 2-5 bullets>'
|
|
94
45
|
\`\`\`
|
|
95
|
-
`.trim()
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
46
|
+
${footer}`.trim();
|
|
47
|
+
}
|
|
48
|
+
export const HOOKS = {
|
|
49
|
+
'claude-code': {
|
|
50
|
+
file: 'CLAUDE.md',
|
|
51
|
+
description: 'Claude Code',
|
|
100
52
|
content: `
|
|
101
53
|
## Project Memory (Hippo)
|
|
102
54
|
|
|
103
|
-
|
|
55
|
+
Pinned rules and recent writes auto-inject at every prompt via the installed
|
|
56
|
+
UserPromptSubmit hook; never re-run that part manually. At the START of a
|
|
57
|
+
task (not per prompt), additionally load task-specific context: git-aware
|
|
58
|
+
recall over the full store that per-prompt injection does not cover. Also
|
|
59
|
+
run it if the hook is not installed:
|
|
104
60
|
\`\`\`bash
|
|
105
61
|
hippo context --auto --budget 1500
|
|
106
62
|
\`\`\`
|
|
107
|
-
Read the output before writing any code.
|
|
108
63
|
|
|
109
|
-
|
|
110
|
-
never as a closing step:
|
|
111
|
-
\`\`\`bash
|
|
112
|
-
hippo remember "<description of what went wrong>" --error
|
|
113
|
-
\`\`\`
|
|
114
|
-
|
|
115
|
-
When you learn something that should outlive this session (a decision and
|
|
116
|
-
its reason, a user preference, a lesson), record it right then, while you
|
|
117
|
-
work, never as a closing step. Leave out secrets and personal details:
|
|
64
|
+
When you find out why something failed, record it right then, while you
|
|
65
|
+
work, never as a closing step:
|
|
118
66
|
\`\`\`bash
|
|
119
|
-
hippo remember "<what
|
|
67
|
+
hippo remember "<what went wrong and why>" --error
|
|
120
68
|
\`\`\`
|
|
121
69
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
hippo capture --stdin <<< '<decisions, errors, lessons: 2-5 bullets>'
|
|
125
|
-
\`\`\`
|
|
70
|
+
The installed hooks store failed tool calls and capture the session when it
|
|
71
|
+
ends, so there is nothing to run before you finish.
|
|
126
72
|
`.trim(),
|
|
127
73
|
},
|
|
128
|
-
'
|
|
74
|
+
'codex': {
|
|
129
75
|
file: 'AGENTS.md',
|
|
130
|
-
description: '
|
|
76
|
+
description: 'OpenAI Codex',
|
|
131
77
|
content: `
|
|
132
78
|
## Project Memory (Hippo)
|
|
133
79
|
|
|
@@ -150,50 +96,17 @@ work, never as a closing step. Leave out secrets and personal details:
|
|
|
150
96
|
hippo remember "<what you learned and why>"
|
|
151
97
|
\`\`\`
|
|
152
98
|
|
|
153
|
-
When
|
|
154
|
-
|
|
155
|
-
hippo recall "<what's going wrong>" --budget 2000
|
|
156
|
-
\`\`\`
|
|
157
|
-
|
|
158
|
-
When ending a session, capture a brief summary:
|
|
159
|
-
\`\`\`bash
|
|
160
|
-
hippo capture --stdin <<< '<decisions, errors, lessons: 2-5 bullets>'
|
|
161
|
-
\`\`\`
|
|
162
|
-
`.trim(),
|
|
163
|
-
},
|
|
164
|
-
'pi': {
|
|
165
|
-
file: 'AGENTS.md',
|
|
166
|
-
description: 'Pi',
|
|
167
|
-
content: `
|
|
168
|
-
## Project Memory (Hippo)
|
|
169
|
-
|
|
170
|
-
At the start of every session, run:
|
|
171
|
-
\`\`\`bash
|
|
172
|
-
hippo context --auto --budget 1500
|
|
173
|
-
\`\`\`
|
|
174
|
-
Read the output before writing any code.
|
|
175
|
-
|
|
176
|
-
On errors or unexpected behaviour, record it right then, while you work,
|
|
177
|
-
never as a closing step:
|
|
178
|
-
\`\`\`bash
|
|
179
|
-
hippo remember "<description of what went wrong>" --error
|
|
180
|
-
\`\`\`
|
|
181
|
-
|
|
182
|
-
When you learn something that should outlive this session (a decision and
|
|
183
|
-
its reason, a user preference, a lesson), record it right then, while you
|
|
184
|
-
work, never as a closing step. Leave out secrets and personal details:
|
|
185
|
-
\`\`\`bash
|
|
186
|
-
hippo remember "<what you learned and why>"
|
|
187
|
-
\`\`\`
|
|
188
|
-
|
|
189
|
-
When ending a session, capture a brief summary:
|
|
99
|
+
When Hippo's Codex wrapper is installed, session-end capture runs automatically.
|
|
100
|
+
If the wrapper is not installed, capture a brief summary manually:
|
|
190
101
|
\`\`\`bash
|
|
191
102
|
hippo capture --stdin <<< '<decisions, errors, lessons: 2-5 bullets>'
|
|
192
103
|
\`\`\`
|
|
193
|
-
|
|
194
|
-
For full integration, copy the hippo-memory Pi extension to \`~/.pi/agent/extensions/hippo-memory/\`.
|
|
195
104
|
`.trim(),
|
|
196
105
|
},
|
|
106
|
+
'cursor': { file: 'AGENTS.md', description: 'Cursor', content: agentsBlock('task') },
|
|
107
|
+
'openclaw': { file: 'AGENTS.md', description: 'OpenClaw', content: agentsBlock('session') },
|
|
108
|
+
'opencode': { file: 'AGENTS.md', description: 'OpenCode', content: agentsBlock('task', { recall: true }) },
|
|
109
|
+
'pi': { file: 'AGENTS.md', description: 'Pi', content: agentsBlock('session', { footer: PI_FOOTER }) },
|
|
197
110
|
};
|
|
198
111
|
// sha256 of each trimmed block an earlier hippo wrote, so init refreshes only blocks nobody edited. Add the old hash when a block changes.
|
|
199
112
|
const SHIPPED_HOOK_HASHES = new Map([
|
|
@@ -1,38 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Two integration models live in this file:
|
|
5
|
-
*
|
|
6
|
-
* 1. JSON-hook install (Claude Code only). Writes a `hooks` block into the
|
|
7
|
-
* tool's settings.json with two entries:
|
|
8
|
-
* - SessionEnd: `hippo session-end --log-file <path>` - spawns a detached
|
|
9
|
-
* child that runs `hippo sleep` then `hippo capture --last-session` in
|
|
10
|
-
* sequence, writing both outputs to the log file. The parent returns in
|
|
11
|
-
* <100ms so the TUI teardown can't kill the child before it finishes.
|
|
12
|
-
* - SessionStart: `hippo last-sleep --path <path>` - prints the log
|
|
13
|
-
* written by the previous session's detached worker on stderr and
|
|
14
|
-
* clears it. Stdout carries only a `systemMessage` problems line,
|
|
15
|
-
* because Claude Code shows that to the user, not the model.
|
|
16
|
-
* Earlier Claude Code forms are detected and migrated automatically:
|
|
17
|
-
* - < 0.20.2: `Stop` hook firing `hippo sleep` on every assistant turn.
|
|
18
|
-
* - < 0.21.0: bare `hippo sleep` in SessionEnd, no `--log-file`.
|
|
19
|
-
* - 0.22.x: separate sleep + capture SessionEnd entries.
|
|
20
|
-
* PreCompact and PostCompact entries go in too: the first records the compaction and
|
|
21
|
-
* asks the summariser for a "Memories for hippo" list, the second saves that list.
|
|
22
|
-
* Codex's hooks.json gets only two groups (per-prompt memory and
|
|
23
|
-
* compact-resume); see installCodexHooks. Copilot gets a file of its own; see installCopilotHooks.
|
|
24
|
-
*
|
|
25
|
-
* 2. Plugin install (OpenCode only). OpenCode does NOT share Claude Code's
|
|
26
|
-
* JSON-hook schema — its config has `additionalProperties: false` and no
|
|
27
|
-
* `hooks` key, so a JSON-hook install breaks opencode launch. Hippo
|
|
28
|
-
* installs a TypeScript plugin at
|
|
29
|
-
* `~/.config/opencode/plugins/hippo.ts` subscribing to opencode's
|
|
30
|
-
* `session.idle` (→ `hippo session-end`) and `session.created` (→
|
|
31
|
-
* `hippo last-sleep`) events. See OPENCODE_PLUGIN_SOURCE below for the
|
|
32
|
-
* plugin file content + design rationale; see installOpencodePlugin for
|
|
33
|
-
* the installer + the migration that removes any pre-existing broken
|
|
34
|
-
* `hooks` block from opencode.json.
|
|
35
|
-
*/
|
|
1
|
+
/** Hook install/uninstall for AI coding tools. Claude Code gets a JSON `hooks` block in settings.json; older forms are migrated automatically.
|
|
2
|
+
* OpenCode rejects the JSON-hook schema (no `hooks` key), so it gets a TS plugin (OPENCODE_PLUGIN_SOURCE); see installCodexHooks, installCopilotHooks. */
|
|
36
3
|
import { type JsonHookTarget } from './shared.js';
|
|
37
4
|
import { type JsonValue } from '../util/json.js';
|
|
38
5
|
/** A target's hook settings file, the log its SessionEnd hook writes, and the tool's display name. */
|
|
@@ -71,6 +38,7 @@ export declare function installJsonHooks(target: JsonHookTarget): InstallResult;
|
|
|
71
38
|
export declare function writeSettingsFile(file: string, settings: JsonValue): void;
|
|
72
39
|
/** Removes hippo's own hook handlers from `target`'s settings file and keeps every other handler; true when the file changed. */
|
|
73
40
|
export declare function uninstallJsonHooks(target: JsonHookTarget): boolean;
|
|
74
|
-
/** Whether uninstall can edit settings.json; `invalidJson` marks a file that exists
|
|
41
|
+
/** Whether uninstall can edit settings.json; `invalidJson` marks a file that exists
|
|
42
|
+
* but is not JSON hippo can edit, which `uninstallJsonHooks` reports only as false. */
|
|
75
43
|
export declare function checkUninstallable(target: JsonHookTarget): Pick<InstallResult, 'settingsPath' | 'invalidJson'>;
|
|
76
44
|
//# sourceMappingURL=json-hooks.d.ts.map
|