@getrift/rift 0.1.0-beta.1 → 0.1.0-beta.11

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 (207) hide show
  1. package/README.md +154 -0
  2. package/dist/src/auth/keychain.d.ts +9 -0
  3. package/dist/src/auth/keychain.d.ts.map +1 -1
  4. package/dist/src/auth/keychain.js +37 -0
  5. package/dist/src/auth/keychain.js.map +1 -1
  6. package/dist/src/capture/recover-quarantine.d.ts +221 -0
  7. package/dist/src/capture/recover-quarantine.d.ts.map +1 -0
  8. package/dist/src/capture/recover-quarantine.js +453 -0
  9. package/dist/src/capture/recover-quarantine.js.map +1 -0
  10. package/dist/src/cli/commands/backfill.d.ts.map +1 -1
  11. package/dist/src/cli/commands/backfill.js +5 -2
  12. package/dist/src/cli/commands/backfill.js.map +1 -1
  13. package/dist/src/cli/commands/capture-recover.d.ts +12 -0
  14. package/dist/src/cli/commands/capture-recover.d.ts.map +1 -0
  15. package/dist/src/cli/commands/capture-recover.js +120 -0
  16. package/dist/src/cli/commands/capture-recover.js.map +1 -0
  17. package/dist/src/cli/commands/capture.d.ts.map +1 -1
  18. package/dist/src/cli/commands/capture.js +10 -4
  19. package/dist/src/cli/commands/capture.js.map +1 -1
  20. package/dist/src/cli/commands/feedback.d.ts.map +1 -1
  21. package/dist/src/cli/commands/feedback.js +6 -2
  22. package/dist/src/cli/commands/feedback.js.map +1 -1
  23. package/dist/src/cli/commands/mcp-install.js +5 -2
  24. package/dist/src/cli/commands/mcp-install.js.map +1 -1
  25. package/dist/src/cli/commands/onboard.d.ts +24 -0
  26. package/dist/src/cli/commands/onboard.d.ts.map +1 -1
  27. package/dist/src/cli/commands/onboard.js +119 -21
  28. package/dist/src/cli/commands/onboard.js.map +1 -1
  29. package/dist/src/cli/commands/rebuild.d.ts.map +1 -1
  30. package/dist/src/cli/commands/rebuild.js +6 -3
  31. package/dist/src/cli/commands/rebuild.js.map +1 -1
  32. package/dist/src/cli/commands/review.d.ts.map +1 -1
  33. package/dist/src/cli/commands/review.js +22 -7
  34. package/dist/src/cli/commands/review.js.map +1 -1
  35. package/dist/src/cli/commands/search.d.ts.map +1 -1
  36. package/dist/src/cli/commands/search.js +28 -4
  37. package/dist/src/cli/commands/search.js.map +1 -1
  38. package/dist/src/cli/commands/status.d.ts.map +1 -1
  39. package/dist/src/cli/commands/status.js +48 -2
  40. package/dist/src/cli/commands/status.js.map +1 -1
  41. package/dist/src/cli/commands/token-issue.d.ts.map +1 -1
  42. package/dist/src/cli/commands/token-issue.js +9 -1
  43. package/dist/src/cli/commands/token-issue.js.map +1 -1
  44. package/dist/src/cli/commands/triage.d.ts.map +1 -1
  45. package/dist/src/cli/commands/triage.js +7 -5
  46. package/dist/src/cli/commands/triage.js.map +1 -1
  47. package/dist/src/cli/commands/update.d.ts +26 -0
  48. package/dist/src/cli/commands/update.d.ts.map +1 -0
  49. package/dist/src/cli/commands/update.js +130 -0
  50. package/dist/src/cli/commands/update.js.map +1 -0
  51. package/dist/src/cli/default-config-path.d.ts +15 -0
  52. package/dist/src/cli/default-config-path.d.ts.map +1 -0
  53. package/dist/src/cli/default-config-path.js +27 -0
  54. package/dist/src/cli/default-config-path.js.map +1 -0
  55. package/dist/src/cli/http-client.d.ts +56 -1
  56. package/dist/src/cli/http-client.d.ts.map +1 -1
  57. package/dist/src/cli/http-client.js +161 -6
  58. package/dist/src/cli/http-client.js.map +1 -1
  59. package/dist/src/cli/index.d.ts.map +1 -1
  60. package/dist/src/cli/index.js +25 -6
  61. package/dist/src/cli/index.js.map +1 -1
  62. package/dist/src/cli/status/friend-header.d.ts.map +1 -1
  63. package/dist/src/cli/status/friend-header.js +117 -7
  64. package/dist/src/cli/status/friend-header.js.map +1 -1
  65. package/dist/src/ingestion/inbox-core/conversation-fingerprint.d.ts +2 -0
  66. package/dist/src/ingestion/inbox-core/conversation-fingerprint.d.ts.map +1 -0
  67. package/dist/src/ingestion/inbox-core/conversation-fingerprint.js +27 -0
  68. package/dist/src/ingestion/inbox-core/conversation-fingerprint.js.map +1 -0
  69. package/dist/src/ingestion/inbox-core/conversation-key.d.ts +2 -0
  70. package/dist/src/ingestion/inbox-core/conversation-key.d.ts.map +1 -0
  71. package/dist/src/ingestion/inbox-core/conversation-key.js +31 -0
  72. package/dist/src/ingestion/inbox-core/conversation-key.js.map +1 -0
  73. package/dist/src/ingestion/inbox-core/extensions.d.ts +3 -0
  74. package/dist/src/ingestion/inbox-core/extensions.d.ts.map +1 -0
  75. package/dist/src/ingestion/inbox-core/extensions.js +16 -0
  76. package/dist/src/ingestion/inbox-core/extensions.js.map +1 -0
  77. package/dist/src/ingestion/inbox-core/idempotency.d.ts +2 -0
  78. package/dist/src/ingestion/inbox-core/idempotency.d.ts.map +1 -0
  79. package/dist/src/ingestion/inbox-core/idempotency.js +22 -0
  80. package/dist/src/ingestion/inbox-core/idempotency.js.map +1 -0
  81. package/dist/src/ingestion/inbox-core/index.d.ts +20 -0
  82. package/dist/src/ingestion/inbox-core/index.d.ts.map +1 -0
  83. package/dist/src/ingestion/inbox-core/index.js +20 -0
  84. package/dist/src/ingestion/inbox-core/index.js.map +1 -0
  85. package/dist/src/ingestion/inbox-core/source-detection.d.ts +2 -0
  86. package/dist/src/ingestion/inbox-core/source-detection.d.ts.map +1 -0
  87. package/dist/src/ingestion/inbox-core/source-detection.js +23 -0
  88. package/dist/src/ingestion/inbox-core/source-detection.js.map +1 -0
  89. package/dist/src/ingestion/inbox-core/source-sniffer.d.ts +11 -0
  90. package/dist/src/ingestion/inbox-core/source-sniffer.d.ts.map +1 -0
  91. package/dist/src/ingestion/inbox-core/source-sniffer.js +69 -0
  92. package/dist/src/ingestion/inbox-core/source-sniffer.js.map +1 -0
  93. package/dist/src/ingestion/inbox-core/zip-sniffer.d.ts +70 -0
  94. package/dist/src/ingestion/inbox-core/zip-sniffer.d.ts.map +1 -0
  95. package/dist/src/ingestion/inbox-core/zip-sniffer.js +161 -0
  96. package/dist/src/ingestion/inbox-core/zip-sniffer.js.map +1 -0
  97. package/dist/src/ingestion/inbox-watcher.d.ts.map +1 -1
  98. package/dist/src/ingestion/inbox-watcher.js +34 -50
  99. package/dist/src/ingestion/inbox-watcher.js.map +1 -1
  100. package/dist/src/ingestion/indexer.d.ts +7 -0
  101. package/dist/src/ingestion/indexer.d.ts.map +1 -1
  102. package/dist/src/ingestion/indexer.js +36 -2
  103. package/dist/src/ingestion/indexer.js.map +1 -1
  104. package/dist/src/ingestion/metadata-extraction.d.ts +8 -5
  105. package/dist/src/ingestion/metadata-extraction.d.ts.map +1 -1
  106. package/dist/src/ingestion/metadata-extraction.js +24 -5
  107. package/dist/src/ingestion/metadata-extraction.js.map +1 -1
  108. package/dist/src/ingestion/skip-quarantine.d.ts +10 -0
  109. package/dist/src/ingestion/skip-quarantine.d.ts.map +1 -0
  110. package/dist/src/ingestion/skip-quarantine.js +35 -0
  111. package/dist/src/ingestion/skip-quarantine.js.map +1 -0
  112. package/dist/src/jobs/handlers/compact.d.ts.map +1 -1
  113. package/dist/src/jobs/handlers/compact.js +25 -4
  114. package/dist/src/jobs/handlers/compact.js.map +1 -1
  115. package/dist/src/jobs/handlers/ingest.d.ts.map +1 -1
  116. package/dist/src/jobs/handlers/ingest.js +214 -36
  117. package/dist/src/jobs/handlers/ingest.js.map +1 -1
  118. package/dist/src/jobs/handlers/reconcile.d.ts.map +1 -1
  119. package/dist/src/jobs/handlers/reconcile.js +30 -8
  120. package/dist/src/jobs/handlers/reconcile.js.map +1 -1
  121. package/dist/src/jobs/handlers/reindex.d.ts.map +1 -1
  122. package/dist/src/jobs/handlers/reindex.js +12 -2
  123. package/dist/src/jobs/handlers/reindex.js.map +1 -1
  124. package/dist/src/jobs/handlers/save.d.ts.map +1 -1
  125. package/dist/src/jobs/handlers/save.js +9 -2
  126. package/dist/src/jobs/handlers/save.js.map +1 -1
  127. package/dist/src/jobs/queue.d.ts +11 -0
  128. package/dist/src/jobs/queue.d.ts.map +1 -1
  129. package/dist/src/jobs/queue.js +18 -0
  130. package/dist/src/jobs/queue.js.map +1 -1
  131. package/dist/src/jobs/worker-entry.d.ts.map +1 -1
  132. package/dist/src/jobs/worker-entry.js +2 -0
  133. package/dist/src/jobs/worker-entry.js.map +1 -1
  134. package/dist/src/main.js +36 -4
  135. package/dist/src/main.js.map +1 -1
  136. package/dist/src/mcp/errors.d.ts.map +1 -1
  137. package/dist/src/mcp/errors.js +20 -1
  138. package/dist/src/mcp/errors.js.map +1 -1
  139. package/dist/src/mcp/tools/context-pack.d.ts.map +1 -1
  140. package/dist/src/mcp/tools/context-pack.js +5 -2
  141. package/dist/src/mcp/tools/context-pack.js.map +1 -1
  142. package/dist/src/mcp/tools/search.d.ts +6 -2
  143. package/dist/src/mcp/tools/search.d.ts.map +1 -1
  144. package/dist/src/mcp/tools/search.js +34 -4
  145. package/dist/src/mcp/tools/search.js.map +1 -1
  146. package/dist/src/observability/embedding-events.d.ts +52 -0
  147. package/dist/src/observability/embedding-events.d.ts.map +1 -0
  148. package/dist/src/observability/embedding-events.js +149 -0
  149. package/dist/src/observability/embedding-events.js.map +1 -0
  150. package/dist/src/observability/index-events.d.ts +70 -0
  151. package/dist/src/observability/index-events.d.ts.map +1 -0
  152. package/dist/src/observability/index-events.js +148 -0
  153. package/dist/src/observability/index-events.js.map +1 -0
  154. package/dist/src/observability/tool-usage-stats.d.ts +69 -4
  155. package/dist/src/observability/tool-usage-stats.d.ts.map +1 -1
  156. package/dist/src/observability/tool-usage-stats.js +88 -31
  157. package/dist/src/observability/tool-usage-stats.js.map +1 -1
  158. package/dist/src/observability/tool-usage.d.ts +100 -7
  159. package/dist/src/observability/tool-usage.d.ts.map +1 -1
  160. package/dist/src/observability/tool-usage.js +196 -33
  161. package/dist/src/observability/tool-usage.js.map +1 -1
  162. package/dist/src/observability/version-check.d.ts +70 -0
  163. package/dist/src/observability/version-check.d.ts.map +1 -0
  164. package/dist/src/observability/version-check.js +197 -0
  165. package/dist/src/observability/version-check.js.map +1 -0
  166. package/dist/src/providers/ollama-embed.d.ts +2 -1
  167. package/dist/src/providers/ollama-embed.d.ts.map +1 -1
  168. package/dist/src/providers/ollama-embed.js +1 -0
  169. package/dist/src/providers/ollama-embed.js.map +1 -1
  170. package/dist/src/providers/openai-metadata-extraction.d.ts +3 -3
  171. package/dist/src/providers/openai-metadata-extraction.d.ts.map +1 -1
  172. package/dist/src/providers/openai-metadata-extraction.js +18 -3
  173. package/dist/src/providers/openai-metadata-extraction.js.map +1 -1
  174. package/dist/src/providers/stub.d.ts +2 -0
  175. package/dist/src/providers/stub.d.ts.map +1 -1
  176. package/dist/src/providers/stub.js +2 -0
  177. package/dist/src/providers/stub.js.map +1 -1
  178. package/dist/src/providers/types.d.ts +11 -0
  179. package/dist/src/providers/types.d.ts.map +1 -1
  180. package/dist/src/providers/voyage.d.ts +2 -1
  181. package/dist/src/providers/voyage.d.ts.map +1 -1
  182. package/dist/src/providers/voyage.js +1 -0
  183. package/dist/src/providers/voyage.js.map +1 -1
  184. package/dist/src/retrieval/compact.d.ts +115 -2
  185. package/dist/src/retrieval/compact.d.ts.map +1 -1
  186. package/dist/src/retrieval/compact.js +154 -5
  187. package/dist/src/retrieval/compact.js.map +1 -1
  188. package/dist/src/retrieval/context-pack.d.ts +8 -0
  189. package/dist/src/retrieval/context-pack.d.ts.map +1 -1
  190. package/dist/src/retrieval/context-pack.js +17 -2
  191. package/dist/src/retrieval/context-pack.js.map +1 -1
  192. package/dist/src/server/app.d.ts.map +1 -1
  193. package/dist/src/server/app.js +67 -1
  194. package/dist/src/server/app.js.map +1 -1
  195. package/dist/src/server/routes/friend-status.d.ts +202 -3
  196. package/dist/src/server/routes/friend-status.d.ts.map +1 -1
  197. package/dist/src/server/routes/friend-status.js +290 -7
  198. package/dist/src/server/routes/friend-status.js.map +1 -1
  199. package/dist/src/server/routes/mcp-usage.d.ts +4 -4
  200. package/dist/src/server/routes/search.d.ts.map +1 -1
  201. package/dist/src/server/routes/search.js +144 -24
  202. package/dist/src/server/routes/search.js.map +1 -1
  203. package/dist/src/storage/rebuild.d.ts +14 -1
  204. package/dist/src/storage/rebuild.d.ts.map +1 -1
  205. package/dist/src/storage/rebuild.js +160 -34
  206. package/dist/src/storage/rebuild.js.map +1 -1
  207. package/package.json +1 -1
