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
|
@@ -1,39 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* A `process` is a "living process map": a named, ordered list of steps that
|
|
5
|
-
* evolves over time. Unlike `incident` (open->resolved->closed, no supersede),
|
|
6
|
-
* `process` REUSES the `decision` supersede path as its delta mechanism: a
|
|
7
|
-
* process evolves by being superseded by a NEW VERSION that records what
|
|
8
|
-
* changed (`change_summary`) and the full new state (`steps`), carrying a
|
|
9
|
-
* server-derived `version` counter. The version chain (walk `superseded_by`)
|
|
10
|
-
* is the changelog. Computed structural step-diffing is a deferred v2 read-side
|
|
11
|
-
* feature; the row stores enough to reconstruct any delta
|
|
12
|
-
* (predecessor.steps + successor.steps + change_summary).
|
|
13
|
-
*
|
|
14
|
-
* The `processes` table is the source of truth: a process stays `active`
|
|
15
|
-
* regardless of memory decay. A memory row mirrors the process for recall but
|
|
16
|
-
* is NOT canonical — memory_id is NULLABLE with ON DELETE SET NULL so
|
|
17
|
-
* forget/consolidate/archive gracefully orphans the process row.
|
|
18
|
-
*
|
|
19
|
-
* Lifecycle: active -> superseded (a newer version replaces it; superseded_by
|
|
20
|
-
* points to the successor) or active -> closed (retired with no successor;
|
|
21
|
-
* only an active head closes).
|
|
22
|
-
*
|
|
23
|
-
* Tenant scoping: every helper requires tenantId. BEFORE INSERT/UPDATE triggers
|
|
24
|
-
* enforce processes.tenant_id == the referenced memory's tenant_id, and a
|
|
25
|
-
* superseded_by same-tenant trigger makes cross-tenant supersession
|
|
26
|
-
* unrepresentable. Mirrors the v30 decisions pattern (src/objects/decisions.ts).
|
|
27
|
-
*
|
|
28
|
-
* Dual-write atomicity: `saveProcess` hands the memory and the process to the
|
|
29
|
-
* `objects` store group, which commits them (and, when superseding, the
|
|
30
|
-
* predecessor's UPDATE) together, so a failure in any step rolls all of them back.
|
|
31
|
-
*/
|
|
1
|
+
/** Process object: a named, ordered list of `steps` that evolves by supersession, each version recording `change_summary` and a server-derived `version`.
|
|
2
|
+
* The `processes` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall.
|
|
3
|
+
* Structural step-diffing is a deferred read-side feature; the version chain is the changelog. */
|
|
32
4
|
import type { KeysetPosition } from '../util/keyset.js';
|
|
33
5
|
import { type JsonValue } from '../util/json.js';
|
|
34
6
|
import type { SavableDescriptor } from './descriptor.js';
|
|
35
|
-
import type { Process, ProcessStatus } from '../
|
|
36
|
-
export type { Process, ProcessStatus } from '../
|
|
7
|
+
import type { Process, ProcessStatus } from '../core/object-types.js';
|
|
8
|
+
export type { Process, ProcessStatus } from '../core/object-types.js';
|
|
37
9
|
export declare const VALID_PROCESS_STATES: ReadonlySet<ProcessStatus>;
|
|
38
10
|
/** DoS / abuse caps on the steps body (untrusted at the HTTP/SDK boundary). */
|
|
39
11
|
export declare const MAX_PROCESS_STEPS = 200;
|
|
@@ -55,30 +27,13 @@ export interface ListProcessesOpts {
|
|
|
55
27
|
/** Resume after this row: the position the previous page ended on. */
|
|
56
28
|
after?: KeysetPosition;
|
|
57
29
|
}
|
|
58
|
-
/**
|
|
59
|
-
* Validate + normalise the steps body. Returns the trimmed step strings
|
|
60
|
-
* (trim-then-store, so ' x ' is stored as 'x'). Throws on a non-array, a
|
|
61
|
-
* non-string / empty element, or a cap breach. Mirrors the incident DoS-cap
|
|
62
|
-
* discipline.
|
|
63
|
-
*/
|
|
30
|
+
/** Validate and trim the steps body; throws on a non-array, a non-string or empty element, or a cap breach. */
|
|
64
31
|
export declare function validateProcessSteps(steps: JsonValue): string[];
|
|
65
32
|
export declare const PROCESS: SavableDescriptor<'process', SaveProcessOpts>;
|
|
66
|
-
/**
|
|
67
|
-
*
|
|
68
|
-
* the memory mirror + the processes row in the `objects` store group's one
|
|
69
|
-
* transaction. When supersedesProcessId is given, the referenced ACTIVE row is
|
|
70
|
-
* preflighted (status + version) BEFORE the INSERT, then UPDATEd -> superseded in
|
|
71
|
-
* the SAME transaction (CAS: WHERE status='active' AND id != <new id>; throws on
|
|
72
|
-
* changes===0 so a duplicate supersede aborts the whole write). The new row's
|
|
73
|
-
* version = predecessor.version + 1 (server-derived); change_summary carries the
|
|
74
|
-
* delta note. A fresh create has version 1 and change_summary NULL.
|
|
75
|
-
*/
|
|
33
|
+
/** Create a process, or a new version superseding an existing one, in the `objects` store group's one transaction.
|
|
34
|
+
* The supersede CAS (WHERE status='active' AND id != <new id>) throws on changes===0 so a duplicate supersede aborts the write. */
|
|
76
35
|
export declare function saveProcess(hippoRoot: string, tenantId: string, opts: SaveProcessOpts, actor?: string): Process;
|
|
77
|
-
/**
|
|
78
|
-
* Close (retire) an active process with no successor. Updates the processes row
|
|
79
|
-
* only; the memory mirror is not mutated. A superseded row is already
|
|
80
|
-
* terminal in the chain and cannot be closed.
|
|
81
|
-
*/
|
|
36
|
+
/** Close (retire) an active process with no successor; a superseded row cannot be closed. */
|
|
82
37
|
export declare function closeProcess(hippoRoot: string, tenantId: string, id: number, actor?: string): Process;
|
|
83
38
|
export declare function loadProcessById(hippoRoot: string, tenantId: string, id: number): Process | null;
|
|
84
39
|
export declare function loadProcesses(hippoRoot: string, tenantId: string, opts?: ListProcessesOpts): Process[];
|
|
@@ -1,40 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* A `process` is a "living process map": a named, ordered list of steps that
|
|
5
|
-
* evolves over time. Unlike `incident` (open->resolved->closed, no supersede),
|
|
6
|
-
* `process` REUSES the `decision` supersede path as its delta mechanism: a
|
|
7
|
-
* process evolves by being superseded by a NEW VERSION that records what
|
|
8
|
-
* changed (`change_summary`) and the full new state (`steps`), carrying a
|
|
9
|
-
* server-derived `version` counter. The version chain (walk `superseded_by`)
|
|
10
|
-
* is the changelog. Computed structural step-diffing is a deferred v2 read-side
|
|
11
|
-
* feature; the row stores enough to reconstruct any delta
|
|
12
|
-
* (predecessor.steps + successor.steps + change_summary).
|
|
13
|
-
*
|
|
14
|
-
* The `processes` table is the source of truth: a process stays `active`
|
|
15
|
-
* regardless of memory decay. A memory row mirrors the process for recall but
|
|
16
|
-
* is NOT canonical — memory_id is NULLABLE with ON DELETE SET NULL so
|
|
17
|
-
* forget/consolidate/archive gracefully orphans the process row.
|
|
18
|
-
*
|
|
19
|
-
* Lifecycle: active -> superseded (a newer version replaces it; superseded_by
|
|
20
|
-
* points to the successor) or active -> closed (retired with no successor;
|
|
21
|
-
* only an active head closes).
|
|
22
|
-
*
|
|
23
|
-
* Tenant scoping: every helper requires tenantId. BEFORE INSERT/UPDATE triggers
|
|
24
|
-
* enforce processes.tenant_id == the referenced memory's tenant_id, and a
|
|
25
|
-
* superseded_by same-tenant trigger makes cross-tenant supersession
|
|
26
|
-
* unrepresentable. Mirrors the v30 decisions pattern (src/objects/decisions.ts).
|
|
27
|
-
*
|
|
28
|
-
* Dual-write atomicity: `saveProcess` hands the memory and the process to the
|
|
29
|
-
* `objects` store group, which commits them (and, when superseding, the
|
|
30
|
-
* predecessor's UPDATE) together, so a failure in any step rolls all of them back.
|
|
31
|
-
*/
|
|
1
|
+
/** Process object: a named, ordered list of `steps` that evolves by supersession, each version recording `change_summary` and a server-derived `version`.
|
|
2
|
+
* The `processes` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall.
|
|
3
|
+
* Structural step-diffing is a deferred read-side feature; the version chain is the changelog. */
|
|
32
4
|
import { BadRequestError } from '../core/api-errors.js';
|
|
33
5
|
import { isJsonString } from '../util/json.js';
|
|
34
6
|
import { closeObjectAt, listObjectsAt, objectByIdAt, saveObjectAt } from './lifecycle.js';
|
|
35
|
-
// ---------------------------------------------------------------------------
|
|
36
|
-
// Domain types
|
|
37
|
-
// ---------------------------------------------------------------------------
|
|
38
7
|
export const VALID_PROCESS_STATES = new Set([
|
|
39
8
|
'active',
|
|
40
9
|
'superseded',
|
|
@@ -43,15 +12,7 @@ export const VALID_PROCESS_STATES = new Set([
|
|
|
43
12
|
/** DoS / abuse caps on the steps body (untrusted at the HTTP/SDK boundary). */
|
|
44
13
|
export const MAX_PROCESS_STEPS = 200;
|
|
45
14
|
export const MAX_PROCESS_STEP_LEN = 2000;
|
|
46
|
-
|
|
47
|
-
// steps validation (untrusted input)
|
|
48
|
-
// ---------------------------------------------------------------------------
|
|
49
|
-
/**
|
|
50
|
-
* Validate + normalise the steps body. Returns the trimmed step strings
|
|
51
|
-
* (trim-then-store, so ' x ' is stored as 'x'). Throws on a non-array, a
|
|
52
|
-
* non-string / empty element, or a cap breach. Mirrors the incident DoS-cap
|
|
53
|
-
* discipline.
|
|
54
|
-
*/
|
|
15
|
+
/** Validate and trim the steps body; throws on a non-array, a non-string or empty element, or a cap breach. */
|
|
55
16
|
export function validateProcessSteps(steps) {
|
|
56
17
|
if (!Array.isArray(steps)) {
|
|
57
18
|
throw new BadRequestError('saveProcess: steps must be an array of strings');
|
|
@@ -110,27 +71,12 @@ export const PROCESS = {
|
|
|
110
71
|
};
|
|
111
72
|
},
|
|
112
73
|
};
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
// ---------------------------------------------------------------------------
|
|
116
|
-
/**
|
|
117
|
-
* Create a process (or a new version that supersedes an existing one). Writes
|
|
118
|
-
* the memory mirror + the processes row in the `objects` store group's one
|
|
119
|
-
* transaction. When supersedesProcessId is given, the referenced ACTIVE row is
|
|
120
|
-
* preflighted (status + version) BEFORE the INSERT, then UPDATEd -> superseded in
|
|
121
|
-
* the SAME transaction (CAS: WHERE status='active' AND id != <new id>; throws on
|
|
122
|
-
* changes===0 so a duplicate supersede aborts the whole write). The new row's
|
|
123
|
-
* version = predecessor.version + 1 (server-derived); change_summary carries the
|
|
124
|
-
* delta note. A fresh create has version 1 and change_summary NULL.
|
|
125
|
-
*/
|
|
74
|
+
/** Create a process, or a new version superseding an existing one, in the `objects` store group's one transaction.
|
|
75
|
+
* The supersede CAS (WHERE status='active' AND id != <new id>) throws on changes===0 so a duplicate supersede aborts the write. */
|
|
126
76
|
export function saveProcess(hippoRoot, tenantId, opts, actor = 'cli') {
|
|
127
77
|
return saveObjectAt(PROCESS, { hippoRoot, tenantId, actor }, opts);
|
|
128
78
|
}
|
|
129
|
-
/**
|
|
130
|
-
* Close (retire) an active process with no successor. Updates the processes row
|
|
131
|
-
* only; the memory mirror is not mutated. A superseded row is already
|
|
132
|
-
* terminal in the chain and cannot be closed.
|
|
133
|
-
*/
|
|
79
|
+
/** Close (retire) an active process with no successor; a superseded row cannot be closed. */
|
|
134
80
|
export function closeProcess(hippoRoot, tenantId, id, actor = 'cli') {
|
|
135
81
|
return closeObjectAt(hippoRoot, PROCESS, tenantId, id, actor);
|
|
136
82
|
}
|
|
@@ -1,31 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* A `project_brief` is the living, repo-scoped summary of a repository's state: a
|
|
5
|
-
* `summary` body scoped to a `repo`, evolving via the supersede delta lifecycle.
|
|
6
|
-
* "Auto-refreshes from receipts" is scoped to a DETERMINISTIC (no-LLM) assembler:
|
|
7
|
-
* `refreshBrief` gathers the repo's recent receipts (memory rows tagged
|
|
8
|
-
* `path:<repo>`) and assembles them into the brief body. The distinguishing
|
|
9
|
-
* capability is therefore the refresh assembler (analog of skill's export
|
|
10
|
-
* renderer), not an LLM/async pipeline (deferred).
|
|
11
|
-
*
|
|
12
|
-
* Reuses the skill/process supersede machinery verbatim (superseded_by self-FK +
|
|
13
|
-
* CAS + INSERT-preflight + server-derived version + change_summary + supersede
|
|
14
|
-
* tenant-match trigger). It DROPS skill's `skill_name`/`trigger_text` and ADDS
|
|
15
|
-
* `repo` (the repo-scoping dimension) + `summary` (the brief body).
|
|
16
|
-
*
|
|
17
|
-
* The `project_briefs` table is the source of truth (survives memory decay); the
|
|
18
|
-
* memory mirror is for recall. memory_id is NULLABLE with ON DELETE SET NULL.
|
|
19
|
-
*
|
|
20
|
-
* Lifecycle: active -> superseded (a newer version replaces it) or active ->
|
|
21
|
-
* closed (retired).
|
|
22
|
-
*/
|
|
1
|
+
/** Project_brief object: the living, repo-scoped `summary` of a repository, evolving via supersession.
|
|
2
|
+
* `refreshBrief` assembles recent `path:<repo>` receipts with a deterministic (no-LLM) assembler; an LLM pipeline is deferred.
|
|
3
|
+
* The `project_briefs` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall. */
|
|
23
4
|
import type { KeysetPosition } from '../util/keyset.js';
|
|
24
5
|
import type { SavableDescriptor } from './descriptor.js';
|
|
25
6
|
import { type ObjectSaveSite } from './lifecycle.js';
|
|
26
|
-
import type { BriefStatus, ProjectBrief } from '../
|
|
7
|
+
import type { BriefStatus, ProjectBrief } from '../core/object-types.js';
|
|
27
8
|
import type { Objects } from '../store/port.js';
|
|
28
|
-
export type { BriefStatus, ProjectBrief } from '../
|
|
9
|
+
export type { BriefStatus, ProjectBrief } from '../core/object-types.js';
|
|
29
10
|
export declare const VALID_BRIEF_STATES: ReadonlySet<BriefStatus>;
|
|
30
11
|
/** Field caps (untrusted at the HTTP/SDK boundary). summary is a body, so a larger
|
|
31
12
|
* cap than the 4096 short-field convention. */
|
|
@@ -46,9 +27,8 @@ export interface SaveProjectBriefOpts {
|
|
|
46
27
|
supersedesBriefId?: number;
|
|
47
28
|
/** Extra memory tags merged after ['project_brief']. */
|
|
48
29
|
extraTags?: string[];
|
|
49
|
-
/** Internal: set by refreshBrief to the receipt count so
|
|
50
|
-
*
|
|
51
|
-
* op. Not part of the public CLI/HTTP surface. */
|
|
30
|
+
/** Internal: set by refreshBrief to the receipt count so audit metadata marks the write as an auto-refresh
|
|
31
|
+
* without a 4th audit op. Not part of the CLI/HTTP surface. */
|
|
52
32
|
refreshReceiptCount?: number;
|
|
53
33
|
}
|
|
54
34
|
export interface ListProjectBriefsOpts {
|
|
@@ -60,39 +40,14 @@ export interface ListProjectBriefsOpts {
|
|
|
60
40
|
after?: KeysetPosition;
|
|
61
41
|
}
|
|
62
42
|
export declare const PROJECT_BRIEF: SavableDescriptor<'project_brief', SaveProjectBriefOpts>;
|
|
63
|
-
/**
|
|
64
|
-
* Create a project_brief (or a new version that supersedes an existing one). Writes
|
|
65
|
-
* the memory mirror + the project_briefs row in the `objects` store group's one
|
|
66
|
-
* transaction. When supersedesBriefId is given, the referenced ACTIVE row is
|
|
67
|
-
* preflighted (status + version) BEFORE the INSERT, then CAS-UPDATEd -> superseded
|
|
68
|
-
* in the same transaction; the new version = predecessor.version + 1 (server-derived).
|
|
69
|
-
*/
|
|
43
|
+
/** Create a project_brief, or a new version superseding an existing one, in the `objects` store group's one transaction. */
|
|
70
44
|
export declare function saveProjectBrief(hippoRoot: string, tenantId: string, opts: SaveProjectBriefOpts, actor?: string): ProjectBrief;
|
|
71
|
-
/**
|
|
72
|
-
* Close (retire) an active brief. A superseded row is terminal.
|
|
73
|
-
*/
|
|
45
|
+
/** Close (retire) an active brief; a superseded row is terminal. */
|
|
74
46
|
export declare function closeProjectBrief(hippoRoot: string, tenantId: string, id: number, actor?: string): ProjectBrief;
|
|
75
47
|
export declare function loadProjectBriefById(hippoRoot: string, tenantId: string, id: number): ProjectBrief | null;
|
|
76
48
|
export declare function loadProjectBriefs(hippoRoot: string, tenantId: string, opts?: ListProjectBriefsOpts): ProjectBrief[];
|
|
77
|
-
/**
|
|
78
|
-
*
|
|
79
|
-
* per (tenant, repo); if an operator created more than one (the DB does not prevent
|
|
80
|
-
* it, consistent with every other first-class object), the MOST-RECENT active row wins.
|
|
81
|
-
*/
|
|
82
|
-
export declare function loadActiveBriefForRepo(hippoRoot: string, tenantId: string, repo: string): ProjectBrief | null;
|
|
83
|
-
/**
|
|
84
|
-
* Assemble the repo's recent receipts into a deterministic markdown digest, and
|
|
85
|
-
* return it WITH the receipt count (the count feeds refreshBrief's change_summary +
|
|
86
|
-
* audit metadata). NO LLM. Always returns a non-empty, valid summary (a brief
|
|
87
|
-
* `summary` is NOT NULL), including the zero-receipts case.
|
|
88
|
-
*
|
|
89
|
-
* A "receipt" = a tenant memory row carrying the repo's `path:<repo>` tag. The
|
|
90
|
-
* brief's OWN memory mirror (source='project_brief') is excluded so a brief never
|
|
91
|
-
* becomes its own receipt on the next refresh. The match is against the JSON-array
|
|
92
|
-
* serialization (each element is a double-quoted string `"path:hippo"`); the
|
|
93
|
-
* surrounding quotes are load-bearing — they stop `hip` matching `path:hippo`.
|
|
94
|
-
* `repo` is LIKE-escaped + parameterized (operator-supplied; security.md).
|
|
95
|
-
*/
|
|
49
|
+
/** Assemble the repo's recent receipts into a deterministic markdown digest and return it with the receipt count; never empty (summary is NOT NULL).
|
|
50
|
+
* The brief's own mirror (source='project_brief') is excluded; the quotes in the JSON-array LIKE are load-bearing (`hip` must not match `path:hippo`). */
|
|
96
51
|
export declare function assembleBriefFromReceipts(hippoRoot: string, tenantId: string, repo: string): BriefDigest;
|
|
97
52
|
/** `assembleBriefFromReceipts` over a served store's group. */
|
|
98
53
|
export declare function briefFromReceipts(objects: Objects, tenantId: string, repo: string): Promise<BriefDigest>;
|
|
@@ -100,7 +55,8 @@ export interface BriefDigest {
|
|
|
100
55
|
markdown: string;
|
|
101
56
|
receiptCount: number;
|
|
102
57
|
}
|
|
103
|
-
/** Saves a new version of the repo's brief from its receipts. The receipts are read before
|
|
58
|
+
/** Saves a new version of the repo's brief from its receipts. The receipts are read before
|
|
59
|
+
* the save's transaction, so a receipt written in between shows in the next refresh. */
|
|
104
60
|
export declare function refreshBrief(hippoRoot: string, tenantId: string, repo: string, actor?: string): ProjectBrief;
|
|
105
61
|
/** `refreshBrief` over a served store's group. */
|
|
106
62
|
export declare function refreshedBrief(objects: Objects, site: ObjectSaveSite, repo: string): Promise<ProjectBrief>;
|
|
@@ -1,33 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
* `summary` body scoped to a `repo`, evolving via the supersede delta lifecycle.
|
|
6
|
-
* "Auto-refreshes from receipts" is scoped to a DETERMINISTIC (no-LLM) assembler:
|
|
7
|
-
* `refreshBrief` gathers the repo's recent receipts (memory rows tagged
|
|
8
|
-
* `path:<repo>`) and assembles them into the brief body. The distinguishing
|
|
9
|
-
* capability is therefore the refresh assembler (analog of skill's export
|
|
10
|
-
* renderer), not an LLM/async pipeline (deferred).
|
|
11
|
-
*
|
|
12
|
-
* Reuses the skill/process supersede machinery verbatim (superseded_by self-FK +
|
|
13
|
-
* CAS + INSERT-preflight + server-derived version + change_summary + supersede
|
|
14
|
-
* tenant-match trigger). It DROPS skill's `skill_name`/`trigger_text` and ADDS
|
|
15
|
-
* `repo` (the repo-scoping dimension) + `summary` (the brief body).
|
|
16
|
-
*
|
|
17
|
-
* The `project_briefs` table is the source of truth (survives memory decay); the
|
|
18
|
-
* memory mirror is for recall. memory_id is NULLABLE with ON DELETE SET NULL.
|
|
19
|
-
*
|
|
20
|
-
* Lifecycle: active -> superseded (a newer version replaces it) or active ->
|
|
21
|
-
* closed (retired).
|
|
22
|
-
*/
|
|
1
|
+
/** Project_brief object: the living, repo-scoped `summary` of a repository, evolving via supersession.
|
|
2
|
+
* `refreshBrief` assembles recent `path:<repo>` receipts with a deterministic (no-LLM) assembler; an LLM pipeline is deferred.
|
|
3
|
+
* The `project_briefs` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall. */
|
|
4
|
+
import { truncateWithEllipsis } from '../util/ellipsize.js';
|
|
23
5
|
import { BadRequestError } from '../core/api-errors.js';
|
|
24
6
|
import { assertTenantId } from '../store/tenant.js';
|
|
25
7
|
import { checkText, requireLine } from './fields.js';
|
|
26
8
|
import { closeObjectAt, listObjectsAt, objectByIdAt, saveObject, saveObjectAt } from './lifecycle.js';
|
|
27
9
|
import { sqliteObjects } from '../store/sqlite/objects-group.js';
|
|
28
|
-
// ---------------------------------------------------------------------------
|
|
29
|
-
// Domain types
|
|
30
|
-
// ---------------------------------------------------------------------------
|
|
31
10
|
export const VALID_BRIEF_STATES = new Set([
|
|
32
11
|
'active',
|
|
33
12
|
'superseded',
|
|
@@ -79,22 +58,11 @@ export const PROJECT_BRIEF = {
|
|
|
79
58
|
function buildBriefContent(repo, summary) {
|
|
80
59
|
return `${repo}\n\n${summary}`;
|
|
81
60
|
}
|
|
82
|
-
|
|
83
|
-
// Public API
|
|
84
|
-
// ---------------------------------------------------------------------------
|
|
85
|
-
/**
|
|
86
|
-
* Create a project_brief (or a new version that supersedes an existing one). Writes
|
|
87
|
-
* the memory mirror + the project_briefs row in the `objects` store group's one
|
|
88
|
-
* transaction. When supersedesBriefId is given, the referenced ACTIVE row is
|
|
89
|
-
* preflighted (status + version) BEFORE the INSERT, then CAS-UPDATEd -> superseded
|
|
90
|
-
* in the same transaction; the new version = predecessor.version + 1 (server-derived).
|
|
91
|
-
*/
|
|
61
|
+
/** Create a project_brief, or a new version superseding an existing one, in the `objects` store group's one transaction. */
|
|
92
62
|
export function saveProjectBrief(hippoRoot, tenantId, opts, actor = 'cli') {
|
|
93
63
|
return saveObjectAt(PROJECT_BRIEF, { hippoRoot, tenantId, actor }, opts);
|
|
94
64
|
}
|
|
95
|
-
/**
|
|
96
|
-
* Close (retire) an active brief. A superseded row is terminal.
|
|
97
|
-
*/
|
|
65
|
+
/** Close (retire) an active brief; a superseded row is terminal. */
|
|
98
66
|
export function closeProjectBrief(hippoRoot, tenantId, id, actor = 'cli') {
|
|
99
67
|
return closeObjectAt(hippoRoot, PROJECT_BRIEF, tenantId, id, actor);
|
|
100
68
|
}
|
|
@@ -104,12 +72,8 @@ export function loadProjectBriefById(hippoRoot, tenantId, id) {
|
|
|
104
72
|
export function loadProjectBriefs(hippoRoot, tenantId, opts = {}) {
|
|
105
73
|
return listObjectsAt(hippoRoot, PROJECT_BRIEF, tenantId, { status: opts.status, filter: opts.repo, limit: opts.limit, after: opts.after });
|
|
106
74
|
}
|
|
107
|
-
/**
|
|
108
|
-
|
|
109
|
-
* per (tenant, repo); if an operator created more than one (the DB does not prevent
|
|
110
|
-
* it, consistent with every other first-class object), the MOST-RECENT active row wins.
|
|
111
|
-
*/
|
|
112
|
-
export function loadActiveBriefForRepo(hippoRoot, tenantId, repo) {
|
|
75
|
+
/** The repo's current active brief, or null. The DB allows several active rows per (tenant, repo); the most recent wins. */
|
|
76
|
+
function loadActiveBriefForRepo(hippoRoot, tenantId, repo) {
|
|
113
77
|
assertTenantId('loadActiveBriefForRepo', tenantId);
|
|
114
78
|
if (repo === '')
|
|
115
79
|
return null;
|
|
@@ -119,33 +83,19 @@ export function loadActiveBriefForRepo(hippoRoot, tenantId, repo) {
|
|
|
119
83
|
function newestActive(repo) {
|
|
120
84
|
return { status: 'active', filter: repo, limit: 1 };
|
|
121
85
|
}
|
|
122
|
-
// ---------------------------------------------------------------------------
|
|
123
|
-
// Refresh assembler (the distinguishing deliverable)
|
|
124
|
-
// ---------------------------------------------------------------------------
|
|
125
86
|
/** Single-line headline for a receipt: first non-empty line, newline-stripped,
|
|
126
87
|
* truncated. Deterministic + safe for the markdown bullet list. */
|
|
127
88
|
function receiptHeadline(content) {
|
|
128
89
|
const firstLine = (content ?? '').split(/\r?\n/).find((l) => l.trim().length > 0) ?? '';
|
|
129
90
|
const trimmed = firstLine.trim();
|
|
130
|
-
return trimmed
|
|
131
|
-
? `${trimmed.slice(0, MAX_RECEIPT_HEADLINE_LEN)}...`
|
|
132
|
-
: trimmed;
|
|
91
|
+
return truncateWithEllipsis(trimmed, MAX_RECEIPT_HEADLINE_LEN);
|
|
133
92
|
}
|
|
134
93
|
/** The tag a memory of the repo carries; the store matches it whole, so `path:hip` never matches `path:hippo`. */
|
|
135
94
|
function receiptTag(normalizedRepo) {
|
|
136
95
|
return `path:${normalizedRepo.toLowerCase()}`;
|
|
137
96
|
}
|
|
138
|
-
//
|
|
139
|
-
// (
|
|
140
|
-
// order is stable-but-arbitrary, not insertion order. `created DESC` is the real
|
|
141
|
-
// recency ordering.
|
|
142
|
-
//
|
|
143
|
-
// Budget-aware assembly: the digest is the
|
|
144
|
-
// brief `summary`, which saveProjectBrief caps at MAX_BRIEF_SUMMARY_LEN. The
|
|
145
|
-
// receipt/headline caps (50 x ~200) could otherwise build an ~11KB body that the
|
|
146
|
-
// store then REJECTS, breaking refresh for inputs within the advertised caps. So
|
|
147
|
-
// include receipt lines newest-first only while they fit under the cap (reserving
|
|
148
|
-
// slack for the header + an omission footer), and note the omitted remainder.
|
|
97
|
+
// `id DESC` is a lexical tiebreak on a random-ish id, so same-`created` order is stable but arbitrary; `created DESC` is the recency order.
|
|
98
|
+
// Receipt lines go newest-first only while they fit MAX_BRIEF_SUMMARY_LEN (reserving slack for header and omission footer), else the store rejects the body.
|
|
149
99
|
function fitReceiptLines(receipts) {
|
|
150
100
|
const buildReceiptLine = (r) => `- ${(r.created ?? '').slice(0, 10)} [${r.source}] ${receiptHeadline(r.content)}`;
|
|
151
101
|
const receiptLines = [];
|
|
@@ -185,28 +135,15 @@ function renderBriefDigest(normalizedRepo, receiptCount, receiptLines) {
|
|
|
185
135
|
lines.push(`_... ${omitted} more receipt(s) omitted (summary cap)._`);
|
|
186
136
|
}
|
|
187
137
|
}
|
|
188
|
-
// Belt-and-suspenders: the
|
|
189
|
-
// joined string so the store's NOT-NULL/<=cap contract can never be violated even
|
|
190
|
-
// for a pathological single oversized line.
|
|
138
|
+
// Belt-and-suspenders: hard-clamp so the store's NOT-NULL/<=cap contract holds even for a single oversized line.
|
|
191
139
|
let markdown = lines.join('\n');
|
|
192
140
|
if (markdown.length > MAX_BRIEF_SUMMARY_LEN) {
|
|
193
141
|
markdown = markdown.slice(0, MAX_BRIEF_SUMMARY_LEN);
|
|
194
142
|
}
|
|
195
143
|
return markdown;
|
|
196
144
|
}
|
|
197
|
-
/**
|
|
198
|
-
*
|
|
199
|
-
* return it WITH the receipt count (the count feeds refreshBrief's change_summary +
|
|
200
|
-
* audit metadata). NO LLM. Always returns a non-empty, valid summary (a brief
|
|
201
|
-
* `summary` is NOT NULL), including the zero-receipts case.
|
|
202
|
-
*
|
|
203
|
-
* A "receipt" = a tenant memory row carrying the repo's `path:<repo>` tag. The
|
|
204
|
-
* brief's OWN memory mirror (source='project_brief') is excluded so a brief never
|
|
205
|
-
* becomes its own receipt on the next refresh. The match is against the JSON-array
|
|
206
|
-
* serialization (each element is a double-quoted string `"path:hippo"`); the
|
|
207
|
-
* surrounding quotes are load-bearing — they stop `hip` matching `path:hippo`.
|
|
208
|
-
* `repo` is LIKE-escaped + parameterized (operator-supplied; security.md).
|
|
209
|
-
*/
|
|
145
|
+
/** Assemble the repo's recent receipts into a deterministic markdown digest and return it with the receipt count; never empty (summary is NOT NULL).
|
|
146
|
+
* The brief's own mirror (source='project_brief') is excluded; the quotes in the JSON-array LIKE are load-bearing (`hip` must not match `path:hippo`). */
|
|
210
147
|
export function assembleBriefFromReceipts(hippoRoot, tenantId, repo) {
|
|
211
148
|
const normalizedRepo = requiredRepo('assembleBriefFromReceipts', tenantId, repo);
|
|
212
149
|
return briefDigest(normalizedRepo, sqliteObjects(hippoRoot).briefReceipts(tenantId, receiptTag(normalizedRepo), MAX_BRIEF_RECEIPTS));
|
|
@@ -238,7 +175,8 @@ function refreshWrite(normalizedRepo, digest, active) {
|
|
|
238
175
|
extraTags: [receiptTag(normalizedRepo)],
|
|
239
176
|
};
|
|
240
177
|
}
|
|
241
|
-
/** Saves a new version of the repo's brief from its receipts. The receipts are read before
|
|
178
|
+
/** Saves a new version of the repo's brief from its receipts. The receipts are read before
|
|
179
|
+
* the save's transaction, so a receipt written in between shows in the next refresh. */
|
|
242
180
|
export function refreshBrief(hippoRoot, tenantId, repo, actor = 'cli') {
|
|
243
181
|
const normalizedRepo = requiredRepo('refreshBrief', tenantId, repo);
|
|
244
182
|
const digest = assembleBriefFromReceipts(hippoRoot, tenantId, normalizedRepo);
|
package/dist/objects/skills.d.ts
CHANGED
|
@@ -1,31 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* A `skill` is a reusable, agent-followable capability: an `instructions` body
|
|
5
|
-
* plus an optional `trigger` ("when to apply"), evolving via the supersede delta
|
|
6
|
-
* lifecycle. "Executable" is scoped to an agent-followable INSTRUCTION that, once
|
|
7
|
-
* exported into the agent's in-force rules (AGENTS.md / CLAUDE.md) via
|
|
8
|
-
* `exportSkills`, is executed by the agent reading it. Literal code/command
|
|
9
|
-
* execution is deferred (security; a future sandbox). The distinguishing
|
|
10
|
-
* capability is therefore the EXPORT renderer, not a runtime.
|
|
11
|
-
*
|
|
12
|
-
* Reuses the process/decision supersede machinery verbatim (superseded_by self-FK
|
|
13
|
-
* + CAS + INSERT-preflight + server-derived version + change_summary + supersede
|
|
14
|
-
* tenant-match trigger). It DROPS process's `steps` (a skill's content is a single
|
|
15
|
-
* `instructions` body) and ADDS `trigger` (stored in the `trigger_text` column -
|
|
16
|
-
* `trigger` is a SQLite reserved keyword).
|
|
17
|
-
*
|
|
18
|
-
* The `skills` table is the source of truth (survives memory decay); the memory
|
|
19
|
-
* mirror is for recall. memory_id is NULLABLE with ON DELETE SET NULL.
|
|
20
|
-
*
|
|
21
|
-
* Lifecycle: active -> superseded (a newer version replaces it) or active ->
|
|
22
|
-
* closed (retired). Export renders ACTIVE skills only.
|
|
23
|
-
*/
|
|
1
|
+
/** Skill object: an agent-followable `instructions` body plus an optional `trigger`, evolving via supersession.
|
|
2
|
+
* `exportSkills` renders ACTIVE skills into AGENTS.md / CLAUDE.md rules; running code from a skill is deferred (security).
|
|
3
|
+
* `trigger` is stored in `trigger_text` because it is a SQLite reserved keyword. */
|
|
24
4
|
import type { KeysetPosition } from '../util/keyset.js';
|
|
25
5
|
import type { SavableDescriptor } from './descriptor.js';
|
|
26
|
-
import type { Skill, SkillStatus } from '../
|
|
6
|
+
import type { Skill, SkillStatus } from '../core/object-types.js';
|
|
27
7
|
import type { Objects } from '../store/port.js';
|
|
28
|
-
export type { Skill, SkillStatus } from '../
|
|
8
|
+
export type { Skill, SkillStatus } from '../core/object-types.js';
|
|
29
9
|
export declare const VALID_SKILL_STATES: ReadonlySet<SkillStatus>;
|
|
30
10
|
/** Field caps (untrusted at the HTTP/SDK boundary). instructions is a body, so a
|
|
31
11
|
* larger cap than the 4096 short-field convention. */
|
|
@@ -54,32 +34,17 @@ export interface ListSkillsOpts {
|
|
|
54
34
|
after?: KeysetPosition;
|
|
55
35
|
}
|
|
56
36
|
export declare const SKILL: SavableDescriptor<'skill', SaveSkillOpts>;
|
|
57
|
-
/**
|
|
58
|
-
* Create a skill (or a new version that supersedes an existing one). Writes the
|
|
59
|
-
* memory mirror + the skills row in the `objects` store group's one transaction. When
|
|
60
|
-
* supersedesSkillId is given, the referenced ACTIVE row is preflighted (status +
|
|
61
|
-
* version) BEFORE the INSERT, then CAS-UPDATEd -> superseded in the same transaction;
|
|
62
|
-
* the new version = predecessor.version + 1 (server-derived).
|
|
63
|
-
*/
|
|
37
|
+
/** Create a skill, or a new version superseding an existing one, in the `objects` store group's one transaction. */
|
|
64
38
|
export declare function saveSkill(hippoRoot: string, tenantId: string, opts: SaveSkillOpts, actor?: string): Skill;
|
|
65
|
-
/**
|
|
66
|
-
* Close (retire) an active skill. A superseded row is terminal.
|
|
67
|
-
*/
|
|
39
|
+
/** Close (retire) an active skill; a superseded row is terminal. */
|
|
68
40
|
export declare function closeSkill(hippoRoot: string, tenantId: string, id: number, actor?: string): Skill;
|
|
69
41
|
export declare function loadSkillById(hippoRoot: string, tenantId: string, id: number): Skill | null;
|
|
70
42
|
export declare function loadSkills(hippoRoot: string, tenantId: string, opts?: ListSkillsOpts): Skill[];
|
|
71
43
|
export declare function loadActiveSkills(hippoRoot: string, tenantId: string, opts?: {
|
|
72
44
|
limit?: number;
|
|
73
45
|
}): Skill[];
|
|
74
|
-
/**
|
|
75
|
-
*
|
|
76
|
-
* block (one H2 per skill, ordered by skill_name ASC for determinism), and RETURN
|
|
77
|
-
* the string. Does NOT write any file. Returns '' when there are no active skills.
|
|
78
|
-
*
|
|
79
|
-
* skill_name is single-line (validated on save) so it cannot break the H2 header;
|
|
80
|
-
* instructions are emitted verbatim (operator content). Bounded by MAX_EXPORT_SKILLS
|
|
81
|
-
* active rows; each field is capped on save, so the rendered string is bounded.
|
|
82
|
-
*/
|
|
46
|
+
/** Render the tenant's ACTIVE skills into one AGENTS.md / CLAUDE.md-style markdown block (H2 per skill, ordered by skill_name) and return it; writes no file.
|
|
47
|
+
* Bounded by MAX_EXPORT_SKILLS rows; instructions are emitted verbatim. */
|
|
83
48
|
export declare function exportSkills(hippoRoot: string, tenantId: string): string;
|
|
84
49
|
/** `exportSkills` over a served store's group. */
|
|
85
50
|
export declare function skillsMarkdown(objects: Objects, tenantId: string): Promise<string>;
|
package/dist/objects/skills.js
CHANGED
|
@@ -1,34 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* A `skill` is a reusable, agent-followable capability: an `instructions` body
|
|
5
|
-
* plus an optional `trigger` ("when to apply"), evolving via the supersede delta
|
|
6
|
-
* lifecycle. "Executable" is scoped to an agent-followable INSTRUCTION that, once
|
|
7
|
-
* exported into the agent's in-force rules (AGENTS.md / CLAUDE.md) via
|
|
8
|
-
* `exportSkills`, is executed by the agent reading it. Literal code/command
|
|
9
|
-
* execution is deferred (security; a future sandbox). The distinguishing
|
|
10
|
-
* capability is therefore the EXPORT renderer, not a runtime.
|
|
11
|
-
*
|
|
12
|
-
* Reuses the process/decision supersede machinery verbatim (superseded_by self-FK
|
|
13
|
-
* + CAS + INSERT-preflight + server-derived version + change_summary + supersede
|
|
14
|
-
* tenant-match trigger). It DROPS process's `steps` (a skill's content is a single
|
|
15
|
-
* `instructions` body) and ADDS `trigger` (stored in the `trigger_text` column -
|
|
16
|
-
* `trigger` is a SQLite reserved keyword).
|
|
17
|
-
*
|
|
18
|
-
* The `skills` table is the source of truth (survives memory decay); the memory
|
|
19
|
-
* mirror is for recall. memory_id is NULLABLE with ON DELETE SET NULL.
|
|
20
|
-
*
|
|
21
|
-
* Lifecycle: active -> superseded (a newer version replaces it) or active ->
|
|
22
|
-
* closed (retired). Export renders ACTIVE skills only.
|
|
23
|
-
*/
|
|
1
|
+
/** Skill object: an agent-followable `instructions` body plus an optional `trigger`, evolving via supersession.
|
|
2
|
+
* `exportSkills` renders ACTIVE skills into AGENTS.md / CLAUDE.md rules; running code from a skill is deferred (security).
|
|
3
|
+
* `trigger` is stored in `trigger_text` because it is a SQLite reserved keyword. */
|
|
24
4
|
import { BadRequestError } from '../core/api-errors.js';
|
|
25
5
|
import { assertTenantId } from '../store/tenant.js';
|
|
26
6
|
import { checkText, requireLine } from './fields.js';
|
|
27
7
|
import { closeObjectAt, listObjectsAt, objectByIdAt, saveObjectAt } from './lifecycle.js';
|
|
28
8
|
import { sqliteObjects } from '../store/sqlite/objects-group.js';
|
|
29
|
-
// ---------------------------------------------------------------------------
|
|
30
|
-
// Domain types
|
|
31
|
-
// ---------------------------------------------------------------------------
|
|
32
9
|
export const VALID_SKILL_STATES = new Set([
|
|
33
10
|
'active',
|
|
34
11
|
'superseded',
|
|
@@ -42,9 +19,6 @@ export const MAX_SKILL_TRIGGER_LEN = 1024;
|
|
|
42
19
|
/** Aggregate bound on a single export render so the export body is never unbounded.
|
|
43
20
|
* Realistic active-skill counts are tens; 1000 is a generous bound. */
|
|
44
21
|
export const MAX_EXPORT_SKILLS = 1000;
|
|
45
|
-
// ---------------------------------------------------------------------------
|
|
46
|
-
// Validation
|
|
47
|
-
// ---------------------------------------------------------------------------
|
|
48
22
|
/** The trigger as stored, or null for none. One line, because a newline would forge a heading inside the exported **When:** line. */
|
|
49
23
|
function checkTrigger(trigger) {
|
|
50
24
|
if (trigger === undefined || trigger === null || trigger.trim().length === 0)
|
|
@@ -57,9 +31,7 @@ function checkTrigger(trigger) {
|
|
|
57
31
|
}
|
|
58
32
|
return trigger;
|
|
59
33
|
}
|
|
60
|
-
/** Recall-surface content for the memory mirror: name
|
|
61
|
-
* instructions. Named (mirrors buildProcessContent) so the recall surface is
|
|
62
|
-
* deterministic + unit-testable. */
|
|
34
|
+
/** Recall-surface content for the memory mirror: name, optional trigger, instructions. */
|
|
63
35
|
function buildSkillContent(skillName, instructions, trigger) {
|
|
64
36
|
let content = skillName;
|
|
65
37
|
if (trigger)
|
|
@@ -96,22 +68,11 @@ export const SKILL = {
|
|
|
96
68
|
};
|
|
97
69
|
},
|
|
98
70
|
};
|
|
99
|
-
|
|
100
|
-
// Public API
|
|
101
|
-
// ---------------------------------------------------------------------------
|
|
102
|
-
/**
|
|
103
|
-
* Create a skill (or a new version that supersedes an existing one). Writes the
|
|
104
|
-
* memory mirror + the skills row in the `objects` store group's one transaction. When
|
|
105
|
-
* supersedesSkillId is given, the referenced ACTIVE row is preflighted (status +
|
|
106
|
-
* version) BEFORE the INSERT, then CAS-UPDATEd -> superseded in the same transaction;
|
|
107
|
-
* the new version = predecessor.version + 1 (server-derived).
|
|
108
|
-
*/
|
|
71
|
+
/** Create a skill, or a new version superseding an existing one, in the `objects` store group's one transaction. */
|
|
109
72
|
export function saveSkill(hippoRoot, tenantId, opts, actor = 'cli') {
|
|
110
73
|
return saveObjectAt(SKILL, { hippoRoot, tenantId, actor }, opts);
|
|
111
74
|
}
|
|
112
|
-
/**
|
|
113
|
-
* Close (retire) an active skill. A superseded row is terminal.
|
|
114
|
-
*/
|
|
75
|
+
/** Close (retire) an active skill; a superseded row is terminal. */
|
|
115
76
|
export function closeSkill(hippoRoot, tenantId, id, actor = 'cli') {
|
|
116
77
|
return closeObjectAt(hippoRoot, SKILL, tenantId, id, actor);
|
|
117
78
|
}
|
|
@@ -124,15 +85,8 @@ export function loadSkills(hippoRoot, tenantId, opts = {}) {
|
|
|
124
85
|
export function loadActiveSkills(hippoRoot, tenantId, opts = {}) {
|
|
125
86
|
return loadSkills(hippoRoot, tenantId, { status: 'active', limit: opts.limit });
|
|
126
87
|
}
|
|
127
|
-
/**
|
|
128
|
-
*
|
|
129
|
-
* block (one H2 per skill, ordered by skill_name ASC for determinism), and RETURN
|
|
130
|
-
* the string. Does NOT write any file. Returns '' when there are no active skills.
|
|
131
|
-
*
|
|
132
|
-
* skill_name is single-line (validated on save) so it cannot break the H2 header;
|
|
133
|
-
* instructions are emitted verbatim (operator content). Bounded by MAX_EXPORT_SKILLS
|
|
134
|
-
* active rows; each field is capped on save, so the rendered string is bounded.
|
|
135
|
-
*/
|
|
88
|
+
/** Render the tenant's ACTIVE skills into one AGENTS.md / CLAUDE.md-style markdown block (H2 per skill, ordered by skill_name) and return it; writes no file.
|
|
89
|
+
* Bounded by MAX_EXPORT_SKILLS rows; instructions are emitted verbatim. */
|
|
136
90
|
export function exportSkills(hippoRoot, tenantId) {
|
|
137
91
|
assertTenantId('exportSkills', tenantId);
|
|
138
92
|
return skillsBlock(sqliteObjects(hippoRoot).activeSkillsByName(tenantId, MAX_EXPORT_SKILLS));
|