promptopskit 0.2.6 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +89 -0
  2. package/SKILL.md +49 -0
  3. package/dist/{chunk-PU3UPUND.js → chunk-DDXFDVA6.js} +4 -4
  4. package/dist/{chunk-PU3UPUND.js.map → chunk-DDXFDVA6.js.map} +1 -1
  5. package/dist/chunk-DGFBS7YW.js +101 -0
  6. package/dist/chunk-DGFBS7YW.js.map +1 -0
  7. package/dist/chunk-HWEVRBKZ.js +387 -0
  8. package/dist/chunk-HWEVRBKZ.js.map +1 -0
  9. package/dist/{chunk-5BI5FP5L.js → chunk-LNZS3TIJ.js} +21 -18
  10. package/dist/chunk-LNZS3TIJ.js.map +1 -0
  11. package/dist/{chunk-VYVEVJC3.js → chunk-LRRSI4ON.js} +25 -22
  12. package/dist/chunk-LRRSI4ON.js.map +1 -0
  13. package/dist/chunk-Y2YYEGOY.js +86 -0
  14. package/dist/chunk-Y2YYEGOY.js.map +1 -0
  15. package/dist/cli/index.js +66 -40
  16. package/dist/cli/index.js.map +1 -1
  17. package/dist/index.cjs +479 -61
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.cts +8 -4
  20. package/dist/index.d.ts +8 -4
  21. package/dist/index.js +41 -40
  22. package/dist/index.js.map +1 -1
  23. package/dist/providers/anthropic.cjs +64 -19
  24. package/dist/providers/anthropic.cjs.map +1 -1
  25. package/dist/providers/anthropic.d.cts +2 -2
  26. package/dist/providers/anthropic.d.ts +2 -2
  27. package/dist/providers/anthropic.js +2 -2
  28. package/dist/providers/gemini.cjs +60 -15
  29. package/dist/providers/gemini.cjs.map +1 -1
  30. package/dist/providers/gemini.d.cts +2 -2
  31. package/dist/providers/gemini.d.ts +2 -2
  32. package/dist/providers/gemini.js +2 -2
  33. package/dist/providers/openai.cjs +64 -19
  34. package/dist/providers/openai.cjs.map +1 -1
  35. package/dist/providers/openai.d.cts +2 -2
  36. package/dist/providers/openai.d.ts +2 -2
  37. package/dist/providers/openai.js +2 -2
  38. package/dist/providers/openrouter.cjs +66 -21
  39. package/dist/providers/openrouter.cjs.map +1 -1
  40. package/dist/providers/openrouter.d.cts +2 -2
  41. package/dist/providers/openrouter.d.ts +2 -2
  42. package/dist/providers/openrouter.js +3 -3
  43. package/dist/testing.d.cts +1 -1
  44. package/dist/testing.d.ts +1 -1
  45. package/dist/{types-BUzJB5p_.d.cts → types-BsYdPHTU.d.ts} +5 -2
  46. package/dist/{types-DM0-tThJ.d.ts → types-DC-jI6iV.d.cts} +5 -2
  47. package/dist/usagetap/index.cjs +425 -0
  48. package/dist/usagetap/index.cjs.map +1 -0
  49. package/dist/usagetap/index.d.cts +147 -0
  50. package/dist/usagetap/index.d.ts +147 -0
  51. package/dist/usagetap/index.js +31 -0
  52. package/dist/usagetap/index.js.map +1 -0
  53. package/package.json +11 -1
  54. package/dist/chunk-5BI5FP5L.js.map +0 -1
  55. package/dist/chunk-6KGBPHSY.js +0 -56
  56. package/dist/chunk-6KGBPHSY.js.map +0 -1
  57. package/dist/chunk-UYTUGV7Z.js +0 -83
  58. package/dist/chunk-UYTUGV7Z.js.map +0 -1
  59. package/dist/chunk-VYVEVJC3.js.map +0 -1
  60. package/dist/{schema-DJ7C8Q6y.d.cts → schema-Dq0jKest.d.cts} +13 -13
  61. package/dist/{schema-DJ7C8Q6y.d.ts → schema-Dq0jKest.d.ts} +13 -13
