@herbertgao/pi-extensions 2026.9.10 → 2026.9.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/THIRD_PARTY_NOTICES.md +26 -0
- package/node_modules/@herbertgao/pi-bark/package.json +2 -2
- package/node_modules/@herbertgao/pi-cc-extensions/README.en.md +2 -2
- package/node_modules/@herbertgao/pi-cc-extensions/README.md +2 -2
- package/node_modules/@herbertgao/pi-cc-extensions/package.json +3 -2
- package/node_modules/@herbertgao/pi-subagents/CHANGELOG.md +6 -0
- package/node_modules/@herbertgao/pi-subagents/package.json +2 -2
- package/node_modules/@herbertgao/resume-from/package.json +1 -1
- package/node_modules/@herbertgao/sol-pi/README.md +3 -3
- package/node_modules/@herbertgao/sol-pi/THIRD_PARTY_NOTICES.md +4 -4
- package/node_modules/@herbertgao/sol-pi/agents-install.md +4 -4
- package/node_modules/@herbertgao/sol-pi/docs/compatibility.md +6 -6
- package/node_modules/@herbertgao/sol-pi/package.json +2 -2
- package/node_modules/@juicesharp/rpiv-ask-user-question/package.json +2 -2
- package/node_modules/@narumitw/pi-btw/dist/index.ts +39 -89
- package/node_modules/@narumitw/pi-btw/dist/index.ts.map +3 -3
- package/node_modules/@narumitw/pi-btw/package.json +4 -4
- package/node_modules/@narumitw/pi-btw/src/btw.ts +28 -87
- package/node_modules/@narumitw/pi-btw/src/main-tree-picker.ts +8 -0
- package/node_modules/@narumitw/pi-btw/src/side-thread.ts +40 -37
- package/node_modules/@narumitw/pi-caffeinate/README.md +21 -66
- package/node_modules/@narumitw/pi-caffeinate/dist/index.ts +10 -41
- package/node_modules/@narumitw/pi-caffeinate/dist/index.ts.map +2 -2
- package/node_modules/@narumitw/pi-caffeinate/package.json +50 -51
- package/node_modules/@narumitw/pi-caffeinate/src/caffeinate.ts +637 -663
- package/node_modules/@narumitw/pi-caffeinate/src/dbus-inhibit.ts +114 -120
- package/node_modules/@narumitw/pi-caffeinate/src/inhibitor-process.ts +29 -29
- package/node_modules/@narumitw/pi-caffeinate/src/inhibitors.ts +108 -126
- package/node_modules/@narumitw/pi-caffeinate/src/settings.ts +124 -128
- package/node_modules/pi-mcp-adapter/CHANGELOG.md +62 -0
- package/node_modules/pi-mcp-adapter/README.md +75 -7
- package/node_modules/pi-mcp-adapter/bearer-command-resolver.ts +193 -0
- package/node_modules/pi-mcp-adapter/cli.js +56 -5
- package/node_modules/pi-mcp-adapter/commands.ts +96 -5
- package/node_modules/pi-mcp-adapter/config.ts +73 -6
- package/node_modules/pi-mcp-adapter/direct-tool-surface.ts +22 -28
- package/node_modules/pi-mcp-adapter/direct-tools.ts +13 -5
- package/node_modules/pi-mcp-adapter/dist/abort.d.ts +2 -0
- package/node_modules/pi-mcp-adapter/dist/abort.js +36 -0
- package/node_modules/pi-mcp-adapter/dist/abort.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/bearer-command-resolver.d.ts +6 -0
- package/node_modules/pi-mcp-adapter/dist/bearer-command-resolver.js +194 -0
- package/node_modules/pi-mcp-adapter/dist/bearer-command-resolver.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/config.d.ts +5 -0
- package/node_modules/pi-mcp-adapter/dist/config.js +75 -6
- package/node_modules/pi-mcp-adapter/dist/config.js.map +1 -1
- package/node_modules/pi-mcp-adapter/dist/consent-manager.d.ts +18 -0
- package/node_modules/pi-mcp-adapter/dist/consent-manager.js +88 -0
- package/node_modules/pi-mcp-adapter/dist/consent-manager.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/elicitation-handler.d.ts +17 -0
- package/node_modules/pi-mcp-adapter/dist/elicitation-handler.js +316 -0
- package/node_modules/pi-mcp-adapter/dist/elicitation-handler.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/errors.d.ts +131 -0
- package/node_modules/pi-mcp-adapter/dist/errors.js +278 -0
- package/node_modules/pi-mcp-adapter/dist/errors.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/http-ca.d.ts +8 -0
- package/node_modules/pi-mcp-adapter/dist/http-ca.js +88 -0
- package/node_modules/pi-mcp-adapter/dist/http-ca.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/jev-client.d.ts +15 -0
- package/node_modules/pi-mcp-adapter/dist/jev-client.js +340 -0
- package/node_modules/pi-mcp-adapter/dist/jev-client.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/jev-contracts.d.ts +77 -0
- package/node_modules/pi-mcp-adapter/dist/jev-contracts.js +2 -0
- package/node_modules/pi-mcp-adapter/dist/jev-contracts.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/jev-key-store.d.ts +22 -0
- package/node_modules/pi-mcp-adapter/dist/jev-key-store.js +85 -0
- package/node_modules/pi-mcp-adapter/dist/jev-key-store.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/json-schema-validator.d.ts +2 -0
- package/node_modules/pi-mcp-adapter/dist/json-schema-validator.js +55 -0
- package/node_modules/pi-mcp-adapter/dist/json-schema-validator.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/lifecycle.d.ts +56 -0
- package/node_modules/pi-mcp-adapter/dist/lifecycle.js +410 -0
- package/node_modules/pi-mcp-adapter/dist/lifecycle.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/logger.d.ts +51 -0
- package/node_modules/pi-mcp-adapter/dist/logger.js +131 -0
- package/node_modules/pi-mcp-adapter/dist/logger.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-auth-fetch.d.ts +26 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-auth-fetch.js +103 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-auth-fetch.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-auth-flow.d.ts +118 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-auth-flow.js +1098 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-auth-flow.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-auth.d.ts +168 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-auth.js +1117 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-auth.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-bearer-store.js +7 -140
- package/node_modules/pi-mcp-adapter/dist/mcp-bearer-store.js.map +1 -1
- package/node_modules/pi-mcp-adapter/dist/mcp-callback-server.d.ts +53 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-callback-server.js +441 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-callback-server.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-oauth-provider.d.ts +148 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-oauth-provider.js +689 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-oauth-provider.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-probe.d.ts +6 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-probe.js +166 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-probe.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-tasks.d.ts +102 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-tasks.js +369 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-tasks.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-trace.d.ts +95 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-trace.js +242 -0
- package/node_modules/pi-mcp-adapter/dist/mcp-trace.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/metadata-cache.js +2 -11
- package/node_modules/pi-mcp-adapter/dist/metadata-cache.js.map +1 -1
- package/node_modules/pi-mcp-adapter/dist/npx-resolver.d.ts +6 -0
- package/node_modules/pi-mcp-adapter/dist/npx-resolver.js +505 -0
- package/node_modules/pi-mcp-adapter/dist/npx-resolver.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/request-headers-command.d.ts +10 -0
- package/node_modules/pi-mcp-adapter/dist/request-headers-command.js +312 -0
- package/node_modules/pi-mcp-adapter/dist/request-headers-command.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/runtime-owner.d.ts +13 -0
- package/node_modules/pi-mcp-adapter/dist/runtime-owner.js +97 -0
- package/node_modules/pi-mcp-adapter/dist/runtime-owner.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/sampling-handler.d.ts +17 -0
- package/node_modules/pi-mcp-adapter/dist/sampling-handler.js +203 -0
- package/node_modules/pi-mcp-adapter/dist/sampling-handler.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/secure-keyring.d.ts +11 -0
- package/node_modules/pi-mcp-adapter/dist/secure-keyring.js +172 -0
- package/node_modules/pi-mcp-adapter/dist/secure-keyring.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/server-manager.d.ts +157 -0
- package/node_modules/pi-mcp-adapter/dist/server-manager.js +1743 -0
- package/node_modules/pi-mcp-adapter/dist/server-manager.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/session-approvals.d.ts +34 -0
- package/node_modules/pi-mcp-adapter/dist/session-approvals.js +140 -0
- package/node_modules/pi-mcp-adapter/dist/session-approvals.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/session-recovery.d.ts +26 -0
- package/node_modules/pi-mcp-adapter/dist/session-recovery.js +142 -0
- package/node_modules/pi-mcp-adapter/dist/session-recovery.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/state.d.ts +73 -0
- package/node_modules/pi-mcp-adapter/dist/state.js +2 -0
- package/node_modules/pi-mcp-adapter/dist/state.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/types.d.ts +36 -0
- package/node_modules/pi-mcp-adapter/dist/types.js +18 -0
- package/node_modules/pi-mcp-adapter/dist/types.js.map +1 -1
- package/node_modules/pi-mcp-adapter/dist/ui-resource-handler.d.ts +17 -0
- package/node_modules/pi-mcp-adapter/dist/ui-resource-handler.js +219 -0
- package/node_modules/pi-mcp-adapter/dist/ui-resource-handler.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/unix-socket-transport.d.ts +15 -0
- package/node_modules/pi-mcp-adapter/dist/unix-socket-transport.js +85 -0
- package/node_modules/pi-mcp-adapter/dist/unix-socket-transport.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/utils.d.ts +1 -0
- package/node_modules/pi-mcp-adapter/dist/utils.js +13 -0
- package/node_modules/pi-mcp-adapter/dist/utils.js.map +1 -1
- package/node_modules/pi-mcp-adapter/elicitation-handler.ts +29 -19
- package/node_modules/pi-mcp-adapter/examples/jev-accessibility-loop.mjs +85 -0
- package/node_modules/pi-mcp-adapter/examples/jev-semantic-filter.mjs +34 -0
- package/node_modules/pi-mcp-adapter/index.ts +129 -6
- package/node_modules/pi-mcp-adapter/init.ts +6 -19
- package/node_modules/pi-mcp-adapter/jev-client.ts +273 -0
- package/node_modules/pi-mcp-adapter/jev-contracts.ts +53 -0
- package/node_modules/pi-mcp-adapter/jev-key-store.ts +79 -0
- package/node_modules/pi-mcp-adapter/lifecycle.ts +14 -3
- package/node_modules/pi-mcp-adapter/mcp-bearer-store.ts +7 -142
- package/node_modules/pi-mcp-adapter/mcp-code.ts +119 -11
- package/node_modules/pi-mcp-adapter/mcp-output-guard.ts +4 -0
- package/node_modules/pi-mcp-adapter/mcp-references.ts +5 -3
- package/node_modules/pi-mcp-adapter/mcp-script-worker.mjs +5 -0
- package/node_modules/pi-mcp-adapter/mcp-tasks.ts +467 -0
- package/node_modules/pi-mcp-adapter/metadata-cache.ts +2 -13
- package/node_modules/pi-mcp-adapter/namespace-tools.ts +1 -1
- package/node_modules/pi-mcp-adapter/package.json +17 -9
- package/node_modules/pi-mcp-adapter/proxy-modes.ts +319 -166
- package/node_modules/pi-mcp-adapter/request-headers-command.ts +6 -3
- package/node_modules/pi-mcp-adapter/search-ranking.ts +38 -7
- package/node_modules/pi-mcp-adapter/secure-keyring.ts +170 -0
- package/node_modules/pi-mcp-adapter/semantic-search.ts +186 -0
- package/node_modules/pi-mcp-adapter/server-manager.ts +293 -50
- package/node_modules/pi-mcp-adapter/session-approvals.ts +14 -0
- package/node_modules/pi-mcp-adapter/skills/mcp-scripting/SKILL.md +2 -0
- package/node_modules/pi-mcp-adapter/state.ts +3 -1
- package/node_modules/pi-mcp-adapter/tool-approval.ts +26 -4
- package/node_modules/pi-mcp-adapter/tool-metadata.ts +6 -14
- package/node_modules/pi-mcp-adapter/tool-registrar.ts +8 -6
- package/node_modules/pi-mcp-adapter/tool-result-renderer.ts +4 -1
- package/node_modules/pi-mcp-adapter/types.ts +53 -0
- package/node_modules/pi-mcp-adapter/ui-server.ts +17 -9
- package/node_modules/pi-mcp-adapter/utils.ts +16 -0
- package/node_modules/pi-multi-account/CHANGELOG.md +1209 -0
- package/node_modules/pi-multi-account/CONTRIBUTING.md +61 -0
- package/node_modules/pi-multi-account/LICENSE +21 -0
- package/node_modules/pi-multi-account/README.md +197 -0
- package/node_modules/pi-multi-account/SECURITY.md +27 -0
- package/node_modules/pi-multi-account/auth-file-transaction.ts +56 -0
- package/node_modules/pi-multi-account/child-usability.ts +233 -0
- package/node_modules/pi-multi-account/compaction-summary.ts +32 -0
- package/node_modules/pi-multi-account/completion-route-planner.ts +224 -0
- package/node_modules/pi-multi-account/context-guard.ts +420 -0
- package/node_modules/pi-multi-account/cursor/LICENSE +21 -0
- package/node_modules/pi-multi-account/cursor/NOTICE +2 -0
- package/node_modules/pi-multi-account/cursor/auth.ts +165 -0
- package/node_modules/pi-multi-account/cursor/bridge-handle.ts +155 -0
- package/node_modules/pi-multi-account/cursor/conversation-registry.ts +104 -0
- package/node_modules/pi-multi-account/cursor/cursor-models-raw.json +611 -0
- package/node_modules/pi-multi-account/cursor/cursor-shared.ts +192 -0
- package/node_modules/pi-multi-account/cursor/h2-bridge.mjs +175 -0
- package/node_modules/pi-multi-account/cursor/index.ts +572 -0
- package/node_modules/pi-multi-account/cursor/message-parsing.ts +323 -0
- package/node_modules/pi-multi-account/cursor/prompt-usage.ts +53 -0
- package/node_modules/pi-multi-account/cursor/proto/agent_pb.ts +15294 -0
- package/node_modules/pi-multi-account/cursor/proxy.ts +2510 -0
- package/node_modules/pi-multi-account/cursor/session-lifecycle.ts +40 -0
- package/node_modules/pi-multi-account/cursor/sse-keepalive.ts +24 -0
- package/node_modules/pi-multi-account/cursor/stream-lifecycle.ts +193 -0
- package/node_modules/pi-multi-account/cursor/upstream-watchdog.ts +88 -0
- package/node_modules/pi-multi-account/cursor-bridge.ts +240 -0
- package/node_modules/pi-multi-account/cursor-model-name.ts +12 -0
- package/node_modules/pi-multi-account/index.ts +11825 -0
- package/node_modules/pi-multi-account/model-catalog.ts +354 -0
- package/node_modules/pi-multi-account/package.json +101 -0
- package/node_modules/pi-multi-account/pi-contract.ts +281 -0
- package/node_modules/pi-multi-account/provider-payload-stream.ts +44 -0
- package/node_modules/pi-multi-account/provider-priority.ts +189 -0
- package/node_modules/pi-multi-account/slot-proxy-auth.ts +167 -0
- package/node_modules/pi-multi-account/slot-proxy.ts +344 -0
- package/node_modules/pi-multi-account/state-file-transaction.ts +67 -0
- package/node_modules/pi-multi-account/usage.ts +1099 -0
- package/node_modules/pi-typesafe/README.md +6 -2
- package/node_modules/pi-typesafe/dist/client.d.ts +11 -0
- package/node_modules/pi-typesafe/dist/client.js +45 -10
- package/node_modules/pi-typesafe/dist/index.d.ts +2 -2
- package/node_modules/pi-typesafe/dist/index.js +1 -1
- package/node_modules/pi-typesafe/package.json +2 -2
- package/node_modules/pi-web-access/CHANGELOG.md +36 -0
- package/node_modules/pi-web-access/README.md +75 -18
- package/node_modules/pi-web-access/anysearch.ts +4 -15
- package/node_modules/pi-web-access/bocha.ts +3 -22
- package/node_modules/pi-web-access/brave.ts +3 -21
- package/node_modules/pi-web-access/brightdata.ts +5 -32
- package/node_modules/pi-web-access/content-find.ts +168 -53
- package/node_modules/pi-web-access/curator-page.ts +4 -1
- package/node_modules/pi-web-access/curator-run.ts +2 -1
- package/node_modules/pi-web-access/curator-server.ts +1 -0
- package/node_modules/pi-web-access/dist/index.js +24620 -0
- package/node_modules/pi-web-access/domain-filter-normalization.ts +14 -0
- package/node_modules/pi-web-access/duckduckgo.ts +3 -21
- package/node_modules/pi-web-access/extract.ts +3 -1
- package/node_modules/pi-web-access/firecrawl.ts +5 -29
- package/node_modules/pi-web-access/gemini-search.ts +81 -32
- package/node_modules/pi-web-access/index.ts +149 -148
- package/node_modules/pi-web-access/jina-search.ts +4 -15
- package/node_modules/pi-web-access/kagi.ts +4 -13
- package/node_modules/pi-web-access/kimi-search.ts +5 -30
- package/node_modules/pi-web-access/mistral-search.ts +1 -15
- package/node_modules/pi-web-access/ollama.ts +2 -7
- package/node_modules/pi-web-access/openai-search.ts +174 -36
- package/node_modules/pi-web-access/opencode-session-headers.ts +24 -0
- package/node_modules/pi-web-access/package.json +10 -4
- package/node_modules/pi-web-access/page-query.ts +10 -2
- package/node_modules/pi-web-access/parallel.ts +1 -15
- package/node_modules/pi-web-access/pdf-extract.ts +3 -0
- package/node_modules/pi-web-access/querit.ts +5 -29
- package/node_modules/pi-web-access/search-answer-formatting.ts +11 -0
- package/node_modules/pi-web-access/search-result-count-normalization.ts +4 -0
- package/node_modules/pi-web-access/search1api.ts +5 -29
- package/node_modules/pi-web-access/searchinfinity.ts +5 -29
- package/node_modules/pi-web-access/searxng.ts +3 -21
- package/node_modules/pi-web-access/serpapi.ts +5 -28
- package/node_modules/pi-web-access/serpbase.ts +3 -22
- package/node_modules/pi-web-access/serpdive.ts +3 -21
- package/node_modules/pi-web-access/serper.ts +5 -28
- package/node_modules/pi-web-access/serply.ts +197 -0
- package/node_modules/pi-web-access/source-check.ts +11 -47
- package/node_modules/pi-web-access/summary-review.ts +7 -3
- package/node_modules/pi-web-access/tavily.ts +3 -21
- package/node_modules/pi-web-access/tinyfish.ts +5 -29
- package/node_modules/pi-web-access/utils.ts +9 -1
- package/node_modules/pi-web-access/valyu.ts +5 -28
- package/node_modules/pi-web-access/xai-search.ts +1 -15
- package/node_modules/pi-web-access/xcrawl.ts +5 -32
- package/package.json +23 -16
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import { TypeSafeClient } from "@typesafe-ai/sdk";
|
|
2
|
+
import { isServerDisabled } from "./types.js";
|
|
3
|
+
import { combineAbortSignals } from "./runtime-owner.js";
|
|
4
|
+
import { resolveJevCredential, TYPESAFE_API_ORIGIN } from "./jev-key-store.js";
|
|
5
|
+
export { TYPESAFE_API_ORIGIN };
|
|
6
|
+
const DEFAULTS = {
|
|
7
|
+
semanticSearch: false, scriptEvaluation: false, allowedServers: [], model: "jev-1.13.0",
|
|
8
|
+
requestTimeoutMs: 5_000, maxRetries: 0, maxStateBytes: 262_144,
|
|
9
|
+
maxQuestionsPerRequest: 64, maxEvaluationsPerScript: 8,
|
|
10
|
+
maxEvaluationBytesPerScript: 524_288, maxEvaluationTokensPerScript: 32_768, semanticCandidateLimit: 127,
|
|
11
|
+
semanticMinProbability: 0.2,
|
|
12
|
+
};
|
|
13
|
+
const DANGEROUS_KEYS = new Set(["__proto__", "constructor", "prototype"]);
|
|
14
|
+
const hosts = new WeakMap();
|
|
15
|
+
const credentials = new WeakMap();
|
|
16
|
+
function resolveCredential(state) {
|
|
17
|
+
const existing = credentials.get(state);
|
|
18
|
+
if (existing)
|
|
19
|
+
return existing;
|
|
20
|
+
const credential = resolveJevCredential();
|
|
21
|
+
if (credential.status === "present")
|
|
22
|
+
credentials.set(state, credential);
|
|
23
|
+
return credential;
|
|
24
|
+
}
|
|
25
|
+
export function areJevSourcesAllowed(state, settings, sources) {
|
|
26
|
+
for (const source of sources) {
|
|
27
|
+
const server = state.config.mcpServers[source];
|
|
28
|
+
if (!settings.allowedServers.includes(source) || !server || isServerDisabled(server))
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
function record(value, label) {
|
|
34
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
35
|
+
throw new Error(`${label} must be an object`);
|
|
36
|
+
const prototype = Object.getPrototypeOf(value);
|
|
37
|
+
if (prototype !== Object.prototype && prototype !== null)
|
|
38
|
+
throw new Error(`${label} must be a plain object`);
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
function boolean(value, fallback, label) {
|
|
42
|
+
if (value === undefined)
|
|
43
|
+
return fallback;
|
|
44
|
+
if (typeof value !== "boolean")
|
|
45
|
+
throw new Error(`${label} must be a boolean`);
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
function integer(value, fallback, min, max, label) {
|
|
49
|
+
if (value === undefined)
|
|
50
|
+
return fallback;
|
|
51
|
+
if (!Number.isInteger(value) || value < min || value > max)
|
|
52
|
+
throw new Error(`${label} must be an integer from ${min} to ${max}`);
|
|
53
|
+
return value;
|
|
54
|
+
}
|
|
55
|
+
export function validateJevSettings(value) {
|
|
56
|
+
if (value === undefined || value === false)
|
|
57
|
+
return { ...DEFAULTS, allowedServers: [...DEFAULTS.allowedServers] };
|
|
58
|
+
const input = record(value, "settings.jev");
|
|
59
|
+
const allowed = new Set(Object.keys(DEFAULTS));
|
|
60
|
+
for (const key of Object.keys(input))
|
|
61
|
+
if (!allowed.has(key))
|
|
62
|
+
throw new Error(`settings.jev.${key} is not supported`);
|
|
63
|
+
if (input.allowedServers !== undefined && (!Array.isArray(input.allowedServers) || input.allowedServers.some(name => typeof name !== "string" || name.length === 0 || DANGEROUS_KEYS.has(name) || /[\u0000-\u001f\u007f]/.test(name)))) {
|
|
64
|
+
throw new Error("settings.jev.allowedServers must contain non-empty safe server names");
|
|
65
|
+
}
|
|
66
|
+
const model = input.model ?? DEFAULTS.model;
|
|
67
|
+
if (typeof model !== "string" || model.length === 0 || model.length > 128 || /(?:latest|preview)/i.test(model))
|
|
68
|
+
throw new Error("settings.jev.model must be a pinned model name");
|
|
69
|
+
const probability = input.semanticMinProbability ?? DEFAULTS.semanticMinProbability;
|
|
70
|
+
if (typeof probability !== "number" || !Number.isFinite(probability) || probability < 0 || probability > 1)
|
|
71
|
+
throw new Error("settings.jev.semanticMinProbability must be from 0 to 1");
|
|
72
|
+
return {
|
|
73
|
+
semanticSearch: boolean(input.semanticSearch, DEFAULTS.semanticSearch, "settings.jev.semanticSearch"),
|
|
74
|
+
scriptEvaluation: boolean(input.scriptEvaluation, DEFAULTS.scriptEvaluation, "settings.jev.scriptEvaluation"),
|
|
75
|
+
allowedServers: [...new Set(input.allowedServers ?? DEFAULTS.allowedServers)], model,
|
|
76
|
+
requestTimeoutMs: integer(input.requestTimeoutMs, DEFAULTS.requestTimeoutMs, 100, 30_000, "settings.jev.requestTimeoutMs"),
|
|
77
|
+
maxRetries: integer(input.maxRetries, DEFAULTS.maxRetries, 0, 2, "settings.jev.maxRetries"),
|
|
78
|
+
maxStateBytes: integer(input.maxStateBytes, DEFAULTS.maxStateBytes, 1, 1_048_576, "settings.jev.maxStateBytes"),
|
|
79
|
+
maxQuestionsPerRequest: integer(input.maxQuestionsPerRequest, DEFAULTS.maxQuestionsPerRequest, 1, 128, "settings.jev.maxQuestionsPerRequest"),
|
|
80
|
+
maxEvaluationsPerScript: integer(input.maxEvaluationsPerScript, DEFAULTS.maxEvaluationsPerScript, 1, 32, "settings.jev.maxEvaluationsPerScript"),
|
|
81
|
+
maxEvaluationBytesPerScript: integer(input.maxEvaluationBytesPerScript, DEFAULTS.maxEvaluationBytesPerScript, 1, 4_194_304, "settings.jev.maxEvaluationBytesPerScript"),
|
|
82
|
+
maxEvaluationTokensPerScript: integer(input.maxEvaluationTokensPerScript, DEFAULTS.maxEvaluationTokensPerScript, 1, 1_000_000, "settings.jev.maxEvaluationTokensPerScript"),
|
|
83
|
+
semanticCandidateLimit: integer(input.semanticCandidateLimit, DEFAULTS.semanticCandidateLimit, 2, 127, "settings.jev.semanticCandidateLimit"),
|
|
84
|
+
semanticMinProbability: probability,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
export function resolveSemanticJevSettings(state, credentialResolver) {
|
|
88
|
+
const configured = state.config.settings?.jev;
|
|
89
|
+
const settings = validateJevSettings(configured);
|
|
90
|
+
if (configured === false || configured?.semanticSearch === false)
|
|
91
|
+
return settings;
|
|
92
|
+
const semanticSearch = settings.semanticSearch || (credentialResolver ? credentialResolver() : resolveCredential(state)).status === "present";
|
|
93
|
+
const hasExplicitAllowlist = configured !== undefined && Object.hasOwn(configured, "allowedServers");
|
|
94
|
+
const allowedServers = hasExplicitAllowlist
|
|
95
|
+
? settings.allowedServers
|
|
96
|
+
: Object.keys(state.config.mcpServers).filter((name) => !isServerDisabled(state.config.mcpServers[name]));
|
|
97
|
+
return { ...settings, semanticSearch, allowedServers };
|
|
98
|
+
}
|
|
99
|
+
function validateJson(value, path, seen = new Set()) {
|
|
100
|
+
if (value === null || typeof value === "string" || typeof value === "boolean")
|
|
101
|
+
return;
|
|
102
|
+
if (typeof value === "number") {
|
|
103
|
+
if (Number.isFinite(value))
|
|
104
|
+
return;
|
|
105
|
+
throw new Error(`${path} contains a non-finite number`);
|
|
106
|
+
}
|
|
107
|
+
if (typeof value !== "object")
|
|
108
|
+
throw new Error(`${path} is not JSON-compatible`);
|
|
109
|
+
if (seen.has(value))
|
|
110
|
+
throw new Error(`${path} contains a cycle`);
|
|
111
|
+
seen.add(value);
|
|
112
|
+
if (Array.isArray(value))
|
|
113
|
+
value.forEach((item, index) => validateJson(item, `${path}[${index}]`, seen));
|
|
114
|
+
else {
|
|
115
|
+
const prototype = Object.getPrototypeOf(value);
|
|
116
|
+
if (prototype !== Object.prototype && prototype !== null)
|
|
117
|
+
throw new Error(`${path} contains a non-plain object`);
|
|
118
|
+
for (const [key, item] of Object.entries(value)) {
|
|
119
|
+
if (DANGEROUS_KEYS.has(key))
|
|
120
|
+
throw new Error(`${path} contains an unsafe key`);
|
|
121
|
+
validateJson(item, `${path}.${key}`, seen);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
seen.delete(value);
|
|
125
|
+
}
|
|
126
|
+
function validateId(id, label) {
|
|
127
|
+
if (id.length === 0 || id.length > 128 || DANGEROUS_KEYS.has(id) || /[\u0000-\u001f\u007f]/.test(id))
|
|
128
|
+
throw new Error(`${label} contains an invalid identifier`);
|
|
129
|
+
}
|
|
130
|
+
function validateSource(source) {
|
|
131
|
+
if (source.length === 0 || DANGEROUS_KEYS.has(source) || /[\u0000-\u001f\u007f]/.test(source))
|
|
132
|
+
throw new Error("sources contains an invalid server name");
|
|
133
|
+
}
|
|
134
|
+
function exactKeys(value, allowed, label) {
|
|
135
|
+
if (Object.keys(value).some(key => !allowed.includes(key)))
|
|
136
|
+
throw new Error(`${label} contains unsupported fields`);
|
|
137
|
+
}
|
|
138
|
+
export function validateJevEvaluateInput(value, limits) {
|
|
139
|
+
const input = record(value, "Jev evaluation input");
|
|
140
|
+
exactKeys(input, ["state", "questions", "sources"], "Jev evaluation input");
|
|
141
|
+
if (!("state" in input))
|
|
142
|
+
throw new Error("Jev evaluation input requires state");
|
|
143
|
+
validateJson(input.state, "state");
|
|
144
|
+
const stateBytes = Buffer.byteLength(JSON.stringify(input.state));
|
|
145
|
+
if (stateBytes > limits.maxStateBytes)
|
|
146
|
+
throw new Error("Jev state exceeds maxStateBytes");
|
|
147
|
+
const questions = record(input.questions, "questions");
|
|
148
|
+
const entries = Object.entries(questions);
|
|
149
|
+
if (entries.length < 1 || entries.length > limits.maxQuestionsPerRequest)
|
|
150
|
+
throw new Error("Jev question count is outside the configured limit");
|
|
151
|
+
for (const [id, raw] of entries) {
|
|
152
|
+
validateId(id, "questions");
|
|
153
|
+
const question = record(raw, `question ${id}`);
|
|
154
|
+
if (question.type === "choice") {
|
|
155
|
+
exactKeys(question, ["type", "instructions", "criteria"], `question ${id}`);
|
|
156
|
+
const criteria = record(question.criteria, `question ${id} criteria`);
|
|
157
|
+
const labels = Object.keys(criteria);
|
|
158
|
+
if (labels.length < 2 || labels.length > 128)
|
|
159
|
+
throw new Error(`question ${id} choice criteria must have 2 to 128 labels`);
|
|
160
|
+
for (const label of labels) {
|
|
161
|
+
validateId(label, `question ${id} criteria`);
|
|
162
|
+
validateJson(criteria[label], `question ${id} criteria.${label}`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
else if (question.type === "score") {
|
|
166
|
+
exactKeys(question, ["type", "instructions", "criteria"], `question ${id}`);
|
|
167
|
+
if (!Array.isArray(question.criteria) || question.criteria.length < 2 || question.criteria.length > 16)
|
|
168
|
+
throw new Error(`question ${id} score criteria must have 2 to 16 entries`);
|
|
169
|
+
validateJson(question.criteria, `question ${id} criteria`);
|
|
170
|
+
}
|
|
171
|
+
else if (question.type === "noul") {
|
|
172
|
+
exactKeys(question, ["type", "instructions", "criteria"], `question ${id}`);
|
|
173
|
+
if (question.criteria !== undefined) {
|
|
174
|
+
const criteria = record(question.criteria, `question ${id} criteria`);
|
|
175
|
+
exactKeys(criteria, ["true", "false"], `question ${id} criteria`);
|
|
176
|
+
validateJson(criteria, `question ${id} criteria`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
else
|
|
180
|
+
throw new Error(`question ${id} has an invalid type`);
|
|
181
|
+
if (question.instructions !== undefined)
|
|
182
|
+
validateJson(question.instructions, `question ${id} instructions`);
|
|
183
|
+
}
|
|
184
|
+
let sources;
|
|
185
|
+
if (input.sources !== undefined) {
|
|
186
|
+
if (!Array.isArray(input.sources))
|
|
187
|
+
throw new Error("sources must be an array");
|
|
188
|
+
sources = input.sources.map((source, index) => { if (typeof source !== "string")
|
|
189
|
+
throw new Error(`sources[${index}] must be a string`); validateSource(source); return source; });
|
|
190
|
+
if (new Set(sources).size !== sources.length)
|
|
191
|
+
throw new Error("sources must not contain duplicates");
|
|
192
|
+
}
|
|
193
|
+
const normalized = { state: input.state, questions: questions, ...(sources ? { sources } : {}) };
|
|
194
|
+
if (Buffer.byteLength(JSON.stringify(normalized)) > limits.maxEvaluationBytesPerScript)
|
|
195
|
+
throw new Error("Jev request exceeds the configured byte limit");
|
|
196
|
+
return normalized;
|
|
197
|
+
}
|
|
198
|
+
function safeNumber(value, label, integerOnly = false) {
|
|
199
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value < 0 || (integerOnly && !Number.isInteger(value)))
|
|
200
|
+
throw new Error(`Invalid ${label}`);
|
|
201
|
+
return value;
|
|
202
|
+
}
|
|
203
|
+
function probability(value, label) {
|
|
204
|
+
const number = safeNumber(value, label);
|
|
205
|
+
if (number > 1)
|
|
206
|
+
throw new Error(`Invalid ${label}`);
|
|
207
|
+
return number;
|
|
208
|
+
}
|
|
209
|
+
function sameKeys(actual, expected) {
|
|
210
|
+
const keys = Object.keys(actual);
|
|
211
|
+
return keys.length === expected.length && expected.every(key => Object.hasOwn(actual, key));
|
|
212
|
+
}
|
|
213
|
+
function validateResponse(value, input) {
|
|
214
|
+
const response = record(value, "response");
|
|
215
|
+
exactKeys(response, ["model", "answers", "usage"], "response");
|
|
216
|
+
const answers = record(response.answers, "response answers");
|
|
217
|
+
const questionNames = Object.keys(input.questions);
|
|
218
|
+
if (!sameKeys(answers, questionNames))
|
|
219
|
+
throw new Error("Response answer keys do not match questions");
|
|
220
|
+
const validated = {};
|
|
221
|
+
for (const name of questionNames) {
|
|
222
|
+
const question = input.questions[name];
|
|
223
|
+
const answer = record(answers[name], `answer ${name}`);
|
|
224
|
+
if (answer.type !== question.type)
|
|
225
|
+
throw new Error(`Answer ${name} type does not match`);
|
|
226
|
+
if (question.type === "choice") {
|
|
227
|
+
exactKeys(answer, ["type", "choice", "confidence", "probabilities"], `answer ${name}`);
|
|
228
|
+
const labels = Object.keys(question.criteria);
|
|
229
|
+
if (typeof answer.choice !== "string" || !Object.hasOwn(question.criteria, answer.choice))
|
|
230
|
+
throw new Error(`Answer ${name} choice is invalid`);
|
|
231
|
+
const probabilities = record(answer.probabilities, `answer ${name} probabilities`);
|
|
232
|
+
if (!sameKeys(probabilities, labels))
|
|
233
|
+
throw new Error(`Answer ${name} probability keys are invalid`);
|
|
234
|
+
validated[name] = { type: "choice", choice: answer.choice, confidence: probability(answer.confidence, "confidence"), probabilities: Object.fromEntries(labels.map(label => [label, probability(probabilities[label], "probability")])) };
|
|
235
|
+
}
|
|
236
|
+
else if (question.type === "score") {
|
|
237
|
+
exactKeys(answer, ["type", "score", "confidence", "probabilities", "legend"], `answer ${name}`);
|
|
238
|
+
const labels = question.criteria.map((_, index) => String(index));
|
|
239
|
+
const probabilities = record(answer.probabilities, `answer ${name} probabilities`);
|
|
240
|
+
if (!sameKeys(probabilities, labels))
|
|
241
|
+
throw new Error(`Answer ${name} probability keys are invalid`);
|
|
242
|
+
const score = safeNumber(answer.score, "score");
|
|
243
|
+
if (score > question.criteria.length - 1)
|
|
244
|
+
throw new Error(`Answer ${name} score is invalid`);
|
|
245
|
+
validated[name] = { type: "score", score, confidence: probability(answer.confidence, "confidence"), probabilities: Object.fromEntries(labels.map(label => [label, probability(probabilities[label], "probability")])) };
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
exactKeys(answer, ["type", "noul"], `answer ${name}`);
|
|
249
|
+
validated[name] = { type: "noul", noul: probability(answer.noul, "noul") };
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
if (typeof response.model !== "string" || response.model.length === 0 || response.model.length > 128)
|
|
253
|
+
throw new Error("Invalid response model");
|
|
254
|
+
const usage = record(response.usage, "response usage");
|
|
255
|
+
if (!sameKeys(usage, ["input_tokens", "output_tokens"]))
|
|
256
|
+
throw new Error("Invalid response usage");
|
|
257
|
+
return { answers: validated, model: response.model, usage: { inputTokens: safeNumber(usage.input_tokens, "input tokens", true), outputTokens: safeNumber(usage.output_tokens, "output tokens", true) } };
|
|
258
|
+
}
|
|
259
|
+
function fixedOriginFetch(input, init) {
|
|
260
|
+
const url = new URL(input);
|
|
261
|
+
if (url.origin !== TYPESAFE_API_ORIGIN)
|
|
262
|
+
throw new Error("TypeSafe request origin rejected");
|
|
263
|
+
return fetch(input, { ...init, redirect: "error" });
|
|
264
|
+
}
|
|
265
|
+
function getHost(state, settings) {
|
|
266
|
+
const existing = hosts.get(state);
|
|
267
|
+
if (existing)
|
|
268
|
+
return existing;
|
|
269
|
+
const credential = resolveCredential(state);
|
|
270
|
+
if (credential.status === "missing")
|
|
271
|
+
return { ok: false, error: { code: "credential_missing", message: "TypeSafe API key is not configured." } };
|
|
272
|
+
if (credential.status === "unavailable")
|
|
273
|
+
return { ok: false, error: { code: "credential_unavailable", message: credential.message } };
|
|
274
|
+
const host = { client: new TypeSafeClient({ apiKey: credential.apiKey, baseURL: TYPESAFE_API_ORIGIN, defaultModel: settings.model, logLevel: "off", retry: { maxRetries: settings.maxRetries }, timeout: settings.requestTimeoutMs, defaultHeaders: {}, fetch: fixedOriginFetch }) };
|
|
275
|
+
hosts.set(state, host);
|
|
276
|
+
return host;
|
|
277
|
+
}
|
|
278
|
+
function failure(error, signal, timedOut) {
|
|
279
|
+
if (timedOut)
|
|
280
|
+
return { ok: false, error: { code: "timeout", message: "TypeSafe evaluation timed out.", retryable: true } };
|
|
281
|
+
if (signal?.aborted || (error instanceof Error && error.name === "APIUserAbortError"))
|
|
282
|
+
return { ok: false, error: { code: "aborted", message: "TypeSafe evaluation was aborted." } };
|
|
283
|
+
const status = typeof error === "object" && error !== null && "status" in error ? error.status : undefined;
|
|
284
|
+
if (status === 401 || status === 403)
|
|
285
|
+
return { ok: false, error: { code: "authentication_failed", message: "TypeSafe authentication failed." } };
|
|
286
|
+
if (status === 408)
|
|
287
|
+
return { ok: false, error: { code: "timeout", message: "TypeSafe evaluation timed out.", retryable: true } };
|
|
288
|
+
if (status === 429)
|
|
289
|
+
return { ok: false, error: { code: "rate_limited", message: "TypeSafe rate limit exceeded.", retryable: true } };
|
|
290
|
+
if (typeof status === "number" && status >= 500)
|
|
291
|
+
return { ok: false, error: { code: "service_unavailable", message: "TypeSafe service is unavailable.", retryable: true } };
|
|
292
|
+
if (status === 400 || status === 422)
|
|
293
|
+
return { ok: false, error: { code: "invalid_request", message: "TypeSafe rejected the evaluation request." } };
|
|
294
|
+
if (error instanceof Error && (error.name === "APIConnectionError" || error.name === "APITimeoutError"))
|
|
295
|
+
return { ok: false, error: { code: "service_unavailable", message: "TypeSafe service is unavailable.", retryable: true } };
|
|
296
|
+
return { ok: false, error: { code: "invalid_response", message: "TypeSafe returned an invalid response." } };
|
|
297
|
+
}
|
|
298
|
+
export async function evaluateJev(state, value, options) {
|
|
299
|
+
let settings;
|
|
300
|
+
let input;
|
|
301
|
+
try {
|
|
302
|
+
settings = options.purpose === "semantic-search" ? resolveSemanticJevSettings(state) : validateJevSettings(state.config.settings?.jev);
|
|
303
|
+
input = validateJevEvaluateInput(value, settings);
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
return { ok: false, error: { code: "invalid_request", message: "Invalid TypeSafe evaluation request or settings." } };
|
|
307
|
+
}
|
|
308
|
+
if ((options.purpose === "script" && !settings.scriptEvaluation) || (options.purpose === "semantic-search" && !settings.semanticSearch))
|
|
309
|
+
return { ok: false, error: { code: "disabled", message: "TypeSafe evaluation is disabled." } };
|
|
310
|
+
const sources = new Set([...(input.sources ?? []), ...(options.observedSources ?? [])]);
|
|
311
|
+
if (!areJevSourcesAllowed(state, settings, sources))
|
|
312
|
+
return { ok: false, error: { code: "data_policy_denied", message: "Evaluation sources are not allowed by policy." } };
|
|
313
|
+
const bytes = Buffer.byteLength(JSON.stringify(input));
|
|
314
|
+
if (options.budget && !options.budget.consume(bytes))
|
|
315
|
+
return { ok: false, error: { code: "budget_exhausted", message: "TypeSafe evaluation budget exhausted." } };
|
|
316
|
+
const resolved = getHost(state, settings);
|
|
317
|
+
if (!("client" in resolved))
|
|
318
|
+
return resolved;
|
|
319
|
+
const deadline = new AbortController();
|
|
320
|
+
let timedOut = false;
|
|
321
|
+
const timer = setTimeout(() => { timedOut = true; deadline.abort(new Error("TypeSafe evaluation deadline exceeded")); }, settings.requestTimeoutMs);
|
|
322
|
+
const signal = combineAbortSignals(options.signal, state.owner.signal, deadline.signal);
|
|
323
|
+
try {
|
|
324
|
+
const request = { state: input.state, questions: input.questions, model: settings.model };
|
|
325
|
+
const raw = await resolved.client.systemOne(request, { ...(signal ? { signal } : {}), timeout: settings.requestTimeoutMs, retry: { maxRetries: settings.maxRetries } });
|
|
326
|
+
try {
|
|
327
|
+
return { ok: true, data: validateResponse(raw, input) };
|
|
328
|
+
}
|
|
329
|
+
catch {
|
|
330
|
+
return { ok: false, error: { code: "invalid_response", message: "TypeSafe returned an invalid response." } };
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
catch (error) {
|
|
334
|
+
return failure(error, signal, timedOut);
|
|
335
|
+
}
|
|
336
|
+
finally {
|
|
337
|
+
clearTimeout(timer);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
//# sourceMappingURL=jev-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jev-client.js","sourceRoot":"","sources":["../jev-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
export type JevJson = null | boolean | number | string | JevJson[] | {
|
|
2
|
+
[key: string]: JevJson;
|
|
3
|
+
};
|
|
4
|
+
export type JevQuestion = {
|
|
5
|
+
type: "choice";
|
|
6
|
+
instructions?: JevJson;
|
|
7
|
+
criteria: Record<string, JevJson>;
|
|
8
|
+
} | {
|
|
9
|
+
type: "score";
|
|
10
|
+
instructions?: JevJson;
|
|
11
|
+
criteria: [JevJson, JevJson, ...JevJson[]];
|
|
12
|
+
} | {
|
|
13
|
+
type: "noul";
|
|
14
|
+
instructions?: JevJson;
|
|
15
|
+
criteria?: {
|
|
16
|
+
true?: JevJson;
|
|
17
|
+
false?: JevJson;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export interface JevEvaluateInput {
|
|
21
|
+
state: JevJson;
|
|
22
|
+
questions: Record<string, JevQuestion>;
|
|
23
|
+
/** MCP servers whose metadata/results were copied into state. Empty/omitted means no MCP-derived data. */
|
|
24
|
+
sources?: string[];
|
|
25
|
+
}
|
|
26
|
+
export type JevAnswer = {
|
|
27
|
+
type: "choice";
|
|
28
|
+
choice: string;
|
|
29
|
+
confidence: number;
|
|
30
|
+
probabilities: Record<string, number>;
|
|
31
|
+
} | {
|
|
32
|
+
type: "score";
|
|
33
|
+
score: number;
|
|
34
|
+
confidence: number;
|
|
35
|
+
probabilities: Record<string, number>;
|
|
36
|
+
} | {
|
|
37
|
+
type: "noul";
|
|
38
|
+
noul: number;
|
|
39
|
+
};
|
|
40
|
+
export interface JevEvaluationData {
|
|
41
|
+
answers: Record<string, JevAnswer>;
|
|
42
|
+
model: string;
|
|
43
|
+
usage: {
|
|
44
|
+
inputTokens: number;
|
|
45
|
+
outputTokens: number;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export type JevErrorCode = "disabled" | "invalid_request" | "data_policy_denied" | "budget_exhausted" | "credential_missing" | "credential_unavailable" | "authentication_failed" | "timeout" | "aborted" | "rate_limited" | "service_unavailable" | "invalid_response";
|
|
49
|
+
export type JevEvaluationEnvelope = {
|
|
50
|
+
ok: true;
|
|
51
|
+
data: JevEvaluationData;
|
|
52
|
+
} | {
|
|
53
|
+
ok: false;
|
|
54
|
+
error: {
|
|
55
|
+
code: JevErrorCode;
|
|
56
|
+
message: string;
|
|
57
|
+
retryable?: boolean;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
export interface ResolvedJevSettings {
|
|
61
|
+
semanticSearch: boolean;
|
|
62
|
+
scriptEvaluation: boolean;
|
|
63
|
+
allowedServers: string[];
|
|
64
|
+
model: string;
|
|
65
|
+
requestTimeoutMs: number;
|
|
66
|
+
maxRetries: number;
|
|
67
|
+
maxStateBytes: number;
|
|
68
|
+
maxQuestionsPerRequest: number;
|
|
69
|
+
maxEvaluationsPerScript: number;
|
|
70
|
+
maxEvaluationBytesPerScript: number;
|
|
71
|
+
maxEvaluationTokensPerScript: number;
|
|
72
|
+
semanticCandidateLimit: number;
|
|
73
|
+
semanticMinProbability: number;
|
|
74
|
+
}
|
|
75
|
+
export interface JevBudget {
|
|
76
|
+
consume(bytes: number): boolean;
|
|
77
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jev-contracts.js","sourceRoot":"","sources":["../jev-contracts.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type SecureKeyringStore } from "./secure-keyring.ts";
|
|
2
|
+
export declare const TYPESAFE_API_ORIGIN = "https://api.typesafe.ai";
|
|
3
|
+
export declare const JEV_KEYRING_SERVICE = "pi-mcp-adapter.service-key";
|
|
4
|
+
export declare const JEV_KEYRING_ACCOUNT = "typesafe@sha256(https://api.typesafe.ai)";
|
|
5
|
+
export declare class JevCredentialStoreError extends Error {
|
|
6
|
+
readonly operation: "read" | "write" | "remove";
|
|
7
|
+
readonly code = "JEV_CREDENTIAL_STORE_UNAVAILABLE";
|
|
8
|
+
constructor(operation: "read" | "write" | "remove", cause: unknown);
|
|
9
|
+
}
|
|
10
|
+
export type JevCredentialResolution = {
|
|
11
|
+
status: "present";
|
|
12
|
+
source: "environment" | "keyring";
|
|
13
|
+
apiKey: string;
|
|
14
|
+
} | {
|
|
15
|
+
status: "missing";
|
|
16
|
+
} | {
|
|
17
|
+
status: "unavailable";
|
|
18
|
+
message: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function resolveJevCredential(env?: NodeJS.ProcessEnv, secretStore?: SecureKeyringStore): JevCredentialResolution;
|
|
21
|
+
export declare function saveJevApiKey(apiKey: string, secretStore?: SecureKeyringStore): void;
|
|
22
|
+
export declare function removeJevApiKey(secretStore?: SecureKeyringStore): void;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { createSecureKeyringStore } from "./secure-keyring.js";
|
|
2
|
+
export const TYPESAFE_API_ORIGIN = "https://api.typesafe.ai";
|
|
3
|
+
export const JEV_KEYRING_SERVICE = "pi-mcp-adapter.service-key";
|
|
4
|
+
export const JEV_KEYRING_ACCOUNT = "typesafe@sha256(https://api.typesafe.ai)";
|
|
5
|
+
export class JevCredentialStoreError extends Error {
|
|
6
|
+
operation;
|
|
7
|
+
code = "JEV_CREDENTIAL_STORE_UNAVAILABLE";
|
|
8
|
+
constructor(operation, cause) {
|
|
9
|
+
super(`TypeSafe API key secure credential store unavailable during ${operation}. Configure or unlock the OS credential store and retry.`, { cause });
|
|
10
|
+
this.operation = operation;
|
|
11
|
+
this.name = "JevCredentialStoreError";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function validateApiKey(value) {
|
|
15
|
+
if (typeof value !== "string" || value.trim().length === 0 || /[\u0000-\u001f\u007f]/.test(value)) {
|
|
16
|
+
throw new Error("TypeSafe API key must be a non-empty string without control characters");
|
|
17
|
+
}
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
function store() {
|
|
21
|
+
return createSecureKeyringStore(JEV_KEYRING_SERVICE);
|
|
22
|
+
}
|
|
23
|
+
function readStoredKey(secretStore = store()) {
|
|
24
|
+
let payload;
|
|
25
|
+
try {
|
|
26
|
+
payload = secretStore.read(JEV_KEYRING_ACCOUNT);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
throw new JevCredentialStoreError("read", error);
|
|
30
|
+
}
|
|
31
|
+
if (payload === undefined)
|
|
32
|
+
return undefined;
|
|
33
|
+
try {
|
|
34
|
+
const value = JSON.parse(payload);
|
|
35
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
36
|
+
throw new Error("invalid record");
|
|
37
|
+
const record = value;
|
|
38
|
+
const keys = Object.keys(record);
|
|
39
|
+
if (keys.length !== 4 || !["version", "provider", "origin", "apiKey"].every(key => Object.hasOwn(record, key)))
|
|
40
|
+
throw new Error("invalid record fields");
|
|
41
|
+
if (record.version !== 1 || record.provider !== "typesafe" || record.origin !== TYPESAFE_API_ORIGIN)
|
|
42
|
+
throw new Error("invalid or mismatched record");
|
|
43
|
+
return validateApiKey(record.apiKey);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
throw new JevCredentialStoreError("read", error);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export function resolveJevCredential(env = process.env, secretStore) {
|
|
50
|
+
if (Object.hasOwn(env, "TYPESAFE_API_KEY")) {
|
|
51
|
+
try {
|
|
52
|
+
return { status: "present", source: "environment", apiKey: validateApiKey(env.TYPESAFE_API_KEY) };
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return { status: "unavailable", message: "TYPESAFE_API_KEY is present but invalid." };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
const apiKey = readStoredKey(secretStore ?? store());
|
|
60
|
+
return apiKey === undefined ? { status: "missing" } : { status: "present", source: "keyring", apiKey };
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
if (!(error instanceof JevCredentialStoreError))
|
|
64
|
+
throw error;
|
|
65
|
+
return { status: "unavailable", message: error.message };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export function saveJevApiKey(apiKey, secretStore = store()) {
|
|
69
|
+
const record = { version: 1, provider: "typesafe", origin: TYPESAFE_API_ORIGIN, apiKey: validateApiKey(apiKey) };
|
|
70
|
+
try {
|
|
71
|
+
secretStore.write(JEV_KEYRING_ACCOUNT, JSON.stringify(record));
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
throw new JevCredentialStoreError("write", error);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export function removeJevApiKey(secretStore = store()) {
|
|
78
|
+
try {
|
|
79
|
+
secretStore.remove(JEV_KEYRING_ACCOUNT);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
throw new JevCredentialStoreError("remove", error);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=jev-key-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jev-key-store.js","sourceRoot":"","sources":["../jev-key-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Ajv } from "ajv";
|
|
2
|
+
import Ajv2020Import from "ajv/dist/2020.js";
|
|
3
|
+
import addFormatsImport from "ajv-formats";
|
|
4
|
+
import { AjvJsonSchemaValidator } from "@modelcontextprotocol/client/validators/ajv";
|
|
5
|
+
// ajv-formats types target its bundled ajv; the runtime accepts both instances.
|
|
6
|
+
const addFormats = addFormatsImport;
|
|
7
|
+
const DRAFT_07_SCHEMA_URIS = new Set([
|
|
8
|
+
"http://json-schema.org/draft-07/schema",
|
|
9
|
+
"https://json-schema.org/draft-07/schema",
|
|
10
|
+
]);
|
|
11
|
+
const DRAFT_2020_12_SCHEMA_URIS = new Set([
|
|
12
|
+
"https://json-schema.org/draft/2020-12/schema",
|
|
13
|
+
]);
|
|
14
|
+
function schemaDialect(schema) {
|
|
15
|
+
if (!("$schema" in schema) || typeof schema.$schema !== "string") {
|
|
16
|
+
return { status: "unstamped" };
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
status: "stamped",
|
|
20
|
+
uri: schema.$schema.endsWith("#") ? schema.$schema.slice(0, -1) : schema.$schema,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function createJsonSchemaValidator() {
|
|
24
|
+
let draft07Validator;
|
|
25
|
+
let draft2020Validator;
|
|
26
|
+
return {
|
|
27
|
+
getValidator(schema) {
|
|
28
|
+
const dialect = schemaDialect(schema);
|
|
29
|
+
if (dialect.status === "unstamped" || DRAFT_2020_12_SCHEMA_URIS.has(dialect.uri)) {
|
|
30
|
+
draft2020Validator ??= (() => {
|
|
31
|
+
const Ajv2020 = Ajv2020Import;
|
|
32
|
+
const ajv = new Ajv2020({ strict: false, allErrors: true });
|
|
33
|
+
addFormats(ajv);
|
|
34
|
+
return new AjvJsonSchemaValidator(ajv);
|
|
35
|
+
})();
|
|
36
|
+
return draft2020Validator.getValidator(schema);
|
|
37
|
+
}
|
|
38
|
+
if (!DRAFT_07_SCHEMA_URIS.has(dialect.uri)) {
|
|
39
|
+
throw new Error(`Unsupported JSON Schema dialect: ${dialect.uri}`);
|
|
40
|
+
}
|
|
41
|
+
draft07Validator ??= (() => {
|
|
42
|
+
const ajv = new Ajv({
|
|
43
|
+
strict: false,
|
|
44
|
+
validateFormats: true,
|
|
45
|
+
validateSchema: false,
|
|
46
|
+
allErrors: true,
|
|
47
|
+
});
|
|
48
|
+
addFormats(ajv);
|
|
49
|
+
return new AjvJsonSchemaValidator(ajv);
|
|
50
|
+
})();
|
|
51
|
+
return draft07Validator.getValidator(schema);
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=json-schema-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema-validator.js","sourceRoot":"","sources":["../json-schema-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAC7C,OAAO,gBAAgB,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAOrF,gFAAgF;AAChF,MAAM,UAAU,GAAG,gBAAsD,CAAC;AAM1E,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAAC;IACxD,wCAAwC;IACxC,yCAAyC;CAC1C,CAAC,CAAC;AACH,MAAM,yBAAyB,GAAwB,IAAI,GAAG,CAAC;IAC7D,8CAA8C;CAC/C,CAAC,CAAC;AAEH,SAAS,aAAa,CAAC,MAAsB;IAC3C,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACjE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACjC,CAAC;IACD,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO;KACjF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,IAAI,gBAAoD,CAAC;IACzD,IAAI,kBAAsD,CAAC;IAE3D,OAAO;QACL,YAAY,CAAI,MAAsB;YACpC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,IAAI,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjF,kBAAkB,KAAK,CAAC,GAAG,EAAE;oBAC3B,MAAM,OAAO,GAAG,aAAsC,CAAC;oBACvD,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC5D,UAAU,CAAC,GAAG,CAAC,CAAC;oBAChB,OAAO,IAAI,sBAAsB,CAAC,GAAG,CAAC,CAAC;gBACzC,CAAC,CAAC,EAAE,CAAC;gBACL,OAAO,kBAAkB,CAAC,YAAY,CAAI,MAAM,CAAC,CAAC;YACpD,CAAC;YACD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3C,MAAM,IAAI,KAAK,CAAC,oCAAoC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACrE,CAAC;YAED,gBAAgB,KAAK,CAAC,GAAG,EAAE;gBACzB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;oBAClB,MAAM,EAAE,KAAK;oBACb,eAAe,EAAE,IAAI;oBACrB,cAAc,EAAE,KAAK;oBACrB,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;gBACH,UAAU,CAAC,GAAG,CAAC,CAAC;gBAChB,OAAO,IAAI,sBAAsB,CAAC,GAAG,CAAC,CAAC;YACzC,CAAC,CAAC,EAAE,CAAC;YACL,OAAO,gBAAgB,CAAC,YAAY,CAAI,MAAM,CAAC,CAAC;QAClD,CAAC;KACF,CAAC;AACJ,CAAC"}
|