promptopskit 0.6.2 → 0.7.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/{chunk-VMLGUI4F.js → chunk-35NN5F6O.js} +2 -2
- package/dist/{chunk-GLT3YYWK.js → chunk-3G3EAV7H.js} +2 -2
- package/dist/{chunk-XEZJZ3IG.js → chunk-6NOUETAC.js} +2 -2
- package/dist/{chunk-JR7252DG.js → chunk-F552OBUV.js} +116 -6
- package/dist/chunk-F552OBUV.js.map +1 -0
- package/dist/{chunk-FNCIBZJF.js → chunk-FICB2ZSK.js} +3 -3
- package/dist/{chunk-55B7QQBK.js → chunk-OWMP5NMV.js} +2 -2
- package/dist/{chunk-IPFD5Y3O.js → chunk-R65RAHAG.js} +3 -3
- package/dist/{chunk-UY5OKMVP.js → chunk-ULVY473P.js} +27 -2
- package/dist/chunk-ULVY473P.js.map +1 -0
- package/dist/cli/index.js +37 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/index.cjs +148 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -5
- package/dist/index.d.ts +8 -5
- package/dist/index.js +20 -11
- package/dist/index.js.map +1 -1
- package/dist/providers/anthropic.cjs +137 -5
- package/dist/providers/anthropic.cjs.map +1 -1
- package/dist/providers/anthropic.d.cts +2 -2
- package/dist/providers/anthropic.d.ts +2 -2
- package/dist/providers/anthropic.js +3 -3
- package/dist/providers/gemini.cjs +137 -5
- package/dist/providers/gemini.cjs.map +1 -1
- package/dist/providers/gemini.d.cts +2 -2
- package/dist/providers/gemini.d.ts +2 -2
- package/dist/providers/gemini.js +3 -3
- package/dist/providers/llmasaservice.cjs +137 -5
- package/dist/providers/llmasaservice.cjs.map +1 -1
- package/dist/providers/llmasaservice.d.cts +2 -2
- package/dist/providers/llmasaservice.d.ts +2 -2
- package/dist/providers/llmasaservice.js +4 -4
- package/dist/providers/openai-responses.cjs +137 -5
- package/dist/providers/openai-responses.cjs.map +1 -1
- package/dist/providers/openai-responses.d.cts +2 -2
- package/dist/providers/openai-responses.d.ts +2 -2
- package/dist/providers/openai-responses.js +3 -3
- package/dist/providers/openai.cjs +137 -5
- package/dist/providers/openai.cjs.map +1 -1
- package/dist/providers/openai.d.cts +2 -2
- package/dist/providers/openai.d.ts +2 -2
- package/dist/providers/openai.js +3 -3
- package/dist/providers/openrouter.cjs +137 -5
- package/dist/providers/openrouter.cjs.map +1 -1
- package/dist/providers/openrouter.d.cts +2 -2
- package/dist/providers/openrouter.d.ts +2 -2
- package/dist/providers/openrouter.js +4 -4
- package/dist/{schema-CuYsv8JA.d.cts → schema-DBcSns_b.d.cts} +192 -0
- package/dist/{schema-CuYsv8JA.d.ts → schema-DBcSns_b.d.ts} +192 -0
- package/dist/testing.cjs +11 -0
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/testing.js +1 -1
- package/dist/{types-DpK0mTHL.d.ts → types-8T2D5KB5.d.cts} +20 -2
- package/dist/{types-UA_p9uJy.d.cts → types-BlLXT5Qb.d.ts} +20 -2
- package/dist/usagetap/index.d.cts +2 -2
- package/dist/usagetap/index.d.ts +2 -2
- package/package.json +1 -1
- package/dist/chunk-JR7252DG.js.map +0 -1
- package/dist/chunk-UY5OKMVP.js.map +0 -1
- /package/dist/{chunk-VMLGUI4F.js.map → chunk-35NN5F6O.js.map} +0 -0
- /package/dist/{chunk-GLT3YYWK.js.map → chunk-3G3EAV7H.js.map} +0 -0
- /package/dist/{chunk-XEZJZ3IG.js.map → chunk-6NOUETAC.js.map} +0 -0
- /package/dist/{chunk-FNCIBZJF.js.map → chunk-FICB2ZSK.js.map} +0 -0
- /package/dist/{chunk-55B7QQBK.js.map → chunk-OWMP5NMV.js.map} +0 -0
- /package/dist/{chunk-IPFD5Y3O.js.map → chunk-R65RAHAG.js.map} +0 -0
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
renderSections,
|
|
5
5
|
resolveAssetForProvider,
|
|
6
6
|
withPromptInputSupport
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-F552OBUV.js";
|
|
8
8
|
|
|
9
9
|
// src/providers/gemini.ts
|
|
10
10
|
var geminiAdapter = withPromptInputSupport({
|
|
@@ -120,4 +120,4 @@ var geminiAdapter = withPromptInputSupport({
|
|
|
120
120
|
export {
|
|
121
121
|
geminiAdapter
|
|
122
122
|
};
|
|
123
|
-
//# sourceMappingURL=chunk-
|
|
123
|
+
//# sourceMappingURL=chunk-35NN5F6O.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
renderSections,
|
|
5
5
|
resolveAssetForProvider,
|
|
6
6
|
withPromptInputSupport
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-F552OBUV.js";
|
|
8
8
|
|
|
9
9
|
// src/providers/openai.ts
|
|
10
10
|
var openaiAdapter = withPromptInputSupport({
|
|
@@ -107,4 +107,4 @@ var openaiAdapter = withPromptInputSupport({
|
|
|
107
107
|
export {
|
|
108
108
|
openaiAdapter
|
|
109
109
|
};
|
|
110
|
-
//# sourceMappingURL=chunk-
|
|
110
|
+
//# sourceMappingURL=chunk-3G3EAV7H.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
renderSections,
|
|
5
5
|
resolveAssetForProvider,
|
|
6
6
|
withPromptInputSupport
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-F552OBUV.js";
|
|
8
8
|
|
|
9
9
|
// src/providers/anthropic.ts
|
|
10
10
|
var anthropicAdapter = withPromptInputSupport({
|
|
@@ -144,4 +144,4 @@ var anthropicAdapter = withPromptInputSupport({
|
|
|
144
144
|
export {
|
|
145
145
|
anthropicAdapter
|
|
146
146
|
};
|
|
147
|
-
//# sourceMappingURL=chunk-
|
|
147
|
+
//# sourceMappingURL=chunk-6NOUETAC.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
loadPromptFile,
|
|
3
3
|
parsePrompt
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-ULVY473P.js";
|
|
5
5
|
|
|
6
6
|
// src/renderer/interpolate.ts
|
|
7
7
|
var VARIABLE_RE = /\{\{\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*\}\}/g;
|
|
@@ -386,6 +386,16 @@ function mergeOverride(base, override) {
|
|
|
386
386
|
if (override.response !== void 0) {
|
|
387
387
|
result.response = { ...result.response, ...override.response };
|
|
388
388
|
}
|
|
389
|
+
if (override.compression !== void 0) {
|
|
390
|
+
result.compression = {
|
|
391
|
+
...result.compression,
|
|
392
|
+
...override.compression,
|
|
393
|
+
thetokencompany: mergeRecordBlock(
|
|
394
|
+
result.compression?.thetokencompany,
|
|
395
|
+
override.compression.thetokencompany
|
|
396
|
+
)
|
|
397
|
+
};
|
|
398
|
+
}
|
|
389
399
|
if (override.cache !== void 0) {
|
|
390
400
|
result.cache = {
|
|
391
401
|
...result.cache,
|
|
@@ -679,6 +689,97 @@ function compactHistoryForPrompt(asset, runtime) {
|
|
|
679
689
|
return [compacted, ...preserved];
|
|
680
690
|
}
|
|
681
691
|
|
|
692
|
+
// src/compression.ts
|
|
693
|
+
var THETOKENCOMPANY_DEFAULT_MODEL = "bear-2";
|
|
694
|
+
var THETOKENCOMPANY_DEFAULT_BASE_URL = "https://api.thetokencompany.com";
|
|
695
|
+
async function applyPromptCompressionForRender(asset, runtime) {
|
|
696
|
+
const config = asset.compression?.thetokencompany;
|
|
697
|
+
if (config?.enabled !== true || !asset.sections.prompt_template) {
|
|
698
|
+
return { asset, runtime, compression: [] };
|
|
699
|
+
}
|
|
700
|
+
const sections = renderSections(asset, {
|
|
701
|
+
variables: runtime.variables,
|
|
702
|
+
strict: runtime.strict
|
|
703
|
+
});
|
|
704
|
+
if (!sections.prompt_template) {
|
|
705
|
+
return { asset, runtime, compression: [] };
|
|
706
|
+
}
|
|
707
|
+
const model = config.model ?? THETOKENCOMPANY_DEFAULT_MODEL;
|
|
708
|
+
const result = await compressWithTheTokenCompany(sections.prompt_template, {
|
|
709
|
+
apiKey: runtime.theTokenCompany?.apiKey,
|
|
710
|
+
baseURL: runtime.theTokenCompany?.baseURL,
|
|
711
|
+
fetch: runtime.theTokenCompany?.fetch,
|
|
712
|
+
model,
|
|
713
|
+
aggressiveness: config.aggressiveness
|
|
714
|
+
});
|
|
715
|
+
return {
|
|
716
|
+
asset: {
|
|
717
|
+
...asset,
|
|
718
|
+
sections: {
|
|
719
|
+
...asset.sections,
|
|
720
|
+
...sections,
|
|
721
|
+
prompt_template: result.output
|
|
722
|
+
}
|
|
723
|
+
},
|
|
724
|
+
runtime: {
|
|
725
|
+
...runtime,
|
|
726
|
+
variables: {},
|
|
727
|
+
strict: false
|
|
728
|
+
},
|
|
729
|
+
compression: [{
|
|
730
|
+
provider: "thetokencompany",
|
|
731
|
+
model,
|
|
732
|
+
inputTokens: result.input_tokens,
|
|
733
|
+
outputTokens: result.output_tokens,
|
|
734
|
+
tokensSaved: result.tokens_saved,
|
|
735
|
+
compressionRatio: result.compression_ratio
|
|
736
|
+
}]
|
|
737
|
+
};
|
|
738
|
+
}
|
|
739
|
+
async function compressWithTheTokenCompany(input, options) {
|
|
740
|
+
const apiKey = options.apiKey ?? getEnv("THETOKENCOMPANY_API_KEY") ?? getEnv("TTC_API_KEY");
|
|
741
|
+
if (!apiKey) {
|
|
742
|
+
throw new Error(
|
|
743
|
+
"TheTokenCompany compression is enabled, but no API key was provided. Pass theTokenCompany.apiKey to renderPrompt() or set THETOKENCOMPANY_API_KEY."
|
|
744
|
+
);
|
|
745
|
+
}
|
|
746
|
+
const fetchImpl = options.fetch ?? globalThis.fetch;
|
|
747
|
+
if (!fetchImpl) {
|
|
748
|
+
throw new Error("TheTokenCompany compression requires a runtime with fetch support.");
|
|
749
|
+
}
|
|
750
|
+
const baseURL = (options.baseURL ?? THETOKENCOMPANY_DEFAULT_BASE_URL).replace(/\/+$/, "");
|
|
751
|
+
const compressionSettings = options.aggressiveness === void 0 ? void 0 : { aggressiveness: options.aggressiveness };
|
|
752
|
+
const response = await fetchImpl(`${baseURL}/v1/compress`, {
|
|
753
|
+
method: "POST",
|
|
754
|
+
headers: {
|
|
755
|
+
Authorization: `Bearer ${apiKey}`,
|
|
756
|
+
"Content-Type": "application/json"
|
|
757
|
+
},
|
|
758
|
+
body: JSON.stringify({
|
|
759
|
+
model: options.model,
|
|
760
|
+
input,
|
|
761
|
+
...compressionSettings ? { compression_settings: compressionSettings } : {}
|
|
762
|
+
})
|
|
763
|
+
});
|
|
764
|
+
if (!response.ok) {
|
|
765
|
+
const body = await response.text().catch(() => "");
|
|
766
|
+
throw new Error(
|
|
767
|
+
`TheTokenCompany compression failed with HTTP ${response.status}` + (body ? `: ${body}` : ".")
|
|
768
|
+
);
|
|
769
|
+
}
|
|
770
|
+
const data = await response.json();
|
|
771
|
+
if (typeof data.output !== "string" || typeof data.output_tokens !== "number" || typeof data.input_tokens !== "number" || typeof data.tokens_saved !== "number" || typeof data.compression_ratio !== "number") {
|
|
772
|
+
throw new Error("TheTokenCompany compression returned an invalid response payload.");
|
|
773
|
+
}
|
|
774
|
+
return data;
|
|
775
|
+
}
|
|
776
|
+
function getEnv(name) {
|
|
777
|
+
if (typeof process === "undefined") {
|
|
778
|
+
return void 0;
|
|
779
|
+
}
|
|
780
|
+
return process.env[name];
|
|
781
|
+
}
|
|
782
|
+
|
|
682
783
|
// src/providers/prompt-input.ts
|
|
683
784
|
function isPromptLookup(input) {
|
|
684
785
|
return "path" in input && typeof input.path === "string";
|
|
@@ -702,21 +803,27 @@ function withPromptInputSupport(adapter) {
|
|
|
702
803
|
};
|
|
703
804
|
const renderPrompt = async (input, runtime) => {
|
|
704
805
|
const resolved = await resolveProviderPromptInput(input, runtime);
|
|
705
|
-
const
|
|
806
|
+
const resolvedForRender = resolveAssetForProvider(resolved, runtime);
|
|
807
|
+
const sanitization = sanitizeContextVariables(resolvedForRender, runtime.variables, {
|
|
706
808
|
onContextOverflow: runtime.onContextOverflow
|
|
707
809
|
});
|
|
708
810
|
if (sanitization.shortCircuit) {
|
|
709
811
|
return {
|
|
710
812
|
provider: adapter.name,
|
|
711
|
-
model:
|
|
813
|
+
model: resolvedForRender.model ?? "",
|
|
712
814
|
returnMessage: sanitization.shortCircuit.returnMessage
|
|
713
815
|
};
|
|
714
816
|
}
|
|
715
|
-
|
|
817
|
+
const prepared = await applyPromptCompressionForRender(resolvedForRender, {
|
|
716
818
|
...runtime,
|
|
819
|
+
environment: void 0,
|
|
820
|
+
tier: void 0,
|
|
821
|
+
runtime: void 0,
|
|
717
822
|
variables: sanitization.variables,
|
|
718
|
-
history: compactHistoryForPrompt(
|
|
823
|
+
history: compactHistoryForPrompt(resolvedForRender, runtime)
|
|
719
824
|
});
|
|
825
|
+
const request = adapter.render(prepared.asset, prepared.runtime);
|
|
826
|
+
return prepared.compression.length > 0 ? { ...request, compression: prepared.compression } : request;
|
|
720
827
|
};
|
|
721
828
|
return {
|
|
722
829
|
...adapter,
|
|
@@ -759,7 +866,10 @@ export {
|
|
|
759
866
|
resolvePromptAsset,
|
|
760
867
|
resolveInlinePromptSource,
|
|
761
868
|
compactHistoryForPrompt,
|
|
869
|
+
THETOKENCOMPANY_DEFAULT_MODEL,
|
|
870
|
+
THETOKENCOMPANY_DEFAULT_BASE_URL,
|
|
871
|
+
applyPromptCompressionForRender,
|
|
762
872
|
withPromptInputSupport,
|
|
763
873
|
applyRawProviderBody
|
|
764
874
|
};
|
|
765
|
-
//# sourceMappingURL=chunk-
|
|
875
|
+
//# sourceMappingURL=chunk-F552OBUV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/renderer/interpolate.ts","../src/context.ts","../src/renderer/renderer.ts","../src/overrides/apply-overrides.ts","../src/providers/resolve-asset.ts","../src/cache.ts","../src/composition/resolve-includes.ts","../src/prompt-resolution.ts","../src/history.ts","../src/compression.ts","../src/providers/prompt-input.ts","../src/providers/raw.ts"],"sourcesContent":["export interface InterpolateOptions {\n strict?: boolean;\n optionalVariables?: Iterable<string>;\n}\n\nconst VARIABLE_RE = /\\{\\{\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\}\\}/g;\nconst ESCAPED_OPEN = /\\\\\\{\\\\\\{/g;\nconst ESCAPE_PLACEHOLDER = '\\x00ESCAPED_OPEN\\x00';\n\n/**\n * Interpolate variables into a template string.\n *\n * Syntax: {{ variable_name }}\n * Escape: \\{\\{ produces literal {{\n *\n * In strict mode, throws on missing variables.\n * In permissive mode, leaves {{ placeholder }} intact.\n */\nexport function interpolate(\n template: string,\n variables: Record<string, string>,\n options: InterpolateOptions = {},\n): string {\n const { strict = false } = options;\n const optionalVariables = new Set(options.optionalVariables ?? []);\n\n // Replace escaped sequences with placeholder\n let result = template.replace(ESCAPED_OPEN, ESCAPE_PLACEHOLDER);\n\n result = result.replace(VARIABLE_RE, (match, name: string) => {\n if (name in variables) {\n return variables[name];\n }\n if (strict && !optionalVariables.has(name)) {\n throw new Error(`Missing required variable: \"${name}\"`);\n }\n return match; // leave placeholder intact in permissive mode\n });\n\n // Restore escaped sequences\n result = result.replaceAll(ESCAPE_PLACEHOLDER, '{{');\n\n return result;\n}\n\n/**\n * Extract all variable names referenced in a template.\n */\nexport function extractVariables(template: string): string[] {\n const vars = new Set<string>();\n let match: RegExpExecArray | null;\n const re = new RegExp(VARIABLE_RE.source, 'g');\n while ((match = re.exec(template)) !== null) {\n vars.add(match[1]);\n }\n return [...vars];\n}\n","import type {\n PromptAsset,\n ResolvedPromptAsset,\n ContextBuiltInValidatorDefinition,\n ContextInputDefinition,\n ContextRegexDefinition,\n} from './schema/index.js';\n\nexport interface ContextValidationShortCircuit {\n returnMessage: string;\n code: 'POK031' | 'POK032' | 'POK033' | 'POK034';\n variable: string;\n field: 'allow_regex' | 'deny_regex' | 'non_empty' | 'reject_secrets';\n}\n\nexport interface SanitizedContextVariablesResult {\n variables: Record<string, string>;\n shortCircuit?: ContextValidationShortCircuit;\n}\n\nexport interface NormalizedContextRegex {\n pattern: string;\n flags: string;\n raw: string;\n invalidLiteral?: boolean;\n returnMessage?: string;\n}\n\nexport interface NormalizedContextBuiltInValidator {\n returnMessage?: string;\n}\n\nexport interface NormalizedContextInput {\n name: string;\n optional?: boolean;\n warnings?: boolean;\n max_size?: number;\n trim?: boolean | 'start' | 'end' | 'both';\n allow_regex?: NormalizedContextRegex;\n deny_regex?: NormalizedContextRegex;\n non_empty?: NormalizedContextBuiltInValidator;\n reject_secrets?: NormalizedContextBuiltInValidator;\n}\n\nexport interface ContextSizeWarning {\n variable: string;\n maxSize: number;\n actualSize: number;\n}\n\nexport interface ContextOverflowInfo {\n promptId: string;\n variable: string;\n value: string;\n maxSize: number;\n actualSize: number;\n}\n\nexport interface SanitizeContextOptions {\n onContextOverflow?: (info: ContextOverflowInfo) => string;\n}\n\nconst textEncoder = new TextEncoder();\nconst REJECT_SECRETS_PATTERN = '(secret|api[_-]?key|password)';\nconst REJECT_SECRETS_FLAGS = 'i';\n\nexport function getContextInputs(\n asset: Pick<PromptAsset | ResolvedPromptAsset, 'context'>,\n): NormalizedContextInput[] {\n return (asset.context?.inputs ?? []).map(normalizeContextInput);\n}\n\nexport function getContextInputNames(\n asset: Pick<PromptAsset | ResolvedPromptAsset, 'context'>,\n): string[] {\n return getContextInputs(asset).map((input) => input.name);\n}\n\nexport function normalizeContextInput(input: ContextInputDefinition): NormalizedContextInput {\n if (typeof input === 'string') {\n return { name: input };\n }\n\n return {\n name: input.name,\n optional: input.optional,\n warnings: input.warnings,\n max_size: input.max_size,\n trim: input.trim,\n allow_regex: normalizeContextRegex(input.allow_regex),\n deny_regex: normalizeContextRegex(input.deny_regex),\n non_empty: normalizeBuiltInValidator(input.non_empty),\n reject_secrets: normalizeBuiltInValidator(input.reject_secrets),\n };\n}\n\nexport function areContextInputWarningsEnabled(input: Pick<NormalizedContextInput, 'warnings'>): boolean {\n return input.warnings !== false;\n}\n\nexport function normalizeContextRegex(\n value: ContextRegexDefinition | undefined,\n): NormalizedContextRegex | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (typeof value === 'string') {\n const literal = parseRegexLiteral(value);\n if (value.startsWith('/') && !literal) {\n return {\n pattern: value,\n flags: '',\n raw: value,\n invalidLiteral: true,\n };\n }\n\n return {\n pattern: literal?.pattern ?? value,\n flags: literal?.flags ?? '',\n raw: value,\n };\n }\n\n return {\n pattern: value.pattern,\n flags: value.flags ?? '',\n raw: JSON.stringify(value),\n returnMessage: value.return_message,\n };\n}\n\nexport function normalizeBuiltInValidator(\n value: ContextBuiltInValidatorDefinition | undefined,\n): NormalizedContextBuiltInValidator | undefined {\n if (value === undefined || value === false) {\n return undefined;\n }\n\n if (value === true) {\n return {};\n }\n\n return {\n returnMessage: value.return_message,\n };\n}\n\nfunction parseRegexLiteral(value: string): { pattern: string; flags: string } | undefined {\n if (!value.startsWith('/')) {\n return undefined;\n }\n\n for (let index = value.length - 1; index > 0; index -= 1) {\n if (value[index] !== '/') {\n continue;\n }\n\n let backslashCount = 0;\n for (let cursor = index - 1; cursor >= 0 && value[cursor] === '\\\\'; cursor -= 1) {\n backslashCount += 1;\n }\n\n if (backslashCount % 2 === 1) {\n continue;\n }\n\n return {\n pattern: value.slice(1, index),\n flags: value.slice(index + 1),\n };\n }\n\n return undefined;\n}\n\nexport function formatInvalidContextRegexMessage(details: {\n promptId: string;\n variable: string;\n field: string;\n raw: string;\n reason: string;\n}): string {\n return [\n `Invalid context regex for prompt \"${details.promptId}\"`,\n `variable \"${details.variable}\"`,\n `field \"${details.field}\"`,\n `value ${JSON.stringify(details.raw)}: ${details.reason}`,\n ].join(', ');\n}\n\nexport function compileContextRegex(\n regex: NormalizedContextRegex,\n details: { promptId: string; variable: string; field: string },\n): RegExp {\n if (regex.invalidLiteral) {\n throw new Error(\n `POK013: ${formatInvalidContextRegexMessage({\n ...details,\n raw: regex.raw,\n reason: 'Malformed regex literal. Use /pattern/flags or { pattern, flags }.',\n })}`,\n );\n }\n\n try {\n return new RegExp(regex.pattern, regex.flags);\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw new Error(`POK013: ${formatInvalidContextRegexMessage({ ...details, raw: regex.raw, reason })}`);\n }\n}\n\nfunction getRejectSecretsRegex(): NormalizedContextRegex {\n return {\n pattern: REJECT_SECRETS_PATTERN,\n flags: REJECT_SECRETS_FLAGS,\n raw: JSON.stringify({ pattern: REJECT_SECRETS_PATTERN, flags: REJECT_SECRETS_FLAGS }),\n };\n}\n\ntype TrimMode = boolean | 'start' | 'end' | 'both';\n\nfunction isTrimEnabled(mode: TrimMode | undefined): mode is true | 'start' | 'end' | 'both' {\n return mode === true || mode === 'start' || mode === 'end' || mode === 'both';\n}\n\nfunction normalizeTrimMode(mode: TrimMode): 'start' | 'end' {\n if (mode === 'start') {\n return 'start';\n }\n return 'end';\n}\n\nfunction trimToMaxSize(\n value: string,\n maxSize: number,\n mode: TrimMode,\n): string {\n const measured = measureContextValueSize(value);\n if (measured <= maxSize) {\n return value;\n }\n\n const characters = Array.from(value);\n const normalizedMode = normalizeTrimMode(mode);\n\n if (normalizedMode === 'start') {\n let collected = '';\n let size = 0;\n for (let i = characters.length - 1; i >= 0; i -= 1) {\n const next = characters[i];\n const charSize = measureContextValueSize(next);\n if (size + charSize > maxSize) {\n break;\n }\n collected = next + collected;\n size += charSize;\n }\n return collected;\n }\n\n let collected = '';\n let size = 0;\n for (const char of characters) {\n const charSize = measureContextValueSize(char);\n if (size + charSize > maxSize) {\n break;\n }\n collected += char;\n size += charSize;\n }\n return collected;\n}\n\nexport function sanitizeContextVariables(\n asset: Pick<PromptAsset | ResolvedPromptAsset, 'context' | 'id'>,\n variables: Record<string, string> = {},\n options: SanitizeContextOptions = {},\n): SanitizedContextVariablesResult {\n const { onContextOverflow } = options;\n const sanitized = { ...variables };\n\n for (const input of getContextInputs(asset)) {\n const value = sanitized[input.name];\n if (value === undefined) {\n continue;\n }\n\n let candidate = value;\n\n if (input.max_size !== undefined) {\n const actualSize = measureContextValueSize(candidate);\n if (actualSize > input.max_size && onContextOverflow) {\n candidate = onContextOverflow({\n promptId: asset.id,\n variable: input.name,\n value: candidate,\n maxSize: input.max_size,\n actualSize,\n });\n }\n }\n\n if (isTrimEnabled(input.trim) && input.max_size !== undefined) {\n candidate = trimToMaxSize(candidate, input.max_size, input.trim);\n }\n\n sanitized[input.name] = candidate;\n\n if (input.allow_regex) {\n const candidate = sanitized[input.name];\n const matcher = compileContextRegex(input.allow_regex, {\n promptId: asset.id,\n variable: input.name,\n field: 'allow_regex',\n });\n if (!matcher.test(candidate)) {\n if (input.allow_regex.returnMessage) {\n return {\n variables: sanitized,\n shortCircuit: {\n returnMessage: input.allow_regex.returnMessage,\n code: 'POK031',\n variable: input.name,\n field: 'allow_regex',\n },\n };\n }\n\n throw new Error(\n `POK031: Context variable \"${input.name}\" failed allow_regex validation for prompt \"${asset.id}\".`,\n );\n }\n }\n\n if (input.deny_regex) {\n const candidate = sanitized[input.name];\n const matcher = compileContextRegex(input.deny_regex, {\n promptId: asset.id,\n variable: input.name,\n field: 'deny_regex',\n });\n if (matcher.test(candidate)) {\n if (input.deny_regex.returnMessage) {\n return {\n variables: sanitized,\n shortCircuit: {\n returnMessage: input.deny_regex.returnMessage,\n code: 'POK032',\n variable: input.name,\n field: 'deny_regex',\n },\n };\n }\n\n throw new Error(\n `POK032: Context variable \"${input.name}\" matched deny_regex for prompt \"${asset.id}\".`,\n );\n }\n }\n\n if (input.non_empty && candidate.trim().length === 0) {\n if (input.non_empty.returnMessage) {\n return {\n variables: sanitized,\n shortCircuit: {\n returnMessage: input.non_empty.returnMessage,\n code: 'POK033',\n variable: input.name,\n field: 'non_empty',\n },\n };\n }\n\n throw new Error(\n `POK033: Context variable \"${input.name}\" failed non_empty validation for prompt \"${asset.id}\".`,\n );\n }\n\n if (input.reject_secrets) {\n const matcher = compileContextRegex(getRejectSecretsRegex(), {\n promptId: asset.id,\n variable: input.name,\n field: 'reject_secrets',\n });\n if (matcher.test(candidate)) {\n if (input.reject_secrets.returnMessage) {\n return {\n variables: sanitized,\n shortCircuit: {\n returnMessage: input.reject_secrets.returnMessage,\n code: 'POK034',\n variable: input.name,\n field: 'reject_secrets',\n },\n };\n }\n\n throw new Error(\n `POK034: Context variable \"${input.name}\" matched reject_secrets validation for prompt \"${asset.id}\".`,\n );\n }\n }\n }\n\n return { variables: sanitized };\n}\n\nexport function measureContextValueSize(value: string): number {\n return textEncoder.encode(value).length;\n}\n\nexport function collectContextSizeWarnings(\n asset: Pick<PromptAsset | ResolvedPromptAsset, 'context'>,\n variables: Record<string, string> = {},\n): ContextSizeWarning[] {\n const warnings: ContextSizeWarning[] = [];\n\n for (const input of getContextInputs(asset)) {\n if (!areContextInputWarningsEnabled(input)) {\n continue;\n }\n\n if (input.max_size === undefined) {\n continue;\n }\n\n const value = variables[input.name];\n if (value === undefined) {\n continue;\n }\n\n const actualSize = measureContextValueSize(value);\n if (actualSize > input.max_size) {\n warnings.push({\n variable: input.name,\n maxSize: input.max_size,\n actualSize,\n });\n }\n }\n\n return warnings;\n}\n","import type { ResolvedPromptAsset } from '../schema/index.js';\nimport { interpolate, extractVariables } from './interpolate.js';\nimport { getContextInputs } from '../context.js';\n\nexport interface RenderOptions {\n variables?: Record<string, string>;\n strict?: boolean;\n}\n\nexport interface RenderedSections {\n system_instructions?: string;\n prompt_template?: string;\n}\n\n/**\n * Render the sections of a resolved prompt asset with variable interpolation.\n */\nexport function renderSections(\n asset: ResolvedPromptAsset,\n options: RenderOptions = {},\n): RenderedSections {\n const { variables = {}, strict = false } = options;\n const optionalVariables = getContextInputs(asset)\n .filter((input) => input.optional === true)\n .map((input) => input.name);\n\n const result: RenderedSections = {};\n\n if (asset.sections.system_instructions) {\n result.system_instructions = interpolate(\n asset.sections.system_instructions,\n variables,\n { strict, optionalVariables },\n );\n }\n\n if (asset.sections.prompt_template) {\n result.prompt_template = interpolate(\n asset.sections.prompt_template,\n variables,\n { strict, optionalVariables },\n );\n }\n\n return result;\n}\n\n/**\n * Get all variable names used across all sections.\n */\nexport function getRequiredVariables(asset: ResolvedPromptAsset): string[] {\n const vars = new Set<string>();\n const optionalVariables = new Set(\n getContextInputs(asset)\n .filter((input) => input.optional === true)\n .map((input) => input.name),\n );\n\n if (asset.sections.system_instructions) {\n for (const v of extractVariables(asset.sections.system_instructions)) {\n vars.add(v);\n }\n }\n\n if (asset.sections.prompt_template) {\n for (const v of extractVariables(asset.sections.prompt_template)) {\n vars.add(v);\n }\n }\n\n return [...vars].filter((variable) => !optionalVariables.has(variable));\n}\n","import type { PromptAsset, PromptAssetOverrides } from '../schema/index.js';\n\nexport interface OverrideOptions {\n environment?: string;\n tier?: string;\n runtime?: Partial<PromptAssetOverrides>;\n}\n\n/**\n * Apply environment, tier, and runtime overrides to a prompt asset.\n *\n * Precedence: base → environment → tier → runtime\n * Scalars are replaced. Arrays are replaced (not concatenated).\n */\nexport function applyOverrides(\n asset: PromptAsset,\n options: OverrideOptions = {},\n): PromptAsset {\n let result = { ...asset };\n\n // Apply environment override\n if (options.environment && result.environments?.[options.environment]) {\n result = mergeOverride(result, result.environments[options.environment]);\n }\n\n // Apply tier override\n if (options.tier && result.tiers?.[options.tier]) {\n result = mergeOverride(result, result.tiers[options.tier]);\n }\n\n // Apply runtime overrides\n if (options.runtime) {\n result = mergeOverride(result, options.runtime);\n }\n\n return result;\n}\n\nfunction mergeOverride(\n base: PromptAsset,\n override: Partial<PromptAssetOverrides>,\n): PromptAsset {\n const result = { ...base };\n\n if (override.model !== undefined) result.model = override.model;\n if (override.fallback_models !== undefined) result.fallback_models = override.fallback_models;\n if (override.tools !== undefined) result.tools = override.tools;\n\n if (override.reasoning !== undefined) {\n result.reasoning = { ...result.reasoning, ...override.reasoning };\n }\n if (override.sampling !== undefined) {\n result.sampling = { ...result.sampling, ...override.sampling };\n }\n if (override.response !== undefined) {\n result.response = { ...result.response, ...override.response };\n }\n if (override.compression !== undefined) {\n result.compression = {\n ...result.compression,\n ...override.compression,\n thetokencompany: mergeRecordBlock(\n result.compression?.thetokencompany,\n override.compression.thetokencompany,\n ),\n };\n }\n if (override.cache !== undefined) {\n result.cache = {\n ...result.cache,\n ...override.cache,\n openai: mergeRecordBlock(result.cache?.openai, override.cache.openai),\n anthropic: mergeRecordBlock(result.cache?.anthropic, override.cache.anthropic),\n gemini: mergeRecordBlock(result.cache?.gemini, override.cache.gemini),\n google: mergeRecordBlock(result.cache?.google, override.cache.google),\n };\n }\n if (override.raw !== undefined) {\n result.raw = {\n ...result.raw,\n ...override.raw,\n openai: mergeRecordBlock(result.raw?.openai, override.raw.openai),\n 'openai-responses': mergeRecordBlock(result.raw?.['openai-responses'], override.raw['openai-responses']),\n openai_responses: mergeRecordBlock(result.raw?.openai_responses, override.raw.openai_responses),\n anthropic: mergeRecordBlock(result.raw?.anthropic, override.raw.anthropic),\n gemini: mergeRecordBlock(result.raw?.gemini, override.raw.gemini),\n google: mergeRecordBlock(result.raw?.google, override.raw.google),\n openrouter: mergeRecordBlock(result.raw?.openrouter, override.raw.openrouter),\n llmasaservice: mergeRecordBlock(result.raw?.llmasaservice, override.raw.llmasaservice),\n };\n }\n\n if (override.provider_options !== undefined) {\n result.provider_options = {\n ...result.provider_options,\n ...override.provider_options,\n anthropic: {\n ...result.provider_options?.anthropic,\n ...override.provider_options.anthropic,\n },\n gemini: {\n ...result.provider_options?.gemini,\n ...override.provider_options.gemini,\n },\n openrouter: {\n ...result.provider_options?.openrouter,\n ...override.provider_options.openrouter,\n },\n llmasaservice: {\n ...result.provider_options?.llmasaservice,\n ...override.provider_options.llmasaservice,\n },\n };\n }\n\n return result;\n}\n\nfunction mergeRecordBlock<T extends object>(\n base: T | undefined,\n override: T | undefined,\n): T | undefined {\n if (override === undefined) return base;\n return { ...base, ...override } as T;\n}\n","import { applyOverrides } from '../overrides/index.js';\nimport type { ResolvedPromptAsset } from '../schema/index.js';\nimport type { RuntimeRenderOptions } from './types.js';\n\nexport function resolveAssetForProvider(\n asset: ResolvedPromptAsset,\n runtime: Pick<RuntimeRenderOptions, 'environment' | 'tier' | 'runtime'> = {},\n): ResolvedPromptAsset {\n if (!runtime.environment && !runtime.tier && !runtime.runtime) {\n return asset;\n }\n\n return applyOverrides(asset, {\n environment: runtime.environment,\n tier: runtime.tier,\n runtime: runtime.runtime,\n }) as ResolvedPromptAsset;\n}","import { statSync } from 'node:fs';\n\ninterface CacheEntry<T> {\n value: T;\n mtime: number;\n}\n\n/**\n * Simple in-memory LRU cache keyed by file path + mtime.\n * Used to avoid re-parsing prompt files on every renderPrompt() call.\n */\nexport class PromptCache<T> {\n private cache = new Map<string, CacheEntry<T>>();\n private maxSize: number;\n\n constructor(maxSize = 100) {\n this.maxSize = maxSize;\n }\n\n get(filePath: string): T | undefined {\n const entry = this.cache.get(filePath);\n if (!entry) return undefined;\n\n try {\n const stat = statSync(filePath);\n if (stat.mtimeMs !== entry.mtime) {\n this.cache.delete(filePath);\n return undefined;\n }\n } catch {\n this.cache.delete(filePath);\n return undefined;\n }\n\n // Refresh recency for true LRU semantics.\n this.cache.delete(filePath);\n this.cache.set(filePath, entry);\n\n return entry.value;\n }\n\n set(filePath: string, value: T): void {\n try {\n const stat = statSync(filePath);\n\n if (this.cache.has(filePath)) {\n this.cache.delete(filePath);\n } else if (this.cache.size >= this.maxSize) {\n const oldest = this.cache.keys().next().value;\n if (oldest) this.cache.delete(oldest);\n }\n\n this.cache.set(filePath, { value, mtime: stat.mtimeMs });\n } catch {\n // Can't stat the file — don't cache\n }\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n get size(): number {\n return this.cache.size;\n }\n}\n","import { readFile } from 'node:fs/promises';\nimport { resolve, dirname } from 'node:path';\nimport { parsePrompt } from '../parser/index.js';\nimport type { PromptAsset } from '../schema/index.js';\n\n/**\n * Resolve includes for a prompt asset, inlining content from referenced files.\n * Detects and rejects circular includes.\n */\nexport async function resolveIncludes(\n asset: PromptAsset,\n basePath: string,\n visited: Set<string> = new Set(),\n): Promise<PromptAsset> {\n if (!asset.includes || asset.includes.length === 0) {\n return asset;\n }\n\n const baseDir = dirname(basePath);\n const resolvedPath = resolve(basePath);\n\n if (visited.has(resolvedPath)) {\n throw new Error(`Circular include detected: ${resolvedPath}`);\n }\n visited.add(resolvedPath);\n\n let mergedSystemInstructions = '';\n\n for (const includePath of asset.includes) {\n const fullPath = resolve(baseDir, includePath);\n\n if (visited.has(fullPath)) {\n throw new Error(`Circular include detected: ${fullPath} (included from ${basePath})`);\n }\n\n const content = await readFile(fullPath, 'utf-8');\n const { asset: includedAsset } = parsePrompt(content, fullPath);\n\n // Recursively resolve nested includes\n const resolved = await resolveIncludes(includedAsset, fullPath, new Set(visited));\n\n // Append included system instructions before local ones\n if (resolved.sections?.system_instructions) {\n mergedSystemInstructions += resolved.sections.system_instructions + '\\n\\n';\n }\n }\n\n // Prepend included system instructions before the local ones\n const localSystem = asset.sections?.system_instructions ?? '';\n const combinedSystem = (mergedSystemInstructions + localSystem).trim() || undefined;\n\n return {\n ...asset,\n sections: {\n ...asset.sections,\n system_instructions: combinedSystem,\n },\n // Drop includes from the resolved asset — they've been inlined\n includes: undefined,\n };\n}\n","import { readFile } from 'node:fs/promises';\nimport { existsSync, statSync } from 'node:fs';\nimport { resolve } from 'node:path';\n\nimport { PromptCache } from './cache.js';\nimport { resolveIncludes } from './composition/index.js';\nimport { applyOverrides } from './overrides/index.js';\nimport { parsePrompt, loadPromptFile } from './parser/index.js';\nimport type { PromptAsset, PromptAssetOverrides, ResolvedPromptAsset } from './schema/index.js';\n\nexport type PromptResolutionMode = 'auto' | 'compiled-only' | 'source-only';\n\nexport const DEFAULT_PROMPTS_DIR = './prompts';\nexport const DEFAULT_COMPILED_JSON_DIR = './.generated-prompts/json';\nexport const DEFAULT_COMPILED_ESM_DIR = './.generated-prompts/esm';\n\nexport interface PromptResolutionConfig {\n sourceDir?: string;\n compiledDir?: string;\n mode?: PromptResolutionMode;\n cache?: boolean;\n}\n\nexport interface ResolvedPromptResolutionConfig {\n sourceDir: string;\n compiledDir: string;\n mode?: PromptResolutionMode;\n cache?: boolean;\n}\n\nexport function defaultCompiledDirForFormat(format: 'json' | 'esm'): string {\n return format === 'esm' ? DEFAULT_COMPILED_ESM_DIR : DEFAULT_COMPILED_JSON_DIR;\n}\n\nexport function withPromptResolutionDefaults(config: PromptResolutionConfig): ResolvedPromptResolutionConfig {\n return {\n ...config,\n sourceDir: config.sourceDir ?? DEFAULT_PROMPTS_DIR,\n compiledDir: config.compiledDir ?? DEFAULT_COMPILED_JSON_DIR,\n };\n}\n\nconst sharedPromptCache = new PromptCache<PromptAsset>();\n\nexport async function loadPromptAsset(\n promptPath: string,\n config: PromptResolutionConfig,\n promptCache: PromptCache<PromptAsset> = sharedPromptCache,\n): Promise<PromptAsset> {\n const resolvedConfig = withPromptResolutionDefaults(config);\n const mode = resolvedConfig.mode ?? 'auto';\n\n if (mode !== 'source-only' && resolvedConfig.compiledDir) {\n const compiledFile = resolve(resolvedConfig.compiledDir, promptPath + '.json');\n if (existsSync(compiledFile)) {\n if (mode === 'auto') {\n const sourceFile = resolve(resolvedConfig.sourceDir, promptPath + '.md');\n if (existsSync(sourceFile)) {\n const compiledMtime = statSync(compiledFile).mtimeMs;\n const sourceMtime = statSync(sourceFile).mtimeMs;\n if (sourceMtime > compiledMtime) {\n console.warn(\n `[promptopskit] Warning: compiled artifact for \"${promptPath}\" is older than source .md file.\\n`\n + ' Run \"promptopskit compile\" or switch to source-only mode.',\n );\n }\n }\n }\n\n const content = await readFile(compiledFile, 'utf-8');\n return JSON.parse(content) as PromptAsset;\n }\n\n if (mode === 'compiled-only') {\n throw new Error(\n `Compiled artifact not found: ${compiledFile}\\n`\n + 'Run \"promptopskit compile\" to generate it.',\n );\n }\n }\n\n if (mode !== 'compiled-only') {\n const sourceFile = resolve(resolvedConfig.sourceDir, promptPath + '.md');\n\n if (resolvedConfig.cache !== false) {\n const cached = promptCache.get(sourceFile);\n if (cached) {\n return cached;\n }\n }\n\n if (!existsSync(sourceFile)) {\n const paths = [sourceFile];\n if (resolvedConfig.compiledDir) {\n paths.unshift(resolve(resolvedConfig.compiledDir, promptPath + '.json'));\n }\n\n throw new Error(\n `Prompt not found: \"${promptPath}\"\\nSearched:\\n${paths.map((candidate) => ` - ${candidate}`).join('\\n')}`,\n );\n }\n\n const { asset } = await loadPromptFile(sourceFile, { defaultsRoot: resolvedConfig.sourceDir });\n\n if (resolvedConfig.cache !== false) {\n promptCache.set(sourceFile, asset);\n }\n\n return asset;\n }\n\n throw new Error(`Prompt not found: \"${promptPath}\"`);\n}\n\nexport async function resolvePromptAsset(\n promptPath: string,\n config: PromptResolutionConfig,\n options: { environment?: string; tier?: string; runtime?: Partial<PromptAssetOverrides> } = {},\n promptCache: PromptCache<PromptAsset> = sharedPromptCache,\n): Promise<ResolvedPromptAsset> {\n const resolvedConfig = withPromptResolutionDefaults(config);\n let asset = await loadPromptAsset(promptPath, resolvedConfig, promptCache);\n\n const sourceFile = resolve(resolvedConfig.sourceDir, promptPath + '.md');\n if (asset.includes && asset.includes.length > 0 && existsSync(sourceFile)) {\n asset = await resolveIncludes(asset, sourceFile);\n }\n\n asset = applyOverrides(asset, {\n environment: options.environment,\n tier: options.tier,\n runtime: options.runtime,\n });\n\n return asset as ResolvedPromptAsset;\n}\n\nexport function resolveInlinePromptSource(\n source: string,\n options: { environment?: string; tier?: string; runtime?: Partial<PromptAssetOverrides> } = {},\n): ResolvedPromptAsset {\n const { asset } = parsePrompt(source);\n return applyOverrides(asset, {\n environment: options.environment,\n tier: options.tier,\n runtime: options.runtime,\n }) as ResolvedPromptAsset;\n}","import type { ResolvedPromptAsset } from './schema/index.js';\nimport type {\n RuntimeHistoryCompactionInfo,\n RuntimeHistoryMessage,\n RuntimeRenderOptions,\n} from './providers/types.js';\n\nfunction defaultCompactHistory(info: RuntimeHistoryCompactionInfo): RuntimeHistoryMessage {\n const content = info.overflow\n .map((message) => `${message.role}: ${message.content}`)\n .join('\\n\\n');\n\n return {\n role: 'user',\n content: `Earlier conversation compacted to preserve history:\\n\\n${content}`,\n };\n}\n\nfunction normalizeCompactionResult(result: ReturnType<NonNullable<RuntimeRenderOptions['onHistoryCompaction']>>): RuntimeHistoryMessage {\n if (typeof result === 'string') {\n return {\n role: 'user',\n content: result,\n };\n }\n\n return result;\n}\n\nexport function compactHistoryForPrompt(\n asset: Pick<ResolvedPromptAsset, 'id' | 'context'>,\n runtime: Pick<RuntimeRenderOptions, 'history' | 'onHistoryCompaction'>,\n): RuntimeHistoryMessage[] | undefined {\n const history = runtime.history;\n const maxItems = asset.context?.history?.max_items;\n\n if (!history || maxItems === undefined || history.length <= maxItems) {\n return history;\n }\n\n if (maxItems === 1) {\n const info = {\n promptId: asset.id,\n maxItems,\n overflow: history,\n preserved: [],\n history,\n };\n const compacted = runtime.onHistoryCompaction\n ? normalizeCompactionResult(runtime.onHistoryCompaction(info))\n : defaultCompactHistory(info);\n return [compacted];\n }\n\n const preservedCount = maxItems - 1;\n const overflow = history.slice(0, history.length - preservedCount);\n const preserved = history.slice(-preservedCount);\n const info = {\n promptId: asset.id,\n maxItems,\n overflow,\n preserved,\n history,\n };\n const compacted = runtime.onHistoryCompaction\n ? normalizeCompactionResult(runtime.onHistoryCompaction(info))\n : defaultCompactHistory(info);\n\n return [compacted, ...preserved];\n}\n","import type { ResolvedPromptAsset } from './schema/index.js';\nimport { renderSections } from './renderer/index.js';\nimport type { RuntimeRenderOptions } from './providers/types.js';\n\nexport const THETOKENCOMPANY_DEFAULT_MODEL = 'bear-2';\nexport const THETOKENCOMPANY_DEFAULT_BASE_URL = 'https://api.thetokencompany.com';\n\nexport interface TheTokenCompanyRuntimeOptions {\n apiKey?: string;\n baseURL?: string;\n fetch?: typeof fetch;\n}\n\nexport interface PromptCompressionResult {\n provider: 'thetokencompany';\n model: string;\n inputTokens: number;\n outputTokens: number;\n tokensSaved: number;\n compressionRatio: number;\n}\n\nexport interface PromptCompressionRenderResult {\n asset: ResolvedPromptAsset;\n runtime: RuntimeRenderOptions;\n compression: PromptCompressionResult[];\n}\n\ninterface TheTokenCompanyCompressResponse {\n output: string;\n output_tokens: number;\n input_tokens: number;\n tokens_saved: number;\n compression_ratio: number;\n}\n\nexport async function applyPromptCompressionForRender(\n asset: ResolvedPromptAsset,\n runtime: RuntimeRenderOptions,\n): Promise<PromptCompressionRenderResult> {\n const config = asset.compression?.thetokencompany;\n\n if (config?.enabled !== true || !asset.sections.prompt_template) {\n return { asset, runtime, compression: [] };\n }\n\n const sections = renderSections(asset, {\n variables: runtime.variables,\n strict: runtime.strict,\n });\n\n if (!sections.prompt_template) {\n return { asset, runtime, compression: [] };\n }\n\n const model = config.model ?? THETOKENCOMPANY_DEFAULT_MODEL;\n const result = await compressWithTheTokenCompany(sections.prompt_template, {\n apiKey: runtime.theTokenCompany?.apiKey,\n baseURL: runtime.theTokenCompany?.baseURL,\n fetch: runtime.theTokenCompany?.fetch,\n model,\n aggressiveness: config.aggressiveness,\n });\n\n return {\n asset: {\n ...asset,\n sections: {\n ...asset.sections,\n ...sections,\n prompt_template: result.output,\n },\n },\n runtime: {\n ...runtime,\n variables: {},\n strict: false,\n },\n compression: [{\n provider: 'thetokencompany',\n model,\n inputTokens: result.input_tokens,\n outputTokens: result.output_tokens,\n tokensSaved: result.tokens_saved,\n compressionRatio: result.compression_ratio,\n }],\n };\n}\n\nasync function compressWithTheTokenCompany(\n input: string,\n options: {\n apiKey?: string;\n baseURL?: string;\n fetch?: typeof fetch;\n model: string;\n aggressiveness?: number;\n },\n): Promise<TheTokenCompanyCompressResponse> {\n const apiKey = options.apiKey ?? getEnv('THETOKENCOMPANY_API_KEY') ?? getEnv('TTC_API_KEY');\n if (!apiKey) {\n throw new Error(\n 'TheTokenCompany compression is enabled, but no API key was provided. '\n + 'Pass theTokenCompany.apiKey to renderPrompt() or set THETOKENCOMPANY_API_KEY.',\n );\n }\n\n const fetchImpl = options.fetch ?? globalThis.fetch;\n if (!fetchImpl) {\n throw new Error('TheTokenCompany compression requires a runtime with fetch support.');\n }\n\n const baseURL = (options.baseURL ?? THETOKENCOMPANY_DEFAULT_BASE_URL).replace(/\\/+$/, '');\n const compressionSettings = options.aggressiveness === undefined\n ? undefined\n : { aggressiveness: options.aggressiveness };\n\n const response = await fetchImpl(`${baseURL}/v1/compress`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n model: options.model,\n input,\n ...(compressionSettings ? { compression_settings: compressionSettings } : {}),\n }),\n });\n\n if (!response.ok) {\n const body = await response.text().catch(() => '');\n throw new Error(\n `TheTokenCompany compression failed with HTTP ${response.status}`\n + (body ? `: ${body}` : '.'),\n );\n }\n\n const data = await response.json() as Partial<TheTokenCompanyCompressResponse>;\n if (\n typeof data.output !== 'string'\n || typeof data.output_tokens !== 'number'\n || typeof data.input_tokens !== 'number'\n || typeof data.tokens_saved !== 'number'\n || typeof data.compression_ratio !== 'number'\n ) {\n throw new Error('TheTokenCompany compression returned an invalid response payload.');\n }\n\n return data as TheTokenCompanyCompressResponse;\n}\n\nfunction getEnv(name: string): string | undefined {\n if (typeof process === 'undefined') {\n return undefined;\n }\n\n return process.env[name];\n}\n","import { resolveInlinePromptSource, resolvePromptAsset } from '../prompt-resolution.js';\nimport type { ResolvedPromptAsset } from '../schema/index.js';\nimport { sanitizeContextVariables } from '../context.js';\nimport { compactHistoryForPrompt } from '../history.js';\nimport { applyPromptCompressionForRender } from '../compression.js';\nimport { resolveAssetForProvider } from './resolve-asset.js';\nimport type {\n ProviderAdapter,\n ProviderPromptInput,\n RenderPromptMethod,\n RuntimeRenderOptions,\n ValidatePromptMethod,\n} from './types.js';\n\ntype SyncProviderAdapter = Omit<ProviderAdapter, 'validatePrompt' | 'renderPrompt'>;\n\nfunction isPromptLookup(input: ProviderPromptInput): input is Extract<ProviderPromptInput, { path: string }> {\n return 'path' in input && typeof input.path === 'string';\n}\n\nfunction isInlinePromptSource(input: ProviderPromptInput): input is Extract<ProviderPromptInput, { source: string }> {\n return 'source' in input && typeof input.source === 'string';\n}\n\nasync function resolveProviderPromptInput(\n input: ProviderPromptInput,\n runtime?: Pick<RuntimeRenderOptions, 'environment' | 'tier' | 'runtime'>,\n): Promise<ResolvedPromptAsset> {\n if (isPromptLookup(input)) {\n return resolvePromptAsset(input.path, input, runtime);\n }\n\n if (isInlinePromptSource(input)) {\n return resolveInlinePromptSource(input.source, runtime);\n }\n\n return input;\n}\n\nexport function withPromptInputSupport(adapter: SyncProviderAdapter): ProviderAdapter {\n const validatePrompt: ValidatePromptMethod = async (input, runtime) => {\n const resolved = await resolveProviderPromptInput(input, runtime);\n return adapter.validate(resolved, runtime);\n };\n\n const renderPrompt: RenderPromptMethod = async (input, runtime) => {\n const resolved = await resolveProviderPromptInput(input, runtime);\n const resolvedForRender = resolveAssetForProvider(resolved, runtime);\n const sanitization = sanitizeContextVariables(resolvedForRender, runtime.variables, {\n onContextOverflow: runtime.onContextOverflow,\n });\n\n if (sanitization.shortCircuit) {\n return {\n provider: adapter.name,\n model: resolvedForRender.model ?? '',\n returnMessage: sanitization.shortCircuit.returnMessage,\n };\n }\n\n const prepared = await applyPromptCompressionForRender(resolvedForRender, {\n ...runtime,\n environment: undefined,\n tier: undefined,\n runtime: undefined,\n variables: sanitization.variables,\n history: compactHistoryForPrompt(resolvedForRender, runtime),\n });\n const request = adapter.render(prepared.asset, prepared.runtime);\n\n return prepared.compression.length > 0\n ? { ...request, compression: prepared.compression }\n : request;\n };\n\n return {\n ...adapter,\n validatePrompt,\n renderPrompt,\n };\n}\n","import type { ResolvedPromptAsset } from '../schema/index.js';\n\nexport function applyRawProviderBody(\n body: Record<string, unknown>,\n asset: ResolvedPromptAsset,\n provider: 'openai' | 'openai-responses' | 'anthropic' | 'gemini' | 'openrouter' | 'llmasaservice',\n): Record<string, unknown> {\n const raw = getRawProviderBody(asset, provider);\n return raw ? { ...body, ...raw } : body;\n}\n\nfunction getRawProviderBody(\n asset: ResolvedPromptAsset,\n provider: 'openai' | 'openai-responses' | 'anthropic' | 'gemini' | 'openrouter' | 'llmasaservice',\n): Record<string, unknown> | undefined {\n if (provider === 'openai-responses') {\n return asset.raw?.['openai-responses'] ?? asset.raw?.openai_responses;\n }\n if (provider === 'gemini') {\n return asset.raw?.gemini ?? asset.raw?.google;\n }\n return asset.raw?.[provider];\n}\n"],"mappings":"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","names":["collected","size","candidate","readFile","statSync","resolve","resolve","statSync","readFile","info","compacted"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
openaiAdapter
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-3G3EAV7H.js";
|
|
4
4
|
import {
|
|
5
5
|
applyRawProviderBody,
|
|
6
6
|
resolveAssetForProvider,
|
|
7
7
|
withPromptInputSupport
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-F552OBUV.js";
|
|
9
9
|
|
|
10
10
|
// src/providers/llmasaservice.ts
|
|
11
11
|
var LLMASASERVICE_BASE_URL = "https://gateway.llmasaservice.io";
|
|
@@ -127,4 +127,4 @@ export {
|
|
|
127
127
|
createLLMAsAServiceOpenAIConfig,
|
|
128
128
|
llmasaserviceAdapter
|
|
129
129
|
};
|
|
130
|
-
//# sourceMappingURL=chunk-
|
|
130
|
+
//# sourceMappingURL=chunk-FICB2ZSK.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
renderSections,
|
|
5
5
|
resolveAssetForProvider,
|
|
6
6
|
withPromptInputSupport
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-F552OBUV.js";
|
|
8
8
|
|
|
9
9
|
// src/providers/openai-responses.ts
|
|
10
10
|
var openaiResponsesAdapter = withPromptInputSupport({
|
|
@@ -112,4 +112,4 @@ var openaiResponsesAdapter = withPromptInputSupport({
|
|
|
112
112
|
export {
|
|
113
113
|
openaiResponsesAdapter
|
|
114
114
|
};
|
|
115
|
-
//# sourceMappingURL=chunk-
|
|
115
|
+
//# sourceMappingURL=chunk-OWMP5NMV.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
openaiAdapter
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-3G3EAV7H.js";
|
|
4
4
|
import {
|
|
5
5
|
applyRawProviderBody,
|
|
6
6
|
resolveAssetForProvider,
|
|
7
7
|
withPromptInputSupport
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-F552OBUV.js";
|
|
9
9
|
|
|
10
10
|
// src/providers/openrouter.ts
|
|
11
11
|
var openrouterAdapter = withPromptInputSupport({
|
|
@@ -58,4 +58,4 @@ var openrouterAdapter = withPromptInputSupport({
|
|
|
58
58
|
export {
|
|
59
59
|
openrouterAdapter
|
|
60
60
|
};
|
|
61
|
-
//# sourceMappingURL=chunk-
|
|
61
|
+
//# sourceMappingURL=chunk-R65RAHAG.js.map
|
|
@@ -100,6 +100,14 @@ var RawProviderBodySchema = z.object({
|
|
|
100
100
|
openrouter: z.record(z.unknown()).optional(),
|
|
101
101
|
llmasaservice: z.record(z.unknown()).optional()
|
|
102
102
|
});
|
|
103
|
+
var TheTokenCompanyCompressionSchema = z.object({
|
|
104
|
+
enabled: z.boolean().optional(),
|
|
105
|
+
model: z.string().min(1).optional(),
|
|
106
|
+
aggressiveness: z.number().min(0).max(1).optional()
|
|
107
|
+
});
|
|
108
|
+
var CompressionSchema = z.object({
|
|
109
|
+
thetokencompany: TheTokenCompanyCompressionSchema.optional()
|
|
110
|
+
});
|
|
103
111
|
var OpenAICacheSchema = z.object({
|
|
104
112
|
prompt_cache_key: z.string().min(1).optional(),
|
|
105
113
|
retention: z.enum(["in_memory", "24h"]).optional()
|
|
@@ -172,6 +180,7 @@ var PromptAssetOverridesSchema = z.object({
|
|
|
172
180
|
reasoning: ReasoningSchema.optional(),
|
|
173
181
|
sampling: SamplingSchema.optional(),
|
|
174
182
|
response: ResponseSchemaWithValidation.optional(),
|
|
183
|
+
compression: CompressionSchema.optional(),
|
|
175
184
|
cache: CacheSchema.optional(),
|
|
176
185
|
raw: RawProviderBodySchema.optional(),
|
|
177
186
|
tools: z.array(ToolRefSchema).optional(),
|
|
@@ -193,6 +202,7 @@ var PromptDefaultsSchema = z.object({
|
|
|
193
202
|
reasoning: ReasoningSchema.optional(),
|
|
194
203
|
sampling: SamplingSchema.optional(),
|
|
195
204
|
response: ResponseSchema.optional(),
|
|
205
|
+
compression: CompressionSchema.optional(),
|
|
196
206
|
cache: CacheSchema.optional(),
|
|
197
207
|
raw: RawProviderBodySchema.optional(),
|
|
198
208
|
tools: z.array(ToolRefSchema).optional(),
|
|
@@ -217,6 +227,7 @@ var PromptAssetSchema = z.object({
|
|
|
217
227
|
reasoning: ReasoningSchema.optional(),
|
|
218
228
|
sampling: SamplingSchema.optional(),
|
|
219
229
|
response: ResponseSchemaWithValidation.optional(),
|
|
230
|
+
compression: CompressionSchema.optional(),
|
|
220
231
|
cache: CacheSchema.optional(),
|
|
221
232
|
raw: RawProviderBodySchema.optional(),
|
|
222
233
|
tools: z.array(ToolRefSchema).optional(),
|
|
@@ -580,6 +591,7 @@ function mergeDefaults(base, local) {
|
|
|
580
591
|
reasoning: mergeRecordBlock(base.reasoning, local.reasoning),
|
|
581
592
|
sampling: mergeRecordBlock(base.sampling, local.sampling),
|
|
582
593
|
response: mergeRecordBlock(base.response, local.response),
|
|
594
|
+
compression: mergeCompression(base.compression, local.compression),
|
|
583
595
|
cache: mergeCache(base.cache, local.cache),
|
|
584
596
|
raw: mergeRaw(base.raw, local.raw),
|
|
585
597
|
tools: local.tools ?? base.tools,
|
|
@@ -600,6 +612,7 @@ function mergeDefaults(base, local) {
|
|
|
600
612
|
};
|
|
601
613
|
}
|
|
602
614
|
function applyDefaults(asset, defaults) {
|
|
615
|
+
const compression = mergeCompression(defaults.compression, asset.compression);
|
|
603
616
|
const cache = mergeCache(defaults.cache, asset.cache);
|
|
604
617
|
const raw = mergeRaw(defaults.raw, asset.raw);
|
|
605
618
|
const providerOptions = mergeProviderOptions(defaults.provider_options, asset.provider_options);
|
|
@@ -613,7 +626,7 @@ function applyDefaults(asset, defaults) {
|
|
|
613
626
|
const hasDefaultMetadata = defaults.metadata && Object.keys(defaults.metadata).length > 0;
|
|
614
627
|
const hasDefaultSystem = !!defaults.sections?.system_instructions;
|
|
615
628
|
const hasDefaultScalars = defaults.provider !== void 0 || defaults.model !== void 0 || defaults.fallback_models !== void 0 || defaults.tools !== void 0 || defaults.includes !== void 0;
|
|
616
|
-
const hasDefaultObjects = cache !== void 0 || raw !== void 0 || providerOptions !== void 0 || reasoning !== void 0 || sampling !== void 0 || response !== void 0 || mcp !== void 0 || context !== void 0 || environments !== void 0 || tiers !== void 0;
|
|
629
|
+
const hasDefaultObjects = compression !== void 0 || cache !== void 0 || raw !== void 0 || providerOptions !== void 0 || reasoning !== void 0 || sampling !== void 0 || response !== void 0 || mcp !== void 0 || context !== void 0 || environments !== void 0 || tiers !== void 0;
|
|
617
630
|
if (!hasDefaultMetadata && !hasDefaultSystem && !hasDefaultScalars && !hasDefaultObjects) {
|
|
618
631
|
return asset;
|
|
619
632
|
}
|
|
@@ -632,6 +645,7 @@ function applyDefaults(asset, defaults) {
|
|
|
632
645
|
reasoning,
|
|
633
646
|
sampling,
|
|
634
647
|
response,
|
|
648
|
+
compression,
|
|
635
649
|
cache,
|
|
636
650
|
raw,
|
|
637
651
|
tools: asset.tools ?? defaults.tools,
|
|
@@ -701,6 +715,15 @@ function mergeCache(base, local) {
|
|
|
701
715
|
if (merged.google && Object.keys(merged.google).length === 0) delete merged.google;
|
|
702
716
|
return Object.keys(merged).length > 0 ? merged : void 0;
|
|
703
717
|
}
|
|
718
|
+
function mergeCompression(base, local) {
|
|
719
|
+
const merged = {
|
|
720
|
+
...base ?? {},
|
|
721
|
+
...local ?? {},
|
|
722
|
+
thetokencompany: mergeRecordBlock(base?.thetokencompany, local?.thetokencompany)
|
|
723
|
+
};
|
|
724
|
+
removeEmptyProviderBlocks(merged);
|
|
725
|
+
return Object.keys(merged).length > 0 ? merged : void 0;
|
|
726
|
+
}
|
|
704
727
|
function mergeRaw(base, local) {
|
|
705
728
|
const merged = {
|
|
706
729
|
...base ?? {},
|
|
@@ -744,12 +767,14 @@ function mergeOverrideConfig(base, local) {
|
|
|
744
767
|
const reasoning = mergeRecordBlock(base?.reasoning, local.reasoning);
|
|
745
768
|
const sampling = mergeRecordBlock(base?.sampling, local.sampling);
|
|
746
769
|
const response = mergeRecordBlock(base?.response, local.response);
|
|
770
|
+
const compression = mergeCompression(base?.compression, local.compression);
|
|
747
771
|
const cache = mergeCache(base?.cache, local.cache);
|
|
748
772
|
const raw = mergeRaw(base?.raw, local.raw);
|
|
749
773
|
const providerOptions = mergeProviderOptions(base?.provider_options, local.provider_options);
|
|
750
774
|
if (reasoning !== void 0) merged.reasoning = reasoning;
|
|
751
775
|
if (sampling !== void 0) merged.sampling = sampling;
|
|
752
776
|
if (response !== void 0) merged.response = response;
|
|
777
|
+
if (compression !== void 0) merged.compression = compression;
|
|
753
778
|
if (cache !== void 0) merged.cache = cache;
|
|
754
779
|
if (raw !== void 0) merged.raw = raw;
|
|
755
780
|
if (providerOptions !== void 0) merged.provider_options = providerOptions;
|
|
@@ -775,4 +800,4 @@ export {
|
|
|
775
800
|
parsePrompt,
|
|
776
801
|
loadPromptFile
|
|
777
802
|
};
|
|
778
|
-
//# sourceMappingURL=chunk-
|
|
803
|
+
//# sourceMappingURL=chunk-ULVY473P.js.map
|