@@ -0,0 +1,147 @@
1
+ import { a as ProviderRequest } from '../types-DC-jI6iV.cjs';
2
+ import '../schema-Dq0jKest.cjs';
3
+ import 'zod';
4
+
5
+ type UsageTapReasoningLevel = 'NONE' | 'LOW' | 'MEDIUM' | 'HIGH';
6
+ type UsageTapEntitlementMode = 'off' | 'apply';
7
+ type UsageTapAllowedCapability = 'standard' | 'premium' | 'audio' | 'image' | 'search';
8
+ interface UsageTapAllowed {
9
+ standard?: boolean;
10
+ premium?: boolean;
11
+ audio?: boolean;
12
+ image?: boolean;
13
+ search?: boolean;
14
+ reasoningLevel?: UsageTapReasoningLevel;
15
+ }
16
+ interface UsageTapBeginRequest {
17
+ customerId: string;
18
+ feature?: string;
19
+ tags?: string[];
20
+ customerName?: string;
21
+ customerEmail?: string;
22
+ stripeCustomerId?: string;
23
+ requested?: Record<string, boolean | string>;
24
+ idempotencyKey?: string;
25
+ batch?: boolean;
26
+ pricingMode?: 'batch' | 'standard';
27
+ }
28
+ interface UsageTapBeginResponse {
29
+ data: {
30
+ callId: string;
31
+ allowed: UsageTapAllowed;
32
+ entitlementHints?: Record<string, unknown>;
33
+ subscription?: Record<string, unknown>;
34
+ plan?: Record<string, unknown>;
35
+ balances?: Record<string, unknown>;
36
+ stripeCustomerId?: string | null;
37
+ [key: string]: unknown;
38
+ };
39
+ [key: string]: unknown;
40
+ }
41
+ interface UsageTapErrorPayload {
42
+ code: string;
43
+ message: string;
44
+ }
45
+ interface UsageTapEndUsage {
46
+ modelUsed?: string;
47
+ inputTokens?: number;
48
+ cachedInputTokens?: number;
49
+ responseTokens?: number;
50
+ reasoningTokens?: number;
51
+ searches?: number;
52
+ audio?: number;
53
+ audioSeconds?: number;
54
+ isPremium?: boolean;
55
+ stripeCustomerId?: string;
56
+ responseStatusCode?: number;
57
+ batch?: boolean;
58
+ pricingMode?: 'batch' | 'standard';
59
+ error?: UsageTapErrorPayload;
60
+ }
61
+ interface UsageTapEndRequest extends UsageTapEndUsage {
62
+ callId: string;
63
+ }
64
+ interface UsageTapEndResponse {
65
+ data?: Record<string, unknown>;
66
+ [key: string]: unknown;
67
+ }
68
+ interface UsageTapClientConfig {
69
+ apiKey: string;
70
+ baseUrl?: string;
71
+ fetch?: typeof globalThis.fetch;
72
+ }
73
+ interface UsageTapRequestInit {
74
+ signal?: AbortSignal;
75
+ }
76
+ interface UsageTapClient {
77
+ request<T>(path: string, body: unknown, init?: UsageTapRequestInit): Promise<T>;
78
+ beginCall(begin: UsageTapBeginRequest, init?: UsageTapRequestInit): Promise<UsageTapBeginResponse>;
79
+ endCall(end: UsageTapEndRequest, init?: UsageTapRequestInit): Promise<UsageTapEndResponse>;
80
+ }
81
+ interface UsageTapInvokeContext {
82
+ begin: UsageTapBeginResponse;
83
+ setUsage: (usage: UsageTapEndUsage) => void;
84
+ signal?: AbortSignal;
85
+ }
86
+ interface UsageTapInvokeResult<TResult> {
87
+ result: TResult;
88
+ usage: UsageTapEndUsage;
89
+ }
90
+ interface UsageTapCallOptions<TResult> {
91
+ begin: UsageTapBeginRequest;
92
+ invoke: (context: UsageTapInvokeContext) => Promise<TResult | UsageTapInvokeResult<TResult>>;
93
+ onError?: (error: unknown) => UsageTapErrorPayload;
94
+ signal?: AbortSignal;
95
+ }
96
+ interface UsageTapCallResult<TResult> {
97
+ result: TResult;
98
+ begin: UsageTapBeginResponse;
99
+ end: UsageTapEndResponse;
100
+ effectiveUsage: UsageTapEndUsage;
101
+ }
102
+ interface UsageTapEntitlementOptions {
103
+ modelTiers?: {
104
+ standard?: string;
105
+ premium?: string;
106
+ };
107
+ toolEntitlements?: Record<string, UsageTapAllowedCapability>;
108
+ }
109
+ interface UsageTapProviderRunOptions<TResult> extends UsageTapEntitlementOptions {
110
+ request: ProviderRequest;
111
+ begin: UsageTapBeginRequest;
112
+ invoke: (request: ProviderRequest) => Promise<TResult | UsageTapInvokeResult<TResult>>;
113
+ extractUsage?: (response: TResult) => UsageTapEndUsage;
114
+ entitlementMode?: UsageTapEntitlementMode;
115
+ signal?: AbortSignal;
116
+ onError?: (error: unknown) => UsageTapErrorPayload;
117
+ }
118
+ interface UsageTapProviderRunResult<TResult> {
119
+ response: TResult;
120
+ begin: UsageTapBeginResponse;
121
+ end: UsageTapEndResponse;
122
+ requestUsed: ProviderRequest;
123
+ effectiveUsage: UsageTapEndUsage;
124
+ allowed: UsageTapAllowed;
125
+ }
126
+
127
+ declare function createUsageTapClient(config: UsageTapClientConfig): UsageTapClient;
128
+
129
+ declare function defaultUsageTapErrorMapper(error: unknown): UsageTapErrorPayload;
130
+ declare function beginUsageTapCall(client: UsageTapClient, begin: Parameters<UsageTapClient['beginCall']>[0], init?: UsageTapRequestInit): Promise<UsageTapBeginResponse>;
131
+ declare function endUsageTapCall(client: UsageTapClient, end: UsageTapEndRequest, init?: UsageTapRequestInit): Promise<UsageTapEndResponse>;
132
+ declare function withUsageTapCall<TResult>(client: UsageTapClient, options: UsageTapCallOptions<TResult>): Promise<UsageTapCallResult<TResult>>;
133
+
134
+ declare function applyUsageTapEntitlements(request: ProviderRequest, begin: UsageTapBeginResponse, options?: UsageTapEntitlementOptions): ProviderRequest;
135
+ interface UsageMeta {
136
+ modelUsed?: string;
137
+ responseStatusCode?: number;
138
+ }
139
+ declare function extractOpenAIUsage(response: unknown, meta?: UsageMeta): UsageTapEndUsage;
140
+ declare function extractAnthropicUsage(response: unknown, meta?: UsageMeta): UsageTapEndUsage;
141
+ declare function extractGeminiUsage(response: unknown, meta?: UsageMeta): UsageTapEndUsage;
142
+ declare function runOpenAIWithUsageTap<TResult>(client: UsageTapClient, options: UsageTapProviderRunOptions<TResult>): Promise<UsageTapProviderRunResult<TResult>>;
143
+ declare function runOpenRouterWithUsageTap<TResult>(client: UsageTapClient, options: UsageTapProviderRunOptions<TResult>): Promise<UsageTapProviderRunResult<TResult>>;
144
+ declare function runAnthropicWithUsageTap<TResult>(client: UsageTapClient, options: UsageTapProviderRunOptions<TResult>): Promise<UsageTapProviderRunResult<TResult>>;
145
+ declare function runGeminiWithUsageTap<TResult>(client: UsageTapClient, options: UsageTapProviderRunOptions<TResult>): Promise<UsageTapProviderRunResult<TResult>>;
146
+
147
+ export { type UsageTapAllowed, type UsageTapAllowedCapability, type UsageTapBeginRequest, type UsageTapBeginResponse, type UsageTapCallOptions, type UsageTapCallResult, type UsageTapClient, type UsageTapClientConfig, type UsageTapEndRequest, type UsageTapEndResponse, type UsageTapEndUsage, type UsageTapEntitlementMode, type UsageTapEntitlementOptions, type UsageTapErrorPayload, type UsageTapInvokeContext, type UsageTapInvokeResult, type UsageTapProviderRunOptions, type UsageTapProviderRunResult, type UsageTapReasoningLevel, applyUsageTapEntitlements, beginUsageTapCall, createUsageTapClient, defaultUsageTapErrorMapper, endUsageTapCall, extractAnthropicUsage, extractGeminiUsage, extractOpenAIUsage, runAnthropicWithUsageTap, runGeminiWithUsageTap, runOpenAIWithUsageTap, runOpenRouterWithUsageTap, withUsageTapCall };
@@ -0,0 +1,147 @@
1
+ import { a as ProviderRequest } from '../types-BsYdPHTU.js';
2
+ import '../schema-Dq0jKest.js';
3
+ import 'zod';
4
+
5
+ type UsageTapReasoningLevel = 'NONE' | 'LOW' | 'MEDIUM' | 'HIGH';
6
+ type UsageTapEntitlementMode = 'off' | 'apply';
7
+ type UsageTapAllowedCapability = 'standard' | 'premium' | 'audio' | 'image' | 'search';
8
+ interface UsageTapAllowed {
9
+ standard?: boolean;
10
+ premium?: boolean;
11
+ audio?: boolean;
12
+ image?: boolean;
13
+ search?: boolean;
14
+ reasoningLevel?: UsageTapReasoningLevel;
15
+ }
16
+ interface UsageTapBeginRequest {
17
+ customerId: string;
18
+ feature?: string;
19
+ tags?: string[];
20
+ customerName?: string;
21
+ customerEmail?: string;
22
+ stripeCustomerId?: string;
23
+ requested?: Record<string, boolean | string>;
24
+ idempotencyKey?: string;
25
+ batch?: boolean;
26
+ pricingMode?: 'batch' | 'standard';
27
+ }
28
+ interface UsageTapBeginResponse {
29
+ data: {
30
+ callId: string;
31
+ allowed: UsageTapAllowed;
32
+ entitlementHints?: Record<string, unknown>;
33
+ subscription?: Record<string, unknown>;
34
+ plan?: Record<string, unknown>;
35
+ balances?: Record<string, unknown>;
36
+ stripeCustomerId?: string | null;
37
+ [key: string]: unknown;
38
+ };
39
+ [key: string]: unknown;
40
+ }
41
+ interface UsageTapErrorPayload {
42
+ code: string;
43
+ message: string;
44
+ }
45
+ interface UsageTapEndUsage {
46
+ modelUsed?: string;
47
+ inputTokens?: number;
48
+ cachedInputTokens?: number;
49
+ responseTokens?: number;
50
+ reasoningTokens?: number;
51
+ searches?: number;
52
+ audio?: number;
53
+ audioSeconds?: number;
54
+ isPremium?: boolean;
55
+ stripeCustomerId?: string;
56
+ responseStatusCode?: number;
57
+ batch?: boolean;
58
+ pricingMode?: 'batch' | 'standard';
59
+ error?: UsageTapErrorPayload;
60
+ }
61
+ interface UsageTapEndRequest extends UsageTapEndUsage {
62
+ callId: string;
63
+ }
64
+ interface UsageTapEndResponse {
65
+ data?: Record<string, unknown>;
66
+ [key: string]: unknown;
67
+ }
68
+ interface UsageTapClientConfig {
69
+ apiKey: string;
70
+ baseUrl?: string;
71
+ fetch?: typeof globalThis.fetch;
72
+ }
73
+ interface UsageTapRequestInit {
74
+ signal?: AbortSignal;
75
+ }
76
+ interface UsageTapClient {
77
+ request<T>(path: string, body: unknown, init?: UsageTapRequestInit): Promise<T>;
78
+ beginCall(begin: UsageTapBeginRequest, init?: UsageTapRequestInit): Promise<UsageTapBeginResponse>;
79
+ endCall(end: UsageTapEndRequest, init?: UsageTapRequestInit): Promise<UsageTapEndResponse>;
80
+ }
81
+ interface UsageTapInvokeContext {
82
+ begin: UsageTapBeginResponse;
83
+ setUsage: (usage: UsageTapEndUsage) => void;
84
+ signal?: AbortSignal;
85
+ }
86
+ interface UsageTapInvokeResult<TResult> {
87
+ result: TResult;
88
+ usage: UsageTapEndUsage;
89
+ }
90
+ interface UsageTapCallOptions<TResult> {
91
+ begin: UsageTapBeginRequest;
92
+ invoke: (context: UsageTapInvokeContext) => Promise<TResult | UsageTapInvokeResult<TResult>>;
93
+ onError?: (error: unknown) => UsageTapErrorPayload;
94
+ signal?: AbortSignal;
95
+ }
96
+ interface UsageTapCallResult<TResult> {
97
+ result: TResult;
98
+ begin: UsageTapBeginResponse;
99
+ end: UsageTapEndResponse;
100
+ effectiveUsage: UsageTapEndUsage;
101
+ }
102
+ interface UsageTapEntitlementOptions {
103
+ modelTiers?: {
104
+ standard?: string;
105
+ premium?: string;
106
+ };
107
+ toolEntitlements?: Record<string, UsageTapAllowedCapability>;
108
+ }
109
+ interface UsageTapProviderRunOptions<TResult> extends UsageTapEntitlementOptions {
110
+ request: ProviderRequest;
111
+ begin: UsageTapBeginRequest;
112
+ invoke: (request: ProviderRequest) => Promise<TResult | UsageTapInvokeResult<TResult>>;
113
+ extractUsage?: (response: TResult) => UsageTapEndUsage;
114
+ entitlementMode?: UsageTapEntitlementMode;
115
+ signal?: AbortSignal;
116
+ onError?: (error: unknown) => UsageTapErrorPayload;
117
+ }
118
+ interface UsageTapProviderRunResult<TResult> {
119
+ response: TResult;
120
+ begin: UsageTapBeginResponse;
121
+ end: UsageTapEndResponse;
122
+ requestUsed: ProviderRequest;
123
+ effectiveUsage: UsageTapEndUsage;
124
+ allowed: UsageTapAllowed;
125
+ }
126
+
127
+ declare function createUsageTapClient(config: UsageTapClientConfig): UsageTapClient;
128
+
129
+ declare function defaultUsageTapErrorMapper(error: unknown): UsageTapErrorPayload;
130
+ declare function beginUsageTapCall(client: UsageTapClient, begin: Parameters<UsageTapClient['beginCall']>[0], init?: UsageTapRequestInit): Promise<UsageTapBeginResponse>;
131
+ declare function endUsageTapCall(client: UsageTapClient, end: UsageTapEndRequest, init?: UsageTapRequestInit): Promise<UsageTapEndResponse>;
132
+ declare function withUsageTapCall<TResult>(client: UsageTapClient, options: UsageTapCallOptions<TResult>): Promise<UsageTapCallResult<TResult>>;
133
+
134
+ declare function applyUsageTapEntitlements(request: ProviderRequest, begin: UsageTapBeginResponse, options?: UsageTapEntitlementOptions): ProviderRequest;
135
+ interface UsageMeta {
136
+ modelUsed?: string;
137
+ responseStatusCode?: number;
138
+ }
139
+ declare function extractOpenAIUsage(response: unknown, meta?: UsageMeta): UsageTapEndUsage;
140
+ declare function extractAnthropicUsage(response: unknown, meta?: UsageMeta): UsageTapEndUsage;
141
+ declare function extractGeminiUsage(response: unknown, meta?: UsageMeta): UsageTapEndUsage;
142
+ declare function runOpenAIWithUsageTap<TResult>(client: UsageTapClient, options: UsageTapProviderRunOptions<TResult>): Promise<UsageTapProviderRunResult<TResult>>;
143
+ declare function runOpenRouterWithUsageTap<TResult>(client: UsageTapClient, options: UsageTapProviderRunOptions<TResult>): Promise<UsageTapProviderRunResult<TResult>>;
144
+ declare function runAnthropicWithUsageTap<TResult>(client: UsageTapClient, options: UsageTapProviderRunOptions<TResult>): Promise<UsageTapProviderRunResult<TResult>>;
145
+ declare function runGeminiWithUsageTap<TResult>(client: UsageTapClient, options: UsageTapProviderRunOptions<TResult>): Promise<UsageTapProviderRunResult<TResult>>;
146
+
147
+ export { type UsageTapAllowed, type UsageTapAllowedCapability, type UsageTapBeginRequest, type UsageTapBeginResponse, type UsageTapCallOptions, type UsageTapCallResult, type UsageTapClient, type UsageTapClientConfig, type UsageTapEndRequest, type UsageTapEndResponse, type UsageTapEndUsage, type UsageTapEntitlementMode, type UsageTapEntitlementOptions, type UsageTapErrorPayload, type UsageTapInvokeContext, type UsageTapInvokeResult, type UsageTapProviderRunOptions, type UsageTapProviderRunResult, type UsageTapReasoningLevel, applyUsageTapEntitlements, beginUsageTapCall, createUsageTapClient, defaultUsageTapErrorMapper, endUsageTapCall, extractAnthropicUsage, extractGeminiUsage, extractOpenAIUsage, runAnthropicWithUsageTap, runGeminiWithUsageTap, runOpenAIWithUsageTap, runOpenRouterWithUsageTap, withUsageTapCall };
@@ -0,0 +1,31 @@
1
+ import {
2
+ applyUsageTapEntitlements,
3
+ beginUsageTapCall,
4
+ createUsageTapClient,
5
+ defaultUsageTapErrorMapper,
6
+ endUsageTapCall,
7
+ extractAnthropicUsage,
8
+ extractGeminiUsage,
9
+ extractOpenAIUsage,
10
+ runAnthropicWithUsageTap,
11
+ runGeminiWithUsageTap,
12
+ runOpenAIWithUsageTap,
13
+ runOpenRouterWithUsageTap,
14
+ withUsageTapCall
15
+ } from "../chunk-HWEVRBKZ.js";
16
+ export {
17
+ applyUsageTapEntitlements,
18
+ beginUsageTapCall,
19
+ createUsageTapClient,
20
+ defaultUsageTapErrorMapper,
21
+ endUsageTapCall,
22
+ extractAnthropicUsage,
23
+ extractGeminiUsage,
24
+ extractOpenAIUsage,
25
+ runAnthropicWithUsageTap,
26
+ runGeminiWithUsageTap,
27
+ runOpenAIWithUsageTap,
28
+ runOpenRouterWithUsageTap,
29
+ withUsageTapCall
30
+ };
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "promptopskit",
3
- "version": "0.2.6",
3
+ "version": "0.3.1",
4
4
  "description": "Manage prompts, system instructions, tools, and model settings as code",