@@ -3,6 +3,31 @@ import type { RankedResult } from "./reranker.js";
3
3
  export declare const SNIPPET_MAX = 400;
4
4
  export declare const SUMMARY_MAX = 800;
5
5
  export declare const TITLE_MAX = 120;
6
+ /**
7
+ * Token threshold above which `renderCompactMarkdown` annotates a hit with a
8
+ * compact `~Nk tokens` warning. The point is to make the agent see the size
9
+ * before it commits to a `detail=full` expansion that would blow context.
10
+ */
11
+ export declare const LARGE_HIT_TOKEN_THRESHOLD = 10000;
12
+ /**
13
+ * Middle-detail excerpt caps (characters, matching SNIPPET_MAX / SUMMARY_MAX).
14
+ * Targets ~2k–4k tokens total for an evidence-focused view that sits between
15
+ * `summary` (≤800 chars) and `full` (entire row content):
16
+ *
17
+ * - rows at or below MIDDLE_INLINE_THRESHOLD_CHARS get the full content inline
18
+ * (the excerpt would be the same content with no truncation, so skip the
19
+ * elision overhead);
20
+ * - larger rows get the first MIDDLE_HEAD_CHARS + last MIDDLE_TAIL_CHARS with
21
+ * a single elision marker between, preserving the bookends most useful for
22
+ * fact-checking (initial question, final answer/decision) while bounding
23
+ * cost.
24
+ *
25
+ * Char-based bounds are an intentional approximation: for typical mixed text,
26
+ * 1 token ≈ 4 chars, so 8000 head + 4000 tail ≈ 3000 tokens.
27
+ */
28
+ export declare const MIDDLE_HEAD_CHARS = 8000;
29
+ export declare const MIDDLE_TAIL_CHARS = 4000;
30
+ export declare const MIDDLE_INLINE_THRESHOLD_CHARS = 12000;
6
31
  export type Tier = "hot" | "cold" | "digest" | "document" | "structured_doc";
