@getrift/rift 0.1.0-beta.10 → 0.1.0-beta.12
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/dist/src/cli/commands/reconcile.d.ts.map +1 -1
- package/dist/src/cli/commands/reconcile.js +12 -0
- package/dist/src/cli/commands/reconcile.js.map +1 -1
- package/dist/src/cli/commands/search.d.ts.map +1 -1
- package/dist/src/cli/commands/search.js +28 -4
- package/dist/src/cli/commands/search.js.map +1 -1
- package/dist/src/cli/http-client.d.ts.map +1 -1
- package/dist/src/cli/http-client.js +21 -2
- package/dist/src/cli/http-client.js.map +1 -1
- package/dist/src/ingestion/inbox-core/conversation-fingerprint.d.ts +2 -0
- package/dist/src/ingestion/inbox-core/conversation-fingerprint.d.ts.map +1 -0
- package/dist/src/ingestion/inbox-core/conversation-fingerprint.js +27 -0
- package/dist/src/ingestion/inbox-core/conversation-fingerprint.js.map +1 -0
- package/dist/src/ingestion/inbox-core/index.d.ts +1 -0
- package/dist/src/ingestion/inbox-core/index.d.ts.map +1 -1
- package/dist/src/ingestion/inbox-core/index.js +1 -0
- package/dist/src/ingestion/inbox-core/index.js.map +1 -1
- package/dist/src/jobs/handlers/compact.js +1 -0
- package/dist/src/jobs/handlers/compact.js.map +1 -1
- package/dist/src/jobs/handlers/dedupe-conversations.d.ts +111 -0
- package/dist/src/jobs/handlers/dedupe-conversations.d.ts.map +1 -0
- package/dist/src/jobs/handlers/dedupe-conversations.js +332 -0
- package/dist/src/jobs/handlers/dedupe-conversations.js.map +1 -0
- package/dist/src/jobs/handlers/ingest.d.ts.map +1 -1
- package/dist/src/jobs/handlers/ingest.js +204 -31
- package/dist/src/jobs/handlers/ingest.js.map +1 -1
- package/dist/src/jobs/handlers/reconcile.d.ts +11 -0
- package/dist/src/jobs/handlers/reconcile.d.ts.map +1 -1
- package/dist/src/jobs/handlers/reconcile.js +25 -0
- package/dist/src/jobs/handlers/reconcile.js.map +1 -1
- package/dist/src/jobs/handlers/save.d.ts.map +1 -1
- package/dist/src/jobs/handlers/save.js +6 -1
- package/dist/src/jobs/handlers/save.js.map +1 -1
- package/dist/src/mcp/errors.d.ts.map +1 -1
- package/dist/src/mcp/errors.js +20 -1
- package/dist/src/mcp/errors.js.map +1 -1
- package/dist/src/mcp/tools/context-pack.d.ts.map +1 -1
- package/dist/src/mcp/tools/context-pack.js +5 -2
- package/dist/src/mcp/tools/context-pack.js.map +1 -1
- package/dist/src/mcp/tools/search.d.ts +6 -2
- package/dist/src/mcp/tools/search.d.ts.map +1 -1
- package/dist/src/mcp/tools/search.js +34 -4
- package/dist/src/mcp/tools/search.js.map +1 -1
- package/dist/src/observability/tool-usage-stats.d.ts +70 -4
- package/dist/src/observability/tool-usage-stats.d.ts.map +1 -1
- package/dist/src/observability/tool-usage-stats.js +58 -27
- package/dist/src/observability/tool-usage-stats.js.map +1 -1
- package/dist/src/observability/tool-usage.d.ts +93 -0
- package/dist/src/observability/tool-usage.d.ts.map +1 -1
- package/dist/src/observability/tool-usage.js +124 -0
- package/dist/src/observability/tool-usage.js.map +1 -1
- package/dist/src/retrieval/compact.d.ts +115 -2
- package/dist/src/retrieval/compact.d.ts.map +1 -1
- package/dist/src/retrieval/compact.js +154 -5
- package/dist/src/retrieval/compact.js.map +1 -1
- package/dist/src/retrieval/context-pack.d.ts +71 -0
- package/dist/src/retrieval/context-pack.d.ts.map +1 -1
- package/dist/src/retrieval/context-pack.js +126 -7
- package/dist/src/retrieval/context-pack.js.map +1 -1
- package/dist/src/server/routes/mcp-usage.d.ts +5 -4
- package/dist/src/server/routes/mcp-usage.d.ts.map +1 -1
- package/dist/src/server/routes/mcp-usage.js.map +1 -1
- package/dist/src/server/routes/reconcile.d.ts.map +1 -1
- package/dist/src/server/routes/reconcile.js +16 -0
- package/dist/src/server/routes/reconcile.js.map +1 -1
- package/dist/src/server/routes/search.d.ts.map +1 -1
- package/dist/src/server/routes/search.js +144 -24
- package/dist/src/server/routes/search.js.map +1 -1
- package/dist/src/storage/rebuild.d.ts.map +1 -1
- package/dist/src/storage/rebuild.js +24 -2
- package/dist/src/storage/rebuild.js.map +1 -1
- package/dist/src/storage/tables.d.ts +9 -0
- package/dist/src/storage/tables.d.ts.map +1 -1
- package/dist/src/storage/tables.js +22 -1
- package/dist/src/storage/tables.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save.js","sourceRoot":"","sources":["../../../../src/jobs/handlers/save.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAK7B,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"save.js","sourceRoot":"","sources":["../../../../src/jobs/handlers/save.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/mcp/errors.ts"],"names":[],"mappings":"AAMA,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO;;;;;;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/mcp/errors.ts"],"names":[],"mappings":"AAMA,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO;;;;;;EAmDvC"}
|
package/dist/src/mcp/errors.js
CHANGED
|
@@ -17,8 +17,22 @@ export function formatError(err) {
|
|
|
17
17
|
case "validation":
|
|
18
18
|
message = `Validation error: ${formatBody(err.body)}`;
|
|
19
19
|
break;
|
|
20
|
+
case "not_found":
|
|
21
|
+
// Distinguish a daemon-level 404 (no such endpoint) from a
|
|
22
|
+
// response-level 404 with a typed `error` field (e.g. id_not_found).
|
|
23
|
+
// The latter is a real, actionable answer — surface its body so the
|
|
24
|
+
// caller doesn't read "Endpoint not available" and route around us.
|
|
25
|
+
message = hasTypedError(err.body)
|
|
26
|
+
? `Not found: ${formatBody(err.body)}`
|
|
27
|
+
: "Endpoint not available";
|
|
28
|
+
break;
|
|
20
29
|
case "conflict":
|
|
21
|
-
|
|
30
|
+
// Same idea as not_found: prefer the typed body when the route
|
|
31
|
+
// returned a domain conflict (e.g. ambiguous_id) over the generic
|
|
32
|
+
// exclusive-operation message that only applies to jobs.
|
|
33
|
+
message = hasTypedError(err.body)
|
|
34
|
+
? `Conflict: ${formatBody(err.body)}`
|
|
35
|
+
: "Another exclusive operation is running. Try again later.";
|
|
22
36
|
break;
|
|
23
37
|
case "rate_limited":
|
|
24
38
|
message = "Rate limited. Retry later.";
|
|
@@ -47,4 +61,9 @@ function formatBody(body) {
|
|
|
47
61
|
return body;
|
|
48
62
|
return JSON.stringify(body, null, 2);
|
|
49
63
|
}
|
|
64
|
+
function hasTypedError(body) {
|
|
65
|
+
return (typeof body === "object" &&
|
|
66
|
+
body !== null &&
|
|
67
|
+
typeof body.error === "string");
|
|
68
|
+
}
|
|
50
69
|
//# sourceMappingURL=errors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/mcp/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;QAC5B,IAAI,OAAe,CAAC;QACpB,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,oBAAoB;gBACvB,OAAO,GAAG,6CAA6C,CAAC;gBACxD,MAAM;YACR,KAAK,cAAc;gBACjB,OAAO;oBACL,4DAA4D,CAAC;gBAC/D,MAAM;YACR,KAAK,YAAY;gBACf,OAAO,GAAG,qBAAqB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtD,MAAM;YACR,KAAK,UAAU;gBACb,OAAO,GAAG,0DAA0D,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/mcp/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;QAC5B,IAAI,OAAe,CAAC;QACpB,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,oBAAoB;gBACvB,OAAO,GAAG,6CAA6C,CAAC;gBACxD,MAAM;YACR,KAAK,cAAc;gBACjB,OAAO;oBACL,4DAA4D,CAAC;gBAC/D,MAAM;YACR,KAAK,YAAY;gBACf,OAAO,GAAG,qBAAqB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtD,MAAM;YACR,KAAK,WAAW;gBACd,2DAA2D;gBAC3D,qEAAqE;gBACrE,oEAAoE;gBACpE,oEAAoE;gBACpE,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;oBAC/B,CAAC,CAAC,cAAc,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACtC,CAAC,CAAC,wBAAwB,CAAC;gBAC7B,MAAM;YACR,KAAK,UAAU;gBACb,+DAA+D;gBAC/D,kEAAkE;gBAClE,yDAAyD;gBACzD,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;oBAC/B,CAAC,CAAC,aAAa,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACrC,CAAC,CAAC,0DAA0D,CAAC;gBAC/D,MAAM;YACR,KAAK,cAAc;gBACjB,OAAO,GAAG,4BAA4B,CAAC;gBACvC,MAAM;YACR,KAAK,cAAc;gBACjB,OAAO,GAAG,iBAAiB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,MAAM;YACR;gBACE,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC1B,CAAC;QACD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YACnD,OAAO,EAAE,IAAa;SACvB,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9D,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,IAAI,EAAE,EAAE,CAAC;QAC5D,OAAO,EAAE,IAAa;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,IAAa;IAC/B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,cAAc,CAAC;IAC/D,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,aAAa,CAAC,IAAa;IAClC,OAAO,CACL,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,IAAI;QACb,OAAQ,IAA4B,CAAC,KAAK,KAAK,QAAQ,CACxD,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-pack.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/context-pack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"context-pack.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/context-pack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAU3D,eAAO,MAAM,iBAAiB;;;;;;CAqC7B,CAAC;AAEF,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,UAAU;;;;;;;;;;;uBAQwB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;GAKlE"}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
import { z } from "zod";
|
|
14
14
|
import { formatError } from "../errors.js";
|
|
15
15
|
import { MAX_PER_BUCKET_CEILING, MAX_BYTES_CEILING, TASK_MAX, } from "../../retrieval/context-pack.js";
|
|
16
|
+
import { formatSizeWarning } from "../../retrieval/compact.js";
|
|
16
17
|
export const contextPackSchema = {
|
|
17
18
|
task: z
|
|
18
19
|
.string()
|
|
@@ -84,13 +85,15 @@ function renderContextPackMarkdown(pack) {
|
|
|
84
85
|
if (pack.examples.length === 0)
|
|
85
86
|
lines.push("_(none)_");
|
|
86
87
|
for (const e of pack.examples) {
|
|
87
|
-
|
|
88
|
+
const warn = formatSizeWarning(e.content_tokens_estimate);
|
|
89
|
+
lines.push(`- **${e.title}** — ${e.summary}${warn ? ` _(${warn})_` : ""}`);
|
|
88
90
|
}
|
|
89
91
|
lines.push("", "## Rules");
|
|
90
92
|
if (pack.rules.length === 0)
|
|
91
93
|
lines.push("_(none)_");
|
|
92
94
|
for (const r of pack.rules) {
|
|
93
|
-
|
|
95
|
+
const warn = formatSizeWarning(r.content_tokens_estimate);
|
|
96
|
+
lines.push(`- **${r.title}**${r.source_path ? ` (\`${r.source_path}\`)` : ""} — ${r.snippet}${warn ? ` _(${warn})_` : ""}`);
|
|
94
97
|
}
|
|
95
98
|
return lines.join("\n");
|
|
96
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-pack.js","sourceRoot":"","sources":["../../../../src/mcp/tools/context-pack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,QAAQ,GAET,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"context-pack.js","sourceRoot":"","sources":["../../../../src/mcp/tools/context-pack.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,14 +8,18 @@
|
|
|
8
8
|
import { z } from "zod";
|
|
9
9
|
import type { HttpClient } from "../../cli/http-client.js";
|
|
10
10
|
export declare const searchSchema: {
|
|
11
|
-
query: z.ZodString
|
|
11
|
+
query: z.ZodOptional<z.ZodString>;
|
|
12
12
|
scope: z.ZodOptional<z.ZodEnum<["all", "clients", "projects", "conversations", "documents"]>>;
|
|
13
13
|
client: z.ZodOptional<z.ZodString>;
|
|
14
14
|
since: z.ZodOptional<z.ZodString>;
|
|
15
15
|
top_k: z.ZodOptional<z.ZodNumber>;
|
|
16
16
|
cwd: z.ZodOptional<z.ZodString>;
|
|
17
|
-
detail: z.ZodOptional<z.ZodEnum<["summary", "full"]>>;
|
|
17
|
+
detail: z.ZodOptional<z.ZodEnum<["summary", "middle", "full"]>>;
|
|
18
18
|
id: z.ZodOptional<z.ZodString>;
|
|
19
|
+
tier: z.ZodOptional<z.ZodEnum<["hot", "cold", "digest", "document", "structured_doc"]>>;
|
|
20
|
+
source_table: z.ZodOptional<z.ZodEnum<["structured_docs", "conversations_hot", "conversations_cold", "digests", "structured_docs_local"]>>;
|
|
21
|
+
content_bytes: z.ZodOptional<z.ZodNumber>;
|
|
22
|
+
content_tokens_estimate: z.ZodOptional<z.ZodNumber>;
|
|
19
23
|
};
|
|
20
24
|
export declare function handleRiftSearch(args: Record<string, unknown>, client: HttpClient): Promise<{
|
|
21
25
|
content: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/search.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAO3D,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/search.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAO3D,eAAO,MAAM,YAAY;;;;;;;;;;;;;CA2ExB,CAAC;AAUF,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,UAAU;;;;;;;;;;;uBAWwB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;GAKlE"}
|
|
@@ -9,7 +9,11 @@ import { z } from "zod";
|
|
|
9
9
|
import { formatError } from "../errors.js";
|
|
10
10
|
import { renderCompactMarkdown, } from "../../retrieval/compact.js";
|
|
11
11
|
export const searchSchema = {
|
|
12
|
-
query: z
|
|
12
|
+
query: z
|
|
13
|
+
.string()
|
|
14
|
+
.min(1)
|
|
15
|
+
.optional()
|
|
16
|
+
.describe("Search query. Required for ranked retrieval; optional in exact-ID mode (detail='full' + id)."),
|
|
13
17
|
scope: z
|
|
14
18
|
.enum(["all", "clients", "projects", "conversations", "documents"])
|
|
15
19
|
.optional()
|
|
@@ -30,13 +34,39 @@ export const searchSchema = {
|
|
|
30
34
|
.optional()
|
|
31
35
|
.describe("Current working directory — scopes file results to the matching project"),
|
|
32
36
|
detail: z
|
|
33
|
-
.enum(["summary", "full"])
|
|
37
|
+
.enum(["summary", "middle", "full"])
|
|
34
38
|
.optional()
|
|
35
|
-
.describe("Output detail level. 'summary' (default) is the compact DTO; 'full' adds raw content
|
|
39
|
+
.describe("Output detail level. 'summary' (default) is the compact DTO; 'middle' returns a bounded head+tail excerpt (~2k-4k tokens, evidence-focused) — use this for fact-checking large rows without spending full context on them; 'full' adds the raw content. With 'middle' or 'full', supplying `id` triggers exact-ID mode and bypasses ranking."),
|
|
36
40
|
id: z
|
|
37
41
|
.string()
|
|
38
42
|
.optional()
|
|
39
|
-
.describe("With detail='full',
|
|
43
|
+
.describe("With detail='middle' or 'full', fetch exactly this row by id. Never falls back to ranked search — returns 404 (id_not_found) or 409 (ambiguous_id) if the id is missing or duplicated across tables."),
|
|
44
|
+
tier: z
|
|
45
|
+
.enum(["hot", "cold", "digest", "document", "structured_doc"])
|
|
46
|
+
.optional()
|
|
47
|
+
.describe("With detail='middle' or 'full' + id, scope the lookup to a tier (matches the value carried in compact-hit expand pointers)."),
|
|
48
|
+
source_table: z
|
|
49
|
+
.enum([
|
|
50
|
+
"structured_docs",
|
|
51
|
+
"conversations_hot",
|
|
52
|
+
"conversations_cold",
|
|
53
|
+
"digests",
|
|
54
|
+
"structured_docs_local",
|
|
55
|
+
])
|
|
56
|
+
.optional()
|
|
57
|
+
.describe("With detail='middle' or 'full' + id, the authoritative backing table. Disambiguates rows that share an id across cloud/local structured-doc tables."),
|
|
58
|
+
content_bytes: z
|
|
59
|
+
.number()
|
|
60
|
+
.int()
|
|
61
|
+
.nonnegative()
|
|
62
|
+
.optional()
|
|
63
|
+
.describe("Advisory size of the row's `content` in UTF-8 bytes, as carried on `expand.params`. Accepted so callers can paste an expansion pointer verbatim; ignored by retrieval."),
|
|
64
|
+
content_tokens_estimate: z
|
|
65
|
+
.number()
|
|
66
|
+
.int()
|
|
67
|
+
.nonnegative()
|
|
68
|
+
.optional()
|
|
69
|
+
.describe("Advisory token estimate (~content_bytes/4), as carried on `expand.params`. Accepted so callers can paste an expansion pointer verbatim; ignored by retrieval."),
|
|
40
70
|
};
|
|
41
71
|
export async function handleRiftSearch(args, client) {
|
|
42
72
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../src/mcp/tools/search.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EACL,qBAAqB,GAEtB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,KAAK,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../src/mcp/tools/search.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EACL,qBAAqB,GAEtB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CACP,8FAA8F,CAC/F;IACH,KAAK,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;SAClE,QAAQ,EAAE;SACV,QAAQ,CAAC,gCAAgC,CAAC;IAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC1E,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,2DAA2D,CAAC;IACxE,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,yCAAyC,CAAC;IACtD,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,yEAAyE,CAC1E;IACH,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;SACnC,QAAQ,EAAE;SACV,QAAQ,CACP,8UAA8U,CAC/U;IACH,EAAE,EAAE,CAAC;SACF,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,sMAAsM,CACvM;IACH,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;SAC7D,QAAQ,EAAE;SACV,QAAQ,CACP,6HAA6H,CAC9H;IACH,YAAY,EAAE,CAAC;SACZ,IAAI,CAAC;QACJ,iBAAiB;QACjB,mBAAmB;QACnB,oBAAoB;QACpB,SAAS;QACT,uBAAuB;KACxB,CAAC;SACD,QAAQ,EAAE;SACV,QAAQ,CACP,qJAAqJ,CACtJ;IACH,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,GAAG,EAAE;SACL,WAAW,EAAE;SACb,QAAQ,EAAE;SACV,QAAQ,CACP,wKAAwK,CACzK;IACH,uBAAuB,EAAE,CAAC;SACvB,MAAM,EAAE;SACR,GAAG,EAAE;SACL,WAAW,EAAE;SACb,QAAQ,EAAE;SACV,QAAQ,CACP,+JAA+J,CAChK;CACJ,CAAC;AAUF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAA6B,EAC7B,MAAkB;IAElB,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,IAA6B,CAAC;QAC3C,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE;YAC/C,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1E,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;YAC1C,iBAAiB,EAAE,IAA0C;SAC9D,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC"}
|
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* No filesystem reads, no parsing — callers pass an already-decoded
|
|
5
5
|
* `ToolUsageEntry[]` (typically via `readToolUsageEntriesTolerant`).
|
|
6
|
-
* Buckets calls into today/week/month/all-time
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* Buckets calls into today/week/month/all-time. The headline retrieval
|
|
7
|
+
* metric is `context_tokens_delivered_estimate` — the measured size of
|
|
8
|
+
* the text channel actually returned on context hits, divided by 4 for
|
|
9
|
+
* a rough tokens estimate.
|
|
9
10
|
*/
|
|
10
11
|
import type { ToolUsageEntry } from "./tool-usage.js";
|
|
11
12
|
export interface UsageWindow {
|
|
@@ -17,7 +18,71 @@ export interface UsageWindow {
|
|
|
17
18
|
* Non-retrieval calls (rift_save, rift_status) are excluded.
|
|
18
19
|
*/
|
|
19
20
|
context_hits: number;
|
|
20
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Subset of `context_hits` whose rows included `response_text_bytes`, meaning
|
|
23
|
+
* they actually contributed to `context_tokens_delivered_estimate`. Legacy
|
|
24
|
+
* rows written before byte measurement still count as context hits, but not
|
|
25
|
+
* as measured hits. SwiftBar renders this as "3/115 hits measured" so equal
|
|
26
|
+
* token totals across wider windows are understandable instead of suspicious.
|
|
27
|
+
*/
|
|
28
|
+
context_tokens_measured_hits: number;
|
|
29
|
+
/**
|
|
30
|
+
* Cheap tokens estimate (`ceil(bytes / 4)`) over the MCP text channel of
|
|
31
|
+
* every call that counts toward `context_hits`. Measured from the response
|
|
32
|
+
* we actually returned — not a per-tool flat constant. Empty results,
|
|
33
|
+
* degraded retrievals, failures, and non-retrieval tools contribute 0.
|
|
34
|
+
* Legacy log rows written before response size was recorded contribute 0
|
|
35
|
+
* (no fabricated number) and naturally age out as fresh rows accumulate.
|
|
36
|
+
*/
|
|
37
|
+
context_tokens_delivered_estimate: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Precise-lookup health: aggregates over rift_search calls whose
|
|
41
|
+
* `search_mode` was recorded as `"exact_id"`. Surfaces the leading
|
|
42
|
+
* indicators that the strict direct-lookup gate on `/search` is or
|
|
43
|
+
* isn't earning agent trust — high success ratio + rare typed failures
|
|
44
|
+
* is healthy; rising `typed_failures` (`id_not_found`/`ambiguous_id`)
|
|
45
|
+
* or large `max_content_tokens_estimate` paired with low success is
|
|
46
|
+
* the shape of a flow where an agent may stop trusting Rift for precise
|
|
47
|
+
* lookup. Trust risk is named precisely:
|
|
48
|
+
* we cannot tell from Rift alone that the agent went on to read JSONL
|
|
49
|
+
* from disk, only that the lookup it asked for here failed.
|
|
50
|
+
*/
|
|
51
|
+
export interface PreciseLookupStats {
|
|
52
|
+
/** Total rift_search calls with search_mode = exact_id (success or not). */
|
|
53
|
+
total: number;
|
|
54
|
+
/** Subset of `total` where success = true. */
|
|
55
|
+
successes: number;
|
|
56
|
+
/**
|
|
57
|
+
* Failures bucketed by the typed `error` field parsed from the response
|
|
58
|
+
* body (e.g. `id_not_found`, `ambiguous_id`). Transport / untyped
|
|
59
|
+
* failures do not appear here — they only count toward `total - successes`.
|
|
60
|
+
*/
|
|
61
|
+
typed_failures: Record<string, number>;
|
|
62
|
+
/**
|
|
63
|
+
* Detail-level split among exact-id calls. `summary` is impossible by
|
|
64
|
+
* definition (exact-id requires middle|full), so only `middle` and
|
|
65
|
+
* `full` appear. Useful for seeing whether agents prefer the bounded
|
|
66
|
+
* middle path or still default to full-body expansion.
|
|
67
|
+
*/
|
|
68
|
+
by_detail: {
|
|
69
|
+
middle: number;
|
|
70
|
+
full: number;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Count of successful exact-id calls that returned at least one hit
|
|
74
|
+
* with `content_truncated === true` — a leading indicator that the
|
|
75
|
+
* agent received a bounded excerpt and may decide to escalate to
|
|
76
|
+
* `detail=full`. Bounded to successful calls because truncation only
|
|
77
|
+
* makes sense for returned content.
|
|
78
|
+
*/
|
|
79
|
+
truncated_count: number;
|
|
80
|
+
/**
|
|
81
|
+
* Maximum `content_tokens_estimate` observed across all exact-id
|
|
82
|
+
* calls (successful or not, when the field was present). Captures the
|
|
83
|
+
* worst-case "this row would blow context if expanded" signal.
|
|
84
|
+
*/
|
|
85
|
+
max_content_tokens_estimate: number;
|
|
21
86
|
}
|
|
22
87
|
export interface UsageSummary {
|
|
23
88
|
today: UsageWindow;
|
|
@@ -25,6 +90,7 @@ export interface UsageSummary {
|
|
|
25
90
|
month: UsageWindow;
|
|
26
91
|
all_time: UsageWindow;
|
|
27
92
|
by_tool: Record<string, number>;
|
|
93
|
+
precise_lookup: PreciseLookupStats;
|
|
28
94
|
}
|
|
29
95
|
export declare function aggregateUsage(entries: ToolUsageEntry[], now?: Date): UsageSummary;
|
|
30
96
|
//# sourceMappingURL=tool-usage-stats.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-usage-stats.d.ts","sourceRoot":"","sources":["../../../src/observability/tool-usage-stats.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tool-usage-stats.d.ts","sourceRoot":"","sources":["../../../src/observability/tool-usage-stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAsBtD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,4BAA4B,EAAE,MAAM,CAAC;IACrC;;;;;;;OAOG;IACH,iCAAiC,EAAE,MAAM,CAAC;CAC3C;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC;;;;;OAKG;IACH,SAAS,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C;;;;;;OAMG;IACH,eAAe,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,2BAA2B,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,WAAW,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,cAAc,EAAE,kBAAkB,CAAC;CACpC;AAoED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,cAAc,EAAE,EACzB,GAAG,GAAE,IAAiB,GACrB,YAAY,CAuFd"}
|
|
@@ -1,24 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tokens-saved estimates per MCP tool call. The numbers are the
|
|
3
|
-
* approximate tokens an agent would have to spend stuffing equivalent
|
|
4
|
-
* context into a system prompt or doing the same query without the
|
|
5
|
-
* compact, bucketed retrieval the MCP server provides.
|
|
6
|
-
*
|
|
7
|
-
* Unknown tools fall back to `DEFAULT_TOKENS_SAVED` so future tools
|
|
8
|
-
* report a non-zero baseline.
|
|
9
|
-
*/
|
|
10
|
-
const TOKENS_SAVED_PER_TOOL = {
|
|
11
|
-
rift_context_pack: 12_000,
|
|
12
|
-
rift_conversations_search: 8_000,
|
|
13
|
-
rift_search: 6_000,
|
|
14
|
-
rift_save: 2_000,
|
|
15
|
-
rift_status: 1_000,
|
|
16
|
-
};
|
|
17
|
-
const DEFAULT_TOKENS_SAVED = 1_000;
|
|
18
1
|
/**
|
|
19
2
|
* Map legacy tool names from JSONL rows written before the rename onto
|
|
20
|
-
* their canonical `rift_*` equivalents so SwiftBar
|
|
21
|
-
*
|
|
3
|
+
* their canonical `rift_*` equivalents so SwiftBar counters stay
|
|
4
|
+
* continuous on a machine that upgrades. Hidden migration only —
|
|
22
5
|
* never surfaces in user-visible output.
|
|
23
6
|
*/
|
|
24
7
|
const LEGACY_TOOL_RENAMES = {
|
|
@@ -33,10 +16,20 @@ function canonicalToolName(tool) {
|
|
|
33
16
|
}
|
|
34
17
|
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
35
18
|
function emptyWindow() {
|
|
36
|
-
return {
|
|
19
|
+
return {
|
|
20
|
+
calls: 0,
|
|
21
|
+
context_hits: 0,
|
|
22
|
+
context_tokens_measured_hits: 0,
|
|
23
|
+
context_tokens_delivered_estimate: 0,
|
|
24
|
+
};
|
|
37
25
|
}
|
|
38
|
-
|
|
39
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Cheap tokens estimate from a UTF-8 byte count. `bytes / 4` is the standard
|
|
28
|
+
* back-of-envelope for English text — good enough for a glanceable menu-bar
|
|
29
|
+
* counter without pulling a real tokenizer into the daemon.
|
|
30
|
+
*/
|
|
31
|
+
function tokensFromBytes(bytes) {
|
|
32
|
+
return bytes > 0 ? Math.ceil(bytes / 4) : 0;
|
|
40
33
|
}
|
|
41
34
|
/**
|
|
42
35
|
* Local-time start-of-day. The menu-bar "today" counter is a glanceable
|
|
@@ -84,33 +77,71 @@ export function aggregateUsage(entries, now = new Date()) {
|
|
|
84
77
|
month: emptyWindow(),
|
|
85
78
|
all_time: emptyWindow(),
|
|
86
79
|
by_tool: {},
|
|
80
|
+
precise_lookup: {
|
|
81
|
+
total: 0,
|
|
82
|
+
successes: 0,
|
|
83
|
+
typed_failures: {},
|
|
84
|
+
by_detail: { middle: 0, full: 0 },
|
|
85
|
+
truncated_count: 0,
|
|
86
|
+
max_content_tokens_estimate: 0,
|
|
87
|
+
},
|
|
87
88
|
};
|
|
88
89
|
for (const entry of entries) {
|
|
89
90
|
const ts = Date.parse(entry.timestamp);
|
|
90
91
|
if (Number.isNaN(ts))
|
|
91
92
|
continue;
|
|
92
93
|
const tool = canonicalToolName(entry.tool);
|
|
93
|
-
const tokens = entry.success ? tokensSavedFor(tool) : 0;
|
|
94
94
|
const hit = isContextHit(tool, entry) ? 1 : 0;
|
|
95
|
+
// Only count delivered tokens on context hits — empty/degraded/non-retrieval
|
|
96
|
+
// calls all contribute 0. `response_text_bytes` is absent on legacy rows
|
|
97
|
+
// written before the field existed; those naturally contribute 0 too.
|
|
98
|
+
const delivered = hit && typeof entry.response_text_bytes === "number"
|
|
99
|
+
? tokensFromBytes(entry.response_text_bytes)
|
|
100
|
+
: 0;
|
|
101
|
+
const measuredHit = hit && typeof entry.response_text_bytes === "number" ? 1 : 0;
|
|
95
102
|
summary.all_time.calls += 1;
|
|
96
|
-
summary.all_time.
|
|
103
|
+
summary.all_time.context_tokens_delivered_estimate += delivered;
|
|
104
|
+
summary.all_time.context_tokens_measured_hits += measuredHit;
|
|
97
105
|
summary.all_time.context_hits += hit;
|
|
98
106
|
summary.by_tool[tool] = (summary.by_tool[tool] ?? 0) + 1;
|
|
107
|
+
if (tool === "rift_search" && entry.search_mode === "exact_id") {
|
|
108
|
+
const pl = summary.precise_lookup;
|
|
109
|
+
pl.total += 1;
|
|
110
|
+
if (entry.success === true)
|
|
111
|
+
pl.successes += 1;
|
|
112
|
+
else if (typeof entry.typed_error === "string") {
|
|
113
|
+
pl.typed_failures[entry.typed_error] =
|
|
114
|
+
(pl.typed_failures[entry.typed_error] ?? 0) + 1;
|
|
115
|
+
}
|
|
116
|
+
if (entry.detail === "middle")
|
|
117
|
+
pl.by_detail.middle += 1;
|
|
118
|
+
else if (entry.detail === "full")
|
|
119
|
+
pl.by_detail.full += 1;
|
|
120
|
+
if (entry.has_truncated_content === true)
|
|
121
|
+
pl.truncated_count += 1;
|
|
122
|
+
if (typeof entry.max_content_tokens_estimate === "number" &&
|
|
123
|
+
entry.max_content_tokens_estimate > pl.max_content_tokens_estimate) {
|
|
124
|
+
pl.max_content_tokens_estimate = entry.max_content_tokens_estimate;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
99
127
|
if (ts > nowMs)
|
|
100
128
|
continue;
|
|
101
129
|
if (ts >= monthStartMs) {
|
|
102
130
|
summary.month.calls += 1;
|
|
103
|
-
summary.month.
|
|
131
|
+
summary.month.context_tokens_delivered_estimate += delivered;
|
|
132
|
+
summary.month.context_tokens_measured_hits += measuredHit;
|
|
104
133
|
summary.month.context_hits += hit;
|
|
105
134
|
}
|
|
106
135
|
if (ts >= weekStartMs) {
|
|
107
136
|
summary.week.calls += 1;
|
|
108
|
-
summary.week.
|
|
137
|
+
summary.week.context_tokens_delivered_estimate += delivered;
|
|
138
|
+
summary.week.context_tokens_measured_hits += measuredHit;
|
|
109
139
|
summary.week.context_hits += hit;
|
|
110
140
|
}
|
|
111
141
|
if (ts >= todayStartMs && ts < todayEndMs) {
|
|
112
142
|
summary.today.calls += 1;
|
|
113
|
-
summary.today.
|
|
143
|
+
summary.today.context_tokens_delivered_estimate += delivered;
|
|
144
|
+
summary.today.context_tokens_measured_hits += measuredHit;
|
|
114
145
|
summary.today.context_hits += hit;
|
|
115
146
|
}
|
|
116
147
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-usage-stats.js","sourceRoot":"","sources":["../../../src/observability/tool-usage-stats.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool-usage-stats.js","sourceRoot":"","sources":["../../../src/observability/tool-usage-stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export type SearchMode = "exact_id" | "ranked";
|
|
2
|
+
export type DetailLevel = "summary" | "middle" | "full";
|
|
1
3
|
export interface ToolUsageEntry {
|
|
2
4
|
timestamp: string;
|
|
3
5
|
type: "mcp_tool_call";
|
|
@@ -8,6 +10,57 @@ export interface ToolUsageEntry {
|
|
|
8
10
|
result_count?: number;
|
|
9
11
|
degraded?: boolean;
|
|
10
12
|
error?: string;
|
|
13
|
+
/**
|
|
14
|
+
* rift_search only: "exact_id" when `args.id` is present AND
|
|
15
|
+
* `detail` is "middle" or "full" (the strict direct-lookup gate on
|
|
16
|
+
* `/search`); "ranked" otherwise. Recorded as a leading indicator for
|
|
17
|
+
* precise-lookup trust: a healthy exact-ID flow has a high success
|
|
18
|
+
* ratio and rare typed failures; failures are trust-loss risk signals
|
|
19
|
+
* that may push an agent to seek evidence outside Rift.
|
|
20
|
+
* Trust risk is named precisely — we cannot tell from Rift alone that
|
|
21
|
+
* the agent went on to read JSONL from disk, only that the precise
|
|
22
|
+
* lookup it asked for here failed.
|
|
23
|
+
*/
|
|
24
|
+
search_mode?: SearchMode;
|
|
25
|
+
/** rift_search only: the detail level argued by the caller. */
|
|
26
|
+
detail?: DetailLevel;
|
|
27
|
+
/** rift_search only: whether the caller supplied an `id`. */
|
|
28
|
+
id_present?: boolean;
|
|
29
|
+
/** rift_search only: whether the caller supplied a `tier`. */
|
|
30
|
+
tier_present?: boolean;
|
|
31
|
+
/** rift_search only: whether the caller supplied a `source_table`. */
|
|
32
|
+
source_table_present?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* rift_search only: the typed error code parsed from the response
|
|
35
|
+
* body when the call failed with a structured error (e.g.
|
|
36
|
+
* `id_not_found`, `ambiguous_id`). Absent for generic transport
|
|
37
|
+
* failures or untyped 4xx/5xx.
|
|
38
|
+
*/
|
|
39
|
+
typed_error?: string;
|
|
40
|
+
/**
|
|
41
|
+
* rift_search only: true when any returned hit carries
|
|
42
|
+
* `content_truncated === true`. Signals that the agent received a
|
|
43
|
+
* bounded middle-detail excerpt rather than the full row body — a
|
|
44
|
+
* useful leading indicator that the agent may decide to escalate to
|
|
45
|
+
* `detail=full` next.
|
|
46
|
+
*/
|
|
47
|
+
has_truncated_content?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* rift_search only: the maximum `content_tokens_estimate` observed
|
|
50
|
+
* across returned hits. Cheap to compute (the size advisory is
|
|
51
|
+
* already on each hit) and lets us see whether agents are routinely
|
|
52
|
+
* being shown rows that would blow context if expanded.
|
|
53
|
+
*/
|
|
54
|
+
max_content_tokens_estimate?: number;
|
|
55
|
+
/**
|
|
56
|
+
* Total UTF-8 byte length of `content[].text` on the MCP response we
|
|
57
|
+
* hand back to the caller. The text channel is the user/model-visible
|
|
58
|
+
* answer; we count it (rather than `structuredContent`, which often
|
|
59
|
+
* duplicates the same data) so the resulting tokens-delivered estimate
|
|
60
|
+
* isn't double-counted. Recorded on every successful call so it can
|
|
61
|
+
* survive retrieval-tool / non-retrieval-tool reclassifications later.
|
|
62
|
+
*/
|
|
63
|
+
response_text_bytes?: number;
|
|
11
64
|
}
|
|
12
65
|
export declare function sanitizeArgs(raw: Record<string, unknown>): Record<string, unknown>;
|
|
13
66
|
/**
|
|
@@ -35,6 +88,46 @@ export declare function extractDegraded(tool: string, mcpResult: {
|
|
|
35
88
|
}>;
|
|
36
89
|
structuredContent?: Record<string, unknown>;
|
|
37
90
|
}): boolean | undefined;
|
|
91
|
+
/**
|
|
92
|
+
* Derive search-mode metadata from the raw rift_search args. Mirrors the
|
|
93
|
+
* direct-lookup gate on `/search`: `id` + (`middle` | `full`) → exact_id;
|
|
94
|
+
* anything else is ranked retrieval, even if `id` is present alongside
|
|
95
|
+
* `detail="summary"` (which doesn't trigger the strict path).
|
|
96
|
+
*/
|
|
97
|
+
export declare function deriveSearchModeMeta(args: Record<string, unknown>): {
|
|
98
|
+
search_mode: SearchMode;
|
|
99
|
+
detail: DetailLevel;
|
|
100
|
+
id_present: boolean;
|
|
101
|
+
tier_present: boolean;
|
|
102
|
+
source_table_present: boolean;
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Derive result-side metadata for a successful rift_search call:
|
|
106
|
+
* - has_truncated_content: any returned hit with content_truncated=true
|
|
107
|
+
* - max_content_tokens_estimate: max content_tokens_estimate across hits
|
|
108
|
+
*
|
|
109
|
+
* Reads from `structuredContent.results` (the canonical compact DTO).
|
|
110
|
+
* Returns `{}` when the result shape is unknown — never throws.
|
|
111
|
+
*/
|
|
112
|
+
export declare function extractSearchResultMeta(mcpResult: {
|
|
113
|
+
content: Array<{
|
|
114
|
+
type: string;
|
|
115
|
+
text: string;
|
|
116
|
+
}>;
|
|
117
|
+
structuredContent?: Record<string, unknown>;
|
|
118
|
+
}): {
|
|
119
|
+
has_truncated_content?: boolean;
|
|
120
|
+
max_content_tokens_estimate?: number;
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* Try to parse the typed error code (`id_not_found`, `ambiguous_id`, …)
|
|
124
|
+
* out of a failure response's text channel. `formatError` formats typed
|
|
125
|
+
* 404/409 bodies as `"<Prefix>: { "error": "id_not_found", … }"`, so we
|
|
126
|
+
* locate the first `{`, JSON.parse to end, and return the `error` field
|
|
127
|
+
* when it's a string. Returns `undefined` for transport-only failures
|
|
128
|
+
* (no body), untyped responses, or unparseable text.
|
|
129
|
+
*/
|
|
130
|
+
export declare function parseTypedError(text: string | undefined): string | undefined;
|
|
38
131
|
export declare class ToolUsageLogger {
|
|
39
132
|
private readonly logPath;
|
|
40
133
|
constructor(dataDir: string);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-usage.d.ts","sourceRoot":"","sources":["../../../src/observability/tool-usage.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-usage.d.ts","sourceRoot":"","sources":["../../../src/observability/tool-usage.ts"],"names":[],"mappings":"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"}
|