hippo-memory 1.70.0 → 1.71.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 +1 -1
- package/dist/agent-memories/claude-code.d.ts +4 -2
- package/dist/agent-memories/claude-code.js +14 -5
- 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/report.js +2 -1
- package/dist/agent-memories/sync.d.ts +4 -2
- package/dist/agent-memories/sync.js +10 -5
- package/dist/api/assemble.d.ts +7 -44
- package/dist/api/assemble.js +2 -22
- package/dist/api/audit.d.ts +5 -1
- package/dist/api/audit.js +9 -1
- package/dist/api/auth.d.ts +13 -22
- package/dist/api/auth.js +34 -24
- package/dist/api/auto-sleep.js +2 -2
- package/dist/api/availability.d.ts +2 -15
- package/dist/api/availability.js +2 -15
- package/dist/api/context-select.js +3 -4
- package/dist/api/context-types.d.ts +10 -35
- package/dist/api/context.d.ts +5 -22
- package/dist/api/context.js +21 -38
- package/dist/api/dormant.d.ts +5 -21
- package/dist/api/dormant.js +7 -26
- package/dist/api/drill-down.d.ts +7 -46
- package/dist/api/drill-down.js +5 -26
- package/dist/api/forget.d.ts +5 -24
- package/dist/api/forget.js +5 -28
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +2 -0
- package/dist/api/index.js +2 -0
- package/dist/api/instruction-detect.js +16 -5
- package/dist/api/ledger-db.d.ts +2 -1
- package/dist/api/ledger-db.js +5 -3
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -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/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +13 -17
- package/dist/api/promote.js +11 -19
- package/dist/api/prompt-hook.d.ts +4 -4
- package/dist/api/prompt-hook.js +10 -9
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.js +14 -6
- 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 +16 -9
- package/dist/api/recall-types.d.ts +64 -304
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +59 -60
- 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 +18 -1
- package/dist/api/remember.js +13 -1
- package/dist/api/sleep-run.d.ts +1 -3
- package/dist/api/sleep-run.js +17 -21
- package/dist/api/sleep.d.ts +9 -28
- package/dist/api/tokens.d.ts +3 -10
- package/dist/api/tokens.js +3 -10
- package/dist/api/types.d.ts +6 -29
- package/dist/api/types.js +4 -22
- package/dist/capture/command.d.ts +4 -12
- package/dist/capture/command.js +6 -22
- package/dist/capture/compact.d.ts +4 -15
- package/dist/capture/compact.js +16 -25
- package/dist/capture/compaction-record.js +101 -69
- package/dist/capture/compaction-spool.d.ts +1 -1
- package/dist/capture/compaction-spool.js +1 -1
- package/dist/capture/session-digest.d.ts +1 -1
- package/dist/capture/session-digest.js +13 -7
- package/dist/capture/transcript.d.ts +2 -10
- package/dist/capture/transcript.js +4 -18
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +6 -39
- package/dist/cli/audit-prune.js +6 -39
- package/dist/cli/audit.d.ts +1 -1
- package/dist/cli/audit.js +33 -34
- package/dist/cli/auth.d.ts +2 -2
- package/dist/cli/auth.js +57 -39
- package/dist/cli/briefs.d.ts +4 -4
- package/dist/cli/briefs.js +18 -22
- package/dist/cli/card.d.ts +2 -2
- package/dist/cli/card.js +31 -32
- package/dist/cli/client.d.ts +7 -27
- package/dist/cli/client.js +24 -43
- package/dist/cli/compact-resume-payload.js +3 -2
- package/dist/cli/context.d.ts +1 -2
- package/dist/cli/context.js +12 -8
- package/dist/cli/continuity.d.ts +6 -6
- package/dist/cli/continuity.js +62 -64
- package/dist/cli/correction-latency.d.ts +2 -14
- package/dist/cli/correction-latency.js +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +68 -92
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +33 -27
- package/dist/cli/decisions.d.ts +4 -4
- package/dist/cli/decisions.js +33 -47
- package/dist/cli/eval.js +15 -13
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +6 -4
- package/dist/cli/flag-values.d.ts +6 -1
- package/dist/cli/flag-values.js +27 -10
- package/dist/cli/flags.d.ts +1 -0
- package/dist/cli/flags.js +1 -1
- 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/hook-runtime.d.ts +9 -27
- package/dist/cli/hook-runtime.js +15 -31
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.js +6 -12
- package/dist/cli/install-steps.js +3 -12
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +3 -0
- package/dist/cli/maintenance.d.ts +4 -4
- package/dist/cli/maintenance.js +14 -19
- package/dist/cli/object-verbs.js +4 -3
- package/dist/cli/owner-validation.d.ts +5 -28
- package/dist/cli/owner-validation.js +5 -28
- package/dist/cli/playbooks.d.ts +4 -4
- package/dist/cli/playbooks.js +23 -28
- package/dist/cli/print.d.ts +2 -5
- package/dist/cli/print.js +1 -4
- package/dist/cli/projects.d.ts +2 -2
- package/dist/cli/projects.js +1 -3
- package/dist/cli/provenance-coverage.d.ts +2 -6
- package/dist/cli/provenance-coverage.js +2 -6
- package/dist/cli/quality-repair-once.js +2 -2
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +55 -131
- package/dist/cli/refine-llm.d.ts +5 -31
- package/dist/cli/refine-llm.js +9 -36
- package/dist/cli/remember.d.ts +3 -3
- package/dist/cli/remember.js +122 -180
- package/dist/cli/scheduler.d.ts +2 -17
- package/dist/cli/scheduler.js +12 -18
- package/dist/cli/serve.js +21 -12
- package/dist/cli/session-hooks.d.ts +10 -18
- package/dist/cli/session-hooks.js +112 -113
- package/dist/cli/setup.d.ts +4 -4
- package/dist/cli/setup.js +19 -21
- package/dist/cli/shared.d.ts +9 -23
- package/dist/cli/shared.js +9 -32
- package/dist/cli/slack.d.ts +2 -2
- package/dist/cli/slack.js +19 -23
- package/dist/cli/sleep.d.ts +3 -2
- package/dist/cli/sleep.js +15 -16
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +55 -98
- 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 +66 -89
- package/dist/cli/usage.js +11 -5
- package/dist/cli.d.ts +66 -448
- package/dist/cli.js +87 -263
- package/dist/connectors/github/backfill.d.ts +5 -25
- package/dist/connectors/github/backfill.js +14 -49
- 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 +12 -29
- package/dist/connectors/github/ingest.d.ts +2 -6
- package/dist/connectors/github/ingest.js +4 -10
- 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 +2 -16
- package/dist/connectors/github/webhook.js +6 -22
- 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 +2 -19
- package/dist/connectors/slack/ingest.d.ts +2 -3
- package/dist/connectors/slack/ingest.js +2 -3
- 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 +2 -19
- package/dist/connectors/slack/webhook.js +5 -26
- package/dist/connectors/slack/workspaces.d.ts +4 -24
- package/dist/connectors/slack/workspaces.js +4 -24
- package/dist/consolidate/conflicts.js +6 -14
- 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 +14 -75
- package/dist/consolidate/decay.js +7 -19
- package/dist/consolidate/dedupe.d.ts +6 -52
- package/dist/consolidate/dedupe.js +13 -71
- 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 +4 -21
- 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 +16 -104
- package/dist/consolidate/merge.js +10 -31
- package/dist/consolidate/merged-row.js +2 -1
- package/dist/consolidate/physics-pass.js +1 -3
- package/dist/consolidate/replay.d.ts +6 -38
- package/dist/consolidate/replay.js +14 -52
- package/dist/consolidate/run.js +1 -1
- package/dist/consolidate/sleep.d.ts +1 -8
- package/dist/consolidate/sleep.js +5 -17
- package/dist/consolidate/trace.d.ts +3 -18
- package/dist/consolidate/trace.js +3 -18
- package/dist/consolidate/traces.js +6 -22
- package/dist/core/ablation.d.ts +4 -91
- package/dist/core/ablation.js +4 -91
- package/dist/core/ambient.d.ts +1 -8
- package/dist/core/ambient.js +1 -8
- 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 +8 -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 +13 -14
- package/dist/core/handoff.d.ts +1 -7
- package/dist/core/handoff.js +1 -7
- package/dist/core/memory-quality.js +1 -1
- package/dist/core/memory.d.ts +41 -164
- package/dist/core/memory.js +51 -221
- 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 +59 -122
- package/dist/core/project-identity.d.ts +17 -58
- package/dist/core/project-identity.js +17 -38
- 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/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 +1 -1
- package/dist/db/busy.js +17 -8
- package/dist/db/connect.d.ts +1 -0
- package/dist/db/connect.js +3 -3
- package/dist/db/migrate.js +3 -3
- 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/open.d.ts +2 -0
- package/dist/db/open.js +17 -1
- package/dist/db/physics-state.d.ts +6 -22
- package/dist/db/physics-state.js +25 -36
- package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
- package/dist/db/raw-archive-mirror-cleanup.js +2 -17
- package/dist/db/vector-store.d.ts +2 -0
- package/dist/db/vector-store.js +8 -1
- package/dist/doctor.js +74 -19
- package/dist/entry/session-text.js +2 -1
- 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 +74 -34
- package/dist/eval/eval.d.ts +6 -24
- package/dist/eval/eval.js +7 -34
- package/dist/eval/judgment.d.ts +0 -3
- package/dist/eval/judgment.js +19 -11
- package/dist/extensions/openclaw-plugin/index.js +1 -1
- package/dist/graph/extract.d.ts +5 -27
- package/dist/graph/extract.js +7 -33
- package/dist/graph/recall.d.ts +7 -20
- package/dist/graph/recall.js +14 -76
- 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 +11 -39
- package/dist/hooks/codex-wrapper.js +2 -2
- 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 +18 -57
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +9 -76
- package/dist/hooks/shared.d.ts +8 -17
- package/dist/hooks/shared.js +29 -20
- package/dist/importers/core.d.ts +12 -37
- package/dist/importers/core.js +9 -27
- 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 +7 -35
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +25 -81
- package/dist/index.d.ts +6 -2
- package/dist/index.js +6 -2
- package/dist/learn/autolearn.d.ts +14 -41
- package/dist/learn/autolearn.js +14 -41
- package/dist/learn/extract.js +2 -4
- package/dist/learn/forward-claim-detector.d.ts +6 -30
- package/dist/learn/forward-claim-detector.js +14 -66
- package/dist/learn/invalidation.d.ts +6 -18
- package/dist/learn/invalidation.js +9 -26
- package/dist/mcp/admin-tools.js +3 -5
- package/dist/mcp/memory-tools.js +4 -9
- package/dist/mcp/protocol.d.ts +8 -26
- package/dist/mcp/protocol.js +3 -6
- package/dist/mcp/recall-tools.js +3 -3
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +10 -26
- 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 +48 -12
- package/dist/mcp/tools.js +5 -3
- package/dist/objects/customer-notes.d.ts +7 -42
- package/dist/objects/customer-notes.js +7 -48
- package/dist/objects/decisions.d.ts +12 -50
- package/dist/objects/decisions.js +15 -53
- package/dist/objects/incidents.d.ts +7 -38
- package/dist/objects/incidents.js +7 -41
- package/dist/objects/policies.d.ts +11 -89
- package/dist/objects/policies.js +11 -98
- package/dist/objects/processes.d.ts +7 -52
- package/dist/objects/processes.js +7 -61
- package/dist/objects/project-briefs.d.ts +11 -55
- package/dist/objects/project-briefs.js +14 -75
- package/dist/objects/skills.d.ts +7 -42
- package/dist/objects/skills.js +8 -54
- package/dist/postinstall.js +6 -19
- package/dist/predictions/planning-fallacy.d.ts +11 -34
- package/dist/rerankers/clef.js +3 -31
- package/dist/rerankers/cross-encoder.js +4 -6
- package/dist/rerankers/jev.js +9 -6
- package/dist/rerankers/llm.d.ts +2 -11
- package/dist/rerankers/llm.js +14 -14
- package/dist/rerankers/outage-warning.d.ts +2 -1
- package/dist/rerankers/outage-warning.js +2 -1
- 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/boosts.d.ts +0 -2
- package/dist/search/boosts.js +2 -2
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid.d.ts +2 -0
- 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.js +11 -8
- package/dist/search/rrf.d.ts +7 -35
- package/dist/search/rrf.js +5 -30
- package/dist/search/vector.d.ts +7 -0
- package/dist/search/vector.js +35 -5
- package/dist/server/auth.d.ts +9 -28
- package/dist/server/auth.js +32 -25
- package/dist/server/boot.d.ts +2 -21
- package/dist/server/boot.js +63 -96
- package/dist/server/client-ip.d.ts +3 -19
- package/dist/server/client-ip.js +5 -28
- package/dist/server/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -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 +10 -44
- 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 +9 -17
- package/dist/server/route-table.js +42 -49
- package/dist/server/routes/admin.js +22 -28
- package/dist/server/routes/customer-notes.js +7 -12
- package/dist/server/routes/decisions.js +10 -17
- package/dist/server/routes/incidents.js +12 -20
- package/dist/server/routes/memories.js +12 -32
- package/dist/server/routes/object-routes.d.ts +0 -5
- package/dist/server/routes/object-routes.js +7 -15
- package/dist/server/routes/policies.js +10 -18
- package/dist/server/routes/predictions.js +13 -25
- package/dist/server/routes/processes.js +16 -26
- package/dist/server/routes/project-briefs.js +9 -16
- package/dist/server/routes/recall.js +10 -35
- package/dist/server/routes/skills.js +8 -18
- package/dist/server/server-detect.d.ts +9 -53
- package/dist/server/server-detect.js +24 -90
- package/dist/server/sleep-offload.js +4 -1
- package/dist/server/types.d.ts +12 -10
- package/dist/server/validation.d.ts +3 -1
- package/dist/server/validation.js +10 -23
- package/dist/server.d.ts +2 -2
- package/dist/server.js +3 -2
- 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 +80 -0
- package/dist/sharing/project-merge.d.ts +4 -5
- package/dist/sharing/project-merge.js +9 -7
- package/dist/sharing/scope.d.ts +4 -11
- package/dist/sharing/scope.js +4 -11
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/store/ambient.js +4 -9
- package/dist/store/audit-event.d.ts +4 -12
- package/dist/store/audit-event.js +4 -12
- package/dist/store/audit.d.ts +2 -5
- package/dist/store/audit.js +4 -12
- package/dist/store/auth.d.ts +6 -6
- package/dist/store/auth.js +10 -9
- package/dist/store/candidates.d.ts +20 -3
- package/dist/store/candidates.js +77 -48
- 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/conflicts.d.ts +4 -21
- package/dist/store/conflicts.js +71 -150
- package/dist/store/connectors/github.d.ts +10 -10
- package/dist/store/connectors/github.js +10 -10
- package/dist/store/dashboard-reads.js +4 -8
- package/dist/store/delete-and-batch.d.ts +11 -31
- package/dist/store/delete-and-batch.js +48 -64
- package/dist/store/delivery-recorder.d.ts +8 -4
- package/dist/store/delivery-recorder.js +25 -15
- package/dist/store/diagnostics.js +6 -13
- package/dist/store/dormant.d.ts +7 -29
- package/dist/store/dormant.js +15 -56
- package/dist/store/embeddings/index.d.ts +11 -80
- package/dist/store/embeddings/index.js +71 -207
- package/dist/store/embeddings/local.js +15 -32
- package/dist/store/embeddings/provider.d.ts +16 -53
- package/dist/store/embeddings/provider.js +41 -69
- package/dist/store/entry-reads.d.ts +21 -57
- package/dist/store/entry-reads.js +65 -126
- package/dist/store/entry-row.d.ts +6 -35
- package/dist/store/entry-row.js +9 -37
- package/dist/store/entry-writes.d.ts +10 -16
- package/dist/store/entry-writes.js +17 -35
- package/dist/store/goals.d.ts +3 -40
- package/dist/store/goals.js +21 -160
- 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 +20 -58
- 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 +6 -31
- package/dist/store/graph-writes.js +13 -37
- package/dist/store/half-life.d.ts +2 -1
- package/dist/store/half-life.js +14 -16
- package/dist/store/handoffs.d.ts +5 -11
- package/dist/store/handoffs.js +16 -34
- package/dist/store/index-and-stats.d.ts +6 -19
- package/dist/store/index-and-stats.js +34 -82
- package/dist/store/markdown.d.ts +2 -6
- package/dist/store/markdown.js +21 -20
- package/dist/store/mirrors.d.ts +2 -6
- package/dist/store/mirrors.js +14 -23
- package/dist/store/open.js +6 -13
- 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 +82 -79
- package/dist/store/predictions.d.ts +11 -51
- package/dist/store/predictions.js +38 -119
- package/dist/{cli → store}/quality-repair.js +15 -31
- package/dist/store/raw-archive.d.ts +4 -16
- package/dist/store/raw-archive.js +14 -29
- package/dist/store/recall-scope.d.ts +19 -79
- package/dist/store/recall-scope.js +21 -82
- package/dist/store/recall-trace.d.ts +10 -77
- package/dist/store/recall-trace.js +19 -95
- package/dist/store/rejected-values.js +7 -19
- package/dist/store/rejection.d.ts +12 -58
- package/dist/store/rejection.js +13 -65
- 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 +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +7 -38
- package/dist/store/search-rows.js +14 -50
- package/dist/store/sessions.d.ts +10 -47
- package/dist/store/sessions.js +17 -73
- package/dist/store/sqlite/connector-events-group.js +2 -2
- package/dist/store/sqlite/entry-writes-group.js +2 -2
- package/dist/store/sqlite/error-codec.js +4 -2
- package/dist/store/sqlite/executor.d.ts +2 -1
- package/dist/store/sqlite/executor.js +2 -1
- package/dist/store/sqlite/local.d.ts +3 -3
- package/dist/store/sqlite/local.js +1 -0
- package/dist/store/sqlite/object-rows.js +6 -3
- package/dist/store/sqlite/objects-group.js +4 -2
- package/dist/store/sqlite/quarantine-group.js +2 -2
- package/dist/store/sqlite/store.d.ts +1 -4
- package/dist/store/sqlite/store.js +2 -3
- 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 +10 -62
- package/dist/store/summaries.js +34 -146
- 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 -43
- package/dist/store/token-ledger.js +19 -50
- package/dist/store/usage-reports.js +5 -13
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/store/working-memory.d.ts +6 -25
- package/dist/store/working-memory.js +18 -52
- package/dist/store/yaml.d.ts +1 -5
- package/dist/store/yaml.js +2 -6
- package/dist/support-bundle.js +7 -5
- package/dist/trust/reject-flow.js +1 -3
- package/dist/util/anthropic-messages.js +14 -2
- 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/crash-handlers.d.ts +8 -1
- package/dist/util/crash-handlers.js +52 -10
- package/dist/util/env.d.ts +13 -6
- package/dist/util/env.js +14 -7
- package/dist/util/home-path.d.ts +2 -1
- package/dist/util/home-path.js +4 -2
- package/dist/util/http-retry.d.ts +3 -1
- package/dist/util/http-retry.js +26 -5
- package/dist/util/log.d.ts +3 -2
- package/dist/util/log.js +25 -9
- package/dist/util/request-scope.d.ts +2 -1
- package/dist/util/request-scope.js +2 -1
- package/dist/util/secret-detect.d.ts +5 -30
- package/dist/util/secret-detect.js +13 -39
- package/dist/util/stored-json.d.ts +1 -1
- package/dist/util/stored-json.js +1 -1
- 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/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 +1 -1
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/sharing/shared.d.ts +0 -187
- package/dist/sharing/shared.js +0 -563
- package/dist/store/vector-writes.d.ts +0 -13
- package/dist/store/vector-writes.js +0 -89
- /package/dist/{cli → store}/quality-repair.d.ts +0 -0
package/dist/cli/setup.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function
|
|
4
|
-
export declare function
|
|
1
|
+
import { type CommandContext } from './flag-values.js';
|
|
2
|
+
export declare function handleHook({ args }: CommandContext): void;
|
|
3
|
+
export declare function handleSetup({ flags }: CommandContext): void;
|
|
4
|
+
export declare function handleDailyRunner(_ctx: CommandContext): void;
|
|
5
5
|
//# sourceMappingURL=setup.d.ts.map
|
package/dist/cli/setup.js
CHANGED
|
@@ -9,10 +9,10 @@ import { installOpencodePlugin, uninstallOpencodePlugin, resolveOpencodePluginPa
|
|
|
9
9
|
import { COPILOT_CLI_MCP, VSCODE_MCP, copilotMcpSnippet, copilotPaths, installCopilot, isCopilotCliPresent, isMcpFailure, uninstallCopilot, } from '../hooks/copilot.js';
|
|
10
10
|
import { isInitialized } from '../store/open.js';
|
|
11
11
|
import { currentMachine, importUserMemories } from '../agent-memories/sync.js';
|
|
12
|
-
import { getGlobalRoot } from '../sharing/
|
|
12
|
+
import { getGlobalRoot } from '../sharing/global-store.js';
|
|
13
13
|
import { listRegisteredWorkspaces, runDailyMaintenance } from './scheduler.js';
|
|
14
14
|
import { replayCompactionsAt } from '../capture/compaction-record.js';
|
|
15
|
-
import { errorMessage, log } from '../util/log.js';
|
|
15
|
+
import { errorFields, errorMessage, log } from '../util/log.js';
|
|
16
16
|
import { envDailyStepTimeoutMs } from '../util/env.js';
|
|
17
17
|
import { writeFileAtomic } from '../util/atomic-write.js';
|
|
18
18
|
import { printError } from './output.js';
|
|
@@ -22,10 +22,9 @@ import { installCodexMemoryHooks, setupDailySchedule, warnClaudeSettingsUnusable
|
|
|
22
22
|
import { repairQualityOnceAt } from './quality-repair-once.js';
|
|
23
23
|
import { HOOK_MARKERS, HOOKS, hippoBlock, withoutHookBlock } from '../hooks/hook-blocks.js';
|
|
24
24
|
import { escapeRegex } from '../util/escape.js';
|
|
25
|
-
|
|
25
|
+
import { CliExit } from './exit.js';
|
|
26
26
|
// Hook install/uninstall
|
|
27
|
-
|
|
28
|
-
export function cmdHook(args) {
|
|
27
|
+
export function handleHook({ args }) {
|
|
29
28
|
const subcommand = args[0];
|
|
30
29
|
const target = args[1];
|
|
31
30
|
if (subcommand === 'list')
|
|
@@ -35,7 +34,7 @@ export function cmdHook(args) {
|
|
|
35
34
|
if (subcommand === 'uninstall')
|
|
36
35
|
return hookUninstall(target);
|
|
37
36
|
printError('Usage: hippo hook <install|uninstall|list> [target]');
|
|
38
|
-
|
|
37
|
+
throw new CliExit(1);
|
|
39
38
|
}
|
|
40
39
|
// Cursor has no init row, so the AGENTS.md block is usually another agent's, and Cursor reads that one as it is.
|
|
41
40
|
function othersBlock(target, text) {
|
|
@@ -57,7 +56,7 @@ function hookInstall(target) {
|
|
|
57
56
|
if (!target || !HOOKS[target]) {
|
|
58
57
|
printError(`Unknown hook target: ${target ?? '(none)'}`);
|
|
59
58
|
printError(` Available: ${[...Object.keys(HOOKS), 'copilot'].join(', ')}`);
|
|
60
|
-
|
|
59
|
+
throw new CliExit(1);
|
|
61
60
|
}
|
|
62
61
|
const hook = HOOKS[target];
|
|
63
62
|
patchAgentFile(hook, target);
|
|
@@ -103,9 +102,8 @@ function patchAgentFile(hook, target) {
|
|
|
103
102
|
}
|
|
104
103
|
}
|
|
105
104
|
else {
|
|
106
|
-
// Do not create
|
|
107
|
-
//
|
|
108
|
-
// claude-code, so the consolidation hook still runs.
|
|
105
|
+
// Do not create an agent-instructions file (CLAUDE.md, AGENTS.md, etc.) in directories without one, to avoid polluting cwd;
|
|
106
|
+
// the settings.json hook below is still installed for claude-code.
|
|
109
107
|
console.log(`${hook.file} not found in ${process.cwd()} — skipping agent-instructions patch.`);
|
|
110
108
|
console.log(` Create ${hook.file} and re-run \`hippo hook install ${target}\` if you want the agent prompt.`);
|
|
111
109
|
}
|
|
@@ -144,7 +142,7 @@ function printClaudeHookInstall(result) {
|
|
|
144
142
|
}
|
|
145
143
|
}
|
|
146
144
|
function installOpencodeHook() {
|
|
147
|
-
// opencode uses a TS plugin, not JSON hooks. See src/hooks.ts.
|
|
145
|
+
// opencode uses a TS plugin, not JSON hooks. See src/hooks/opencode.ts.
|
|
148
146
|
const result = installOpencodePlugin();
|
|
149
147
|
if (result.installed) {
|
|
150
148
|
console.log(`Installed hippo opencode plugin at ${result.pluginPath}`);
|
|
@@ -254,7 +252,7 @@ function hookUninstall(target) {
|
|
|
254
252
|
return printCopilotUninstall(uninstallCopilot());
|
|
255
253
|
if (!target || !HOOKS[target]) {
|
|
256
254
|
printError(`Unknown hook target: ${target ?? '(none)'}`);
|
|
257
|
-
|
|
255
|
+
throw new CliExit(1);
|
|
258
256
|
}
|
|
259
257
|
unpatchAgentFile(HOOKS[target], target);
|
|
260
258
|
// For Claude Code, also strip its SessionEnd/SessionStart entries.
|
|
@@ -267,9 +265,7 @@ function hookUninstall(target) {
|
|
|
267
265
|
}
|
|
268
266
|
}
|
|
269
267
|
else if (target === 'opencode') {
|
|
270
|
-
// opencode uses a TS plugin; uninstall removes the plugin file
|
|
271
|
-
// also runs the legacy-hooks migration so the downgrade/remove path
|
|
272
|
-
// leaves opencode launchable.
|
|
268
|
+
// opencode uses a TS plugin; uninstall removes the plugin file and also runs the legacy-hooks migration, so remove leaves opencode launchable.
|
|
273
269
|
if (uninstallOpencodePlugin()) {
|
|
274
270
|
console.log(`Removed hippo opencode plugin (and any legacy hooks block from opencode.json)`);
|
|
275
271
|
}
|
|
@@ -351,8 +347,8 @@ function setupDetectedTools(tools, forceAll, dryRun) {
|
|
|
351
347
|
}
|
|
352
348
|
}
|
|
353
349
|
// `hippo setup` -- one-shot configuration for every AI coding tool on the box.
|
|
354
|
-
// Detection and install logic live in
|
|
355
|
-
export function
|
|
350
|
+
// Detection and install logic live in src/hooks/.
|
|
351
|
+
export function handleSetup({ flags }) {
|
|
356
352
|
const dryRun = boolFlag(flags, 'dry-run');
|
|
357
353
|
const forceAll = boolFlag(flags, 'all');
|
|
358
354
|
const tools = detectInstalledTools();
|
|
@@ -389,14 +385,16 @@ function setupCopilot(dryRun) {
|
|
|
389
385
|
function setupJsonTool(tool, dryRun) {
|
|
390
386
|
if (tool.name === 'copilot')
|
|
391
387
|
return setupCopilot(dryRun);
|
|
388
|
+
// SAFETY: detectInstalledTools gives kind 'json-hook' only to claude-code and copilot (hooks/shared.ts), and copilot returned above.
|
|
389
|
+
const target = tool.name;
|
|
392
390
|
if (dryRun) {
|
|
393
391
|
// Resolve the real settings path so the filename is right for each tool
|
|
394
392
|
// (claude-code -> settings.json, opencode -> opencode.json).
|
|
395
|
-
const { settings } = resolveJsonHookPaths(
|
|
393
|
+
const { settings } = resolveJsonHookPaths(target);
|
|
396
394
|
console.log(`[dry-run] would install hooks in ${settings}`);
|
|
397
395
|
return;
|
|
398
396
|
}
|
|
399
|
-
const result = installJsonHooks(
|
|
397
|
+
const result = installJsonHooks(target);
|
|
400
398
|
if (warnClaudeSettingsUnusable(result, ` ${tool.name.padEnd(14)} `))
|
|
401
399
|
return;
|
|
402
400
|
const bits = [];
|
|
@@ -482,7 +480,7 @@ function dailyStepFailure(err, timeoutMs) {
|
|
|
482
480
|
return `timed out after ${timeoutMs} ms and was stopped`;
|
|
483
481
|
return errorMessage(err);
|
|
484
482
|
}
|
|
485
|
-
export function
|
|
483
|
+
export function handleDailyRunner(_ctx) {
|
|
486
484
|
const globalRoot = getGlobalRoot();
|
|
487
485
|
// No workspace sleep ever opens the global store, yet hooks in folders without a store compact into it.
|
|
488
486
|
if (isInitialized(globalRoot)) {
|
|
@@ -515,7 +513,7 @@ export function cmdDailyRunner() {
|
|
|
515
513
|
catch (err) {
|
|
516
514
|
failed++;
|
|
517
515
|
const action = args.join(' ');
|
|
518
|
-
log.error(`daily-runner failed in ${cwd} during \`${action}\`: ${dailyStepFailure(err, timeout)}`, { workspace: cwd });
|
|
516
|
+
log.error(`daily-runner failed in ${cwd} during \`${action}\`: ${dailyStepFailure(err, timeout)}`, { workspace: cwd, ...errorFields(err) });
|
|
519
517
|
}
|
|
520
518
|
});
|
|
521
519
|
console.log(`Daily maintenance complete: ${processed} workspace${processed === 1 ? '' : 's'} processed, ${failed} command failure${failed === 1 ? '' : 's'}.`);
|
package/dist/cli/shared.d.ts
CHANGED
|
@@ -1,41 +1,27 @@
|
|
|
1
1
|
import { type ChurnStaleResult } from '../learn/invalidation.js';
|
|
2
2
|
import { type AuditOp } from '../store/audit.js';
|
|
3
3
|
import { type ServerInfo } from '../server/server-detect.js';
|
|
4
|
+
import type { JsonObject } from '../store/working-memory.js';
|
|
4
5
|
import type { CliFlags } from './flag-values.js';
|
|
5
|
-
/**
|
|
6
|
-
|
|
7
|
-
* connection so callers don't have to thread a db handle. Swallows all errors
|
|
8
|
-
* — audit must never crash a CLI command.
|
|
9
|
-
*/
|
|
10
|
-
export declare function emitCliAudit(hippoRoot: string, op: AuditOp, targetId?: string, metadata?: Record<string, unknown>): void;
|
|
6
|
+
/** Emit an audit event on its own short-lived connection to `hippoRoot`'s db; swallows all errors, since audit must never crash a CLI command. */
|
|
7
|
+
export declare function emitCliAudit(hippoRoot: string, op: AuditOp, targetId?: string, metadata?: JsonObject): void;
|
|
11
8
|
export declare function requireInit(hippoRoot: string): void;
|
|
12
9
|
/** Runs detectChurnStale against every store this repo's memories can live in. */
|
|
13
10
|
export declare function runChurnStaleForRepo(hippoRoot: string, dryRun: boolean): {
|
|
14
11
|
root: string;
|
|
15
12
|
result: ChurnStaleResult;
|
|
16
13
|
}[];
|
|
17
|
-
/**
|
|
18
|
-
*
|
|
19
|
-
* `hippoRoot`. Returns:
|
|
20
|
-
* - true if the HTTP path ran (success OR a structured server error that
|
|
21
|
-
* was already surfaced to stdout/stderr by `httpFn`),
|
|
22
|
-
* - false if no server was detected, or if the detected pidfile turned out
|
|
23
|
-
* to be stale (connection refused). On stale, the pidfile is removed
|
|
24
|
-
* if it still names that dead server (a newer one may have replaced
|
|
25
|
-
* it) and the caller should fall back to the direct path.
|
|
26
|
-
*
|
|
27
|
-
* Stale pidfiles must self-heal, not crash.
|
|
28
|
-
* When HIPPO_REQUIRE_SERVER is set, both fallback paths throw instead of
|
|
29
|
-
* returning false, so a missing server fails loudly rather than silently
|
|
30
|
-
* degrading to direct mode.
|
|
31
|
-
*/
|
|
14
|
+
/** Run an HTTP-routed command if a `hippo serve` is detected: true if it ran, false on no server or a stale pidfile (removed if it names the dead server).
|
|
15
|
+
* With HIPPO_REQUIRE_SERVER set both fallbacks throw; a stale pidfile must self-heal, not crash. */
|
|
32
16
|
export declare function runViaServerIfAvailable(hippoRoot: string, httpFn: (info: ServerInfo, apiKey: string | undefined) => Promise<void>): Promise<boolean>;
|
|
33
17
|
/** True, after one line, on a shared store: this account's commits and agent notes are not its members' memories. */
|
|
34
18
|
export declare function skipLearnOnSharedStore(hippoRoot: string): boolean;
|
|
35
|
-
|
|
19
|
+
interface LearnFromRepoResult {
|
|
36
20
|
added: number;
|
|
37
21
|
skipped: number;
|
|
38
22
|
lowInfo: number;
|
|
39
|
-
}
|
|
23
|
+
}
|
|
24
|
+
export declare function learnFromRepo(hippoRoot: string, repoPath: string, days: number, label?: string): LearnFromRepoResult;
|
|
40
25
|
export declare function resolveAuthRoot(hippoRoot: string, flags: CliFlags): string;
|
|
26
|
+
export {};
|
|
41
27
|
//# sourceMappingURL=shared.d.ts.map
|
package/dist/cli/shared.js
CHANGED
|
@@ -6,7 +6,7 @@ import { isSharedStore } from '../core/config.js';
|
|
|
6
6
|
import { isInitialized } from '../store/open.js';
|
|
7
7
|
import { detectChurnStale } from '../learn/invalidation.js';
|
|
8
8
|
import { resolveProjectIdentity } from '../core/project-identity.js';
|
|
9
|
-
import { getGlobalRoot, initGlobal } from '../sharing/
|
|
9
|
+
import { getGlobalRoot, initGlobal } from '../sharing/global-store.js';
|
|
10
10
|
import { reportAuditWriteFailure } from '../store/audit.js';
|
|
11
11
|
import { sqliteSyncStore } from '../store/sqlite/store.js';
|
|
12
12
|
import * as client from './client.js';
|
|
@@ -15,11 +15,7 @@ import { resolveTenantId } from '../store/tenant.js';
|
|
|
15
15
|
import { adminActor, learn, CLI_LEARN } from '../api/index.js';
|
|
16
16
|
import { errorMessage, log } from '../util/log.js';
|
|
17
17
|
import { printError } from './output.js';
|
|
18
|
-
/**
|
|
19
|
-
* Emit an audit event against `hippoRoot`'s db. Opens its own short-lived
|
|
20
|
-
* connection so callers don't have to thread a db handle. Swallows all errors
|
|
21
|
-
* — audit must never crash a CLI command.
|
|
22
|
-
*/
|
|
18
|
+
/** Emit an audit event on its own short-lived connection to `hippoRoot`'s db; swallows all errors, since audit must never crash a CLI command. */
|
|
23
19
|
export function emitCliAudit(hippoRoot, op, targetId, metadata) {
|
|
24
20
|
try {
|
|
25
21
|
sqliteSyncStore(hippoRoot).appendAuditEvents([{
|
|
@@ -59,34 +55,16 @@ export function runChurnStaleForRepo(hippoRoot, dryRun) {
|
|
|
59
55
|
}
|
|
60
56
|
});
|
|
61
57
|
}
|
|
62
|
-
/**
|
|
63
|
-
*
|
|
64
|
-
* direct DB mode — a missing server then masks a real misconfiguration (the
|
|
65
|
-
* configured HIPPO_API_KEY is also silently discarded on fallback). Throws a
|
|
66
|
-
* clear error then. It guards only the routed writes (remember, forget, archive,
|
|
67
|
-
* promote); every other command opens the store directly, knob or not.
|
|
68
|
-
*/
|
|
58
|
+
/** With HIPPO_REQUIRE_SERVER set, throw rather than fall back to direct DB mode, which would mask a misconfiguration and discard HIPPO_API_KEY.
|
|
59
|
+
* Guards only the routed writes (remember, forget, archive, promote). */
|
|
69
60
|
function failIfServerRequired(reason) {
|
|
70
61
|
if (envRequireServer()) {
|
|
71
62
|
throw new Error(`hippo: HIPPO_REQUIRE_SERVER is set but ${reason}. ` +
|
|
72
63
|
`Start \`hippo serve\`, or unset HIPPO_REQUIRE_SERVER to allow direct-mode fallback.`);
|
|
73
64
|
}
|
|
74
65
|
}
|
|
75
|
-
/**
|
|
76
|
-
*
|
|
77
|
-
* `hippoRoot`. Returns:
|
|
78
|
-
* - true if the HTTP path ran (success OR a structured server error that
|
|
79
|
-
* was already surfaced to stdout/stderr by `httpFn`),
|
|
80
|
-
* - false if no server was detected, or if the detected pidfile turned out
|
|
81
|
-
* to be stale (connection refused). On stale, the pidfile is removed
|
|
82
|
-
* if it still names that dead server (a newer one may have replaced
|
|
83
|
-
* it) and the caller should fall back to the direct path.
|
|
84
|
-
*
|
|
85
|
-
* Stale pidfiles must self-heal, not crash.
|
|
86
|
-
* When HIPPO_REQUIRE_SERVER is set, both fallback paths throw instead of
|
|
87
|
-
* returning false, so a missing server fails loudly rather than silently
|
|
88
|
-
* degrading to direct mode.
|
|
89
|
-
*/
|
|
66
|
+
/** Run an HTTP-routed command if a `hippo serve` is detected: true if it ran, false on no server or a stale pidfile (removed if it names the dead server).
|
|
67
|
+
* With HIPPO_REQUIRE_SERVER set both fallbacks throw; a stale pidfile must self-heal, not crash. */
|
|
90
68
|
export async function runViaServerIfAvailable(hippoRoot, httpFn) {
|
|
91
69
|
const info = await detectServer(hippoRoot);
|
|
92
70
|
if (!info) {
|
|
@@ -99,7 +77,7 @@ export async function runViaServerIfAvailable(hippoRoot, httpFn) {
|
|
|
99
77
|
return true;
|
|
100
78
|
}
|
|
101
79
|
catch (err) {
|
|
102
|
-
const failure = client.classifyTransportFailure(err);
|
|
80
|
+
const failure = err instanceof Error ? client.classifyTransportFailure(err) : 'none';
|
|
103
81
|
if (failure === 'never-sent') {
|
|
104
82
|
failIfServerRequired('the server pidfile was stale (connection refused)');
|
|
105
83
|
log.warn('stale server pidfile detected, falling back to direct mode');
|
|
@@ -109,9 +87,8 @@ export async function runViaServerIfAvailable(hippoRoot, httpFn) {
|
|
|
109
87
|
return false;
|
|
110
88
|
}
|
|
111
89
|
if (failure === 'delivery-unknown') {
|
|
112
|
-
// Every caller
|
|
113
|
-
// the
|
|
114
|
-
// Leave the pidfile alone: the next command's connect-phase failure heals it.
|
|
90
|
+
// Every caller is a non-idempotent write, so replaying on the direct path would store a row the server may already have committed;
|
|
91
|
+
// leave the pidfile alone: the next command's connect-phase failure heals it.
|
|
115
92
|
printError(`hippo: the connection to ${info.url} dropped or timed out mid-request, so the write may already have been applied. Not retrying locally. Check with \`hippo recall\` before running this again.`);
|
|
116
93
|
process.exit(1);
|
|
117
94
|
}
|
package/dist/cli/slack.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
export declare function
|
|
1
|
+
import { type CommandContext } from './flag-values.js';
|
|
2
|
+
export declare function handleSlack({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
|
|
3
3
|
//# sourceMappingURL=slack.d.ts.map
|
package/dist/cli/slack.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// `hippo slack`: backfill, dead-letter queue and workspace registry for the Slack connector.
|
|
2
2
|
import { envSlackBotToken, envSlackSigningSecret, envSlackTeamId } from '../util/env.js';
|
|
3
3
|
import * as api from '../api/index.js';
|
|
4
|
-
import { resolveTenantId } from '../store/tenant.js';
|
|
5
4
|
import { listDlq } from '../connectors/dlq.js';
|
|
6
5
|
import { replayDlqEntry, slackDlq } from '../connectors/slack/dlq.js';
|
|
7
6
|
import { backfillChannel } from '../connectors/slack/backfill.js';
|
|
@@ -10,30 +9,27 @@ import { addWorkspace as addSlackWorkspace, listWorkspaces as listSlackWorkspace
|
|
|
10
9
|
import { printError } from './output.js';
|
|
11
10
|
import { printSlackBackfillUsage, printSlackWorkspacesUsage } from './usage.js';
|
|
12
11
|
import { stringFlag } from './flag-values.js';
|
|
13
|
-
|
|
12
|
+
import { CliExit } from './exit.js';
|
|
14
13
|
// Slack subcommands (`hippo slack backfill` / `hippo slack dlq list`)
|
|
15
|
-
|
|
16
|
-
function cmdSlackBackfill(hippoRoot, flags) {
|
|
14
|
+
function cmdSlackBackfill(hippoRoot, tenantId, flags) {
|
|
17
15
|
const channel = stringFlag(flags, 'channel');
|
|
18
16
|
if (!channel) {
|
|
19
17
|
printSlackBackfillUsage();
|
|
20
|
-
|
|
18
|
+
throw new CliExit(1);
|
|
21
19
|
}
|
|
22
20
|
// Real fetcher requires SLACK_BOT_TOKEN with channels:history scope.
|
|
23
21
|
const token = envSlackBotToken();
|
|
24
22
|
if (!token) {
|
|
25
23
|
printError('SLACK_BOT_TOKEN is not set. Backfill requires a Slack bot token with channels:history scope.');
|
|
26
|
-
|
|
24
|
+
throw new CliExit(2);
|
|
27
25
|
}
|
|
28
|
-
// --since is advisory in V1: the slack_cursors row drives resume, so the
|
|
29
|
-
// backfill loop always picks up where it last left off. Honoured-by-cursor
|
|
30
|
-
// semantics keep idempotency clean.
|
|
26
|
+
// --since is advisory in V1: the slack_cursors row drives resume, so the backfill loop always continues where it left off (keeps idempotency clean).
|
|
31
27
|
const sinceIso = stringFlag(flags, 'since');
|
|
32
28
|
void sinceIso;
|
|
33
29
|
const fetcher = slackHistoryFetcher(token);
|
|
34
30
|
const ctx = {
|
|
35
31
|
hippoRoot,
|
|
36
|
-
tenantId
|
|
32
|
+
tenantId,
|
|
37
33
|
actor: api.adminActor('cli:slack-backfill'),
|
|
38
34
|
};
|
|
39
35
|
backfillChannel(ctx, {
|
|
@@ -49,8 +45,8 @@ function cmdSlackBackfill(hippoRoot, flags) {
|
|
|
49
45
|
process.exit(3);
|
|
50
46
|
});
|
|
51
47
|
}
|
|
52
|
-
function cmdSlackDlqList(hippoRoot, _flags) {
|
|
53
|
-
const items = listDlq(slackDlq, hippoRoot, { tenantId
|
|
48
|
+
function cmdSlackDlqList(hippoRoot, tenantId, _flags) {
|
|
49
|
+
const items = listDlq(slackDlq, hippoRoot, { tenantId });
|
|
54
50
|
for (const it of items) {
|
|
55
51
|
console.log(`${it.id}\t${it.receivedAt}\t${it.error}`);
|
|
56
52
|
}
|
|
@@ -59,12 +55,12 @@ async function cmdSlackDlqReplay(hippoRoot, args, flags) {
|
|
|
59
55
|
const idArg = args[2];
|
|
60
56
|
if (!idArg) {
|
|
61
57
|
printError('Usage: hippo slack dlq replay <id> [--force]');
|
|
62
|
-
|
|
58
|
+
throw new CliExit(1);
|
|
63
59
|
}
|
|
64
60
|
const id = Number(idArg);
|
|
65
61
|
if (!Number.isFinite(id) || !Number.isInteger(id) || id < 1) {
|
|
66
62
|
printError(`replay: invalid id ${idArg}`);
|
|
67
|
-
|
|
63
|
+
throw new CliExit(1);
|
|
68
64
|
}
|
|
69
65
|
const force = flags.force === true;
|
|
70
66
|
const result = await replayDlqEntry({ hippoRoot }, id, {
|
|
@@ -73,7 +69,7 @@ async function cmdSlackDlqReplay(hippoRoot, args, flags) {
|
|
|
73
69
|
});
|
|
74
70
|
if (!result.ok) {
|
|
75
71
|
printError(`replay failed: status=${result.status} retry_count=${result.retryCount}${result.reason ? ` reason=${result.reason}` : ''}`);
|
|
76
|
-
|
|
72
|
+
throw new CliExit(1);
|
|
77
73
|
}
|
|
78
74
|
console.log(`replay ok: status=${result.status} memory_id=${result.memoryId ?? '(none)'} retry_count=${result.retryCount}`);
|
|
79
75
|
}
|
|
@@ -82,7 +78,7 @@ function cmdSlackWorkspacesAdd(hippoRoot, flags) {
|
|
|
82
78
|
const tenantId = (stringFlag(flags, 'tenant') ?? '').trim();
|
|
83
79
|
if (!teamId || !tenantId) {
|
|
84
80
|
printError('Usage: hippo slack workspaces add --team <T> --tenant <t>');
|
|
85
|
-
|
|
81
|
+
throw new CliExit(1);
|
|
86
82
|
}
|
|
87
83
|
const ws = addSlackWorkspace(hippoRoot, { teamId, tenantId });
|
|
88
84
|
console.log(`added: ${ws.teamId} -> ${ws.tenantId} (${ws.addedAt})`);
|
|
@@ -101,23 +97,23 @@ function cmdSlackWorkspacesRemove(hippoRoot, flags) {
|
|
|
101
97
|
const teamId = (stringFlag(flags, 'team') ?? '').trim();
|
|
102
98
|
if (!teamId) {
|
|
103
99
|
printError('Usage: hippo slack workspaces remove --team <T>');
|
|
104
|
-
|
|
100
|
+
throw new CliExit(1);
|
|
105
101
|
}
|
|
106
102
|
const removed = removeSlackWorkspace(hippoRoot, teamId);
|
|
107
103
|
if (!removed) {
|
|
108
104
|
printError(`no workspace registered for team ${teamId}`);
|
|
109
|
-
|
|
105
|
+
throw new CliExit(1);
|
|
110
106
|
}
|
|
111
107
|
console.log(`removed: ${teamId}`);
|
|
112
108
|
}
|
|
113
|
-
export async function
|
|
109
|
+
export async function handleSlack({ hippoRoot, tenantId, args, flags }) {
|
|
114
110
|
const sub = args[0];
|
|
115
111
|
if (sub === 'backfill') {
|
|
116
|
-
cmdSlackBackfill(hippoRoot, flags);
|
|
112
|
+
cmdSlackBackfill(hippoRoot, tenantId, flags);
|
|
117
113
|
return;
|
|
118
114
|
}
|
|
119
115
|
if (sub === 'dlq' && args[1] === 'list') {
|
|
120
|
-
cmdSlackDlqList(hippoRoot, flags);
|
|
116
|
+
cmdSlackDlqList(hippoRoot, tenantId, flags);
|
|
121
117
|
return;
|
|
122
118
|
}
|
|
123
119
|
if (sub === 'dlq' && args[1] === 'replay') {
|
|
@@ -139,9 +135,9 @@ export async function cmdSlack(hippoRoot, args, flags) {
|
|
|
139
135
|
return;
|
|
140
136
|
}
|
|
141
137
|
printSlackWorkspacesUsage();
|
|
142
|
-
|
|
138
|
+
throw new CliExit(1);
|
|
143
139
|
}
|
|
144
140
|
printError('Usage: hippo slack <backfill|dlq list|dlq replay <id> [--force]|workspaces add|workspaces list|workspaces remove> [...]');
|
|
145
|
-
|
|
141
|
+
throw new CliExit(1);
|
|
146
142
|
}
|
|
147
143
|
//# sourceMappingURL=slack.js.map
|
package/dist/cli/sleep.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { type CliFlags } from './flag-values.js';
|
|
1
|
+
import { type CliFlags, type CommandContext } from './flag-values.js';
|
|
2
2
|
/** Runs `hippo sleep`; with `--log-file` it also tees its output to that file. */
|
|
3
|
-
export declare function cmdSleep(hippoRoot: string, flags: CliFlags): Promise<void>;
|
|
3
|
+
export declare function cmdSleep(hippoRoot: string, tenantId: string, flags: CliFlags): Promise<void>;
|
|
4
|
+
export declare function handleSleep({ hippoRoot, tenantId, flags }: CommandContext): Promise<void>;
|
|
4
5
|
//# sourceMappingURL=sleep.d.ts.map
|
package/dist/cli/sleep.js
CHANGED
|
@@ -6,7 +6,7 @@ import { isGitRepo } from '../learn/autolearn.js';
|
|
|
6
6
|
import { importForStore, currentMachine } from '../agent-memories/sync.js';
|
|
7
7
|
import { replayCompactionsAt } from '../capture/compaction-record.js';
|
|
8
8
|
import * as api from '../api/index.js';
|
|
9
|
-
import {
|
|
9
|
+
import { cliApiContext } from './api-context.js';
|
|
10
10
|
import { sleepResultLines } from './sleep-render.js';
|
|
11
11
|
import { errorMessage, log } from '../util/log.js';
|
|
12
12
|
import { closeHippoDb, openHippoDb } from '../db/index.js';
|
|
@@ -17,10 +17,8 @@ import { printAgentImport } from './print.js';
|
|
|
17
17
|
import { repairQualityOnceAt } from './quality-repair-once.js';
|
|
18
18
|
import { printError } from './output.js';
|
|
19
19
|
/** Runs `hippo sleep`; with `--log-file` it also tees its output to that file. */
|
|
20
|
-
export async function cmdSleep(hippoRoot, flags) {
|
|
21
|
-
// Tee stdout/stderr to a log file when --log-file is set
|
|
22
|
-
// hook uses this so the output is captured somewhere the SessionStart hook
|
|
23
|
-
// can re-display it next time the agent UI starts.
|
|
20
|
+
export async function cmdSleep(hippoRoot, tenantId, flags) {
|
|
21
|
+
// Tee stdout/stderr to a log file when --log-file is set; the SessionEnd hook uses it so the SessionStart hook can re-display the output.
|
|
24
22
|
const logFile = stringFlag(flags, 'log-file') ?? null;
|
|
25
23
|
let restoreStdout = null;
|
|
26
24
|
if (logFile) {
|
|
@@ -31,17 +29,19 @@ export async function cmdSleep(hippoRoot, flags) {
|
|
|
31
29
|
const origStderrWrite = process.stderr.write.bind(process.stderr);
|
|
32
30
|
const tee = (chunk) => {
|
|
33
31
|
try {
|
|
34
|
-
const buf =
|
|
32
|
+
const buf = Buffer.isBuffer(chunk) ? chunk.toString('utf8') : String(chunk);
|
|
35
33
|
fs.appendFileSync(logFile, buf, 'utf8');
|
|
36
34
|
}
|
|
37
35
|
catch {
|
|
38
36
|
// log failures are non-fatal — still write to the real stream
|
|
39
37
|
}
|
|
40
38
|
};
|
|
39
|
+
// SAFETY: the wrapper forwards chunk, enc and cb untouched to the original write, so it keeps write's contract.
|
|
41
40
|
process.stdout.write = ((chunk, enc, cb) => {
|
|
42
41
|
tee(chunk);
|
|
43
42
|
return origStdoutWrite(chunk, enc, cb);
|
|
44
43
|
});
|
|
44
|
+
// SAFETY: the wrapper forwards chunk, enc and cb untouched to the original write, so it keeps write's contract.
|
|
45
45
|
process.stderr.write = ((chunk, enc, cb) => {
|
|
46
46
|
tee(chunk);
|
|
47
47
|
return origStderrWrite(chunk, enc, cb);
|
|
@@ -56,7 +56,7 @@ export async function cmdSleep(hippoRoot, flags) {
|
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
try {
|
|
59
|
-
await cmdSleepCore(hippoRoot, flags);
|
|
59
|
+
await cmdSleepCore(hippoRoot, tenantId, flags);
|
|
60
60
|
if (logFile)
|
|
61
61
|
console.log('[hippo] sleep complete');
|
|
62
62
|
}
|
|
@@ -70,16 +70,19 @@ export async function cmdSleep(hippoRoot, flags) {
|
|
|
70
70
|
restoreStdout();
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
|
+
export function handleSleep({ hippoRoot, tenantId, flags }) {
|
|
74
|
+
return cmdSleep(hippoRoot, tenantId, flags);
|
|
75
|
+
}
|
|
73
76
|
function renderSleepResult(result) {
|
|
74
77
|
for (const line of sleepResultLines(result))
|
|
75
78
|
console.log(line);
|
|
76
79
|
}
|
|
77
80
|
/** Fault-isolated: a failed repair warns and runs again next sleep, and never stops the sleep. */
|
|
78
|
-
function repairProjectTagsOnce(hippoRoot) {
|
|
81
|
+
function repairProjectTagsOnce(hippoRoot, tenantId) {
|
|
79
82
|
let db;
|
|
80
83
|
try {
|
|
81
84
|
db = openHippoDb(hippoRoot);
|
|
82
|
-
const r = repairOnceOnSleep(db, hippoRoot,
|
|
85
|
+
const r = repairOnceOnSleep(db, hippoRoot, tenantId);
|
|
83
86
|
if (r === null)
|
|
84
87
|
return;
|
|
85
88
|
const parts = [
|
|
@@ -97,7 +100,7 @@ function repairProjectTagsOnce(hippoRoot) {
|
|
|
97
100
|
closeHippoDb(db);
|
|
98
101
|
}
|
|
99
102
|
}
|
|
100
|
-
async function cmdSleepCore(hippoRoot, flags) {
|
|
103
|
+
async function cmdSleepCore(hippoRoot, tenantId, flags) {
|
|
101
104
|
requireInit(hippoRoot);
|
|
102
105
|
// Phase 1: Auto-learn from git and every coding agent's own memories (CLI-only, uses process.cwd() / os.homedir()).
|
|
103
106
|
// Stays in cli.ts; api.sleep covers Phase 2-6 only.
|
|
@@ -128,15 +131,11 @@ async function cmdSleepCore(hippoRoot, flags) {
|
|
|
128
131
|
const finished = replayCompactionsAt(hippoRoot, (message) => log.warn(`compaction replay: ${message}`));
|
|
129
132
|
if (finished > 0)
|
|
130
133
|
console.log(`Finished saving ${finished} compaction${finished === 1 ? '' : 's'} left over from earlier sessions.`);
|
|
131
|
-
repairProjectTagsOnce(hippoRoot);
|
|
134
|
+
repairProjectTagsOnce(hippoRoot, tenantId);
|
|
132
135
|
repairQualityOnceAt(hippoRoot);
|
|
133
136
|
}
|
|
134
137
|
// Phase 2-6: Pure-storage pipeline (consolidate + dedup + audit + share + ambient).
|
|
135
|
-
const ctx =
|
|
136
|
-
hippoRoot,
|
|
137
|
-
tenantId: resolveTenantId({}),
|
|
138
|
-
actor: api.adminActor('cli'),
|
|
139
|
-
};
|
|
138
|
+
const ctx = cliApiContext(hippoRoot, tenantId);
|
|
140
139
|
const result = await api.sleep(ctx, {
|
|
141
140
|
dryRun: boolFlag(flags, 'dry-run'),
|
|
142
141
|
noShare: boolFlag(flags, 'no-share'),
|
package/dist/cli/status.d.ts
CHANGED
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
*
|
|
7
|
-
|
|
8
|
-
* Counts are estimates (characters / 4), the same estimate every budget uses.
|
|
9
|
-
*/
|
|
10
|
-
export declare function cmdTokens(hippoRoot: string, flags: CliFlags): void;
|
|
1
|
+
import { type PhysicsParticle } from '../core/physics.js';
|
|
2
|
+
import { type CommandContext } from './flag-values.js';
|
|
3
|
+
export declare function handleStatus({ hippoRoot }: CommandContext): void;
|
|
4
|
+
export declare function physicsEnergyText(particles: PhysicsParticle[], gMemory: number): string;
|
|
5
|
+
/** `hippo tokens [--days <n>] [--json] [--global]`: the token ledger per surface, tokens saved by skipped unchanged blocks, and re-read hook tokens.
|
|
6
|
+
* Counts are estimates (characters / 4), the same estimate every budget uses. */
|
|
7
|
+
export declare function handleTokens({ hippoRoot, tenantId, flags }: CommandContext): void;
|
|
11
8
|
/** `hippo failures [--days <n>] [--json] [--global]`: failed tool calls by outcome, and repeats across sessions. */
|
|
12
|
-
export declare function
|
|
9
|
+
export declare function handleFailures({ hippoRoot, tenantId, flags }: CommandContext): void;
|
|
13
10
|
export declare function handleCorrectionLatency({ hippoRoot, flags }: CommandContext): void;
|
|
14
11
|
export declare function handleProvenance({ hippoRoot, flags }: CommandContext): void;
|
|
15
12
|
export declare function handleDoctor({ flags }: CommandContext): void;
|
|
16
13
|
export declare function handleSupportBundle({ flags }: CommandContext): void;
|
|
17
|
-
export declare function handleInspect({ hippoRoot, args }: CommandContext): void
|
|
14
|
+
export declare function handleInspect({ hippoRoot, tenantId, args }: CommandContext): Promise<void>;
|
|
18
15
|
//# sourceMappingURL=status.d.ts.map
|