7
32
  export interface CompactExpand {
8
33
  route: string;
@@ -18,10 +43,60 @@ export interface CompactHit {
18
43
  tier: Tier;
19
44
  snippet: string;
20
45
  summary: string;
46
+ /**
47
+ * Exact UTF-8 byte length of the row's full content. Always populated, so
48
+ * callers can sort or filter by size before requesting `detail="full"`.
49
+ */
50
+ content_bytes: number;
51
+ /**
52
+ * Rough token count for the row's full content (~bytes/4). Heuristic, not a
53
+ * model-accurate count — meant for "will this fit in my context" decisions.
54
+ */
55
+ content_tokens_estimate: number;
21
56
  expand: CompactExpand;
22
- /** Raw content, present only when the caller asked for detail=full. */
57
+ /**
58
+ * Row content, present when the caller asked for detail="full" or
59
+ * detail="middle". For middle, this is a bounded excerpt (head + elision
60
+ * marker + tail) when the row is larger than MIDDLE_INLINE_THRESHOLD_CHARS,
61
+ * or the full content inline when the row fits under that threshold.
62
+ * `content_bytes` always reflects the *original* row size, so the agent
63
+ * can tell whether middle content was truncated.
64
+ */
23
65
  content?: string;
66
+ /**
67
+ * True when `content` is a bounded excerpt rather than the full row body
68
+ * (i.e., middle-detail hit large enough to require head+tail truncation).
69
+ * Absent otherwise — agents that care about completeness check this flag
70
+ * before treating `content` as authoritative.
71
+ */
72
+ content_truncated?: boolean;
24
73
  }
74
+ /**
75
+ * Pre-call size advert for an expansion: every compact hit carries this on
76
+ * both the top-level fields and inside `expand.params`, so an agent that
77
+ * copy-pastes the expand pointer verbatim still sees the size warning at the
78
+ * exact moment it chooses whether to spend context on `detail="full"`.
79
+ */
80
+ export declare function computeContentSize(content: string): {
81
+ content_bytes: number;
82
+ content_tokens_estimate: number;
83
+ };
84
+ /**
85
+ * Build the middle-detail content excerpt for a row body.
86
+ *
87
+ * - For content at or below MIDDLE_INLINE_THRESHOLD_CHARS, returns the content
88
+ * as-is (no truncation, `truncated: false`) — at that size the head+tail
89
+ * excerpt would equal the input anyway, and skipping the elision marker
90
+ * keeps the response identical to detail="full" for small rows.
91
+ * - For larger content, returns `head + elision marker + tail` where head is
92
+ * the first MIDDLE_HEAD_CHARS and tail is the last MIDDLE_TAIL_CHARS. The
93
+ * marker reports how many characters were elided so a reader knows the gap
94
+ * size without having to subtract.
95
+ */
96
+ export declare function buildMiddleExcerpt(content: string): {
97
+ text: string;
98
+ truncated: boolean;
99
+ };
25
100
  type RawRow = Record<string, unknown>;
26
101
  /**
27
102
  * Batch-fetch the raw source rows for reranked results.
@@ -52,6 +127,31 @@ export declare function fetchRowByIdForTier(id: string, tier: Tier, sourceTableH
52
127
  row: RawRow;
53
128
  sourceTable: TableName;
54
129
  } | null>;
130
+ /**
131
+ * Fetch every row matching `id` across all supported tables.
132
+ *
133
+ * Used by the no-tier exact-ID path on /search: callers that pass only `id`
134
+ * deserve a deterministic answer — exactly one row, an explicit not-found,
135
+ * or an explicit ambiguous-ID error. Never silently fall back to ranked
136
+ * search.
137
+ *
138
+ * Returns an array of {row, sourceTable} hits — empty if nothing matches.
139
+ */
140
+ export declare function fetchRowsByIdAcrossTables(id: string): Promise<Array<{
141
+ row: RawRow;
142
+ sourceTable: TableName;
143
+ }>>;
144
+ /**
145
+ * Fetch every row matching `id` across the given tables. Used by the
146
+ * tier-without-source_table path: when a tier maps to multiple backing
147
+ * tables (document / structured_doc → cloud + local), callers deserve the
148
+ * same ambiguity guarantee as the bare-id path rather than silent
149
+ * first-match-wins.
150
+ */
151
+ export declare function fetchRowsByIdInTables(id: string, tables: readonly TableName[]): Promise<Array<{
152
+ row: RawRow;
153
+ sourceTable: TableName;
154
+ }>>;
55
155
  /**
56
156
  * Build a CompactHit directly from a raw row (bypassing retrieval/ranking).
57
157
  * Used by the id-based expansion path: score is fixed at 1.0 and
@@ -60,6 +160,12 @@ export declare function fetchRowByIdForTier(id: string, tier: Tier, sourceTableH
60
160
  export declare function buildCompactHitFromRow(row: RawRow, sourceTable: TableName, opts: {
61
161
  query?: string;
62
162
  expandRoute?: string;
163
+ /**
164
+ * Detail level for the returned hit. Defaults to "full" — the exact-ID
165
+ * path is overwhelmingly used to fetch the row body verbatim. "middle"
166
+ * yields a bounded head+tail excerpt; "summary" omits content entirely.
167
+ */
168
+ detail?: DetailLevel;
63
169
  }): CompactHit;
