promptopskit 0.9.2 → 0.10.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.
Files changed (66) hide show
  1. package/README.md +8 -6
  2. package/SKILL.md +5 -4
  3. package/dist/{chunk-6ICAKKV3.js → chunk-46Z64RVO.js} +2 -2
  4. package/dist/{chunk-DAJMCV4F.js → chunk-7XLJOH2K.js} +3 -3
  5. package/dist/{chunk-VOXMOGU5.js → chunk-ALBSFXYR.js} +2 -1
  6. package/dist/chunk-ALBSFXYR.js.map +1 -0
  7. package/dist/{chunk-CGBEKODU.js → chunk-IGLKVT74.js} +2 -2
  8. package/dist/{chunk-YLJGWVZ6.js → chunk-PSQWMBKX.js} +21 -21
  9. package/dist/chunk-PSQWMBKX.js.map +1 -0
  10. package/dist/{chunk-A2VPKL4X.js → chunk-QVJTND5A.js} +2 -2
  11. package/dist/{chunk-XSSET4QN.js → chunk-UULXO5I6.js} +2 -2
  12. package/dist/{chunk-DA2NSBIN.js → chunk-VUQEB5ML.js} +2 -2
  13. package/dist/cli/index.js +1 -0
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/index.cjs +22 -20
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.d.cts +5 -3
  18. package/dist/index.d.ts +5 -3
  19. package/dist/index.js +11 -11
  20. package/dist/index.js.map +1 -1
  21. package/dist/providers/anthropic.cjs +1 -0
  22. package/dist/providers/anthropic.cjs.map +1 -1
  23. package/dist/providers/anthropic.d.cts +1 -1
  24. package/dist/providers/anthropic.d.ts +1 -1
  25. package/dist/providers/anthropic.js +3 -3
  26. package/dist/providers/gemini.cjs +1 -0
  27. package/dist/providers/gemini.cjs.map +1 -1
  28. package/dist/providers/gemini.d.cts +1 -1
  29. package/dist/providers/gemini.d.ts +1 -1
  30. package/dist/providers/gemini.js +3 -3
  31. package/dist/providers/llmasaservice.cjs +19 -19
  32. package/dist/providers/llmasaservice.cjs.map +1 -1
  33. package/dist/providers/llmasaservice.d.cts +6 -5
  34. package/dist/providers/llmasaservice.d.ts +6 -5
  35. package/dist/providers/llmasaservice.js +4 -6
  36. package/dist/providers/openai-responses.cjs +1 -0
  37. package/dist/providers/openai-responses.cjs.map +1 -1
  38. package/dist/providers/openai-responses.d.cts +1 -1
  39. package/dist/providers/openai-responses.d.ts +1 -1
  40. package/dist/providers/openai-responses.js +3 -3
  41. package/dist/providers/openai.cjs +1 -0
  42. package/dist/providers/openai.cjs.map +1 -1
  43. package/dist/providers/openai.d.cts +1 -1
  44. package/dist/providers/openai.d.ts +1 -1
  45. package/dist/providers/openai.js +3 -3
  46. package/dist/providers/openrouter.cjs +1 -0
  47. package/dist/providers/openrouter.cjs.map +1 -1
  48. package/dist/providers/openrouter.d.cts +1 -1
  49. package/dist/providers/openrouter.d.ts +1 -1
  50. package/dist/providers/openrouter.js +4 -4
  51. package/dist/testing.cjs +1 -0
  52. package/dist/testing.cjs.map +1 -1
  53. package/dist/testing.js +1 -1
  54. package/dist/{types-D6VJJo1x.d.ts → types-9Jv8eHhM.d.ts} +8 -1
  55. package/dist/{types-B4TWRzUY.d.cts → types-D3MemVmM.d.cts} +8 -1
  56. package/dist/usagetap/index.d.cts +1 -1
  57. package/dist/usagetap/index.d.ts +1 -1
  58. package/package.json +1 -1
  59. package/dist/chunk-VOXMOGU5.js.map +0 -1
  60. package/dist/chunk-YLJGWVZ6.js.map +0 -1
  61. /package/dist/{chunk-6ICAKKV3.js.map → chunk-46Z64RVO.js.map} +0 -0
  62. /package/dist/{chunk-DAJMCV4F.js.map → chunk-7XLJOH2K.js.map} +0 -0
  63. /package/dist/{chunk-CGBEKODU.js.map → chunk-IGLKVT74.js.map} +0 -0
  64. /package/dist/{chunk-A2VPKL4X.js.map → chunk-QVJTND5A.js.map} +0 -0
  65. /package/dist/{chunk-XSSET4QN.js.map → chunk-UULXO5I6.js.map} +0 -0
  66. /package/dist/{chunk-DA2NSBIN.js.map → chunk-VUQEB5ML.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/providers/anthropic.ts","../../src/renderer/interpolate.ts","../../src/context.ts","../../src/toon-encoding.ts","../../src/token-compression.ts","../../src/code-compaction.ts","../../src/renderer/renderer.ts","../../src/overrides/apply-overrides.ts","../../src/providers/resolve-asset.ts","../../src/prompt-resolution.ts","../../src/cache.ts","../../src/composition/resolve-includes.ts","../../src/parser/parser.ts","../../src/schema/schema.ts","../../src/parser/frontmatter-guard.ts","../../src/parser/sections.ts","../../src/parser/loader.ts","../../src/parser/response-schema-ref.ts","../../src/history.ts","../../src/compression.ts","../../src/providers/prompt-input.ts","../../src/providers/raw.ts"],"sourcesContent":["import type { ResolvedPromptAsset } from '../schema/index.js';\nimport type {\n ProviderAdapter,\n ProviderRequest,\n ValidationResult,\n RuntimeRenderOptions,\n} from './types.js';\nimport { renderSections } from '../renderer/index.js';\nimport { resolveAssetForProvider } from './resolve-asset.js';\nimport { withPromptInputSupport } from './prompt-input.js';\nimport { applyRawProviderBody } from './raw.js';\nimport { compactHistoryForPrompt } from '../history.js';\n\n/**\n * Anthropic provider adapter.\n * Produces request bodies compatible with the Anthropic Messages API.\n */\nexport const anthropicAdapter: ProviderAdapter = withPromptInputSupport({\n name: 'anthropic',\n\n validate(asset: ResolvedPromptAsset, runtime?: RuntimeRenderOptions): ValidationResult {\n const resolvedAsset = resolveAssetForProvider(asset, runtime);\n const errors: string[] = [];\n const warnings: string[] = [];\n\n if (!resolvedAsset.model) {\n errors.push('Anthropic adapter requires a model to be specified.');\n }\n\n if (resolvedAsset.sampling?.frequency_penalty !== undefined) {\n warnings.push('Anthropic does not support frequency_penalty. It will be ignored.');\n }\n if (resolvedAsset.sampling?.presence_penalty !== undefined) {\n warnings.push('Anthropic does not support presence_penalty. It will be ignored.');\n }\n if (resolvedAsset.reasoning?.effort !== undefined) {\n warnings.push('Anthropic uses budget_tokens for thinking, not effort. effort will be mapped approximately.');\n }\n if (resolvedAsset.response?.schema !== undefined && resolvedAsset.response?.format !== 'json') {\n warnings.push('Anthropic response.schema is mapped to output_config.format and should usually be paired with response.format: json.');\n }\n\n if (resolvedAsset.provider_options?.anthropic?.top_k !== undefined && resolvedAsset.provider_options.anthropic.top_k < 0) {\n errors.push('Anthropic provider_options.top_k must be >= 0.');\n }\n\n return { valid: errors.length === 0, errors, warnings };\n },\n\n render(asset: ResolvedPromptAsset, runtime: RuntimeRenderOptions): ProviderRequest {\n const resolvedAsset = resolveAssetForProvider(asset, runtime);\n const sections = renderSections(resolvedAsset, {\n variables: runtime.variables,\n strict: runtime.strict,\n });\n\n const messages: Array<Record<string, unknown>> = [];\n const anthropicCacheConfig = resolvedAsset.cache?.anthropic;\n const cacheType = anthropicCacheConfig?.type ?? 'ephemeral';\n const cacheControl = anthropicCacheConfig\n ? {\n type: cacheType,\n ...(anthropicCacheConfig.ttl ? { ttl: anthropicCacheConfig.ttl } : {}),\n }\n : undefined;\n const cacheMode = anthropicCacheConfig?.mode ?? 'automatic';\n\n // History\n const history = compactHistoryForPrompt(resolvedAsset, runtime);\n if (history) {\n for (const msg of history) {\n messages.push({ role: msg.role, content: msg.content });\n }\n }\n\n // User message (prompt template)\n if (sections.prompt_template) {\n if (cacheControl && cacheMode === 'explicit' && anthropicCacheConfig?.cache_prompt_template) {\n messages.push({\n role: 'user',\n content: [{ type: 'text', text: sections.prompt_template, cache_control: cacheControl }],\n });\n } else {\n messages.push({ role: 'user', content: sections.prompt_template });\n }\n }\n\n const body: Record<string, unknown> = {\n model: resolvedAsset.model,\n messages,\n };\n\n // System goes as top-level field in Anthropic\n if (sections.system_instructions) {\n if (cacheControl && cacheMode === 'explicit' && anthropicCacheConfig?.cache_system_instructions !== false) {\n body.system = [{ type: 'text', text: sections.system_instructions, cache_control: cacheControl }];\n } else {\n body.system = sections.system_instructions;\n }\n }\n\n // Sampling params\n if (resolvedAsset.sampling?.temperature !== undefined) body.temperature = resolvedAsset.sampling.temperature;\n if (resolvedAsset.sampling?.top_p !== undefined) body.top_p = resolvedAsset.sampling.top_p;\n if (resolvedAsset.sampling?.stop !== undefined) body.stop_sequences = resolvedAsset.sampling.stop;\n if (resolvedAsset.sampling?.max_output_tokens !== undefined) {\n body.max_tokens = resolvedAsset.sampling.max_output_tokens;\n } else {\n // Anthropic requires max_tokens\n body.max_tokens = 4096;\n }\n\n // Thinking/reasoning\n if (resolvedAsset.reasoning?.budget_tokens) {\n body.thinking = {\n type: 'enabled',\n budget_tokens: resolvedAsset.reasoning.budget_tokens,\n };\n }\n\n // Provider-specific options\n if (resolvedAsset.provider_options?.anthropic?.top_k !== undefined) {\n body.top_k = resolvedAsset.provider_options.anthropic.top_k;\n }\n\n if (resolvedAsset.provider_options?.anthropic?.output_config !== undefined) {\n body.output_config = resolvedAsset.provider_options.anthropic.output_config;\n } else if (resolvedAsset.response?.schema !== undefined) {\n body.output_config = {\n format: {\n type: 'json_schema',\n schema: resolvedAsset.response.schema,\n },\n };\n }\n\n // Streaming\n if (resolvedAsset.response?.stream !== undefined) {\n body.stream = resolvedAsset.response.stream;\n }\n\n if (cacheControl && cacheMode === 'automatic') {\n body.cache_control = cacheControl;\n }\n\n // Tools\n if (resolvedAsset.tools && resolvedAsset.tools.length > 0) {\n body.tools = resolvedAsset.tools.map((tool) => {\n if (typeof tool === 'string') {\n const def = runtime.toolRegistry?.[tool];\n if (def) {\n if (cacheControl && cacheMode === 'explicit' && anthropicCacheConfig?.cache_tools) {\n return { ...(def as Record<string, unknown>), cache_control: cacheControl };\n }\n return def;\n }\n return {\n name: tool,\n ...(cacheControl && cacheMode === 'explicit' && anthropicCacheConfig?.cache_tools\n ? { cache_control: cacheControl }\n : {}),\n };\n }\n return {\n name: tool.name,\n description: tool.description,\n input_schema: tool.input_schema ?? { type: 'object', properties: {} },\n ...(cacheControl && cacheMode === 'explicit' && anthropicCacheConfig?.cache_tools\n ? { cache_control: cacheControl }\n : {}),\n };\n });\n }\n\n if (resolvedAsset.provider_options?.anthropic?.tool_choice !== undefined) {\n body.tool_choice = resolvedAsset.provider_options.anthropic.tool_choice;\n }\n\n return {\n body: applyRawProviderBody(body, resolvedAsset, 'anthropic'),\n provider: 'anthropic',\n model: resolvedAsset.model ?? 'unknown',\n };\n },\n});\n","export interface InterpolateOptions {\n strict?: boolean;\n optionalVariables?: Iterable<string>;\n transformVariable?: (context: InterpolateVariableContext) => string;\n}\n\nexport interface InterpolateVariableContext {\n name: string;\n value: string;\n modifier?: 'compress' | 'toon' | 'compact' | 'code';\n match: string;\n}\n\nconst VARIABLE_RE = /\\{\\{\\s*([a-zA-Z_][a-zA-Z0-9_]*)(?:\\s*\\|\\s*(compress|toon|compact|code))?\\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, modifier: 'compress' | 'toon' | 'compact' | 'code' | undefined) => {\n if (name in variables) {\n const value = variables[name];\n return options.transformVariable\n ? options.transformVariable({ name, value, modifier, match })\n : value;\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 CodeCompaction,\n PromptAsset,\n ResolvedPromptAsset,\n ContextBuiltInValidatorDefinition,\n ContextInputCompression,\n ContextInputDefinition,\n ContextRegexDefinition,\n} from './schema/index.js';\nimport type { HeuristicCompressionOptions } from './token-compression.js';\nimport type { CodeCompactionOptions } from './code-compaction.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 compression?: NormalizedContextInputCompression;\n allow_regex?: NormalizedContextRegex;\n deny_regex?: NormalizedContextRegex;\n non_empty?: NormalizedContextBuiltInValidator;\n reject_secrets?: NormalizedContextBuiltInValidator;\n}\n\nexport interface NormalizedContextInputCompression {\n heuristic?: HeuristicCompressionOptions & {\n enabled?: boolean;\n query_variable?: string;\n };\n code?: CodeCompactionOptions;\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 compression: normalizeContextInputCompression(input.compression),\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 normalizeContextInputCompression(\n value: ContextInputCompression | undefined,\n): NormalizedContextInputCompression | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (value === 'heuristic') {\n return { heuristic: { enabled: true } };\n }\n\n if (value === 'code') {\n return { code: { enabled: true } };\n }\n\n if (value.heuristic === undefined) {\n return normalizeCodeCompression(value.code);\n }\n\n const normalized: NormalizedContextInputCompression = {\n heuristic: {\n enabled: value.heuristic.enabled ?? true,\n min_tokens: value.heuristic.min_tokens,\n max_sentences: value.heuristic.max_sentences,\n target_reduction: value.heuristic.target_reduction,\n query: value.heuristic.query,\n query_variable: value.heuristic.query_variable,\n json_to_toon: value.heuristic.json_to_toon,\n mode: value.heuristic.mode,\n preserve_neighbors: value.heuristic.preserve_neighbors,\n fail_on_low_confidence: value.heuristic.fail_on_low_confidence,\n },\n };\n\n const code = normalizeCodeCompression(value.code);\n if (code?.code) {\n normalized.code = code.code;\n }\n\n return normalized;\n}\n\nfunction normalizeCodeCompression(value: CodeCompaction | undefined): NormalizedContextInputCompression | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n return {\n code: {\n enabled: value.enabled ?? true,\n remove_comments: value.remove_comments,\n trim_indentation: value.trim_indentation,\n collapse_blank_lines: value.collapse_blank_lines,\n },\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","type JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue };\n\nexport interface ToonEncodeOptions {\n indent?: number;\n delimiter?: ',' | '\\t' | '|';\n}\n\nexport interface JsonToToonResult {\n output: string;\n value: JsonValue;\n}\n\nconst DEFAULT_INDENT = 2;\nconst DEFAULT_DELIMITER = ',';\n\nexport function tryJsonToToon(text: string, options: ToonEncodeOptions = {}): JsonToToonResult | undefined {\n const trimmed = text.trim();\n if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) {\n return undefined;\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed);\n } catch {\n return undefined;\n }\n\n const value = normalizeJsonValue(parsed);\n if (value === undefined) {\n return undefined;\n }\n\n return {\n output: encodeToon(value, options),\n value,\n };\n}\n\nexport function encodeToon(value: JsonValue, options: ToonEncodeOptions = {}): string {\n const resolved = {\n indent: options.indent ?? DEFAULT_INDENT,\n delimiter: options.delimiter ?? DEFAULT_DELIMITER,\n };\n\n return encodeValue(value, undefined, 0, resolved).join('\\n');\n}\n\nfunction normalizeJsonValue(value: unknown): JsonValue | undefined {\n if (value === null || typeof value === 'string' || typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : null;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => normalizeJsonValue(item) ?? null);\n }\n\n if (isPlainObject(value)) {\n const normalized: { [key: string]: JsonValue } = {};\n for (const [key, child] of Object.entries(value)) {\n normalized[key] = normalizeJsonValue(child) ?? null;\n }\n return normalized;\n }\n\n return undefined;\n}\n\nfunction encodeValue(\n value: JsonValue,\n key: string | undefined,\n depth: number,\n options: Required<ToonEncodeOptions>,\n): string[] {\n if (isPrimitive(value)) {\n return [line(depth, key === undefined ? encodePrimitive(value, options.delimiter) : `${encodeKey(key)}: ${encodePrimitive(value, options.delimiter)}`, options.indent)];\n }\n\n if (Array.isArray(value)) {\n return encodeArray(value, key, depth, options);\n }\n\n return encodeObject(value, key, depth, options);\n}\n\nfunction encodeObject(\n value: { [key: string]: JsonValue },\n key: string | undefined,\n depth: number,\n options: Required<ToonEncodeOptions>,\n): string[] {\n const entries = Object.entries(value);\n const lines: string[] = [];\n\n if (key !== undefined) {\n lines.push(line(depth, `${encodeKey(key)}:`, options.indent));\n }\n\n const childDepth = key === undefined ? depth : depth + 1;\n for (const [childKey, childValue] of entries) {\n lines.push(...encodeValue(childValue, childKey, childDepth, options));\n }\n\n return lines;\n}\n\nfunction encodeArray(\n value: JsonValue[],\n key: string | undefined,\n depth: number,\n options: Required<ToonEncodeOptions>,\n): string[] {\n const prefix = key === undefined ? '' : encodeKey(key);\n\n if (value.length === 0) {\n return [line(depth, key === undefined ? '[]' : `${prefix}: []`, options.indent)];\n }\n\n if (value.every(isPrimitive)) {\n const joined = value.map((item) => encodePrimitive(item, options.delimiter)).join(options.delimiter);\n return [line(depth, `${prefix}[${value.length}]: ${joined}`, options.indent)];\n }\n\n const tabularFields = getTabularFields(value);\n if (tabularFields) {\n const lines = [\n line(depth, `${prefix}[${value.length}]{${tabularFields.map(encodeKey).join(options.delimiter)}}:`, options.indent),\n ];\n for (const row of value as Array<{ [key: string]: JsonPrimitive }>) {\n lines.push(line(depth + 1, tabularFields.map((field) => encodePrimitive(row[field], options.delimiter)).join(options.delimiter), options.indent));\n }\n return lines;\n }\n\n const lines = [line(depth, `${prefix}[${value.length}]:`, options.indent)];\n for (const item of value) {\n lines.push(...encodeListItem(item, depth + 1, options));\n }\n return lines;\n}\n\nfunction encodeListItem(\n value: JsonValue,\n depth: number,\n options: Required<ToonEncodeOptions>,\n): string[] {\n if (isPrimitive(value)) {\n return [line(depth, `- ${encodePrimitive(value, options.delimiter)}`, options.indent)];\n }\n\n if (Array.isArray(value)) {\n const encoded = encodeArray(value, undefined, depth, options);\n return encoded.map((item, index) => {\n if (index === 0) {\n return line(depth, `- ${item.trimStart()}`, options.indent);\n }\n return item;\n });\n }\n\n const entries = Object.entries(value);\n if (entries.length === 0) {\n return [line(depth, '-', options.indent)];\n }\n\n const [firstKey, firstValue] = entries[0];\n const rest = Object.fromEntries(entries.slice(1)) as { [key: string]: JsonValue };\n const firstLines = encodeValue(firstValue, firstKey, depth, options);\n const lines = [line(depth, `- ${firstLines[0].trimStart()}`, options.indent)];\n\n for (const continuation of firstLines.slice(1)) {\n lines.push(continuation);\n }\n\n if (Object.keys(rest).length > 0) {\n lines.push(...encodeObject(rest, undefined, depth + 1, options));\n }\n\n return lines;\n}\n\nfunction getTabularFields(value: JsonValue[]): string[] | undefined {\n if (value.length === 0 || !value.every(isObjectRecord)) {\n return undefined;\n }\n\n const first = value[0] as { [key: string]: JsonValue };\n const fields = Object.keys(first);\n if (fields.length === 0) {\n return undefined;\n }\n\n for (const row of value as Array<{ [key: string]: JsonValue }>) {\n const keys = Object.keys(row);\n if (keys.length !== fields.length) {\n return undefined;\n }\n for (const field of fields) {\n if (!(field in row) || !isPrimitive(row[field])) {\n return undefined;\n }\n }\n }\n\n return fields;\n}\n\nfunction encodePrimitive(value: JsonPrimitive, delimiter: string): string {\n if (value === null) {\n return 'null';\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n return encodeString(value, delimiter);\n}\n\nfunction encodeString(value: string, delimiter: string): string {\n if (isSafeUnquotedString(value, delimiter)) {\n return value;\n }\n return JSON.stringify(value);\n}\n\nfunction encodeKey(key: string): string {\n if (/^[A-Z_][\\w.]*$/i.test(key)) {\n return key;\n }\n return JSON.stringify(key);\n}\n\nfunction isSafeUnquotedString(value: string, delimiter: string): boolean {\n if (value.length === 0 || value !== value.trim()) {\n return false;\n }\n if (/^(?:true|false|null)$/i.test(value) || /^-?\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?$/i.test(value) || /^0\\d+$/.test(value)) {\n return false;\n }\n if (value.includes(':') || value.includes('\"') || value.includes('\\\\') || value.includes(delimiter)) {\n return false;\n }\n if (/[[\\]{}]|[\\u0000-\\u001F]/.test(value) || value.startsWith('-')) {\n return false;\n }\n return true;\n}\n\nfunction isPrimitive(value: JsonValue): value is JsonPrimitive {\n return value === null || typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';\n}\n\nfunction isObjectRecord(value: JsonValue): value is { [key: string]: JsonValue } {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== 'object') {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n return prototype === null || prototype === Object.prototype;\n}\n\nfunction line(depth: number, content: string, indent: number): string {\n return `${' '.repeat(depth * indent)}${content}`;\n}\n","import { tryJsonToToon } from './toon-encoding.js';\n\nconst TOKEN_REGEX = /[\\p{L}\\p{N}]+|[^\\s]/gu;\nconst TOKEN_NORMALIZE_REGEX = /[^\\p{L}\\p{N}]/gu;\nconst DEDUPE_NORMALIZE_REGEX = /[^\\p{L}\\p{N}\\s]/gu;\nconst BOILERPLATE_REGEX = /copyright|all rights reserved|disclaimer/i;\nconst STRUCTURED_BLOCK_REGEX = /(^|\\n)\\s*```|(^|\\n)\\s*\\|.+\\|\\s*(\\n|$)/;\nconst PROTECTED_SIGNAL_REGEX = /\\b(?:must|shall|should|required|requires|requirement|never|do not|don't|only|except|unless|however|but|constraint|constraints|safety|security|deadline|sla)\\b|output\\s+format/i;\nconst EVIDENCE_SIGNAL_REGEX = /https?:\\/\\/|\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b|[$€£]\\s?\\d|\\b\\d+(?:[.,:/-]\\d+)*%?\\b|\\b[A-Z]{2,}[-_A-Z0-9]*\\b|\\b[A-Z]\\d\\b/i;\nconst MAX_SEGMENT_TOKENS = 120;\n\nconst STOP_WORDS = new Set([\n 'a', 'an', 'and', 'are', 'as', 'at', 'be', 'by', 'for', 'from', 'how', 'in', 'is', 'it',\n 'of', 'on', 'or', 'that', 'the', 'this', 'to', 'was', 'we', 'with', 'you', 'your', 'our',\n]);\n\nexport interface HeuristicCompressionOptions {\n min_tokens?: number;\n max_sentences?: number;\n target_reduction?: number;\n query?: string;\n json_to_toon?: boolean;\n mode?: 'conservative' | 'balanced';\n preserve_neighbors?: boolean;\n fail_on_low_confidence?: boolean;\n}\n\nexport interface HeuristicCompressionOutput {\n output: string;\n inputTokens: number;\n outputTokens: number;\n tokensSaved: number;\n compressionRatio: number;\n outputFormat?: 'toon';\n warnings?: string[];\n}\n\ninterface SentenceCandidate {\n sentence: string;\n index: number;\n tokenCount: number;\n uniqueTerms: Set<string>;\n isBoilerplate: boolean;\n isProtected: boolean;\n hasEvidence: boolean;\n}\n\ninterface ScoredSentenceCandidate {\n sentence: string;\n index: number;\n score: number;\n overlapCount: number;\n overlapTerms: string[];\n tokens: number;\n isProtected: boolean;\n hasEvidence: boolean;\n}\n\nconst DEFAULT_OPTIONS = {\n min_tokens: 80,\n max_sentences: 10,\n target_reduction: 0.45,\n mode: 'conservative' as const,\n};\n\nexport function tokenizeForHeuristicCompression(text: string | undefined): string[] {\n if (!text) {\n return [];\n }\n\n return text.match(TOKEN_REGEX) ?? [];\n}\n\nexport function estimateHeuristicTokens(text: string | undefined): number {\n return tokenizeForHeuristicCompression(text).length;\n}\n\nexport function compressHeuristicText(\n input: string,\n options: HeuristicCompressionOptions = {},\n): HeuristicCompressionOutput {\n const inputText = input ?? '';\n const inputTokens = estimateHeuristicTokens(inputText);\n\n if (options.json_to_toon === true) {\n const toonResult = tryJsonToToon(inputText);\n if (toonResult) {\n const toonOutputTokens = estimateHeuristicTokens(toonResult.output);\n if (toonOutputTokens <= inputTokens) {\n return {\n ...toCompressionOutput(toonResult.output, inputTokens),\n outputFormat: 'toon',\n };\n }\n\n return {\n ...toCompressionOutput(inputText, inputTokens),\n warnings: ['JSON-to-TOON skipped because TOON was not smaller than the original JSON.'],\n };\n }\n\n return {\n ...toCompressionOutput(inputText, inputTokens),\n warnings: ['JSON-to-TOON skipped because the input is not a complete valid JSON object or array.'],\n };\n }\n\n if (inputTokens === 0) {\n return toCompressionOutput(inputText, inputTokens);\n }\n\n const mode = options.mode ?? DEFAULT_OPTIONS.mode;\n const isConservative = mode === 'conservative';\n const failOnLowConfidence = options.fail_on_low_confidence ?? isConservative;\n const preserveNeighbors = options.preserve_neighbors ?? isConservative;\n\n const minTokens = options.min_tokens ?? DEFAULT_OPTIONS.min_tokens;\n if (inputTokens <= minTokens) {\n return toCompressionOutput(inputText, inputTokens);\n }\n\n if (isConservative && looksStructured(inputText)) {\n return toCompressionOutput(inputText, inputTokens, [\n 'Heuristic compression skipped because the input appears to contain structured blocks; use TOON or code compaction for structured content.',\n ]);\n }\n\n const analysis = preprocessContext(inputText);\n\n const targetReduction = options.target_reduction ?? DEFAULT_OPTIONS.target_reduction;\n const targetTokens = Math.max(1, Math.max(minTokens, Math.floor(inputTokens * (1 - targetReduction))));\n const maxSentences = options.max_sentences ?? DEFAULT_OPTIONS.max_sentences;\n const query = options.query ?? '';\n const terms = queryTerms(query);\n\n if (failOnLowConfidence && terms.size === 0) {\n return toCompressionOutput(inputText, inputTokens, [\n 'Heuristic compression skipped because no usable relevance query terms were available.',\n ]);\n }\n\n const scoredSentences = analysis.candidates.map((candidate) => ({\n sentence: candidate.sentence,\n index: candidate.index,\n ...scoreSentenceCandidate(candidate, terms),\n tokens: candidate.tokenCount,\n isProtected: candidate.isProtected,\n hasEvidence: candidate.hasEvidence,\n }));\n\n if (\n failOnLowConfidence\n && terms.size > 0\n && !scoredSentences.some((candidate) => candidate.overlapCount > 0)\n ) {\n return toCompressionOutput(inputText, inputTokens, [\n 'Heuristic compression skipped because no sentence matched the relevance query.',\n ]);\n }\n\n const selected: ScoredSentenceCandidate[] = [];\n const selectedIndices = new Set<number>();\n const coveredTerms = new Set<string>();\n let selectedTokens = 0;\n\n while (selected.length < maxSentences) {\n let bestCandidate: ScoredSentenceCandidate | undefined;\n let bestAdjustedScore = Number.NEGATIVE_INFINITY;\n\n for (const candidate of scoredSentences) {\n if (selectedIndices.has(candidate.index)) {\n continue;\n }\n\n const underBudget = selectedTokens + candidate.tokens <= targetTokens;\n const forceTopCandidate = selected.length === 0;\n const forceRelevantSecond = selected.length === 1 && candidate.overlapCount > 0;\n\n if (!underBudget && !forceTopCandidate && !forceRelevantSecond) {\n continue;\n }\n\n let uncoveredOverlapCount = 0;\n for (const term of candidate.overlapTerms) {\n if (!coveredTerms.has(term)) {\n uncoveredOverlapCount += 1;\n }\n }\n\n const adjustedScore = candidate.score + uncoveredOverlapCount * 1.2;\n\n if (\n adjustedScore > bestAdjustedScore\n || (\n adjustedScore === bestAdjustedScore\n && bestCandidate\n && isBetterTieBreak(candidate, bestCandidate)\n )\n ) {\n bestAdjustedScore = adjustedScore;\n bestCandidate = candidate;\n }\n }\n\n if (!bestCandidate) {\n break;\n }\n\n selected.push(bestCandidate);\n selectedIndices.add(bestCandidate.index);\n selectedTokens += bestCandidate.tokens;\n\n for (const term of bestCandidate.overlapTerms) {\n coveredTerms.add(term);\n }\n }\n\n const finalSelection = preserveNeighbors\n ? expandSelectionWithNeighbors(selected, scoredSentences, maxSentences)\n : selected;\n\n finalSelection.sort((left, right) => left.index - right.index);\n\n let output = finalSelection.map((item) => item.sentence).join(' ');\n\n if (!output) {\n output = takeWholeCandidatesWithinBudget(analysis.candidates, targetTokens) || inputText;\n }\n\n return toCompressionOutput(output, inputTokens);\n}\n\nfunction toCompressionOutput(\n output: string,\n inputTokens: number,\n warnings: string[] = [],\n): HeuristicCompressionOutput {\n const outputTokens = estimateHeuristicTokens(output);\n const tokensSaved = Math.max(0, inputTokens - outputTokens);\n\n return {\n output,\n inputTokens,\n outputTokens,\n tokensSaved,\n compressionRatio: outputTokens === 0 ? 0 : inputTokens / outputTokens,\n ...(warnings.length > 0 ? { warnings } : {}),\n };\n}\n\nfunction isBetterTieBreak(\n candidate: ScoredSentenceCandidate,\n bestCandidate: ScoredSentenceCandidate,\n): boolean {\n if (candidate.overlapCount !== bestCandidate.overlapCount) {\n return candidate.overlapCount > bestCandidate.overlapCount;\n }\n if (candidate.tokens !== bestCandidate.tokens) {\n return candidate.tokens < bestCandidate.tokens;\n }\n return candidate.index < bestCandidate.index;\n}\n\nfunction normalizeForDeduping(sentence: string): string {\n return sentence\n .toLowerCase()\n .replace(DEDUPE_NORMALIZE_REGEX, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\nfunction splitIntoSentences(text: string): string[] {\n return text\n .split(/(?<=[.!?])\\s+|\\n+/g)\n .map((sentence) => sentence.trim())\n .filter(Boolean);\n}\n\nfunction splitOversizedSentence(sentence: string, maxTokens = MAX_SEGMENT_TOKENS): string[] {\n const rawTokens = tokenizeForHeuristicCompression(sentence);\n if (rawTokens.length <= maxTokens) {\n return [sentence];\n }\n\n const commaSplit = sentence\n .split(/(?<=[,;:])\\s+|\\s+-\\s+/g)\n .map((segment) => segment.trim())\n .filter(Boolean);\n\n if (commaSplit.length > 1) {\n return commaSplit.flatMap((segment) => {\n if (estimateHeuristicTokens(segment) <= maxTokens) {\n return [segment];\n }\n return [segment];\n });\n }\n\n return [sentence];\n}\n\nfunction normalizeToken(token: string): string {\n return token.replace(TOKEN_NORMALIZE_REGEX, '').trim();\n}\n\nfunction tokenizeNormalized(text: string): string[] {\n return tokenizeForHeuristicCompression(text.toLowerCase())\n .map(normalizeToken)\n .filter(Boolean);\n}\n\nfunction queryTerms(query: string): Set<string> {\n return new Set(tokenizeNormalized(query).filter((term) => {\n if (STOP_WORDS.has(term)) {\n return false;\n }\n return term.length >= 3 || /^(?:[a-z]\\d|\\d+[a-z]?|[a-z]{2})$/i.test(term);\n }));\n}\n\nfunction preprocessContext(context: string): { originalTokens: number; candidates: SentenceCandidate[] } {\n const originalTokens = estimateHeuristicTokens(context);\n const candidates: SentenceCandidate[] = [];\n let previousNormalized = '';\n\n for (const sentence of splitIntoSentences(context)) {\n for (const segment of splitOversizedSentence(sentence)) {\n const normalized = normalizeForDeduping(segment);\n if (!normalized || normalized === previousNormalized) {\n continue;\n }\n\n previousNormalized = normalized;\n\n const rawTokens = tokenizeForHeuristicCompression(segment);\n const normalizedTerms = rawTokens\n .map((token) => normalizeToken(token.toLowerCase()))\n .filter(Boolean);\n const lowered = segment.toLowerCase();\n\n candidates.push({\n sentence: segment,\n index: candidates.length,\n tokenCount: rawTokens.length,\n uniqueTerms: new Set(normalizedTerms),\n isBoilerplate: BOILERPLATE_REGEX.test(lowered),\n isProtected: PROTECTED_SIGNAL_REGEX.test(segment),\n hasEvidence: EVIDENCE_SIGNAL_REGEX.test(segment),\n });\n }\n }\n\n return { originalTokens, candidates };\n}\n\nfunction scoreSentenceCandidate(\n candidate: SentenceCandidate,\n terms: Set<string>,\n): { score: number; overlapCount: number; overlapTerms: string[] } {\n if (candidate.tokenCount === 0) {\n return {\n score: 0,\n overlapCount: 0,\n overlapTerms: [],\n };\n }\n\n const overlapTerms: string[] = [];\n let overlap = 0;\n\n for (const term of terms) {\n if (candidate.uniqueTerms.has(term)) {\n overlap += 1;\n overlapTerms.push(term);\n }\n }\n\n const overlapScore = overlap * 2;\n const densityScore = terms.size > 0 ? overlap / terms.size : 0;\n const lengthScore = Math.min(candidate.tokenCount, 40) / 40;\n const boilerplatePenalty = candidate.isBoilerplate ? 0.5 : 0;\n const protectedScore = candidate.isProtected ? 0.9 : 0;\n const evidenceScore = candidate.hasEvidence ? 0.4 : 0;\n\n return {\n score: overlapScore + densityScore + lengthScore + protectedScore + evidenceScore - boilerplatePenalty,\n overlapCount: overlap,\n overlapTerms,\n };\n}\n\nfunction looksStructured(text: string): boolean {\n if (STRUCTURED_BLOCK_REGEX.test(text)) {\n return true;\n }\n\n const lines = text.split(/\\r?\\n/).map((line) => line.trim()).filter(Boolean);\n if (lines.length < 3) {\n return false;\n }\n\n const listLikeLines = lines.filter((line) => /^[-*+] |\\d+[.)] /.test(line)).length;\n return listLikeLines >= 3 && listLikeLines / lines.length >= 0.6;\n}\n\nfunction expandSelectionWithNeighbors(\n selected: ScoredSentenceCandidate[],\n scoredSentences: ScoredSentenceCandidate[],\n maxSentences: number,\n): ScoredSentenceCandidate[] {\n if (selected.length === 0 || selected.length >= maxSentences) {\n return selected;\n }\n\n const byIndex = new Map(scoredSentences.map((candidate) => [candidate.index, candidate]));\n const expanded = new Map(selected.map((candidate) => [candidate.index, candidate]));\n\n for (const candidate of selected) {\n if (expanded.size >= maxSentences) {\n break;\n }\n\n if (candidate.overlapCount === 0 && !candidate.isProtected && !candidate.hasEvidence) {\n continue;\n }\n\n for (const neighborIndex of [candidate.index - 1, candidate.index + 1]) {\n if (expanded.size >= maxSentences) {\n break;\n }\n\n const neighbor = byIndex.get(neighborIndex);\n if (neighbor && !expanded.has(neighbor.index)) {\n expanded.set(neighbor.index, neighbor);\n }\n }\n }\n\n return [...expanded.values()];\n}\n\nfunction takeWholeCandidatesWithinBudget(candidates: SentenceCandidate[], targetTokens: number): string {\n const selected: string[] = [];\n let tokens = 0;\n\n for (const candidate of candidates) {\n if (tokens + candidate.tokenCount > targetTokens) {\n break;\n }\n\n selected.push(candidate.sentence);\n tokens += candidate.tokenCount;\n }\n\n return selected.join(' ');\n}\n","import { estimateHeuristicTokens } from './token-compression.js';\n\nexport interface CodeCompactionOptions {\n enabled?: boolean;\n remove_comments?: boolean;\n trim_indentation?: boolean;\n collapse_blank_lines?: boolean;\n}\n\nexport interface CodeCompactionOutput {\n output: string;\n inputTokens: number;\n outputTokens: number;\n tokensSaved: number;\n compressionRatio: number;\n}\n\nexport function compactCode(input: string, options: CodeCompactionOptions = {}): CodeCompactionOutput {\n const inputText = input ?? '';\n const removeComments = options.remove_comments ?? true;\n const trimIndentation = options.trim_indentation ?? true;\n const collapseBlankLines = options.collapse_blank_lines ?? true;\n\n let output = inputText.replace(/\\r\\n?/g, '\\n');\n\n if (removeComments) {\n output = stripCodeComments(output);\n }\n\n output = output\n .split('\\n')\n .map((line) => line.replace(/[ \\t]+$/g, ''))\n .join('\\n');\n\n if (trimIndentation) {\n output = stripCommonIndent(output);\n }\n\n if (collapseBlankLines) {\n output = output\n .split('\\n')\n .filter((line) => line.trim().length > 0)\n .join('\\n');\n }\n\n output = output.trim();\n\n const inputTokens = estimateHeuristicTokens(inputText);\n const outputTokens = estimateHeuristicTokens(output);\n\n return {\n output,\n inputTokens,\n outputTokens,\n tokensSaved: Math.max(0, inputTokens - outputTokens),\n compressionRatio: outputTokens === 0 ? 0 : inputTokens / outputTokens,\n };\n}\n\nfunction stripCommonIndent(input: string): string {\n const lines = input.split('\\n');\n const nonEmptyLines = lines.filter((line) => line.trim().length > 0);\n if (nonEmptyLines.length === 0) {\n return '';\n }\n\n const commonIndent = Math.min(\n ...nonEmptyLines.map((line) => {\n const match = line.match(/^[ \\t]*/);\n return match?.[0].length ?? 0;\n }),\n );\n\n if (commonIndent === 0) {\n return input;\n }\n\n return lines.map((line) => line.slice(commonIndent)).join('\\n');\n}\n\nfunction stripCodeComments(input: string): string {\n let output = '';\n let index = 0;\n let quote: '\"' | \"'\" | '`' | undefined;\n let escaped = false;\n let atLineStart = true;\n\n while (index < input.length) {\n const char = input[index];\n const next = input[index + 1];\n\n if (quote) {\n output += char;\n if (escaped) {\n escaped = false;\n } else if (char === '\\\\') {\n escaped = true;\n } else if (char === quote) {\n quote = undefined;\n }\n atLineStart = char === '\\n';\n index += 1;\n continue;\n }\n\n if ((char === '\"' || char === \"'\" || char === '`')) {\n quote = char;\n output += char;\n atLineStart = false;\n index += 1;\n continue;\n }\n\n if (atLineStart && char === '#' && next === '!') {\n while (index < input.length && input[index] !== '\\n') {\n output += input[index];\n index += 1;\n }\n continue;\n }\n\n if (char === '/' && next === '/') {\n index += 2;\n while (index < input.length && input[index] !== '\\n') {\n index += 1;\n }\n continue;\n }\n\n if (char === '/' && next === '*') {\n index += 2;\n while (index < input.length && !(input[index] === '*' && input[index + 1] === '/')) {\n if (input[index] === '\\n') {\n output += '\\n';\n }\n index += 1;\n }\n index += input[index] === '*' ? 2 : 0;\n continue;\n }\n\n if (char === '#' && (next === ' ' || next === '\\t')) {\n index += 1;\n while (index < input.length && input[index] !== '\\n') {\n index += 1;\n }\n continue;\n }\n\n output += char;\n atLineStart = char === '\\n' || (atLineStart && (char === ' ' || char === '\\t'));\n index += 1;\n }\n\n return output;\n}\n","import type { ResolvedPromptAsset } from '../schema/index.js';\nimport { interpolate, extractVariables } from './interpolate.js';\nimport { getContextInputs } from '../context.js';\nimport {\n compressHeuristicText,\n estimateHeuristicTokens,\n type HeuristicCompressionOptions,\n type HeuristicCompressionOutput,\n} from '../token-compression.js';\nimport { tryJsonToToon } from '../toon-encoding.js';\nimport {\n compactCode,\n type CodeCompactionOptions,\n type CodeCompactionOutput,\n} from '../code-compaction.js';\n\nexport interface RenderOptions {\n variables?: Record<string, string>;\n strict?: boolean;\n compression?: RenderCompressionOptions;\n}\n\nexport interface RenderCompressionOptions {\n onHeuristicCompression?: (event: HeuristicPlaceholderCompressionEvent) => void;\n onCodeCompaction?: (event: CodePlaceholderCompactionEvent) => void;\n onCompressionWarning?: (warning: string) => void;\n}\n\nexport interface HeuristicPlaceholderCompressionEvent extends HeuristicCompressionOutput {\n scope: 'placeholder';\n variable: string;\n}\n\nexport interface CodePlaceholderCompactionEvent extends CodeCompactionOutput {\n scope: 'placeholder';\n variable: string;\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 contextInputs = getContextInputs(asset);\n const optionalVariables = contextInputs\n .filter((input) => input.optional === true)\n .map((input) => input.name);\n const contextInputsByName = new Map(contextInputs.map((input) => [input.name, input]));\n const compressionCache = new Map<string, string>();\n\n const createTransformVariable = (template: string) => {\n return ({ name, value, modifier, match }: {\n name: string;\n value: string;\n modifier?: 'compress' | 'toon' | 'compact' | 'code';\n match: string;\n }): string => {\n const input = contextInputsByName.get(name);\n const configuredHeuristic = input?.compression?.heuristic;\n const configuredCode = input?.compression?.code;\n const shouldCompactCode = modifier === 'compact' || modifier === 'code' || configuredCode?.enabled === true;\n const shouldCompress = modifier === 'compress' || configuredHeuristic?.enabled === true;\n\n if (modifier === 'toon') {\n const result = toToonPlaceholder(value);\n if (!result) {\n options.compression?.onCompressionWarning?.(\n `POK031: JSON-to-TOON skipped for placeholder \"${name}\" because the value is not a complete valid JSON object or array.`,\n );\n return value;\n }\n\n if (result.tokensSaved > 0 || result.output !== value) {\n options.compression?.onHeuristicCompression?.({\n scope: 'placeholder',\n variable: name,\n ...result,\n });\n }\n\n return result.output;\n }\n\n if (shouldCompactCode) {\n const result = compactCode(value, toCodeCompactionOptions(configuredCode));\n\n if (result.tokensSaved > 0 || result.output !== value) {\n options.compression?.onCodeCompaction?.({\n scope: 'placeholder',\n variable: name,\n ...result,\n });\n }\n\n return result.output;\n }\n\n if (!shouldCompress) {\n return value;\n }\n\n const query = resolveHeuristicQuery(configuredHeuristic, variables, template, match);\n const compressionOptions: HeuristicCompressionOptions = {\n min_tokens: configuredHeuristic?.min_tokens,\n max_sentences: configuredHeuristic?.max_sentences,\n target_reduction: configuredHeuristic?.target_reduction,\n query,\n json_to_toon: configuredHeuristic?.json_to_toon,\n mode: configuredHeuristic?.mode,\n preserve_neighbors: configuredHeuristic?.preserve_neighbors,\n fail_on_low_confidence: configuredHeuristic?.fail_on_low_confidence,\n };\n const cacheKey = JSON.stringify([name, value, compressionOptions]);\n const cached = compressionCache.get(cacheKey);\n if (cached !== undefined) {\n return cached;\n }\n\n const result = compressHeuristicText(value, compressionOptions);\n compressionCache.set(cacheKey, result.output);\n\n reportHeuristicCompressionWarnings(options, result, `placeholder \"${name}\"`);\n\n if (result.tokensSaved > 0 || result.output !== value) {\n options.compression?.onHeuristicCompression?.({\n scope: 'placeholder',\n variable: name,\n ...result,\n });\n }\n\n return result.output;\n };\n };\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 {\n strict,\n optionalVariables,\n transformVariable: createTransformVariable(asset.sections.system_instructions),\n },\n );\n }\n\n if (asset.sections.prompt_template) {\n result.prompt_template = interpolate(\n asset.sections.prompt_template,\n variables,\n {\n strict,\n optionalVariables,\n transformVariable: createTransformVariable(asset.sections.prompt_template),\n },\n );\n }\n\n return result;\n}\n\nfunction resolveHeuristicQuery(\n options: (HeuristicCompressionOptions & { query_variable?: string }) | undefined,\n variables: Record<string, string>,\n template: string,\n match: string,\n): string {\n if (options?.query !== undefined) {\n return options.query;\n }\n\n if (options?.query_variable && variables[options.query_variable] !== undefined) {\n return variables[options.query_variable];\n }\n\n return template.replace(match, ' ');\n}\n\nfunction toToonPlaceholder(value: string): HeuristicCompressionOutput | undefined {\n const toon = tryJsonToToon(value);\n if (!toon) {\n return undefined;\n }\n\n const inputTokens = estimateHeuristicTokens(value);\n const outputTokens = estimateHeuristicTokens(toon.output);\n\n return {\n output: toon.output,\n inputTokens,\n outputTokens,\n tokensSaved: Math.max(0, inputTokens - outputTokens),\n compressionRatio: outputTokens === 0 ? 0 : inputTokens / outputTokens,\n outputFormat: 'toon',\n };\n}\n\nfunction toCodeCompactionOptions(options: CodeCompactionOptions | undefined): CodeCompactionOptions {\n return {\n remove_comments: options?.remove_comments,\n trim_indentation: options?.trim_indentation,\n collapse_blank_lines: options?.collapse_blank_lines,\n };\n}\n\nfunction reportHeuristicCompressionWarnings(\n options: RenderOptions,\n result: Pick<HeuristicCompressionOutput, 'warnings'>,\n scope: string,\n): void {\n for (const warning of result.warnings ?? []) {\n options.compression?.onCompressionWarning?.(`POK031: ${warning} Scope: ${scope}.`);\n }\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 heuristic: mergeRecordBlock(\n result.compression?.heuristic,\n override.compression.heuristic,\n ),\n code: mergeRecordBlock(\n result.compression?.code,\n override.compression.code,\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 { 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 { 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 matter from 'gray-matter';\nimport { PromptAssetSchema } from '../schema/index.js';\nimport type { PromptAsset } from '../schema/index.js';\nimport { assertRegexFrontMatterQuoting } from './frontmatter-guard.js';\nimport { extractSections } from './sections.js';\n\nexport interface ParseResult {\n asset: PromptAsset;\n raw: {\n frontMatter: Record<string, unknown>;\n body: string;\n };\n}\n\n/**\n * Parse a prompt markdown string (YAML front matter + markdown body)\n * into a validated PromptAsset.\n */\nexport function parsePrompt(content: string, filePath?: string): ParseResult {\n assertRegexFrontMatterQuoting(content, filePath);\n const { data: frontMatter, content: body } = matter(content);\n\n const sections = extractSections(body);\n\n const raw = {\n ...frontMatter,\n sections,\n source: filePath ? { file_path: filePath } : undefined,\n };\n\n const asset = PromptAssetSchema.parse(raw);\n\n return {\n asset,\n raw: {\n frontMatter: frontMatter as Record<string, unknown>,\n body,\n },\n };\n}\n","import { z } from 'zod';\n\n// --- Tool definitions ---\n\nexport const InlineToolDefSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n input_schema: z.record(z.unknown()).optional(),\n});\n\nexport type InlineToolDef = z.infer<typeof InlineToolDefSchema>;\n\nexport const ToolRefSchema = z.union([z.string(), InlineToolDefSchema]);\n\n// --- MCP ---\n\nexport const MCPServerRefSchema = z.union([\n z.string(),\n z.object({\n name: z.string(),\n config: z.record(z.unknown()).optional(),\n }),\n]);\n\nexport type MCPServerRef = z.infer<typeof MCPServerRefSchema>;\n\n// --- Reasoning ---\n\nexport const ReasoningSchema = z.object({\n effort: z.enum(['low', 'medium', 'high']).optional(),\n budget_tokens: z.number().int().positive().optional(),\n});\n\n// --- Sampling ---\n\nexport const SamplingSchema = z.object({\n temperature: z.number().min(0).max(2).optional(),\n top_p: z.number().min(0).max(1).optional(),\n frequency_penalty: z.number().optional(),\n presence_penalty: z.number().optional(),\n stop: z.array(z.string()).optional(),\n max_output_tokens: z.number().int().positive().optional(),\n});\n\n// --- Response ---\n\nexport const ResponseSchema = z.object({\n format: z.enum(['text', 'json', 'markdown']).optional(),\n stream: z.boolean().optional(),\n schema: z.record(z.unknown()).optional(),\n schema_ref: z.string().min(1).optional(),\n schema_source: z.object({\n mode: z.enum(['inline', 'schema_ref_json', 'schema_ref_zod_module']).optional(),\n ref: z.string().optional(),\n resolved_path: z.string().optional(),\n hash: z.string().optional(),\n }).optional(),\n schema_name: z.string().optional(),\n schema_description: z.string().optional(),\n schema_strict: z.boolean().optional(),\n});\n\nexport const ResponseSchemaWithValidation = ResponseSchema.superRefine((value, ctx) => {\n if (value.schema !== undefined && value.schema_ref !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'response.schema and response.schema_ref are mutually exclusive',\n path: ['schema_ref'],\n });\n }\n});\n\n\n// --- Provider-specific options ---\n\nexport const AnthropicProviderOptionsSchema = z.object({\n top_k: z.number().int().min(0).optional(),\n tool_choice: z.record(z.unknown()).optional(),\n output_config: z.record(z.unknown()).optional(),\n});\n\nexport const GeminiProviderOptionsSchema = z.object({\n candidate_count: z.number().int().positive().optional(),\n top_k: z.number().int().min(0).optional(),\n seed: z.number().int().optional(),\n response_schema: z.record(z.unknown()).optional(),\n response_json_schema: z.record(z.unknown()).optional(),\n response_modalities: z.array(z.string()).optional(),\n thinking_budget_tokens: z.number().int().positive().optional(),\n});\n\nexport const OpenRouterProviderOptionsSchema = z.object({\n provider: z.record(z.unknown()).optional(),\n transforms: z.array(z.string()).optional(),\n plugins: z.array(z.record(z.unknown())).optional(),\n models: z.array(z.string()).optional(),\n});\n\nexport const LLMAsAServiceCustomerSchema = z.object({\n customer_id: z.string(),\n customer_name: z.string().optional(),\n customer_user_id: z.string().optional(),\n customer_user_name: z.string().optional(),\n customer_user_email: z.string().optional(),\n});\n\nexport const LLMAsAServiceProviderOptionsSchema = z.object({\n base_url: z.string().url().optional(),\n project_id: z.string().optional(),\n customer: LLMAsAServiceCustomerSchema.optional(),\n conversationId: z.string().optional(),\n conversationTitle: z.string().optional(),\n projectId: z.string().optional(),\n});\n\nexport const ProviderOptionsSchema = z.object({\n anthropic: AnthropicProviderOptionsSchema.optional(),\n gemini: GeminiProviderOptionsSchema.optional(),\n openrouter: OpenRouterProviderOptionsSchema.optional(),\n llmasaservice: LLMAsAServiceProviderOptionsSchema.optional(),\n});\n\nexport type ProviderOptions = z.infer<typeof ProviderOptionsSchema>;\n\n// --- Raw provider body passthrough ---\n\nexport const RawProviderBodySchema = z.object({\n openai: z.record(z.unknown()).optional(),\n 'openai-responses': z.record(z.unknown()).optional(),\n openai_responses: z.record(z.unknown()).optional(),\n anthropic: z.record(z.unknown()).optional(),\n gemini: z.record(z.unknown()).optional(),\n google: z.record(z.unknown()).optional(),\n openrouter: z.record(z.unknown()).optional(),\n llmasaservice: z.record(z.unknown()).optional(),\n});\n\nexport type RawProviderBody = z.infer<typeof RawProviderBodySchema>;\n\n// --- Prompt compression ---\n\nexport const TheTokenCompanyCompressionSchema = z.object({\n enabled: z.boolean().optional(),\n model: z.string().min(1).optional(),\n aggressiveness: z.number().min(0).max(1).optional(),\n});\n\nexport const HeuristicCompressionSchema = z.object({\n enabled: z.boolean().optional(),\n min_tokens: z.number().int().positive().optional(),\n max_sentences: z.number().int().positive().optional(),\n target_reduction: z.number().min(0).max(1).optional(),\n query: z.string().optional(),\n query_variable: z.string().min(1).optional(),\n json_to_toon: z.boolean().optional(),\n mode: z.enum(['conservative', 'balanced']).optional(),\n preserve_neighbors: z.boolean().optional(),\n fail_on_low_confidence: z.boolean().optional(),\n});\n\nexport const CodeCompactionSchema = z.object({\n enabled: z.boolean().optional(),\n remove_comments: z.boolean().optional(),\n trim_indentation: z.boolean().optional(),\n collapse_blank_lines: z.boolean().optional(),\n});\n\nexport const CompressionSchema = z.object({\n thetokencompany: TheTokenCompanyCompressionSchema.optional(),\n heuristic: HeuristicCompressionSchema.optional(),\n code: CodeCompactionSchema.optional(),\n});\n\nexport type Compression = z.infer<typeof CompressionSchema>;\nexport type TheTokenCompanyCompression = z.infer<typeof TheTokenCompanyCompressionSchema>;\nexport type HeuristicCompression = z.infer<typeof HeuristicCompressionSchema>;\nexport type CodeCompaction = z.infer<typeof CodeCompactionSchema>;\n\n// --- Cache controls ---\n\nexport const OpenAICacheSchema = z.object({\n prompt_cache_key: z.string().min(1).optional(),\n retention: z.enum(['in_memory', '24h']).optional(),\n});\n\nexport const AnthropicCacheSchema = z.object({\n mode: z.enum(['automatic', 'explicit']).optional(),\n type: z.literal('ephemeral').optional(),\n ttl: z.enum(['5m', '1h']).optional(),\n cache_system_instructions: z.boolean().optional(),\n cache_tools: z.boolean().optional(),\n cache_prompt_template: z.boolean().optional(),\n});\n\nexport const GeminiCacheSchema = z.object({\n cached_content: z.string().min(1).optional(),\n});\n\nexport const CacheSchema = z.object({\n openai: OpenAICacheSchema.optional(),\n anthropic: AnthropicCacheSchema.optional(),\n gemini: GeminiCacheSchema.optional(),\n google: GeminiCacheSchema.optional(),\n});\n\n// --- Context ---\n\nexport const HistorySchema = z.object({\n max_items: z.number().int().positive().optional(),\n});\n\nexport const ContextRegexSchema = z.union([\n z.string(),\n z.object({\n pattern: z.string(),\n flags: z.string().optional(),\n return_message: z.string().optional(),\n }),\n]);\n\nexport const ContextBuiltInValidatorSchema = z.union([\n z.boolean(),\n z.object({\n return_message: z.string().optional(),\n }),\n]);\n\nexport const ContextInputCompressionSchema = z.union([\n z.literal('heuristic'),\n z.literal('code'),\n z.object({\n heuristic: HeuristicCompressionSchema.optional(),\n code: CodeCompactionSchema.optional(),\n }),\n]);\n\nexport const ContextInputDefinitionObjectSchema = z.object({\n name: z.string(),\n optional: z.boolean().optional(),\n warnings: z.boolean().optional(),\n max_size: z.number().int().positive().optional(),\n trim: z.union([z.boolean(), z.enum(['start', 'end', 'both'])]).optional(),\n compression: ContextInputCompressionSchema.optional(),\n allow_regex: ContextRegexSchema.optional(),\n deny_regex: ContextRegexSchema.optional(),\n non_empty: ContextBuiltInValidatorSchema.optional(),\n reject_secrets: ContextBuiltInValidatorSchema.optional(),\n});\n\nexport const ContextInputDefinitionSchema = z.union([\n z.string(),\n ContextInputDefinitionObjectSchema,\n]);\n\nexport type ContextInputDefinition = z.infer<typeof ContextInputDefinitionSchema>;\nexport type ContextInputCompression = z.infer<typeof ContextInputCompressionSchema>;\nexport type ContextRegexDefinition = z.infer<typeof ContextRegexSchema>;\nexport type ContextBuiltInValidatorDefinition = z.infer<typeof ContextBuiltInValidatorSchema>;\n\nexport const ContextSchema = z.object({\n inputs: z.array(ContextInputDefinitionSchema).optional(),\n history: HistorySchema.optional(),\n});\n\n// --- Metadata ---\n\nexport const MetadataSchema = z.object({\n owner: z.string().optional(),\n tags: z.array(z.string()).optional(),\n review_required: z.boolean().optional(),\n stable: z.boolean().optional(),\n});\n\n// --- MCP block ---\n\nexport const MCPSchema = z.object({\n servers: z.array(MCPServerRefSchema).optional(),\n});\n\n// --- Overrides (subset allowed in environments/tiers) ---\n\nexport const PromptAssetOverridesSchema = z.object({\n model: z.string().optional(),\n fallback_models: z.array(z.string()).optional(),\n reasoning: ReasoningSchema.optional(),\n sampling: SamplingSchema.optional(),\n response: ResponseSchemaWithValidation.optional(),\n compression: CompressionSchema.optional(),\n cache: CacheSchema.optional(),\n raw: RawProviderBodySchema.optional(),\n tools: z.array(ToolRefSchema).optional(),\n provider_options: ProviderOptionsSchema.optional(),\n});\n\nexport type PromptAssetOverrides = z.infer<typeof PromptAssetOverridesSchema>;\n\n// --- Source tracking ---\n\nexport const SourceSchema = z.object({\n file_path: z.string().optional(),\n checksum: z.string().optional(),\n});\n\n// --- Sections (populated by parser) ---\n\nexport const SectionsSchema = z.object({\n system_instructions: z.string().optional(),\n prompt_template: z.string().optional(),\n notes: z.string().optional(),\n});\n\n// --- Defaults files (folder-level inheritance) ---\n\nexport const PromptDefaultsSchema = z.object({\n provider: z.enum(['openai', 'openai-responses', 'anthropic', 'google', 'gemini', 'openrouter', 'llmasaservice', 'any']).optional(),\n model: z.string().optional(),\n fallback_models: z.array(z.string()).optional(),\n reasoning: ReasoningSchema.optional(),\n sampling: SamplingSchema.optional(),\n response: ResponseSchema.optional(),\n compression: CompressionSchema.optional(),\n cache: CacheSchema.optional(),\n raw: RawProviderBodySchema.optional(),\n tools: z.array(ToolRefSchema).optional(),\n provider_options: ProviderOptionsSchema.optional(),\n mcp: MCPSchema.optional(),\n context: ContextSchema.optional(),\n includes: z.array(z.string()).optional(),\n environments: z.record(PromptAssetOverridesSchema).optional(),\n tiers: z.record(PromptAssetOverridesSchema).optional(),\n metadata: MetadataSchema.optional(),\n sections: z.object({\n system_instructions: z.string().optional(),\n }).optional(),\n});\n\nexport type PromptDefaults = z.infer<typeof PromptDefaultsSchema>;\n\n// --- Top-level PromptAsset ---\n\nexport const PromptAssetSchema = z.object({\n id: z.string(),\n schema_version: z.number().int().positive().default(1),\n description: z.string().optional(),\n\n provider: z.enum(['openai', 'openai-responses', 'anthropic', 'google', 'gemini', 'openrouter', 'llmasaservice', 'any']).optional(),\n model: z.string().optional(),\n fallback_models: z.array(z.string()).optional(),\n\n reasoning: ReasoningSchema.optional(),\n sampling: SamplingSchema.optional(),\n response: ResponseSchemaWithValidation.optional(),\n compression: CompressionSchema.optional(),\n cache: CacheSchema.optional(),\n raw: RawProviderBodySchema.optional(),\n\n tools: z.array(ToolRefSchema).optional(),\n provider_options: ProviderOptionsSchema.optional(),\n mcp: MCPSchema.optional(),\n\n context: ContextSchema.optional(),\n\n includes: z.array(z.string()).optional(),\n\n environments: z.record(PromptAssetOverridesSchema).optional(),\n tiers: z.record(PromptAssetOverridesSchema).optional(),\n\n metadata: MetadataSchema.optional(),\n\n // Populated by parser, not authored in YAML\n sections: SectionsSchema.optional(),\n source: SourceSchema.optional(),\n});\n\nexport type PromptAsset = z.infer<typeof PromptAssetSchema>;\n\n// --- Resolved asset (after includes, overrides applied) ---\n\nexport interface ResolvedPromptAsset extends PromptAsset {\n sections: {\n system_instructions?: string;\n prompt_template?: string;\n notes?: string;\n };\n source: {\n file_path?: string;\n checksum?: string;\n };\n}\n","const FRONT_MATTER_DELIMITER = /^---[ \\t]*$/;\nconst REGEX_FIELD = /^(?<indent>\\s*)(?<field>allow_regex|deny_regex)\\s*:\\s*(?<value>.*)$/;\nconst PATTERN_FIELD = /^(?<indent>\\s*)pattern\\s*:\\s*(?<value>.*)$/;\nconst INLINE_PATTERN_FIELD = /(?:^|[{,]\\s*)pattern\\s*:\\s*(?<value>\"(?:\\\\.|[^\"\\\\])*\")/;\n\ninterface PendingRegexField {\n field: string;\n indent: number;\n}\n\nexport function assertRegexFrontMatterQuoting(content: string, filePath?: string): void {\n const frontMatter = extractFrontMatter(content);\n if (!frontMatter) {\n return;\n }\n\n let pendingRegex: PendingRegexField | undefined;\n\n for (const [index, line] of frontMatter.lines.entries()) {\n const lineNumber = frontMatter.startLine + index;\n const regexMatch = line.match(REGEX_FIELD);\n\n if (regexMatch?.groups) {\n const field = regexMatch.groups.field;\n const indent = regexMatch.groups.indent.length;\n const value = regexMatch.groups.value.trim();\n pendingRegex = value === '' ? { field, indent } : undefined;\n\n assertNoUnescapedBackslashInDoubleQuotedRegex(value, field, filePath, lineNumber);\n assertNoUnescapedBackslashInInlinePattern(value, field, filePath, lineNumber);\n continue;\n }\n\n if (!pendingRegex) {\n continue;\n }\n\n if (line.trim() === '' || line.trimStart().startsWith('#')) {\n continue;\n }\n\n const indent = line.match(/^\\s*/)?.[0].length ?? 0;\n if (indent <= pendingRegex.indent) {\n pendingRegex = undefined;\n continue;\n }\n\n const patternMatch = line.match(PATTERN_FIELD);\n if (!patternMatch?.groups) {\n continue;\n }\n\n assertNoUnescapedBackslashInDoubleQuotedRegex(\n patternMatch.groups.value.trim(),\n `${pendingRegex.field}.pattern`,\n filePath,\n lineNumber,\n );\n }\n}\n\nfunction assertNoUnescapedBackslashInInlinePattern(\n value: string,\n field: string,\n filePath: string | undefined,\n lineNumber: number,\n): void {\n const match = value.match(INLINE_PATTERN_FIELD);\n const pattern = match?.groups?.value;\n if (!pattern) {\n return;\n }\n\n assertNoUnescapedBackslashInDoubleQuotedRegex(pattern, `${field}.pattern`, filePath, lineNumber);\n}\n\nfunction extractFrontMatter(content: string): { lines: string[]; startLine: number } | undefined {\n const lines = content.split(/\\r?\\n/);\n if (!FRONT_MATTER_DELIMITER.test(lines[0] ?? '')) {\n return undefined;\n }\n\n for (let index = 1; index < lines.length; index += 1) {\n if (FRONT_MATTER_DELIMITER.test(lines[index] ?? '')) {\n return {\n lines: lines.slice(1, index),\n startLine: 2,\n };\n }\n }\n\n return undefined;\n}\n\nfunction assertNoUnescapedBackslashInDoubleQuotedRegex(\n value: string,\n field: string,\n filePath: string | undefined,\n lineNumber: number,\n): void {\n if (!value.startsWith('\"')) {\n return;\n }\n\n const quoted = readDoubleQuotedScalar(value);\n if (!quoted) {\n return;\n }\n\n if (!hasUnescapedBackslash(quoted)) {\n return;\n }\n\n const location = filePath ? `${filePath}:${lineNumber}` : `line ${lineNumber}`;\n throw new Error(\n `POK013: Invalid context regex YAML at ${location}, field \"${field}\": `\n + 'double-quoted regex strings treat backslashes as YAML escapes. '\n + 'Use unquoted /pattern/i literal form, single quotes, or double each backslash.',\n );\n}\n\nfunction readDoubleQuotedScalar(value: string): string | undefined {\n let result = '';\n\n for (let index = 1; index < value.length; index += 1) {\n const char = value[index];\n\n if (char === '\"') {\n return result;\n }\n\n result += char;\n\n if (char === '\\\\' && index + 1 < value.length) {\n index += 1;\n result += value[index];\n }\n }\n\n return undefined;\n}\n\nfunction hasUnescapedBackslash(value: string): boolean {\n for (let index = 0; index < value.length; index += 1) {\n if (value[index] !== '\\\\') {\n continue;\n }\n\n let count = 1;\n while (value[index + count] === '\\\\') {\n count += 1;\n }\n\n if (count % 2 === 1) {\n return true;\n }\n\n index += count - 1;\n }\n\n return false;\n}\n","export interface Sections {\n system_instructions?: string;\n prompt_template?: string;\n notes?: string;\n}\n\nconst SECTION_MAP: Record<string, keyof Sections> = {\n 'system instructions': 'system_instructions',\n 'prompt template': 'prompt_template',\n 'notes': 'notes',\n};\n\n/**\n * Extract named sections from the markdown body using H1 headings.\n * Case-insensitive. H2+ within a section is treated as content.\n * If no H1 headings are found, the entire body is treated as prompt_template.\n */\nexport function extractSections(body: string): Sections {\n const lines = body.split(/\\r?\\n/);\n const sections: Sections = {};\n\n let currentKey: keyof Sections | null = null;\n let currentLines: string[] = [];\n let foundAnyH1 = false;\n\n for (const line of lines) {\n const h1Match = line.match(/^#\\s+(.+)$/);\n if (h1Match) {\n // Flush previous section\n if (currentKey) {\n sections[currentKey] = currentLines.join('\\n').trim();\n }\n\n foundAnyH1 = true;\n const heading = h1Match[1].trim().toLowerCase();\n currentKey = SECTION_MAP[heading] ?? null;\n currentLines = [];\n } else {\n currentLines.push(line);\n }\n }\n\n // Flush last section\n if (currentKey) {\n sections[currentKey] = currentLines.join('\\n').trim();\n }\n\n // If no H1 headings found, treat entire body as prompt_template\n if (!foundAnyH1) {\n const trimmed = body.trim();\n if (trimmed) {\n sections.prompt_template = trimmed;\n }\n }\n\n return sections;\n}\n","import { readFile } from 'node:fs/promises';\nimport { dirname, join, relative, resolve } from 'node:path';\nimport matter from 'gray-matter';\nimport { parsePrompt } from './parser.js';\nimport type { ParseResult } from './parser.js';\nimport { extractSections } from './sections.js';\nimport { PromptDefaultsSchema } from '../schema/index.js';\nimport type { PromptDefaults } from '../schema/index.js';\nimport { resolveResponseSchemaRef } from './response-schema-ref.js';\n\nconst DEFAULTS_FILE_NAME = 'defaults.md';\n\nexport interface LoadPromptOptions {\n /**\n * Optional boundary directory for defaults discovery.\n * If provided, defaults are loaded from this directory down to the prompt directory.\n */\n defaultsRoot?: string;\n}\n\n/**\n * Load and parse a prompt file from disk.\n */\nexport async function loadPromptFile(filePath: string, options: LoadPromptOptions = {}): Promise<ParseResult> {\n const content = await readFile(filePath, 'utf-8');\n const parsed = parsePrompt(content, filePath);\n // Default the boundary to the file's own directory so traversal never\n // walks above the prompt tree when no explicit root is provided.\n const root = options.defaultsRoot ?? dirname(filePath);\n const defaults = await loadDefaultsForPath(filePath, root);\n const withDefaults = applyDefaults(parsed.asset, defaults);\n const resolved = await resolveResponseSchemaRef(withDefaults, filePath);\n const asset = (resolved.response?.schema !== undefined && !resolved.response?.schema_source)\n ? {\n ...resolved,\n response: {\n ...resolved.response,\n schema_source: { mode: 'inline' as const },\n },\n }\n : resolved;\n\n return {\n ...parsed,\n asset,\n };\n}\n\nasync function loadDefaultsForPath(filePath: string, defaultsRoot?: string): Promise<PromptDefaults> {\n const directories = getDirectoriesToCheck(filePath, defaultsRoot);\n let merged: PromptDefaults = {};\n\n for (const dir of directories) {\n const defaultsPath = join(dir, DEFAULTS_FILE_NAME);\n try {\n const defaultsContent = await readFile(defaultsPath, 'utf-8');\n const defaults = normalizeDefaultIncludes(parseDefaults(defaultsContent), defaultsPath, filePath);\n merged = mergeDefaults(merged, defaults);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n throw error;\n }\n }\n }\n\n return merged;\n}\n\nfunction getDirectoriesToCheck(filePath: string, defaultsRoot?: string): string[] {\n const dirs: string[] = [];\n let current = resolve(dirname(filePath));\n const boundary = defaultsRoot ? resolve(defaultsRoot) : undefined;\n\n while (true) {\n dirs.unshift(current);\n if ((boundary && current === boundary) || current === dirname(current)) {\n break;\n }\n current = dirname(current);\n }\n\n return dirs;\n}\n\nfunction parseDefaults(content: string): PromptDefaults {\n const { data: frontMatter, content: body } = matter(content);\n const sections = extractSections(body);\n\n return PromptDefaultsSchema.parse({\n ...frontMatter,\n sections: {\n system_instructions: sections.system_instructions,\n },\n });\n}\n\nfunction mergeDefaults(base: PromptDefaults, local: PromptDefaults): PromptDefaults {\n return {\n provider: local.provider ?? base.provider,\n model: local.model ?? base.model,\n fallback_models: local.fallback_models ?? base.fallback_models,\n reasoning: mergeRecordBlock(base.reasoning, local.reasoning),\n sampling: mergeRecordBlock(base.sampling, local.sampling),\n response: mergeRecordBlock(base.response, local.response),\n compression: mergeCompression(base.compression, local.compression),\n cache: mergeCache(base.cache, local.cache),\n raw: mergeRaw(base.raw, local.raw),\n tools: local.tools ?? base.tools,\n provider_options: mergeProviderOptions(base.provider_options, local.provider_options),\n mcp: mergeMcp(base.mcp, local.mcp),\n context: mergeContext(base.context, local.context),\n includes: local.includes ?? base.includes,\n environments: mergeOverrideMap(base.environments, local.environments),\n tiers: mergeOverrideMap(base.tiers, local.tiers),\n metadata: {\n ...(base.metadata ?? {}),\n ...(local.metadata ?? {}),\n },\n sections: {\n ...(base.sections ?? {}),\n ...(local.sections ?? {}),\n },\n };\n}\n\nfunction applyDefaults(asset: ParseResult['asset'], defaults: PromptDefaults): ParseResult['asset'] {\n const compression = mergeCompression(defaults.compression, asset.compression);\n const cache = mergeCache(defaults.cache, asset.cache);\n const raw = mergeRaw(defaults.raw, asset.raw);\n const providerOptions = mergeProviderOptions(defaults.provider_options, asset.provider_options);\n const reasoning = mergeRecordBlock(defaults.reasoning, asset.reasoning);\n const sampling = mergeRecordBlock(defaults.sampling, asset.sampling);\n const response = mergeRecordBlock(defaults.response, asset.response);\n const mcp = mergeMcp(defaults.mcp, asset.mcp);\n const context = mergeContext(defaults.context, asset.context);\n const environments = mergeOverrideMap(defaults.environments, asset.environments);\n const tiers = mergeOverrideMap(defaults.tiers, asset.tiers);\n const hasDefaultMetadata = defaults.metadata && Object.keys(defaults.metadata).length > 0;\n const hasDefaultSystem = !!defaults.sections?.system_instructions;\n const hasDefaultScalars = defaults.provider !== undefined\n || defaults.model !== undefined\n || defaults.fallback_models !== undefined\n || defaults.tools !== undefined\n || defaults.includes !== undefined;\n const hasDefaultObjects = compression !== undefined\n || cache !== undefined\n || raw !== undefined\n || providerOptions !== undefined\n || reasoning !== undefined\n || sampling !== undefined\n || response !== undefined\n || mcp !== undefined\n || context !== undefined\n || environments !== undefined\n || tiers !== undefined;\n\n // Short-circuit: nothing to merge\n if (!hasDefaultMetadata && !hasDefaultSystem && !hasDefaultScalars && !hasDefaultObjects) {\n return asset;\n }\n\n const mergedMetadata = {\n ...(defaults.metadata ?? {}),\n ...(asset.metadata ?? {}),\n };\n const metadata = Object.keys(mergedMetadata).length > 0 ? mergedMetadata : undefined;\n\n const systemInstructions = asset.sections?.system_instructions ?? defaults.sections?.system_instructions;\n\n const sections = asset.sections\n ? { ...asset.sections, system_instructions: systemInstructions }\n : systemInstructions\n ? { system_instructions: systemInstructions }\n : undefined;\n\n return {\n ...asset,\n provider: asset.provider ?? defaults.provider,\n model: asset.model ?? defaults.model,\n fallback_models: asset.fallback_models ?? defaults.fallback_models,\n reasoning,\n sampling,\n response,\n compression,\n cache,\n raw,\n tools: asset.tools ?? defaults.tools,\n provider_options: providerOptions,\n mcp,\n context,\n includes: asset.includes ?? defaults.includes,\n environments,\n tiers,\n metadata,\n sections,\n };\n}\n\nfunction normalizeDefaultIncludes(\n defaults: PromptDefaults,\n defaultsPath: string,\n filePath: string,\n): PromptDefaults {\n if (!defaults.includes) return defaults;\n\n const promptDir = dirname(filePath);\n const defaultsDir = dirname(defaultsPath);\n const includes = defaults.includes.map((includePath) => {\n const relativePath = relative(promptDir, resolve(defaultsDir, includePath)).replace(/\\\\/g, '/');\n return relativePath.startsWith('.') ? relativePath : `./${relativePath}`;\n });\n\n return {\n ...defaults,\n includes,\n };\n}\n\nfunction mergeRecordBlock<T extends object>(base: T | undefined, local: T | undefined): T | undefined {\n if (base === undefined) return local;\n if (local === undefined) return base;\n return { ...base, ...local };\n}\n\nfunction mergeMcp(base: PromptDefaults['mcp'], local: PromptDefaults['mcp']): PromptDefaults['mcp'] {\n return mergeRecordBlock(base, local);\n}\n\nfunction mergeContext(base: PromptDefaults['context'], local: PromptDefaults['context']): PromptDefaults['context'] {\n const merged = {\n ...(base ?? {}),\n ...(local ?? {}),\n history: mergeRecordBlock(base?.history, local?.history),\n };\n\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction mergeCache(base: PromptDefaults['cache'], local: PromptDefaults['cache']): PromptDefaults['cache'] {\n const merged: NonNullable<PromptDefaults['cache']> = {\n ...(base ?? {}),\n ...(local ?? {}),\n openai: {\n ...(base?.openai ?? {}),\n ...(local?.openai ?? {}),\n },\n anthropic: {\n ...(base?.anthropic ?? {}),\n ...(local?.anthropic ?? {}),\n },\n gemini: {\n ...(base?.gemini ?? {}),\n ...(local?.gemini ?? {}),\n },\n google: {\n ...(base?.google ?? {}),\n ...(local?.google ?? {}),\n },\n };\n\n if (merged.openai && Object.keys(merged.openai).length === 0) delete merged.openai;\n if (merged.anthropic && Object.keys(merged.anthropic).length === 0) delete merged.anthropic;\n if (merged.gemini && Object.keys(merged.gemini).length === 0) delete merged.gemini;\n if (merged.google && Object.keys(merged.google).length === 0) delete merged.google;\n\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction mergeCompression(\n base: PromptDefaults['compression'],\n local: PromptDefaults['compression'],\n): PromptDefaults['compression'] {\n const merged: NonNullable<PromptDefaults['compression']> = {\n ...(base ?? {}),\n ...(local ?? {}),\n thetokencompany: mergeRecordBlock(base?.thetokencompany, local?.thetokencompany),\n heuristic: mergeRecordBlock(base?.heuristic, local?.heuristic),\n code: mergeRecordBlock(base?.code, local?.code),\n };\n\n removeEmptyProviderBlocks(merged);\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction mergeRaw(base: PromptDefaults['raw'], local: PromptDefaults['raw']): PromptDefaults['raw'] {\n const merged: NonNullable<PromptDefaults['raw']> = {\n ...(base ?? {}),\n ...(local ?? {}),\n openai: mergeRecordBlock(base?.openai, local?.openai),\n 'openai-responses': mergeRecordBlock(base?.['openai-responses'], local?.['openai-responses']),\n openai_responses: mergeRecordBlock(base?.openai_responses, local?.openai_responses),\n anthropic: mergeRecordBlock(base?.anthropic, local?.anthropic),\n gemini: mergeRecordBlock(base?.gemini, local?.gemini),\n google: mergeRecordBlock(base?.google, local?.google),\n openrouter: mergeRecordBlock(base?.openrouter, local?.openrouter),\n llmasaservice: mergeRecordBlock(base?.llmasaservice, local?.llmasaservice),\n };\n\n removeEmptyProviderBlocks(merged);\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction mergeProviderOptions(\n base: PromptDefaults['provider_options'],\n local: PromptDefaults['provider_options'],\n): PromptDefaults['provider_options'] {\n const merged: NonNullable<PromptDefaults['provider_options']> = {\n ...(base ?? {}),\n ...(local ?? {}),\n anthropic: mergeRecordBlock(base?.anthropic, local?.anthropic),\n gemini: mergeRecordBlock(base?.gemini, local?.gemini),\n openrouter: mergeRecordBlock(base?.openrouter, local?.openrouter),\n llmasaservice: mergeRecordBlock(base?.llmasaservice, local?.llmasaservice),\n };\n\n removeEmptyProviderBlocks(merged);\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction mergeOverrideMap(\n base: PromptDefaults['environments'],\n local: PromptDefaults['environments'],\n): PromptDefaults['environments'] {\n const merged: NonNullable<PromptDefaults['environments']> = { ...(base ?? {}) };\n\n for (const [name, localOverride] of Object.entries(local ?? {})) {\n merged[name] = mergeOverrideConfig(merged[name], localOverride);\n }\n\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction mergeOverrideConfig(\n base: NonNullable<PromptDefaults['environments']>[string] | undefined,\n local: NonNullable<PromptDefaults['environments']>[string],\n): NonNullable<PromptDefaults['environments']>[string] {\n const merged: NonNullable<PromptDefaults['environments']>[string] = {\n ...(base ?? {}),\n ...local,\n };\n\n const reasoning = mergeRecordBlock(base?.reasoning, local.reasoning);\n const sampling = mergeRecordBlock(base?.sampling, local.sampling);\n const response = mergeRecordBlock(base?.response, local.response);\n const compression = mergeCompression(base?.compression, local.compression);\n const cache = mergeCache(base?.cache, local.cache);\n const raw = mergeRaw(base?.raw, local.raw);\n const providerOptions = mergeProviderOptions(base?.provider_options, local.provider_options);\n\n if (reasoning !== undefined) merged.reasoning = reasoning;\n if (sampling !== undefined) merged.sampling = sampling;\n if (response !== undefined) merged.response = response;\n if (compression !== undefined) merged.compression = compression;\n if (cache !== undefined) merged.cache = cache;\n if (raw !== undefined) merged.raw = raw;\n if (providerOptions !== undefined) merged.provider_options = providerOptions;\n\n return merged;\n}\n\nfunction removeEmptyProviderBlocks<T extends Record<string, unknown>>(value: T): void {\n for (const key of Object.keys(value)) {\n const block = value[key];\n if (block === undefined) {\n delete value[key];\n continue;\n }\n\n if (\n block !== null\n &&\n typeof block === 'object'\n && !Array.isArray(block)\n && Object.keys(block).length === 0\n ) {\n delete value[key];\n }\n }\n}\n","import { readFile } from 'node:fs/promises';\nimport { createHash } from 'node:crypto';\nimport { dirname, extname, resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { z } from 'zod';\nimport { zodToJsonSchema } from 'zod-to-json-schema';\nimport type { PromptAsset } from '../schema/index.js';\n\nconst SUPPORTED_SCHEMA_REF_EXTENSIONS = new Set(['.json', '.js', '.mjs', '.cjs']);\n\n\nasync function resolveJsonSchemaRef(schemaRef: string, promptFilePath: string): Promise<{ schema: Record<string, unknown>; resolvedPath: string; hash: string }> {\n const resolvedPath = resolve(dirname(promptFilePath), schemaRef);\n let raw: string;\n\n try {\n raw = await readFile(resolvedPath, 'utf-8');\n } catch (error) {\n const code = (error as NodeJS.ErrnoException).code;\n if (code === 'ENOENT') {\n throw new Error(`POK050: response.schema_ref \"${schemaRef}\" not found (resolved from ${promptFilePath})`);\n }\n throw error;\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n throw new Error(`POK050: response.schema_ref \"${schemaRef}\" is not valid JSON`);\n }\n\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error(`POK050: response.schema_ref \"${schemaRef}\" must resolve to a JSON object schema`);\n }\n\n return {\n schema: parsed as Record<string, unknown>,\n resolvedPath,\n hash: createHash('sha256').update(raw).digest('hex'),\n };\n}\n\nasync function resolveZodSchemaRef(schemaRef: string, promptFilePath: string): Promise<{ schema: Record<string, unknown>; resolvedPath: string; hash: string }> {\n const resolvedPath = resolve(dirname(promptFilePath), schemaRef);\n\n let moduleSource: string;\n try {\n moduleSource = await readFile(resolvedPath, 'utf-8');\n } catch (error) {\n const code = (error as NodeJS.ErrnoException).code;\n if (code === 'ENOENT') {\n throw new Error(`POK051: response.schema_ref \"${schemaRef}\" not found (resolved from ${promptFilePath})`);\n }\n throw error;\n }\n\n let imported: unknown;\n try {\n imported = await import(pathToFileURL(resolvedPath).href);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`POK051: response.schema_ref \"${schemaRef}\" could not be imported as a module (${message})`);\n }\n\n const mod = imported as Record<string, unknown>;\n const candidate = mod.default ?? mod.schema;\n\n if (!(candidate instanceof z.ZodType)) {\n throw new Error('POK051: zod schema modules must export a Zod schema as default export or named export \"schema\"');\n }\n\n const jsonSchema = zodToJsonSchema(candidate, {\n target: 'jsonSchema7',\n $refStrategy: 'none',\n });\n\n if (!jsonSchema || typeof jsonSchema !== 'object' || Array.isArray(jsonSchema)) {\n throw new Error(`POK051: response.schema_ref \"${schemaRef}\" did not produce a valid JSON schema object`);\n }\n\n return {\n schema: jsonSchema as Record<string, unknown>,\n resolvedPath,\n hash: createHash('sha256').update(moduleSource).digest('hex'),\n };\n}\n\nexport async function resolveResponseSchemaRef(asset: PromptAsset, promptFilePath: string): Promise<PromptAsset> {\n const schemaRef = asset.response?.schema_ref;\n if (!schemaRef) return asset;\n\n const ext = extname(schemaRef).toLowerCase();\n if (!SUPPORTED_SCHEMA_REF_EXTENSIONS.has(ext)) {\n throw new Error(`POK051: response.schema_ref \"${schemaRef}\" has unsupported extension \"${ext}\". Use .json, .js, .mjs, or .cjs`);\n }\n\n const resolved = (ext === '.json')\n ? await resolveJsonSchemaRef(schemaRef, promptFilePath)\n : await resolveZodSchemaRef(schemaRef, promptFilePath);\n\n return {\n ...asset,\n response: {\n ...asset.response,\n schema: resolved.schema,\n schema_ref: undefined,\n schema_source: {\n mode: ext === '.json' ? 'schema_ref_json' : 'schema_ref_zod_module',\n ref: schemaRef,\n resolved_path: resolved.resolvedPath,\n hash: resolved.hash,\n },\n },\n };\n}\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';\nimport { getContextInputs } from './context.js';\nimport {\n compressHeuristicText,\n estimateHeuristicTokens,\n type HeuristicCompressionOptions,\n} from './token-compression.js';\nimport {\n compactCode,\n type CodeCompactionOptions,\n} from './code-compaction.js';\n\nexport const THETOKENCOMPANY_DEFAULT_MODEL = 'bear-2';\nexport const THETOKENCOMPANY_DEFAULT_BASE_URL = 'https://api.thetokencompany.com';\nexport const HEURISTIC_COMPRESSION_MODEL = 'local-heuristic-v1';\nexport const CODE_COMPACTION_MODEL = 'local-code-compactor-v1';\n\nexport interface TheTokenCompanyRuntimeOptions {\n apiKey?: string;\n baseURL?: string;\n fetch?: typeof fetch;\n}\n\nexport interface PromptCompressionResult {\n provider: 'thetokencompany' | 'heuristic' | 'code';\n model: string;\n inputTokens: number;\n outputTokens: number;\n tokensSaved: number;\n compressionRatio: number;\n scope?: 'prompt_template' | 'placeholder';\n variable?: string;\n outputFormat?: 'toon' | 'code';\n}\n\nexport interface PromptCompressionSummary {\n steps: number;\n inputTokens: number;\n outputTokens: number;\n tokensSaved: number;\n reductionRatio: number;\n}\n\nexport interface PromptCompressionRenderResult {\n asset: ResolvedPromptAsset;\n runtime: RuntimeRenderOptions;\n compression: PromptCompressionResult[];\n warnings: string[];\n}\n\ninterface TheTokenCompanyCompressResponse {\n output: string;\n output_tokens: number;\n input_tokens: number;\n tokens_saved: number;\n compression_ratio: number;\n warnings?: string[];\n}\n\ninterface TheTokenCompanyRawCompressResponse extends Partial<TheTokenCompanyCompressResponse> {\n original_input_tokens?: number;\n compression_time?: number;\n}\n\nexport function summarizePromptCompression(\n compression: PromptCompressionResult[] = [],\n): PromptCompressionSummary {\n const totals = compression.reduce(\n (accumulator, result) => {\n accumulator.inputTokens += result.inputTokens;\n accumulator.outputTokens += result.outputTokens;\n accumulator.tokensSaved += result.tokensSaved;\n return accumulator;\n },\n {\n inputTokens: 0,\n outputTokens: 0,\n tokensSaved: 0,\n },\n );\n\n return {\n steps: compression.length,\n inputTokens: totals.inputTokens,\n outputTokens: totals.outputTokens,\n tokensSaved: totals.tokensSaved,\n reductionRatio: totals.inputTokens === 0 ? 0 : totals.tokensSaved / totals.inputTokens,\n };\n}\n\nexport async function applyPromptCompressionForRender(\n asset: ResolvedPromptAsset,\n runtime: RuntimeRenderOptions,\n): Promise<PromptCompressionRenderResult> {\n const theTokenCompanyConfig = asset.compression?.thetokencompany;\n const heuristicConfig = asset.compression?.heuristic;\n const codeConfig = asset.compression?.code;\n const hasTheTokenCompanyCompression = theTokenCompanyConfig?.enabled === true && Boolean(asset.sections.prompt_template);\n const hasHeuristicPromptCompression = heuristicConfig?.enabled === true && Boolean(asset.sections.prompt_template);\n const hasCodePromptCompaction = codeConfig?.enabled === true && Boolean(asset.sections.prompt_template);\n const hasPlaceholderCompression = usesPlaceholderCompression(asset);\n\n if (\n !hasTheTokenCompanyCompression\n && !hasHeuristicPromptCompression\n && !hasCodePromptCompaction\n && !hasPlaceholderCompression\n ) {\n return { asset, runtime, compression: [], warnings: [] };\n }\n\n const compression: PromptCompressionResult[] = [];\n const warnings: string[] = [];\n const sections = renderSections(asset, {\n variables: runtime.variables,\n strict: runtime.strict,\n compression: {\n onHeuristicCompression: (event) => {\n compression.push({\n provider: 'heuristic',\n model: HEURISTIC_COMPRESSION_MODEL,\n inputTokens: event.inputTokens,\n outputTokens: event.outputTokens,\n tokensSaved: event.tokensSaved,\n compressionRatio: event.compressionRatio,\n scope: event.scope,\n variable: event.variable,\n outputFormat: event.outputFormat,\n });\n },\n onCodeCompaction: (event) => {\n compression.push({\n provider: 'code',\n model: CODE_COMPACTION_MODEL,\n inputTokens: event.inputTokens,\n outputTokens: event.outputTokens,\n tokensSaved: event.tokensSaved,\n compressionRatio: event.compressionRatio,\n scope: event.scope,\n variable: event.variable,\n outputFormat: 'code',\n });\n },\n onCompressionWarning: (warning) => {\n warnings.push(warning);\n },\n },\n });\n\n let promptTemplate = sections.prompt_template;\n\n if (hasCodePromptCompaction && promptTemplate) {\n if (hasHeuristicPromptCompression) {\n warnings.push(\n 'POK032: Local heuristic prompt compression skipped because compression.code is enabled for the prompt template.',\n );\n }\n\n const result = compactCode(promptTemplate, toCodeCompactionOptions(codeConfig));\n\n promptTemplate = result.output;\n\n if (result.tokensSaved > 0 || result.output !== sections.prompt_template) {\n compression.push({\n provider: 'code',\n model: CODE_COMPACTION_MODEL,\n inputTokens: result.inputTokens,\n outputTokens: result.outputTokens,\n tokensSaved: result.tokensSaved,\n compressionRatio: result.compressionRatio,\n scope: 'prompt_template',\n outputFormat: 'code',\n });\n }\n } else if (hasHeuristicPromptCompression && promptTemplate) {\n const result = compressHeuristicText(promptTemplate, {\n min_tokens: heuristicConfig?.min_tokens,\n max_sentences: heuristicConfig?.max_sentences,\n target_reduction: heuristicConfig?.target_reduction,\n query: resolveHeuristicPromptQuery(heuristicConfig, runtime.variables, sections.system_instructions),\n json_to_toon: heuristicConfig?.json_to_toon,\n mode: heuristicConfig?.mode,\n preserve_neighbors: heuristicConfig?.preserve_neighbors,\n fail_on_low_confidence: heuristicConfig?.fail_on_low_confidence,\n });\n\n promptTemplate = result.output;\n\n reportHeuristicCompressionWarnings(warnings, result.warnings, 'prompt template');\n\n if (result.tokensSaved > 0 || result.output !== sections.prompt_template) {\n compression.push({\n provider: 'heuristic',\n model: HEURISTIC_COMPRESSION_MODEL,\n inputTokens: result.inputTokens,\n outputTokens: result.outputTokens,\n tokensSaved: result.tokensSaved,\n compressionRatio: result.compressionRatio,\n scope: 'prompt_template',\n outputFormat: result.outputFormat,\n });\n }\n }\n\n if (hasTheTokenCompanyCompression && hasCodePromptCompaction && promptTemplate) {\n warnings.push(\n 'POK033: TheTokenCompany compression skipped because compression.code is enabled; code is compacted locally and not text-compressed.',\n );\n } else if (hasTheTokenCompanyCompression && promptTemplate) {\n const model = theTokenCompanyConfig?.model ?? THETOKENCOMPANY_DEFAULT_MODEL;\n const result = await compressWithTheTokenCompany(promptTemplate, {\n apiKey: runtime.theTokenCompany?.apiKey,\n baseURL: runtime.theTokenCompany?.baseURL,\n fetch: runtime.theTokenCompany?.fetch,\n model,\n aggressiveness: theTokenCompanyConfig?.aggressiveness,\n });\n\n promptTemplate = result.output;\n warnings.push(...(result.warnings ?? []));\n\n compression.push({\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 return {\n asset: {\n ...asset,\n sections: {\n ...asset.sections,\n ...sections,\n ...(promptTemplate !== undefined ? { prompt_template: promptTemplate } : {}),\n },\n },\n runtime: {\n ...runtime,\n variables: {},\n strict: false,\n },\n compression,\n warnings,\n };\n}\n\nfunction usesPlaceholderCompression(asset: ResolvedPromptAsset): boolean {\n const hasContextInputCompression = getContextInputs(asset).some((input) =>\n input.compression?.heuristic?.enabled === true || input.compression?.code?.enabled === true\n );\n\n if (hasContextInputCompression) {\n return true;\n }\n\n return Boolean(\n (asset.sections.system_instructions && hasCompressionModifier(asset.sections.system_instructions))\n || (asset.sections.prompt_template && hasCompressionModifier(asset.sections.prompt_template)),\n );\n}\n\nfunction hasCompressionModifier(template: string): boolean {\n return /\\{\\{\\s*[a-zA-Z_][a-zA-Z0-9_]*\\s*\\|\\s*(?:compress|toon|compact|code)\\s*\\}\\}/.test(template);\n}\n\nfunction resolveHeuristicPromptQuery(\n options: (HeuristicCompressionOptions & { query_variable?: string }) | undefined,\n variables: Record<string, string> | undefined,\n systemInstructions: string | undefined,\n): string | undefined {\n if (options?.query !== undefined) {\n return options.query;\n }\n\n if (options?.query_variable && variables?.[options.query_variable] !== undefined) {\n return variables[options.query_variable];\n }\n\n return systemInstructions;\n}\n\nfunction toCodeCompactionOptions(options: CodeCompactionOptions | undefined): CodeCompactionOptions {\n return {\n remove_comments: options?.remove_comments,\n trim_indentation: options?.trim_indentation,\n collapse_blank_lines: options?.collapse_blank_lines,\n };\n}\n\nfunction reportHeuristicCompressionWarnings(\n warnings: string[],\n compressionWarnings: string[] | undefined,\n scope: string,\n): void {\n for (const warning of compressionWarnings ?? []) {\n warnings.push(`POK031: ${warning} Scope: ${scope}.`);\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 return createTheTokenCompanyFallback(input,\n 'no API key was provided',\n );\n }\n\n const fetchImpl = options.fetch ?? globalThis.fetch;\n if (!fetchImpl) {\n return createTheTokenCompanyFallback(input,\n 'fetch is unavailable in this runtime',\n );\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 let response: Response;\n try {\n 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 } catch (error) {\n return createTheTokenCompanyFallback(input,\n `request failed: ${toErrorMessage(error)}`,\n );\n }\n\n if (!response.ok) {\n return createTheTokenCompanyFallback(input,\n `service returned HTTP ${response.status}`,\n );\n }\n\n let data: TheTokenCompanyRawCompressResponse;\n try {\n data = await response.json() as TheTokenCompanyRawCompressResponse;\n } catch (error) {\n return createTheTokenCompanyFallback(input,\n `response body was not valid JSON: ${toErrorMessage(error)}`,\n );\n }\n\n const normalized = normalizeTheTokenCompanyCompressResponse(data);\n if (!normalized) {\n return createTheTokenCompanyFallback(input,\n 'response payload was invalid',\n );\n }\n\n return normalized;\n}\n\nfunction createTheTokenCompanyFallback(\n input: string,\n reason: string,\n): TheTokenCompanyCompressResponse {\n const tokens = estimateHeuristicTokens(input);\n\n return {\n output: input,\n output_tokens: tokens,\n input_tokens: tokens,\n tokens_saved: 0,\n compression_ratio: tokens === 0 ? 0 : 1,\n warnings: [\n `POK057: TheTokenCompany compression skipped; using uncompressed prompt with zero token savings (${reason}).`,\n ],\n };\n}\n\nfunction toErrorMessage(error: unknown): string {\n return error instanceof Error && error.message\n ? error.message\n : 'unknown error';\n}\n\nfunction normalizeTheTokenCompanyCompressResponse(\n data: TheTokenCompanyRawCompressResponse,\n): TheTokenCompanyCompressResponse | undefined {\n if (\n typeof data.output !== 'string'\n || typeof data.output_tokens !== 'number'\n ) {\n return undefined;\n }\n\n const inputTokens = typeof data.input_tokens === 'number'\n ? data.input_tokens\n : data.original_input_tokens;\n\n if (typeof inputTokens !== 'number') {\n return undefined;\n }\n\n const tokensSaved = typeof data.tokens_saved === 'number'\n ? data.tokens_saved\n : inputTokens - data.output_tokens;\n const compressionRatio = typeof data.compression_ratio === 'number'\n ? data.compression_ratio\n : data.output_tokens === 0\n ? 0\n : inputTokens / data.output_tokens;\n\n return {\n output: data.output,\n output_tokens: data.output_tokens,\n input_tokens: inputTokens,\n tokens_saved: tokensSaved,\n compression_ratio: compressionRatio,\n };\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, summarizePromptCompression } 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 || prepared.warnings.length > 0\n ? {\n ...request,\n ...(prepared.compression.length > 0\n ? {\n compression: prepared.compression,\n compressionSummary: summarizePromptCompression(prepared.compression),\n }\n : {}),\n ...(prepared.warnings.length > 0 ? { warnings: prepared.warnings } : {}),\n }\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","lines","line","line","result","import_promises","import_node_fs","import_node_path","import_promises","import_node_path","line","indent","line","matter","import_promises","import_node_path","import_gray_matter","import_zod","matter","mergeRecordBlock","info","compacted","toCodeCompactionOptions","reportHeuristicCompressionWarnings"]}
1
+ {"version":3,"sources":["../../src/providers/anthropic.ts","../../src/renderer/interpolate.ts","../../src/context.ts","../../src/toon-encoding.ts","../../src/token-compression.ts","../../src/code-compaction.ts","../../src/renderer/renderer.ts","../../src/overrides/apply-overrides.ts","../../src/providers/resolve-asset.ts","../../src/prompt-resolution.ts","../../src/cache.ts","../../src/composition/resolve-includes.ts","../../src/parser/parser.ts","../../src/schema/schema.ts","../../src/parser/frontmatter-guard.ts","../../src/parser/sections.ts","../../src/parser/loader.ts","../../src/parser/response-schema-ref.ts","../../src/history.ts","../../src/compression.ts","../../src/providers/prompt-input.ts","../../src/providers/raw.ts"],"sourcesContent":["import type { ResolvedPromptAsset } from '../schema/index.js';\nimport type {\n ProviderAdapter,\n ProviderRequest,\n ValidationResult,\n RuntimeRenderOptions,\n} from './types.js';\nimport { renderSections } from '../renderer/index.js';\nimport { resolveAssetForProvider } from './resolve-asset.js';\nimport { withPromptInputSupport } from './prompt-input.js';\nimport { applyRawProviderBody } from './raw.js';\nimport { compactHistoryForPrompt } from '../history.js';\n\n/**\n * Anthropic provider adapter.\n * Produces request bodies compatible with the Anthropic Messages API.\n */\nexport const anthropicAdapter: ProviderAdapter = withPromptInputSupport({\n name: 'anthropic',\n\n validate(asset: ResolvedPromptAsset, runtime?: RuntimeRenderOptions): ValidationResult {\n const resolvedAsset = resolveAssetForProvider(asset, runtime);\n const errors: string[] = [];\n const warnings: string[] = [];\n\n if (!resolvedAsset.model) {\n errors.push('Anthropic adapter requires a model to be specified.');\n }\n\n if (resolvedAsset.sampling?.frequency_penalty !== undefined) {\n warnings.push('Anthropic does not support frequency_penalty. It will be ignored.');\n }\n if (resolvedAsset.sampling?.presence_penalty !== undefined) {\n warnings.push('Anthropic does not support presence_penalty. It will be ignored.');\n }\n if (resolvedAsset.reasoning?.effort !== undefined) {\n warnings.push('Anthropic uses budget_tokens for thinking, not effort. effort will be mapped approximately.');\n }\n if (resolvedAsset.response?.schema !== undefined && resolvedAsset.response?.format !== 'json') {\n warnings.push('Anthropic response.schema is mapped to output_config.format and should usually be paired with response.format: json.');\n }\n\n if (resolvedAsset.provider_options?.anthropic?.top_k !== undefined && resolvedAsset.provider_options.anthropic.top_k < 0) {\n errors.push('Anthropic provider_options.top_k must be >= 0.');\n }\n\n return { valid: errors.length === 0, errors, warnings };\n },\n\n render(asset: ResolvedPromptAsset, runtime: RuntimeRenderOptions): ProviderRequest {\n const resolvedAsset = resolveAssetForProvider(asset, runtime);\n const sections = renderSections(resolvedAsset, {\n variables: runtime.variables,\n strict: runtime.strict,\n });\n\n const messages: Array<Record<string, unknown>> = [];\n const anthropicCacheConfig = resolvedAsset.cache?.anthropic;\n const cacheType = anthropicCacheConfig?.type ?? 'ephemeral';\n const cacheControl = anthropicCacheConfig\n ? {\n type: cacheType,\n ...(anthropicCacheConfig.ttl ? { ttl: anthropicCacheConfig.ttl } : {}),\n }\n : undefined;\n const cacheMode = anthropicCacheConfig?.mode ?? 'automatic';\n\n // History\n const history = compactHistoryForPrompt(resolvedAsset, runtime);\n if (history) {\n for (const msg of history) {\n messages.push({ role: msg.role, content: msg.content });\n }\n }\n\n // User message (prompt template)\n if (sections.prompt_template) {\n if (cacheControl && cacheMode === 'explicit' && anthropicCacheConfig?.cache_prompt_template) {\n messages.push({\n role: 'user',\n content: [{ type: 'text', text: sections.prompt_template, cache_control: cacheControl }],\n });\n } else {\n messages.push({ role: 'user', content: sections.prompt_template });\n }\n }\n\n const body: Record<string, unknown> = {\n model: resolvedAsset.model,\n messages,\n };\n\n // System goes as top-level field in Anthropic\n if (sections.system_instructions) {\n if (cacheControl && cacheMode === 'explicit' && anthropicCacheConfig?.cache_system_instructions !== false) {\n body.system = [{ type: 'text', text: sections.system_instructions, cache_control: cacheControl }];\n } else {\n body.system = sections.system_instructions;\n }\n }\n\n // Sampling params\n if (resolvedAsset.sampling?.temperature !== undefined) body.temperature = resolvedAsset.sampling.temperature;\n if (resolvedAsset.sampling?.top_p !== undefined) body.top_p = resolvedAsset.sampling.top_p;\n if (resolvedAsset.sampling?.stop !== undefined) body.stop_sequences = resolvedAsset.sampling.stop;\n if (resolvedAsset.sampling?.max_output_tokens !== undefined) {\n body.max_tokens = resolvedAsset.sampling.max_output_tokens;\n } else {\n // Anthropic requires max_tokens\n body.max_tokens = 4096;\n }\n\n // Thinking/reasoning\n if (resolvedAsset.reasoning?.budget_tokens) {\n body.thinking = {\n type: 'enabled',\n budget_tokens: resolvedAsset.reasoning.budget_tokens,\n };\n }\n\n // Provider-specific options\n if (resolvedAsset.provider_options?.anthropic?.top_k !== undefined) {\n body.top_k = resolvedAsset.provider_options.anthropic.top_k;\n }\n\n if (resolvedAsset.provider_options?.anthropic?.output_config !== undefined) {\n body.output_config = resolvedAsset.provider_options.anthropic.output_config;\n } else if (resolvedAsset.response?.schema !== undefined) {\n body.output_config = {\n format: {\n type: 'json_schema',\n schema: resolvedAsset.response.schema,\n },\n };\n }\n\n // Streaming\n if (resolvedAsset.response?.stream !== undefined) {\n body.stream = resolvedAsset.response.stream;\n }\n\n if (cacheControl && cacheMode === 'automatic') {\n body.cache_control = cacheControl;\n }\n\n // Tools\n if (resolvedAsset.tools && resolvedAsset.tools.length > 0) {\n body.tools = resolvedAsset.tools.map((tool) => {\n if (typeof tool === 'string') {\n const def = runtime.toolRegistry?.[tool];\n if (def) {\n if (cacheControl && cacheMode === 'explicit' && anthropicCacheConfig?.cache_tools) {\n return { ...(def as Record<string, unknown>), cache_control: cacheControl };\n }\n return def;\n }\n return {\n name: tool,\n ...(cacheControl && cacheMode === 'explicit' && anthropicCacheConfig?.cache_tools\n ? { cache_control: cacheControl }\n : {}),\n };\n }\n return {\n name: tool.name,\n description: tool.description,\n input_schema: tool.input_schema ?? { type: 'object', properties: {} },\n ...(cacheControl && cacheMode === 'explicit' && anthropicCacheConfig?.cache_tools\n ? { cache_control: cacheControl }\n : {}),\n };\n });\n }\n\n if (resolvedAsset.provider_options?.anthropic?.tool_choice !== undefined) {\n body.tool_choice = resolvedAsset.provider_options.anthropic.tool_choice;\n }\n\n return {\n body: applyRawProviderBody(body, resolvedAsset, 'anthropic'),\n provider: 'anthropic',\n model: resolvedAsset.model ?? 'unknown',\n };\n },\n});\n","export interface InterpolateOptions {\n strict?: boolean;\n optionalVariables?: Iterable<string>;\n transformVariable?: (context: InterpolateVariableContext) => string;\n}\n\nexport interface InterpolateVariableContext {\n name: string;\n value: string;\n modifier?: 'compress' | 'toon' | 'compact' | 'code';\n match: string;\n}\n\nconst VARIABLE_RE = /\\{\\{\\s*([a-zA-Z_][a-zA-Z0-9_]*)(?:\\s*\\|\\s*(compress|toon|compact|code))?\\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, modifier: 'compress' | 'toon' | 'compact' | 'code' | undefined) => {\n if (name in variables) {\n const value = variables[name];\n return options.transformVariable\n ? options.transformVariable({ name, value, modifier, match })\n : value;\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 CodeCompaction,\n PromptAsset,\n ResolvedPromptAsset,\n ContextBuiltInValidatorDefinition,\n ContextInputCompression,\n ContextInputDefinition,\n ContextRegexDefinition,\n} from './schema/index.js';\nimport type { HeuristicCompressionOptions } from './token-compression.js';\nimport type { CodeCompactionOptions } from './code-compaction.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 compression?: NormalizedContextInputCompression;\n allow_regex?: NormalizedContextRegex;\n deny_regex?: NormalizedContextRegex;\n non_empty?: NormalizedContextBuiltInValidator;\n reject_secrets?: NormalizedContextBuiltInValidator;\n}\n\nexport interface NormalizedContextInputCompression {\n heuristic?: HeuristicCompressionOptions & {\n enabled?: boolean;\n query_variable?: string;\n };\n code?: CodeCompactionOptions;\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 compression: normalizeContextInputCompression(input.compression),\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 normalizeContextInputCompression(\n value: ContextInputCompression | undefined,\n): NormalizedContextInputCompression | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (value === 'heuristic') {\n return { heuristic: { enabled: true } };\n }\n\n if (value === 'code') {\n return { code: { enabled: true } };\n }\n\n if (value.heuristic === undefined) {\n return normalizeCodeCompression(value.code);\n }\n\n const normalized: NormalizedContextInputCompression = {\n heuristic: {\n enabled: value.heuristic.enabled ?? true,\n min_tokens: value.heuristic.min_tokens,\n max_sentences: value.heuristic.max_sentences,\n target_reduction: value.heuristic.target_reduction,\n query: value.heuristic.query,\n query_variable: value.heuristic.query_variable,\n json_to_toon: value.heuristic.json_to_toon,\n mode: value.heuristic.mode,\n preserve_neighbors: value.heuristic.preserve_neighbors,\n fail_on_low_confidence: value.heuristic.fail_on_low_confidence,\n },\n };\n\n const code = normalizeCodeCompression(value.code);\n if (code?.code) {\n normalized.code = code.code;\n }\n\n return normalized;\n}\n\nfunction normalizeCodeCompression(value: CodeCompaction | undefined): NormalizedContextInputCompression | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n return {\n code: {\n enabled: value.enabled ?? true,\n remove_comments: value.remove_comments,\n trim_indentation: value.trim_indentation,\n collapse_blank_lines: value.collapse_blank_lines,\n },\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","type JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue };\n\nexport interface ToonEncodeOptions {\n indent?: number;\n delimiter?: ',' | '\\t' | '|';\n}\n\nexport interface JsonToToonResult {\n output: string;\n value: JsonValue;\n}\n\nconst DEFAULT_INDENT = 2;\nconst DEFAULT_DELIMITER = ',';\n\nexport function tryJsonToToon(text: string, options: ToonEncodeOptions = {}): JsonToToonResult | undefined {\n const trimmed = text.trim();\n if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) {\n return undefined;\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed);\n } catch {\n return undefined;\n }\n\n const value = normalizeJsonValue(parsed);\n if (value === undefined) {\n return undefined;\n }\n\n return {\n output: encodeToon(value, options),\n value,\n };\n}\n\nexport function encodeToon(value: JsonValue, options: ToonEncodeOptions = {}): string {\n const resolved = {\n indent: options.indent ?? DEFAULT_INDENT,\n delimiter: options.delimiter ?? DEFAULT_DELIMITER,\n };\n\n return encodeValue(value, undefined, 0, resolved).join('\\n');\n}\n\nfunction normalizeJsonValue(value: unknown): JsonValue | undefined {\n if (value === null || typeof value === 'string' || typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : null;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => normalizeJsonValue(item) ?? null);\n }\n\n if (isPlainObject(value)) {\n const normalized: { [key: string]: JsonValue } = {};\n for (const [key, child] of Object.entries(value)) {\n normalized[key] = normalizeJsonValue(child) ?? null;\n }\n return normalized;\n }\n\n return undefined;\n}\n\nfunction encodeValue(\n value: JsonValue,\n key: string | undefined,\n depth: number,\n options: Required<ToonEncodeOptions>,\n): string[] {\n if (isPrimitive(value)) {\n return [line(depth, key === undefined ? encodePrimitive(value, options.delimiter) : `${encodeKey(key)}: ${encodePrimitive(value, options.delimiter)}`, options.indent)];\n }\n\n if (Array.isArray(value)) {\n return encodeArray(value, key, depth, options);\n }\n\n return encodeObject(value, key, depth, options);\n}\n\nfunction encodeObject(\n value: { [key: string]: JsonValue },\n key: string | undefined,\n depth: number,\n options: Required<ToonEncodeOptions>,\n): string[] {\n const entries = Object.entries(value);\n const lines: string[] = [];\n\n if (key !== undefined) {\n lines.push(line(depth, `${encodeKey(key)}:`, options.indent));\n }\n\n const childDepth = key === undefined ? depth : depth + 1;\n for (const [childKey, childValue] of entries) {\n lines.push(...encodeValue(childValue, childKey, childDepth, options));\n }\n\n return lines;\n}\n\nfunction encodeArray(\n value: JsonValue[],\n key: string | undefined,\n depth: number,\n options: Required<ToonEncodeOptions>,\n): string[] {\n const prefix = key === undefined ? '' : encodeKey(key);\n\n if (value.length === 0) {\n return [line(depth, key === undefined ? '[]' : `${prefix}: []`, options.indent)];\n }\n\n if (value.every(isPrimitive)) {\n const joined = value.map((item) => encodePrimitive(item, options.delimiter)).join(options.delimiter);\n return [line(depth, `${prefix}[${value.length}]: ${joined}`, options.indent)];\n }\n\n const tabularFields = getTabularFields(value);\n if (tabularFields) {\n const lines = [\n line(depth, `${prefix}[${value.length}]{${tabularFields.map(encodeKey).join(options.delimiter)}}:`, options.indent),\n ];\n for (const row of value as Array<{ [key: string]: JsonPrimitive }>) {\n lines.push(line(depth + 1, tabularFields.map((field) => encodePrimitive(row[field], options.delimiter)).join(options.delimiter), options.indent));\n }\n return lines;\n }\n\n const lines = [line(depth, `${prefix}[${value.length}]:`, options.indent)];\n for (const item of value) {\n lines.push(...encodeListItem(item, depth + 1, options));\n }\n return lines;\n}\n\nfunction encodeListItem(\n value: JsonValue,\n depth: number,\n options: Required<ToonEncodeOptions>,\n): string[] {\n if (isPrimitive(value)) {\n return [line(depth, `- ${encodePrimitive(value, options.delimiter)}`, options.indent)];\n }\n\n if (Array.isArray(value)) {\n const encoded = encodeArray(value, undefined, depth, options);\n return encoded.map((item, index) => {\n if (index === 0) {\n return line(depth, `- ${item.trimStart()}`, options.indent);\n }\n return item;\n });\n }\n\n const entries = Object.entries(value);\n if (entries.length === 0) {\n return [line(depth, '-', options.indent)];\n }\n\n const [firstKey, firstValue] = entries[0];\n const rest = Object.fromEntries(entries.slice(1)) as { [key: string]: JsonValue };\n const firstLines = encodeValue(firstValue, firstKey, depth, options);\n const lines = [line(depth, `- ${firstLines[0].trimStart()}`, options.indent)];\n\n for (const continuation of firstLines.slice(1)) {\n lines.push(continuation);\n }\n\n if (Object.keys(rest).length > 0) {\n lines.push(...encodeObject(rest, undefined, depth + 1, options));\n }\n\n return lines;\n}\n\nfunction getTabularFields(value: JsonValue[]): string[] | undefined {\n if (value.length === 0 || !value.every(isObjectRecord)) {\n return undefined;\n }\n\n const first = value[0] as { [key: string]: JsonValue };\n const fields = Object.keys(first);\n if (fields.length === 0) {\n return undefined;\n }\n\n for (const row of value as Array<{ [key: string]: JsonValue }>) {\n const keys = Object.keys(row);\n if (keys.length !== fields.length) {\n return undefined;\n }\n for (const field of fields) {\n if (!(field in row) || !isPrimitive(row[field])) {\n return undefined;\n }\n }\n }\n\n return fields;\n}\n\nfunction encodePrimitive(value: JsonPrimitive, delimiter: string): string {\n if (value === null) {\n return 'null';\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n return encodeString(value, delimiter);\n}\n\nfunction encodeString(value: string, delimiter: string): string {\n if (isSafeUnquotedString(value, delimiter)) {\n return value;\n }\n return JSON.stringify(value);\n}\n\nfunction encodeKey(key: string): string {\n if (/^[A-Z_][\\w.]*$/i.test(key)) {\n return key;\n }\n return JSON.stringify(key);\n}\n\nfunction isSafeUnquotedString(value: string, delimiter: string): boolean {\n if (value.length === 0 || value !== value.trim()) {\n return false;\n }\n if (/^(?:true|false|null)$/i.test(value) || /^-?\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?$/i.test(value) || /^0\\d+$/.test(value)) {\n return false;\n }\n if (value.includes(':') || value.includes('\"') || value.includes('\\\\') || value.includes(delimiter)) {\n return false;\n }\n if (/[[\\]{}]|[\\u0000-\\u001F]/.test(value) || value.startsWith('-')) {\n return false;\n }\n return true;\n}\n\nfunction isPrimitive(value: JsonValue): value is JsonPrimitive {\n return value === null || typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';\n}\n\nfunction isObjectRecord(value: JsonValue): value is { [key: string]: JsonValue } {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== 'object') {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n return prototype === null || prototype === Object.prototype;\n}\n\nfunction line(depth: number, content: string, indent: number): string {\n return `${' '.repeat(depth * indent)}${content}`;\n}\n","import { tryJsonToToon } from './toon-encoding.js';\n\nconst TOKEN_REGEX = /[\\p{L}\\p{N}]+|[^\\s]/gu;\nconst TOKEN_NORMALIZE_REGEX = /[^\\p{L}\\p{N}]/gu;\nconst DEDUPE_NORMALIZE_REGEX = /[^\\p{L}\\p{N}\\s]/gu;\nconst BOILERPLATE_REGEX = /copyright|all rights reserved|disclaimer/i;\nconst STRUCTURED_BLOCK_REGEX = /(^|\\n)\\s*```|(^|\\n)\\s*\\|.+\\|\\s*(\\n|$)/;\nconst PROTECTED_SIGNAL_REGEX = /\\b(?:must|shall|should|required|requires|requirement|never|do not|don't|only|except|unless|however|but|constraint|constraints|safety|security|deadline|sla)\\b|output\\s+format/i;\nconst EVIDENCE_SIGNAL_REGEX = /https?:\\/\\/|\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b|[$€£]\\s?\\d|\\b\\d+(?:[.,:/-]\\d+)*%?\\b|\\b[A-Z]{2,}[-_A-Z0-9]*\\b|\\b[A-Z]\\d\\b/i;\nconst MAX_SEGMENT_TOKENS = 120;\n\nconst STOP_WORDS = new Set([\n 'a', 'an', 'and', 'are', 'as', 'at', 'be', 'by', 'for', 'from', 'how', 'in', 'is', 'it',\n 'of', 'on', 'or', 'that', 'the', 'this', 'to', 'was', 'we', 'with', 'you', 'your', 'our',\n]);\n\nexport interface HeuristicCompressionOptions {\n min_tokens?: number;\n max_sentences?: number;\n target_reduction?: number;\n query?: string;\n json_to_toon?: boolean;\n mode?: 'conservative' | 'balanced';\n preserve_neighbors?: boolean;\n fail_on_low_confidence?: boolean;\n}\n\nexport interface HeuristicCompressionOutput {\n output: string;\n inputTokens: number;\n outputTokens: number;\n tokensSaved: number;\n compressionRatio: number;\n outputFormat?: 'toon';\n warnings?: string[];\n}\n\ninterface SentenceCandidate {\n sentence: string;\n index: number;\n tokenCount: number;\n uniqueTerms: Set<string>;\n isBoilerplate: boolean;\n isProtected: boolean;\n hasEvidence: boolean;\n}\n\ninterface ScoredSentenceCandidate {\n sentence: string;\n index: number;\n score: number;\n overlapCount: number;\n overlapTerms: string[];\n tokens: number;\n isProtected: boolean;\n hasEvidence: boolean;\n}\n\nconst DEFAULT_OPTIONS = {\n min_tokens: 80,\n max_sentences: 10,\n target_reduction: 0.45,\n mode: 'conservative' as const,\n};\n\nexport function tokenizeForHeuristicCompression(text: string | undefined): string[] {\n if (!text) {\n return [];\n }\n\n return text.match(TOKEN_REGEX) ?? [];\n}\n\nexport function estimateHeuristicTokens(text: string | undefined): number {\n return tokenizeForHeuristicCompression(text).length;\n}\n\nexport function compressHeuristicText(\n input: string,\n options: HeuristicCompressionOptions = {},\n): HeuristicCompressionOutput {\n const inputText = input ?? '';\n const inputTokens = estimateHeuristicTokens(inputText);\n\n if (options.json_to_toon === true) {\n const toonResult = tryJsonToToon(inputText);\n if (toonResult) {\n const toonOutputTokens = estimateHeuristicTokens(toonResult.output);\n if (toonOutputTokens <= inputTokens) {\n return {\n ...toCompressionOutput(toonResult.output, inputTokens),\n outputFormat: 'toon',\n };\n }\n\n return {\n ...toCompressionOutput(inputText, inputTokens),\n warnings: ['JSON-to-TOON skipped because TOON was not smaller than the original JSON.'],\n };\n }\n\n return {\n ...toCompressionOutput(inputText, inputTokens),\n warnings: ['JSON-to-TOON skipped because the input is not a complete valid JSON object or array.'],\n };\n }\n\n if (inputTokens === 0) {\n return toCompressionOutput(inputText, inputTokens);\n }\n\n const mode = options.mode ?? DEFAULT_OPTIONS.mode;\n const isConservative = mode === 'conservative';\n const failOnLowConfidence = options.fail_on_low_confidence ?? isConservative;\n const preserveNeighbors = options.preserve_neighbors ?? isConservative;\n\n const minTokens = options.min_tokens ?? DEFAULT_OPTIONS.min_tokens;\n if (inputTokens <= minTokens) {\n return toCompressionOutput(inputText, inputTokens);\n }\n\n if (isConservative && looksStructured(inputText)) {\n return toCompressionOutput(inputText, inputTokens, [\n 'Heuristic compression skipped because the input appears to contain structured blocks; use TOON or code compaction for structured content.',\n ]);\n }\n\n const analysis = preprocessContext(inputText);\n\n const targetReduction = options.target_reduction ?? DEFAULT_OPTIONS.target_reduction;\n const targetTokens = Math.max(1, Math.max(minTokens, Math.floor(inputTokens * (1 - targetReduction))));\n const maxSentences = options.max_sentences ?? DEFAULT_OPTIONS.max_sentences;\n const query = options.query ?? '';\n const terms = queryTerms(query);\n\n if (failOnLowConfidence && terms.size === 0) {\n return toCompressionOutput(inputText, inputTokens, [\n 'Heuristic compression skipped because no usable relevance query terms were available.',\n ]);\n }\n\n const scoredSentences = analysis.candidates.map((candidate) => ({\n sentence: candidate.sentence,\n index: candidate.index,\n ...scoreSentenceCandidate(candidate, terms),\n tokens: candidate.tokenCount,\n isProtected: candidate.isProtected,\n hasEvidence: candidate.hasEvidence,\n }));\n\n if (\n failOnLowConfidence\n && terms.size > 0\n && !scoredSentences.some((candidate) => candidate.overlapCount > 0)\n ) {\n return toCompressionOutput(inputText, inputTokens, [\n 'Heuristic compression skipped because no sentence matched the relevance query.',\n ]);\n }\n\n const selected: ScoredSentenceCandidate[] = [];\n const selectedIndices = new Set<number>();\n const coveredTerms = new Set<string>();\n let selectedTokens = 0;\n\n while (selected.length < maxSentences) {\n let bestCandidate: ScoredSentenceCandidate | undefined;\n let bestAdjustedScore = Number.NEGATIVE_INFINITY;\n\n for (const candidate of scoredSentences) {\n if (selectedIndices.has(candidate.index)) {\n continue;\n }\n\n const underBudget = selectedTokens + candidate.tokens <= targetTokens;\n const forceTopCandidate = selected.length === 0;\n const forceRelevantSecond = selected.length === 1 && candidate.overlapCount > 0;\n\n if (!underBudget && !forceTopCandidate && !forceRelevantSecond) {\n continue;\n }\n\n let uncoveredOverlapCount = 0;\n for (const term of candidate.overlapTerms) {\n if (!coveredTerms.has(term)) {\n uncoveredOverlapCount += 1;\n }\n }\n\n const adjustedScore = candidate.score + uncoveredOverlapCount * 1.2;\n\n if (\n adjustedScore > bestAdjustedScore\n || (\n adjustedScore === bestAdjustedScore\n && bestCandidate\n && isBetterTieBreak(candidate, bestCandidate)\n )\n ) {\n bestAdjustedScore = adjustedScore;\n bestCandidate = candidate;\n }\n }\n\n if (!bestCandidate) {\n break;\n }\n\n selected.push(bestCandidate);\n selectedIndices.add(bestCandidate.index);\n selectedTokens += bestCandidate.tokens;\n\n for (const term of bestCandidate.overlapTerms) {\n coveredTerms.add(term);\n }\n }\n\n const finalSelection = preserveNeighbors\n ? expandSelectionWithNeighbors(selected, scoredSentences, maxSentences)\n : selected;\n\n finalSelection.sort((left, right) => left.index - right.index);\n\n let output = finalSelection.map((item) => item.sentence).join(' ');\n\n if (!output) {\n output = takeWholeCandidatesWithinBudget(analysis.candidates, targetTokens) || inputText;\n }\n\n return toCompressionOutput(output, inputTokens);\n}\n\nfunction toCompressionOutput(\n output: string,\n inputTokens: number,\n warnings: string[] = [],\n): HeuristicCompressionOutput {\n const outputTokens = estimateHeuristicTokens(output);\n const tokensSaved = Math.max(0, inputTokens - outputTokens);\n\n return {\n output,\n inputTokens,\n outputTokens,\n tokensSaved,\n compressionRatio: outputTokens === 0 ? 0 : inputTokens / outputTokens,\n ...(warnings.length > 0 ? { warnings } : {}),\n };\n}\n\nfunction isBetterTieBreak(\n candidate: ScoredSentenceCandidate,\n bestCandidate: ScoredSentenceCandidate,\n): boolean {\n if (candidate.overlapCount !== bestCandidate.overlapCount) {\n return candidate.overlapCount > bestCandidate.overlapCount;\n }\n if (candidate.tokens !== bestCandidate.tokens) {\n return candidate.tokens < bestCandidate.tokens;\n }\n return candidate.index < bestCandidate.index;\n}\n\nfunction normalizeForDeduping(sentence: string): string {\n return sentence\n .toLowerCase()\n .replace(DEDUPE_NORMALIZE_REGEX, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\nfunction splitIntoSentences(text: string): string[] {\n return text\n .split(/(?<=[.!?])\\s+|\\n+/g)\n .map((sentence) => sentence.trim())\n .filter(Boolean);\n}\n\nfunction splitOversizedSentence(sentence: string, maxTokens = MAX_SEGMENT_TOKENS): string[] {\n const rawTokens = tokenizeForHeuristicCompression(sentence);\n if (rawTokens.length <= maxTokens) {\n return [sentence];\n }\n\n const commaSplit = sentence\n .split(/(?<=[,;:])\\s+|\\s+-\\s+/g)\n .map((segment) => segment.trim())\n .filter(Boolean);\n\n if (commaSplit.length > 1) {\n return commaSplit.flatMap((segment) => {\n if (estimateHeuristicTokens(segment) <= maxTokens) {\n return [segment];\n }\n return [segment];\n });\n }\n\n return [sentence];\n}\n\nfunction normalizeToken(token: string): string {\n return token.replace(TOKEN_NORMALIZE_REGEX, '').trim();\n}\n\nfunction tokenizeNormalized(text: string): string[] {\n return tokenizeForHeuristicCompression(text.toLowerCase())\n .map(normalizeToken)\n .filter(Boolean);\n}\n\nfunction queryTerms(query: string): Set<string> {\n return new Set(tokenizeNormalized(query).filter((term) => {\n if (STOP_WORDS.has(term)) {\n return false;\n }\n return term.length >= 3 || /^(?:[a-z]\\d|\\d+[a-z]?|[a-z]{2})$/i.test(term);\n }));\n}\n\nfunction preprocessContext(context: string): { originalTokens: number; candidates: SentenceCandidate[] } {\n const originalTokens = estimateHeuristicTokens(context);\n const candidates: SentenceCandidate[] = [];\n let previousNormalized = '';\n\n for (const sentence of splitIntoSentences(context)) {\n for (const segment of splitOversizedSentence(sentence)) {\n const normalized = normalizeForDeduping(segment);\n if (!normalized || normalized === previousNormalized) {\n continue;\n }\n\n previousNormalized = normalized;\n\n const rawTokens = tokenizeForHeuristicCompression(segment);\n const normalizedTerms = rawTokens\n .map((token) => normalizeToken(token.toLowerCase()))\n .filter(Boolean);\n const lowered = segment.toLowerCase();\n\n candidates.push({\n sentence: segment,\n index: candidates.length,\n tokenCount: rawTokens.length,\n uniqueTerms: new Set(normalizedTerms),\n isBoilerplate: BOILERPLATE_REGEX.test(lowered),\n isProtected: PROTECTED_SIGNAL_REGEX.test(segment),\n hasEvidence: EVIDENCE_SIGNAL_REGEX.test(segment),\n });\n }\n }\n\n return { originalTokens, candidates };\n}\n\nfunction scoreSentenceCandidate(\n candidate: SentenceCandidate,\n terms: Set<string>,\n): { score: number; overlapCount: number; overlapTerms: string[] } {\n if (candidate.tokenCount === 0) {\n return {\n score: 0,\n overlapCount: 0,\n overlapTerms: [],\n };\n }\n\n const overlapTerms: string[] = [];\n let overlap = 0;\n\n for (const term of terms) {\n if (candidate.uniqueTerms.has(term)) {\n overlap += 1;\n overlapTerms.push(term);\n }\n }\n\n const overlapScore = overlap * 2;\n const densityScore = terms.size > 0 ? overlap / terms.size : 0;\n const lengthScore = Math.min(candidate.tokenCount, 40) / 40;\n const boilerplatePenalty = candidate.isBoilerplate ? 0.5 : 0;\n const protectedScore = candidate.isProtected ? 0.9 : 0;\n const evidenceScore = candidate.hasEvidence ? 0.4 : 0;\n\n return {\n score: overlapScore + densityScore + lengthScore + protectedScore + evidenceScore - boilerplatePenalty,\n overlapCount: overlap,\n overlapTerms,\n };\n}\n\nfunction looksStructured(text: string): boolean {\n if (STRUCTURED_BLOCK_REGEX.test(text)) {\n return true;\n }\n\n const lines = text.split(/\\r?\\n/).map((line) => line.trim()).filter(Boolean);\n if (lines.length < 3) {\n return false;\n }\n\n const listLikeLines = lines.filter((line) => /^[-*+] |\\d+[.)] /.test(line)).length;\n return listLikeLines >= 3 && listLikeLines / lines.length >= 0.6;\n}\n\nfunction expandSelectionWithNeighbors(\n selected: ScoredSentenceCandidate[],\n scoredSentences: ScoredSentenceCandidate[],\n maxSentences: number,\n): ScoredSentenceCandidate[] {\n if (selected.length === 0 || selected.length >= maxSentences) {\n return selected;\n }\n\n const byIndex = new Map(scoredSentences.map((candidate) => [candidate.index, candidate]));\n const expanded = new Map(selected.map((candidate) => [candidate.index, candidate]));\n\n for (const candidate of selected) {\n if (expanded.size >= maxSentences) {\n break;\n }\n\n if (candidate.overlapCount === 0 && !candidate.isProtected && !candidate.hasEvidence) {\n continue;\n }\n\n for (const neighborIndex of [candidate.index - 1, candidate.index + 1]) {\n if (expanded.size >= maxSentences) {\n break;\n }\n\n const neighbor = byIndex.get(neighborIndex);\n if (neighbor && !expanded.has(neighbor.index)) {\n expanded.set(neighbor.index, neighbor);\n }\n }\n }\n\n return [...expanded.values()];\n}\n\nfunction takeWholeCandidatesWithinBudget(candidates: SentenceCandidate[], targetTokens: number): string {\n const selected: string[] = [];\n let tokens = 0;\n\n for (const candidate of candidates) {\n if (tokens + candidate.tokenCount > targetTokens) {\n break;\n }\n\n selected.push(candidate.sentence);\n tokens += candidate.tokenCount;\n }\n\n return selected.join(' ');\n}\n","import { estimateHeuristicTokens } from './token-compression.js';\n\nexport interface CodeCompactionOptions {\n enabled?: boolean;\n remove_comments?: boolean;\n trim_indentation?: boolean;\n collapse_blank_lines?: boolean;\n}\n\nexport interface CodeCompactionOutput {\n output: string;\n inputTokens: number;\n outputTokens: number;\n tokensSaved: number;\n compressionRatio: number;\n}\n\nexport function compactCode(input: string, options: CodeCompactionOptions = {}): CodeCompactionOutput {\n const inputText = input ?? '';\n const removeComments = options.remove_comments ?? true;\n const trimIndentation = options.trim_indentation ?? true;\n const collapseBlankLines = options.collapse_blank_lines ?? true;\n\n let output = inputText.replace(/\\r\\n?/g, '\\n');\n\n if (removeComments) {\n output = stripCodeComments(output);\n }\n\n output = output\n .split('\\n')\n .map((line) => line.replace(/[ \\t]+$/g, ''))\n .join('\\n');\n\n if (trimIndentation) {\n output = stripCommonIndent(output);\n }\n\n if (collapseBlankLines) {\n output = output\n .split('\\n')\n .filter((line) => line.trim().length > 0)\n .join('\\n');\n }\n\n output = output.trim();\n\n const inputTokens = estimateHeuristicTokens(inputText);\n const outputTokens = estimateHeuristicTokens(output);\n\n return {\n output,\n inputTokens,\n outputTokens,\n tokensSaved: Math.max(0, inputTokens - outputTokens),\n compressionRatio: outputTokens === 0 ? 0 : inputTokens / outputTokens,\n };\n}\n\nfunction stripCommonIndent(input: string): string {\n const lines = input.split('\\n');\n const nonEmptyLines = lines.filter((line) => line.trim().length > 0);\n if (nonEmptyLines.length === 0) {\n return '';\n }\n\n const commonIndent = Math.min(\n ...nonEmptyLines.map((line) => {\n const match = line.match(/^[ \\t]*/);\n return match?.[0].length ?? 0;\n }),\n );\n\n if (commonIndent === 0) {\n return input;\n }\n\n return lines.map((line) => line.slice(commonIndent)).join('\\n');\n}\n\nfunction stripCodeComments(input: string): string {\n let output = '';\n let index = 0;\n let quote: '\"' | \"'\" | '`' | undefined;\n let escaped = false;\n let atLineStart = true;\n\n while (index < input.length) {\n const char = input[index];\n const next = input[index + 1];\n\n if (quote) {\n output += char;\n if (escaped) {\n escaped = false;\n } else if (char === '\\\\') {\n escaped = true;\n } else if (char === quote) {\n quote = undefined;\n }\n atLineStart = char === '\\n';\n index += 1;\n continue;\n }\n\n if ((char === '\"' || char === \"'\" || char === '`')) {\n quote = char;\n output += char;\n atLineStart = false;\n index += 1;\n continue;\n }\n\n if (atLineStart && char === '#' && next === '!') {\n while (index < input.length && input[index] !== '\\n') {\n output += input[index];\n index += 1;\n }\n continue;\n }\n\n if (char === '/' && next === '/') {\n index += 2;\n while (index < input.length && input[index] !== '\\n') {\n index += 1;\n }\n continue;\n }\n\n if (char === '/' && next === '*') {\n index += 2;\n while (index < input.length && !(input[index] === '*' && input[index + 1] === '/')) {\n if (input[index] === '\\n') {\n output += '\\n';\n }\n index += 1;\n }\n index += input[index] === '*' ? 2 : 0;\n continue;\n }\n\n if (char === '#' && (next === ' ' || next === '\\t')) {\n index += 1;\n while (index < input.length && input[index] !== '\\n') {\n index += 1;\n }\n continue;\n }\n\n output += char;\n atLineStart = char === '\\n' || (atLineStart && (char === ' ' || char === '\\t'));\n index += 1;\n }\n\n return output;\n}\n","import type { ResolvedPromptAsset } from '../schema/index.js';\nimport { interpolate, extractVariables } from './interpolate.js';\nimport { getContextInputs } from '../context.js';\nimport {\n compressHeuristicText,\n estimateHeuristicTokens,\n type HeuristicCompressionOptions,\n type HeuristicCompressionOutput,\n} from '../token-compression.js';\nimport { tryJsonToToon } from '../toon-encoding.js';\nimport {\n compactCode,\n type CodeCompactionOptions,\n type CodeCompactionOutput,\n} from '../code-compaction.js';\n\nexport interface RenderOptions {\n variables?: Record<string, string>;\n strict?: boolean;\n compression?: RenderCompressionOptions;\n}\n\nexport interface RenderCompressionOptions {\n onHeuristicCompression?: (event: HeuristicPlaceholderCompressionEvent) => void;\n onCodeCompaction?: (event: CodePlaceholderCompactionEvent) => void;\n onCompressionWarning?: (warning: string) => void;\n}\n\nexport interface HeuristicPlaceholderCompressionEvent extends HeuristicCompressionOutput {\n scope: 'placeholder';\n variable: string;\n}\n\nexport interface CodePlaceholderCompactionEvent extends CodeCompactionOutput {\n scope: 'placeholder';\n variable: string;\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 contextInputs = getContextInputs(asset);\n const optionalVariables = contextInputs\n .filter((input) => input.optional === true)\n .map((input) => input.name);\n const contextInputsByName = new Map(contextInputs.map((input) => [input.name, input]));\n const compressionCache = new Map<string, string>();\n\n const createTransformVariable = (template: string) => {\n return ({ name, value, modifier, match }: {\n name: string;\n value: string;\n modifier?: 'compress' | 'toon' | 'compact' | 'code';\n match: string;\n }): string => {\n const input = contextInputsByName.get(name);\n const configuredHeuristic = input?.compression?.heuristic;\n const configuredCode = input?.compression?.code;\n const shouldCompactCode = modifier === 'compact' || modifier === 'code' || configuredCode?.enabled === true;\n const shouldCompress = modifier === 'compress' || configuredHeuristic?.enabled === true;\n\n if (modifier === 'toon') {\n const result = toToonPlaceholder(value);\n if (!result) {\n options.compression?.onCompressionWarning?.(\n `POK031: JSON-to-TOON skipped for placeholder \"${name}\" because the value is not a complete valid JSON object or array.`,\n );\n return value;\n }\n\n if (result.tokensSaved > 0 || result.output !== value) {\n options.compression?.onHeuristicCompression?.({\n scope: 'placeholder',\n variable: name,\n ...result,\n });\n }\n\n return result.output;\n }\n\n if (shouldCompactCode) {\n const result = compactCode(value, toCodeCompactionOptions(configuredCode));\n\n if (result.tokensSaved > 0 || result.output !== value) {\n options.compression?.onCodeCompaction?.({\n scope: 'placeholder',\n variable: name,\n ...result,\n });\n }\n\n return result.output;\n }\n\n if (!shouldCompress) {\n return value;\n }\n\n const query = resolveHeuristicQuery(configuredHeuristic, variables, template, match);\n const compressionOptions: HeuristicCompressionOptions = {\n min_tokens: configuredHeuristic?.min_tokens,\n max_sentences: configuredHeuristic?.max_sentences,\n target_reduction: configuredHeuristic?.target_reduction,\n query,\n json_to_toon: configuredHeuristic?.json_to_toon,\n mode: configuredHeuristic?.mode,\n preserve_neighbors: configuredHeuristic?.preserve_neighbors,\n fail_on_low_confidence: configuredHeuristic?.fail_on_low_confidence,\n };\n const cacheKey = JSON.stringify([name, value, compressionOptions]);\n const cached = compressionCache.get(cacheKey);\n if (cached !== undefined) {\n return cached;\n }\n\n const result = compressHeuristicText(value, compressionOptions);\n compressionCache.set(cacheKey, result.output);\n\n reportHeuristicCompressionWarnings(options, result, `placeholder \"${name}\"`);\n\n if (result.tokensSaved > 0 || result.output !== value) {\n options.compression?.onHeuristicCompression?.({\n scope: 'placeholder',\n variable: name,\n ...result,\n });\n }\n\n return result.output;\n };\n };\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 {\n strict,\n optionalVariables,\n transformVariable: createTransformVariable(asset.sections.system_instructions),\n },\n );\n }\n\n if (asset.sections.prompt_template) {\n result.prompt_template = interpolate(\n asset.sections.prompt_template,\n variables,\n {\n strict,\n optionalVariables,\n transformVariable: createTransformVariable(asset.sections.prompt_template),\n },\n );\n }\n\n return result;\n}\n\nfunction resolveHeuristicQuery(\n options: (HeuristicCompressionOptions & { query_variable?: string }) | undefined,\n variables: Record<string, string>,\n template: string,\n match: string,\n): string {\n if (options?.query !== undefined) {\n return options.query;\n }\n\n if (options?.query_variable && variables[options.query_variable] !== undefined) {\n return variables[options.query_variable];\n }\n\n return template.replace(match, ' ');\n}\n\nfunction toToonPlaceholder(value: string): HeuristicCompressionOutput | undefined {\n const toon = tryJsonToToon(value);\n if (!toon) {\n return undefined;\n }\n\n const inputTokens = estimateHeuristicTokens(value);\n const outputTokens = estimateHeuristicTokens(toon.output);\n\n return {\n output: toon.output,\n inputTokens,\n outputTokens,\n tokensSaved: Math.max(0, inputTokens - outputTokens),\n compressionRatio: outputTokens === 0 ? 0 : inputTokens / outputTokens,\n outputFormat: 'toon',\n };\n}\n\nfunction toCodeCompactionOptions(options: CodeCompactionOptions | undefined): CodeCompactionOptions {\n return {\n remove_comments: options?.remove_comments,\n trim_indentation: options?.trim_indentation,\n collapse_blank_lines: options?.collapse_blank_lines,\n };\n}\n\nfunction reportHeuristicCompressionWarnings(\n options: RenderOptions,\n result: Pick<HeuristicCompressionOutput, 'warnings'>,\n scope: string,\n): void {\n for (const warning of result.warnings ?? []) {\n options.compression?.onCompressionWarning?.(`POK031: ${warning} Scope: ${scope}.`);\n }\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 heuristic: mergeRecordBlock(\n result.compression?.heuristic,\n override.compression.heuristic,\n ),\n code: mergeRecordBlock(\n result.compression?.code,\n override.compression.code,\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 { 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 { 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 matter from 'gray-matter';\nimport { PromptAssetSchema } from '../schema/index.js';\nimport type { PromptAsset } from '../schema/index.js';\nimport { assertRegexFrontMatterQuoting } from './frontmatter-guard.js';\nimport { extractSections } from './sections.js';\n\nexport interface ParseResult {\n asset: PromptAsset;\n raw: {\n frontMatter: Record<string, unknown>;\n body: string;\n };\n}\n\n/**\n * Parse a prompt markdown string (YAML front matter + markdown body)\n * into a validated PromptAsset.\n */\nexport function parsePrompt(content: string, filePath?: string): ParseResult {\n assertRegexFrontMatterQuoting(content, filePath);\n const { data: frontMatter, content: body } = matter(content);\n\n const sections = extractSections(body);\n\n const raw = {\n ...frontMatter,\n sections,\n source: filePath ? { file_path: filePath } : undefined,\n };\n\n const asset = PromptAssetSchema.parse(raw);\n\n return {\n asset,\n raw: {\n frontMatter: frontMatter as Record<string, unknown>,\n body,\n },\n };\n}\n","import { z } from 'zod';\n\n// --- Tool definitions ---\n\nexport const InlineToolDefSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n input_schema: z.record(z.unknown()).optional(),\n});\n\nexport type InlineToolDef = z.infer<typeof InlineToolDefSchema>;\n\nexport const ToolRefSchema = z.union([z.string(), InlineToolDefSchema]);\n\n// --- MCP ---\n\nexport const MCPServerRefSchema = z.union([\n z.string(),\n z.object({\n name: z.string(),\n config: z.record(z.unknown()).optional(),\n }),\n]);\n\nexport type MCPServerRef = z.infer<typeof MCPServerRefSchema>;\n\n// --- Reasoning ---\n\nexport const ReasoningSchema = z.object({\n effort: z.enum(['low', 'medium', 'high']).optional(),\n budget_tokens: z.number().int().positive().optional(),\n});\n\n// --- Sampling ---\n\nexport const SamplingSchema = z.object({\n temperature: z.number().min(0).max(2).optional(),\n top_p: z.number().min(0).max(1).optional(),\n frequency_penalty: z.number().optional(),\n presence_penalty: z.number().optional(),\n stop: z.array(z.string()).optional(),\n max_output_tokens: z.number().int().positive().optional(),\n});\n\n// --- Response ---\n\nexport const ResponseSchema = z.object({\n format: z.enum(['text', 'json', 'markdown']).optional(),\n stream: z.boolean().optional(),\n schema: z.record(z.unknown()).optional(),\n schema_ref: z.string().min(1).optional(),\n schema_source: z.object({\n mode: z.enum(['inline', 'schema_ref_json', 'schema_ref_zod_module']).optional(),\n ref: z.string().optional(),\n resolved_path: z.string().optional(),\n hash: z.string().optional(),\n }).optional(),\n schema_name: z.string().optional(),\n schema_description: z.string().optional(),\n schema_strict: z.boolean().optional(),\n});\n\nexport const ResponseSchemaWithValidation = ResponseSchema.superRefine((value, ctx) => {\n if (value.schema !== undefined && value.schema_ref !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'response.schema and response.schema_ref are mutually exclusive',\n path: ['schema_ref'],\n });\n }\n});\n\n\n// --- Provider-specific options ---\n\nexport const AnthropicProviderOptionsSchema = z.object({\n top_k: z.number().int().min(0).optional(),\n tool_choice: z.record(z.unknown()).optional(),\n output_config: z.record(z.unknown()).optional(),\n});\n\nexport const GeminiProviderOptionsSchema = z.object({\n candidate_count: z.number().int().positive().optional(),\n top_k: z.number().int().min(0).optional(),\n seed: z.number().int().optional(),\n response_schema: z.record(z.unknown()).optional(),\n response_json_schema: z.record(z.unknown()).optional(),\n response_modalities: z.array(z.string()).optional(),\n thinking_budget_tokens: z.number().int().positive().optional(),\n});\n\nexport const OpenRouterProviderOptionsSchema = z.object({\n provider: z.record(z.unknown()).optional(),\n transforms: z.array(z.string()).optional(),\n plugins: z.array(z.record(z.unknown())).optional(),\n models: z.array(z.string()).optional(),\n});\n\nexport const LLMAsAServiceCustomerSchema = z.object({\n customer_id: z.string(),\n customer_name: z.string().optional(),\n customer_user_id: z.string().optional(),\n customer_user_name: z.string().optional(),\n customer_user_email: z.string().optional(),\n});\n\nexport const LLMAsAServiceProviderOptionsSchema = z.object({\n base_url: z.string().url().optional(),\n // Deprecated compatibility fields; the gateway no longer requires project routing.\n project_id: z.string().optional(),\n customer: LLMAsAServiceCustomerSchema.optional(),\n conversationId: z.string().optional(),\n conversationTitle: z.string().optional(),\n projectId: z.string().optional(),\n});\n\nexport const ProviderOptionsSchema = z.object({\n anthropic: AnthropicProviderOptionsSchema.optional(),\n gemini: GeminiProviderOptionsSchema.optional(),\n openrouter: OpenRouterProviderOptionsSchema.optional(),\n llmasaservice: LLMAsAServiceProviderOptionsSchema.optional(),\n});\n\nexport type ProviderOptions = z.infer<typeof ProviderOptionsSchema>;\n\n// --- Raw provider body passthrough ---\n\nexport const RawProviderBodySchema = z.object({\n openai: z.record(z.unknown()).optional(),\n 'openai-responses': z.record(z.unknown()).optional(),\n openai_responses: z.record(z.unknown()).optional(),\n anthropic: z.record(z.unknown()).optional(),\n gemini: z.record(z.unknown()).optional(),\n google: z.record(z.unknown()).optional(),\n openrouter: z.record(z.unknown()).optional(),\n llmasaservice: z.record(z.unknown()).optional(),\n});\n\nexport type RawProviderBody = z.infer<typeof RawProviderBodySchema>;\n\n// --- Prompt compression ---\n\nexport const TheTokenCompanyCompressionSchema = z.object({\n enabled: z.boolean().optional(),\n model: z.string().min(1).optional(),\n aggressiveness: z.number().min(0).max(1).optional(),\n});\n\nexport const HeuristicCompressionSchema = z.object({\n enabled: z.boolean().optional(),\n min_tokens: z.number().int().positive().optional(),\n max_sentences: z.number().int().positive().optional(),\n target_reduction: z.number().min(0).max(1).optional(),\n query: z.string().optional(),\n query_variable: z.string().min(1).optional(),\n json_to_toon: z.boolean().optional(),\n mode: z.enum(['conservative', 'balanced']).optional(),\n preserve_neighbors: z.boolean().optional(),\n fail_on_low_confidence: z.boolean().optional(),\n});\n\nexport const CodeCompactionSchema = z.object({\n enabled: z.boolean().optional(),\n remove_comments: z.boolean().optional(),\n trim_indentation: z.boolean().optional(),\n collapse_blank_lines: z.boolean().optional(),\n});\n\nexport const CompressionSchema = z.object({\n thetokencompany: TheTokenCompanyCompressionSchema.optional(),\n heuristic: HeuristicCompressionSchema.optional(),\n code: CodeCompactionSchema.optional(),\n});\n\nexport type Compression = z.infer<typeof CompressionSchema>;\nexport type TheTokenCompanyCompression = z.infer<typeof TheTokenCompanyCompressionSchema>;\nexport type HeuristicCompression = z.infer<typeof HeuristicCompressionSchema>;\nexport type CodeCompaction = z.infer<typeof CodeCompactionSchema>;\n\n// --- Cache controls ---\n\nexport const OpenAICacheSchema = z.object({\n prompt_cache_key: z.string().min(1).optional(),\n retention: z.enum(['in_memory', '24h']).optional(),\n});\n\nexport const AnthropicCacheSchema = z.object({\n mode: z.enum(['automatic', 'explicit']).optional(),\n type: z.literal('ephemeral').optional(),\n ttl: z.enum(['5m', '1h']).optional(),\n cache_system_instructions: z.boolean().optional(),\n cache_tools: z.boolean().optional(),\n cache_prompt_template: z.boolean().optional(),\n});\n\nexport const GeminiCacheSchema = z.object({\n cached_content: z.string().min(1).optional(),\n});\n\nexport const CacheSchema = z.object({\n openai: OpenAICacheSchema.optional(),\n anthropic: AnthropicCacheSchema.optional(),\n gemini: GeminiCacheSchema.optional(),\n google: GeminiCacheSchema.optional(),\n});\n\n// --- Context ---\n\nexport const HistorySchema = z.object({\n max_items: z.number().int().positive().optional(),\n});\n\nexport const ContextRegexSchema = z.union([\n z.string(),\n z.object({\n pattern: z.string(),\n flags: z.string().optional(),\n return_message: z.string().optional(),\n }),\n]);\n\nexport const ContextBuiltInValidatorSchema = z.union([\n z.boolean(),\n z.object({\n return_message: z.string().optional(),\n }),\n]);\n\nexport const ContextInputCompressionSchema = z.union([\n z.literal('heuristic'),\n z.literal('code'),\n z.object({\n heuristic: HeuristicCompressionSchema.optional(),\n code: CodeCompactionSchema.optional(),\n }),\n]);\n\nexport const ContextInputDefinitionObjectSchema = z.object({\n name: z.string(),\n optional: z.boolean().optional(),\n warnings: z.boolean().optional(),\n max_size: z.number().int().positive().optional(),\n trim: z.union([z.boolean(), z.enum(['start', 'end', 'both'])]).optional(),\n compression: ContextInputCompressionSchema.optional(),\n allow_regex: ContextRegexSchema.optional(),\n deny_regex: ContextRegexSchema.optional(),\n non_empty: ContextBuiltInValidatorSchema.optional(),\n reject_secrets: ContextBuiltInValidatorSchema.optional(),\n});\n\nexport const ContextInputDefinitionSchema = z.union([\n z.string(),\n ContextInputDefinitionObjectSchema,\n]);\n\nexport type ContextInputDefinition = z.infer<typeof ContextInputDefinitionSchema>;\nexport type ContextInputCompression = z.infer<typeof ContextInputCompressionSchema>;\nexport type ContextRegexDefinition = z.infer<typeof ContextRegexSchema>;\nexport type ContextBuiltInValidatorDefinition = z.infer<typeof ContextBuiltInValidatorSchema>;\n\nexport const ContextSchema = z.object({\n inputs: z.array(ContextInputDefinitionSchema).optional(),\n history: HistorySchema.optional(),\n});\n\n// --- Metadata ---\n\nexport const MetadataSchema = z.object({\n owner: z.string().optional(),\n tags: z.array(z.string()).optional(),\n review_required: z.boolean().optional(),\n stable: z.boolean().optional(),\n});\n\n// --- MCP block ---\n\nexport const MCPSchema = z.object({\n servers: z.array(MCPServerRefSchema).optional(),\n});\n\n// --- Overrides (subset allowed in environments/tiers) ---\n\nexport const PromptAssetOverridesSchema = z.object({\n model: z.string().optional(),\n fallback_models: z.array(z.string()).optional(),\n reasoning: ReasoningSchema.optional(),\n sampling: SamplingSchema.optional(),\n response: ResponseSchemaWithValidation.optional(),\n compression: CompressionSchema.optional(),\n cache: CacheSchema.optional(),\n raw: RawProviderBodySchema.optional(),\n tools: z.array(ToolRefSchema).optional(),\n provider_options: ProviderOptionsSchema.optional(),\n});\n\nexport type PromptAssetOverrides = z.infer<typeof PromptAssetOverridesSchema>;\n\n// --- Source tracking ---\n\nexport const SourceSchema = z.object({\n file_path: z.string().optional(),\n checksum: z.string().optional(),\n});\n\n// --- Sections (populated by parser) ---\n\nexport const SectionsSchema = z.object({\n system_instructions: z.string().optional(),\n prompt_template: z.string().optional(),\n notes: z.string().optional(),\n});\n\n// --- Defaults files (folder-level inheritance) ---\n\nexport const PromptDefaultsSchema = z.object({\n provider: z.enum(['openai', 'openai-responses', 'anthropic', 'google', 'gemini', 'openrouter', 'llmasaservice', 'any']).optional(),\n model: z.string().optional(),\n fallback_models: z.array(z.string()).optional(),\n reasoning: ReasoningSchema.optional(),\n sampling: SamplingSchema.optional(),\n response: ResponseSchema.optional(),\n compression: CompressionSchema.optional(),\n cache: CacheSchema.optional(),\n raw: RawProviderBodySchema.optional(),\n tools: z.array(ToolRefSchema).optional(),\n provider_options: ProviderOptionsSchema.optional(),\n mcp: MCPSchema.optional(),\n context: ContextSchema.optional(),\n includes: z.array(z.string()).optional(),\n environments: z.record(PromptAssetOverridesSchema).optional(),\n tiers: z.record(PromptAssetOverridesSchema).optional(),\n metadata: MetadataSchema.optional(),\n sections: z.object({\n system_instructions: z.string().optional(),\n }).optional(),\n});\n\nexport type PromptDefaults = z.infer<typeof PromptDefaultsSchema>;\n\n// --- Top-level PromptAsset ---\n\nexport const PromptAssetSchema = z.object({\n id: z.string(),\n schema_version: z.number().int().positive().default(1),\n description: z.string().optional(),\n\n provider: z.enum(['openai', 'openai-responses', 'anthropic', 'google', 'gemini', 'openrouter', 'llmasaservice', 'any']).optional(),\n model: z.string().optional(),\n fallback_models: z.array(z.string()).optional(),\n\n reasoning: ReasoningSchema.optional(),\n sampling: SamplingSchema.optional(),\n response: ResponseSchemaWithValidation.optional(),\n compression: CompressionSchema.optional(),\n cache: CacheSchema.optional(),\n raw: RawProviderBodySchema.optional(),\n\n tools: z.array(ToolRefSchema).optional(),\n provider_options: ProviderOptionsSchema.optional(),\n mcp: MCPSchema.optional(),\n\n context: ContextSchema.optional(),\n\n includes: z.array(z.string()).optional(),\n\n environments: z.record(PromptAssetOverridesSchema).optional(),\n tiers: z.record(PromptAssetOverridesSchema).optional(),\n\n metadata: MetadataSchema.optional(),\n\n // Populated by parser, not authored in YAML\n sections: SectionsSchema.optional(),\n source: SourceSchema.optional(),\n});\n\nexport type PromptAsset = z.infer<typeof PromptAssetSchema>;\n\n// --- Resolved asset (after includes, overrides applied) ---\n\nexport interface ResolvedPromptAsset extends PromptAsset {\n sections: {\n system_instructions?: string;\n prompt_template?: string;\n notes?: string;\n };\n source: {\n file_path?: string;\n checksum?: string;\n };\n}\n","const FRONT_MATTER_DELIMITER = /^---[ \\t]*$/;\nconst REGEX_FIELD = /^(?<indent>\\s*)(?<field>allow_regex|deny_regex)\\s*:\\s*(?<value>.*)$/;\nconst PATTERN_FIELD = /^(?<indent>\\s*)pattern\\s*:\\s*(?<value>.*)$/;\nconst INLINE_PATTERN_FIELD = /(?:^|[{,]\\s*)pattern\\s*:\\s*(?<value>\"(?:\\\\.|[^\"\\\\])*\")/;\n\ninterface PendingRegexField {\n field: string;\n indent: number;\n}\n\nexport function assertRegexFrontMatterQuoting(content: string, filePath?: string): void {\n const frontMatter = extractFrontMatter(content);\n if (!frontMatter) {\n return;\n }\n\n let pendingRegex: PendingRegexField | undefined;\n\n for (const [index, line] of frontMatter.lines.entries()) {\n const lineNumber = frontMatter.startLine + index;\n const regexMatch = line.match(REGEX_FIELD);\n\n if (regexMatch?.groups) {\n const field = regexMatch.groups.field;\n const indent = regexMatch.groups.indent.length;\n const value = regexMatch.groups.value.trim();\n pendingRegex = value === '' ? { field, indent } : undefined;\n\n assertNoUnescapedBackslashInDoubleQuotedRegex(value, field, filePath, lineNumber);\n assertNoUnescapedBackslashInInlinePattern(value, field, filePath, lineNumber);\n continue;\n }\n\n if (!pendingRegex) {\n continue;\n }\n\n if (line.trim() === '' || line.trimStart().startsWith('#')) {\n continue;\n }\n\n const indent = line.match(/^\\s*/)?.[0].length ?? 0;\n if (indent <= pendingRegex.indent) {\n pendingRegex = undefined;\n continue;\n }\n\n const patternMatch = line.match(PATTERN_FIELD);\n if (!patternMatch?.groups) {\n continue;\n }\n\n assertNoUnescapedBackslashInDoubleQuotedRegex(\n patternMatch.groups.value.trim(),\n `${pendingRegex.field}.pattern`,\n filePath,\n lineNumber,\n );\n }\n}\n\nfunction assertNoUnescapedBackslashInInlinePattern(\n value: string,\n field: string,\n filePath: string | undefined,\n lineNumber: number,\n): void {\n const match = value.match(INLINE_PATTERN_FIELD);\n const pattern = match?.groups?.value;\n if (!pattern) {\n return;\n }\n\n assertNoUnescapedBackslashInDoubleQuotedRegex(pattern, `${field}.pattern`, filePath, lineNumber);\n}\n\nfunction extractFrontMatter(content: string): { lines: string[]; startLine: number } | undefined {\n const lines = content.split(/\\r?\\n/);\n if (!FRONT_MATTER_DELIMITER.test(lines[0] ?? '')) {\n return undefined;\n }\n\n for (let index = 1; index < lines.length; index += 1) {\n if (FRONT_MATTER_DELIMITER.test(lines[index] ?? '')) {\n return {\n lines: lines.slice(1, index),\n startLine: 2,\n };\n }\n }\n\n return undefined;\n}\n\nfunction assertNoUnescapedBackslashInDoubleQuotedRegex(\n value: string,\n field: string,\n filePath: string | undefined,\n lineNumber: number,\n): void {\n if (!value.startsWith('\"')) {\n return;\n }\n\n const quoted = readDoubleQuotedScalar(value);\n if (!quoted) {\n return;\n }\n\n if (!hasUnescapedBackslash(quoted)) {\n return;\n }\n\n const location = filePath ? `${filePath}:${lineNumber}` : `line ${lineNumber}`;\n throw new Error(\n `POK013: Invalid context regex YAML at ${location}, field \"${field}\": `\n + 'double-quoted regex strings treat backslashes as YAML escapes. '\n + 'Use unquoted /pattern/i literal form, single quotes, or double each backslash.',\n );\n}\n\nfunction readDoubleQuotedScalar(value: string): string | undefined {\n let result = '';\n\n for (let index = 1; index < value.length; index += 1) {\n const char = value[index];\n\n if (char === '\"') {\n return result;\n }\n\n result += char;\n\n if (char === '\\\\' && index + 1 < value.length) {\n index += 1;\n result += value[index];\n }\n }\n\n return undefined;\n}\n\nfunction hasUnescapedBackslash(value: string): boolean {\n for (let index = 0; index < value.length; index += 1) {\n if (value[index] !== '\\\\') {\n continue;\n }\n\n let count = 1;\n while (value[index + count] === '\\\\') {\n count += 1;\n }\n\n if (count % 2 === 1) {\n return true;\n }\n\n index += count - 1;\n }\n\n return false;\n}\n","export interface Sections {\n system_instructions?: string;\n prompt_template?: string;\n notes?: string;\n}\n\nconst SECTION_MAP: Record<string, keyof Sections> = {\n 'system instructions': 'system_instructions',\n 'prompt template': 'prompt_template',\n 'notes': 'notes',\n};\n\n/**\n * Extract named sections from the markdown body using H1 headings.\n * Case-insensitive. H2+ within a section is treated as content.\n * If no H1 headings are found, the entire body is treated as prompt_template.\n */\nexport function extractSections(body: string): Sections {\n const lines = body.split(/\\r?\\n/);\n const sections: Sections = {};\n\n let currentKey: keyof Sections | null = null;\n let currentLines: string[] = [];\n let foundAnyH1 = false;\n\n for (const line of lines) {\n const h1Match = line.match(/^#\\s+(.+)$/);\n if (h1Match) {\n // Flush previous section\n if (currentKey) {\n sections[currentKey] = currentLines.join('\\n').trim();\n }\n\n foundAnyH1 = true;\n const heading = h1Match[1].trim().toLowerCase();\n currentKey = SECTION_MAP[heading] ?? null;\n currentLines = [];\n } else {\n currentLines.push(line);\n }\n }\n\n // Flush last section\n if (currentKey) {\n sections[currentKey] = currentLines.join('\\n').trim();\n }\n\n // If no H1 headings found, treat entire body as prompt_template\n if (!foundAnyH1) {\n const trimmed = body.trim();\n if (trimmed) {\n sections.prompt_template = trimmed;\n }\n }\n\n return sections;\n}\n","import { readFile } from 'node:fs/promises';\nimport { dirname, join, relative, resolve } from 'node:path';\nimport matter from 'gray-matter';\nimport { parsePrompt } from './parser.js';\nimport type { ParseResult } from './parser.js';\nimport { extractSections } from './sections.js';\nimport { PromptDefaultsSchema } from '../schema/index.js';\nimport type { PromptDefaults } from '../schema/index.js';\nimport { resolveResponseSchemaRef } from './response-schema-ref.js';\n\nconst DEFAULTS_FILE_NAME = 'defaults.md';\n\nexport interface LoadPromptOptions {\n /**\n * Optional boundary directory for defaults discovery.\n * If provided, defaults are loaded from this directory down to the prompt directory.\n */\n defaultsRoot?: string;\n}\n\n/**\n * Load and parse a prompt file from disk.\n */\nexport async function loadPromptFile(filePath: string, options: LoadPromptOptions = {}): Promise<ParseResult> {\n const content = await readFile(filePath, 'utf-8');\n const parsed = parsePrompt(content, filePath);\n // Default the boundary to the file's own directory so traversal never\n // walks above the prompt tree when no explicit root is provided.\n const root = options.defaultsRoot ?? dirname(filePath);\n const defaults = await loadDefaultsForPath(filePath, root);\n const withDefaults = applyDefaults(parsed.asset, defaults);\n const resolved = await resolveResponseSchemaRef(withDefaults, filePath);\n const asset = (resolved.response?.schema !== undefined && !resolved.response?.schema_source)\n ? {\n ...resolved,\n response: {\n ...resolved.response,\n schema_source: { mode: 'inline' as const },\n },\n }\n : resolved;\n\n return {\n ...parsed,\n asset,\n };\n}\n\nasync function loadDefaultsForPath(filePath: string, defaultsRoot?: string): Promise<PromptDefaults> {\n const directories = getDirectoriesToCheck(filePath, defaultsRoot);\n let merged: PromptDefaults = {};\n\n for (const dir of directories) {\n const defaultsPath = join(dir, DEFAULTS_FILE_NAME);\n try {\n const defaultsContent = await readFile(defaultsPath, 'utf-8');\n const defaults = normalizeDefaultIncludes(parseDefaults(defaultsContent), defaultsPath, filePath);\n merged = mergeDefaults(merged, defaults);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n throw error;\n }\n }\n }\n\n return merged;\n}\n\nfunction getDirectoriesToCheck(filePath: string, defaultsRoot?: string): string[] {\n const dirs: string[] = [];\n let current = resolve(dirname(filePath));\n const boundary = defaultsRoot ? resolve(defaultsRoot) : undefined;\n\n while (true) {\n dirs.unshift(current);\n if ((boundary && current === boundary) || current === dirname(current)) {\n break;\n }\n current = dirname(current);\n }\n\n return dirs;\n}\n\nfunction parseDefaults(content: string): PromptDefaults {\n const { data: frontMatter, content: body } = matter(content);\n const sections = extractSections(body);\n\n return PromptDefaultsSchema.parse({\n ...frontMatter,\n sections: {\n system_instructions: sections.system_instructions,\n },\n });\n}\n\nfunction mergeDefaults(base: PromptDefaults, local: PromptDefaults): PromptDefaults {\n return {\n provider: local.provider ?? base.provider,\n model: local.model ?? base.model,\n fallback_models: local.fallback_models ?? base.fallback_models,\n reasoning: mergeRecordBlock(base.reasoning, local.reasoning),\n sampling: mergeRecordBlock(base.sampling, local.sampling),\n response: mergeRecordBlock(base.response, local.response),\n compression: mergeCompression(base.compression, local.compression),\n cache: mergeCache(base.cache, local.cache),\n raw: mergeRaw(base.raw, local.raw),\n tools: local.tools ?? base.tools,\n provider_options: mergeProviderOptions(base.provider_options, local.provider_options),\n mcp: mergeMcp(base.mcp, local.mcp),\n context: mergeContext(base.context, local.context),\n includes: local.includes ?? base.includes,\n environments: mergeOverrideMap(base.environments, local.environments),\n tiers: mergeOverrideMap(base.tiers, local.tiers),\n metadata: {\n ...(base.metadata ?? {}),\n ...(local.metadata ?? {}),\n },\n sections: {\n ...(base.sections ?? {}),\n ...(local.sections ?? {}),\n },\n };\n}\n\nfunction applyDefaults(asset: ParseResult['asset'], defaults: PromptDefaults): ParseResult['asset'] {\n const compression = mergeCompression(defaults.compression, asset.compression);\n const cache = mergeCache(defaults.cache, asset.cache);\n const raw = mergeRaw(defaults.raw, asset.raw);\n const providerOptions = mergeProviderOptions(defaults.provider_options, asset.provider_options);\n const reasoning = mergeRecordBlock(defaults.reasoning, asset.reasoning);\n const sampling = mergeRecordBlock(defaults.sampling, asset.sampling);\n const response = mergeRecordBlock(defaults.response, asset.response);\n const mcp = mergeMcp(defaults.mcp, asset.mcp);\n const context = mergeContext(defaults.context, asset.context);\n const environments = mergeOverrideMap(defaults.environments, asset.environments);\n const tiers = mergeOverrideMap(defaults.tiers, asset.tiers);\n const hasDefaultMetadata = defaults.metadata && Object.keys(defaults.metadata).length > 0;\n const hasDefaultSystem = !!defaults.sections?.system_instructions;\n const hasDefaultScalars = defaults.provider !== undefined\n || defaults.model !== undefined\n || defaults.fallback_models !== undefined\n || defaults.tools !== undefined\n || defaults.includes !== undefined;\n const hasDefaultObjects = compression !== undefined\n || cache !== undefined\n || raw !== undefined\n || providerOptions !== undefined\n || reasoning !== undefined\n || sampling !== undefined\n || response !== undefined\n || mcp !== undefined\n || context !== undefined\n || environments !== undefined\n || tiers !== undefined;\n\n // Short-circuit: nothing to merge\n if (!hasDefaultMetadata && !hasDefaultSystem && !hasDefaultScalars && !hasDefaultObjects) {\n return asset;\n }\n\n const mergedMetadata = {\n ...(defaults.metadata ?? {}),\n ...(asset.metadata ?? {}),\n };\n const metadata = Object.keys(mergedMetadata).length > 0 ? mergedMetadata : undefined;\n\n const systemInstructions = asset.sections?.system_instructions ?? defaults.sections?.system_instructions;\n\n const sections = asset.sections\n ? { ...asset.sections, system_instructions: systemInstructions }\n : systemInstructions\n ? { system_instructions: systemInstructions }\n : undefined;\n\n return {\n ...asset,\n provider: asset.provider ?? defaults.provider,\n model: asset.model ?? defaults.model,\n fallback_models: asset.fallback_models ?? defaults.fallback_models,\n reasoning,\n sampling,\n response,\n compression,\n cache,\n raw,\n tools: asset.tools ?? defaults.tools,\n provider_options: providerOptions,\n mcp,\n context,\n includes: asset.includes ?? defaults.includes,\n environments,\n tiers,\n metadata,\n sections,\n };\n}\n\nfunction normalizeDefaultIncludes(\n defaults: PromptDefaults,\n defaultsPath: string,\n filePath: string,\n): PromptDefaults {\n if (!defaults.includes) return defaults;\n\n const promptDir = dirname(filePath);\n const defaultsDir = dirname(defaultsPath);\n const includes = defaults.includes.map((includePath) => {\n const relativePath = relative(promptDir, resolve(defaultsDir, includePath)).replace(/\\\\/g, '/');\n return relativePath.startsWith('.') ? relativePath : `./${relativePath}`;\n });\n\n return {\n ...defaults,\n includes,\n };\n}\n\nfunction mergeRecordBlock<T extends object>(base: T | undefined, local: T | undefined): T | undefined {\n if (base === undefined) return local;\n if (local === undefined) return base;\n return { ...base, ...local };\n}\n\nfunction mergeMcp(base: PromptDefaults['mcp'], local: PromptDefaults['mcp']): PromptDefaults['mcp'] {\n return mergeRecordBlock(base, local);\n}\n\nfunction mergeContext(base: PromptDefaults['context'], local: PromptDefaults['context']): PromptDefaults['context'] {\n const merged = {\n ...(base ?? {}),\n ...(local ?? {}),\n history: mergeRecordBlock(base?.history, local?.history),\n };\n\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction mergeCache(base: PromptDefaults['cache'], local: PromptDefaults['cache']): PromptDefaults['cache'] {\n const merged: NonNullable<PromptDefaults['cache']> = {\n ...(base ?? {}),\n ...(local ?? {}),\n openai: {\n ...(base?.openai ?? {}),\n ...(local?.openai ?? {}),\n },\n anthropic: {\n ...(base?.anthropic ?? {}),\n ...(local?.anthropic ?? {}),\n },\n gemini: {\n ...(base?.gemini ?? {}),\n ...(local?.gemini ?? {}),\n },\n google: {\n ...(base?.google ?? {}),\n ...(local?.google ?? {}),\n },\n };\n\n if (merged.openai && Object.keys(merged.openai).length === 0) delete merged.openai;\n if (merged.anthropic && Object.keys(merged.anthropic).length === 0) delete merged.anthropic;\n if (merged.gemini && Object.keys(merged.gemini).length === 0) delete merged.gemini;\n if (merged.google && Object.keys(merged.google).length === 0) delete merged.google;\n\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction mergeCompression(\n base: PromptDefaults['compression'],\n local: PromptDefaults['compression'],\n): PromptDefaults['compression'] {\n const merged: NonNullable<PromptDefaults['compression']> = {\n ...(base ?? {}),\n ...(local ?? {}),\n thetokencompany: mergeRecordBlock(base?.thetokencompany, local?.thetokencompany),\n heuristic: mergeRecordBlock(base?.heuristic, local?.heuristic),\n code: mergeRecordBlock(base?.code, local?.code),\n };\n\n removeEmptyProviderBlocks(merged);\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction mergeRaw(base: PromptDefaults['raw'], local: PromptDefaults['raw']): PromptDefaults['raw'] {\n const merged: NonNullable<PromptDefaults['raw']> = {\n ...(base ?? {}),\n ...(local ?? {}),\n openai: mergeRecordBlock(base?.openai, local?.openai),\n 'openai-responses': mergeRecordBlock(base?.['openai-responses'], local?.['openai-responses']),\n openai_responses: mergeRecordBlock(base?.openai_responses, local?.openai_responses),\n anthropic: mergeRecordBlock(base?.anthropic, local?.anthropic),\n gemini: mergeRecordBlock(base?.gemini, local?.gemini),\n google: mergeRecordBlock(base?.google, local?.google),\n openrouter: mergeRecordBlock(base?.openrouter, local?.openrouter),\n llmasaservice: mergeRecordBlock(base?.llmasaservice, local?.llmasaservice),\n };\n\n removeEmptyProviderBlocks(merged);\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction mergeProviderOptions(\n base: PromptDefaults['provider_options'],\n local: PromptDefaults['provider_options'],\n): PromptDefaults['provider_options'] {\n const merged: NonNullable<PromptDefaults['provider_options']> = {\n ...(base ?? {}),\n ...(local ?? {}),\n anthropic: mergeRecordBlock(base?.anthropic, local?.anthropic),\n gemini: mergeRecordBlock(base?.gemini, local?.gemini),\n openrouter: mergeRecordBlock(base?.openrouter, local?.openrouter),\n llmasaservice: mergeRecordBlock(base?.llmasaservice, local?.llmasaservice),\n };\n\n removeEmptyProviderBlocks(merged);\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction mergeOverrideMap(\n base: PromptDefaults['environments'],\n local: PromptDefaults['environments'],\n): PromptDefaults['environments'] {\n const merged: NonNullable<PromptDefaults['environments']> = { ...(base ?? {}) };\n\n for (const [name, localOverride] of Object.entries(local ?? {})) {\n merged[name] = mergeOverrideConfig(merged[name], localOverride);\n }\n\n return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction mergeOverrideConfig(\n base: NonNullable<PromptDefaults['environments']>[string] | undefined,\n local: NonNullable<PromptDefaults['environments']>[string],\n): NonNullable<PromptDefaults['environments']>[string] {\n const merged: NonNullable<PromptDefaults['environments']>[string] = {\n ...(base ?? {}),\n ...local,\n };\n\n const reasoning = mergeRecordBlock(base?.reasoning, local.reasoning);\n const sampling = mergeRecordBlock(base?.sampling, local.sampling);\n const response = mergeRecordBlock(base?.response, local.response);\n const compression = mergeCompression(base?.compression, local.compression);\n const cache = mergeCache(base?.cache, local.cache);\n const raw = mergeRaw(base?.raw, local.raw);\n const providerOptions = mergeProviderOptions(base?.provider_options, local.provider_options);\n\n if (reasoning !== undefined) merged.reasoning = reasoning;\n if (sampling !== undefined) merged.sampling = sampling;\n if (response !== undefined) merged.response = response;\n if (compression !== undefined) merged.compression = compression;\n if (cache !== undefined) merged.cache = cache;\n if (raw !== undefined) merged.raw = raw;\n if (providerOptions !== undefined) merged.provider_options = providerOptions;\n\n return merged;\n}\n\nfunction removeEmptyProviderBlocks<T extends Record<string, unknown>>(value: T): void {\n for (const key of Object.keys(value)) {\n const block = value[key];\n if (block === undefined) {\n delete value[key];\n continue;\n }\n\n if (\n block !== null\n &&\n typeof block === 'object'\n && !Array.isArray(block)\n && Object.keys(block).length === 0\n ) {\n delete value[key];\n }\n }\n}\n","import { readFile } from 'node:fs/promises';\nimport { createHash } from 'node:crypto';\nimport { dirname, extname, resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { z } from 'zod';\nimport { zodToJsonSchema } from 'zod-to-json-schema';\nimport type { PromptAsset } from '../schema/index.js';\n\nconst SUPPORTED_SCHEMA_REF_EXTENSIONS = new Set(['.json', '.js', '.mjs', '.cjs']);\n\n\nasync function resolveJsonSchemaRef(schemaRef: string, promptFilePath: string): Promise<{ schema: Record<string, unknown>; resolvedPath: string; hash: string }> {\n const resolvedPath = resolve(dirname(promptFilePath), schemaRef);\n let raw: string;\n\n try {\n raw = await readFile(resolvedPath, 'utf-8');\n } catch (error) {\n const code = (error as NodeJS.ErrnoException).code;\n if (code === 'ENOENT') {\n throw new Error(`POK050: response.schema_ref \"${schemaRef}\" not found (resolved from ${promptFilePath})`);\n }\n throw error;\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n throw new Error(`POK050: response.schema_ref \"${schemaRef}\" is not valid JSON`);\n }\n\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error(`POK050: response.schema_ref \"${schemaRef}\" must resolve to a JSON object schema`);\n }\n\n return {\n schema: parsed as Record<string, unknown>,\n resolvedPath,\n hash: createHash('sha256').update(raw).digest('hex'),\n };\n}\n\nasync function resolveZodSchemaRef(schemaRef: string, promptFilePath: string): Promise<{ schema: Record<string, unknown>; resolvedPath: string; hash: string }> {\n const resolvedPath = resolve(dirname(promptFilePath), schemaRef);\n\n let moduleSource: string;\n try {\n moduleSource = await readFile(resolvedPath, 'utf-8');\n } catch (error) {\n const code = (error as NodeJS.ErrnoException).code;\n if (code === 'ENOENT') {\n throw new Error(`POK051: response.schema_ref \"${schemaRef}\" not found (resolved from ${promptFilePath})`);\n }\n throw error;\n }\n\n let imported: unknown;\n try {\n imported = await import(pathToFileURL(resolvedPath).href);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`POK051: response.schema_ref \"${schemaRef}\" could not be imported as a module (${message})`);\n }\n\n const mod = imported as Record<string, unknown>;\n const candidate = mod.default ?? mod.schema;\n\n if (!(candidate instanceof z.ZodType)) {\n throw new Error('POK051: zod schema modules must export a Zod schema as default export or named export \"schema\"');\n }\n\n const jsonSchema = zodToJsonSchema(candidate, {\n target: 'jsonSchema7',\n $refStrategy: 'none',\n });\n\n if (!jsonSchema || typeof jsonSchema !== 'object' || Array.isArray(jsonSchema)) {\n throw new Error(`POK051: response.schema_ref \"${schemaRef}\" did not produce a valid JSON schema object`);\n }\n\n return {\n schema: jsonSchema as Record<string, unknown>,\n resolvedPath,\n hash: createHash('sha256').update(moduleSource).digest('hex'),\n };\n}\n\nexport async function resolveResponseSchemaRef(asset: PromptAsset, promptFilePath: string): Promise<PromptAsset> {\n const schemaRef = asset.response?.schema_ref;\n if (!schemaRef) return asset;\n\n const ext = extname(schemaRef).toLowerCase();\n if (!SUPPORTED_SCHEMA_REF_EXTENSIONS.has(ext)) {\n throw new Error(`POK051: response.schema_ref \"${schemaRef}\" has unsupported extension \"${ext}\". Use .json, .js, .mjs, or .cjs`);\n }\n\n const resolved = (ext === '.json')\n ? await resolveJsonSchemaRef(schemaRef, promptFilePath)\n : await resolveZodSchemaRef(schemaRef, promptFilePath);\n\n return {\n ...asset,\n response: {\n ...asset.response,\n schema: resolved.schema,\n schema_ref: undefined,\n schema_source: {\n mode: ext === '.json' ? 'schema_ref_json' : 'schema_ref_zod_module',\n ref: schemaRef,\n resolved_path: resolved.resolvedPath,\n hash: resolved.hash,\n },\n },\n };\n}\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';\nimport { getContextInputs } from './context.js';\nimport {\n compressHeuristicText,\n estimateHeuristicTokens,\n type HeuristicCompressionOptions,\n} from './token-compression.js';\nimport {\n compactCode,\n type CodeCompactionOptions,\n} from './code-compaction.js';\n\nexport const THETOKENCOMPANY_DEFAULT_MODEL = 'bear-2';\nexport const THETOKENCOMPANY_DEFAULT_BASE_URL = 'https://api.thetokencompany.com';\nexport const HEURISTIC_COMPRESSION_MODEL = 'local-heuristic-v1';\nexport const CODE_COMPACTION_MODEL = 'local-code-compactor-v1';\n\nexport interface TheTokenCompanyRuntimeOptions {\n apiKey?: string;\n baseURL?: string;\n fetch?: typeof fetch;\n}\n\nexport interface PromptCompressionResult {\n provider: 'thetokencompany' | 'heuristic' | 'code';\n model: string;\n inputTokens: number;\n outputTokens: number;\n tokensSaved: number;\n compressionRatio: number;\n scope?: 'prompt_template' | 'placeholder';\n variable?: string;\n outputFormat?: 'toon' | 'code';\n}\n\nexport interface PromptCompressionSummary {\n steps: number;\n inputTokens: number;\n outputTokens: number;\n tokensSaved: number;\n reductionRatio: number;\n}\n\nexport interface PromptCompressionRenderResult {\n asset: ResolvedPromptAsset;\n runtime: RuntimeRenderOptions;\n compression: PromptCompressionResult[];\n warnings: string[];\n}\n\ninterface TheTokenCompanyCompressResponse {\n output: string;\n output_tokens: number;\n input_tokens: number;\n tokens_saved: number;\n compression_ratio: number;\n warnings?: string[];\n}\n\ninterface TheTokenCompanyRawCompressResponse extends Partial<TheTokenCompanyCompressResponse> {\n original_input_tokens?: number;\n compression_time?: number;\n}\n\nexport function summarizePromptCompression(\n compression: PromptCompressionResult[] = [],\n): PromptCompressionSummary {\n const totals = compression.reduce(\n (accumulator, result) => {\n accumulator.inputTokens += result.inputTokens;\n accumulator.outputTokens += result.outputTokens;\n accumulator.tokensSaved += result.tokensSaved;\n return accumulator;\n },\n {\n inputTokens: 0,\n outputTokens: 0,\n tokensSaved: 0,\n },\n );\n\n return {\n steps: compression.length,\n inputTokens: totals.inputTokens,\n outputTokens: totals.outputTokens,\n tokensSaved: totals.tokensSaved,\n reductionRatio: totals.inputTokens === 0 ? 0 : totals.tokensSaved / totals.inputTokens,\n };\n}\n\nexport async function applyPromptCompressionForRender(\n asset: ResolvedPromptAsset,\n runtime: RuntimeRenderOptions,\n): Promise<PromptCompressionRenderResult> {\n const theTokenCompanyConfig = asset.compression?.thetokencompany;\n const heuristicConfig = asset.compression?.heuristic;\n const codeConfig = asset.compression?.code;\n const hasTheTokenCompanyCompression = theTokenCompanyConfig?.enabled === true && Boolean(asset.sections.prompt_template);\n const hasHeuristicPromptCompression = heuristicConfig?.enabled === true && Boolean(asset.sections.prompt_template);\n const hasCodePromptCompaction = codeConfig?.enabled === true && Boolean(asset.sections.prompt_template);\n const hasPlaceholderCompression = usesPlaceholderCompression(asset);\n\n if (\n !hasTheTokenCompanyCompression\n && !hasHeuristicPromptCompression\n && !hasCodePromptCompaction\n && !hasPlaceholderCompression\n ) {\n return { asset, runtime, compression: [], warnings: [] };\n }\n\n const compression: PromptCompressionResult[] = [];\n const warnings: string[] = [];\n const sections = renderSections(asset, {\n variables: runtime.variables,\n strict: runtime.strict,\n compression: {\n onHeuristicCompression: (event) => {\n compression.push({\n provider: 'heuristic',\n model: HEURISTIC_COMPRESSION_MODEL,\n inputTokens: event.inputTokens,\n outputTokens: event.outputTokens,\n tokensSaved: event.tokensSaved,\n compressionRatio: event.compressionRatio,\n scope: event.scope,\n variable: event.variable,\n outputFormat: event.outputFormat,\n });\n },\n onCodeCompaction: (event) => {\n compression.push({\n provider: 'code',\n model: CODE_COMPACTION_MODEL,\n inputTokens: event.inputTokens,\n outputTokens: event.outputTokens,\n tokensSaved: event.tokensSaved,\n compressionRatio: event.compressionRatio,\n scope: event.scope,\n variable: event.variable,\n outputFormat: 'code',\n });\n },\n onCompressionWarning: (warning) => {\n warnings.push(warning);\n },\n },\n });\n\n let promptTemplate = sections.prompt_template;\n\n if (hasCodePromptCompaction && promptTemplate) {\n if (hasHeuristicPromptCompression) {\n warnings.push(\n 'POK032: Local heuristic prompt compression skipped because compression.code is enabled for the prompt template.',\n );\n }\n\n const result = compactCode(promptTemplate, toCodeCompactionOptions(codeConfig));\n\n promptTemplate = result.output;\n\n if (result.tokensSaved > 0 || result.output !== sections.prompt_template) {\n compression.push({\n provider: 'code',\n model: CODE_COMPACTION_MODEL,\n inputTokens: result.inputTokens,\n outputTokens: result.outputTokens,\n tokensSaved: result.tokensSaved,\n compressionRatio: result.compressionRatio,\n scope: 'prompt_template',\n outputFormat: 'code',\n });\n }\n } else if (hasHeuristicPromptCompression && promptTemplate) {\n const result = compressHeuristicText(promptTemplate, {\n min_tokens: heuristicConfig?.min_tokens,\n max_sentences: heuristicConfig?.max_sentences,\n target_reduction: heuristicConfig?.target_reduction,\n query: resolveHeuristicPromptQuery(heuristicConfig, runtime.variables, sections.system_instructions),\n json_to_toon: heuristicConfig?.json_to_toon,\n mode: heuristicConfig?.mode,\n preserve_neighbors: heuristicConfig?.preserve_neighbors,\n fail_on_low_confidence: heuristicConfig?.fail_on_low_confidence,\n });\n\n promptTemplate = result.output;\n\n reportHeuristicCompressionWarnings(warnings, result.warnings, 'prompt template');\n\n if (result.tokensSaved > 0 || result.output !== sections.prompt_template) {\n compression.push({\n provider: 'heuristic',\n model: HEURISTIC_COMPRESSION_MODEL,\n inputTokens: result.inputTokens,\n outputTokens: result.outputTokens,\n tokensSaved: result.tokensSaved,\n compressionRatio: result.compressionRatio,\n scope: 'prompt_template',\n outputFormat: result.outputFormat,\n });\n }\n }\n\n if (hasTheTokenCompanyCompression && hasCodePromptCompaction && promptTemplate) {\n warnings.push(\n 'POK033: TheTokenCompany compression skipped because compression.code is enabled; code is compacted locally and not text-compressed.',\n );\n } else if (hasTheTokenCompanyCompression && promptTemplate) {\n const model = theTokenCompanyConfig?.model ?? THETOKENCOMPANY_DEFAULT_MODEL;\n const result = await compressWithTheTokenCompany(promptTemplate, {\n apiKey: runtime.theTokenCompany?.apiKey,\n baseURL: runtime.theTokenCompany?.baseURL,\n fetch: runtime.theTokenCompany?.fetch,\n model,\n aggressiveness: theTokenCompanyConfig?.aggressiveness,\n });\n\n promptTemplate = result.output;\n warnings.push(...(result.warnings ?? []));\n\n compression.push({\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 return {\n asset: {\n ...asset,\n sections: {\n ...asset.sections,\n ...sections,\n ...(promptTemplate !== undefined ? { prompt_template: promptTemplate } : {}),\n },\n },\n runtime: {\n ...runtime,\n variables: {},\n strict: false,\n },\n compression,\n warnings,\n };\n}\n\nfunction usesPlaceholderCompression(asset: ResolvedPromptAsset): boolean {\n const hasContextInputCompression = getContextInputs(asset).some((input) =>\n input.compression?.heuristic?.enabled === true || input.compression?.code?.enabled === true\n );\n\n if (hasContextInputCompression) {\n return true;\n }\n\n return Boolean(\n (asset.sections.system_instructions && hasCompressionModifier(asset.sections.system_instructions))\n || (asset.sections.prompt_template && hasCompressionModifier(asset.sections.prompt_template)),\n );\n}\n\nfunction hasCompressionModifier(template: string): boolean {\n return /\\{\\{\\s*[a-zA-Z_][a-zA-Z0-9_]*\\s*\\|\\s*(?:compress|toon|compact|code)\\s*\\}\\}/.test(template);\n}\n\nfunction resolveHeuristicPromptQuery(\n options: (HeuristicCompressionOptions & { query_variable?: string }) | undefined,\n variables: Record<string, string> | undefined,\n systemInstructions: string | undefined,\n): string | undefined {\n if (options?.query !== undefined) {\n return options.query;\n }\n\n if (options?.query_variable && variables?.[options.query_variable] !== undefined) {\n return variables[options.query_variable];\n }\n\n return systemInstructions;\n}\n\nfunction toCodeCompactionOptions(options: CodeCompactionOptions | undefined): CodeCompactionOptions {\n return {\n remove_comments: options?.remove_comments,\n trim_indentation: options?.trim_indentation,\n collapse_blank_lines: options?.collapse_blank_lines,\n };\n}\n\nfunction reportHeuristicCompressionWarnings(\n warnings: string[],\n compressionWarnings: string[] | undefined,\n scope: string,\n): void {\n for (const warning of compressionWarnings ?? []) {\n warnings.push(`POK031: ${warning} Scope: ${scope}.`);\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 return createTheTokenCompanyFallback(input,\n 'no API key was provided',\n );\n }\n\n const fetchImpl = options.fetch ?? globalThis.fetch;\n if (!fetchImpl) {\n return createTheTokenCompanyFallback(input,\n 'fetch is unavailable in this runtime',\n );\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 let response: Response;\n try {\n 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 } catch (error) {\n return createTheTokenCompanyFallback(input,\n `request failed: ${toErrorMessage(error)}`,\n );\n }\n\n if (!response.ok) {\n return createTheTokenCompanyFallback(input,\n `service returned HTTP ${response.status}`,\n );\n }\n\n let data: TheTokenCompanyRawCompressResponse;\n try {\n data = await response.json() as TheTokenCompanyRawCompressResponse;\n } catch (error) {\n return createTheTokenCompanyFallback(input,\n `response body was not valid JSON: ${toErrorMessage(error)}`,\n );\n }\n\n const normalized = normalizeTheTokenCompanyCompressResponse(data);\n if (!normalized) {\n return createTheTokenCompanyFallback(input,\n 'response payload was invalid',\n );\n }\n\n return normalized;\n}\n\nfunction createTheTokenCompanyFallback(\n input: string,\n reason: string,\n): TheTokenCompanyCompressResponse {\n const tokens = estimateHeuristicTokens(input);\n\n return {\n output: input,\n output_tokens: tokens,\n input_tokens: tokens,\n tokens_saved: 0,\n compression_ratio: tokens === 0 ? 0 : 1,\n warnings: [\n `POK057: TheTokenCompany compression skipped; using uncompressed prompt with zero token savings (${reason}).`,\n ],\n };\n}\n\nfunction toErrorMessage(error: unknown): string {\n return error instanceof Error && error.message\n ? error.message\n : 'unknown error';\n}\n\nfunction normalizeTheTokenCompanyCompressResponse(\n data: TheTokenCompanyRawCompressResponse,\n): TheTokenCompanyCompressResponse | undefined {\n if (\n typeof data.output !== 'string'\n || typeof data.output_tokens !== 'number'\n ) {\n return undefined;\n }\n\n const inputTokens = typeof data.input_tokens === 'number'\n ? data.input_tokens\n : data.original_input_tokens;\n\n if (typeof inputTokens !== 'number') {\n return undefined;\n }\n\n const tokensSaved = typeof data.tokens_saved === 'number'\n ? data.tokens_saved\n : inputTokens - data.output_tokens;\n const compressionRatio = typeof data.compression_ratio === 'number'\n ? data.compression_ratio\n : data.output_tokens === 0\n ? 0\n : inputTokens / data.output_tokens;\n\n return {\n output: data.output,\n output_tokens: data.output_tokens,\n input_tokens: inputTokens,\n tokens_saved: tokensSaved,\n compression_ratio: compressionRatio,\n };\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, summarizePromptCompression } 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 || prepared.warnings.length > 0\n ? {\n ...request,\n ...(prepared.compression.length > 0\n ? {\n compression: prepared.compression,\n compressionSummary: summarizePromptCompression(prepared.compression),\n }\n : {}),\n ...(prepared.warnings.length > 0 ? { warnings: prepared.warnings } : {}),\n }\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","lines","line","line","result","import_promises","import_node_fs","import_node_path","import_promises","import_node_path","line","indent","line","matter","import_promises","import_node_path","import_gray_matter","import_zod","matter","mergeRecordBlock","info","compacted","toCodeCompactionOptions","reportHeuristicCompressionWarnings"]}