@agent-native/core 0.34.0 → 0.35.2
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/agent/context-xray/actions/context-evict.d.ts +3 -0
- package/dist/agent/context-xray/actions/context-evict.d.ts.map +1 -0
- package/dist/agent/context-xray/actions/context-evict.js +35 -0
- package/dist/agent/context-xray/actions/context-evict.js.map +1 -0
- package/dist/agent/context-xray/actions/context-manifest-get.d.ts +3 -0
- package/dist/agent/context-xray/actions/context-manifest-get.d.ts.map +1 -0
- package/dist/agent/context-xray/actions/context-manifest-get.js +67 -0
- package/dist/agent/context-xray/actions/context-manifest-get.js.map +1 -0
- package/dist/agent/context-xray/actions/context-pin.d.ts +3 -0
- package/dist/agent/context-xray/actions/context-pin.d.ts.map +1 -0
- package/dist/agent/context-xray/actions/context-pin.js +35 -0
- package/dist/agent/context-xray/actions/context-pin.js.map +1 -0
- package/dist/agent/context-xray/actions/context-report.d.ts +3 -0
- package/dist/agent/context-xray/actions/context-report.d.ts.map +1 -0
- package/dist/agent/context-xray/actions/context-report.js +59 -0
- package/dist/agent/context-xray/actions/context-report.js.map +1 -0
- package/dist/agent/context-xray/actions/context-restore.d.ts +3 -0
- package/dist/agent/context-xray/actions/context-restore.d.ts.map +1 -0
- package/dist/agent/context-xray/actions/context-restore.js +33 -0
- package/dist/agent/context-xray/actions/context-restore.js.map +1 -0
- package/dist/agent/context-xray/actions/errors.d.ts +7 -0
- package/dist/agent/context-xray/actions/errors.d.ts.map +1 -0
- package/dist/agent/context-xray/actions/errors.js +15 -0
- package/dist/agent/context-xray/actions/errors.js.map +1 -0
- package/dist/agent/context-xray/apply-directives.d.ts +10 -0
- package/dist/agent/context-xray/apply-directives.d.ts.map +1 -0
- package/dist/agent/context-xray/apply-directives.js +100 -0
- package/dist/agent/context-xray/apply-directives.js.map +1 -0
- package/dist/agent/context-xray/directives-store.d.ts +26 -0
- package/dist/agent/context-xray/directives-store.d.ts.map +1 -0
- package/dist/agent/context-xray/directives-store.js +131 -0
- package/dist/agent/context-xray/directives-store.js.map +1 -0
- package/dist/agent/context-xray/identity.d.ts +5 -0
- package/dist/agent/context-xray/identity.d.ts.map +1 -0
- package/dist/agent/context-xray/identity.js +33 -0
- package/dist/agent/context-xray/identity.js.map +1 -0
- package/dist/agent/context-xray/manifest.d.ts +19 -0
- package/dist/agent/context-xray/manifest.d.ts.map +1 -0
- package/dist/agent/context-xray/manifest.js +115 -0
- package/dist/agent/context-xray/manifest.js.map +1 -0
- package/dist/agent/context-xray/migrations.d.ts +3 -0
- package/dist/agent/context-xray/migrations.d.ts.map +1 -0
- package/dist/agent/context-xray/migrations.js +31 -0
- package/dist/agent/context-xray/migrations.js.map +1 -0
- package/dist/agent/context-xray/plugin.d.ts +5 -0
- package/dist/agent/context-xray/plugin.d.ts.map +1 -0
- package/dist/agent/context-xray/plugin.js +15 -0
- package/dist/agent/context-xray/plugin.js.map +1 -0
- package/dist/agent/context-xray/schema.d.ts +249 -0
- package/dist/agent/context-xray/schema.d.ts.map +1 -0
- package/dist/agent/context-xray/schema.js +17 -0
- package/dist/agent/context-xray/schema.js.map +1 -0
- package/dist/agent/context-xray/segments.d.ts +19 -0
- package/dist/agent/context-xray/segments.d.ts.map +1 -0
- package/dist/agent/context-xray/segments.js +154 -0
- package/dist/agent/context-xray/segments.js.map +1 -0
- package/dist/agent/context-xray/tokenize.d.ts +10 -0
- package/dist/agent/context-xray/tokenize.d.ts.map +1 -0
- package/dist/agent/context-xray/tokenize.js +70 -0
- package/dist/agent/context-xray/tokenize.js.map +1 -0
- package/dist/agent/production-agent.d.ts +2 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +45 -5
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/cli/context-xray-local.d.ts +16 -0
- package/dist/cli/context-xray-local.d.ts.map +1 -0
- package/dist/cli/context-xray-local.js +738 -0
- package/dist/cli/context-xray-local.js.map +1 -0
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +1 -0
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/skills.d.ts +3 -0
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +200 -73
- package/dist/cli/skills.js.map +1 -1
- package/dist/cli/templates-meta.js +5 -5
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +2 -1
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/components/ui/sheet.d.ts +16 -0
- package/dist/client/components/ui/sheet.d.ts.map +1 -0
- package/dist/client/components/ui/sheet.js +23 -0
- package/dist/client/components/ui/sheet.js.map +1 -0
- package/dist/client/context-xray/ContextMeter.d.ts +4 -0
- package/dist/client/context-xray/ContextMeter.d.ts.map +1 -0
- package/dist/client/context-xray/ContextMeter.js +76 -0
- package/dist/client/context-xray/ContextMeter.js.map +1 -0
- package/dist/client/context-xray/ContextSegmentRow.d.ts +9 -0
- package/dist/client/context-xray/ContextSegmentRow.d.ts.map +1 -0
- package/dist/client/context-xray/ContextSegmentRow.js +22 -0
- package/dist/client/context-xray/ContextSegmentRow.js.map +1 -0
- package/dist/client/context-xray/ContextTreemap.d.ts +6 -0
- package/dist/client/context-xray/ContextTreemap.d.ts.map +1 -0
- package/dist/client/context-xray/ContextTreemap.js +49 -0
- package/dist/client/context-xray/ContextTreemap.js.map +1 -0
- package/dist/client/context-xray/ContextXRayPanel.d.ts +11 -0
- package/dist/client/context-xray/ContextXRayPanel.d.ts.map +1 -0
- package/dist/client/context-xray/ContextXRayPanel.js +87 -0
- package/dist/client/context-xray/ContextXRayPanel.js.map +1 -0
- package/dist/client/context-xray/SegmentProvenancePopover.d.ts +7 -0
- package/dist/client/context-xray/SegmentProvenancePopover.d.ts.map +1 -0
- package/dist/client/context-xray/SegmentProvenancePopover.js +7 -0
- package/dist/client/context-xray/SegmentProvenancePopover.js.map +1 -0
- package/dist/client/context-xray/format.d.ts +7 -0
- package/dist/client/context-xray/format.d.ts.map +1 -0
- package/dist/client/context-xray/format.js +47 -0
- package/dist/client/context-xray/format.js.map +1 -0
- package/dist/deploy/route-discovery.d.ts.map +1 -1
- package/dist/deploy/route-discovery.js +1 -0
- package/dist/deploy/route-discovery.js.map +1 -1
- package/dist/deploy/workspace-core.d.ts +1 -1
- package/dist/deploy/workspace-core.d.ts.map +1 -1
- package/dist/deploy/workspace-core.js +1 -0
- package/dist/deploy/workspace-core.js.map +1 -1
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +20 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/framework-request-handler.d.ts.map +1 -1
- package/dist/server/framework-request-handler.js +2 -0
- package/dist/server/framework-request-handler.js.map +1 -1
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/shared/context-xray.d.ts +58 -0
- package/dist/shared/context-xray.d.ts.map +1 -0
- package/dist/shared/context-xray.js +17 -0
- package/dist/shared/context-xray.js.map +1 -0
- package/dist/templates/default/package.json +3 -3
- package/dist/vite/action-types-plugin.d.ts.map +1 -1
- package/dist/vite/action-types-plugin.js +20 -0
- package/dist/vite/action-types-plugin.js.map +1 -1
- package/package.json +15 -7
- package/src/templates/default/package.json +3 -3
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { appStateGet, appStatePut } from "../../application-state/store.js";
|
|
2
|
+
import { getDbExec } from "../../db/client.js";
|
|
3
|
+
import { CONTEXT_XRAY_MANIFEST_KEY, } from "../../shared/context-xray.js";
|
|
4
|
+
import { updateManifestSegmentStatus } from "./manifest.js";
|
|
5
|
+
function directiveId() {
|
|
6
|
+
return `ctxdir-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
|
|
7
|
+
}
|
|
8
|
+
function rowBool(value) {
|
|
9
|
+
return value === true || value === 1 || value === "1";
|
|
10
|
+
}
|
|
11
|
+
function rowToDirective(row) {
|
|
12
|
+
return {
|
|
13
|
+
id: String(row.id),
|
|
14
|
+
threadId: String(row.thread_id),
|
|
15
|
+
segmentId: String(row.segment_id),
|
|
16
|
+
action: row.action,
|
|
17
|
+
summaryText: typeof row.summary_text === "string" ? row.summary_text : null,
|
|
18
|
+
createdBy: row.created_by,
|
|
19
|
+
active: rowBool(row.active),
|
|
20
|
+
originTurn: typeof row.origin_turn === "string" ? row.origin_turn : null,
|
|
21
|
+
createdAt: Number(row.created_at) || undefined,
|
|
22
|
+
updatedAt: Number(row.updated_at) || undefined,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export async function loadContextDirectives(threadId, opts = {}) {
|
|
26
|
+
const client = getDbExec();
|
|
27
|
+
const ownerClause = opts.ownerEmail ? " AND owner_email = ?" : "";
|
|
28
|
+
const args = [threadId, 1];
|
|
29
|
+
if (opts.ownerEmail)
|
|
30
|
+
args.push(opts.ownerEmail);
|
|
31
|
+
const result = await client.execute({
|
|
32
|
+
sql: `SELECT * FROM context_directives WHERE thread_id = ? AND active = ?${ownerClause} ORDER BY updated_at ASC`,
|
|
33
|
+
args,
|
|
34
|
+
});
|
|
35
|
+
const out = new Map();
|
|
36
|
+
for (const row of result.rows) {
|
|
37
|
+
const directive = rowToDirective(row);
|
|
38
|
+
out.set(directive.segmentId, directive);
|
|
39
|
+
}
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
export async function upsertContextDirective(input) {
|
|
43
|
+
const client = getDbExec();
|
|
44
|
+
const now = Date.now();
|
|
45
|
+
const existing = await client.execute({
|
|
46
|
+
sql: `SELECT * FROM context_directives WHERE thread_id = ? AND segment_id = ? AND owner_email = ? ORDER BY updated_at DESC LIMIT 1`,
|
|
47
|
+
args: [input.threadId, input.segmentId, input.ownerEmail],
|
|
48
|
+
});
|
|
49
|
+
const row = existing.rows[0];
|
|
50
|
+
if (row) {
|
|
51
|
+
await client.execute({
|
|
52
|
+
sql: `UPDATE context_directives
|
|
53
|
+
SET action = ?, summary_text = ?, created_by = ?, active = ?, origin_turn = ?, updated_at = ?, org_id = COALESCE(?, org_id)
|
|
54
|
+
WHERE id = ? AND owner_email = ?`,
|
|
55
|
+
args: [
|
|
56
|
+
input.action,
|
|
57
|
+
input.summaryText ?? null,
|
|
58
|
+
input.createdBy ?? "user",
|
|
59
|
+
1,
|
|
60
|
+
input.originTurn ?? null,
|
|
61
|
+
now,
|
|
62
|
+
input.orgId ?? null,
|
|
63
|
+
row.id,
|
|
64
|
+
input.ownerEmail,
|
|
65
|
+
],
|
|
66
|
+
});
|
|
67
|
+
return {
|
|
68
|
+
...rowToDirective(row),
|
|
69
|
+
action: input.action,
|
|
70
|
+
summaryText: input.summaryText ?? null,
|
|
71
|
+
createdBy: input.createdBy ?? "user",
|
|
72
|
+
active: true,
|
|
73
|
+
originTurn: input.originTurn ?? null,
|
|
74
|
+
updatedAt: now,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const id = directiveId();
|
|
78
|
+
await client.execute({
|
|
79
|
+
sql: `INSERT INTO context_directives
|
|
80
|
+
(id, thread_id, segment_id, action, summary_text, created_by, active, origin_turn, created_at, updated_at, owner_email, org_id, visibility)
|
|
81
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
82
|
+
args: [
|
|
83
|
+
id,
|
|
84
|
+
input.threadId,
|
|
85
|
+
input.segmentId,
|
|
86
|
+
input.action,
|
|
87
|
+
input.summaryText ?? null,
|
|
88
|
+
input.createdBy ?? "user",
|
|
89
|
+
1,
|
|
90
|
+
input.originTurn ?? null,
|
|
91
|
+
now,
|
|
92
|
+
now,
|
|
93
|
+
input.ownerEmail,
|
|
94
|
+
input.orgId ?? null,
|
|
95
|
+
"private",
|
|
96
|
+
],
|
|
97
|
+
});
|
|
98
|
+
return {
|
|
99
|
+
id,
|
|
100
|
+
threadId: input.threadId,
|
|
101
|
+
segmentId: input.segmentId,
|
|
102
|
+
action: input.action,
|
|
103
|
+
summaryText: input.summaryText ?? null,
|
|
104
|
+
createdBy: input.createdBy ?? "user",
|
|
105
|
+
active: true,
|
|
106
|
+
originTurn: input.originTurn ?? null,
|
|
107
|
+
createdAt: now,
|
|
108
|
+
updatedAt: now,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
export async function deactivateContextDirective(input) {
|
|
112
|
+
const result = await getDbExec().execute({
|
|
113
|
+
sql: `UPDATE context_directives SET active = ?, updated_at = ? WHERE thread_id = ? AND segment_id = ? AND owner_email = ?`,
|
|
114
|
+
args: [0, Date.now(), input.threadId, input.segmentId, input.ownerEmail],
|
|
115
|
+
});
|
|
116
|
+
return result.rowsAffected;
|
|
117
|
+
}
|
|
118
|
+
export async function readContextManifest(threadId) {
|
|
119
|
+
return (await appStateGet(threadId, CONTEXT_XRAY_MANIFEST_KEY));
|
|
120
|
+
}
|
|
121
|
+
export async function writeContextManifestStatus(input) {
|
|
122
|
+
const current = await readContextManifest(input.threadId);
|
|
123
|
+
if (!current)
|
|
124
|
+
return null;
|
|
125
|
+
const next = updateManifestSegmentStatus(current, input.segmentId, input.status);
|
|
126
|
+
await appStatePut(input.threadId, CONTEXT_XRAY_MANIFEST_KEY, next, {
|
|
127
|
+
requestSource: "context-xray",
|
|
128
|
+
});
|
|
129
|
+
return next;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=directives-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directives-store.js","sourceRoot":"","sources":["../../../src/agent/context-xray/directives-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { appStateGet, appStatePut } from \"../../application-state/store.js\";\nimport { getDbExec } from \"../../db/client.js\";\nimport {\n CONTEXT_XRAY_MANIFEST_KEY,\n type ContextDirective,\n type ContextDirectiveAction,\n type ContextDirectiveCreator,\n type ContextManifest,\n} from \"../../shared/context-xray.js\";\nimport { updateManifestSegmentStatus } from \"./manifest.js\";\n\nfunction directiveId(): string {\n return `ctxdir-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction rowBool(value: unknown): boolean {\n return value === true || value === 1 || value === \"1\";\n}\n\nfunction rowToDirective(row: Record<string, unknown>): ContextDirective {\n return {\n id: String(row.id),\n threadId: String(row.thread_id),\n segmentId: String(row.segment_id),\n action: row.action as ContextDirectiveAction,\n summaryText: typeof row.summary_text === \"string\" ? row.summary_text : null,\n createdBy: row.created_by as ContextDirectiveCreator,\n active: rowBool(row.active),\n originTurn: typeof row.origin_turn === \"string\" ? row.origin_turn : null,\n createdAt: Number(row.created_at) || undefined,\n updatedAt: Number(row.updated_at) || undefined,\n };\n}\n\nexport async function loadContextDirectives(\n threadId: string,\n opts: { ownerEmail?: string | null } = {},\n): Promise<Map<string, ContextDirective>> {\n const client = getDbExec();\n const ownerClause = opts.ownerEmail ? \" AND owner_email = ?\" : \"\";\n const args: unknown[] = [threadId, 1];\n if (opts.ownerEmail) args.push(opts.ownerEmail);\n const result = await client.execute({\n sql: `SELECT * FROM context_directives WHERE thread_id = ? AND active = ?${ownerClause} ORDER BY updated_at ASC`,\n args,\n });\n const out = new Map<string, ContextDirective>();\n for (const row of result.rows as Record<string, unknown>[]) {\n const directive = rowToDirective(row);\n out.set(directive.segmentId, directive);\n }\n return out;\n}\n\nexport async function upsertContextDirective(input: {\n threadId: string;\n segmentId: string;\n action: ContextDirectiveAction;\n summaryText?: string | null;\n createdBy?: ContextDirectiveCreator;\n originTurn?: string | null;\n ownerEmail: string;\n orgId?: string | null;\n}): Promise<ContextDirective> {\n const client = getDbExec();\n const now = Date.now();\n const existing = await client.execute({\n sql: `SELECT * FROM context_directives WHERE thread_id = ? AND segment_id = ? AND owner_email = ? ORDER BY updated_at DESC LIMIT 1`,\n args: [input.threadId, input.segmentId, input.ownerEmail],\n });\n const row = (existing.rows as Record<string, unknown>[])[0];\n if (row) {\n await client.execute({\n sql: `UPDATE context_directives\n SET action = ?, summary_text = ?, created_by = ?, active = ?, origin_turn = ?, updated_at = ?, org_id = COALESCE(?, org_id)\n WHERE id = ? AND owner_email = ?`,\n args: [\n input.action,\n input.summaryText ?? null,\n input.createdBy ?? \"user\",\n 1,\n input.originTurn ?? null,\n now,\n input.orgId ?? null,\n row.id,\n input.ownerEmail,\n ],\n });\n return {\n ...rowToDirective(row),\n action: input.action,\n summaryText: input.summaryText ?? null,\n createdBy: input.createdBy ?? \"user\",\n active: true,\n originTurn: input.originTurn ?? null,\n updatedAt: now,\n };\n }\n\n const id = directiveId();\n await client.execute({\n sql: `INSERT INTO context_directives\n (id, thread_id, segment_id, action, summary_text, created_by, active, origin_turn, created_at, updated_at, owner_email, org_id, visibility)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n args: [\n id,\n input.threadId,\n input.segmentId,\n input.action,\n input.summaryText ?? null,\n input.createdBy ?? \"user\",\n 1,\n input.originTurn ?? null,\n now,\n now,\n input.ownerEmail,\n input.orgId ?? null,\n \"private\",\n ],\n });\n\n return {\n id,\n threadId: input.threadId,\n segmentId: input.segmentId,\n action: input.action,\n summaryText: input.summaryText ?? null,\n createdBy: input.createdBy ?? \"user\",\n active: true,\n originTurn: input.originTurn ?? null,\n createdAt: now,\n updatedAt: now,\n };\n}\n\nexport async function deactivateContextDirective(input: {\n threadId: string;\n segmentId: string;\n ownerEmail: string;\n}): Promise<number> {\n const result = await getDbExec().execute({\n sql: `UPDATE context_directives SET active = ?, updated_at = ? WHERE thread_id = ? AND segment_id = ? AND owner_email = ?`,\n args: [0, Date.now(), input.threadId, input.segmentId, input.ownerEmail],\n });\n return result.rowsAffected;\n}\n\nexport async function readContextManifest(\n threadId: string,\n): Promise<ContextManifest | null> {\n return (await appStateGet(\n threadId,\n CONTEXT_XRAY_MANIFEST_KEY,\n )) as unknown as ContextManifest | null;\n}\n\nexport async function writeContextManifestStatus(input: {\n threadId: string;\n segmentId: string;\n status: \"active\" | \"pinned\" | \"evicted\" | \"summarized\";\n}): Promise<ContextManifest | null> {\n const current = await readContextManifest(input.threadId);\n if (!current) return null;\n const next = updateManifestSegmentStatus(\n current,\n input.segmentId,\n input.status,\n );\n await appStatePut(\n input.threadId,\n CONTEXT_XRAY_MANIFEST_KEY,\n next as unknown as Record<string, unknown>,\n {\n requestSource: \"context-xray\",\n },\n );\n return next;\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function stableStringify(value: unknown): string;
|
|
2
|
+
export declare function normalizeToolCallInputForIdentity(input: unknown): Record<string, unknown>;
|
|
3
|
+
export declare function parseToolInputForIdentity(input: unknown): unknown;
|
|
4
|
+
export declare function toolPairKey(toolName: string, input: unknown): string;
|
|
5
|
+
//# sourceMappingURL=identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../src/agent/context-xray/identity.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAYtD;AAED,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,OAAO,GACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKzB;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAOjE;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAIpE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export function stableStringify(value) {
|
|
2
|
+
if (value === null || typeof value !== "object") {
|
|
3
|
+
return JSON.stringify(value);
|
|
4
|
+
}
|
|
5
|
+
if (Array.isArray(value)) {
|
|
6
|
+
return `[${value.map((item) => stableStringify(item)).join(",")}]`;
|
|
7
|
+
}
|
|
8
|
+
const obj = value;
|
|
9
|
+
return `{${Object.keys(obj)
|
|
10
|
+
.sort()
|
|
11
|
+
.map((key) => `${JSON.stringify(key)}:${stableStringify(obj[key])}`)
|
|
12
|
+
.join(",")}}`;
|
|
13
|
+
}
|
|
14
|
+
export function normalizeToolCallInputForIdentity(input) {
|
|
15
|
+
if (input && typeof input === "object" && !Array.isArray(input)) {
|
|
16
|
+
return input;
|
|
17
|
+
}
|
|
18
|
+
return { rawInput: input };
|
|
19
|
+
}
|
|
20
|
+
export function parseToolInputForIdentity(input) {
|
|
21
|
+
if (typeof input !== "string")
|
|
22
|
+
return input;
|
|
23
|
+
try {
|
|
24
|
+
return JSON.parse(input);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return input;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function toolPairKey(toolName, input) {
|
|
31
|
+
return `${toolName}:${stableStringify(normalizeToolCallInputForIdentity(parseToolInputForIdentity(input)))}`;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/agent/context-xray/identity.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACrE,CAAC;IACD,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;SACxB,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;SACnE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,KAAc;IAEd,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,KAAgC,CAAC;IAC1C,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,KAAc;IAC1D,OAAO,GAAG,QAAQ,IAAI,eAAe,CACnC,iCAAiC,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CACpE,EAAE,CAAC;AACN,CAAC","sourcesContent":["export function stableStringify(value: unknown): string {\n if (value === null || typeof value !== \"object\") {\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n return `[${value.map((item) => stableStringify(item)).join(\",\")}]`;\n }\n const obj = value as Record<string, unknown>;\n return `{${Object.keys(obj)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${stableStringify(obj[key])}`)\n .join(\",\")}}`;\n}\n\nexport function normalizeToolCallInputForIdentity(\n input: unknown,\n): Record<string, unknown> {\n if (input && typeof input === \"object\" && !Array.isArray(input)) {\n return input as Record<string, unknown>;\n }\n return { rawInput: input };\n}\n\nexport function parseToolInputForIdentity(input: unknown): unknown {\n if (typeof input !== \"string\") return input;\n try {\n return JSON.parse(input);\n } catch {\n return input;\n }\n}\n\nexport function toolPairKey(toolName: string, input: unknown): string {\n return `${toolName}:${stableStringify(\n normalizeToolCallInputForIdentity(parseToolInputForIdentity(input)),\n )}`;\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { EngineMessage } from "../engine/types.js";
|
|
2
|
+
import { CONTEXT_XRAY_MANIFEST_KEY, type ContextDirective, type ContextManifest, type ContextManifestSource, type ContextSegmentStatus } from "../../shared/context-xray.js";
|
|
3
|
+
export { CONTEXT_XRAY_MANIFEST_KEY };
|
|
4
|
+
export interface BuildManifestInput {
|
|
5
|
+
threadId: string;
|
|
6
|
+
turnId?: string;
|
|
7
|
+
model?: string;
|
|
8
|
+
rawMessages: EngineMessage[];
|
|
9
|
+
sentMessages: EngineMessage[];
|
|
10
|
+
appliedStatus: Map<string, ContextSegmentStatus>;
|
|
11
|
+
directives: Map<string, ContextDirective>;
|
|
12
|
+
protectedSegmentIds?: Set<string>;
|
|
13
|
+
source?: ContextManifestSource;
|
|
14
|
+
enforceable?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function buildManifest(input: BuildManifestInput): Promise<ContextManifest>;
|
|
17
|
+
export declare function writeContextManifest(threadId: string, manifest: ContextManifest): Promise<void>;
|
|
18
|
+
export declare function updateManifestSegmentStatus(manifest: ContextManifest, segmentId: string, status: ContextSegmentStatus): ContextManifest;
|
|
19
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/agent/context-xray/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EACL,yBAAyB,EACzB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EAEpB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAE1B,MAAM,8BAA8B,CAAC;AAUtC,OAAO,EAAE,yBAAyB,EAAE,CAAC;AAErC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IACjD,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1C,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA0CD,wBAAsB,aAAa,CACjC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,eAAe,CAAC,CAgE1B;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,oBAAoB,GAC3B,eAAe,CAwBjB"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { CONTEXT_XRAY_MANIFEST_KEY, } from "../../shared/context-xray.js";
|
|
2
|
+
import { appStatePut } from "../../application-state/store.js";
|
|
3
|
+
import { buildDeepLink } from "../../server/deep-link.js";
|
|
4
|
+
import { computeSegments } from "./segments.js";
|
|
5
|
+
import { countMessageTokens, countPartTokens, countTextTokens, } from "./tokenize.js";
|
|
6
|
+
export { CONTEXT_XRAY_MANIFEST_KEY };
|
|
7
|
+
function combineMethods(left, right) {
|
|
8
|
+
return left === "estimate" || right === "estimate" ? "estimate" : "exact";
|
|
9
|
+
}
|
|
10
|
+
function statusForSegment(segmentId, appliedStatus, directives) {
|
|
11
|
+
const applied = appliedStatus.get(segmentId);
|
|
12
|
+
if (applied)
|
|
13
|
+
return applied;
|
|
14
|
+
const directive = directives.get(segmentId);
|
|
15
|
+
if (directive?.active && directive.action === "pin")
|
|
16
|
+
return "pinned";
|
|
17
|
+
return "active";
|
|
18
|
+
}
|
|
19
|
+
async function summaryTokenCount(segmentId, status, directives) {
|
|
20
|
+
if (status !== "summarized")
|
|
21
|
+
return undefined;
|
|
22
|
+
const text = directives.get(segmentId)?.summaryText;
|
|
23
|
+
if (!text)
|
|
24
|
+
return undefined;
|
|
25
|
+
return (await countTextTokens(text)).tokens;
|
|
26
|
+
}
|
|
27
|
+
function contextXrayUrl(threadId) {
|
|
28
|
+
const to = `/?contextXray=1&threadId=${encodeURIComponent(threadId)}`;
|
|
29
|
+
return buildDeepLink({
|
|
30
|
+
app: "agent-native",
|
|
31
|
+
view: "context-xray",
|
|
32
|
+
to,
|
|
33
|
+
params: { threadId },
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
export async function buildManifest(input) {
|
|
37
|
+
const rawSegments = computeSegments(input.rawMessages);
|
|
38
|
+
const rawCounts = await Promise.all(rawSegments.map((segment) => countPartTokens(segment.part)));
|
|
39
|
+
const rawTokenTotals = rawCounts.reduce((acc, count) => ({
|
|
40
|
+
tokens: acc.tokens + count.tokens,
|
|
41
|
+
method: combineMethods(acc.method, count.method),
|
|
42
|
+
}), { tokens: 0, method: "exact" });
|
|
43
|
+
const sentTokenTotals = await countMessageTokens(input.sentMessages);
|
|
44
|
+
const segments = [];
|
|
45
|
+
for (const [index, segment] of rawSegments.entries()) {
|
|
46
|
+
const tokenCount = rawCounts[index] ?? { tokens: 1, method: "estimate" };
|
|
47
|
+
const status = statusForSegment(segment.segmentId, input.appliedStatus, input.directives);
|
|
48
|
+
const protectedSegment = input.protectedSegmentIds?.has(segment.segmentId);
|
|
49
|
+
const summaryTokens = await summaryTokenCount(segment.segmentId, status, input.directives);
|
|
50
|
+
segments.push({
|
|
51
|
+
segmentId: segment.segmentId,
|
|
52
|
+
type: segment.type,
|
|
53
|
+
role: segment.role,
|
|
54
|
+
group: status === "pinned" ? "Pinned" : segment.group,
|
|
55
|
+
label: segment.label,
|
|
56
|
+
tokenCount: tokenCount.tokens,
|
|
57
|
+
tokenMethod: tokenCount.method,
|
|
58
|
+
status: protectedSegment && status !== "pinned" ? "active" : status,
|
|
59
|
+
...(protectedSegment ? { protected: true } : {}),
|
|
60
|
+
...(summaryTokens ? { summaryTokenCount: summaryTokens } : {}),
|
|
61
|
+
...(segment.pairKey ? { pairKey: segment.pairKey } : {}),
|
|
62
|
+
msgIndex: segment.msgIndex,
|
|
63
|
+
partIndex: segment.partIndex,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
const totalTokens = sentTokenTotals.tokens;
|
|
67
|
+
const rawTokens = rawTokenTotals.tokens;
|
|
68
|
+
return {
|
|
69
|
+
threadId: input.threadId,
|
|
70
|
+
...(input.turnId ? { turnId: input.turnId } : {}),
|
|
71
|
+
computedAt: Date.now(),
|
|
72
|
+
...(input.model ? { model: input.model } : {}),
|
|
73
|
+
totalTokens,
|
|
74
|
+
rawTokens,
|
|
75
|
+
reclaimedTokens: Math.max(0, rawTokens - totalTokens),
|
|
76
|
+
tokenCountMethod: combineMethods(rawTokenTotals.method, sentTokenTotals.method),
|
|
77
|
+
source: input.source ?? "structured",
|
|
78
|
+
enforceable: input.enforceable ?? true,
|
|
79
|
+
segments,
|
|
80
|
+
url: contextXrayUrl(input.threadId),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export async function writeContextManifest(threadId, manifest) {
|
|
84
|
+
await appStatePut(threadId, CONTEXT_XRAY_MANIFEST_KEY, manifest, {
|
|
85
|
+
requestSource: "context-xray",
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
export function updateManifestSegmentStatus(manifest, segmentId, status) {
|
|
89
|
+
let delta = 0;
|
|
90
|
+
const segments = manifest.segments.map((segment) => {
|
|
91
|
+
if (segment.segmentId !== segmentId)
|
|
92
|
+
return segment;
|
|
93
|
+
const previous = segment.status;
|
|
94
|
+
if (previous !== "evicted" && status === "evicted") {
|
|
95
|
+
delta -= segment.tokenCount;
|
|
96
|
+
}
|
|
97
|
+
else if (previous === "evicted" && status !== "evicted") {
|
|
98
|
+
delta += segment.tokenCount;
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
...segment,
|
|
102
|
+
status: segment.protected && status !== "pinned" ? "active" : status,
|
|
103
|
+
group: status === "pinned" ? "Pinned" : segment.group,
|
|
104
|
+
};
|
|
105
|
+
});
|
|
106
|
+
const totalTokens = Math.max(0, manifest.totalTokens + delta);
|
|
107
|
+
return {
|
|
108
|
+
...manifest,
|
|
109
|
+
computedAt: Date.now(),
|
|
110
|
+
totalTokens,
|
|
111
|
+
reclaimedTokens: Math.max(0, manifest.rawTokens - totalTokens),
|
|
112
|
+
segments,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/agent/context-xray/manifest.ts"],"names":[],"mappings":"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","sourcesContent":["import type { EngineMessage } from \"../engine/types.js\";\nimport {\n CONTEXT_XRAY_MANIFEST_KEY,\n type ContextDirective,\n type ContextManifest,\n type ContextManifestSegment,\n type ContextManifestSource,\n type ContextSegmentStatus,\n type ContextTokenCountMethod,\n} from \"../../shared/context-xray.js\";\nimport { appStatePut } from \"../../application-state/store.js\";\nimport { buildDeepLink } from \"../../server/deep-link.js\";\nimport { computeSegments } from \"./segments.js\";\nimport {\n countMessageTokens,\n countPartTokens,\n countTextTokens,\n} from \"./tokenize.js\";\n\nexport { CONTEXT_XRAY_MANIFEST_KEY };\n\nexport interface BuildManifestInput {\n threadId: string;\n turnId?: string;\n model?: string;\n rawMessages: EngineMessage[];\n sentMessages: EngineMessage[];\n appliedStatus: Map<string, ContextSegmentStatus>;\n directives: Map<string, ContextDirective>;\n protectedSegmentIds?: Set<string>;\n source?: ContextManifestSource;\n enforceable?: boolean;\n}\n\nfunction combineMethods(\n left: ContextTokenCountMethod,\n right: ContextTokenCountMethod,\n): ContextTokenCountMethod {\n return left === \"estimate\" || right === \"estimate\" ? \"estimate\" : \"exact\";\n}\n\nfunction statusForSegment(\n segmentId: string,\n appliedStatus: Map<string, ContextSegmentStatus>,\n directives: Map<string, ContextDirective>,\n): ContextSegmentStatus {\n const applied = appliedStatus.get(segmentId);\n if (applied) return applied;\n const directive = directives.get(segmentId);\n if (directive?.active && directive.action === \"pin\") return \"pinned\";\n return \"active\";\n}\n\nasync function summaryTokenCount(\n segmentId: string,\n status: ContextSegmentStatus,\n directives: Map<string, ContextDirective>,\n): Promise<number | undefined> {\n if (status !== \"summarized\") return undefined;\n const text = directives.get(segmentId)?.summaryText;\n if (!text) return undefined;\n return (await countTextTokens(text)).tokens;\n}\n\nfunction contextXrayUrl(threadId: string): string {\n const to = `/?contextXray=1&threadId=${encodeURIComponent(threadId)}`;\n return buildDeepLink({\n app: \"agent-native\",\n view: \"context-xray\",\n to,\n params: { threadId },\n });\n}\n\nexport async function buildManifest(\n input: BuildManifestInput,\n): Promise<ContextManifest> {\n const rawSegments = computeSegments(input.rawMessages);\n const rawCounts = await Promise.all(\n rawSegments.map((segment) => countPartTokens(segment.part)),\n );\n const rawTokenTotals = rawCounts.reduce(\n (acc, count) => ({\n tokens: acc.tokens + count.tokens,\n method: combineMethods(acc.method, count.method),\n }),\n { tokens: 0, method: \"exact\" as ContextTokenCountMethod },\n );\n const sentTokenTotals = await countMessageTokens(input.sentMessages);\n\n const segments: ContextManifestSegment[] = [];\n for (const [index, segment] of rawSegments.entries()) {\n const tokenCount = rawCounts[index] ?? { tokens: 1, method: \"estimate\" };\n const status = statusForSegment(\n segment.segmentId,\n input.appliedStatus,\n input.directives,\n );\n const protectedSegment = input.protectedSegmentIds?.has(segment.segmentId);\n const summaryTokens = await summaryTokenCount(\n segment.segmentId,\n status,\n input.directives,\n );\n segments.push({\n segmentId: segment.segmentId,\n type: segment.type,\n role: segment.role,\n group: status === \"pinned\" ? \"Pinned\" : segment.group,\n label: segment.label,\n tokenCount: tokenCount.tokens,\n tokenMethod: tokenCount.method,\n status: protectedSegment && status !== \"pinned\" ? \"active\" : status,\n ...(protectedSegment ? { protected: true } : {}),\n ...(summaryTokens ? { summaryTokenCount: summaryTokens } : {}),\n ...(segment.pairKey ? { pairKey: segment.pairKey } : {}),\n msgIndex: segment.msgIndex,\n partIndex: segment.partIndex,\n });\n }\n\n const totalTokens = sentTokenTotals.tokens;\n const rawTokens = rawTokenTotals.tokens;\n return {\n threadId: input.threadId,\n ...(input.turnId ? { turnId: input.turnId } : {}),\n computedAt: Date.now(),\n ...(input.model ? { model: input.model } : {}),\n totalTokens,\n rawTokens,\n reclaimedTokens: Math.max(0, rawTokens - totalTokens),\n tokenCountMethod: combineMethods(\n rawTokenTotals.method,\n sentTokenTotals.method,\n ),\n source: input.source ?? \"structured\",\n enforceable: input.enforceable ?? true,\n segments,\n url: contextXrayUrl(input.threadId),\n };\n}\n\nexport async function writeContextManifest(\n threadId: string,\n manifest: ContextManifest,\n): Promise<void> {\n await appStatePut(\n threadId,\n CONTEXT_XRAY_MANIFEST_KEY,\n manifest as unknown as Record<string, unknown>,\n {\n requestSource: \"context-xray\",\n },\n );\n}\n\nexport function updateManifestSegmentStatus(\n manifest: ContextManifest,\n segmentId: string,\n status: ContextSegmentStatus,\n): ContextManifest {\n let delta = 0;\n const segments = manifest.segments.map((segment) => {\n if (segment.segmentId !== segmentId) return segment;\n const previous = segment.status;\n if (previous !== \"evicted\" && status === \"evicted\") {\n delta -= segment.tokenCount;\n } else if (previous === \"evicted\" && status !== \"evicted\") {\n delta += segment.tokenCount;\n }\n return {\n ...segment,\n status: segment.protected && status !== \"pinned\" ? \"active\" : status,\n group: status === \"pinned\" ? \"Pinned\" : segment.group,\n };\n });\n const totalTokens = Math.max(0, manifest.totalTokens + delta);\n return {\n ...manifest,\n computedAt: Date.now(),\n totalTokens,\n reclaimedTokens: Math.max(0, manifest.rawTokens - totalTokens),\n segments,\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../src/agent/context-xray/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,eAAO,MAAM,uBAAuB,EAAE,cAAc,EA6BnD,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export const CONTEXT_XRAY_MIGRATIONS = [
|
|
2
|
+
{
|
|
3
|
+
version: 1201,
|
|
4
|
+
sql: `CREATE TABLE IF NOT EXISTS context_directives (
|
|
5
|
+
id TEXT PRIMARY KEY,
|
|
6
|
+
thread_id TEXT NOT NULL,
|
|
7
|
+
segment_id TEXT NOT NULL,
|
|
8
|
+
action TEXT NOT NULL,
|
|
9
|
+
summary_text TEXT,
|
|
10
|
+
created_by TEXT NOT NULL DEFAULT 'user',
|
|
11
|
+
active INTEGER NOT NULL DEFAULT 1,
|
|
12
|
+
origin_turn TEXT,
|
|
13
|
+
created_at INTEGER NOT NULL,
|
|
14
|
+
updated_at INTEGER NOT NULL,
|
|
15
|
+
owner_email TEXT NOT NULL DEFAULT 'local@localhost',
|
|
16
|
+
org_id TEXT,
|
|
17
|
+
visibility TEXT NOT NULL DEFAULT 'private'
|
|
18
|
+
)`,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
version: 1202,
|
|
22
|
+
sql: `CREATE INDEX IF NOT EXISTS context_directives_thread_active_idx
|
|
23
|
+
ON context_directives(thread_id, active)`,
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
version: 1203,
|
|
27
|
+
sql: `CREATE INDEX IF NOT EXISTS context_directives_thread_segment_idx
|
|
28
|
+
ON context_directives(thread_id, segment_id)`,
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
//# sourceMappingURL=migrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../../src/agent/context-xray/migrations.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAqB;IACvD;QACE,OAAO,EAAE,IAAI;QACb,GAAG,EAAE;;;;;;;;;;;;;;MAcH;KACH;IACD;QACE,OAAO,EAAE,IAAI;QACb,GAAG,EAAE;+CACsC;KAC5C;IACD;QACE,OAAO,EAAE,IAAI;QACb,GAAG,EAAE;mDAC0C;KAChD;CACF,CAAC","sourcesContent":["import type { MigrationEntry } from \"../../db/migrations.js\";\n\nexport const CONTEXT_XRAY_MIGRATIONS: MigrationEntry[] = [\n {\n version: 1201,\n sql: `CREATE TABLE IF NOT EXISTS context_directives (\n id TEXT PRIMARY KEY,\n thread_id TEXT NOT NULL,\n segment_id TEXT NOT NULL,\n action TEXT NOT NULL,\n summary_text TEXT,\n created_by TEXT NOT NULL DEFAULT 'user',\n active INTEGER NOT NULL DEFAULT 1,\n origin_turn TEXT,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n owner_email TEXT NOT NULL DEFAULT 'local@localhost',\n org_id TEXT,\n visibility TEXT NOT NULL DEFAULT 'private'\n )`,\n },\n {\n version: 1202,\n sql: `CREATE INDEX IF NOT EXISTS context_directives_thread_active_idx\n ON context_directives(thread_id, active)`,\n },\n {\n version: 1203,\n sql: `CREATE INDEX IF NOT EXISTS context_directives_thread_segment_idx\n ON context_directives(thread_id, segment_id)`,\n },\n];\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/agent/context-xray/plugin.ts"],"names":[],"mappings":"AAOA,KAAK,cAAc,GAAG,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9D,wBAAgB,uBAAuB,IAAI,cAAc,CAUxD;AAED,eAAO,MAAM,wBAAwB,EAAE,cACZ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { awaitBootstrap, markDefaultPluginProvided, } from "../../server/framework-request-handler.js";
|
|
2
|
+
import { runMigrations } from "../../db/migrations.js";
|
|
3
|
+
import { CONTEXT_XRAY_MIGRATIONS } from "./migrations.js";
|
|
4
|
+
export function createContextXrayPlugin() {
|
|
5
|
+
const migrate = runMigrations(CONTEXT_XRAY_MIGRATIONS, {
|
|
6
|
+
table: "_context_xray_migrations",
|
|
7
|
+
});
|
|
8
|
+
return async (nitroApp) => {
|
|
9
|
+
markDefaultPluginProvided(nitroApp, "context-xray");
|
|
10
|
+
await awaitBootstrap(nitroApp);
|
|
11
|
+
await migrate(nitroApp);
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export const defaultContextXrayPlugin = createContextXrayPlugin();
|
|
15
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/agent/context-xray/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,yBAAyB,GAC1B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAI1D,MAAM,UAAU,uBAAuB;IACrC,MAAM,OAAO,GAAG,aAAa,CAAC,uBAAuB,EAAE;QACrD,KAAK,EAAE,0BAA0B;KAClC,CAAC,CAAC;IAEH,OAAO,KAAK,EAAE,QAAa,EAAE,EAAE;QAC7B,yBAAyB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACpD,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC/B,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GACnC,uBAAuB,EAAE,CAAC","sourcesContent":["import {\n awaitBootstrap,\n markDefaultPluginProvided,\n} from \"../../server/framework-request-handler.js\";\nimport { runMigrations } from \"../../db/migrations.js\";\nimport { CONTEXT_XRAY_MIGRATIONS } from \"./migrations.js\";\n\ntype NitroPluginDef = (nitroApp: any) => void | Promise<void>;\n\nexport function createContextXrayPlugin(): NitroPluginDef {\n const migrate = runMigrations(CONTEXT_XRAY_MIGRATIONS, {\n table: \"_context_xray_migrations\",\n });\n\n return async (nitroApp: any) => {\n markDefaultPluginProvided(nitroApp, \"context-xray\");\n await awaitBootstrap(nitroApp);\n await migrate(nitroApp);\n };\n}\n\nexport const defaultContextXrayPlugin: NitroPluginDef =\n createContextXrayPlugin();\n"]}
|