64
170
  /** Derive a stable `source` string (what produced this row). */
65
171
  export declare function deriveSource(sourceTable: TableName, row?: RawRow): string;
@@ -73,9 +179,10 @@ export declare function deriveTitle(sourceTable: TableName, row: RawRow | undefi
73
179
  export declare function deriveSnippet(content: string, query: string, retrievalMethod: string): string;
74
180
  /** Derive a bounded summary. Prefers stored summary, then content fallback. */
75
181
  export declare function deriveSummary(row: RawRow | undefined, content: string): string;
182
+ export type DetailLevel = "summary" | "middle" | "full";
76
183
  export interface BuildCompactHitOptions {
77
184
  query: string;
78
- detail: "summary" | "full";
185
+ detail: DetailLevel;
79
186
  /** Route to advertise in `expand.route`. Defaults to "/search". */
80
187
  expandRoute?: string;
81
188
  }
@@ -85,5 +192,11 @@ export declare function renderCompactMarkdown(hits: CompactHit[], opts?: {
85
192
  degraded?: boolean;
86
193
  degradedReason?: string;
87
194
  }): string;
195
+ /**
196
+ * Compact size warning for large hits, e.g. `~82k tokens`. Returns the empty
197
+ * string for hits below `LARGE_HIT_TOKEN_THRESHOLD` so the markdown stays
198
+ * concise when expansion would be cheap.
199
+ */
200
+ export declare function formatSizeWarning(tokensEstimate: number | undefined): string;
88
201
  export {};
89
202
  //# sourceMappingURL=compact.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"compact.d.ts","sourceRoot":"","sources":["../../../src/retrieval/compact.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compact.d.ts","sourceRoot":"","sources":["../../../src/retrieval/compact.ts"],"names":[],"mappings":"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"}
@@ -9,11 +9,75 @@
9
9
  * - snippet <= 400 characters
10
10
  * - summary <= 800 characters
11
11
  */
12
- import { getTable } from "../storage/tables.js";
12
+ import { getTable, TABLE_NAMES } from "../storage/tables.js";
13
13
  import { tokenize } from "./lexical.js";
14
14
  export const SNIPPET_MAX = 400;
15
15
  export const SUMMARY_MAX = 800;
16
16
  export const TITLE_MAX = 120;
17
+ /**
18
+ * Token threshold above which `renderCompactMarkdown` annotates a hit with a
19
+ * compact `~Nk tokens` warning. The point is to make the agent see the size
20
+ * before it commits to a `detail=full` expansion that would blow context.
21
+ */
22
+ export const LARGE_HIT_TOKEN_THRESHOLD = 10_000;
23
+ /**
24
+ * Middle-detail excerpt caps (characters, matching SNIPPET_MAX / SUMMARY_MAX).
25
+ * Targets ~2k–4k tokens total for an evidence-focused view that sits between
26
+ * `summary` (≤800 chars) and `full` (entire row content):
27
+ *
28
+ * - rows at or below MIDDLE_INLINE_THRESHOLD_CHARS get the full content inline
29
+ * (the excerpt would be the same content with no truncation, so skip the
30
+ * elision overhead);
31
+ * - larger rows get the first MIDDLE_HEAD_CHARS + last MIDDLE_TAIL_CHARS with
32
+ * a single elision marker between, preserving the bookends most useful for
33
+ * fact-checking (initial question, final answer/decision) while bounding
34
+ * cost.
35
+ *
36
+ * Char-based bounds are an intentional approximation: for typical mixed text,
37
+ * 1 token ≈ 4 chars, so 8000 head + 4000 tail ≈ 3000 tokens.
38
+ */
39
+ export const MIDDLE_HEAD_CHARS = 8_000;
40
+ export const MIDDLE_TAIL_CHARS = 4_000;
41
+ export const MIDDLE_INLINE_THRESHOLD_CHARS = 12_000;
42
+ /**
43
+ * Pre-call size advert for an expansion: every compact hit carries this on
44
+ * both the top-level fields and inside `expand.params`, so an agent that
45
+ * copy-pastes the expand pointer verbatim still sees the size warning at the
46
+ * exact moment it chooses whether to spend context on `detail="full"`.
47
+ */
48
+ export function computeContentSize(content) {
49
+ const content_bytes = Buffer.byteLength(content, "utf8");
50
+ const content_tokens_estimate = Math.ceil(content_bytes / 4);
51
+ return { content_bytes, content_tokens_estimate };
52
+ }
53
+ /**
54
+ * Build the middle-detail content excerpt for a row body.
55
+ *
56
+ * - For content at or below MIDDLE_INLINE_THRESHOLD_CHARS, returns the content
57
+ * as-is (no truncation, `truncated: false`) — at that size the head+tail
58
+ * excerpt would equal the input anyway, and skipping the elision marker
59
+ * keeps the response identical to detail="full" for small rows.
60
+ * - For larger content, returns `head + elision marker + tail` where head is
61
+ * the first MIDDLE_HEAD_CHARS and tail is the last MIDDLE_TAIL_CHARS. The
62
+ * marker reports how many characters were elided so a reader knows the gap
63
+ * size without having to subtract.
64
+ */
65
+ export function buildMiddleExcerpt(content) {
66
+ if (content.length <= MIDDLE_INLINE_THRESHOLD_CHARS) {
67
+ return { text: content, truncated: false };
68
+ }
69
+ const head = content.slice(0, MIDDLE_HEAD_CHARS);
70
+ const tail = content.slice(content.length - MIDDLE_TAIL_CHARS);
71
+ const elidedChars = content.length - MIDDLE_HEAD_CHARS - MIDDLE_TAIL_CHARS;
72
+ const elidedTokens = Math.ceil(Buffer.byteLength(content, "utf8") / 4);
73
+ const marker = `\n\n[…${elidedChars.toLocaleString("en-US")} chars elided — full row is ~${formatTokensShort(elidedTokens)} tokens, request detail="full" to expand…]\n\n`;
74
+ return { text: head + marker + tail, truncated: true };
75
+ }
76
+ function formatTokensShort(tokens) {
77
+ if (tokens >= 1000)
78
+ return `${Math.round(tokens / 1000)}k`;
79
+ return String(tokens);
80
+ }
17
81
  /**
18
82
  * Batch-fetch the raw source rows for reranked results.
19
83
  * Groups ids by source table and issues one `id IN (...)` query per table.
@@ -104,6 +168,41 @@ export async function fetchRowByIdForTier(id, tier, sourceTableHint) {
104
168
  }
105
169
  return null;
106
170
  }
171
+ /**
172
+ * Fetch every row matching `id` across all supported tables.
173
+ *
174
+ * Used by the no-tier exact-ID path on /search: callers that pass only `id`
175
+ * deserve a deterministic answer — exactly one row, an explicit not-found,
176
+ * or an explicit ambiguous-ID error. Never silently fall back to ranked
177
+ * search.
178
+ *
179
+ * Returns an array of {row, sourceTable} hits — empty if nothing matches.
180
+ */
181
+ export async function fetchRowsByIdAcrossTables(id) {
182
+ return fetchRowsByIdInTables(id, TABLE_NAMES);
183
+ }
184
+ /**
185
+ * Fetch every row matching `id` across the given tables. Used by the
186
+ * tier-without-source_table path: when a tier maps to multiple backing
187
+ * tables (document / structured_doc → cloud + local), callers deserve the
188
+ * same ambiguity guarantee as the bare-id path rather than silent
189
+ * first-match-wins.
190
+ */
191
+ export async function fetchRowsByIdInTables(id, tables) {
192
+ const escaped = id.replace(/'/g, "''");
193
+ const matches = [];
194
+ for (const tableName of tables) {
195
+ const rows = (await getTable(tableName)
196
+ .query()
197
+ .where(`id = '${escaped}'`)
198
+ .limit(2)
199
+ .toArray());
200
+ for (const row of rows) {
201
+ matches.push({ row, sourceTable: tableName });
202
+ }
203
+ }
204
+ return matches;
205
+ }
107
206
  /**
108
207
  * Build a CompactHit directly from a raw row (bypassing retrieval/ranking).
109
208
  * Used by the id-based expansion path: score is fixed at 1.0 and
@@ -119,7 +218,9 @@ export function buildCompactHitFromRow(row, sourceTable, opts) {
119
218
  row.created_at ||
120
219
  "";
121
220
  const id = row.id;
122
- return {
221
+ const { content_bytes, content_tokens_estimate } = computeContentSize(content);
222
+ const detail = opts.detail ?? "full";
223
+ const hit = {
123
224
  id,
124
225
  source: deriveSource(sourceTable, row),
125
226
  title,
@@ -129,12 +230,30 @@ export function buildCompactHitFromRow(row, sourceTable, opts) {
129
230
  tier,
130
231
  snippet,
131
232
  summary,
233
+ content_bytes,
234
+ content_tokens_estimate,
132
235
  expand: {
133
236
  route: opts.expandRoute ?? "/search",
134
- params: { id, tier, source_table: sourceTable, detail: "full" },
237
+ params: {
238
+ id,
239
+ tier,
240
+ source_table: sourceTable,
241
+ detail: "full",
242
+ content_bytes,
243
+ content_tokens_estimate,
244
+ },
135
245
  },
136
- content,
137
246
  };
247
+ if (detail === "full") {
248
+ hit.content = content;
249
+ }
250
+ else if (detail === "middle") {
251
+ const excerpt = buildMiddleExcerpt(content);
252
+ hit.content = excerpt.text;
253
+ if (excerpt.truncated)
254
+ hit.content_truncated = true;
255
+ }
256
+ return hit;
138
257
  }
139
258
  /** Derive a stable `source` string (what produced this row). */
140
259
  export function deriveSource(sourceTable, row) {
@@ -207,6 +326,7 @@ export function buildCompactHit(ranked, row, opts) {
207
326
  const timestamp = row?.indexed_at ||
208
327
  row?.created_at ||
209
328
  "";
329
+ const { content_bytes, content_tokens_estimate } = computeContentSize(content);
210
330
  const hit = {
211
331
  id: ranked.id,
212
332
  source: deriveSource(ranked.source_table, row),
@@ -217,22 +337,36 @@ export function buildCompactHit(ranked, row, opts) {
217
337
  tier,
218
338
  snippet,
219
339
  summary,
340
+ content_bytes,
341
+ content_tokens_estimate,
220
342
  expand: {
221
343
  route: opts.expandRoute ?? "/search",
222
344
  // `source_table` is carried so the expansion path can fetch the exact
223
345
  // backing row without guessing — critical for `document`/`structured_doc`
224
346
  // tiers, where the same id may exist in both cloud and local tables.
347
+ //
348
+ // `content_bytes` and `content_tokens_estimate` are mirrored here so an
349
+ // agent that copy-pastes the `expand` pointer verbatim sees the size
350
+ // warning at the moment it chooses to spend context on `detail="full"`.
225
351
  params: {
226
352
  id: ranked.id,
227
353
  tier,
228
354
  source_table: ranked.source_table,
229
355
  detail: "full",
356
+ content_bytes,
357
+ content_tokens_estimate,
230
358
  },
231
359
  },
232
360
  };
233
361
  if (opts.detail === "full") {
234
362
  hit.content = content;
235
363
  }
364
+ else if (opts.detail === "middle") {
365
+ const excerpt = buildMiddleExcerpt(content);
366
+ hit.content = excerpt.text;
367
+ if (excerpt.truncated)
368
+ hit.content_truncated = true;
369
+ }
236
370
  return hit;
237
371
  }
238
372
  // --- Markdown rendering (MCP text channel) ---
@@ -252,7 +386,8 @@ export function renderCompactMarkdown(hits, opts = {}) {
252
386
  const source = h.source ?? "?";
253
387
  const score = typeof h.score === "number" ? h.score.toFixed(3) : "?";
254
388
  const method = h.retrieval_method ?? "?";
255
- lines.push(`${i + 1}. **${title}** — _${tier}_ · ${source} · score ${score} (${method})`);
389
+ const sizeWarning = formatSizeWarning(h.content_tokens_estimate);
390
+ lines.push(`${i + 1}. **${title}** — _${tier}_ · ${source} · score ${score} (${method})${sizeWarning ? ` · ${sizeWarning}` : ""}`);
256
391
  if (h.snippet)
257
392
  lines.push(` ${escapeMd(h.snippet)}`);
258
393
  // Render the expand pointer with the *actual* params object the route
@@ -264,6 +399,20 @@ export function renderCompactMarkdown(hits, opts = {}) {
264
399
  });
265
400
  return lines.join("\n");
266
401
  }
402
+ /**
403
+ * Compact size warning for large hits, e.g. `~82k tokens`. Returns the empty
404
+ * string for hits below `LARGE_HIT_TOKEN_THRESHOLD` so the markdown stays
405
+ * concise when expansion would be cheap.
406
+ */
407
+ export function formatSizeWarning(tokensEstimate) {
408
+ if (typeof tokensEstimate !== "number" || tokensEstimate < LARGE_HIT_TOKEN_THRESHOLD) {
409
+ return "";
410
+ }
411
+ if (tokensEstimate >= 1000) {
412
+ return `~${Math.round(tokensEstimate / 1000)}k tokens`;
413
+ }
414
+ return `~${tokensEstimate} tokens`;
415
+ }
267
416
  // --- Internals ---
268
417
  function truncate(text, max) {
269
418
  if (text.length <= max)
@@ -1 +1 @@
1
- {"version":3,"file":"compact.js","sourceRoot":"","sources":["../../../src/retrieval/compact.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compact.js","sourceRoot":"","sources":["../../../src/retrieval/compact.ts"],"names":[],"mappings":"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"}
@@ -65,6 +65,10 @@ export interface ExampleCard {
65
65
  source: string;
66
66
  summary: string;
67
67
  timestamp?: string;
68
+ /** UTF-8 byte length of the underlying row's full content. */
69
+ content_bytes: number;
70
+ /** Heuristic token count (~bytes/4) for "will this fit in my context". */
71
+ content_tokens_estimate: number;
68
72
  expand: {
69
73
  route: string;
70
74
  params: Record<string, unknown>;
@@ -75,6 +79,10 @@ export interface RuleCard {
75
79
  title: string;
76
80
  snippet: string;
77
81
  source_path?: string;
82
+ /** UTF-8 byte length of the underlying row's full content. */
83
+ content_bytes: number;
84
+ /** Heuristic token count (~bytes/4) for "will this fit in my context". */
85
+ content_tokens_estimate: number;
78
86
  expand: {
79
87
  route: string;
80
88
  params: Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"context-pack.d.ts","sourceRoot":"","sources":["../../../src/retrieval/context-pack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-pack.d.ts","sourceRoot":"","sources":["../../../src/retrieval/context-pack.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { hybridSearch } from "./hybrid.js";
2
2
  import { rerank } from "./reranker.js";
3
3
  import { getTable } from "../storage/tables.js";
4
4
  import { resolveCwdRoot } from "./cwd.js";
5
+ import { computeContentSize } from "./compact.js";
5
6
  // --- Locked caps ---
6
7
  export const ITEM_TEXT_MAX = 200;
7
8
  export const SNIPPET_MAX = 200;
@@ -155,24 +156,33 @@ function buildExamples(ranked, rows, cap) {
155
156
  if (out.length >= cap)
156
157
  break;
157
158
  const row = rows.get(r.id);
158
- const summary = truncate(collapseWhitespace(row?.["summary"] || row?.["content"] || r.content), SNIPPET_MAX);
159
+ const fullContent = row?.["content"] || r.content || "";
160
+ const summary = truncate(collapseWhitespace(row?.["summary"] || fullContent), SNIPPET_MAX);
159
161
  if (!summary)
160
162
  continue;
161
163
  const title = deriveExampleTitle(row, summary);
162
164
  const source = row?.["source"] || "conversation";
163
165
  const timestamp = row?.["indexed_at"] || undefined;
166
+ const { content_bytes, content_tokens_estimate } = computeContentSize(fullContent);
164
167
  const card = {
165
168
  id: r.id,
166
169
  title,
167
170
  source,
168
171
  summary,
172
+ content_bytes,
173
+ content_tokens_estimate,
169
174
  expand: {
170
175
  route: "/search",
176
+ // Size fields are mirrored into `expand.params` so an agent that
177
+ // copy-pastes the pointer sees the warning at the exact moment it
178
+ // decides whether to spend context on `detail="full"`.
171
179
  params: {
172
180
  id: r.id,
173
181
  tier: r.source_table === "conversations_cold" ? "cold" : "hot",
174
182
  source_table: r.source_table,
175
183
  detail: "full",
184
+ content_bytes,
185
+ content_tokens_estimate,
176
186
  },
177
187
  },
178
188
  };
@@ -188,16 +198,19 @@ function buildRules(ranked, rows, cap) {
188
198
  if (out.length >= cap)
189
199
  break;
190
200
  const row = rows.get(r.id);
191
- const content = row?.["content"] || r.content;
201
+ const content = row?.["content"] || r.content || "";
192
202
  const snippet = truncate(collapseWhitespace(content), SNIPPET_MAX);
193
203
  if (!snippet)
194
204
  continue;
195
205
  const sourcePath = row?.["source_path"] || "";
196
206
  const title = deriveRuleTitle(row, sourcePath, snippet);
207
+ const { content_bytes, content_tokens_estimate } = computeContentSize(content);
197
208
  const card = {
198
209
  id: r.id,
199
210
  title,
200
211
  snippet,
212
+ content_bytes,
213
+ content_tokens_estimate,
201
214
  expand: {
202
215
  route: "/search",
203
216
  params: {
@@ -205,6 +218,8 @@ function buildRules(ranked, rows, cap) {
205
218
  tier: "structured_doc",
206
219
  source_table: r.source_table,
207
220
  detail: "full",
221
+ content_bytes,
222
+ content_tokens_estimate,
208
223
  },
209
224
  },
210
225
  };