@copilotkit/runtime 1.72.0 → 1.73.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/index.cjs +82 -8
- package/dist/agent/index.cjs.map +1 -1
- package/dist/agent/index.d.cts +55 -8
- package/dist/agent/index.d.cts.map +1 -1
- package/dist/agent/index.d.mts +53 -6
- package/dist/agent/index.d.mts.map +1 -1
- package/dist/agent/index.mjs +83 -10
- 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.cjs +1 -1
- package/dist/index.d.cts +27 -20
- package/dist/index.d.mts +27 -20
- package/dist/index.mjs +1 -1
- 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/langgraph.d.cts +3 -1
- package/dist/langgraph.d.mts +3 -1
- package/dist/lib/index.cjs +1 -1
- package/dist/lib/index.cjs.map +1 -1
- package/dist/lib/index.d.cts +2 -2
- package/dist/lib/index.d.cts.map +1 -1
- package/dist/lib/index.d.mts +2 -2
- package/dist/lib/index.d.mts.map +1 -1
- package/dist/lib/index.mjs +1 -1
- package/dist/lib/index.mjs.map +1 -1
- package/dist/lib/integrations/nextjs/app-router.cjs.map +1 -1
- package/dist/lib/integrations/nextjs/app-router.mjs.map +1 -1
- package/dist/lib/integrations/node-express/index.cjs.map +1 -1
- package/dist/lib/integrations/node-express/index.mjs.map +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.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 +2 -16
- package/dist/lib/runtime/copilot-runtime.cjs.map +1 -1
- package/dist/lib/runtime/copilot-runtime.d.cts +2 -2
- package/dist/lib/runtime/copilot-runtime.d.cts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.d.mts +2 -2
- package/dist/lib/runtime/copilot-runtime.d.mts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.mjs +3 -17
- package/dist/lib/runtime/copilot-runtime.mjs.map +1 -1
- package/dist/package.cjs +9 -3
- package/dist/package.mjs +9 -3
- 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 +7 -0
- package/dist/v2/index.d.cts +6 -5
- package/dist/v2/index.d.mts +6 -5
- package/dist/v2/index.mjs +3 -3
- package/dist/v2/runtime/core/channel-manager.d.cts +1 -1
- package/dist/v2/runtime/core/channel-manager.d.mts +2 -1
- package/dist/v2/runtime/core/channel-manager.d.mts.map +1 -1
- package/dist/v2/runtime/core/debug-event-bus.cjs +22 -0
- package/dist/v2/runtime/core/debug-event-bus.cjs.map +1 -1
- package/dist/v2/runtime/core/debug-event-bus.d.cts +1 -1
- package/dist/v2/runtime/core/debug-event-bus.d.mts +1 -1
- package/dist/v2/runtime/core/debug-event-bus.mjs +22 -1
- package/dist/v2/runtime/core/debug-event-bus.mjs.map +1 -1
- package/dist/v2/runtime/core/runtime.cjs +10 -5
- package/dist/v2/runtime/core/runtime.cjs.map +1 -1
- package/dist/v2/runtime/core/runtime.d.cts +29 -3
- package/dist/v2/runtime/core/runtime.d.cts.map +1 -1
- package/dist/v2/runtime/core/runtime.d.mts +28 -2
- package/dist/v2/runtime/core/runtime.d.mts.map +1 -1
- package/dist/v2/runtime/core/runtime.mjs +11 -6
- package/dist/v2/runtime/core/runtime.mjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-connect.cjs +3 -2
- package/dist/v2/runtime/handlers/handle-connect.cjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-connect.mjs +3 -2
- package/dist/v2/runtime/handlers/handle-connect.mjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-debug-events.cjs +2 -1
- package/dist/v2/runtime/handlers/handle-debug-events.cjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-debug-events.mjs +3 -1
- package/dist/v2/runtime/handlers/handle-debug-events.mjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-run.cjs +5 -3
- package/dist/v2/runtime/handlers/handle-run.cjs.map +1 -1
- package/dist/v2/runtime/handlers/handle-run.mjs +5 -3
- package/dist/v2/runtime/handlers/handle-run.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/cloud-telemetry.cjs +31 -0
- package/dist/v2/runtime/handlers/shared/cloud-telemetry.cjs.map +1 -0
- package/dist/v2/runtime/handlers/shared/cloud-telemetry.mjs +30 -0
- package/dist/v2/runtime/handlers/shared/cloud-telemetry.mjs.map +1 -0
- 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 +35 -4
- package/dist/v2/runtime/handlers/shared/sse-response.cjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/sse-response.mjs +35 -4
- 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 +2 -0
- package/dist/v2/runtime/handlers/sse/run.cjs.map +1 -1
- package/dist/v2/runtime/handlers/sse/run.mjs +2 -0
- package/dist/v2/runtime/handlers/sse/run.mjs.map +1 -1
- package/dist/v2/runtime/index.d.cts +3 -3
- package/dist/v2/runtime/index.d.mts +3 -3
- 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/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/dist/v2/runtime/telemetry/events.d.cts +12 -0
- package/dist/v2/runtime/telemetry/events.d.cts.map +1 -1
- package/dist/v2/runtime/telemetry/events.d.mts +12 -0
- package/dist/v2/runtime/telemetry/events.d.mts.map +1 -1
- package/dist/v2/runtime/telemetry/telemetry-client.cjs +3 -2
- package/dist/v2/runtime/telemetry/telemetry-client.cjs.map +1 -1
- package/dist/v2/runtime/telemetry/telemetry-client.d.cts.map +1 -1
- package/dist/v2/runtime/telemetry/telemetry-client.d.mts.map +1 -1
- package/dist/v2/runtime/telemetry/telemetry-client.mjs +7 -6
- package/dist/v2/runtime/telemetry/telemetry-client.mjs.map +1 -1
- package/package.json +9 -3
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
|
|
2
|
+
import { CopilotKitIntelligence } from "../client.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/v2/runtime/intelligence-platform/skill-registry/config.d.ts
|
|
5
|
+
interface SkillRegistryOptions {
|
|
6
|
+
client?: CopilotKitIntelligence;
|
|
7
|
+
apiKey?: string;
|
|
8
|
+
apiUrl?: string;
|
|
9
|
+
containerId?: string;
|
|
10
|
+
revision?: string;
|
|
11
|
+
freshnessWindowMs?: number;
|
|
12
|
+
requestTimeoutMs?: number;
|
|
13
|
+
debug?: boolean;
|
|
14
|
+
}
|
|
15
|
+
interface RegistryConfig {
|
|
16
|
+
readonly client: CopilotKitIntelligence;
|
|
17
|
+
readonly containerId: string;
|
|
18
|
+
readonly revision?: string;
|
|
19
|
+
readonly freshnessWindowMs: number;
|
|
20
|
+
readonly requestTimeoutMs: number;
|
|
21
|
+
readonly debug: boolean;
|
|
22
|
+
}
|
|
23
|
+
/** Resolve once. Never retain the options object, environment, or a second key. */
|
|
24
|
+
declare function resolveRegistryConfig(options?: SkillRegistryOptions, environment?: NodeJS.ProcessEnv): RegistryConfig;
|
|
25
|
+
//#endregion
|
|
26
|
+
export { RegistryConfig, SkillRegistryOptions, resolveRegistryConfig };
|
|
27
|
+
//# sourceMappingURL=config.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.mts","names":[],"sources":["../../../../../src/v2/runtime/intelligence-platform/skill-registry/config.ts"],"mappings":";;;;UAGiB,oBAAA;EACf,MAAA,GAAS,sBAAA;EACT,MAAA;EACA,MAAA;EACA,WAAA;EACA,QAAA;EACA,iBAAA;EACA,gBAAA;EACA,KAAA;AAAA;AAAA,UAEe,cAAA;EAAA,SACN,MAAA,EAAQ,sBAAA;EAAA,SACR,WAAA;EAAA,SACA,QAAA;EAAA,SACA,iBAAA;EAAA,SACA,gBAAA;EAAA,SACA,KAAA;AAAA;;iBAIK,qBAAA,CACd,OAAA,GAAS,oBAAA,EACT,WAAA,GAAa,MAAA,CAAO,UAAA,GACnB,cAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import { LearnedSkillsError } from "../learned-skills.mjs";
|
|
3
|
+
import { CopilotKitIntelligence } from "../client.mjs";
|
|
4
|
+
|
|
5
|
+
//#region src/v2/runtime/intelligence-platform/skill-registry/config.ts
|
|
6
|
+
/** Resolve once. Never retain the options object, environment, or a second key. */
|
|
7
|
+
function resolveRegistryConfig(options = {}, environment = process.env) {
|
|
8
|
+
try {
|
|
9
|
+
const containerId = options.containerId ?? environment.CPK_INTELLIGENCE_LEARNING_CONTAINER_ID;
|
|
10
|
+
const revision = options.revision ?? environment.CPK_INTELLIGENCE_SKILLS_REVISION;
|
|
11
|
+
const freshnessWindowMs = options.freshnessWindowMs ?? 5e3;
|
|
12
|
+
const requestTimeoutMs = options.requestTimeoutMs ?? 5e3;
|
|
13
|
+
const debug = options.debug ?? false;
|
|
14
|
+
if (typeof containerId !== "string" || !containerId.trim() || revision !== void 0 && (typeof revision !== "string" || revision.length === 0) || !Number.isSafeInteger(freshnessWindowMs) || freshnessWindowMs < 0 || !Number.isSafeInteger(requestTimeoutMs) || requestTimeoutMs < 1 || requestTimeoutMs > 2147483647 || typeof debug !== "boolean") throw new LearnedSkillsError("INVALID_CONFIG", false);
|
|
15
|
+
let client = options.client;
|
|
16
|
+
if (client !== void 0) {
|
|
17
|
+
if (!client || typeof client.getLearnedSkillsSnapshot !== "function") throw new LearnedSkillsError("INVALID_CONFIG", false);
|
|
18
|
+
} else {
|
|
19
|
+
const apiKey = options.apiKey ?? environment.CPK_INTELLIGENCE_API_KEY;
|
|
20
|
+
const apiUrl = options.apiUrl ?? environment.INTELLIGENCE_API_URL;
|
|
21
|
+
if (typeof apiKey !== "string" || !apiKey.trim()) throw new LearnedSkillsError("INVALID_CONFIG", false);
|
|
22
|
+
if (apiUrl?.trim()) {
|
|
23
|
+
const url = new URL(apiUrl);
|
|
24
|
+
if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new LearnedSkillsError("INVALID_CONFIG", false);
|
|
25
|
+
}
|
|
26
|
+
client = new CopilotKitIntelligence({
|
|
27
|
+
apiKey,
|
|
28
|
+
...apiUrl !== void 0 ? { apiUrl } : {},
|
|
29
|
+
...apiUrl?.trim() ? { wsUrl: "wss://realtime.intelligence.copilotkit.ai" } : {}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return Object.freeze({
|
|
33
|
+
client,
|
|
34
|
+
containerId,
|
|
35
|
+
...revision !== void 0 ? { revision } : {},
|
|
36
|
+
freshnessWindowMs,
|
|
37
|
+
requestTimeoutMs,
|
|
38
|
+
debug
|
|
39
|
+
});
|
|
40
|
+
} catch (error) {
|
|
41
|
+
if (error instanceof LearnedSkillsError) throw error;
|
|
42
|
+
throw new LearnedSkillsError("INVALID_CONFIG", false, error);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
//#endregion
|
|
47
|
+
export { resolveRegistryConfig };
|
|
48
|
+
//# sourceMappingURL=config.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.mjs","names":["SkillDeliveryError"],"sources":["../../../../../src/v2/runtime/intelligence-platform/skill-registry/config.ts"],"sourcesContent":["import { CopilotKitIntelligence } from \"../client\";\nimport { SkillDeliveryError } from \"./errors\";\n\nexport interface SkillRegistryOptions {\n client?: CopilotKitIntelligence;\n apiKey?: string;\n apiUrl?: string;\n containerId?: string;\n revision?: string;\n freshnessWindowMs?: number;\n requestTimeoutMs?: number;\n debug?: boolean;\n}\nexport interface RegistryConfig {\n readonly client: CopilotKitIntelligence;\n readonly containerId: string;\n readonly revision?: string;\n readonly freshnessWindowMs: number;\n readonly requestTimeoutMs: number;\n readonly debug: boolean;\n}\n\n/** Resolve once. Never retain the options object, environment, or a second key. */\nexport function resolveRegistryConfig(\n options: SkillRegistryOptions = {},\n environment: NodeJS.ProcessEnv = process.env,\n): RegistryConfig {\n try {\n const containerId =\n options.containerId ?? environment.CPK_INTELLIGENCE_LEARNING_CONTAINER_ID;\n const revision =\n options.revision ?? environment.CPK_INTELLIGENCE_SKILLS_REVISION;\n const freshnessWindowMs = options.freshnessWindowMs ?? 5_000;\n const requestTimeoutMs = options.requestTimeoutMs ?? 5_000;\n const debug = options.debug ?? false;\n if (\n typeof containerId !== \"string\" ||\n !containerId.trim() ||\n (revision !== undefined &&\n (typeof revision !== \"string\" || revision.length === 0)) ||\n !Number.isSafeInteger(freshnessWindowMs) ||\n freshnessWindowMs < 0 ||\n !Number.isSafeInteger(requestTimeoutMs) ||\n requestTimeoutMs < 1 ||\n requestTimeoutMs > 2_147_483_647 ||\n typeof debug !== \"boolean\"\n )\n throw new SkillDeliveryError(\"INVALID_CONFIG\", false);\n let client = options.client;\n if (client !== undefined) {\n if (!client || typeof client.getLearnedSkillsSnapshot !== \"function\")\n throw new SkillDeliveryError(\"INVALID_CONFIG\", false);\n } else {\n const apiKey = options.apiKey ?? environment.CPK_INTELLIGENCE_API_KEY;\n const apiUrl = options.apiUrl ?? environment.INTELLIGENCE_API_URL;\n if (typeof apiKey !== \"string\" || !apiKey.trim())\n throw new SkillDeliveryError(\"INVALID_CONFIG\", false);\n if (apiUrl?.trim()) {\n const url = new URL(apiUrl);\n if (\n ![\"http:\", \"https:\"].includes(url.protocol) ||\n url.username ||\n url.password ||\n url.search ||\n url.hash\n )\n throw new SkillDeliveryError(\"INVALID_CONFIG\", false);\n }\n client = new CopilotKitIntelligence({\n apiKey,\n ...(apiUrl !== undefined ? { apiUrl } : {}),\n // This private helper client uses REST only. Explicitly retain the\n // canonical websocket default to prevent an irrelevant host warning.\n ...(apiUrl?.trim()\n ? { wsUrl: \"wss://realtime.intelligence.copilotkit.ai\" }\n : {}),\n });\n }\n return Object.freeze({\n client,\n containerId,\n ...(revision !== undefined ? { revision } : {}),\n freshnessWindowMs,\n requestTimeoutMs,\n debug,\n });\n } catch (error) {\n if (error instanceof SkillDeliveryError) throw error;\n throw new SkillDeliveryError(\"INVALID_CONFIG\", false, error);\n }\n}\n"],"mappings":";;;;;;AAuBA,SAAgB,sBACd,UAAgC,EAAE,EAClC,cAAiC,QAAQ,KACzB;AAChB,KAAI;EACF,MAAM,cACJ,QAAQ,eAAe,YAAY;EACrC,MAAM,WACJ,QAAQ,YAAY,YAAY;EAClC,MAAM,oBAAoB,QAAQ,qBAAqB;EACvD,MAAM,mBAAmB,QAAQ,oBAAoB;EACrD,MAAM,QAAQ,QAAQ,SAAS;AAC/B,MACE,OAAO,gBAAgB,YACvB,CAAC,YAAY,MAAM,IAClB,aAAa,WACX,OAAO,aAAa,YAAY,SAAS,WAAW,MACvD,CAAC,OAAO,cAAc,kBAAkB,IACxC,oBAAoB,KACpB,CAAC,OAAO,cAAc,iBAAiB,IACvC,mBAAmB,KACnB,mBAAmB,cACnB,OAAO,UAAU,UAEjB,OAAM,IAAIA,mBAAmB,kBAAkB,MAAM;EACvD,IAAI,SAAS,QAAQ;AACrB,MAAI,WAAW,QACb;OAAI,CAAC,UAAU,OAAO,OAAO,6BAA6B,WACxD,OAAM,IAAIA,mBAAmB,kBAAkB,MAAM;SAClD;GACL,MAAM,SAAS,QAAQ,UAAU,YAAY;GAC7C,MAAM,SAAS,QAAQ,UAAU,YAAY;AAC7C,OAAI,OAAO,WAAW,YAAY,CAAC,OAAO,MAAM,CAC9C,OAAM,IAAIA,mBAAmB,kBAAkB,MAAM;AACvD,OAAI,QAAQ,MAAM,EAAE;IAClB,MAAM,MAAM,IAAI,IAAI,OAAO;AAC3B,QACE,CAAC,CAAC,SAAS,SAAS,CAAC,SAAS,IAAI,SAAS,IAC3C,IAAI,YACJ,IAAI,YACJ,IAAI,UACJ,IAAI,KAEJ,OAAM,IAAIA,mBAAmB,kBAAkB,MAAM;;AAEzD,YAAS,IAAI,uBAAuB;IAClC;IACA,GAAI,WAAW,SAAY,EAAE,QAAQ,GAAG,EAAE;IAG1C,GAAI,QAAQ,MAAM,GACd,EAAE,OAAO,6CAA6C,GACtD,EAAE;IACP,CAAC;;AAEJ,SAAO,OAAO,OAAO;GACnB;GACA;GACA,GAAI,aAAa,SAAY,EAAE,UAAU,GAAG,EAAE;GAC9C;GACA;GACA;GACD,CAAC;UACK,OAAO;AACd,MAAI,iBAAiBA,mBAAoB,OAAM;AAC/C,QAAM,IAAIA,mBAAmB,kBAAkB,OAAO,MAAM"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require("reflect-metadata");
|
|
2
|
+
const require_learned_skills = require('../learned-skills.cjs');
|
|
3
|
+
|
|
4
|
+
//#region src/v2/runtime/intelligence-platform/skill-registry/errors.ts
|
|
5
|
+
function invalidSnapshot(cause) {
|
|
6
|
+
return new require_learned_skills.LearnedSkillsError("INVALID_SNAPSHOT", false, cause);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
//#endregion
|
|
10
|
+
exports.invalidSnapshot = invalidSnapshot;
|
|
11
|
+
//# sourceMappingURL=errors.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.cjs","names":["LearnedSkillsError"],"sources":["../../../../../src/v2/runtime/intelligence-platform/skill-registry/errors.ts"],"sourcesContent":["import { LearnedSkillsError } from \"../learned-skills\";\n\n// Reuse the canonical delivery error identity across transport and adapter code.\nexport { LearnedSkillsError as SkillDeliveryError } from \"../learned-skills\";\nexport type { LearnedSkillsErrorCode as SkillDeliveryErrorCode } from \"../learned-skills\";\n\nexport function invalidSnapshot(cause?: unknown): LearnedSkillsError {\n return new LearnedSkillsError(\"INVALID_SNAPSHOT\", false, cause);\n}\n"],"mappings":";;;;AAMA,SAAgB,gBAAgB,OAAqC;AACnE,QAAO,IAAIA,0CAAmB,oBAAoB,OAAO,MAAM"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
|
|
2
|
+
import { LearnedSkillsError, LearnedSkillsErrorCode } from "../learned-skills.cjs";
|
|
3
|
+
|
|
4
|
+
//#region src/v2/runtime/intelligence-platform/skill-registry/errors.d.ts
|
|
5
|
+
declare function invalidSnapshot(cause?: unknown): LearnedSkillsError;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { invalidSnapshot };
|
|
8
|
+
//# sourceMappingURL=errors.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.cts","names":[],"sources":["../../../../../src/v2/runtime/intelligence-platform/skill-registry/errors.ts"],"mappings":";;;;iBAMgB,eAAA,CAAgB,KAAA,aAAkB,kBAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
|
|
2
|
+
import { LearnedSkillsError, LearnedSkillsErrorCode } from "../learned-skills.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/v2/runtime/intelligence-platform/skill-registry/errors.d.ts
|
|
5
|
+
declare function invalidSnapshot(cause?: unknown): LearnedSkillsError;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { invalidSnapshot };
|
|
8
|
+
//# sourceMappingURL=errors.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.mts","names":[],"sources":["../../../../../src/v2/runtime/intelligence-platform/skill-registry/errors.ts"],"mappings":";;;;iBAMgB,eAAA,CAAgB,KAAA,aAAkB,kBAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import { LearnedSkillsError } from "../learned-skills.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/v2/runtime/intelligence-platform/skill-registry/errors.ts
|
|
5
|
+
function invalidSnapshot(cause) {
|
|
6
|
+
return new LearnedSkillsError("INVALID_SNAPSHOT", false, cause);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
//#endregion
|
|
10
|
+
export { invalidSnapshot };
|
|
11
|
+
//# sourceMappingURL=errors.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.mjs","names":[],"sources":["../../../../../src/v2/runtime/intelligence-platform/skill-registry/errors.ts"],"sourcesContent":["import { LearnedSkillsError } from \"../learned-skills\";\n\n// Reuse the canonical delivery error identity across transport and adapter code.\nexport { LearnedSkillsError as SkillDeliveryError } from \"../learned-skills\";\nexport type { LearnedSkillsErrorCode as SkillDeliveryErrorCode } from \"../learned-skills\";\n\nexport function invalidSnapshot(cause?: unknown): LearnedSkillsError {\n return new LearnedSkillsError(\"INVALID_SNAPSHOT\", false, cause);\n}\n"],"mappings":";;;;AAMA,SAAgB,gBAAgB,OAAqC;AACnE,QAAO,IAAI,mBAAmB,oBAAoB,OAAO,MAAM"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
|
|
2
|
+
import { MAX_ARCHIVE_ENTRIES, MAX_SNAPSHOT_BYTES, readArchive, safeRelativePath } from "./archive.cjs";
|
|
3
|
+
import { LearnedSkillsError, LearnedSkillsErrorCode } from "../learned-skills.cjs";
|
|
4
|
+
import { RegistryConfig, SkillRegistryOptions, resolveRegistryConfig } from "./config.cjs";
|
|
5
|
+
import { invalidSnapshot } from "./errors.cjs";
|
|
6
|
+
import { SnapshotFile, SnapshotSkill, VerifiedSnapshot, validateSnapshot } from "./snapshot.cjs";
|
|
7
|
+
import { SkillRegistry, SkillRegistryStatus } from "./registry.cjs";
|
|
8
|
+
import { formatSkillCatalog, loadSkill, readSkillFile } from "./skill-content.cjs";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
|
|
2
|
+
import { MAX_ARCHIVE_ENTRIES, MAX_SNAPSHOT_BYTES, readArchive, safeRelativePath } from "./archive.mjs";
|
|
3
|
+
import { LearnedSkillsError, LearnedSkillsErrorCode } from "../learned-skills.mjs";
|
|
4
|
+
import { RegistryConfig, SkillRegistryOptions, resolveRegistryConfig } from "./config.mjs";
|
|
5
|
+
import { invalidSnapshot } from "./errors.mjs";
|
|
6
|
+
import { SnapshotFile, SnapshotSkill, VerifiedSnapshot, validateSnapshot } from "./snapshot.mjs";
|
|
7
|
+
import { SkillRegistry, SkillRegistryStatus } from "./registry.mjs";
|
|
8
|
+
import { formatSkillCatalog, loadSkill, readSkillFile } from "./skill-content.mjs";
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
require("reflect-metadata");
|
|
2
|
+
const require_learned_skills = require('../learned-skills.cjs');
|
|
3
|
+
const require_errors = require('./errors.cjs');
|
|
4
|
+
const require_config = require('./config.cjs');
|
|
5
|
+
const require_snapshot = require('./snapshot.cjs');
|
|
6
|
+
|
|
7
|
+
//#region src/v2/runtime/intelligence-platform/skill-registry/registry.ts
|
|
8
|
+
function transient(error) {
|
|
9
|
+
return [
|
|
10
|
+
"NETWORK_ERROR",
|
|
11
|
+
"TIMEOUT",
|
|
12
|
+
"INVALID_SNAPSHOT",
|
|
13
|
+
"UNSUPPORTED_SERVER"
|
|
14
|
+
].includes(error.code);
|
|
15
|
+
}
|
|
16
|
+
function deliveryError(error) {
|
|
17
|
+
if (error instanceof require_learned_skills.LearnedSkillsError) return error;
|
|
18
|
+
return new require_learned_skills.LearnedSkillsError(error instanceof Error && error.name === "TimeoutError" ? "TIMEOUT" : "NETWORK_ERROR", true, error);
|
|
19
|
+
}
|
|
20
|
+
/** Internal registry shared by framework adapters; public API is framework-native. */
|
|
21
|
+
var SkillRegistry = class {
|
|
22
|
+
#config;
|
|
23
|
+
#snapshot;
|
|
24
|
+
#inFlight;
|
|
25
|
+
#lastCheckedAt;
|
|
26
|
+
#stale = false;
|
|
27
|
+
#lastError;
|
|
28
|
+
#blocked;
|
|
29
|
+
constructor(options = {}) {
|
|
30
|
+
this.#config = require_config.resolveRegistryConfig(options);
|
|
31
|
+
}
|
|
32
|
+
async initialize() {
|
|
33
|
+
await this.acquireSnapshot();
|
|
34
|
+
}
|
|
35
|
+
/** Capture exactly one immutable snapshot before model work begins. */
|
|
36
|
+
acquireSnapshot() {
|
|
37
|
+
if (this.#inFlight) return this.#inFlight;
|
|
38
|
+
if (this.#snapshot && !this.#blocked && this.#lastCheckedAt !== void 0 && Date.now() - this.#lastCheckedAt < this.#config.freshnessWindowMs) return Promise.resolve(this.#snapshot);
|
|
39
|
+
this.#inFlight = Promise.resolve().then(() => this.#refresh()).finally(() => {
|
|
40
|
+
this.#inFlight = void 0;
|
|
41
|
+
});
|
|
42
|
+
return this.#inFlight;
|
|
43
|
+
}
|
|
44
|
+
get status() {
|
|
45
|
+
const error = this.#lastError;
|
|
46
|
+
return Object.freeze({
|
|
47
|
+
initialized: this.#snapshot !== void 0,
|
|
48
|
+
...this.#snapshot ? { revision: this.#snapshot.revision } : {},
|
|
49
|
+
mode: this.#config.revision === void 0 ? "latest" : "pinned",
|
|
50
|
+
...this.#lastCheckedAt !== void 0 ? { lastCheckedAt: new Date(this.#lastCheckedAt).toISOString() } : {},
|
|
51
|
+
stale: this.#stale,
|
|
52
|
+
...error ? { lastError: Object.freeze({
|
|
53
|
+
code: error.code,
|
|
54
|
+
message: error.message,
|
|
55
|
+
retryable: error.retryable
|
|
56
|
+
}) } : {}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
async #refresh() {
|
|
60
|
+
const startedAt = Date.now();
|
|
61
|
+
const controller = new AbortController();
|
|
62
|
+
let timer;
|
|
63
|
+
const deadline = new Promise((_, reject) => {
|
|
64
|
+
timer = setTimeout(() => {
|
|
65
|
+
const error = new require_learned_skills.LearnedSkillsError("TIMEOUT", true);
|
|
66
|
+
controller.abort(error);
|
|
67
|
+
timer = setTimeout(() => reject(error), 0);
|
|
68
|
+
}, this.#config.requestTimeoutMs);
|
|
69
|
+
});
|
|
70
|
+
const replacement = async () => {
|
|
71
|
+
const response = await this.#config.client.getLearnedSkillsSnapshot({
|
|
72
|
+
containerId: this.#config.containerId,
|
|
73
|
+
...this.#config.revision !== void 0 ? { revision: this.#config.revision } : {},
|
|
74
|
+
...this.#snapshot ? { ifNoneMatch: this.#snapshot.etag } : {},
|
|
75
|
+
signal: controller.signal
|
|
76
|
+
});
|
|
77
|
+
controller.signal.throwIfAborted();
|
|
78
|
+
if (!response || typeof response !== "object") throw require_errors.invalidSnapshot();
|
|
79
|
+
if (response.status === "unchanged") {
|
|
80
|
+
if (!this.#snapshot || response.etag !== this.#snapshot.etag || response.revision !== this.#snapshot.revision) throw require_errors.invalidSnapshot();
|
|
81
|
+
return this.#snapshot;
|
|
82
|
+
}
|
|
83
|
+
if (this.#config.revision !== void 0 && response.revision !== this.#config.revision) throw require_errors.invalidSnapshot();
|
|
84
|
+
return require_snapshot.validateSnapshot(response, controller.signal);
|
|
85
|
+
};
|
|
86
|
+
try {
|
|
87
|
+
const snapshot = await Promise.race([replacement(), deadline]);
|
|
88
|
+
this.#snapshot = snapshot;
|
|
89
|
+
this.#lastCheckedAt = Date.now();
|
|
90
|
+
this.#stale = false;
|
|
91
|
+
this.#lastError = void 0;
|
|
92
|
+
this.#blocked = void 0;
|
|
93
|
+
this.#debug("refresh-success", startedAt);
|
|
94
|
+
return snapshot;
|
|
95
|
+
} catch (cause) {
|
|
96
|
+
const error = deliveryError(cause);
|
|
97
|
+
if (!transient(error)) {
|
|
98
|
+
this.#blocked = error;
|
|
99
|
+
this.#stale = false;
|
|
100
|
+
this.#lastError = error;
|
|
101
|
+
this.#debug("refresh-denied", startedAt, error.code);
|
|
102
|
+
throw error;
|
|
103
|
+
}
|
|
104
|
+
if (this.#blocked) {
|
|
105
|
+
this.#lastError = this.#blocked;
|
|
106
|
+
this.#debug("refresh-failed", startedAt, error.code);
|
|
107
|
+
throw this.#blocked;
|
|
108
|
+
}
|
|
109
|
+
this.#lastError = error;
|
|
110
|
+
this.#stale = this.#snapshot !== void 0;
|
|
111
|
+
this.#debug("refresh-failed", startedAt, error.code);
|
|
112
|
+
if (this.#snapshot) return this.#snapshot;
|
|
113
|
+
throw error;
|
|
114
|
+
} finally {
|
|
115
|
+
if (timer !== void 0) clearTimeout(timer);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
#debug(event, startedAt, errorCode) {
|
|
119
|
+
if (!this.#config.debug) return;
|
|
120
|
+
console.debug("CopilotKit learned skills", {
|
|
121
|
+
event,
|
|
122
|
+
containerId: this.#config.containerId,
|
|
123
|
+
revision: this.#snapshot?.revision,
|
|
124
|
+
durationMs: Date.now() - startedAt,
|
|
125
|
+
...errorCode ? { errorCode } : {}
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
//#endregion
|
|
131
|
+
exports.SkillRegistry = SkillRegistry;
|
|
132
|
+
//# sourceMappingURL=registry.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.cjs","names":["SkillDeliveryError","#config","resolveRegistryConfig","#inFlight","#snapshot","#blocked","#lastCheckedAt","#refresh","#lastError","#stale","invalidSnapshot","validateSnapshot","#debug"],"sources":["../../../../../src/v2/runtime/intelligence-platform/skill-registry/registry.ts"],"sourcesContent":["import { resolveRegistryConfig } from \"./config\";\nimport type { RegistryConfig, SkillRegistryOptions } from \"./config\";\nimport { SkillDeliveryError, invalidSnapshot } from \"./errors\";\nimport type { SkillDeliveryErrorCode } from \"./errors\";\nimport { validateSnapshot } from \"./snapshot\";\nimport type { VerifiedSnapshot } from \"./snapshot\";\n\nexport interface SkillRegistryStatus {\n readonly initialized: boolean;\n readonly revision?: string;\n readonly mode: \"latest\" | \"pinned\";\n /** ISO 8601 timestamp of the last successful 200 or matching 304 check. */\n readonly lastCheckedAt?: string;\n readonly stale: boolean;\n readonly lastError?: Readonly<{\n code: SkillDeliveryErrorCode;\n message: string;\n retryable: boolean;\n }>;\n}\n\nfunction transient(error: SkillDeliveryError): boolean {\n return [\n \"NETWORK_ERROR\",\n \"TIMEOUT\",\n \"INVALID_SNAPSHOT\",\n \"UNSUPPORTED_SERVER\",\n ].includes(error.code);\n}\nfunction deliveryError(error: unknown): SkillDeliveryError {\n if (error instanceof SkillDeliveryError) return error;\n return new SkillDeliveryError(\n error instanceof Error && error.name === \"TimeoutError\"\n ? \"TIMEOUT\"\n : \"NETWORK_ERROR\",\n true,\n error,\n );\n}\n\n/** Internal registry shared by framework adapters; public API is framework-native. */\nexport class SkillRegistry {\n readonly #config: RegistryConfig;\n #snapshot?: VerifiedSnapshot;\n #inFlight?: Promise<VerifiedSnapshot>;\n #lastCheckedAt?: number;\n #stale = false;\n #lastError?: SkillDeliveryError;\n #blocked?: SkillDeliveryError;\n\n constructor(options: SkillRegistryOptions = {}) {\n this.#config = resolveRegistryConfig(options);\n }\n\n async initialize(): Promise<void> {\n await this.acquireSnapshot();\n }\n\n /** Capture exactly one immutable snapshot before model work begins. */\n acquireSnapshot(): Promise<VerifiedSnapshot> {\n if (this.#inFlight) return this.#inFlight;\n if (\n this.#snapshot &&\n !this.#blocked &&\n this.#lastCheckedAt !== undefined &&\n Date.now() - this.#lastCheckedAt < this.#config.freshnessWindowMs\n ) {\n return Promise.resolve(this.#snapshot);\n }\n // Defer work one microtask so reentrant and concurrent callers observe the\n // same promise before an injected client can start its request.\n this.#inFlight = Promise.resolve()\n .then(() => this.#refresh())\n .finally(() => {\n this.#inFlight = undefined;\n });\n return this.#inFlight;\n }\n\n get status(): SkillRegistryStatus {\n const error = this.#lastError;\n return Object.freeze({\n initialized: this.#snapshot !== undefined,\n ...(this.#snapshot ? { revision: this.#snapshot.revision } : {}),\n mode: this.#config.revision === undefined ? \"latest\" : \"pinned\",\n ...(this.#lastCheckedAt !== undefined\n ? { lastCheckedAt: new Date(this.#lastCheckedAt).toISOString() }\n : {}),\n stale: this.#stale,\n ...(error\n ? {\n lastError: Object.freeze({\n code: error.code,\n message: error.message,\n retryable: error.retryable,\n }),\n }\n : {}),\n });\n }\n\n async #refresh(): Promise<VerifiedSnapshot> {\n const startedAt = Date.now();\n const controller = new AbortController();\n let timer: ReturnType<typeof setTimeout> | undefined;\n const deadline = new Promise<never>((_, reject) => {\n timer = setTimeout(() => {\n const error = new SkillDeliveryError(\"TIMEOUT\", true);\n controller.abort(error);\n // Give a canonical client that already received denial headers one\n // event-loop turn to report that denial before the watchdog wins.\n timer = setTimeout(() => reject(error), 0);\n }, this.#config.requestTimeoutMs);\n });\n const replacement = async (): Promise<VerifiedSnapshot> => {\n const response = await this.#config.client.getLearnedSkillsSnapshot({\n containerId: this.#config.containerId,\n ...(this.#config.revision !== undefined\n ? { revision: this.#config.revision }\n : {}),\n ...(this.#snapshot ? { ifNoneMatch: this.#snapshot.etag } : {}),\n signal: controller.signal,\n });\n controller.signal.throwIfAborted();\n if (!response || typeof response !== \"object\") throw invalidSnapshot();\n if (response.status === \"unchanged\") {\n if (\n !this.#snapshot ||\n response.etag !== this.#snapshot.etag ||\n response.revision !== this.#snapshot.revision\n )\n throw invalidSnapshot();\n return this.#snapshot;\n }\n if (\n this.#config.revision !== undefined &&\n response.revision !== this.#config.revision\n )\n throw invalidSnapshot();\n return validateSnapshot(response, controller.signal);\n };\n try {\n const snapshot = await Promise.race([replacement(), deadline]);\n // An abandoned parse never writes registry state: only the winning\n // complete replacement reaches this assignment.\n this.#snapshot = snapshot;\n this.#lastCheckedAt = Date.now();\n this.#stale = false;\n this.#lastError = undefined;\n this.#blocked = undefined;\n this.#debug(\"refresh-success\", startedAt);\n return snapshot;\n } catch (cause) {\n const error = deliveryError(cause);\n if (!transient(error)) {\n this.#blocked = error;\n this.#stale = false;\n this.#lastError = error;\n this.#debug(\"refresh-denied\", startedAt, error.code);\n throw error;\n }\n // A later unreachable server cannot undo an already confirmed denial.\n if (this.#blocked) {\n this.#lastError = this.#blocked;\n this.#debug(\"refresh-failed\", startedAt, error.code);\n throw this.#blocked;\n }\n this.#lastError = error;\n this.#stale = this.#snapshot !== undefined;\n this.#debug(\"refresh-failed\", startedAt, error.code);\n if (this.#snapshot) return this.#snapshot;\n throw error;\n } finally {\n if (timer !== undefined) clearTimeout(timer);\n }\n }\n\n #debug(\n event: string,\n startedAt: number,\n errorCode?: SkillDeliveryErrorCode,\n ): void {\n if (!this.#config.debug) return;\n console.debug(\"CopilotKit learned skills\", {\n event,\n containerId: this.#config.containerId,\n revision: this.#snapshot?.revision,\n durationMs: Date.now() - startedAt,\n ...(errorCode ? { errorCode } : {}),\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
|
|
2
|
+
import { LearnedSkillsErrorCode } from "../learned-skills.cjs";
|
|
3
|
+
import { SkillRegistryOptions } from "./config.cjs";
|
|
4
|
+
import { VerifiedSnapshot } from "./snapshot.cjs";
|
|
5
|
+
|
|
6
|
+
//#region src/v2/runtime/intelligence-platform/skill-registry/registry.d.ts
|
|
7
|
+
interface SkillRegistryStatus {
|
|
8
|
+
readonly initialized: boolean;
|
|
9
|
+
readonly revision?: string;
|
|
10
|
+
readonly mode: "latest" | "pinned";
|
|
11
|
+
/** ISO 8601 timestamp of the last successful 200 or matching 304 check. */
|
|
12
|
+
readonly lastCheckedAt?: string;
|
|
13
|
+
readonly stale: boolean;
|
|
14
|
+
readonly lastError?: Readonly<{
|
|
15
|
+
code: LearnedSkillsErrorCode;
|
|
16
|
+
message: string;
|
|
17
|
+
retryable: boolean;
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
/** Internal registry shared by framework adapters; public API is framework-native. */
|
|
21
|
+
declare class SkillRegistry {
|
|
22
|
+
#private;
|
|
23
|
+
constructor(options?: SkillRegistryOptions);
|
|
24
|
+
initialize(): Promise<void>;
|
|
25
|
+
/** Capture exactly one immutable snapshot before model work begins. */
|
|
26
|
+
acquireSnapshot(): Promise<VerifiedSnapshot>;
|
|
27
|
+
get status(): SkillRegistryStatus;
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
export { SkillRegistry, SkillRegistryStatus };
|
|
31
|
+
//# sourceMappingURL=registry.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.cts","names":[],"sources":["../../../../../src/v2/runtime/intelligence-platform/skill-registry/registry.ts"],"mappings":";;;;;;UAOiB,mBAAA;EAAA,SACN,WAAA;EAAA,SACA,QAAA;EAAA,SACA,IAAA;;WAEA,aAAA;EAAA,SACA,KAAA;EAAA,SACA,SAAA,GAAY,QAAA;IACnB,IAAA,EAAM,sBAAA;IACN,OAAA;IACA,SAAA;EAAA;AAAA;;cAwBS,aAAA;EAAA;cASC,OAAA,GAAS,oBAAA;EAIf,UAAA,CAAA,GAAc,OAAA;EArCT;EA0CX,eAAA,CAAA,GAAmB,OAAA,CAAQ,gBAAA;EAAA,IAoBvB,MAAA,CAAA,GAAU,mBAAA;AAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
|
|
2
|
+
import { LearnedSkillsErrorCode } from "../learned-skills.mjs";
|
|
3
|
+
import { SkillRegistryOptions } from "./config.mjs";
|
|
4
|
+
import { VerifiedSnapshot } from "./snapshot.mjs";
|
|
5
|
+
|
|
6
|
+
//#region src/v2/runtime/intelligence-platform/skill-registry/registry.d.ts
|
|
7
|
+
interface SkillRegistryStatus {
|
|
8
|
+
readonly initialized: boolean;
|
|
9
|
+
readonly revision?: string;
|
|
10
|
+
readonly mode: "latest" | "pinned";
|
|
11
|
+
/** ISO 8601 timestamp of the last successful 200 or matching 304 check. */
|
|
12
|
+
readonly lastCheckedAt?: string;
|
|
13
|
+
readonly stale: boolean;
|
|
14
|
+
readonly lastError?: Readonly<{
|
|
15
|
+
code: LearnedSkillsErrorCode;
|
|
16
|
+
message: string;
|
|
17
|
+
retryable: boolean;
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
/** Internal registry shared by framework adapters; public API is framework-native. */
|
|
21
|
+
declare class SkillRegistry {
|
|
22
|
+
#private;
|
|
23
|
+
constructor(options?: SkillRegistryOptions);
|
|
24
|
+
initialize(): Promise<void>;
|
|
25
|
+
/** Capture exactly one immutable snapshot before model work begins. */
|
|
26
|
+
acquireSnapshot(): Promise<VerifiedSnapshot>;
|
|
27
|
+
get status(): SkillRegistryStatus;
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
export { SkillRegistry, SkillRegistryStatus };
|
|
31
|
+
//# sourceMappingURL=registry.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.mts","names":[],"sources":["../../../../../src/v2/runtime/intelligence-platform/skill-registry/registry.ts"],"mappings":";;;;;;UAOiB,mBAAA;EAAA,SACN,WAAA;EAAA,SACA,QAAA;EAAA,SACA,IAAA;;WAEA,aAAA;EAAA,SACA,KAAA;EAAA,SACA,SAAA,GAAY,QAAA;IACnB,IAAA,EAAM,sBAAA;IACN,OAAA;IACA,SAAA;EAAA;AAAA;;cAwBS,aAAA;EAAA;cASC,OAAA,GAAS,oBAAA;EAIf,UAAA,CAAA,GAAc,OAAA;EArCT;EA0CX,eAAA,CAAA,GAAmB,OAAA,CAAQ,gBAAA;EAAA,IAoBvB,MAAA,CAAA,GAAU,mBAAA;AAAA"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import { LearnedSkillsError } from "../learned-skills.mjs";
|
|
3
|
+
import { invalidSnapshot } from "./errors.mjs";
|
|
4
|
+
import { resolveRegistryConfig } from "./config.mjs";
|
|
5
|
+
import { validateSnapshot } from "./snapshot.mjs";
|
|
6
|
+
|
|
7
|
+
//#region src/v2/runtime/intelligence-platform/skill-registry/registry.ts
|
|
8
|
+
function transient(error) {
|
|
9
|
+
return [
|
|
10
|
+
"NETWORK_ERROR",
|
|
11
|
+
"TIMEOUT",
|
|
12
|
+
"INVALID_SNAPSHOT",
|
|
13
|
+
"UNSUPPORTED_SERVER"
|
|
14
|
+
].includes(error.code);
|
|
15
|
+
}
|
|
16
|
+
function deliveryError(error) {
|
|
17
|
+
if (error instanceof LearnedSkillsError) return error;
|
|
18
|
+
return new LearnedSkillsError(error instanceof Error && error.name === "TimeoutError" ? "TIMEOUT" : "NETWORK_ERROR", true, error);
|
|
19
|
+
}
|
|
20
|
+
/** Internal registry shared by framework adapters; public API is framework-native. */
|
|
21
|
+
var SkillRegistry = class {
|
|
22
|
+
#config;
|
|
23
|
+
#snapshot;
|
|
24
|
+
#inFlight;
|
|
25
|
+
#lastCheckedAt;
|
|
26
|
+
#stale = false;
|
|
27
|
+
#lastError;
|
|
28
|
+
#blocked;
|
|
29
|
+
constructor(options = {}) {
|
|
30
|
+
this.#config = resolveRegistryConfig(options);
|
|
31
|
+
}
|
|
32
|
+
async initialize() {
|
|
33
|
+
await this.acquireSnapshot();
|
|
34
|
+
}
|
|
35
|
+
/** Capture exactly one immutable snapshot before model work begins. */
|
|
36
|
+
acquireSnapshot() {
|
|
37
|
+
if (this.#inFlight) return this.#inFlight;
|
|
38
|
+
if (this.#snapshot && !this.#blocked && this.#lastCheckedAt !== void 0 && Date.now() - this.#lastCheckedAt < this.#config.freshnessWindowMs) return Promise.resolve(this.#snapshot);
|
|
39
|
+
this.#inFlight = Promise.resolve().then(() => this.#refresh()).finally(() => {
|
|
40
|
+
this.#inFlight = void 0;
|
|
41
|
+
});
|
|
42
|
+
return this.#inFlight;
|
|
43
|
+
}
|
|
44
|
+
get status() {
|
|
45
|
+
const error = this.#lastError;
|
|
46
|
+
return Object.freeze({
|
|
47
|
+
initialized: this.#snapshot !== void 0,
|
|
48
|
+
...this.#snapshot ? { revision: this.#snapshot.revision } : {},
|
|
49
|
+
mode: this.#config.revision === void 0 ? "latest" : "pinned",
|
|
50
|
+
...this.#lastCheckedAt !== void 0 ? { lastCheckedAt: new Date(this.#lastCheckedAt).toISOString() } : {},
|
|
51
|
+
stale: this.#stale,
|
|
52
|
+
...error ? { lastError: Object.freeze({
|
|
53
|
+
code: error.code,
|
|
54
|
+
message: error.message,
|
|
55
|
+
retryable: error.retryable
|
|
56
|
+
}) } : {}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
async #refresh() {
|
|
60
|
+
const startedAt = Date.now();
|
|
61
|
+
const controller = new AbortController();
|
|
62
|
+
let timer;
|
|
63
|
+
const deadline = new Promise((_, reject) => {
|
|
64
|
+
timer = setTimeout(() => {
|
|
65
|
+
const error = new LearnedSkillsError("TIMEOUT", true);
|
|
66
|
+
controller.abort(error);
|
|
67
|
+
timer = setTimeout(() => reject(error), 0);
|
|
68
|
+
}, this.#config.requestTimeoutMs);
|
|
69
|
+
});
|
|
70
|
+
const replacement = async () => {
|
|
71
|
+
const response = await this.#config.client.getLearnedSkillsSnapshot({
|
|
72
|
+
containerId: this.#config.containerId,
|
|
73
|
+
...this.#config.revision !== void 0 ? { revision: this.#config.revision } : {},
|
|
74
|
+
...this.#snapshot ? { ifNoneMatch: this.#snapshot.etag } : {},
|
|
75
|
+
signal: controller.signal
|
|
76
|
+
});
|
|
77
|
+
controller.signal.throwIfAborted();
|
|
78
|
+
if (!response || typeof response !== "object") throw invalidSnapshot();
|
|
79
|
+
if (response.status === "unchanged") {
|
|
80
|
+
if (!this.#snapshot || response.etag !== this.#snapshot.etag || response.revision !== this.#snapshot.revision) throw invalidSnapshot();
|
|
81
|
+
return this.#snapshot;
|
|
82
|
+
}
|
|
83
|
+
if (this.#config.revision !== void 0 && response.revision !== this.#config.revision) throw invalidSnapshot();
|
|
84
|
+
return validateSnapshot(response, controller.signal);
|
|
85
|
+
};
|
|
86
|
+
try {
|
|
87
|
+
const snapshot = await Promise.race([replacement(), deadline]);
|
|
88
|
+
this.#snapshot = snapshot;
|
|
89
|
+
this.#lastCheckedAt = Date.now();
|
|
90
|
+
this.#stale = false;
|
|
91
|
+
this.#lastError = void 0;
|
|
92
|
+
this.#blocked = void 0;
|
|
93
|
+
this.#debug("refresh-success", startedAt);
|
|
94
|
+
return snapshot;
|
|
95
|
+
} catch (cause) {
|
|
96
|
+
const error = deliveryError(cause);
|
|
97
|
+
if (!transient(error)) {
|
|
98
|
+
this.#blocked = error;
|
|
99
|
+
this.#stale = false;
|
|
100
|
+
this.#lastError = error;
|
|
101
|
+
this.#debug("refresh-denied", startedAt, error.code);
|
|
102
|
+
throw error;
|
|
103
|
+
}
|
|
104
|
+
if (this.#blocked) {
|
|
105
|
+
this.#lastError = this.#blocked;
|
|
106
|
+
this.#debug("refresh-failed", startedAt, error.code);
|
|
107
|
+
throw this.#blocked;
|
|
108
|
+
}
|
|
109
|
+
this.#lastError = error;
|
|
110
|
+
this.#stale = this.#snapshot !== void 0;
|
|
111
|
+
this.#debug("refresh-failed", startedAt, error.code);
|
|
112
|
+
if (this.#snapshot) return this.#snapshot;
|
|
113
|
+
throw error;
|
|
114
|
+
} finally {
|
|
115
|
+
if (timer !== void 0) clearTimeout(timer);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
#debug(event, startedAt, errorCode) {
|
|
119
|
+
if (!this.#config.debug) return;
|
|
120
|
+
console.debug("CopilotKit learned skills", {
|
|
121
|
+
event,
|
|
122
|
+
containerId: this.#config.containerId,
|
|
123
|
+
revision: this.#snapshot?.revision,
|
|
124
|
+
durationMs: Date.now() - startedAt,
|
|
125
|
+
...errorCode ? { errorCode } : {}
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
//#endregion
|
|
131
|
+
export { SkillRegistry };
|
|
132
|
+
//# sourceMappingURL=registry.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.mjs","names":["SkillDeliveryError","#config","#inFlight","#snapshot","#blocked","#lastCheckedAt","#refresh","#lastError","#stale","#debug"],"sources":["../../../../../src/v2/runtime/intelligence-platform/skill-registry/registry.ts"],"sourcesContent":["import { resolveRegistryConfig } from \"./config\";\nimport type { RegistryConfig, SkillRegistryOptions } from \"./config\";\nimport { SkillDeliveryError, invalidSnapshot } from \"./errors\";\nimport type { SkillDeliveryErrorCode } from \"./errors\";\nimport { validateSnapshot } from \"./snapshot\";\nimport type { VerifiedSnapshot } from \"./snapshot\";\n\nexport interface SkillRegistryStatus {\n readonly initialized: boolean;\n readonly revision?: string;\n readonly mode: \"latest\" | \"pinned\";\n /** ISO 8601 timestamp of the last successful 200 or matching 304 check. */\n readonly lastCheckedAt?: string;\n readonly stale: boolean;\n readonly lastError?: Readonly<{\n code: SkillDeliveryErrorCode;\n message: string;\n retryable: boolean;\n }>;\n}\n\nfunction transient(error: SkillDeliveryError): boolean {\n return [\n \"NETWORK_ERROR\",\n \"TIMEOUT\",\n \"INVALID_SNAPSHOT\",\n \"UNSUPPORTED_SERVER\",\n ].includes(error.code);\n}\nfunction deliveryError(error: unknown): SkillDeliveryError {\n if (error instanceof SkillDeliveryError) return error;\n return new SkillDeliveryError(\n error instanceof Error && error.name === \"TimeoutError\"\n ? \"TIMEOUT\"\n : \"NETWORK_ERROR\",\n true,\n error,\n );\n}\n\n/** Internal registry shared by framework adapters; public API is framework-native. */\nexport class SkillRegistry {\n readonly #config: RegistryConfig;\n #snapshot?: VerifiedSnapshot;\n #inFlight?: Promise<VerifiedSnapshot>;\n #lastCheckedAt?: number;\n #stale = false;\n #lastError?: SkillDeliveryError;\n #blocked?: SkillDeliveryError;\n\n constructor(options: SkillRegistryOptions = {}) {\n this.#config = resolveRegistryConfig(options);\n }\n\n async initialize(): Promise<void> {\n await this.acquireSnapshot();\n }\n\n /** Capture exactly one immutable snapshot before model work begins. */\n acquireSnapshot(): Promise<VerifiedSnapshot> {\n if (this.#inFlight) return this.#inFlight;\n if (\n this.#snapshot &&\n !this.#blocked &&\n this.#lastCheckedAt !== undefined &&\n Date.now() - this.#lastCheckedAt < this.#config.freshnessWindowMs\n ) {\n return Promise.resolve(this.#snapshot);\n }\n // Defer work one microtask so reentrant and concurrent callers observe the\n // same promise before an injected client can start its request.\n this.#inFlight = Promise.resolve()\n .then(() => this.#refresh())\n .finally(() => {\n this.#inFlight = undefined;\n });\n return this.#inFlight;\n }\n\n get status(): SkillRegistryStatus {\n const error = this.#lastError;\n return Object.freeze({\n initialized: this.#snapshot !== undefined,\n ...(this.#snapshot ? { revision: this.#snapshot.revision } : {}),\n mode: this.#config.revision === undefined ? \"latest\" : \"pinned\",\n ...(this.#lastCheckedAt !== undefined\n ? { lastCheckedAt: new Date(this.#lastCheckedAt).toISOString() }\n : {}),\n stale: this.#stale,\n ...(error\n ? {\n lastError: Object.freeze({\n code: error.code,\n message: error.message,\n retryable: error.retryable,\n }),\n }\n : {}),\n });\n }\n\n async #refresh(): Promise<VerifiedSnapshot> {\n const startedAt = Date.now();\n const controller = new AbortController();\n let timer: ReturnType<typeof setTimeout> | undefined;\n const deadline = new Promise<never>((_, reject) => {\n timer = setTimeout(() => {\n const error = new SkillDeliveryError(\"TIMEOUT\", true);\n controller.abort(error);\n // Give a canonical client that already received denial headers one\n // event-loop turn to report that denial before the watchdog wins.\n timer = setTimeout(() => reject(error), 0);\n }, this.#config.requestTimeoutMs);\n });\n const replacement = async (): Promise<VerifiedSnapshot> => {\n const response = await this.#config.client.getLearnedSkillsSnapshot({\n containerId: this.#config.containerId,\n ...(this.#config.revision !== undefined\n ? { revision: this.#config.revision }\n : {}),\n ...(this.#snapshot ? { ifNoneMatch: this.#snapshot.etag } : {}),\n signal: controller.signal,\n });\n controller.signal.throwIfAborted();\n if (!response || typeof response !== \"object\") throw invalidSnapshot();\n if (response.status === \"unchanged\") {\n if (\n !this.#snapshot ||\n response.etag !== this.#snapshot.etag ||\n response.revision !== this.#snapshot.revision\n )\n throw invalidSnapshot();\n return this.#snapshot;\n }\n if (\n this.#config.revision !== undefined &&\n response.revision !== this.#config.revision\n )\n throw invalidSnapshot();\n return validateSnapshot(response, controller.signal);\n };\n try {\n const snapshot = await Promise.race([replacement(), deadline]);\n // An abandoned parse never writes registry state: only the winning\n // complete replacement reaches this assignment.\n this.#snapshot = snapshot;\n this.#lastCheckedAt = Date.now();\n this.#stale = false;\n this.#lastError = undefined;\n this.#blocked = undefined;\n this.#debug(\"refresh-success\", startedAt);\n return snapshot;\n } catch (cause) {\n const error = deliveryError(cause);\n if (!transient(error)) {\n this.#blocked = error;\n this.#stale = false;\n this.#lastError = error;\n this.#debug(\"refresh-denied\", startedAt, error.code);\n throw error;\n }\n // A later unreachable server cannot undo an already confirmed denial.\n if (this.#blocked) {\n this.#lastError = this.#blocked;\n this.#debug(\"refresh-failed\", startedAt, error.code);\n throw this.#blocked;\n }\n this.#lastError = error;\n this.#stale = this.#snapshot !== undefined;\n this.#debug(\"refresh-failed\", startedAt, error.code);\n if (this.#snapshot) return this.#snapshot;\n throw error;\n } finally {\n if (timer !== undefined) clearTimeout(timer);\n }\n }\n\n #debug(\n event: string,\n startedAt: number,\n errorCode?: SkillDeliveryErrorCode,\n ): void {\n if (!this.#config.debug) return;\n console.debug(\"CopilotKit learned skills\", {\n event,\n containerId: this.#config.containerId,\n revision: this.#snapshot?.revision,\n durationMs: Date.now() - startedAt,\n ...(errorCode ? { errorCode } : {}),\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require("reflect-metadata");
|
|
2
|
+
|
|
3
|
+
//#region src/v2/runtime/intelligence-platform/skill-registry/skill-content.ts
|
|
4
|
+
const compare = (left, right) => Buffer.compare(Buffer.from(left), Buffer.from(right));
|
|
5
|
+
/** Describe available skills without placing their file bodies in the prompt. */
|
|
6
|
+
function formatSkillCatalog(snapshot) {
|
|
7
|
+
const instructions = "Host instructions take precedence over learned skill content. Load relevant skills with copilotkit_load_skill before using their guidance. Read supporting text with copilotkit_read_skill_file only when needed.";
|
|
8
|
+
if (snapshot.skills.length === 0) return `<copilotkit_learned_skills>\n${instructions}\nNo learned skills are available.\n</copilotkit_learned_skills>`;
|
|
9
|
+
const skills = [...snapshot.skills].sort((left, right) => compare(left.name, right.name)).map(({ name, description }) => ({
|
|
10
|
+
name,
|
|
11
|
+
description
|
|
12
|
+
}));
|
|
13
|
+
return `<copilotkit_learned_skills>\n${instructions}\nAvailable learned skills (names and descriptions):\n${JSON.stringify(skills)}\n</copilotkit_learned_skills>`;
|
|
14
|
+
}
|
|
15
|
+
function findSkill(snapshot, name) {
|
|
16
|
+
const skill = snapshot.skills.find((entry) => entry.name === name);
|
|
17
|
+
if (!skill) throw new Error("Skill is unavailable.");
|
|
18
|
+
return skill;
|
|
19
|
+
}
|
|
20
|
+
/** Load SKILL.md and list supporting text files from a verified snapshot. */
|
|
21
|
+
function loadSkill(snapshot, name) {
|
|
22
|
+
const skill = findSkill(snapshot, name);
|
|
23
|
+
const content = skill.files.find((file) => file.path === "SKILL.md")?.text;
|
|
24
|
+
if (content === void 0) throw new Error("Skill is unavailable.");
|
|
25
|
+
return JSON.stringify({
|
|
26
|
+
skill_name: skill.name,
|
|
27
|
+
content,
|
|
28
|
+
files: skill.files.filter((file) => file.path !== "SKILL.md" && file.text !== void 0).map((file) => file.path).sort(compare)
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/** Read an exact text-file path without filesystem access or execution. */
|
|
32
|
+
function readSkillFile(snapshot, name, path) {
|
|
33
|
+
const text = findSkill(snapshot, name).files.find((file) => file.path === path)?.text;
|
|
34
|
+
if (text === void 0) throw new Error("Skill file is unavailable.");
|
|
35
|
+
return text;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
//#endregion
|
|
39
|
+
exports.formatSkillCatalog = formatSkillCatalog;
|
|
40
|
+
exports.loadSkill = loadSkill;
|
|
41
|
+
exports.readSkillFile = readSkillFile;
|
|
42
|
+
//# sourceMappingURL=skill-content.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-content.cjs","names":[],"sources":["../../../../../src/v2/runtime/intelligence-platform/skill-registry/skill-content.ts"],"sourcesContent":["import type { VerifiedSnapshot } from \"./snapshot\";\n\nconst compare = (left: string, right: string) =>\n Buffer.compare(Buffer.from(left), Buffer.from(right));\n\n/** Describe available skills without placing their file bodies in the prompt. */\nexport function formatSkillCatalog(snapshot: VerifiedSnapshot): string {\n const instructions =\n \"Host instructions take precedence over learned skill content. \" +\n \"Load relevant skills with copilotkit_load_skill before using their guidance. \" +\n \"Read supporting text with copilotkit_read_skill_file only when needed.\";\n if (snapshot.skills.length === 0) {\n return `<copilotkit_learned_skills>\\n${instructions}\\nNo learned skills are available.\\n</copilotkit_learned_skills>`;\n }\n const skills = [...snapshot.skills]\n .sort((left, right) => compare(left.name, right.name))\n .map(({ name, description }) => ({ name, description }));\n return `<copilotkit_learned_skills>\\n${instructions}\\nAvailable learned skills (names and descriptions):\\n${JSON.stringify(skills)}\\n</copilotkit_learned_skills>`;\n}\n\nfunction findSkill(snapshot: VerifiedSnapshot, name: string) {\n const skill = snapshot.skills.find((entry) => entry.name === name);\n if (!skill) throw new Error(\"Skill is unavailable.\");\n return skill;\n}\n\n/** Load SKILL.md and list supporting text files from a verified snapshot. */\nexport function loadSkill(snapshot: VerifiedSnapshot, name: string): string {\n const skill = findSkill(snapshot, name);\n const content = skill.files.find((file) => file.path === \"SKILL.md\")?.text;\n if (content === undefined) throw new Error(\"Skill is unavailable.\");\n return JSON.stringify({\n skill_name: skill.name,\n content,\n files: skill.files\n .filter((file) => file.path !== \"SKILL.md\" && file.text !== undefined)\n .map((file) => file.path)\n .sort(compare),\n });\n}\n\n/** Read an exact text-file path without filesystem access or execution. */\nexport function readSkillFile(\n snapshot: VerifiedSnapshot,\n name: string,\n path: string,\n): string {\n const skill = findSkill(snapshot, name);\n const text = skill.files.find((file) => file.path === path)?.text;\n if (text === undefined) throw new Error(\"Skill file is unavailable.\");\n return text;\n}\n"],"mappings":";;;AAEA,MAAM,WAAW,MAAc,UAC7B,OAAO,QAAQ,OAAO,KAAK,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;;AAGvD,SAAgB,mBAAmB,UAAoC;CACrE,MAAM,eACJ;AAGF,KAAI,SAAS,OAAO,WAAW,EAC7B,QAAO,gCAAgC,aAAa;CAEtD,MAAM,SAAS,CAAC,GAAG,SAAS,OAAO,CAChC,MAAM,MAAM,UAAU,QAAQ,KAAK,MAAM,MAAM,KAAK,CAAC,CACrD,KAAK,EAAE,MAAM,mBAAmB;EAAE;EAAM;EAAa,EAAE;AAC1D,QAAO,gCAAgC,aAAa,wDAAwD,KAAK,UAAU,OAAO,CAAC;;AAGrI,SAAS,UAAU,UAA4B,MAAc;CAC3D,MAAM,QAAQ,SAAS,OAAO,MAAM,UAAU,MAAM,SAAS,KAAK;AAClE,KAAI,CAAC,MAAO,OAAM,IAAI,MAAM,wBAAwB;AACpD,QAAO;;;AAIT,SAAgB,UAAU,UAA4B,MAAsB;CAC1E,MAAM,QAAQ,UAAU,UAAU,KAAK;CACvC,MAAM,UAAU,MAAM,MAAM,MAAM,SAAS,KAAK,SAAS,WAAW,EAAE;AACtE,KAAI,YAAY,OAAW,OAAM,IAAI,MAAM,wBAAwB;AACnE,QAAO,KAAK,UAAU;EACpB,YAAY,MAAM;EAClB;EACA,OAAO,MAAM,MACV,QAAQ,SAAS,KAAK,SAAS,cAAc,KAAK,SAAS,OAAU,CACrE,KAAK,SAAS,KAAK,KAAK,CACxB,KAAK,QAAQ;EACjB,CAAC;;;AAIJ,SAAgB,cACd,UACA,MACA,MACQ;CAER,MAAM,OADQ,UAAU,UAAU,KAAK,CACpB,MAAM,MAAM,SAAS,KAAK,SAAS,KAAK,EAAE;AAC7D,KAAI,SAAS,OAAW,OAAM,IAAI,MAAM,6BAA6B;AACrE,QAAO"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
|
|
2
|
+
import { VerifiedSnapshot } from "./snapshot.cjs";
|
|
3
|
+
|
|
4
|
+
//#region src/v2/runtime/intelligence-platform/skill-registry/skill-content.d.ts
|
|
5
|
+
/** Describe available skills without placing their file bodies in the prompt. */
|
|
6
|
+
declare function formatSkillCatalog(snapshot: VerifiedSnapshot): string;
|
|
7
|
+
/** Load SKILL.md and list supporting text files from a verified snapshot. */
|
|
8
|
+
declare function loadSkill(snapshot: VerifiedSnapshot, name: string): string;
|
|
9
|
+
/** Read an exact text-file path without filesystem access or execution. */
|
|
10
|
+
declare function readSkillFile(snapshot: VerifiedSnapshot, name: string, path: string): string;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { formatSkillCatalog, loadSkill, readSkillFile };
|
|
13
|
+
//# sourceMappingURL=skill-content.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-content.d.cts","names":[],"sources":["../../../../../src/v2/runtime/intelligence-platform/skill-registry/skill-content.ts"],"mappings":";;;;;iBAMgB,kBAAA,CAAmB,QAAA,EAAU,gBAAA;AAA7C;AAAA,iBAqBgB,SAAA,CAAU,QAAA,EAAU,gBAAA,EAAkB,IAAA;;iBAetC,aAAA,CACd,QAAA,EAAU,gBAAA,EACV,IAAA,UACA,IAAA"}
|