@agent-native/core 0.32.18 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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/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/provider-api/index.d.ts +237 -0
- package/dist/provider-api/index.d.ts.map +1 -0
- package/dist/provider-api/index.js +1533 -0
- package/dist/provider-api/index.js.map +1 -0
- 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/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/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +1 -0
- package/dist/vite/client.js.map +1 -1
- package/package.json +10 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-evict.d.ts","sourceRoot":"","sources":["../../../../src/agent/context-xray/actions/context-evict.ts"],"names":[],"mappings":";AAgBA,wBA2BG"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { defineAction } from "../../../action.js";
|
|
3
|
+
import { callerOwnsThread } from "../../run-ownership.js";
|
|
4
|
+
import { getRequestOrgId, getRequestUserEmail, } from "../../../server/request-context.js";
|
|
5
|
+
import { upsertContextDirective, writeContextManifestStatus, } from "../directives-store.js";
|
|
6
|
+
import { contextXrayAuthError, contextXrayThreadNotFoundError, } from "./errors.js";
|
|
7
|
+
export default defineAction({
|
|
8
|
+
description: "Evict a Context X-Ray segment from future model calls. This excludes the segment from context; it does not delete chat history and can be restored.",
|
|
9
|
+
schema: z.object({
|
|
10
|
+
threadId: z.string(),
|
|
11
|
+
segmentId: z.string(),
|
|
12
|
+
}),
|
|
13
|
+
run: async (args) => {
|
|
14
|
+
const ownerEmail = getRequestUserEmail();
|
|
15
|
+
if (!ownerEmail)
|
|
16
|
+
throw contextXrayAuthError();
|
|
17
|
+
if (!(await callerOwnsThread(ownerEmail, args.threadId))) {
|
|
18
|
+
throw contextXrayThreadNotFoundError();
|
|
19
|
+
}
|
|
20
|
+
const directive = await upsertContextDirective({
|
|
21
|
+
threadId: args.threadId,
|
|
22
|
+
segmentId: args.segmentId,
|
|
23
|
+
action: "evict",
|
|
24
|
+
ownerEmail,
|
|
25
|
+
orgId: getRequestOrgId() ?? null,
|
|
26
|
+
});
|
|
27
|
+
const manifest = await writeContextManifestStatus({
|
|
28
|
+
threadId: args.threadId,
|
|
29
|
+
segmentId: args.segmentId,
|
|
30
|
+
status: "evicted",
|
|
31
|
+
});
|
|
32
|
+
return { directive, manifest };
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=context-evict.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-evict.js","sourceRoot":"","sources":["../../../../src/agent/context-xray/actions/context-evict.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACL,eAAe,EACf,mBAAmB,GACpB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,8BAA8B,GAC/B,MAAM,aAAa,CAAC;AAErB,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,qJAAqJ;IACvJ,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;KACtB,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClB,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;QACzC,IAAI,CAAC,UAAU;YAAE,MAAM,oBAAoB,EAAE,CAAC;QAC9C,IAAI,CAAC,CAAC,MAAM,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,8BAA8B,EAAE,CAAC;QACzC,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC;YAC7C,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,OAAO;YACf,UAAU;YACV,KAAK,EAAE,eAAe,EAAE,IAAI,IAAI;SACjC,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC;YAChD,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IACjC,CAAC;CACF,CAAC,CAAC","sourcesContent":["import { z } from \"zod\";\nimport { defineAction } from \"../../../action.js\";\nimport { callerOwnsThread } from \"../../run-ownership.js\";\nimport {\n getRequestOrgId,\n getRequestUserEmail,\n} from \"../../../server/request-context.js\";\nimport {\n upsertContextDirective,\n writeContextManifestStatus,\n} from \"../directives-store.js\";\nimport {\n contextXrayAuthError,\n contextXrayThreadNotFoundError,\n} from \"./errors.js\";\n\nexport default defineAction({\n description:\n \"Evict a Context X-Ray segment from future model calls. This excludes the segment from context; it does not delete chat history and can be restored.\",\n schema: z.object({\n threadId: z.string(),\n segmentId: z.string(),\n }),\n run: async (args) => {\n const ownerEmail = getRequestUserEmail();\n if (!ownerEmail) throw contextXrayAuthError();\n if (!(await callerOwnsThread(ownerEmail, args.threadId))) {\n throw contextXrayThreadNotFoundError();\n }\n const directive = await upsertContextDirective({\n threadId: args.threadId,\n segmentId: args.segmentId,\n action: \"evict\",\n ownerEmail,\n orgId: getRequestOrgId() ?? null,\n });\n const manifest = await writeContextManifestStatus({\n threadId: args.threadId,\n segmentId: args.segmentId,\n status: \"evicted\",\n });\n return { directive, manifest };\n },\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-manifest-get.d.ts","sourceRoot":"","sources":["../../../../src/agent/context-xray/actions/context-manifest-get.ts"],"names":[],"mappings":";AAyBA,wBAgDG"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { defineAction } from "../../../action.js";
|
|
3
|
+
import { embedApp } from "../../../mcp/embed-app.js";
|
|
4
|
+
import { callerOwnsThread } from "../../run-ownership.js";
|
|
5
|
+
import { getRequestUserEmail } from "../../../server/request-context.js";
|
|
6
|
+
import { buildDeepLink } from "../../../server/deep-link.js";
|
|
7
|
+
import { emptyContextManifest, } from "../../../shared/context-xray.js";
|
|
8
|
+
import { readContextManifest } from "../directives-store.js";
|
|
9
|
+
import { contextXrayAuthError, contextXrayThreadNotFoundError, } from "./errors.js";
|
|
10
|
+
function contextXrayDeepLink(threadId) {
|
|
11
|
+
return buildDeepLink({
|
|
12
|
+
app: "agent-native",
|
|
13
|
+
view: "context-xray",
|
|
14
|
+
to: `/?contextXray=1&threadId=${encodeURIComponent(threadId)}`,
|
|
15
|
+
params: { threadId },
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export default defineAction({
|
|
19
|
+
description: "Get the current Context X-Ray manifest for a chat thread, including context segments, token counts, and pin/evict status.",
|
|
20
|
+
schema: z.object({
|
|
21
|
+
threadId: z.string().describe("Chat thread id to inspect."),
|
|
22
|
+
}),
|
|
23
|
+
http: { method: "GET" },
|
|
24
|
+
readOnly: true,
|
|
25
|
+
publicAgent: { expose: true, readOnly: true, requiresAuth: true },
|
|
26
|
+
mcpApp: {
|
|
27
|
+
compactCatalog: true,
|
|
28
|
+
resource: embedApp({
|
|
29
|
+
title: "Context X-Ray",
|
|
30
|
+
description: "Inspect and manage the live agent context window.",
|
|
31
|
+
iframeTitle: "Context X-Ray",
|
|
32
|
+
openLabel: "Open Context X-Ray",
|
|
33
|
+
height: 800,
|
|
34
|
+
}),
|
|
35
|
+
},
|
|
36
|
+
link: ({ args, result }) => {
|
|
37
|
+
const threadId = typeof args.threadId === "string"
|
|
38
|
+
? args.threadId
|
|
39
|
+
: typeof result?.threadId === "string"
|
|
40
|
+
? result.threadId
|
|
41
|
+
: "";
|
|
42
|
+
if (!threadId)
|
|
43
|
+
return null;
|
|
44
|
+
return {
|
|
45
|
+
url: contextXrayDeepLink(threadId),
|
|
46
|
+
label: "Open Context X-Ray",
|
|
47
|
+
view: "context-xray",
|
|
48
|
+
};
|
|
49
|
+
},
|
|
50
|
+
run: async (args) => {
|
|
51
|
+
const ownerEmail = getRequestUserEmail();
|
|
52
|
+
if (!ownerEmail)
|
|
53
|
+
throw contextXrayAuthError();
|
|
54
|
+
const ownsThread = await callerOwnsThread(ownerEmail, args.threadId);
|
|
55
|
+
if (!ownsThread)
|
|
56
|
+
throw contextXrayThreadNotFoundError();
|
|
57
|
+
const manifest = (await readContextManifest(args.threadId)) ??
|
|
58
|
+
emptyContextManifest(args.threadId, { enforceable: true });
|
|
59
|
+
return {
|
|
60
|
+
...manifest,
|
|
61
|
+
url: contextXrayDeepLink(args.threadId),
|
|
62
|
+
enforceable: manifest.enforceable ?? true,
|
|
63
|
+
source: manifest.source ?? "structured",
|
|
64
|
+
};
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
//# sourceMappingURL=context-manifest-get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-manifest-get.js","sourceRoot":"","sources":["../../../../src/agent/context-xray/actions/context-manifest-get.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport { defineAction } from \"../../../action.js\";\nimport { embedApp } from \"../../../mcp/embed-app.js\";\nimport { callerOwnsThread } from \"../../run-ownership.js\";\nimport { getRequestUserEmail } from \"../../../server/request-context.js\";\nimport { buildDeepLink } from \"../../../server/deep-link.js\";\nimport {\n emptyContextManifest,\n type ContextManifest,\n} from \"../../../shared/context-xray.js\";\nimport { readContextManifest } from \"../directives-store.js\";\nimport {\n contextXrayAuthError,\n contextXrayThreadNotFoundError,\n} from \"./errors.js\";\n\nfunction contextXrayDeepLink(threadId: string): string {\n return buildDeepLink({\n app: \"agent-native\",\n view: \"context-xray\",\n to: `/?contextXray=1&threadId=${encodeURIComponent(threadId)}`,\n params: { threadId },\n });\n}\n\nexport default defineAction({\n description:\n \"Get the current Context X-Ray manifest for a chat thread, including context segments, token counts, and pin/evict status.\",\n schema: z.object({\n threadId: z.string().describe(\"Chat thread id to inspect.\"),\n }),\n http: { method: \"GET\" },\n readOnly: true,\n publicAgent: { expose: true, readOnly: true, requiresAuth: true },\n mcpApp: {\n compactCatalog: true,\n resource: embedApp({\n title: \"Context X-Ray\",\n description: \"Inspect and manage the live agent context window.\",\n iframeTitle: \"Context X-Ray\",\n openLabel: \"Open Context X-Ray\",\n height: 800,\n }),\n },\n link: ({ args, result }) => {\n const threadId =\n typeof args.threadId === \"string\"\n ? args.threadId\n : typeof result?.threadId === \"string\"\n ? result.threadId\n : \"\";\n if (!threadId) return null;\n return {\n url: contextXrayDeepLink(threadId),\n label: \"Open Context X-Ray\",\n view: \"context-xray\",\n };\n },\n run: async (args): Promise<ContextManifest> => {\n const ownerEmail = getRequestUserEmail();\n if (!ownerEmail) throw contextXrayAuthError();\n const ownsThread = await callerOwnsThread(ownerEmail, args.threadId);\n if (!ownsThread) throw contextXrayThreadNotFoundError();\n const manifest =\n (await readContextManifest(args.threadId)) ??\n emptyContextManifest(args.threadId, { enforceable: true });\n return {\n ...manifest,\n url: contextXrayDeepLink(args.threadId),\n enforceable: manifest.enforceable ?? true,\n source: manifest.source ?? \"structured\",\n };\n },\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-pin.d.ts","sourceRoot":"","sources":["../../../../src/agent/context-xray/actions/context-pin.ts"],"names":[],"mappings":";AAgBA,wBA2BG"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { defineAction } from "../../../action.js";
|
|
3
|
+
import { callerOwnsThread } from "../../run-ownership.js";
|
|
4
|
+
import { getRequestOrgId, getRequestUserEmail, } from "../../../server/request-context.js";
|
|
5
|
+
import { upsertContextDirective, writeContextManifestStatus, } from "../directives-store.js";
|
|
6
|
+
import { contextXrayAuthError, contextXrayThreadNotFoundError, } from "./errors.js";
|
|
7
|
+
export default defineAction({
|
|
8
|
+
description: "Pin a Context X-Ray segment so it is preserved through future context compaction.",
|
|
9
|
+
schema: z.object({
|
|
10
|
+
threadId: z.string(),
|
|
11
|
+
segmentId: z.string(),
|
|
12
|
+
}),
|
|
13
|
+
run: async (args) => {
|
|
14
|
+
const ownerEmail = getRequestUserEmail();
|
|
15
|
+
if (!ownerEmail)
|
|
16
|
+
throw contextXrayAuthError();
|
|
17
|
+
if (!(await callerOwnsThread(ownerEmail, args.threadId))) {
|
|
18
|
+
throw contextXrayThreadNotFoundError();
|
|
19
|
+
}
|
|
20
|
+
const directive = await upsertContextDirective({
|
|
21
|
+
threadId: args.threadId,
|
|
22
|
+
segmentId: args.segmentId,
|
|
23
|
+
action: "pin",
|
|
24
|
+
ownerEmail,
|
|
25
|
+
orgId: getRequestOrgId() ?? null,
|
|
26
|
+
});
|
|
27
|
+
const manifest = await writeContextManifestStatus({
|
|
28
|
+
threadId: args.threadId,
|
|
29
|
+
segmentId: args.segmentId,
|
|
30
|
+
status: "pinned",
|
|
31
|
+
});
|
|
32
|
+
return { directive, manifest };
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=context-pin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-pin.js","sourceRoot":"","sources":["../../../../src/agent/context-xray/actions/context-pin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACL,eAAe,EACf,mBAAmB,GACpB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,8BAA8B,GAC/B,MAAM,aAAa,CAAC;AAErB,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,mFAAmF;IACrF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;KACtB,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClB,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;QACzC,IAAI,CAAC,UAAU;YAAE,MAAM,oBAAoB,EAAE,CAAC;QAC9C,IAAI,CAAC,CAAC,MAAM,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,8BAA8B,EAAE,CAAC;QACzC,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC;YAC7C,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,KAAK;YACb,UAAU;YACV,KAAK,EAAE,eAAe,EAAE,IAAI,IAAI;SACjC,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC;YAChD,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;QACH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IACjC,CAAC;CACF,CAAC,CAAC","sourcesContent":["import { z } from \"zod\";\nimport { defineAction } from \"../../../action.js\";\nimport { callerOwnsThread } from \"../../run-ownership.js\";\nimport {\n getRequestOrgId,\n getRequestUserEmail,\n} from \"../../../server/request-context.js\";\nimport {\n upsertContextDirective,\n writeContextManifestStatus,\n} from \"../directives-store.js\";\nimport {\n contextXrayAuthError,\n contextXrayThreadNotFoundError,\n} from \"./errors.js\";\n\nexport default defineAction({\n description:\n \"Pin a Context X-Ray segment so it is preserved through future context compaction.\",\n schema: z.object({\n threadId: z.string(),\n segmentId: z.string(),\n }),\n run: async (args) => {\n const ownerEmail = getRequestUserEmail();\n if (!ownerEmail) throw contextXrayAuthError();\n if (!(await callerOwnsThread(ownerEmail, args.threadId))) {\n throw contextXrayThreadNotFoundError();\n }\n const directive = await upsertContextDirective({\n threadId: args.threadId,\n segmentId: args.segmentId,\n action: \"pin\",\n ownerEmail,\n orgId: getRequestOrgId() ?? null,\n });\n const manifest = await writeContextManifestStatus({\n threadId: args.threadId,\n segmentId: args.segmentId,\n status: \"pinned\",\n });\n return { directive, manifest };\n },\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-report.d.ts","sourceRoot":"","sources":["../../../../src/agent/context-xray/actions/context-report.ts"],"names":[],"mappings":";AAwBA,wBAiDG"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { defineAction } from "../../../action.js";
|
|
3
|
+
import { appStatePut } from "../../../application-state/store.js";
|
|
4
|
+
import { callerOwnsThread } from "../../run-ownership.js";
|
|
5
|
+
import { getRequestUserEmail } from "../../../server/request-context.js";
|
|
6
|
+
import { CONTEXT_XRAY_MANIFEST_KEY, } from "../../../shared/context-xray.js";
|
|
7
|
+
import { contextXrayAuthError, contextXrayThreadNotFoundError, } from "./errors.js";
|
|
8
|
+
const reportedSegmentSchema = z.object({
|
|
9
|
+
segmentId: z.string(),
|
|
10
|
+
label: z.string(),
|
|
11
|
+
tokenCount: z.number().int().nonnegative(),
|
|
12
|
+
group: z.string().default("External context"),
|
|
13
|
+
status: z
|
|
14
|
+
.enum(["active", "pinned", "evicted", "summarized"])
|
|
15
|
+
.default("active"),
|
|
16
|
+
});
|
|
17
|
+
export default defineAction({
|
|
18
|
+
description: "Report an external agent host's visible context segments to Context X-Ray. External reports are advisory unless the content came from Agent-Native.",
|
|
19
|
+
schema: z.object({
|
|
20
|
+
threadId: z.string(),
|
|
21
|
+
model: z.string().optional(),
|
|
22
|
+
segments: z.array(reportedSegmentSchema).default([]),
|
|
23
|
+
}),
|
|
24
|
+
run: async (args) => {
|
|
25
|
+
const ownerEmail = getRequestUserEmail();
|
|
26
|
+
if (!ownerEmail)
|
|
27
|
+
throw contextXrayAuthError();
|
|
28
|
+
if (!(await callerOwnsThread(ownerEmail, args.threadId))) {
|
|
29
|
+
throw contextXrayThreadNotFoundError();
|
|
30
|
+
}
|
|
31
|
+
const rawTokens = args.segments.reduce((sum, segment) => sum + segment.tokenCount, 0);
|
|
32
|
+
const manifest = {
|
|
33
|
+
threadId: args.threadId,
|
|
34
|
+
computedAt: Date.now(),
|
|
35
|
+
...(args.model ? { model: args.model } : {}),
|
|
36
|
+
totalTokens: rawTokens,
|
|
37
|
+
rawTokens,
|
|
38
|
+
reclaimedTokens: 0,
|
|
39
|
+
tokenCountMethod: "estimate",
|
|
40
|
+
source: "external",
|
|
41
|
+
enforceable: false,
|
|
42
|
+
segments: args.segments.map((segment) => ({
|
|
43
|
+
segmentId: segment.segmentId,
|
|
44
|
+
type: "text",
|
|
45
|
+
role: "user",
|
|
46
|
+
group: segment.group,
|
|
47
|
+
label: segment.label,
|
|
48
|
+
tokenCount: segment.tokenCount,
|
|
49
|
+
tokenMethod: "estimate",
|
|
50
|
+
status: segment.status,
|
|
51
|
+
})),
|
|
52
|
+
};
|
|
53
|
+
await appStatePut(args.threadId, CONTEXT_XRAY_MANIFEST_KEY, manifest, {
|
|
54
|
+
requestSource: "context-xray",
|
|
55
|
+
});
|
|
56
|
+
return manifest;
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=context-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-report.js","sourceRoot":"","sources":["../../../../src/agent/context-xray/actions/context-report.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport { defineAction } from \"../../../action.js\";\nimport { appStatePut } from \"../../../application-state/store.js\";\nimport { callerOwnsThread } from \"../../run-ownership.js\";\nimport { getRequestUserEmail } from \"../../../server/request-context.js\";\nimport {\n CONTEXT_XRAY_MANIFEST_KEY,\n type ContextManifest,\n} from \"../../../shared/context-xray.js\";\nimport {\n contextXrayAuthError,\n contextXrayThreadNotFoundError,\n} from \"./errors.js\";\n\nconst reportedSegmentSchema = z.object({\n segmentId: z.string(),\n label: z.string(),\n tokenCount: z.number().int().nonnegative(),\n group: z.string().default(\"External context\"),\n status: z\n .enum([\"active\", \"pinned\", \"evicted\", \"summarized\"])\n .default(\"active\"),\n});\n\nexport default defineAction({\n description:\n \"Report an external agent host's visible context segments to Context X-Ray. External reports are advisory unless the content came from Agent-Native.\",\n schema: z.object({\n threadId: z.string(),\n model: z.string().optional(),\n segments: z.array(reportedSegmentSchema).default([]),\n }),\n run: async (args): Promise<ContextManifest> => {\n const ownerEmail = getRequestUserEmail();\n if (!ownerEmail) throw contextXrayAuthError();\n if (!(await callerOwnsThread(ownerEmail, args.threadId))) {\n throw contextXrayThreadNotFoundError();\n }\n const rawTokens = args.segments.reduce(\n (sum, segment) => sum + segment.tokenCount,\n 0,\n );\n const manifest: ContextManifest = {\n threadId: args.threadId,\n computedAt: Date.now(),\n ...(args.model ? { model: args.model } : {}),\n totalTokens: rawTokens,\n rawTokens,\n reclaimedTokens: 0,\n tokenCountMethod: \"estimate\",\n source: \"external\",\n enforceable: false,\n segments: args.segments.map((segment) => ({\n segmentId: segment.segmentId,\n type: \"text\",\n role: \"user\",\n group: segment.group,\n label: segment.label,\n tokenCount: segment.tokenCount,\n tokenMethod: \"estimate\",\n status: segment.status,\n })),\n };\n await appStatePut(\n args.threadId,\n CONTEXT_XRAY_MANIFEST_KEY,\n manifest as unknown as Record<string, unknown>,\n {\n requestSource: \"context-xray\",\n },\n );\n return manifest;\n },\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-restore.d.ts","sourceRoot":"","sources":["../../../../src/agent/context-xray/actions/context-restore.ts"],"names":[],"mappings":";AAaA,wBAyBG"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { defineAction } from "../../../action.js";
|
|
3
|
+
import { callerOwnsThread } from "../../run-ownership.js";
|
|
4
|
+
import { getRequestUserEmail } from "../../../server/request-context.js";
|
|
5
|
+
import { deactivateContextDirective, writeContextManifestStatus, } from "../directives-store.js";
|
|
6
|
+
import { contextXrayAuthError, contextXrayThreadNotFoundError, } from "./errors.js";
|
|
7
|
+
export default defineAction({
|
|
8
|
+
description: "Restore a Context X-Ray segment by deactivating its pin, evict, or summarize directive.",
|
|
9
|
+
schema: z.object({
|
|
10
|
+
threadId: z.string(),
|
|
11
|
+
segmentId: z.string(),
|
|
12
|
+
}),
|
|
13
|
+
run: async (args) => {
|
|
14
|
+
const ownerEmail = getRequestUserEmail();
|
|
15
|
+
if (!ownerEmail)
|
|
16
|
+
throw contextXrayAuthError();
|
|
17
|
+
if (!(await callerOwnsThread(ownerEmail, args.threadId))) {
|
|
18
|
+
throw contextXrayThreadNotFoundError();
|
|
19
|
+
}
|
|
20
|
+
const restored = await deactivateContextDirective({
|
|
21
|
+
threadId: args.threadId,
|
|
22
|
+
segmentId: args.segmentId,
|
|
23
|
+
ownerEmail,
|
|
24
|
+
});
|
|
25
|
+
const manifest = await writeContextManifestStatus({
|
|
26
|
+
threadId: args.threadId,
|
|
27
|
+
segmentId: args.segmentId,
|
|
28
|
+
status: "active",
|
|
29
|
+
});
|
|
30
|
+
return { restored, manifest };
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=context-restore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-restore.js","sourceRoot":"","sources":["../../../../src/agent/context-xray/actions/context-restore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,8BAA8B,GAC/B,MAAM,aAAa,CAAC;AAErB,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,yFAAyF;IAC3F,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;KACtB,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClB,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;QACzC,IAAI,CAAC,UAAU;YAAE,MAAM,oBAAoB,EAAE,CAAC;QAC9C,IAAI,CAAC,CAAC,MAAM,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,8BAA8B,EAAE,CAAC;QACzC,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC;YAChD,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU;SACX,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC;YAChD,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;QACH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAChC,CAAC;CACF,CAAC,CAAC","sourcesContent":["import { z } from \"zod\";\nimport { defineAction } from \"../../../action.js\";\nimport { callerOwnsThread } from \"../../run-ownership.js\";\nimport { getRequestUserEmail } from \"../../../server/request-context.js\";\nimport {\n deactivateContextDirective,\n writeContextManifestStatus,\n} from \"../directives-store.js\";\nimport {\n contextXrayAuthError,\n contextXrayThreadNotFoundError,\n} from \"./errors.js\";\n\nexport default defineAction({\n description:\n \"Restore a Context X-Ray segment by deactivating its pin, evict, or summarize directive.\",\n schema: z.object({\n threadId: z.string(),\n segmentId: z.string(),\n }),\n run: async (args) => {\n const ownerEmail = getRequestUserEmail();\n if (!ownerEmail) throw contextXrayAuthError();\n if (!(await callerOwnsThread(ownerEmail, args.threadId))) {\n throw contextXrayThreadNotFoundError();\n }\n const restored = await deactivateContextDirective({\n threadId: args.threadId,\n segmentId: args.segmentId,\n ownerEmail,\n });\n const manifest = await writeContextManifestStatus({\n threadId: args.threadId,\n segmentId: args.segmentId,\n status: \"active\",\n });\n return { restored, manifest };\n },\n});\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare class ContextXrayActionError extends Error {
|
|
2
|
+
readonly statusCode: number;
|
|
3
|
+
constructor(message: string, statusCode: number);
|
|
4
|
+
}
|
|
5
|
+
export declare function contextXrayAuthError(): ContextXrayActionError;
|
|
6
|
+
export declare function contextXrayThreadNotFoundError(): ContextXrayActionError;
|
|
7
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/agent/context-xray/actions/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,sBAAuB,SAAQ,KAAK;IAG7C,QAAQ,CAAC,UAAU,EAAE,MAAM;gBAD3B,OAAO,EAAE,MAAM,EACN,UAAU,EAAE,MAAM;CAK9B;AAED,wBAAgB,oBAAoB,IAAI,sBAAsB,CAK7D;AAED,wBAAgB,8BAA8B,IAAI,sBAAsB,CAEvE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export class ContextXrayActionError extends Error {
|
|
2
|
+
statusCode;
|
|
3
|
+
constructor(message, statusCode) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.statusCode = statusCode;
|
|
6
|
+
this.name = "ContextXrayActionError";
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export function contextXrayAuthError() {
|
|
10
|
+
return new ContextXrayActionError("Context X-Ray requires a signed-in user.", 401);
|
|
11
|
+
}
|
|
12
|
+
export function contextXrayThreadNotFoundError() {
|
|
13
|
+
return new ContextXrayActionError("Thread not found.", 404);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../src/agent/context-xray/actions/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAGpC;IAFX,YACE,OAAe,EACN,UAAkB;QAE3B,KAAK,CAAC,OAAO,CAAC,CAAC;QAFN,eAAU,GAAV,UAAU,CAAQ;QAG3B,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,sBAAsB,CAC/B,0CAA0C,EAC1C,GAAG,CACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B;IAC5C,OAAO,IAAI,sBAAsB,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;AAC9D,CAAC","sourcesContent":["export class ContextXrayActionError extends Error {\n constructor(\n message: string,\n readonly statusCode: number,\n ) {\n super(message);\n this.name = \"ContextXrayActionError\";\n }\n}\n\nexport function contextXrayAuthError(): ContextXrayActionError {\n return new ContextXrayActionError(\n \"Context X-Ray requires a signed-in user.\",\n 401,\n );\n}\n\nexport function contextXrayThreadNotFoundError(): ContextXrayActionError {\n return new ContextXrayActionError(\"Thread not found.\", 404);\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { EngineMessage } from "../engine/types.js";
|
|
2
|
+
import type { ContextDirective, ContextSegmentStatus } from "../../shared/context-xray.js";
|
|
3
|
+
export interface ApplyContextDirectivesResult {
|
|
4
|
+
messages: EngineMessage[];
|
|
5
|
+
appliedStatus: Map<string, ContextSegmentStatus>;
|
|
6
|
+
}
|
|
7
|
+
export declare function applyContextDirectives(messages: EngineMessage[], directives: Map<string, ContextDirective>, opts: {
|
|
8
|
+
protectedSegmentIds: Set<string>;
|
|
9
|
+
}): ApplyContextDirectivesResult;
|
|
10
|
+
//# sourceMappingURL=apply-directives.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-directives.d.ts","sourceRoot":"","sources":["../../../src/agent/context-xray/apply-directives.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,KAAK,EACV,gBAAgB,EAEhB,oBAAoB,EACrB,MAAM,8BAA8B,CAAC;AAGtC,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CAClD;AA2CD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,aAAa,EAAE,EACzB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,EACzC,IAAI,EAAE;IAAE,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,GACzC,4BAA4B,CA+E9B"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { computeSegments } from "./segments.js";
|
|
2
|
+
function clonePart(part) {
|
|
3
|
+
return { ...part };
|
|
4
|
+
}
|
|
5
|
+
function plannedTransformForDirective(directive) {
|
|
6
|
+
if (!directive?.active)
|
|
7
|
+
return null;
|
|
8
|
+
if (directive.action === "evict")
|
|
9
|
+
return "evict";
|
|
10
|
+
if (directive.action === "summarize")
|
|
11
|
+
return "summarize";
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
function statusForTransform(transform) {
|
|
15
|
+
return transform === "evict" ? "evicted" : "summarized";
|
|
16
|
+
}
|
|
17
|
+
function summaryTextFor(directive, fallbackLabel) {
|
|
18
|
+
const summary = directive?.summaryText?.trim();
|
|
19
|
+
return summary || `${fallbackLabel} was summarized to reduce context size.`;
|
|
20
|
+
}
|
|
21
|
+
function appendTransformedMessage(output, message, content) {
|
|
22
|
+
if (content.length === 0)
|
|
23
|
+
return;
|
|
24
|
+
const previous = output.at(-1);
|
|
25
|
+
if (previous?.role === message.role) {
|
|
26
|
+
previous.content.push(...content);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
output.push({ ...message, content });
|
|
30
|
+
}
|
|
31
|
+
export function applyContextDirectives(messages, directives, opts) {
|
|
32
|
+
const segments = computeSegments(messages);
|
|
33
|
+
const byPosition = new Map(segments.map((segment) => [
|
|
34
|
+
`${segment.msgIndex}:${segment.partIndex}`,
|
|
35
|
+
segment,
|
|
36
|
+
]));
|
|
37
|
+
const pairMembers = new Map();
|
|
38
|
+
for (const segment of segments) {
|
|
39
|
+
if (!segment.pairKey)
|
|
40
|
+
continue;
|
|
41
|
+
const members = pairMembers.get(segment.pairKey) ?? [];
|
|
42
|
+
members.push(segment.segmentId);
|
|
43
|
+
pairMembers.set(segment.pairKey, members);
|
|
44
|
+
}
|
|
45
|
+
const transformById = new Map();
|
|
46
|
+
const appliedStatus = new Map();
|
|
47
|
+
for (const segment of segments) {
|
|
48
|
+
const directive = directives.get(segment.segmentId);
|
|
49
|
+
if (!directive?.active)
|
|
50
|
+
continue;
|
|
51
|
+
if (directive.action === "pin") {
|
|
52
|
+
appliedStatus.set(segment.segmentId, "pinned");
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const transform = plannedTransformForDirective(directive);
|
|
56
|
+
if (!transform)
|
|
57
|
+
continue;
|
|
58
|
+
const ids = segment.pairKey
|
|
59
|
+
? (pairMembers.get(segment.pairKey) ?? [segment.segmentId])
|
|
60
|
+
: [segment.segmentId];
|
|
61
|
+
const hasProtectedMember = ids.some((id) => opts.protectedSegmentIds.has(id));
|
|
62
|
+
if (hasProtectedMember)
|
|
63
|
+
continue;
|
|
64
|
+
for (const id of ids)
|
|
65
|
+
transformById.set(id, transform);
|
|
66
|
+
}
|
|
67
|
+
const output = [];
|
|
68
|
+
for (const [msgIndex, message] of messages.entries()) {
|
|
69
|
+
const nextParts = [];
|
|
70
|
+
for (const [partIndex, part] of message.content.entries()) {
|
|
71
|
+
const actualSegment = byPosition.get(`${msgIndex}:${partIndex}`);
|
|
72
|
+
if (!actualSegment) {
|
|
73
|
+
nextParts.push(clonePart(part));
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (opts.protectedSegmentIds.has(actualSegment.segmentId)) {
|
|
77
|
+
nextParts.push(clonePart(part));
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
const transform = transformById.get(actualSegment.segmentId);
|
|
81
|
+
if (transform === "evict") {
|
|
82
|
+
appliedStatus.set(actualSegment.segmentId, statusForTransform(transform));
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (transform === "summarize") {
|
|
86
|
+
const directive = directives.get(actualSegment.segmentId);
|
|
87
|
+
nextParts.push({
|
|
88
|
+
type: "text",
|
|
89
|
+
text: `[summarized] ${summaryTextFor(directive, actualSegment.label)}`,
|
|
90
|
+
});
|
|
91
|
+
appliedStatus.set(actualSegment.segmentId, statusForTransform(transform));
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
nextParts.push(clonePart(part));
|
|
95
|
+
}
|
|
96
|
+
appendTransformedMessage(output, message, nextParts);
|
|
97
|
+
}
|
|
98
|
+
return { messages: output, appliedStatus };
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=apply-directives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-directives.js","sourceRoot":"","sources":["../../../src/agent/context-xray/apply-directives.ts"],"names":[],"mappings":"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","sourcesContent":["import type { EngineContentPart, EngineMessage } from \"../engine/types.js\";\nimport type {\n ContextDirective,\n ContextDirectiveAction,\n ContextSegmentStatus,\n} from \"../../shared/context-xray.js\";\nimport { computeSegments } from \"./segments.js\";\n\nexport interface ApplyContextDirectivesResult {\n messages: EngineMessage[];\n appliedStatus: Map<string, ContextSegmentStatus>;\n}\n\ntype PlannedTransform = \"evict\" | \"summarize\";\n\nfunction clonePart(part: EngineContentPart): EngineContentPart {\n return { ...(part as any) } as EngineContentPart;\n}\n\nfunction plannedTransformForDirective(\n directive: ContextDirective | undefined,\n): PlannedTransform | null {\n if (!directive?.active) return null;\n if (directive.action === \"evict\") return \"evict\";\n if (directive.action === \"summarize\") return \"summarize\";\n return null;\n}\n\nfunction statusForTransform(transform: PlannedTransform): ContextSegmentStatus {\n return transform === \"evict\" ? \"evicted\" : \"summarized\";\n}\n\nfunction summaryTextFor(\n directive: ContextDirective | undefined,\n fallbackLabel: string,\n): string {\n const summary = directive?.summaryText?.trim();\n return summary || `${fallbackLabel} was summarized to reduce context size.`;\n}\n\nfunction appendTransformedMessage(\n output: EngineMessage[],\n message: EngineMessage,\n content: EngineContentPart[],\n): void {\n if (content.length === 0) return;\n const previous = output.at(-1);\n if (previous?.role === message.role) {\n previous.content.push(...content);\n return;\n }\n output.push({ ...message, content });\n}\n\nexport function applyContextDirectives(\n messages: EngineMessage[],\n directives: Map<string, ContextDirective>,\n opts: { protectedSegmentIds: Set<string> },\n): ApplyContextDirectivesResult {\n const segments = computeSegments(messages);\n const byPosition = new Map(\n segments.map((segment) => [\n `${segment.msgIndex}:${segment.partIndex}`,\n segment,\n ]),\n );\n const pairMembers = new Map<string, string[]>();\n for (const segment of segments) {\n if (!segment.pairKey) continue;\n const members = pairMembers.get(segment.pairKey) ?? [];\n members.push(segment.segmentId);\n pairMembers.set(segment.pairKey, members);\n }\n\n const transformById = new Map<string, PlannedTransform>();\n const appliedStatus = new Map<string, ContextSegmentStatus>();\n\n for (const segment of segments) {\n const directive = directives.get(segment.segmentId);\n if (!directive?.active) continue;\n\n if (directive.action === \"pin\") {\n appliedStatus.set(segment.segmentId, \"pinned\");\n continue;\n }\n\n const transform = plannedTransformForDirective(directive);\n if (!transform) continue;\n const ids = segment.pairKey\n ? (pairMembers.get(segment.pairKey) ?? [segment.segmentId])\n : [segment.segmentId];\n const hasProtectedMember = ids.some((id) =>\n opts.protectedSegmentIds.has(id),\n );\n if (hasProtectedMember) continue;\n for (const id of ids) transformById.set(id, transform);\n }\n\n const output: EngineMessage[] = [];\n for (const [msgIndex, message] of messages.entries()) {\n const nextParts: EngineContentPart[] = [];\n for (const [partIndex, part] of message.content.entries()) {\n const actualSegment = byPosition.get(`${msgIndex}:${partIndex}`);\n if (!actualSegment) {\n nextParts.push(clonePart(part));\n continue;\n }\n if (opts.protectedSegmentIds.has(actualSegment.segmentId)) {\n nextParts.push(clonePart(part));\n continue;\n }\n const transform = transformById.get(actualSegment.segmentId);\n if (transform === \"evict\") {\n appliedStatus.set(\n actualSegment.segmentId,\n statusForTransform(transform),\n );\n continue;\n }\n if (transform === \"summarize\") {\n const directive = directives.get(actualSegment.segmentId);\n nextParts.push({\n type: \"text\",\n text: `[summarized] ${summaryTextFor(directive, actualSegment.label)}`,\n });\n appliedStatus.set(\n actualSegment.segmentId,\n statusForTransform(transform),\n );\n continue;\n }\n nextParts.push(clonePart(part));\n }\n appendTransformedMessage(output, message, nextParts);\n }\n\n return { messages: output, appliedStatus };\n}\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type ContextDirective, type ContextDirectiveAction, type ContextDirectiveCreator, type ContextManifest } from "../../shared/context-xray.js";
|
|
2
|
+
export declare function loadContextDirectives(threadId: string, opts?: {
|
|
3
|
+
ownerEmail?: string | null;
|
|
4
|
+
}): Promise<Map<string, ContextDirective>>;
|
|
5
|
+
export declare function upsertContextDirective(input: {
|
|
6
|
+
threadId: string;
|
|
7
|
+
segmentId: string;
|
|
8
|
+
action: ContextDirectiveAction;
|
|
9
|
+
summaryText?: string | null;
|
|
10
|
+
createdBy?: ContextDirectiveCreator;
|
|
11
|
+
originTurn?: string | null;
|
|
12
|
+
ownerEmail: string;
|
|
13
|
+
orgId?: string | null;
|
|
14
|
+
}): Promise<ContextDirective>;
|
|
15
|
+
export declare function deactivateContextDirective(input: {
|
|
16
|
+
threadId: string;
|
|
17
|
+
segmentId: string;
|
|
18
|
+
ownerEmail: string;
|
|
19
|
+
}): Promise<number>;
|
|
20
|
+
export declare function readContextManifest(threadId: string): Promise<ContextManifest | null>;
|
|
21
|
+
export declare function writeContextManifestStatus(input: {
|
|
22
|
+
threadId: string;
|
|
23
|
+
segmentId: string;
|
|
24
|
+
status: "active" | "pinned" | "evicted" | "summarized";
|
|
25
|
+
}): Promise<ContextManifest | null>;
|
|
26
|
+
//# sourceMappingURL=directives-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directives-store.d.ts","sourceRoot":"","sources":["../../../src/agent/context-xray/directives-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACrB,MAAM,8BAA8B,CAAC;AA0BtC,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,GACxC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAexC;AAED,wBAAsB,sBAAsB,CAAC,KAAK,EAAE;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsE5B;AAED,wBAAsB,0BAA0B,CAAC,KAAK,EAAE;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,MAAM,CAAC,CAMlB;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAKjC;AAED,wBAAsB,0BAA0B,CAAC,KAAK,EAAE;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC;CACxD,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAiBlC"}
|