@copilotkit/runtime 1.72.1-canary.sp-longthread-perf → 1.73.1
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/index.cjs +49 -9
- package/dist/agent/index.cjs.map +1 -1
- package/dist/agent/index.d.cts +20 -7
- package/dist/agent/index.d.cts.map +1 -1
- package/dist/agent/index.d.mts +19 -6
- package/dist/agent/index.d.mts.map +1 -1
- package/dist/agent/index.mjs +49 -9
- package/dist/agent/index.mjs.map +1 -1
- package/dist/agent/learned-skills.cjs +77 -0
- package/dist/agent/learned-skills.cjs.map +1 -0
- package/dist/agent/learned-skills.d.cts +16 -0
- package/dist/agent/learned-skills.d.cts.map +1 -0
- package/dist/agent/learned-skills.d.mts +16 -0
- package/dist/agent/learned-skills.d.mts.map +1 -0
- package/dist/agent/learned-skills.mjs +75 -0
- package/dist/agent/learned-skills.mjs.map +1 -0
- package/dist/index.d.cts +4 -4
- package/dist/index.d.mts +4 -4
- package/dist/internal/learned-skills.cjs +22 -0
- package/dist/internal/learned-skills.d.cts +10 -0
- package/dist/internal/learned-skills.d.mts +10 -0
- package/dist/internal/learned-skills.mjs +10 -0
- package/dist/lib/index.d.cts +2 -2
- package/dist/lib/index.d.mts +2 -2
- package/dist/lib/integrations/nextjs/app-router.cjs +1 -1
- package/dist/lib/integrations/nextjs/app-router.cjs.map +1 -1
- package/dist/lib/integrations/nextjs/app-router.mjs +1 -1
- package/dist/lib/integrations/nextjs/app-router.mjs.map +1 -1
- package/dist/lib/integrations/node-http/index.cjs +1 -1
- package/dist/lib/integrations/node-http/index.cjs.map +1 -1
- package/dist/lib/integrations/node-http/index.d.cts.map +1 -1
- package/dist/lib/integrations/node-http/index.d.mts.map +1 -1
- package/dist/lib/integrations/node-http/index.mjs +1 -1
- package/dist/lib/integrations/node-http/index.mjs.map +1 -1
- package/dist/lib/integrations/shared.cjs.map +1 -1
- package/dist/lib/integrations/shared.d.cts +1 -1
- package/dist/lib/integrations/shared.d.cts.map +1 -1
- package/dist/lib/integrations/shared.d.mts +1 -1
- package/dist/lib/integrations/shared.d.mts.map +1 -1
- package/dist/lib/integrations/shared.mjs.map +1 -1
- package/dist/lib/runtime/agent-integrations/langgraph/agent.d.cts +1 -1
- package/dist/lib/runtime/copilot-runtime.cjs +79 -37
- package/dist/lib/runtime/copilot-runtime.cjs.map +1 -1
- package/dist/lib/runtime/copilot-runtime.d.cts +54 -4
- package/dist/lib/runtime/copilot-runtime.d.cts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.d.mts +56 -6
- package/dist/lib/runtime/copilot-runtime.d.mts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.mjs +79 -37
- package/dist/lib/runtime/copilot-runtime.mjs.map +1 -1
- package/dist/lib/runtime/mcp-client-cache.cjs +135 -0
- package/dist/lib/runtime/mcp-client-cache.cjs.map +1 -0
- package/dist/lib/runtime/mcp-client-cache.mjs +132 -0
- package/dist/lib/runtime/mcp-client-cache.mjs.map +1 -0
- package/dist/lib/runtime/telemetry-agent-runner.cjs.map +1 -1
- package/dist/lib/runtime/telemetry-agent-runner.d.cts +1 -1
- package/dist/lib/runtime/telemetry-agent-runner.d.mts +1 -1
- package/dist/lib/runtime/telemetry-agent-runner.mjs.map +1 -1
- package/dist/package.cjs +15 -7
- package/dist/package.mjs +15 -7
- package/dist/service-adapters/anthropic/anthropic-adapter.cjs.map +1 -1
- package/dist/service-adapters/anthropic/anthropic-adapter.d.cts.map +1 -1
- package/dist/service-adapters/anthropic/anthropic-adapter.d.mts.map +1 -1
- package/dist/service-adapters/anthropic/anthropic-adapter.mjs.map +1 -1
- package/dist/service-adapters/shared/sdk-client-utils.cjs.map +1 -1
- package/dist/service-adapters/shared/sdk-client-utils.d.cts.map +1 -1
- package/dist/service-adapters/shared/sdk-client-utils.d.mts.map +1 -1
- package/dist/service-adapters/shared/sdk-client-utils.mjs.map +1 -1
- package/dist/v2/index.cjs +9 -3
- package/dist/v2/index.d.cts +12 -11
- package/dist/v2/index.d.mts +12 -11
- package/dist/v2/index.mjs +5 -5
- package/dist/v2/runtime/core/channel-manager.cjs +1 -1
- package/dist/v2/runtime/core/channel-manager.d.cts +1 -1
- package/dist/v2/runtime/core/channel-manager.d.mts +1 -1
- package/dist/v2/runtime/core/channel-manager.mjs +1 -1
- package/dist/v2/runtime/core/fetch-handler.cjs +1 -0
- package/dist/v2/runtime/core/fetch-handler.cjs.map +1 -1
- package/dist/v2/runtime/core/fetch-handler.d.cts +2 -2
- package/dist/v2/runtime/core/fetch-handler.d.mts +2 -2
- package/dist/v2/runtime/core/fetch-handler.mjs +1 -0
- package/dist/v2/runtime/core/fetch-handler.mjs.map +1 -1
- package/dist/v2/runtime/core/runtime.cjs +5 -0
- package/dist/v2/runtime/core/runtime.cjs.map +1 -1
- package/dist/v2/runtime/core/runtime.d.cts +18 -3
- package/dist/v2/runtime/core/runtime.d.cts.map +1 -1
- package/dist/v2/runtime/core/runtime.d.mts +17 -2
- package/dist/v2/runtime/core/runtime.d.mts.map +1 -1
- package/dist/v2/runtime/core/runtime.mjs +5 -0
- package/dist/v2/runtime/core/runtime.mjs.map +1 -1
- package/dist/v2/runtime/endpoints/express-single.cjs.map +1 -1
- package/dist/v2/runtime/endpoints/express-single.d.cts +2 -2
- package/dist/v2/runtime/endpoints/express-single.d.cts.map +1 -1
- package/dist/v2/runtime/endpoints/express-single.d.mts +2 -2
- package/dist/v2/runtime/endpoints/express-single.d.mts.map +1 -1
- package/dist/v2/runtime/endpoints/express-single.mjs.map +1 -1
- package/dist/v2/runtime/endpoints/express.cjs +2 -3
- package/dist/v2/runtime/endpoints/express.cjs.map +1 -1
- package/dist/v2/runtime/endpoints/express.d.cts +26 -7
- package/dist/v2/runtime/endpoints/express.d.cts.map +1 -1
- package/dist/v2/runtime/endpoints/express.d.mts +26 -7
- package/dist/v2/runtime/endpoints/express.d.mts.map +1 -1
- package/dist/v2/runtime/endpoints/express.mjs +2 -2
- package/dist/v2/runtime/endpoints/express.mjs.map +1 -1
- package/dist/v2/runtime/endpoints/hono.d.cts +2 -2
- package/dist/v2/runtime/endpoints/hono.d.mts +2 -2
- package/dist/v2/runtime/endpoints/index.d.cts +3 -3
- package/dist/v2/runtime/endpoints/index.d.mts +3 -3
- package/dist/v2/runtime/endpoints/load-express.cjs +36 -0
- package/dist/v2/runtime/endpoints/load-express.cjs.map +1 -0
- package/dist/v2/runtime/endpoints/load-express.mjs +35 -0
- package/dist/v2/runtime/endpoints/load-express.mjs.map +1 -0
- package/dist/v2/runtime/handlers/handle-stop.cjs +18 -14
- package/dist/v2/runtime/handlers/handle-stop.cjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-stop.mjs +18 -14
- package/dist/v2/runtime/handlers/handle-stop.mjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-suggest.cjs +4 -3
- package/dist/v2/runtime/handlers/handle-suggest.cjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-suggest.mjs +5 -4
- package/dist/v2/runtime/handlers/handle-suggest.mjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/agent-utils.cjs +3 -4
- package/dist/v2/runtime/handlers/shared/agent-utils.cjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/agent-utils.mjs +1 -2
- package/dist/v2/runtime/handlers/shared/agent-utils.mjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/sse-keep-alive.cjs +69 -0
- package/dist/v2/runtime/handlers/shared/sse-keep-alive.cjs.map +1 -0
- package/dist/v2/runtime/handlers/shared/sse-keep-alive.mjs +67 -0
- package/dist/v2/runtime/handlers/shared/sse-keep-alive.mjs.map +1 -0
- package/dist/v2/runtime/handlers/shared/sse-response.cjs +5 -2
- package/dist/v2/runtime/handlers/shared/sse-response.cjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/sse-response.mjs +5 -2
- package/dist/v2/runtime/handlers/shared/sse-response.mjs.map +1 -1
- package/dist/v2/runtime/handlers/sse/connect.cjs +1 -0
- package/dist/v2/runtime/handlers/sse/connect.cjs.map +1 -1
- package/dist/v2/runtime/handlers/sse/connect.mjs +1 -0
- package/dist/v2/runtime/handlers/sse/connect.mjs.map +1 -1
- package/dist/v2/runtime/handlers/sse/run.cjs +1 -0
- package/dist/v2/runtime/handlers/sse/run.cjs.map +1 -1
- package/dist/v2/runtime/handlers/sse/run.mjs +1 -0
- package/dist/v2/runtime/handlers/sse/run.mjs.map +1 -1
- package/dist/v2/runtime/index.d.cts +9 -9
- package/dist/v2/runtime/index.d.mts +9 -9
- package/dist/v2/runtime/intelligence-platform/client.cjs +1 -1
- package/dist/v2/runtime/intelligence-platform/client.d.cts +1 -1
- package/dist/v2/runtime/intelligence-platform/client.d.mts +1 -1
- package/dist/v2/runtime/intelligence-platform/client.mjs +1 -1
- package/dist/v2/runtime/intelligence-platform/skill-registry/archive.cjs +132 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/archive.cjs.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/archive.d.cts +11 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/archive.d.cts.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/archive.d.mts +11 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/archive.d.mts.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/archive.mjs +128 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/archive.mjs.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/config.cjs +48 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/config.cjs.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/config.d.cts +27 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/config.d.cts.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/config.d.mts +27 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/config.d.mts.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/config.mjs +48 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/config.mjs.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/errors.cjs +11 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/errors.cjs.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/errors.d.cts +8 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/errors.d.cts.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/errors.d.mts +8 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/errors.d.mts.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/errors.mjs +11 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/errors.mjs.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/index.d.cts +8 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/index.d.mts +8 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/registry.cjs +132 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/registry.cjs.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/registry.d.cts +31 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/registry.d.cts.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/registry.d.mts +31 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/registry.d.mts.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/registry.mjs +132 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/registry.mjs.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/skill-content.cjs +42 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/skill-content.cjs.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/skill-content.d.cts +13 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/skill-content.d.cts.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/skill-content.d.mts +13 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/skill-content.d.mts.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/skill-content.mjs +39 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/skill-content.mjs.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/snapshot.cjs +93 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/snapshot.cjs.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/snapshot.d.cts +28 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/snapshot.d.cts.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/snapshot.d.mts +28 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/snapshot.d.mts.map +1 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/snapshot.mjs +92 -0
- package/dist/v2/runtime/intelligence-platform/skill-registry/snapshot.mjs.map +1 -0
- package/dist/v2/runtime/runner/agent-runner.d.cts +1 -1
- package/dist/v2/runtime/runner/in-memory.d.cts +1 -1
- package/dist/v2/runtime/runner/index.d.cts +2 -2
- package/dist/v2/runtime/runner/index.d.mts +2 -2
- package/dist/v2/runtime/runner/index.mjs +2 -2
- package/dist/v2/runtime/runner/intelligence.d.cts +1 -1
- package/package.json +17 -7
- package/dist/v2/runtime/open-generative-ui-middleware.cjs +0 -286
- package/dist/v2/runtime/open-generative-ui-middleware.cjs.map +0 -1
- package/dist/v2/runtime/open-generative-ui-middleware.mjs +0 -284
- package/dist/v2/runtime/open-generative-ui-middleware.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.mjs","names":["SkillDeliveryError"],"sources":["../../../../../src/v2/runtime/intelligence-platform/skill-registry/snapshot.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport type { LearnedSkillsSnapshotResult } from \"../learned-skills\";\nimport { SkillDeliveryError, invalidSnapshot } from \"./errors\";\nimport { MAX_SNAPSHOT_BYTES, readArchive, safeRelativePath } from \"./archive\";\n\nexport interface SnapshotFile {\n readonly path: string;\n readonly size: number;\n readonly sha256: string;\n /** Absent for supporting resources that cannot be decoded as UTF-8 text. */\n readonly text?: string;\n}\nexport interface SnapshotSkill {\n readonly name: string;\n readonly description: string;\n readonly files: readonly SnapshotFile[];\n}\nexport interface VerifiedSnapshot {\n readonly revision: string;\n readonly etag: string;\n readonly skills: readonly SnapshotSkill[];\n}\n\nfunction object(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\nfunction sha256(bytes: Uint8Array): string {\n return createHash(\"sha256\").update(bytes).digest(\"hex\");\n}\nfunction utf8(bytes: Uint8Array): string | undefined {\n try {\n return new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true }).decode(\n bytes,\n );\n } catch {\n return undefined;\n }\n}\n\n/** Validate a replacement fully before it can become an invocation snapshot. */\nexport async function validateSnapshot(\n response: Extract<LearnedSkillsSnapshotResult, { status: \"snapshot\" }>,\n signal?: AbortSignal,\n): Promise<VerifiedSnapshot> {\n try {\n if (\n !object(response) ||\n !(response.bytes instanceof Uint8Array) ||\n typeof response.revision !== \"string\" ||\n typeof response.etag !== \"string\" ||\n typeof response.contentType !== \"string\"\n )\n throw invalidSnapshot();\n const { revision, etag, contentType } = response;\n if (\n response.status !== \"snapshot\" ||\n response.bytes.byteLength > MAX_SNAPSHOT_BYTES ||\n contentType.split(\";\", 1)[0]?.trim().toLowerCase() !==\n \"application/zip\" ||\n !revision ||\n !/^\"[a-f0-9]{64}\"$/.test(etag)\n )\n throw invalidSnapshot();\n // Own the bytes before asynchronous decompression so an injected client\n // cannot mutate an in-flight replacement after its digest is checked.\n const bytes = Buffer.from(response.bytes);\n if (`\"${sha256(bytes)}\"` !== etag) throw invalidSnapshot();\n const archive = await readArchive(bytes, signal);\n const manifestBytes = archive.get(\"manifest.json\");\n if (!manifestBytes) throw invalidSnapshot();\n const decoded = utf8(manifestBytes);\n if (decoded === undefined) throw invalidSnapshot();\n const manifest: unknown = JSON.parse(decoded);\n if (!object(manifest)) throw invalidSnapshot();\n if (\n typeof manifest.schemaVersion === \"number\" &&\n manifest.schemaVersion !== 1\n )\n throw new SkillDeliveryError(\"UNSUPPORTED_SERVER\", false);\n if (\n manifest.schemaVersion !== 1 ||\n manifest.revision !== revision ||\n !Array.isArray(manifest.skills)\n )\n throw invalidSnapshot();\n const expected = new Set([\"manifest.json\"]);\n let previousName: string | undefined;\n const skills: SnapshotSkill[] = [];\n for (const skill of manifest.skills) {\n if (\n !object(skill) ||\n typeof skill.name !== \"string\" ||\n !safeRelativePath(skill.name) ||\n skill.name.includes(\"/\") ||\n (previousName !== undefined &&\n Buffer.compare(Buffer.from(previousName), Buffer.from(skill.name)) >=\n 0) ||\n typeof skill.description !== \"string\" ||\n !Array.isArray(skill.files)\n )\n throw invalidSnapshot();\n previousName = skill.name;\n let previousPath: string | undefined;\n let hasSkill = false;\n const files: SnapshotFile[] = [];\n for (const file of skill.files) {\n if (\n !object(file) ||\n typeof file.path !== \"string\" ||\n !safeRelativePath(file.path) ||\n (previousPath !== undefined &&\n Buffer.compare(Buffer.from(previousPath), Buffer.from(file.path)) >=\n 0) ||\n typeof file.size !== \"number\" ||\n !Number.isSafeInteger(file.size) ||\n file.size < 0 ||\n typeof file.sha256 !== \"string\" ||\n !/^[a-f0-9]{64}$/.test(file.sha256)\n )\n throw invalidSnapshot();\n previousPath = file.path;\n const path = `${skill.name}/${file.path}`;\n if (expected.has(path)) throw invalidSnapshot();\n expected.add(path);\n const content = archive.get(path);\n if (\n !content ||\n content.length !== file.size ||\n sha256(content) !== file.sha256\n )\n throw invalidSnapshot();\n const text = utf8(content);\n if (file.path === \"SKILL.md\") {\n if (text === undefined) throw invalidSnapshot();\n hasSkill = true;\n }\n files.push(\n Object.freeze({\n path: file.path,\n size: file.size,\n sha256: file.sha256,\n ...(text !== undefined ? { text } : {}),\n }),\n );\n }\n if (!hasSkill) throw invalidSnapshot();\n skills.push(\n Object.freeze({\n name: skill.name,\n description: skill.description,\n files: Object.freeze(files),\n }),\n );\n }\n if (\n expected.size !== archive.size ||\n [...archive.keys()].some((path) => !expected.has(path))\n )\n throw invalidSnapshot();\n return Object.freeze({\n revision: revision,\n etag: etag,\n skills: Object.freeze(skills),\n });\n } catch (error) {\n if (signal?.aborted) throw signal.reason;\n if (error instanceof SkillDeliveryError) throw error;\n throw invalidSnapshot(error);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
import { AgentRunner, AgentRunnerConnectRequest, AgentRunnerIsRunningRequest, AgentRunnerRunRequest, AgentRunnerStopRequest } from "./agent-runner.cjs";
|
|
3
|
-
import { Observable, ReplaySubject } from "rxjs";
|
|
4
3
|
import { AbstractAgent, BaseEvent, Message } from "@ag-ui/client";
|
|
4
|
+
import { Observable, ReplaySubject } from "rxjs";
|
|
5
5
|
|
|
6
6
|
//#region src/v2/runtime/runner/in-memory.d.ts
|
|
7
7
|
interface InMemoryLimits {
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
import { AgentRunner, AgentRunnerConnectRequest, AgentRunnerIsRunningRequest, AgentRunnerRunRequest, AgentRunnerStopRequest, LocalThreadEndpointRecord, LocalThreadEndpointRunner, supportsLocalThreadEndpoints } from "./agent-runner.cjs";
|
|
3
3
|
import { InMemoryAgentRunner, InMemoryAgentRunnerOptions, InMemoryLimits, InMemoryThread, ɵBoundedThreadStore, ɵGLOBAL_STORE, ɵINMEMORY_DEFAULTS, ɵestimateBytes, ɵnormalizeLimits } from "./in-memory.cjs";
|
|
4
4
|
import { IntelligenceAgentRunner, IntelligenceAgentRunnerOptions, RunnerStartupBoundary } from "./intelligence.cjs";
|
|
5
|
-
import { finalizeRunEvents } from "@copilotkit/shared";
|
|
6
|
-
export { finalizeRunEvents };
|
|
5
|
+
import { FinalizeRunOptions, RunEventFinalizer, createRunEventFinalizer, finalizeRunEvents } from "@copilotkit/shared";
|
|
6
|
+
export { type FinalizeRunOptions, type RunEventFinalizer, createRunEventFinalizer, finalizeRunEvents };
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
import { AgentRunner, AgentRunnerConnectRequest, AgentRunnerIsRunningRequest, AgentRunnerRunRequest, AgentRunnerStopRequest, LocalThreadEndpointRecord, LocalThreadEndpointRunner, supportsLocalThreadEndpoints } from "./agent-runner.mjs";
|
|
3
3
|
import { InMemoryAgentRunner, InMemoryAgentRunnerOptions, InMemoryLimits, InMemoryThread, ɵBoundedThreadStore, ɵGLOBAL_STORE, ɵINMEMORY_DEFAULTS, ɵestimateBytes, ɵnormalizeLimits } from "./in-memory.mjs";
|
|
4
4
|
import { IntelligenceAgentRunner, IntelligenceAgentRunnerOptions, RunnerStartupBoundary } from "./intelligence.mjs";
|
|
5
|
-
import { finalizeRunEvents as finalizeRunEvents$1 } from "@copilotkit/shared";
|
|
6
|
-
export { finalizeRunEvents$1 as finalizeRunEvents };
|
|
5
|
+
import { FinalizeRunOptions, RunEventFinalizer, createRunEventFinalizer as createRunEventFinalizer$1, finalizeRunEvents as finalizeRunEvents$1 } from "@copilotkit/shared";
|
|
6
|
+
export { type FinalizeRunOptions, type RunEventFinalizer, createRunEventFinalizer$1 as createRunEventFinalizer, finalizeRunEvents$1 as finalizeRunEvents };
|
|
@@ -2,6 +2,6 @@ import "reflect-metadata";
|
|
|
2
2
|
import { AgentRunner, supportsLocalThreadEndpoints } from "./agent-runner.mjs";
|
|
3
3
|
import { InMemoryAgentRunner, ɵBoundedThreadStore, ɵGLOBAL_STORE, ɵINMEMORY_DEFAULTS, ɵestimateBytes, ɵnormalizeLimits } from "./in-memory.mjs";
|
|
4
4
|
import { IntelligenceAgentRunner } from "./intelligence.mjs";
|
|
5
|
-
import { finalizeRunEvents as finalizeRunEvents$1 } from "@copilotkit/shared";
|
|
5
|
+
import { createRunEventFinalizer as createRunEventFinalizer$1, finalizeRunEvents as finalizeRunEvents$1 } from "@copilotkit/shared";
|
|
6
6
|
|
|
7
|
-
export { finalizeRunEvents$1 as finalizeRunEvents };
|
|
7
|
+
export { createRunEventFinalizer$1 as createRunEventFinalizer, finalizeRunEvents$1 as finalizeRunEvents };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
import { AgentRunner, AgentRunnerConnectRequest, AgentRunnerIsRunningRequest, AgentRunnerRunRequest, AgentRunnerStopRequest } from "./agent-runner.cjs";
|
|
3
|
-
import { Observable } from "rxjs";
|
|
4
3
|
import { BaseEvent } from "@ag-ui/client";
|
|
4
|
+
import { Observable } from "rxjs";
|
|
5
5
|
|
|
6
6
|
//#region src/v2/runtime/runner/intelligence.d.ts
|
|
7
7
|
interface IntelligenceAgentRunnerOptions {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@copilotkit/runtime",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.73.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -38,6 +38,10 @@
|
|
|
38
38
|
"import": "./dist/index.mjs",
|
|
39
39
|
"require": "./dist/index.cjs"
|
|
40
40
|
},
|
|
41
|
+
"./internal/learned-skills": {
|
|
42
|
+
"import": "./dist/internal/learned-skills.mjs",
|
|
43
|
+
"require": "./dist/internal/learned-skills.cjs"
|
|
44
|
+
},
|
|
41
45
|
"./langgraph": {
|
|
42
46
|
"import": "./dist/langgraph.mjs",
|
|
43
47
|
"require": "./dist/langgraph.cjs"
|
|
@@ -78,7 +82,6 @@
|
|
|
78
82
|
"@ai-sdk/openai": "^3.0.36",
|
|
79
83
|
"@cfworker/json-schema": "^4.1.1",
|
|
80
84
|
"@copilotkit/license-verifier": "~0.5.0",
|
|
81
|
-
"@copilotkit/shared": "1.72.1-canary.sp-longthread-perf",
|
|
82
85
|
"@graphql-yoga/plugin-defer-stream": "^3.3.1",
|
|
83
86
|
"@hono/node-server": "^1.13.5",
|
|
84
87
|
"@modelcontextprotocol/sdk": "^1.18.2",
|
|
@@ -86,13 +89,10 @@
|
|
|
86
89
|
"@scarf/scarf": "^1.3.0",
|
|
87
90
|
"@segment/analytics-node": "^2.1.2",
|
|
88
91
|
"@types/cors": "^2.8.17",
|
|
89
|
-
"@types/express": "^4.17.21",
|
|
90
92
|
"ai": "^6.0.104",
|
|
91
|
-
"clarinet": "^0.12.4",
|
|
92
93
|
"class-transformer": "^0.5.1",
|
|
93
94
|
"class-validator": "^0.14.1",
|
|
94
95
|
"cors": "^2.8.5",
|
|
95
|
-
"express": "^4.21.2",
|
|
96
96
|
"graphql": "^16.8.1",
|
|
97
97
|
"graphql-scalars": "^1.23.0",
|
|
98
98
|
"graphql-yoga": "^5.3.1",
|
|
@@ -108,13 +108,17 @@
|
|
|
108
108
|
"uuid": "^11.1.0",
|
|
109
109
|
"ws": "^8.18.0",
|
|
110
110
|
"zod": "^3.23.3",
|
|
111
|
+
"yauzl": "2.10.0",
|
|
111
112
|
"@copilotkit/channels-core": "^0.10.0",
|
|
112
|
-
"@copilotkit/channels-intelligence": "0.10.0"
|
|
113
|
+
"@copilotkit/channels-intelligence": "0.10.0",
|
|
114
|
+
"@copilotkit/shared": "1.73.1"
|
|
113
115
|
},
|
|
114
116
|
"devDependencies": {
|
|
115
117
|
"@copilotkit/aimock": "latest",
|
|
116
118
|
"@swc/core": "1.5.28",
|
|
117
119
|
"@tanstack/intent": "^0.0.29",
|
|
120
|
+
"@types/express": "^4.17.21",
|
|
121
|
+
"@types/express-v5": "npm:@types/express@^5.0.0",
|
|
118
122
|
"@types/node": "^18.11.17",
|
|
119
123
|
"@types/phoenix": "^1.6.6",
|
|
120
124
|
"@valibot/to-json-schema": "^1.5.0",
|
|
@@ -123,6 +127,7 @@
|
|
|
123
127
|
"arktype": "^2.1.29",
|
|
124
128
|
"elysia": "^1.2.25",
|
|
125
129
|
"eslint": "^8.56.0",
|
|
130
|
+
"express": "^4.18.0 || ^5.0.0",
|
|
126
131
|
"nodemon": "^3.1.3",
|
|
127
132
|
"supertest": "^7.1.1",
|
|
128
133
|
"ts-node": "^10.9.2",
|
|
@@ -130,6 +135,7 @@
|
|
|
130
135
|
"typescript": "^5.2.3",
|
|
131
136
|
"valibot": "^1.2.0",
|
|
132
137
|
"vitest": "^3.2.4",
|
|
138
|
+
"@types/yauzl": "2.10.3",
|
|
133
139
|
"@copilotkit/channels": "0.10.0",
|
|
134
140
|
"tsconfig": "1.4.12"
|
|
135
141
|
},
|
|
@@ -141,6 +147,7 @@
|
|
|
141
147
|
"@langchain/google-gauth": ">=0.1.0",
|
|
142
148
|
"@langchain/langgraph-sdk": ">=0.1.2",
|
|
143
149
|
"@langchain/openai": ">=0.4.2",
|
|
150
|
+
"express": "^4.18.0 || ^5.0.0",
|
|
144
151
|
"groq-sdk": ">=0.3.0 <1.0.0",
|
|
145
152
|
"langchain": ">=0.3.3",
|
|
146
153
|
"openai": "^4.85.1 || >=5.0.0"
|
|
@@ -164,6 +171,9 @@
|
|
|
164
171
|
"@langchain/openai": {
|
|
165
172
|
"optional": true
|
|
166
173
|
},
|
|
174
|
+
"express": {
|
|
175
|
+
"optional": true
|
|
176
|
+
},
|
|
167
177
|
"groq-sdk": {
|
|
168
178
|
"optional": true
|
|
169
179
|
},
|
|
@@ -196,7 +206,7 @@
|
|
|
196
206
|
"generate-graphql-schema": "node -e \"const fs=require('fs');fs.rmSync('__snapshots__',{recursive:true,force:true})\" && ts-node --transpile-only ./scripts/generate-gql-schema.ts",
|
|
197
207
|
"link:global": "pnpm link --global",
|
|
198
208
|
"unlink:global": "pnpm unlink --global",
|
|
199
|
-
"check-dts": "tsx ../../scripts/validate-dts-ambient.ts dist && tsx ../../scripts/validate-dts-imports.ts dist",
|
|
209
|
+
"check-dts": "tsx ../../scripts/validate-dts-ambient.ts dist && tsx ../../scripts/validate-dts-imports.ts dist && tsx ../../scripts/validate-optional-peer-entries.ts . && tsc --noEmit -p type-fixtures/express4/tsconfig.json && tsc --noEmit -p type-fixtures/express5/tsconfig.json",
|
|
200
210
|
"publint": "publint .",
|
|
201
211
|
"attw": "attw --pack . --profile node16"
|
|
202
212
|
}
|
|
@@ -1,286 +0,0 @@
|
|
|
1
|
-
require("reflect-metadata");
|
|
2
|
-
const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
|
|
3
|
-
let rxjs = require("rxjs");
|
|
4
|
-
let _ag_ui_client = require("@ag-ui/client");
|
|
5
|
-
let clarinet = require("clarinet");
|
|
6
|
-
clarinet = require_runtime.__toESM(clarinet);
|
|
7
|
-
|
|
8
|
-
//#region src/v2/runtime/open-generative-ui-middleware.ts
|
|
9
|
-
const TOOL_NAME = "generateSandboxedUi";
|
|
10
|
-
const ACTIVITY_TYPE = "open-generative-ui";
|
|
11
|
-
/**
|
|
12
|
-
* Tracks incremental JSON parsing state for a single tool call's arguments.
|
|
13
|
-
* Emits activity events via the onEvent callback as parameters complete.
|
|
14
|
-
*/
|
|
15
|
-
var ArgsParser = class {
|
|
16
|
-
constructor(toolCallId, onEvent) {
|
|
17
|
-
this.currentKey = null;
|
|
18
|
-
this.depth = 0;
|
|
19
|
-
this.currentArrayKey = null;
|
|
20
|
-
this.snapshotEmitted = false;
|
|
21
|
-
this.streamingHtmlKey = false;
|
|
22
|
-
this.htmlEmittedLength = 0;
|
|
23
|
-
this.htmlArrayEmitted = false;
|
|
24
|
-
this.params = {};
|
|
25
|
-
this.messageId = `${toolCallId}-activity`;
|
|
26
|
-
this.onEvent = onEvent;
|
|
27
|
-
this.parser = clarinet.default.parser();
|
|
28
|
-
this.parser.onopenobject = (key) => {
|
|
29
|
-
this.depth++;
|
|
30
|
-
if (key !== void 0 && this.depth === 1) {
|
|
31
|
-
this.currentKey = key;
|
|
32
|
-
this.initHtmlStreaming(key);
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
this.parser.onkey = (key) => {
|
|
36
|
-
if (this.depth === 1) {
|
|
37
|
-
this.currentKey = key;
|
|
38
|
-
this.initHtmlStreaming(key);
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
this.parser.onvalue = (value) => {
|
|
42
|
-
if (this.depth === 1 && this.currentKey) if (this.currentArrayKey) {
|
|
43
|
-
const strValue = String(value);
|
|
44
|
-
if (this.currentArrayKey === "jsExpressions") {
|
|
45
|
-
if (!this.params.jsExpressions) this.params.jsExpressions = [];
|
|
46
|
-
this.params.jsExpressions.push(strValue);
|
|
47
|
-
} else if (this.currentArrayKey === "placeholderMessages") {
|
|
48
|
-
if (!this.params.placeholderMessages) this.params.placeholderMessages = [];
|
|
49
|
-
this.params.placeholderMessages.push(strValue);
|
|
50
|
-
}
|
|
51
|
-
this.emitArrayItemDelta(this.currentArrayKey, strValue);
|
|
52
|
-
} else if (this.streamingHtmlKey) {
|
|
53
|
-
const fullHtml = value != null ? String(value) : "";
|
|
54
|
-
this.params.html = fullHtml || void 0;
|
|
55
|
-
this.emitPendingHtml(fullHtml);
|
|
56
|
-
this.emitParamDelta("htmlComplete", true);
|
|
57
|
-
this.streamingHtmlKey = false;
|
|
58
|
-
} else this.setParam(this.currentKey, value);
|
|
59
|
-
};
|
|
60
|
-
this.parser.onopenarray = () => {
|
|
61
|
-
if (this.depth === 1 && this.currentKey) {
|
|
62
|
-
const key = this.currentKey;
|
|
63
|
-
if (key === "jsExpressions" || key === "placeholderMessages") {
|
|
64
|
-
this.currentArrayKey = key;
|
|
65
|
-
if (key === "jsExpressions") this.params.jsExpressions = [];
|
|
66
|
-
else this.params.placeholderMessages = [];
|
|
67
|
-
this.emitParamDelta(key, []);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
this.parser.onclosearray = () => {
|
|
72
|
-
if (this.depth === 1) {
|
|
73
|
-
if (this.currentArrayKey === "jsExpressions") this.emitParamDelta("jsExpressionsComplete", true);
|
|
74
|
-
this.currentArrayKey = null;
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
this.parser.oncloseobject = () => {
|
|
78
|
-
this.depth--;
|
|
79
|
-
};
|
|
80
|
-
this.parser.onerror = (err) => {
|
|
81
|
-
console.warn("[OpenGenerativeUI] JSON parse error in streaming args, resuming:", err?.message ?? err);
|
|
82
|
-
this.parser.error = null;
|
|
83
|
-
this.parser.resume();
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
write(chunk) {
|
|
87
|
-
this.parser.write(chunk);
|
|
88
|
-
this.flushHtmlChunks();
|
|
89
|
-
}
|
|
90
|
-
initHtmlStreaming(key) {
|
|
91
|
-
if (key === "html") {
|
|
92
|
-
this.streamingHtmlKey = true;
|
|
93
|
-
this.htmlEmittedLength = 0;
|
|
94
|
-
this.htmlArrayEmitted = false;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Read clarinet's internal textNode buffer to emit html chunks incrementally.
|
|
99
|
-
* Called after every write() so partial string content is emitted as it streams in.
|
|
100
|
-
*/
|
|
101
|
-
flushHtmlChunks() {
|
|
102
|
-
if (!this.streamingHtmlKey) return;
|
|
103
|
-
const textNode = this.parser.textNode;
|
|
104
|
-
if (typeof textNode !== "string") return;
|
|
105
|
-
if (textNode.length === this.htmlEmittedLength) return;
|
|
106
|
-
this.emitPendingHtml(textNode);
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Emit accumulated html content since the last emission.
|
|
110
|
-
* Called by flushHtmlChunks and directly when html completes.
|
|
111
|
-
*/
|
|
112
|
-
emitPendingHtml(textNode) {
|
|
113
|
-
const newContent = textNode.slice(this.htmlEmittedLength);
|
|
114
|
-
if (newContent.length === 0) return;
|
|
115
|
-
if (!this.htmlArrayEmitted) {
|
|
116
|
-
this.htmlArrayEmitted = true;
|
|
117
|
-
this.emitParamDelta("html", []);
|
|
118
|
-
}
|
|
119
|
-
this.emitArrayItemDelta("html", newContent);
|
|
120
|
-
this.htmlEmittedLength = textNode.length;
|
|
121
|
-
}
|
|
122
|
-
setParam(key, value) {
|
|
123
|
-
switch (key) {
|
|
124
|
-
case "initialHeight":
|
|
125
|
-
this.params.initialHeight = typeof value === "number" ? value : void 0;
|
|
126
|
-
if (this.snapshotEmitted) this.emitParamDelta("initialHeight", this.params.initialHeight);
|
|
127
|
-
else this.emitSnapshot();
|
|
128
|
-
break;
|
|
129
|
-
case "css":
|
|
130
|
-
this.params.css = value != null ? String(value) : void 0;
|
|
131
|
-
this.emitParamDelta("css", this.params.css);
|
|
132
|
-
this.emitParamDelta("cssComplete", true);
|
|
133
|
-
break;
|
|
134
|
-
case "jsFunctions":
|
|
135
|
-
this.params.jsFunctions = value != null ? String(value) : void 0;
|
|
136
|
-
this.emitParamDelta("jsFunctions", this.params.jsFunctions);
|
|
137
|
-
this.emitParamDelta("jsFunctionsComplete", true);
|
|
138
|
-
break;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
emitSnapshot() {
|
|
142
|
-
if (this.snapshotEmitted) return;
|
|
143
|
-
this.snapshotEmitted = true;
|
|
144
|
-
const event = {
|
|
145
|
-
type: _ag_ui_client.EventType.ACTIVITY_SNAPSHOT,
|
|
146
|
-
messageId: this.messageId,
|
|
147
|
-
activityType: ACTIVITY_TYPE,
|
|
148
|
-
content: {
|
|
149
|
-
initialHeight: this.params.initialHeight,
|
|
150
|
-
generating: true
|
|
151
|
-
}
|
|
152
|
-
};
|
|
153
|
-
this.onEvent(event);
|
|
154
|
-
}
|
|
155
|
-
emitParamDelta(key, value) {
|
|
156
|
-
if (value === void 0) return;
|
|
157
|
-
this.emitSnapshot();
|
|
158
|
-
const event = {
|
|
159
|
-
type: _ag_ui_client.EventType.ACTIVITY_DELTA,
|
|
160
|
-
messageId: this.messageId,
|
|
161
|
-
activityType: ACTIVITY_TYPE,
|
|
162
|
-
patch: [{
|
|
163
|
-
op: "add",
|
|
164
|
-
path: `/${key}`,
|
|
165
|
-
value
|
|
166
|
-
}]
|
|
167
|
-
};
|
|
168
|
-
this.onEvent(event);
|
|
169
|
-
}
|
|
170
|
-
emitArrayItemDelta(arrayKey, value) {
|
|
171
|
-
this.emitSnapshot();
|
|
172
|
-
const event = {
|
|
173
|
-
type: _ag_ui_client.EventType.ACTIVITY_DELTA,
|
|
174
|
-
messageId: this.messageId,
|
|
175
|
-
activityType: ACTIVITY_TYPE,
|
|
176
|
-
patch: [{
|
|
177
|
-
op: "add",
|
|
178
|
-
path: `/${arrayKey}/-`,
|
|
179
|
-
value
|
|
180
|
-
}]
|
|
181
|
-
};
|
|
182
|
-
this.onEvent(event);
|
|
183
|
-
}
|
|
184
|
-
};
|
|
185
|
-
var OpenGenerativeUIMiddleware = class extends _ag_ui_client.Middleware {
|
|
186
|
-
run(input, next) {
|
|
187
|
-
return this.processStream(this.runNextWithState(input, next));
|
|
188
|
-
}
|
|
189
|
-
processStream(source) {
|
|
190
|
-
return new rxjs.Observable((subscriber) => {
|
|
191
|
-
let heldRunFinished = null;
|
|
192
|
-
const activeParsers = /* @__PURE__ */ new Map();
|
|
193
|
-
const heldToolCallEvents = /* @__PURE__ */ new Map();
|
|
194
|
-
const flushedToolCalls = /* @__PURE__ */ new Set();
|
|
195
|
-
const flushHeldEvents = (toolCallId) => {
|
|
196
|
-
if (flushedToolCalls.has(toolCallId)) return;
|
|
197
|
-
flushedToolCalls.add(toolCallId);
|
|
198
|
-
const held = heldToolCallEvents.get(toolCallId);
|
|
199
|
-
if (held) {
|
|
200
|
-
for (const e of held) subscriber.next(e);
|
|
201
|
-
heldToolCallEvents.delete(toolCallId);
|
|
202
|
-
}
|
|
203
|
-
};
|
|
204
|
-
const subscription = source.subscribe({
|
|
205
|
-
next: (eventWithState) => {
|
|
206
|
-
const event = eventWithState.event;
|
|
207
|
-
if (heldRunFinished) {
|
|
208
|
-
subscriber.next(heldRunFinished.event);
|
|
209
|
-
heldRunFinished = null;
|
|
210
|
-
}
|
|
211
|
-
if (event.type === _ag_ui_client.EventType.RUN_FINISHED) {
|
|
212
|
-
heldRunFinished = eventWithState;
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
if (event.type === _ag_ui_client.EventType.TOOL_CALL_START) {
|
|
216
|
-
const startEvent = event;
|
|
217
|
-
if (startEvent.toolCallName === TOOL_NAME) {
|
|
218
|
-
heldToolCallEvents.set(startEvent.toolCallId, [event]);
|
|
219
|
-
activeParsers.set(startEvent.toolCallId, new ArgsParser(startEvent.toolCallId, (activityEvent) => {
|
|
220
|
-
subscriber.next(activityEvent);
|
|
221
|
-
flushHeldEvents(startEvent.toolCallId);
|
|
222
|
-
}));
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
if (event.type === _ag_ui_client.EventType.TOOL_CALL_ARGS) {
|
|
227
|
-
const argsEvent = event;
|
|
228
|
-
const parser = activeParsers.get(argsEvent.toolCallId);
|
|
229
|
-
if (parser) {
|
|
230
|
-
if (!flushedToolCalls.has(argsEvent.toolCallId)) heldToolCallEvents.get(argsEvent.toolCallId).push(event);
|
|
231
|
-
else subscriber.next(event);
|
|
232
|
-
parser.write(argsEvent.delta);
|
|
233
|
-
return;
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
if (event.type === _ag_ui_client.EventType.TOOL_CALL_END) {
|
|
237
|
-
const endEvent = event;
|
|
238
|
-
const parser = activeParsers.get(endEvent.toolCallId);
|
|
239
|
-
if (parser) {
|
|
240
|
-
const completeEvent = {
|
|
241
|
-
type: _ag_ui_client.EventType.ACTIVITY_DELTA,
|
|
242
|
-
messageId: parser.messageId,
|
|
243
|
-
activityType: ACTIVITY_TYPE,
|
|
244
|
-
patch: [{
|
|
245
|
-
op: "add",
|
|
246
|
-
path: "/generating",
|
|
247
|
-
value: false
|
|
248
|
-
}]
|
|
249
|
-
};
|
|
250
|
-
subscriber.next(completeEvent);
|
|
251
|
-
if (!flushedToolCalls.has(endEvent.toolCallId)) heldToolCallEvents.get(endEvent.toolCallId).push(event);
|
|
252
|
-
else subscriber.next(event);
|
|
253
|
-
return;
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
subscriber.next(event);
|
|
257
|
-
},
|
|
258
|
-
error: (err) => {
|
|
259
|
-
for (const [, events] of heldToolCallEvents) for (const event of events) subscriber.next(event);
|
|
260
|
-
heldToolCallEvents.clear();
|
|
261
|
-
if (heldRunFinished) {
|
|
262
|
-
subscriber.next(heldRunFinished.event);
|
|
263
|
-
heldRunFinished = null;
|
|
264
|
-
}
|
|
265
|
-
subscriber.error(err);
|
|
266
|
-
},
|
|
267
|
-
complete: () => {
|
|
268
|
-
heldToolCallEvents.forEach((_, toolCallId) => {
|
|
269
|
-
flushHeldEvents(toolCallId);
|
|
270
|
-
});
|
|
271
|
-
if (heldRunFinished) {
|
|
272
|
-
subscriber.next(heldRunFinished.event);
|
|
273
|
-
heldRunFinished = null;
|
|
274
|
-
}
|
|
275
|
-
activeParsers.clear();
|
|
276
|
-
subscriber.complete();
|
|
277
|
-
}
|
|
278
|
-
});
|
|
279
|
-
return () => subscription.unsubscribe();
|
|
280
|
-
});
|
|
281
|
-
}
|
|
282
|
-
};
|
|
283
|
-
|
|
284
|
-
//#endregion
|
|
285
|
-
exports.OpenGenerativeUIMiddleware = OpenGenerativeUIMiddleware;
|
|
286
|
-
//# sourceMappingURL=open-generative-ui-middleware.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"open-generative-ui-middleware.cjs","names":["EventType","Middleware","Observable"],"sources":["../../../src/v2/runtime/open-generative-ui-middleware.ts"],"sourcesContent":["import type {\n RunAgentInput,\n AbstractAgent,\n BaseEvent,\n ToolCallStartEvent,\n ToolCallArgsEvent,\n ActivitySnapshotEvent,\n ActivityDeltaEvent,\n} from \"@ag-ui/client\";\nimport { Middleware, EventType } from \"@ag-ui/client\";\nimport { Observable } from \"rxjs\";\nimport clarinet from \"clarinet\";\n\nconst TOOL_NAME = \"generateSandboxedUi\";\nconst ACTIVITY_TYPE = \"open-generative-ui\";\n\n/**\n * Parsed parameters from the generateSandboxedUi tool call.\n */\nexport interface GenerateSandboxedUIParams {\n initialHeight?: number;\n placeholderMessages?: string[];\n css?: string;\n html?: string;\n jsFunctions?: string;\n jsExpressions?: string[];\n}\n\n/**\n * Callback invoked by ArgsParser whenever a parameter (or array item) finishes parsing.\n */\nexport type OnParamEvent = (event: BaseEvent) => void;\n\n/**\n * Tracks incremental JSON parsing state for a single tool call's arguments.\n * Emits activity events via the onEvent callback as parameters complete.\n */\nexport class ArgsParser {\n private parser: ReturnType<typeof clarinet.parser>;\n private currentKey: string | null = null;\n private depth = 0;\n private currentArrayKey: string | null = null;\n private snapshotEmitted = false;\n\n // Streaming html state — reads parser.textNode to emit incremental chunks\n private streamingHtmlKey = false;\n private htmlEmittedLength = 0;\n private htmlArrayEmitted = false;\n\n public readonly params: GenerateSandboxedUIParams = {};\n public readonly messageId: string;\n private readonly onEvent: OnParamEvent;\n\n constructor(toolCallId: string, onEvent: OnParamEvent) {\n this.messageId = `${toolCallId}-activity`;\n this.onEvent = onEvent;\n this.parser = clarinet.parser();\n\n this.parser.onopenobject = (key: string | undefined) => {\n this.depth++;\n if (key !== undefined && this.depth === 1) {\n this.currentKey = key;\n this.initHtmlStreaming(key);\n }\n };\n\n this.parser.onkey = (key: string) => {\n if (this.depth === 1) {\n this.currentKey = key;\n this.initHtmlStreaming(key);\n }\n };\n\n this.parser.onvalue = (value: string | boolean | number | null) => {\n if (this.depth === 1 && this.currentKey) {\n if (this.currentArrayKey) {\n const strValue = String(value);\n if (this.currentArrayKey === \"jsExpressions\") {\n if (!this.params.jsExpressions) this.params.jsExpressions = [];\n this.params.jsExpressions.push(strValue);\n } else if (this.currentArrayKey === \"placeholderMessages\") {\n if (!this.params.placeholderMessages)\n this.params.placeholderMessages = [];\n this.params.placeholderMessages.push(strValue);\n }\n this.emitArrayItemDelta(this.currentArrayKey, strValue);\n } else if (this.streamingHtmlKey) {\n // HTML string completed — flush any remaining content immediately + htmlComplete\n const fullHtml = value != null ? String(value) : \"\";\n this.params.html = fullHtml || undefined;\n this.emitPendingHtml(fullHtml);\n this.emitParamDelta(\"htmlComplete\", true);\n this.streamingHtmlKey = false;\n } else {\n this.setParam(this.currentKey, value);\n }\n }\n };\n\n this.parser.onopenarray = () => {\n if (this.depth === 1 && this.currentKey) {\n const key = this.currentKey;\n if (key === \"jsExpressions\" || key === \"placeholderMessages\") {\n this.currentArrayKey = key;\n if (key === \"jsExpressions\") this.params.jsExpressions = [];\n else this.params.placeholderMessages = [];\n // Emit a delta to create the array in the activity content.\n // Subsequent \"add\" ops with path \"/<key>/-\" append to this array.\n this.emitParamDelta(key, []);\n }\n }\n };\n\n this.parser.onclosearray = () => {\n if (this.depth === 1) {\n if (this.currentArrayKey === \"jsExpressions\") {\n this.emitParamDelta(\"jsExpressionsComplete\", true);\n }\n this.currentArrayKey = null;\n }\n };\n\n this.parser.oncloseobject = () => {\n this.depth--;\n };\n\n this.parser.onerror = (err: Error) => {\n console.warn(\n \"[OpenGenerativeUI] JSON parse error in streaming args, resuming:\",\n err?.message ?? err,\n );\n // Reset error state so parsing can continue with the next chunk\n this.parser.error = null;\n this.parser.resume();\n };\n }\n\n write(chunk: string): void {\n this.parser.write(chunk);\n this.flushHtmlChunks();\n }\n\n private initHtmlStreaming(key: string): void {\n if (key === \"html\") {\n this.streamingHtmlKey = true;\n this.htmlEmittedLength = 0;\n this.htmlArrayEmitted = false;\n }\n }\n\n /**\n * Read clarinet's internal textNode buffer to emit html chunks incrementally.\n * Called after every write() so partial string content is emitted as it streams in.\n */\n private flushHtmlChunks(): void {\n if (!this.streamingHtmlKey) return;\n const textNode = (this.parser as any).textNode;\n if (typeof textNode !== \"string\") return;\n if (textNode.length === this.htmlEmittedLength) return;\n\n this.emitPendingHtml(textNode);\n }\n\n /**\n * Emit accumulated html content since the last emission.\n * Called by flushHtmlChunks and directly when html completes.\n */\n private emitPendingHtml(textNode: string): void {\n const newContent = textNode.slice(this.htmlEmittedLength);\n if (newContent.length === 0) return;\n\n if (!this.htmlArrayEmitted) {\n this.htmlArrayEmitted = true;\n this.emitParamDelta(\"html\", []);\n }\n this.emitArrayItemDelta(\"html\", newContent);\n this.htmlEmittedLength = textNode.length;\n }\n\n private setParam(key: string, value: string | boolean | number | null): void {\n switch (key) {\n case \"initialHeight\":\n this.params.initialHeight =\n typeof value === \"number\" ? value : undefined;\n if (this.snapshotEmitted) {\n // Snapshot already went out (another param parsed first) — deliver\n // the height as a delta instead.\n this.emitParamDelta(\"initialHeight\", this.params.initialHeight);\n } else {\n this.emitSnapshot();\n }\n break;\n case \"css\":\n this.params.css = value != null ? String(value) : undefined;\n this.emitParamDelta(\"css\", this.params.css);\n this.emitParamDelta(\"cssComplete\", true);\n break;\n case \"jsFunctions\":\n this.params.jsFunctions = value != null ? String(value) : undefined;\n this.emitParamDelta(\"jsFunctions\", this.params.jsFunctions);\n this.emitParamDelta(\"jsFunctionsComplete\", true);\n break;\n }\n }\n\n private emitSnapshot(): void {\n if (this.snapshotEmitted) return;\n this.snapshotEmitted = true;\n\n const event: ActivitySnapshotEvent = {\n type: EventType.ACTIVITY_SNAPSHOT,\n messageId: this.messageId,\n activityType: ACTIVITY_TYPE,\n content: { initialHeight: this.params.initialHeight, generating: true },\n };\n this.onEvent(event);\n }\n\n private emitParamDelta(key: string, value: unknown): void {\n // A JSON Patch \"add\" requires a value; emitting one without it (e.g. when\n // the LLM sends a null/empty jsFunctions or css) makes fast-json-patch\n // reject the whole patch client-side with OPERATION_VALUE_REQUIRED and\n // drops it. Skip the delta when there's nothing to add.\n if (value === undefined) return;\n // The activity message must exist before any delta can be applied —\n // the client silently drops ACTIVITY_DELTA events whose messageId has\n // no prior ACTIVITY_SNAPSHOT. The LLM controls the key order of the\n // streamed args, so the snapshot cannot wait for initialHeight.\n this.emitSnapshot();\n const event: ActivityDeltaEvent = {\n type: EventType.ACTIVITY_DELTA,\n messageId: this.messageId,\n activityType: ACTIVITY_TYPE,\n patch: [{ op: \"add\", path: `/${key}`, value }],\n };\n this.onEvent(event);\n }\n\n private emitArrayItemDelta(arrayKey: string, value: string): void {\n this.emitSnapshot();\n const event: ActivityDeltaEvent = {\n type: EventType.ACTIVITY_DELTA,\n messageId: this.messageId,\n activityType: ACTIVITY_TYPE,\n patch: [{ op: \"add\", path: `/${arrayKey}/-`, value }],\n };\n this.onEvent(event);\n }\n}\n\n/**\n * Extract EventWithState type from Middleware.runNextWithState return type\n */\ntype ExtractObservableType<T> = T extends Observable<infer U> ? U : never;\ntype RunNextWithStateReturn = ReturnType<Middleware[\"runNextWithState\"]>;\ntype EventWithState = ExtractObservableType<RunNextWithStateReturn>;\n\nexport class OpenGenerativeUIMiddleware extends Middleware {\n run(input: RunAgentInput, next: AbstractAgent): Observable<BaseEvent> {\n return this.processStream(this.runNextWithState(input, next));\n }\n\n private processStream(\n source: Observable<EventWithState>,\n ): Observable<BaseEvent> {\n return new Observable<BaseEvent>((subscriber) => {\n let heldRunFinished: EventWithState | null = null;\n // Track active generateSandboxedUi tool call IDs → their streaming parser\n const activeParsers = new Map<string, ArgsParser>();\n // Hold genui tool call events until the first activity event is emitted\n const heldToolCallEvents = new Map<string, BaseEvent[]>();\n const flushedToolCalls = new Set<string>();\n\n const flushHeldEvents = (toolCallId: string) => {\n if (flushedToolCalls.has(toolCallId)) return;\n flushedToolCalls.add(toolCallId);\n const held = heldToolCallEvents.get(toolCallId);\n if (held) {\n for (const e of held) {\n subscriber.next(e);\n }\n heldToolCallEvents.delete(toolCallId);\n }\n };\n\n const subscription = source.subscribe({\n next: (eventWithState) => {\n const event = eventWithState.event;\n\n if (heldRunFinished) {\n subscriber.next(heldRunFinished.event);\n heldRunFinished = null;\n }\n\n if (event.type === EventType.RUN_FINISHED) {\n heldRunFinished = eventWithState;\n return;\n }\n\n // Hold TOOL_CALL_START for genui until the first activity event\n if (event.type === EventType.TOOL_CALL_START) {\n const startEvent = event as ToolCallStartEvent;\n if (startEvent.toolCallName === TOOL_NAME) {\n heldToolCallEvents.set(startEvent.toolCallId, [event]);\n activeParsers.set(\n startEvent.toolCallId,\n new ArgsParser(startEvent.toolCallId, (activityEvent) => {\n subscriber.next(activityEvent);\n flushHeldEvents(startEvent.toolCallId);\n }),\n );\n return;\n }\n }\n\n // Hold or emit TOOL_CALL_ARGS for genui tool calls\n if (event.type === EventType.TOOL_CALL_ARGS) {\n const argsEvent = event as ToolCallArgsEvent;\n const parser = activeParsers.get(argsEvent.toolCallId);\n if (parser) {\n if (!flushedToolCalls.has(argsEvent.toolCallId)) {\n heldToolCallEvents.get(argsEvent.toolCallId)!.push(event);\n } else {\n subscriber.next(event);\n }\n parser.write(argsEvent.delta);\n return;\n }\n }\n\n // Hold or emit TOOL_CALL_END for genui tool calls\n if (event.type === EventType.TOOL_CALL_END) {\n const endEvent = event as { toolCallId: string } & BaseEvent;\n const parser = activeParsers.get(endEvent.toolCallId);\n if (parser) {\n // Mark generation complete\n const completeEvent: ActivityDeltaEvent = {\n type: EventType.ACTIVITY_DELTA,\n messageId: parser.messageId,\n activityType: ACTIVITY_TYPE,\n patch: [{ op: \"add\", path: \"/generating\", value: false }],\n };\n subscriber.next(completeEvent);\n\n if (!flushedToolCalls.has(endEvent.toolCallId)) {\n heldToolCallEvents.get(endEvent.toolCallId)!.push(event);\n } else {\n subscriber.next(event);\n }\n return;\n }\n }\n\n subscriber.next(event);\n },\n error: (err) => {\n // Flush any held tool call events so downstream sees them before the error\n for (const [, events] of heldToolCallEvents) {\n for (const event of events) {\n subscriber.next(event);\n }\n }\n heldToolCallEvents.clear();\n\n if (heldRunFinished) {\n subscriber.next(heldRunFinished.event);\n heldRunFinished = null;\n }\n subscriber.error(err);\n },\n complete: () => {\n // Flush any remaining held tool call events (e.g. parser never emitted)\n heldToolCallEvents.forEach((_, toolCallId) => {\n flushHeldEvents(toolCallId);\n });\n\n if (heldRunFinished) {\n subscriber.next(heldRunFinished.event);\n heldRunFinished = null;\n }\n activeParsers.clear();\n subscriber.complete();\n },\n });\n\n return () => subscription.unsubscribe();\n });\n }\n}\n"],"mappings":"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"}
|