hippo-memory 1.59.0 → 1.60.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.
Files changed (59) hide show
  1. package/dist/api.d.ts +2 -0
  2. package/dist/api.js +25 -9
  3. package/dist/audit.js +1 -0
  4. package/dist/autolearn.js +5 -2
  5. package/dist/capture.js +8 -6
  6. package/dist/cli.d.ts +355 -0
  7. package/dist/cli.js +1236 -1081
  8. package/dist/compaction-record.js +7 -6
  9. package/dist/config.js +12 -11
  10. package/dist/connectors/github/cli-impl.js +1 -0
  11. package/dist/consolidate.js +4 -3
  12. package/dist/dag.js +7 -7
  13. package/dist/dashboard.js +4 -2
  14. package/dist/db.js +16 -3
  15. package/dist/delivery-recorder.js +1 -0
  16. package/dist/doctor.js +1 -0
  17. package/dist/dormant.js +1 -0
  18. package/dist/embedding-provider.js +3 -2
  19. package/dist/embeddings.js +10 -7
  20. package/dist/extract.js +4 -3
  21. package/dist/graph.js +3 -8
  22. package/dist/handoff.js +3 -0
  23. package/dist/hooks.js +3 -0
  24. package/dist/importers.js +6 -3
  25. package/dist/incidents.js +1 -0
  26. package/dist/judgment.js +5 -2
  27. package/dist/mcp/server.d.ts +5 -0
  28. package/dist/mcp/server.js +32 -13
  29. package/dist/memory.d.ts +5 -3
  30. package/dist/processes.js +1 -0
  31. package/dist/project-identity.d.ts +1 -1
  32. package/dist/project-identity.js +9 -4
  33. package/dist/raw-archive-mirror-cleanup.js +2 -1
  34. package/dist/recall-trace.d.ts +2 -2
  35. package/dist/recall-trace.js +10 -14
  36. package/dist/refine-llm.js +18 -10
  37. package/dist/rerankers/clef.d.ts +2 -2
  38. package/dist/rerankers/clef.js +68 -27
  39. package/dist/rerankers/cross-encoder.js +6 -4
  40. package/dist/rerankers/jev.d.ts +3 -1
  41. package/dist/rerankers/jev.js +20 -15
  42. package/dist/rerankers/llm.js +3 -3
  43. package/dist/same-text.d.ts +2 -0
  44. package/dist/same-text.js +4 -0
  45. package/dist/scheduler.js +1 -0
  46. package/dist/search.js +4 -2
  47. package/dist/secret-detect.js +1 -0
  48. package/dist/server.js +29 -12
  49. package/dist/shared.js +21 -19
  50. package/dist/stdin.js +1 -0
  51. package/dist/store.d.ts +33 -1
  52. package/dist/store.js +117 -16
  53. package/dist/token-ledger.js +1 -0
  54. package/dist/version.d.ts +1 -1
  55. package/dist/version.js +1 -1
  56. package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
  57. package/extensions/openclaw-plugin/package.json +1 -1
  58. package/openclaw.plugin.json +1 -1
  59. package/package.json +2 -1
package/dist/api.d.ts CHANGED
@@ -95,6 +95,8 @@ export { classifyOriginProject } from './project-identity.js';
95
95
  * flagged rows with no project origin never ambient-inject.
96
96
  */
97
97
  export declare function ambientSecretAdmit(e: MemoryEntry, currentProjectName: string): boolean;
98
+ /** Most rows per store a no-query context reads; past it, ranking and ambientState see the strongest by decay. */
99
+ export declare const CONTEXT_CANDIDATE_CAP = 2000;
98
100
  export declare function oneCopyPerMemory(local: readonly MemoryEntry[], global: readonly MemoryEntry[], now: Date): [MemoryEntry[], MemoryEntry[]];