5
5
  "type": "module",
6
6
  "bin": {
@@ -30,6 +30,16 @@
30
30
  "default": "./dist/testing.cjs"
31
31
  }
32
32
  },
33
+ "./usagetap": {
34
+ "import": {
35
+ "types": "./dist/usagetap/index.d.ts",
36
+ "default": "./dist/usagetap/index.js"
37
+ },
38
+ "require": {
39
+ "types": "./dist/usagetap/index.d.cts",
40
+ "default": "./dist/usagetap/index.cjs"
41
+ }
42
+ },
33
43
  "./openai": {
34
44
  "import": {
35
45
  "types": "./dist/providers/openai.d.ts",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/providers/gemini.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';\n\n/**\n * Google Gemini provider adapter.\n * Produces request bodies compatible with the Gemini generateContent API.\n */\nexport const geminiAdapter: ProviderAdapter = {\n name: 'gemini',\n\n validate(asset: ResolvedPromptAsset): ValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n if (!asset.model) {\n errors.push('Gemini adapter requires a model to be specified.');\n }\n\n if (asset.sampling?.frequency_penalty !== undefined) {\n warnings.push('Gemini does not support frequency_penalty. It will be ignored.');\n }\n if (asset.sampling?.presence_penalty !== undefined) {\n warnings.push('Gemini does not support presence_penalty. It will be ignored.');\n }\n\n return { valid: errors.length === 0, errors, warnings };\n },\n\n render(asset: ResolvedPromptAsset, runtime: RuntimeRenderOptions): ProviderRequest {\n const sections = renderSections(asset, {\n variables: runtime.variables,\n strict: runtime.strict,\n });\n\n const contents: Array<Record<string, unknown>> = [];\n\n // History\n if (runtime.history) {\n for (const msg of runtime.history) {\n contents.push({\n role: msg.role === 'assistant' ? 'model' : 'user',\n parts: [{ text: msg.content }],\n });\n }\n }\n\n // User message (prompt template)\n if (sections.prompt_template) {\n contents.push({\n role: 'user',\n parts: [{ text: sections.prompt_template }],\n });\n }\n\n const body: Record<string, unknown> = {\n contents,\n };\n\n // System instruction\n if (sections.system_instructions) {\n body.systemInstruction = {\n parts: [{ text: sections.system_instructions }],\n };\n }\n\n // Generation config\n const generationConfig: Record<string, unknown> = {};\n\n if (asset.sampling?.temperature !== undefined) generationConfig.temperature = asset.sampling.temperature;\n if (asset.sampling?.top_p !== undefined) generationConfig.topP = asset.sampling.top_p;\n if (asset.sampling?.max_output_tokens !== undefined) generationConfig.maxOutputTokens = asset.sampling.max_output_tokens;\n if (asset.sampling?.stop !== undefined) generationConfig.stopSequences = asset.sampling.stop;\n\n if (asset.response?.format === 'json') {\n generationConfig.responseMimeType = 'application/json';\n }\n\n // Thinking config\n if (asset.reasoning?.effort) {\n body.thinkingConfig = {\n thinkingBudget: asset.reasoning.effort === 'high' ? 8192 : asset.reasoning.effort === 'medium' ? 4096 : 1024,\n };\n }\n\n if (Object.keys(generationConfig).length > 0) {\n body.generationConfig = generationConfig;\n }\n\n // Tools\n if (asset.tools && asset.tools.length > 0) {\n const functionDeclarations = asset.tools.map((tool) => {\n if (typeof tool === 'string') {\n const def = runtime.toolRegistry?.[tool];\n if (def) return def;\n return { name: tool };\n }\n return {\n name: tool.name,\n description: tool.description,\n parameters: tool.input_schema,\n };\n });\n body.tools = [{ functionDeclarations }];\n }\n\n return {\n body,\n provider: 'gemini',\n model: asset.model ?? 'unknown',\n };\n },\n};\n"],"mappings":";;;;;AAaO,IAAM,gBAAiC;AAAA,EAC5C,MAAM;AAAA,EAEN,SAAS,OAA8C;AACrD,UAAM,SAAmB,CAAC;AAC1B,UAAM,WAAqB,CAAC;AAE5B,QAAI,CAAC,MAAM,OAAO;AAChB,aAAO,KAAK,kDAAkD;AAAA,IAChE;AAEA,QAAI,MAAM,UAAU,sBAAsB,QAAW;AACnD,eAAS,KAAK,gEAAgE;AAAA,IAChF;AACA,QAAI,MAAM,UAAU,qBAAqB,QAAW;AAClD,eAAS,KAAK,+DAA+D;AAAA,IAC/E;AAEA,WAAO,EAAE,OAAO,OAAO,WAAW,GAAG,QAAQ,SAAS;AAAA,EACxD;AAAA,EAEA,OAAO,OAA4B,SAAgD;AACjF,UAAM,WAAW,eAAe,OAAO;AAAA,MACrC,WAAW,QAAQ;AAAA,MACnB,QAAQ,QAAQ;AAAA,IAClB,CAAC;AAED,UAAM,WAA2C,CAAC;AAGlD,QAAI,QAAQ,SAAS;AACnB,iBAAW,OAAO,QAAQ,SAAS;AACjC,iBAAS,KAAK;AAAA,UACZ,MAAM,IAAI,SAAS,cAAc,UAAU;AAAA,UAC3C,OAAO,CAAC,EAAE,MAAM,IAAI,QAAQ,CAAC;AAAA,QAC/B,CAAC;AAAA,MACH;AAAA,IACF;AAGA,QAAI,SAAS,iBAAiB;AAC5B,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,OAAO,CAAC,EAAE,MAAM,SAAS,gBAAgB,CAAC;AAAA,MAC5C,CAAC;AAAA,IACH;AAEA,UAAM,OAAgC;AAAA,MACpC;AAAA,IACF;AAGA,QAAI,SAAS,qBAAqB;AAChC,WAAK,oBAAoB;AAAA,QACvB,OAAO,CAAC,EAAE,MAAM,SAAS,oBAAoB,CAAC;AAAA,MAChD;AAAA,IACF;AAGA,UAAM,mBAA4C,CAAC;AAEnD,QAAI,MAAM,UAAU,gBAAgB,OAAW,kBAAiB,cAAc,MAAM,SAAS;AAC7F,QAAI,MAAM,UAAU,UAAU,OAAW,kBAAiB,OAAO,MAAM,SAAS;AAChF,QAAI,MAAM,UAAU,sBAAsB,OAAW,kBAAiB,kBAAkB,MAAM,SAAS;AACvG,QAAI,MAAM,UAAU,SAAS,OAAW,kBAAiB,gBAAgB,MAAM,SAAS;AAExF,QAAI,MAAM,UAAU,WAAW,QAAQ;AACrC,uBAAiB,mBAAmB;AAAA,IACtC;AAGA,QAAI,MAAM,WAAW,QAAQ;AAC3B,WAAK,iBAAiB;AAAA,QACpB,gBAAgB,MAAM,UAAU,WAAW,SAAS,OAAO,MAAM,UAAU,WAAW,WAAW,OAAO;AAAA,MAC1G;AAAA,IACF;AAEA,QAAI,OAAO,KAAK,gBAAgB,EAAE,SAAS,GAAG;AAC5C,WAAK,mBAAmB;AAAA,IAC1B;AAGA,QAAI,MAAM,SAAS,MAAM,MAAM,SAAS,GAAG;AACzC,YAAM,uBAAuB,MAAM,MAAM,IAAI,CAAC,SAAS;AACrD,YAAI,OAAO,SAAS,UAAU;AAC5B,gBAAM,MAAM,QAAQ,eAAe,IAAI;AACvC,cAAI,IAAK,QAAO;AAChB,iBAAO,EAAE,MAAM,KAAK;AAAA,QACtB;AACA,eAAO;AAAA,UACL,MAAM,KAAK;AAAA,UACX,aAAa,KAAK;AAAA,UAClB,YAAY,KAAK;AAAA,QACnB;AAAA,MACF,CAAC;AACD,WAAK,QAAQ,CAAC,EAAE,qBAAqB,CAAC;AAAA,IACxC;AAEA,WAAO;AAAA,MACL;AAAA,MACA,UAAU;AAAA,MACV,OAAO,MAAM,SAAS;AAAA,IACxB;AAAA,EACF;AACF;","names":[]}
@@ -1,56 +0,0 @@
1
- // src/renderer/interpolate.ts
2
- var VARIABLE_RE = /\{\{\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*\}\}/g;
3
- var ESCAPED_OPEN = /\\\{\\\{/g;
4
- var ESCAPE_PLACEHOLDER = "\0ESCAPED_OPEN\0";
5
- function interpolate(template, variables, options = {}) {
6
- const { strict = false } = options;
7
- let result = template.replace(ESCAPED_OPEN, ESCAPE_PLACEHOLDER);
8
- result = result.replace(VARIABLE_RE, (match, name) => {
9
- if (name in variables) {
10
- return variables[name];
11
- }
12
- if (strict) {
13
- throw new Error(`Missing required variable: "${name}"`);
14
- }
15
- return match;
16
- });
17
- result = result.replaceAll(ESCAPE_PLACEHOLDER, "{{");
18
- return result;
19
- }
20
- function extractVariables(template) {
21
- const vars = /* @__PURE__ */ new Set();
22
- let match;
23
- const re = new RegExp(VARIABLE_RE.source, "g");
24
- while ((match = re.exec(template)) !== null) {
25
- vars.add(match[1]);
26
- }
27
- return [...vars];
28
- }
29
-
30
- // src/renderer/renderer.ts
31
- function renderSections(asset, options = {}) {
32
- const { variables = {}, strict = false } = options;
33
- const result = {};
34
- if (asset.sections.system_instructions) {
35
- result.system_instructions = interpolate(
36
- asset.sections.system_instructions,
37
- variables,
38
- { strict }
39
- );
40
- }
41
- if (asset.sections.prompt_template) {
42
- result.prompt_template = interpolate(
43
- asset.sections.prompt_template,
44
- variables,
45
- { strict }
46
- );
47
- }
48
- return result;
49
- }
50
-
51
- export {
52
- interpolate,
53
- extractVariables,
54
- renderSections
55
- };
56
- //# sourceMappingURL=chunk-6KGBPHSY.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/renderer/interpolate.ts","../src/renderer/renderer.ts"],"sourcesContent":["export interface InterpolateOptions {\n strict?: boolean;\n}\n\nconst VARIABLE_RE = /\\{\\{\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\}\\}/g;\nconst ESCAPED_OPEN = /\\\\\\{\\\\\\{/g;\nconst ESCAPE_PLACEHOLDER = '\\x00ESCAPED_OPEN\\x00';\n\n/**\n * Interpolate variables into a template string.\n *\n * Syntax: {{ variable_name }}\n * Escape: \\{\\{ produces literal {{\n *\n * In strict mode, throws on missing variables.\n * In permissive mode, leaves {{ placeholder }} intact.\n */\nexport function interpolate(\n template: string,\n variables: Record<string, string>,\n options: InterpolateOptions = {},\n): string {\n const { strict = false } = options;\n\n // Replace escaped sequences with placeholder\n let result = template.replace(ESCAPED_OPEN, ESCAPE_PLACEHOLDER);\n\n result = result.replace(VARIABLE_RE, (match, name: string) => {\n if (name in variables) {\n return variables[name];\n }\n if (strict) {\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 { ResolvedPromptAsset } from '../schema/index.js';\nimport { interpolate, extractVariables } from './interpolate.js';\n\nexport interface RenderOptions {\n variables?: Record<string, string>;\n strict?: boolean;\n}\n\nexport interface RenderedSections {\n system_instructions?: string;\n prompt_template?: string;\n}\n\n/**\n * Render the sections of a resolved prompt asset with variable interpolation.\n */\nexport function renderSections(\n asset: ResolvedPromptAsset,\n options: RenderOptions = {},\n): RenderedSections {\n const { variables = {}, strict = false } = options;\n\n const result: RenderedSections = {};\n\n if (asset.sections.system_instructions) {\n result.system_instructions = interpolate(\n asset.sections.system_instructions,\n variables,\n { strict },\n );\n }\n\n if (asset.sections.prompt_template) {\n result.prompt_template = interpolate(\n asset.sections.prompt_template,\n variables,\n { strict },\n );\n }\n\n return result;\n}\n\n/**\n * Get all variable names used across all sections.\n */\nexport function getRequiredVariables(asset: ResolvedPromptAsset): string[] {\n const vars = new Set<string>();\n\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];\n}\n"],"mappings":";AAIA,IAAM,cAAc;AACpB,IAAM,eAAe;AACrB,IAAM,qBAAqB;AAWpB,SAAS,YACd,UACA,WACA,UAA8B,CAAC,GACvB;AACR,QAAM,EAAE,SAAS,MAAM,IAAI;AAG3B,MAAI,SAAS,SAAS,QAAQ,cAAc,kBAAkB;AAE9D,WAAS,OAAO,QAAQ,aAAa,CAAC,OAAO,SAAiB;AAC5D,QAAI,QAAQ,WAAW;AACrB,aAAO,UAAU,IAAI;AAAA,IACvB;AACA,QAAI,QAAQ;AACV,YAAM,IAAI,MAAM,+BAA+B,IAAI,GAAG;AAAA,IACxD;AACA,WAAO;AAAA,EACT,CAAC;AAGD,WAAS,OAAO,WAAW,oBAAoB,IAAI;AAEnD,SAAO;AACT;AAKO,SAAS,iBAAiB,UAA4B;AAC3D,QAAM,OAAO,oBAAI,IAAY;AAC7B,MAAI;AACJ,QAAM,KAAK,IAAI,OAAO,YAAY,QAAQ,GAAG;AAC7C,UAAQ,QAAQ,GAAG,KAAK,QAAQ,OAAO,MAAM;AAC3C,SAAK,IAAI,MAAM,CAAC,CAAC;AAAA,EACnB;AACA,SAAO,CAAC,GAAG,IAAI;AACjB;;;ACtCO,SAAS,eACd,OACA,UAAyB,CAAC,GACR;AAClB,QAAM,EAAE,YAAY,CAAC,GAAG,SAAS,MAAM,IAAI;AAE3C,QAAM,SAA2B,CAAC;AAElC,MAAI,MAAM,SAAS,qBAAqB;AACtC,WAAO,sBAAsB;AAAA,MAC3B,MAAM,SAAS;AAAA,MACf;AAAA,MACA,EAAE,OAAO;AAAA,IACX;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,iBAAiB;AAClC,WAAO,kBAAkB;AAAA,MACvB,MAAM,SAAS;AAAA,MACf;AAAA,MACA,EAAE,OAAO;AAAA,IACX;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
@@ -1,83 +0,0 @@
1
- import {
2
- renderSections
3
- } from "./chunk-6KGBPHSY.js";
4
-
5
- // src/providers/openai.ts
6
- var openaiAdapter = {
7
- name: "openai",
8
- validate(asset) {
9
- const errors = [];
10
- const warnings = [];
11
- if (!asset.model) {
12
- errors.push("OpenAI adapter requires a model to be specified.");
13
- }
14
- if (asset.reasoning?.budget_tokens !== void 0) {
15
- warnings.push("OpenAI uses reasoning_effort, not budget_tokens. budget_tokens will be ignored.");
16
- }
17
- return { valid: errors.length === 0, errors, warnings };
18
- },
19
- render(asset, runtime) {
20
- const sections = renderSections(asset, {
21
- variables: runtime.variables,
22
- strict: runtime.strict
23
- });
24
- const messages = [];
25
- if (sections.system_instructions) {
26
- messages.push({ role: "system", content: sections.system_instructions });
27
- }
28
- if (runtime.history) {
29
- for (const msg of runtime.history) {
30
- messages.push({ role: msg.role, content: msg.content });
31
- }
32
- }
33
- if (sections.prompt_template) {
34
- messages.push({ role: "user", content: sections.prompt_template });
35
- }
36
- const body = {
37
- model: asset.model,
38
- messages
39
- };
40
- if (asset.sampling?.temperature !== void 0) body.temperature = asset.sampling.temperature;
41
- if (asset.sampling?.top_p !== void 0) body.top_p = asset.sampling.top_p;
42
- if (asset.sampling?.frequency_penalty !== void 0) body.frequency_penalty = asset.sampling.frequency_penalty;
43
- if (asset.sampling?.presence_penalty !== void 0) body.presence_penalty = asset.sampling.presence_penalty;
44
- if (asset.sampling?.stop !== void 0) body.stop = asset.sampling.stop;
45
- if (asset.sampling?.max_output_tokens !== void 0) body.max_tokens = asset.sampling.max_output_tokens;
46
- if (asset.reasoning?.effort) {
47
- body.reasoning_effort = asset.reasoning.effort;
48
- }
49
- if (asset.response?.format === "json") {
50
- body.response_format = { type: "json_object" };
51
- }
52
- if (asset.response?.stream !== void 0) {
53
- body.stream = asset.response.stream;
54
- }
55
- if (asset.tools && asset.tools.length > 0) {
56
- body.tools = asset.tools.map((tool) => {
57
- if (typeof tool === "string") {
58
- const def = runtime.toolRegistry?.[tool];
59
- if (def) return def;
60
- return { type: "function", function: { name: tool } };
61
- }
62
- return {
63
- type: "function",
64
- function: {
65
- name: tool.name,
66
- description: tool.description,
67
- parameters: tool.input_schema
68
- }
69
- };
70
- });
71
- }
72
- return {
73
- body,
74
- provider: "openai",
75
- model: asset.model ?? "unknown"
76
- };
77
- }
78
- };
79
-
80
- export {
81
- openaiAdapter
82
- };
83
- //# sourceMappingURL=chunk-UYTUGV7Z.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/providers/openai.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';\n\n/**\n * OpenAI provider adapter.\n * Produces request bodies compatible with the OpenAI Chat Completions API.\n */\nexport const openaiAdapter: ProviderAdapter = {\n name: 'openai',\n\n validate(asset: ResolvedPromptAsset): ValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n if (!asset.model) {\n errors.push('OpenAI adapter requires a model to be specified.');\n }\n\n if (asset.reasoning?.budget_tokens !== undefined) {\n warnings.push('OpenAI uses reasoning_effort, not budget_tokens. budget_tokens will be ignored.');\n }\n\n return { valid: errors.length === 0, errors, warnings };\n },\n\n render(asset: ResolvedPromptAsset, runtime: RuntimeRenderOptions): ProviderRequest {\n const sections = renderSections(asset, {\n variables: runtime.variables,\n strict: runtime.strict,\n });\n\n const messages: Array<Record<string, unknown>> = [];\n\n // System message\n if (sections.system_instructions) {\n messages.push({ role: 'system', content: sections.system_instructions });\n }\n\n // History\n if (runtime.history) {\n for (const msg of runtime.history) {\n messages.push({ role: msg.role, content: msg.content });\n }\n }\n\n // User message (prompt template)\n if (sections.prompt_template) {\n messages.push({ role: 'user', content: sections.prompt_template });\n }\n\n const body: Record<string, unknown> = {\n model: asset.model,\n messages,\n };\n\n // Sampling params\n if (asset.sampling?.temperature !== undefined) body.temperature = asset.sampling.temperature;\n if (asset.sampling?.top_p !== undefined) body.top_p = asset.sampling.top_p;\n if (asset.sampling?.frequency_penalty !== undefined) body.frequency_penalty = asset.sampling.frequency_penalty;\n if (asset.sampling?.presence_penalty !== undefined) body.presence_penalty = asset.sampling.presence_penalty;\n if (asset.sampling?.stop !== undefined) body.stop = asset.sampling.stop;\n if (asset.sampling?.max_output_tokens !== undefined) body.max_tokens = asset.sampling.max_output_tokens;\n\n // Reasoning\n if (asset.reasoning?.effort) {\n body.reasoning_effort = asset.reasoning.effort;\n }\n\n // Response format\n if (asset.response?.format === 'json') {\n body.response_format = { type: 'json_object' };\n }\n\n // Streaming\n if (asset.response?.stream !== undefined) {\n body.stream = asset.response.stream;\n }\n\n // Tools\n if (asset.tools && asset.tools.length > 0) {\n body.tools = asset.tools.map((tool) => {\n if (typeof tool === 'string') {\n // Look up from registry\n const def = runtime.toolRegistry?.[tool];\n if (def) return def;\n return { type: 'function', function: { name: tool } };\n }\n return {\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.input_schema,\n },\n };\n });\n }\n\n return {\n body,\n provider: 'openai',\n model: asset.model ?? 'unknown',\n };\n },\n};\n"],"mappings":";;;;;AAaO,IAAM,gBAAiC;AAAA,EAC5C,MAAM;AAAA,EAEN,SAAS,OAA8C;AACrD,UAAM,SAAmB,CAAC;AAC1B,UAAM,WAAqB,CAAC;AAE5B,QAAI,CAAC,MAAM,OAAO;AAChB,aAAO,KAAK,kDAAkD;AAAA,IAChE;AAEA,QAAI,MAAM,WAAW,kBAAkB,QAAW;AAChD,eAAS,KAAK,iFAAiF;AAAA,IACjG;AAEA,WAAO,EAAE,OAAO,OAAO,WAAW,GAAG,QAAQ,SAAS;AAAA,EACxD;AAAA,EAEA,OAAO,OAA4B,SAAgD;AACjF,UAAM,WAAW,eAAe,OAAO;AAAA,MACrC,WAAW,QAAQ;AAAA,MACnB,QAAQ,QAAQ;AAAA,IAClB,CAAC;AAED,UAAM,WAA2C,CAAC;AAGlD,QAAI,SAAS,qBAAqB;AAChC,eAAS,KAAK,EAAE,MAAM,UAAU,SAAS,SAAS,oBAAoB,CAAC;AAAA,IACzE;AAGA,QAAI,QAAQ,SAAS;AACnB,iBAAW,OAAO,QAAQ,SAAS;AACjC,iBAAS,KAAK,EAAE,MAAM,IAAI,MAAM,SAAS,IAAI,QAAQ,CAAC;AAAA,MACxD;AAAA,IACF;AAGA,QAAI,SAAS,iBAAiB;AAC5B,eAAS,KAAK,EAAE,MAAM,QAAQ,SAAS,SAAS,gBAAgB,CAAC;AAAA,IACnE;AAEA,UAAM,OAAgC;AAAA,MACpC,OAAO,MAAM;AAAA,MACb;AAAA,IACF;AAGA,QAAI,MAAM,UAAU,gBAAgB,OAAW,MAAK,cAAc,MAAM,SAAS;AACjF,QAAI,MAAM,UAAU,UAAU,OAAW,MAAK,QAAQ,MAAM,SAAS;AACrE,QAAI,MAAM,UAAU,sBAAsB,OAAW,MAAK,oBAAoB,MAAM,SAAS;AAC7F,QAAI,MAAM,UAAU,qBAAqB,OAAW,MAAK,mBAAmB,MAAM,SAAS;AAC3F,QAAI,MAAM,UAAU,SAAS,OAAW,MAAK,OAAO,MAAM,SAAS;AACnE,QAAI,MAAM,UAAU,sBAAsB,OAAW,MAAK,aAAa,MAAM,SAAS;AAGtF,QAAI,MAAM,WAAW,QAAQ;AAC3B,WAAK,mBAAmB,MAAM,UAAU;AAAA,IAC1C;AAGA,QAAI,MAAM,UAAU,WAAW,QAAQ;AACrC,WAAK,kBAAkB,EAAE,MAAM,cAAc;AAAA,IAC/C;AAGA,QAAI,MAAM,UAAU,WAAW,QAAW;AACxC,WAAK,SAAS,MAAM,SAAS;AAAA,IAC/B;AAGA,QAAI,MAAM,SAAS,MAAM,MAAM,SAAS,GAAG;AACzC,WAAK,QAAQ,MAAM,MAAM,IAAI,CAAC,SAAS;AACrC,YAAI,OAAO,SAAS,UAAU;AAE5B,gBAAM,MAAM,QAAQ,eAAe,IAAI;AACvC,cAAI,IAAK,QAAO;AAChB,iBAAO,EAAE,MAAM,YAAY,UAAU,EAAE,MAAM,KAAK,EAAE;AAAA,QACtD;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,UAAU;AAAA,YACR,MAAM,KAAK;AAAA,YACX,aAAa,KAAK;AAAA,YAClB,YAAY,KAAK;AAAA,UACnB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,MACL;AAAA,MACA,UAAU;AAAA,MACV,OAAO,MAAM,SAAS;AAAA,IACxB;AAAA,EACF;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/providers/anthropic.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';\n\n/**\n * Anthropic provider adapter.\n * Produces request bodies compatible with the Anthropic Messages API.\n */\nexport const anthropicAdapter: ProviderAdapter = {\n name: 'anthropic',\n\n validate(asset: ResolvedPromptAsset): ValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n if (!asset.model) {\n errors.push('Anthropic adapter requires a model to be specified.');\n }\n\n if (asset.sampling?.frequency_penalty !== undefined) {\n warnings.push('Anthropic does not support frequency_penalty. It will be ignored.');\n }\n if (asset.sampling?.presence_penalty !== undefined) {\n warnings.push('Anthropic does not support presence_penalty. It will be ignored.');\n }\n if (asset.reasoning?.effort !== undefined) {\n warnings.push('Anthropic uses budget_tokens for thinking, not effort. effort will be mapped approximately.');\n }\n\n return { valid: errors.length === 0, errors, warnings };\n },\n\n render(asset: ResolvedPromptAsset, runtime: RuntimeRenderOptions): ProviderRequest {\n const sections = renderSections(asset, {\n variables: runtime.variables,\n strict: runtime.strict,\n });\n\n const messages: Array<Record<string, unknown>> = [];\n\n // History\n if (runtime.history) {\n for (const msg of runtime.history) {\n messages.push({ role: msg.role, content: msg.content });\n }\n }\n\n // User message (prompt template)\n if (sections.prompt_template) {\n messages.push({ role: 'user', content: sections.prompt_template });\n }\n\n const body: Record<string, unknown> = {\n model: asset.model,\n messages,\n };\n\n // System goes as top-level field in Anthropic\n if (sections.system_instructions) {\n body.system = sections.system_instructions;\n }\n\n // Sampling params\n if (asset.sampling?.temperature !== undefined) body.temperature = asset.sampling.temperature;\n if (asset.sampling?.top_p !== undefined) body.top_p = asset.sampling.top_p;\n if (asset.sampling?.stop !== undefined) body.stop_sequences = asset.sampling.stop;\n if (asset.sampling?.max_output_tokens !== undefined) {\n body.max_tokens = asset.sampling.max_output_tokens;\n } else {\n // Anthropic requires max_tokens\n body.max_tokens = 4096;\n }\n\n // Thinking/reasoning\n if (asset.reasoning?.budget_tokens) {\n body.thinking = {\n type: 'enabled',\n budget_tokens: asset.reasoning.budget_tokens,\n };\n }\n\n // Streaming\n if (asset.response?.stream !== undefined) {\n body.stream = asset.response.stream;\n }\n\n // Tools\n if (asset.tools && asset.tools.length > 0) {\n body.tools = asset.tools.map((tool) => {\n if (typeof tool === 'string') {\n const def = runtime.toolRegistry?.[tool];\n if (def) return def;\n return { name: tool };\n }\n return {\n name: tool.name,\n description: tool.description,\n input_schema: tool.input_schema ?? { type: 'object', properties: {} },\n };\n });\n }\n\n return {\n body,\n provider: 'anthropic',\n model: asset.model ?? 'unknown',\n };\n },\n};\n"],"mappings":";;;;;AAaO,IAAM,mBAAoC;AAAA,EAC/C,MAAM;AAAA,EAEN,SAAS,OAA8C;AACrD,UAAM,SAAmB,CAAC;AAC1B,UAAM,WAAqB,CAAC;AAE5B,QAAI,CAAC,MAAM,OAAO;AAChB,aAAO,KAAK,qDAAqD;AAAA,IACnE;AAEA,QAAI,MAAM,UAAU,sBAAsB,QAAW;AACnD,eAAS,KAAK,mEAAmE;AAAA,IACnF;AACA,QAAI,MAAM,UAAU,qBAAqB,QAAW;AAClD,eAAS,KAAK,kEAAkE;AAAA,IAClF;AACA,QAAI,MAAM,WAAW,WAAW,QAAW;AACzC,eAAS,KAAK,6FAA6F;AAAA,IAC7G;AAEA,WAAO,EAAE,OAAO,OAAO,WAAW,GAAG,QAAQ,SAAS;AAAA,EACxD;AAAA,EAEA,OAAO,OAA4B,SAAgD;AACjF,UAAM,WAAW,eAAe,OAAO;AAAA,MACrC,WAAW,QAAQ;AAAA,MACnB,QAAQ,QAAQ;AAAA,IAClB,CAAC;AAED,UAAM,WAA2C,CAAC;AAGlD,QAAI,QAAQ,SAAS;AACnB,iBAAW,OAAO,QAAQ,SAAS;AACjC,iBAAS,KAAK,EAAE,MAAM,IAAI,MAAM,SAAS,IAAI,QAAQ,CAAC;AAAA,MACxD;AAAA,IACF;AAGA,QAAI,SAAS,iBAAiB;AAC5B,eAAS,KAAK,EAAE,MAAM,QAAQ,SAAS,SAAS,gBAAgB,CAAC;AAAA,IACnE;AAEA,UAAM,OAAgC;AAAA,MACpC,OAAO,MAAM;AAAA,MACb;AAAA,IACF;AAGA,QAAI,SAAS,qBAAqB;AAChC,WAAK,SAAS,SAAS;AAAA,IACzB;AAGA,QAAI,MAAM,UAAU,gBAAgB,OAAW,MAAK,cAAc,MAAM,SAAS;AACjF,QAAI,MAAM,UAAU,UAAU,OAAW,MAAK,QAAQ,MAAM,SAAS;AACrE,QAAI,MAAM,UAAU,SAAS,OAAW,MAAK,iBAAiB,MAAM,SAAS;AAC7E,QAAI,MAAM,UAAU,sBAAsB,QAAW;AACnD,WAAK,aAAa,MAAM,SAAS;AAAA,IACnC,OAAO;AAEL,WAAK,aAAa;AAAA,IACpB;AAGA,QAAI,MAAM,WAAW,eAAe;AAClC,WAAK,WAAW;AAAA,QACd,MAAM;AAAA,QACN,eAAe,MAAM,UAAU;AAAA,MACjC;AAAA,IACF;AAGA,QAAI,MAAM,UAAU,WAAW,QAAW;AACxC,WAAK,SAAS,MAAM,SAAS;AAAA,IAC/B;AAGA,QAAI,MAAM,SAAS,MAAM,MAAM,SAAS,GAAG;AACzC,WAAK,QAAQ,MAAM,MAAM,IAAI,CAAC,SAAS;AACrC,YAAI,OAAO,SAAS,UAAU;AAC5B,gBAAM,MAAM,QAAQ,eAAe,IAAI;AACvC,cAAI,IAAK,QAAO;AAChB,iBAAO,EAAE,MAAM,KAAK;AAAA,QACtB;AACA,eAAO;AAAA,UACL,MAAM,KAAK;AAAA,UACX,aAAa,KAAK;AAAA,UAClB,cAAc,KAAK,gBAAgB,EAAE,MAAM,UAAU,YAAY,CAAC,EAAE;AAAA,QACtE;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,MACL;AAAA,MACA,UAAU;AAAA,MACV,OAAO,MAAM,SAAS;AAAA,IACxB;AAAA,EACF;AACF;","names":[]}
@@ -484,12 +484,6 @@ declare const PromptAssetSchema: z.ZodObject<{
484
484
  }, "strip", z.ZodTypeAny, {
485
485
  id: string;
486
486
  schema_version: number;
487
- source?: {
488
- file_path?: string | undefined;
489
- checksum?: string | undefined;
490
- } | undefined;
491
- provider?: "openai" | "anthropic" | "google" | "gemini" | "openrouter" | "any" | undefined;
492
- description?: string | undefined;
493
487
  model?: string | undefined;
494
488
  includes?: string[] | undefined;
495
489
  fallback_models?: string[] | undefined;
@@ -509,11 +503,17 @@ declare const PromptAssetSchema: z.ZodObject<{
509
503
  format?: "text" | "json" | "markdown" | undefined;
510
504
  stream?: boolean | undefined;
511
505
  } | undefined;
506
+ description?: string | undefined;
512
507
  tools?: (string | {
513
508
  name: string;
514
509
  description?: string | undefined;
515
510
  input_schema?: Record<string, unknown> | undefined;
516
511
  })[] | undefined;
512
+ source?: {
513
+ file_path?: string | undefined;
514
+ checksum?: string | undefined;
515
+ } | undefined;
516
+ provider?: "openai" | "anthropic" | "google" | "gemini" | "openrouter" | "any" | undefined;
517
517
  mcp?: {
518
518
  servers?: (string | {
519
519
  name: string;
@@ -592,13 +592,6 @@ declare const PromptAssetSchema: z.ZodObject<{
592
592
  } | undefined;
593
593
  }, {
594
594
  id: string;
595
- source?: {
596
- file_path?: string | undefined;
597
- checksum?: string | undefined;
598
- } | undefined;
599
- provider?: "openai" | "anthropic" | "google" | "gemini" | "openrouter" | "any" | undefined;
600
- schema_version?: number | undefined;
601
- description?: string | undefined;
602
595
  model?: string | undefined;
603
596
  includes?: string[] | undefined;
604
597
  fallback_models?: string[] | undefined;
@@ -618,11 +611,18 @@ declare const PromptAssetSchema: z.ZodObject<{
618
611
  format?: "text" | "json" | "markdown" | undefined;
619
612
  stream?: boolean | undefined;
620
613
  } | undefined;
614
+ description?: string | undefined;
621
615
  tools?: (string | {
622
616
  name: string;
623
617
  description?: string | undefined;
624
618
  input_schema?: Record<string, unknown> | undefined;
625
619
  })[] | undefined;
620
+ source?: {
621
+ file_path?: string | undefined;
622
+ checksum?: string | undefined;
623
+ } | undefined;
624
+ provider?: "openai" | "anthropic" | "google" | "gemini" | "openrouter" | "any" | undefined;
625
+ schema_version?: number | undefined;
626
626
  mcp?: {
627
627
  servers?: (string | {
628
628
  name: string;