99
101
  export interface RememberOpts {
100
102
  content: string;
package/dist/api.js CHANGED
@@ -9,7 +9,7 @@
9
9
  import { openHippoDb, closeHippoDb } from './db.js';
10
10
  import { BadRequestError, ConflictError, ForbiddenError, NotFoundError } from './api-errors.js';
11
11
  export { ApiError, BadRequestError, ConflictError, ForbiddenError, NotFoundError } from './api-errors.js';
12
- import { writeEntry, writeEntryDbOnly, strengthenRetrieved, stampOriginProject, writeEntryMirrors, readEntry, deleteEntry, loadRecallSearchEntries, loadEntriesByIds, loadChildrenOf, loadFreshRawMemories, loadSessionRawMemories, countSessionRawMemories, DEFAULT_SEARCH_CANDIDATE_LIMIT, removeEntryMirrors, loadActiveTaskSnapshot, loadFreshActiveTaskSnapshot, loadLatestHandoff, listSessionEvents, SNAPSHOT_AMBIENT_MAX_AGE_MS, loadIndex, saveIndex, loadAllEntries, loadAmbientCandidates, updateStats, isInitialized, markSummaryDirtyInTx, auditRejectionRefusal, memoriesBackingObjects, } from './store.js';
12
+ import { writeEntry, writeEntryDbOnly, strengthenRetrieved, stampOriginProject, writeEntryMirrors, readEntry, deleteEntry, loadRecallSearchEntries, loadEntriesByIds, loadChildrenOf, loadFreshRawMemories, loadSessionRawMemories, countSessionRawMemories, DEFAULT_SEARCH_CANDIDATE_LIMIT, removeEntryMirrors, loadActiveTaskSnapshot, loadFreshActiveTaskSnapshot, loadLatestHandoff, listSessionEvents, SNAPSHOT_AMBIENT_MAX_AGE_MS, loadIndex, saveIndex, loadAllEntries, loadAmbientCandidates, loadContextCandidates, updateStats, isInitialized, markSummaryDirtyInTx, auditRejectionRefusal, memoriesBackingObjects, } from './store.js';
13
13
  import { RejectedValueError } from './rejection.js';
14
14
  import { rejectValue, unrejectValue, listRejectionsForTenant } from './reject-flow.js';
15
15
  import { listDormantRows, readDormantSnapshot, deleteDormantRow, hasDormantRow, } from './dormant.js';
@@ -17,6 +17,7 @@ import { recordTokenUse, summarizeTokenUse } from './token-ledger.js';
17
17
  import { detectInstruction } from './instruction-detect.js';
18
18
  import { quarantineScopeFor, recordQuarantine, getQuarantineRow, listQuarantineRows, approveQuarantineRow, rejectQuarantineRow, } from './quarantine.js';
19
19
  import { summarizeFailures } from './failure-log.js';
20
+ import { log } from './log.js';
20
21
  import { formatHandoffEvidenceLine } from './handoff.js';
21
22
  import { createMemory, createSuccessor, applyOutcome, calculateStrength, markRetrieved, CHURN_STALE_TAG, COMPACTION_MEMORY_TAG, } from './memory.js';
22
23
  import { appendAuditEvent, reportAuditWriteFailure, auditQueryFields, queryAuditEvents, auditMemories, isContentWorthStoring, } from './audit.js';
@@ -128,10 +129,15 @@ export function ambientSecretAdmit(e, currentProjectName) {
128
129
  return false;
129
130
  return origin === currentProjectName;
130
131
  }
132
+ /** Most rows per store a no-query context reads; past it, ranking and ambientState see the strongest by decay. */
133
+ export const CONTEXT_CANDIDATE_CAP = 2000;
131
134
  // The pinned-only branch needs pins and recent-N candidates, not the corpus; `recall` applies there only.
132
- function loadAmbientEntries(hippoRoot, tenantId, pinnedOnly, includeRecent, admit, recall, onQualityDrop) {
133
- if (!pinnedOnly)
134
- return { entries: loadAllEntries(hippoRoot, tenantId).filter(admit) };
135
+ // Without `window` the whole store loads: a local-only query searches every local row.
136
+ function loadAmbientEntries(hippoRoot, tenantId, pinnedOnly, includeRecent, admit, recall, onQualityDrop, window) {
137
+ if (!pinnedOnly) {
138
+ const rows = window ? loadContextCandidates(hippoRoot, tenantId, window) : loadAllEntries(hippoRoot, tenantId);
139
+ return { entries: rows.filter(admit) };
140
+ }
135
141
  // DF3's quality floor runs on the recent-N slice AFTER this load, so the load
136
142
  // counts by it too, or it stops short of a store whose newest rows are junk.
137
143
  const admitAmbient = (e) => {
@@ -1314,7 +1320,7 @@ export function supersede(ctx, oldId, newContent) {
1314
1320
  writeEntryMirrors(ctx.hippoRoot, newEntry);
1315
1321
  }
1316
1322
  catch (mirrorErr) {
1317
- console.error('supersede: mirror write failed (non-fatal, will self-heal):', mirrorErr);
1323
+ log.error(`supersede: mirror write failed (non-fatal, will self-heal): ${mirrorErr instanceof Error ? mirrorErr.message : String(mirrorErr)}`);
1318
1324
  }
1319
1325
  }
1320
1326
  finally {
@@ -1359,7 +1365,7 @@ export function archiveRaw(ctx, id, reason, opts = {}) {
1359
1365
  mirrorOk = true;
1360
1366
  }
1361
1367
  catch (mirrorErr) {
1362
- console.error(`archiveRaw: mirror cleanup failed for ${id} (will retry via reaper on next openHippoDb):`, mirrorErr);
1368
+ log.error(`archiveRaw: mirror cleanup failed for ${id} (will retry via reaper on next openHippoDb): ${mirrorErr instanceof Error ? mirrorErr.message : String(mirrorErr)}`);
1363
1369
  }
1364
1370
  if (mirrorOk) {
1365
1371
  // Stamp mirror_cleaned_at now so the next openHippoDb reaper SELECT
@@ -1694,12 +1700,22 @@ export async function getContext(ctx, opts = {}) {
1694
1700
  const admit = (e) => !e.superseded_by && !isOwnCompactionItem(e) && ambientAdmit(e);
1695
1701
  const loadAdmit = obs ? obs.watchAdmit(admit) : admit;
1696
1702
  const qualityDrop = (isGlobal) => obs && !promptRecallPending ? (e) => obs.qualityDropped(e, isGlobal) : undefined;
1703
+ // The window's predicates are ones admit applies anyway, so below the cap the admitted rows are unchanged.
1704
+ const searchesLocalRows = query !== '*' && !(hasGlobal && !primaryIsGlobal);
1705
+ const window = pinnedOnly || searchesLocalRows
1706
+ ? undefined
1707
+ : {
1708
+ exactScope,
1709
+ project: includeCrossProject || currentProjectName === '' ? undefined : currentProjectName,
1710
+ cap: CONTEXT_CANDIDATE_CAP,
1711
+ now: evalNow(),
1712
+ };
1697
1713
  // Tenant-scoped loads (v1.11.1 lesson: NEVER resolveTenantId({}) here).
1698
1714
  const localLoad = hasLocal
1699
- ? loadAmbientEntries(ctx.hippoRoot, ctx.tenantId, pinnedOnly, includeRecent, loadAdmit, recallRequest, qualityDrop(primaryIsGlobal))
1715
+ ? loadAmbientEntries(ctx.hippoRoot, ctx.tenantId, pinnedOnly, includeRecent, loadAdmit, recallRequest, qualityDrop(primaryIsGlobal), window)
1700
1716
  : { entries: [] };
1701
1717
  const globalLoad = hasGlobal && !primaryIsGlobal
1702
- ? loadAmbientEntries(globalRoot, ctx.tenantId, pinnedOnly, includeRecent, loadAdmit, recallRequest, qualityDrop(true))
1718
+ ? loadAmbientEntries(globalRoot, ctx.tenantId, pinnedOnly, includeRecent, loadAdmit, recallRequest, qualityDrop(true), window)
1703
1719
  : { entries: [] };
1704
1720
  let localEntries = localLoad.entries;
1705
1721
  let globalEntries = globalLoad.entries;
@@ -2402,7 +2418,7 @@ export function quarantineApprove(ctx, id) {
2402
2418
  writeEntryMirrors(ctx.hippoRoot, restored);
2403
2419
  }
2404
2420
  catch (err) {
2405
- console.error(`quarantine: mirror rewrite failed for ${id}: ${err instanceof Error ? err.message : String(err)}`);
2421
+ log.error(`quarantine: mirror rewrite failed for ${id}: ${err instanceof Error ? err.message : String(err)}`);
2406
2422
  }
2407
2423
  }
2408
2424
  /** Keep a quarantined memory hidden for good. Admin only; the raw row is untouched (append-only). */
package/dist/audit.js CHANGED
@@ -330,6 +330,7 @@ function safeJsonParse(raw) {
330
330
  return v instanceof Object ? v : {};
331
331
  }
332
332
  catch {
333
+ // Malformed metadata reads as empty so the audit row itself stays listable.
333
334
  return {};
334
335
  }
335
336
  }
package/dist/autolearn.js CHANGED
@@ -8,6 +8,7 @@ import { loadAllEntries } from './store.js';
8
8
  import { textOverlap } from './search.js';
9
9
  import { isContentWorthStoring } from './audit.js';
10
10
  import { redactSecretsStrict } from './secret-detect.js';
11
+ import { log } from './log.js';
11
12
  /** A memory of a failed command, "Command '<cmd>' failed: <truncated stderr>"; no store is in reach, so `hippo watch` re-derives its half-life from the store's config. */
12
13
  export function captureError(exitCode, stderr, command, tenantId) {
13
14
  // Truncate to first 500 chars to avoid storing megabytes of build logs
@@ -154,7 +155,8 @@ export function isGitRepo(cwd) {
154
155
  });
155
156
  return raw.trim() === 'true';
156
157
  }
157
- catch {
158
+ catch (err) {
159
+ log.debug(`autolearn: not a git repo: ${err instanceof Error ? err.message : String(err)}`);
158
160
  return false;
159
161
  }
160
162
  }
@@ -169,7 +171,8 @@ export function fetchGitLog(cwd, days) {
169
171
  ], { encoding: 'utf8', cwd, timeout: 10000, stdio: ['pipe', 'pipe', 'pipe'], windowsHide: true });
170
172
  return raw;
171
173
  }
172
- catch {
174
+ catch (err) {
175
+ log.debug(`autolearn: git log unavailable: ${err instanceof Error ? err.message : String(err)}`);
173
176
  return '';
174
177
  }
175
178
  }
package/dist/capture.js CHANGED
@@ -26,6 +26,7 @@ import { openHippoDb, closeHippoDb } from './db.js';
26
26
  import { loadConfig } from './config.js';
27
27
  import { classifyOriginProject } from './project-identity.js';
28
28
  import { isObjectLike, isStringValue, readClaudeCodePreCompact } from './capture-contract.js';
29
+ import { log } from './log.js';
29
30
  // Sentence-level patterns
30
31
  //
31
32
  // T1 (DF2): each pattern now carries TWO capture groups — group 1 is the
@@ -521,7 +522,7 @@ export function collectSessionTurns(jsonl, visit) {
521
522
  entry = JSON.parse(line);
522
523
  }
523
524
  catch {
524
- continue;
525
+ continue; // a torn or partial transcript line carries no turn
525
526
  }
526
527
  if (!isObjectLike(entry) || !('type' in entry))
527
528
  continue;
@@ -660,7 +661,7 @@ export function resolveLastSessionTranscript(explicit, stdinText, opts) {
660
661
  }
661
662
  }
662
663
  catch {
663
- return null;
664
+ return null; // an unlistable projects dir means no transcript to find; the caller prints that
664
665
  }
665
666
  return newest?.path ?? null;
666
667
  }
@@ -698,7 +699,7 @@ function beginLogTee(logFile) {
698
699
  fs.appendFileSync(logFile, `[hippo] ${new Date().toISOString()} capturing session...\n`, 'utf8');
699
700
  }
700
701
  catch (err) {
701
- console.error(`[hippo] warning: could not open log file ${logFile}: ${errorMessage(err)}`);
702
+ log.warn(`could not open log file ${logFile}: ${errorMessage(err)}`);
702
703
  return () => { };
703
704
  }
704
705
  const origStdoutWrite = process.stdout.write.bind(process.stdout);
@@ -734,6 +735,7 @@ function beginLogTee(logFile) {
734
735
  process.stderr.write = origStderrWrite;
735
736
  };
736
737
  }
738
+ // Console lines here are the `hippo capture` command's printed result, so they stay off the logger.
737
739
  function cmdCaptureCore(hippoRoot, options) {
738
740
  const useGlobal = options.global;
739
741
  const targetRoot = useGlobal ? getGlobalRoot() : hippoRoot;
@@ -993,7 +995,7 @@ function lastPlainUserMessage(jsonl) {
993
995
  entry = JSON.parse(lines[i]);
994
996
  }
995
997
  catch {
996
- continue;
998
+ continue; // the tail read can start mid-line; skip the torn fragment
997
999
  }
998
1000
  if (!isObjectLike(entry))
999
1001
  continue;
@@ -1023,7 +1025,7 @@ function lastAssistantTextBlock(jsonl) {
1023
1025
  entry = JSON.parse(lines[i]);
1024
1026
  }
1025
1027
  catch {
1026
- continue;
1028
+ continue; // the tail read can start mid-line; skip the torn fragment
1027
1029
  }
1028
1030
  if (!isObjectLike(entry))
1029
1031
  continue;
@@ -1085,7 +1087,7 @@ function isReadableFile(filePath) {
1085
1087
  return true;
1086
1088
  }
1087
1089
  catch {
1088
- return false;
1090
+ return false; // missing and unreadable both mean "no file" to the caller
1089
1091
  }
1090
1092
  }
1091
1093
  /** PreCompact stdout is the summariser's instructions; sent before the snapshot work because a locked store can run the hook past its 30 s limit, and via writeSync because process.exit drops buffered pipe output. */
package/dist/cli.d.ts CHANGED
@@ -36,6 +36,7 @@
36
36
  import { MemoryEntry } from './memory.js';
37
37
  /** Test-only: reset the module-level recall-history Map. Call from beforeEach. */
38
38
  export declare function __resetSessionRecallHistoryCli(): void;
39
+ import { type CliFlags } from './cli/shared.js';
39
40
  export declare const BOOLEAN_FLAGS: ReadonlySet<string>;
40
41
  export declare const KNOWN_FLAGS: ReadonlySet<string>;
41
42
  export declare function parseArgs(argv: string[]): {
@@ -54,7 +55,361 @@ export declare function printContextMarkdown(items: Array<{
54
55
  showStrength?: boolean;
55
56
  heading?: string;
56
57
  }): void;
58
+ interface CommandContext {
59
+ readonly hippoRoot: string;
60
+ readonly args: string[];
61
+ readonly flags: CliFlags;
62
+ }
63
+ declare function handleRemember({ hippoRoot, args, flags }: CommandContext): Promise<void>;
64
+ declare function handleRecall({ hippoRoot, args, flags }: CommandContext): Promise<void>;
65
+ declare function handleDrill({ hippoRoot, args, flags }: CommandContext): void;
66
+ declare function handleAssemble({ hippoRoot, args, flags }: CommandContext): void;
67
+ declare function handleSupersede({ hippoRoot, args, flags }: CommandContext): void;
68
+ declare function handleExplain({ hippoRoot, args, flags }: CommandContext): Promise<void>;
69
+ declare function handleEval({ hippoRoot, args, flags }: CommandContext): Promise<void>;
70
+ declare function handleTrace({ hippoRoot, args, flags }: CommandContext): void;
71
+ declare function handlePreCompact({ hippoRoot, flags }: CommandContext): Promise<void>;
72
+ declare function handlePostCompact({ hippoRoot, flags }: CommandContext): Promise<void>;
73
+ declare function handleCaptureError({ hippoRoot }: CommandContext): Promise<void>;
74
+ declare function handleCompactResume({ hippoRoot }: CommandContext): Promise<void>;
75
+ declare function handleAudit({ hippoRoot, args, flags }: CommandContext): void;
76
+ declare function handleCorrectionLatency({ hippoRoot, flags }: CommandContext): void;
77
+ declare function handleProvenance({ hippoRoot, flags }: CommandContext): void;
78
+ declare function handleDoctor({ flags }: CommandContext): void;
79
+ declare function handleSupportBundle({ flags }: CommandContext): void;
80
+ declare function handleForget({ hippoRoot, args, flags }: CommandContext): Promise<void>;
81
+ declare function handleInspect({ hippoRoot, args }: CommandContext): void;
82
+ declare function handleContext({ hippoRoot, args, flags }: CommandContext): Promise<void>;
83
+ declare function handleWatch({ hippoRoot, args }: CommandContext): Promise<void>;
84
+ declare function handlePromote({ hippoRoot, args }: CommandContext): Promise<void>;
85
+ declare function handleShare({ hippoRoot, args, flags }: CommandContext): void;
86
+ declare function handlePeers({ flags }: CommandContext): void;
87
+ declare function handleExport({ hippoRoot, args, flags }: CommandContext): void;
88
+ declare function handleCapture({ hippoRoot, flags }: CommandContext): Promise<void>;
89
+ declare function handleDashboard({ hippoRoot, flags }: CommandContext): Promise<void>;
90
+ declare function handleMcp(): Promise<void>;
91
+ declare function handleServe({ hippoRoot, flags }: CommandContext): Promise<void>;
92
+ declare function handleInvalidate({ hippoRoot, args, flags }: CommandContext): void;
93
+ /** Every verb main() dispatches, keyed by name, with its handler, aliases and help blocks. */
94
+ export declare const COMMANDS: {
95
+ init: {
96
+ run: ({ hippoRoot, flags }: CommandContext) => void;
97
+ usage: string[];
98
+ };
99
+ remember: {
100
+ run: typeof handleRemember;
101
+ usage: string[];
102
+ };
103
+ recall: {
104
+ run: typeof handleRecall;
105
+ usage: string[];
106
+ };
107
+ drill: {
108
+ run: typeof handleDrill;
109
+ usage: string[];
110
+ };
111
+ assemble: {
112
+ run: typeof handleAssemble;
113
+ usage: string[];
114
+ };
115
+ supersede: {
116
+ run: typeof handleSupersede;
117
+ usage: string[];
118
+ };
119
+ explain: {
120
+ run: typeof handleExplain;
121
+ usage: string[];
122
+ };
123
+ eval: {
124
+ run: typeof handleEval;
125
+ usage: string[];
126
+ };
127
+ trace: {
128
+ run: typeof handleTrace;
129
+ usage: string[];
130
+ };
131
+ refine: {
132
+ run: ({ hippoRoot, flags }: CommandContext) => Promise<void>;
133
+ usage: string[];
134
+ };
135
+ sleep: {
136
+ run: ({ hippoRoot, flags }: CommandContext) => Promise<void>;
137
+ usage: string[];
138
+ };
139
+ 'last-sleep': {
140
+ run: ({ flags }: CommandContext) => void;
141
+ usage: string[];
142
+ };
143
+ 'session-end': {
144
+ run: ({ hippoRoot, flags }: CommandContext) => Promise<void>;
145
+ usage: string[];
146
+ };
147
+ '__session-end-worker': {
148
+ run: ({ hippoRoot, flags }: CommandContext) => Promise<void>;
149
+ usage: never[];
150
+ };
151
+ 'pre-compact': {
152
+ run: typeof handlePreCompact;
153
+ usage: string[];
154
+ };
155
+ 'post-compact': {
156
+ run: typeof handlePostCompact;
157
+ usage: string[];
158
+ };
159
+ 'capture-error': {
160
+ run: typeof handleCaptureError;
161
+ usage: string[];
162
+ };
163
+ 'compact-resume': {
164
+ run: typeof handleCompactResume;
165
+ usage: string[];
166
+ };
167
+ 'codex-run': {
168
+ run: ({ hippoRoot, args }: CommandContext) => void;
169
+ usage: string[];
170
+ };
171
+ '__codex-session-end-worker': {
172
+ run: ({ hippoRoot, flags }: CommandContext) => Promise<void>;
173
+ usage: never[];
174
+ };
175
+ dedup: {
176
+ run: ({ hippoRoot, flags }: CommandContext) => void;
177
+ usage: string[];
178
+ };
179
+ dag: {
180
+ run: ({ hippoRoot, flags }: CommandContext) => void;
181
+ usage: string[];
182
+ };
183
+ auth: {
184
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
185
+ usage: string[];
186
+ };
187
+ goal: {
188
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
189
+ usage: string[];
190
+ };
191
+ slack: {
192
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
193
+ usage: string[];
194
+ };
195
+ github: {
196
+ run: ({ hippoRoot, args, flags }: CommandContext) => Promise<void>;
197
+ usage: string[];
198
+ };
199
+ audit: {
200
+ run: typeof handleAudit;
201
+ usage: string[];
202
+ };
203
+ 'correction-latency': {
204
+ run: typeof handleCorrectionLatency;
205
+ usage: string[];
206
+ };
207
+ provenance: {
208
+ run: typeof handleProvenance;
209
+ usage: string[];
210
+ };
211
+ status: {
212
+ run: ({ hippoRoot }: CommandContext) => void;
213
+ usage: string[];
214
+ };
215
+ outcome: {
216
+ run: ({ hippoRoot, flags }: CommandContext) => void;
217
+ usage: string[];
218
+ };
219
+ conflicts: {
220
+ run: ({ hippoRoot, flags }: CommandContext) => void;
221
+ usage: string[];
222
+ };
223
+ resolve: {
224
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
225
+ usage: string[];
226
+ };
227
+ reject: {
228
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
229
+ usage: string[];
230
+ };
231
+ rejections: {
232
+ run: ({ hippoRoot, flags }: CommandContext) => void;
233
+ usage: string[];
234
+ };
235
+ unreject: {
236
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
237
+ usage: string[];
238
+ };
239
+ dormant: {
240
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
241
+ usage: string[];
242
+ };
243
+ projects: {
244
+ run: ({ hippoRoot, args, flags }: CommandContext) => Promise<void>;
245
+ usage: string[];
246
+ };
247
+ quarantine: {
248
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
249
+ usage: string[];
250
+ };
251
+ tokens: {
252
+ run: ({ hippoRoot, flags }: CommandContext) => void;
253
+ usage: string[];
254
+ };
255
+ failures: {
256
+ run: ({ hippoRoot, flags }: CommandContext) => void;
257
+ usage: string[];
258
+ };
259
+ doctor: {
260
+ run: typeof handleDoctor;
261
+ usage: string[];
262
+ };
263
+ 'support-bundle': {
264
+ run: typeof handleSupportBundle;
265
+ usage: string[];
266
+ };
267
+ snapshot: {
268
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
269
+ usage: string[];
270
+ };
271
+ session: {
272
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
273
+ usage: string[];
274
+ };
275
+ handoff: {
276
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
277
+ usage: string[];
278
+ };
279
+ card: {
280
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
281
+ usage: string[];
282
+ };
283
+ predict: {
284
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
285
+ usage: string[];
286
+ };
287
+ current: {
288
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
289
+ usage: string[];
290
+ };
291
+ forget: {
292
+ run: typeof handleForget;
293
+ usage: string[];
294
+ };
295
+ inspect: {
296
+ run: typeof handleInspect;
297
+ usage: string[];
298
+ };
299
+ context: {
300
+ run: typeof handleContext;
301
+ usage: string[];
302
+ };
303
+ hook: {
304
+ run: ({ args, flags }: CommandContext) => void;
305
+ usage: string[];
306
+ };
307
+ setup: {
308
+ run: ({ flags }: CommandContext) => void;
309
+ usage: string[];
310
+ };
311
+ 'daily-runner': {
312
+ run: () => void;
313
+ usage: string[];
314
+ };
315
+ embed: {
316
+ run: ({ hippoRoot, flags }: CommandContext) => Promise<void>;
317
+ usage: string[];
318
+ };
319
+ watch: {
320
+ run: typeof handleWatch;
321
+ usage: string[];
322
+ };
323
+ learn: {
324
+ run: ({ hippoRoot, flags }: CommandContext) => void;
325
+ usage: string[];
326
+ };
327
+ promote: {
328
+ run: typeof handlePromote;
329
+ usage: string[];
330
+ };
331
+ sync: {
332
+ run: ({ hippoRoot, flags }: CommandContext) => void;
333
+ usage: string[];
334
+ };
335
+ share: {
336
+ run: typeof handleShare;
337
+ usage: string[];
338
+ };
339
+ peers: {
340
+ run: typeof handlePeers;
341
+ usage: string[];
342
+ };
343
+ import: {
344
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
345
+ usage: string[];
346
+ };
347
+ export: {
348
+ run: typeof handleExport;
349
+ usage: string[];
350
+ };
351
+ capture: {
352
+ run: typeof handleCapture;
353
+ usage: string[];
354
+ };
355
+ dashboard: {
356
+ run: typeof handleDashboard;
357
+ usage: string[];
358
+ };
359
+ wm: {
360
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
361
+ usage: string[];
362
+ };
363
+ mcp: {
364
+ run: typeof handleMcp;
365
+ usage: string[];
366
+ };
367
+ serve: {
368
+ run: typeof handleServe;
369
+ usage: string[];
370
+ };
371
+ invalidate: {
372
+ run: typeof handleInvalidate;
373
+ usage: string[];
374
+ };
375
+ decide: {
376
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
377
+ usage: string[];
378
+ };
379
+ incident: {
380
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
381
+ usage: string[];
382
+ };
383
+ process: {
384
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
385
+ usage: string[];
386
+ };
387
+ policy: {
388
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
389
+ usage: string[];
390
+ };
391
+ skill: {
392
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
393
+ usage: string[];
394
+ };
395
+ brief: {
396
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
397
+ aliases: string[];
398
+ usage: string[];
399
+ };
400
+ note: {
401
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
402
+ aliases: string[];
403
+ usage: string[];
404
+ };
405
+ graph: {
406
+ run: ({ hippoRoot, args, flags }: CommandContext) => void;
407
+ usage: string[];
408
+ };
409
+ };
57
410
  export declare function usageText(): string;
411
+ /** One verb's help blocks as `hippo <verb> --help` prints them, or null for a verb with none. */
58
412
  export declare function verbUsage(verb: string): string | null;
59
413
  export declare function runCli(argv?: string[]): Promise<void>;
414
+ export {};
60
415
  //# sourceMappingURL=cli.d.ts.map