promptopskit 0.3.0 → 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 (55) hide show
  1. package/README.md +23 -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-5BI5FP5L.js → chunk-LNZS3TIJ.js} +21 -18
  8. package/dist/chunk-LNZS3TIJ.js.map +1 -0
  9. package/dist/{chunk-VYVEVJC3.js → chunk-LRRSI4ON.js} +25 -22
  10. package/dist/chunk-LRRSI4ON.js.map +1 -0
  11. package/dist/chunk-Y2YYEGOY.js +86 -0
  12. package/dist/chunk-Y2YYEGOY.js.map +1 -0
  13. package/dist/cli/index.js +44 -20
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/index.cjs +80 -59
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.d.cts +7 -4
  18. package/dist/index.d.ts +7 -4
  19. package/dist/index.js +12 -39
  20. package/dist/index.js.map +1 -1
  21. package/dist/providers/anthropic.cjs +64 -19
  22. package/dist/providers/anthropic.cjs.map +1 -1
  23. package/dist/providers/anthropic.d.cts +2 -2
  24. package/dist/providers/anthropic.d.ts +2 -2
  25. package/dist/providers/anthropic.js +2 -2
  26. package/dist/providers/gemini.cjs +60 -15
  27. package/dist/providers/gemini.cjs.map +1 -1
  28. package/dist/providers/gemini.d.cts +2 -2
  29. package/dist/providers/gemini.d.ts +2 -2
  30. package/dist/providers/gemini.js +2 -2
  31. package/dist/providers/openai.cjs +64 -19
  32. package/dist/providers/openai.cjs.map +1 -1
  33. package/dist/providers/openai.d.cts +2 -2
  34. package/dist/providers/openai.d.ts +2 -2
  35. package/dist/providers/openai.js +2 -2
  36. package/dist/providers/openrouter.cjs +66 -21
  37. package/dist/providers/openrouter.cjs.map +1 -1
  38. package/dist/providers/openrouter.d.cts +2 -2
  39. package/dist/providers/openrouter.d.ts +2 -2
  40. package/dist/providers/openrouter.js +3 -3
  41. package/dist/testing.d.cts +1 -1
  42. package/dist/testing.d.ts +1 -1
  43. package/dist/{types-1zDDD-Ij.d.cts → types-BsYdPHTU.d.ts} +5 -2
  44. package/dist/{types-CQhlfAnR.d.ts → types-DC-jI6iV.d.cts} +5 -2
  45. package/dist/usagetap/index.d.cts +2 -2
  46. package/dist/usagetap/index.d.ts +2 -2
  47. package/package.json +1 -1
  48. package/dist/chunk-5BI5FP5L.js.map +0 -1
  49. package/dist/chunk-6KGBPHSY.js +0 -56
  50. package/dist/chunk-6KGBPHSY.js.map +0 -1
  51. package/dist/chunk-UYTUGV7Z.js +0 -83
  52. package/dist/chunk-UYTUGV7Z.js.map +0 -1
  53. package/dist/chunk-VYVEVJC3.js.map +0 -1
  54. package/dist/{schema-DIOA4OiO.d.cts → schema-Dq0jKest.d.cts} +42 -42
  55. package/dist/{schema-DIOA4OiO.d.ts → schema-Dq0jKest.d.ts} +42 -42
package/dist/index.cjs CHANGED
@@ -443,22 +443,36 @@ function renderSections(asset, options = {}) {
443
443
  return result;
444
444
  }
445
445
 
446
+ // src/providers/resolve-asset.ts
447
+ function resolveAssetForProvider(asset, runtime = {}) {
448
+ if (!runtime.environment && !runtime.tier && !runtime.runtime) {
449
+ return asset;
450
+ }
451
+ return applyOverrides(asset, {
452
+ environment: runtime.environment,
453
+ tier: runtime.tier,
454
+ runtime: runtime.runtime
455
+ });
456
+ }
457
+
446
458
  // src/providers/openai.ts
447
459
  var openaiAdapter = {
448
460
  name: "openai",
449
- validate(asset) {
461
+ validate(asset, runtime) {
462
+ const resolvedAsset = resolveAssetForProvider(asset, runtime);
450
463
  const errors = [];
451
464
  const warnings = [];
452
- if (!asset.model) {
465
+ if (!resolvedAsset.model) {
453
466
  errors.push("OpenAI adapter requires a model to be specified.");
454
467
  }
455
- if (asset.reasoning?.budget_tokens !== void 0) {
468
+ if (resolvedAsset.reasoning?.budget_tokens !== void 0) {
456
469
  warnings.push("OpenAI uses reasoning_effort, not budget_tokens. budget_tokens will be ignored.");
457
470
  }
458
471
  return { valid: errors.length === 0, errors, warnings };
459
472
  },
460
473
  render(asset, runtime) {
461
- const sections = renderSections(asset, {
474
+ const resolvedAsset = resolveAssetForProvider(asset, runtime);
475
+ const sections = renderSections(resolvedAsset, {
462
476
  variables: runtime.variables,
463
477
  strict: runtime.strict
464
478
  });
@@ -475,26 +489,26 @@ var openaiAdapter = {
475
489
  messages.push({ role: "user", content: sections.prompt_template });
476
490
  }
477
491
  const body = {
478
- model: asset.model,
492
+ model: resolvedAsset.model,
479
493
  messages
480
494
  };
481
- if (asset.sampling?.temperature !== void 0) body.temperature = asset.sampling.temperature;
482
- if (asset.sampling?.top_p !== void 0) body.top_p = asset.sampling.top_p;
483
- if (asset.sampling?.frequency_penalty !== void 0) body.frequency_penalty = asset.sampling.frequency_penalty;
484
- if (asset.sampling?.presence_penalty !== void 0) body.presence_penalty = asset.sampling.presence_penalty;
485
- if (asset.sampling?.stop !== void 0) body.stop = asset.sampling.stop;
486
- if (asset.sampling?.max_output_tokens !== void 0) body.max_tokens = asset.sampling.max_output_tokens;
487
- if (asset.reasoning?.effort) {
488
- body.reasoning_effort = asset.reasoning.effort;
489
- }
490
- if (asset.response?.format === "json") {
495
+ if (resolvedAsset.sampling?.temperature !== void 0) body.temperature = resolvedAsset.sampling.temperature;
496
+ if (resolvedAsset.sampling?.top_p !== void 0) body.top_p = resolvedAsset.sampling.top_p;
497
+ if (resolvedAsset.sampling?.frequency_penalty !== void 0) body.frequency_penalty = resolvedAsset.sampling.frequency_penalty;
498
+ if (resolvedAsset.sampling?.presence_penalty !== void 0) body.presence_penalty = resolvedAsset.sampling.presence_penalty;
499
+ if (resolvedAsset.sampling?.stop !== void 0) body.stop = resolvedAsset.sampling.stop;
500
+ if (resolvedAsset.sampling?.max_output_tokens !== void 0) body.max_tokens = resolvedAsset.sampling.max_output_tokens;
501
+ if (resolvedAsset.reasoning?.effort) {
502
+ body.reasoning_effort = resolvedAsset.reasoning.effort;
503
+ }
504
+ if (resolvedAsset.response?.format === "json") {
491
505
  body.response_format = { type: "json_object" };
492
506
  }
493
- if (asset.response?.stream !== void 0) {
494
- body.stream = asset.response.stream;
507
+ if (resolvedAsset.response?.stream !== void 0) {
508
+ body.stream = resolvedAsset.response.stream;
495
509
  }
496
- if (asset.tools && asset.tools.length > 0) {
497
- body.tools = asset.tools.map((tool) => {
510
+ if (resolvedAsset.tools && resolvedAsset.tools.length > 0) {
511
+ body.tools = resolvedAsset.tools.map((tool) => {
498
512
  if (typeof tool === "string") {
499
513
  const def = runtime.toolRegistry?.[tool];
500
514
  if (def) return def;
@@ -513,7 +527,7 @@ var openaiAdapter = {
513
527
  return {
514
528
  body,
515
529
  provider: "openai",
516
- model: asset.model ?? "unknown"
530
+ model: resolvedAsset.model ?? "unknown"
517
531
  };
518
532
  }
519
533
  };
@@ -521,25 +535,27 @@ var openaiAdapter = {
521
535
  // src/providers/anthropic.ts
522
536
  var anthropicAdapter = {
523
537
  name: "anthropic",
524
- validate(asset) {
538
+ validate(asset, runtime) {
539
+ const resolvedAsset = resolveAssetForProvider(asset, runtime);
525
540
  const errors = [];
526
541
  const warnings = [];
527
- if (!asset.model) {
542
+ if (!resolvedAsset.model) {
528
543
  errors.push("Anthropic adapter requires a model to be specified.");
529
544
  }
530
- if (asset.sampling?.frequency_penalty !== void 0) {
545
+ if (resolvedAsset.sampling?.frequency_penalty !== void 0) {
531
546
  warnings.push("Anthropic does not support frequency_penalty. It will be ignored.");
532
547
  }
533
- if (asset.sampling?.presence_penalty !== void 0) {
548
+ if (resolvedAsset.sampling?.presence_penalty !== void 0) {
534
549
  warnings.push("Anthropic does not support presence_penalty. It will be ignored.");
535
550
  }
536
- if (asset.reasoning?.effort !== void 0) {
551
+ if (resolvedAsset.reasoning?.effort !== void 0) {
537
552
  warnings.push("Anthropic uses budget_tokens for thinking, not effort. effort will be mapped approximately.");
538
553
  }
539
554
  return { valid: errors.length === 0, errors, warnings };
540
555
  },
541
556
  render(asset, runtime) {
542
- const sections = renderSections(asset, {
557
+ const resolvedAsset = resolveAssetForProvider(asset, runtime);
558
+ const sections = renderSections(resolvedAsset, {
543
559
  variables: runtime.variables,
544
560
  strict: runtime.strict
545
561
  });
@@ -553,31 +569,31 @@ var anthropicAdapter = {
553
569
  messages.push({ role: "user", content: sections.prompt_template });
554
570
  }
555
571
  const body = {
556
- model: asset.model,
572
+ model: resolvedAsset.model,
557
573
  messages
558
574
  };
559
575
  if (sections.system_instructions) {
560
576
  body.system = sections.system_instructions;
561
577
  }
562
- if (asset.sampling?.temperature !== void 0) body.temperature = asset.sampling.temperature;
563
- if (asset.sampling?.top_p !== void 0) body.top_p = asset.sampling.top_p;
564
- if (asset.sampling?.stop !== void 0) body.stop_sequences = asset.sampling.stop;
565
- if (asset.sampling?.max_output_tokens !== void 0) {
566
- body.max_tokens = asset.sampling.max_output_tokens;
578
+ if (resolvedAsset.sampling?.temperature !== void 0) body.temperature = resolvedAsset.sampling.temperature;
579
+ if (resolvedAsset.sampling?.top_p !== void 0) body.top_p = resolvedAsset.sampling.top_p;
580
+ if (resolvedAsset.sampling?.stop !== void 0) body.stop_sequences = resolvedAsset.sampling.stop;
581
+ if (resolvedAsset.sampling?.max_output_tokens !== void 0) {
582
+ body.max_tokens = resolvedAsset.sampling.max_output_tokens;
567
583
  } else {
568
584
  body.max_tokens = 4096;
569
585
  }
570
- if (asset.reasoning?.budget_tokens) {
586
+ if (resolvedAsset.reasoning?.budget_tokens) {
571
587
  body.thinking = {
572
588
  type: "enabled",
573
- budget_tokens: asset.reasoning.budget_tokens
589
+ budget_tokens: resolvedAsset.reasoning.budget_tokens
574
590
  };
575
591
  }
576
- if (asset.response?.stream !== void 0) {
577
- body.stream = asset.response.stream;
592
+ if (resolvedAsset.response?.stream !== void 0) {
593
+ body.stream = resolvedAsset.response.stream;
578
594
  }
579
- if (asset.tools && asset.tools.length > 0) {
580
- body.tools = asset.tools.map((tool) => {
595
+ if (resolvedAsset.tools && resolvedAsset.tools.length > 0) {
596
+ body.tools = resolvedAsset.tools.map((tool) => {
581
597
  if (typeof tool === "string") {
582
598
  const def = runtime.toolRegistry?.[tool];
583
599
  if (def) return def;
@@ -593,7 +609,7 @@ var anthropicAdapter = {
593
609
  return {
594
610
  body,
595
611
  provider: "anthropic",
596
- model: asset.model ?? "unknown"
612
+ model: resolvedAsset.model ?? "unknown"
597
613
  };
598
614
  }
599
615
  };
@@ -601,22 +617,24 @@ var anthropicAdapter = {
601
617
  // src/providers/gemini.ts
602
618
  var geminiAdapter = {
603
619
  name: "gemini",
604
- validate(asset) {
620
+ validate(asset, runtime) {
621
+ const resolvedAsset = resolveAssetForProvider(asset, runtime);
605
622
  const errors = [];
606
623
  const warnings = [];
607
- if (!asset.model) {
624
+ if (!resolvedAsset.model) {
608
625
  errors.push("Gemini adapter requires a model to be specified.");
609
626
  }
610
- if (asset.sampling?.frequency_penalty !== void 0) {
627
+ if (resolvedAsset.sampling?.frequency_penalty !== void 0) {
611
628
  warnings.push("Gemini does not support frequency_penalty. It will be ignored.");
612
629
  }
613
- if (asset.sampling?.presence_penalty !== void 0) {
630
+ if (resolvedAsset.sampling?.presence_penalty !== void 0) {
614
631
  warnings.push("Gemini does not support presence_penalty. It will be ignored.");
615
632
  }
616
633
  return { valid: errors.length === 0, errors, warnings };
617
634
  },
618
635
  render(asset, runtime) {
619
- const sections = renderSections(asset, {
636
+ const resolvedAsset = resolveAssetForProvider(asset, runtime);
637
+ const sections = renderSections(resolvedAsset, {
620
638
  variables: runtime.variables,
621
639
  strict: runtime.strict
622
640
  });
@@ -644,23 +662,23 @@ var geminiAdapter = {
644
662
  };
645
663
  }
646
664
  const generationConfig = {};
647
- if (asset.sampling?.temperature !== void 0) generationConfig.temperature = asset.sampling.temperature;
648
- if (asset.sampling?.top_p !== void 0) generationConfig.topP = asset.sampling.top_p;
649
- if (asset.sampling?.max_output_tokens !== void 0) generationConfig.maxOutputTokens = asset.sampling.max_output_tokens;
650
- if (asset.sampling?.stop !== void 0) generationConfig.stopSequences = asset.sampling.stop;
651
- if (asset.response?.format === "json") {
665
+ if (resolvedAsset.sampling?.temperature !== void 0) generationConfig.temperature = resolvedAsset.sampling.temperature;
666
+ if (resolvedAsset.sampling?.top_p !== void 0) generationConfig.topP = resolvedAsset.sampling.top_p;
667
+ if (resolvedAsset.sampling?.max_output_tokens !== void 0) generationConfig.maxOutputTokens = resolvedAsset.sampling.max_output_tokens;
668
+ if (resolvedAsset.sampling?.stop !== void 0) generationConfig.stopSequences = resolvedAsset.sampling.stop;
669
+ if (resolvedAsset.response?.format === "json") {
652
670
  generationConfig.responseMimeType = "application/json";
653
671
  }
654
- if (asset.reasoning?.effort) {
672
+ if (resolvedAsset.reasoning?.effort) {
655
673
  body.thinkingConfig = {
656
- thinkingBudget: asset.reasoning.effort === "high" ? 8192 : asset.reasoning.effort === "medium" ? 4096 : 1024
674
+ thinkingBudget: resolvedAsset.reasoning.effort === "high" ? 8192 : resolvedAsset.reasoning.effort === "medium" ? 4096 : 1024
657
675
  };
658
676
  }
659
677
  if (Object.keys(generationConfig).length > 0) {
660
678
  body.generationConfig = generationConfig;
661
679
  }
662
- if (asset.tools && asset.tools.length > 0) {
663
- const functionDeclarations = asset.tools.map((tool) => {
680
+ if (resolvedAsset.tools && resolvedAsset.tools.length > 0) {
681
+ const functionDeclarations = resolvedAsset.tools.map((tool) => {
664
682
  if (typeof tool === "string") {
665
683
  const def = runtime.toolRegistry?.[tool];
666
684
  if (def) return def;
@@ -677,7 +695,7 @@ var geminiAdapter = {
677
695
  return {
678
696
  body,
679
697
  provider: "gemini",
680
- model: asset.model ?? "unknown"
698
+ model: resolvedAsset.model ?? "unknown"
681
699
  };
682
700
  }
683
701
  };
@@ -685,8 +703,8 @@ var geminiAdapter = {
685
703
  // src/providers/openrouter.ts
686
704
  var openrouterAdapter = {
687
705
  name: "openrouter",
688
- validate(asset) {
689
- return openaiAdapter.validate(asset);
706
+ validate(asset, runtime) {
707
+ return openaiAdapter.validate(asset, runtime);
690
708
  },
691
709
  render(asset, runtime) {
692
710
  const result = openaiAdapter.render(asset, runtime);
@@ -1417,7 +1435,8 @@ ${paths.map((p) => ` - ${p}`).join("\n")}`
1417
1435
  }
1418
1436
  asset = applyOverrides(asset, {
1419
1437
  environment: options.environment,
1420
- tier: options.tier
1438
+ tier: options.tier,
1439
+ runtime: options.runtime
1421
1440
  });
1422
1441
  return asset;
1423
1442
  }
@@ -1430,13 +1449,15 @@ ${paths.map((p) => ` - ${p}`).join("\n")}`
1430
1449
  const { asset } = parsePrompt(options.source);
1431
1450
  const overridden = applyOverrides(asset, {
1432
1451
  environment: options.environment,
1433
- tier: options.tier
1452
+ tier: options.tier,
1453
+ runtime: options.runtime
1434
1454
  });
1435
1455
  resolved = overridden;
1436
1456
  } else if (options.path) {
1437
1457
  resolved = await this.resolvePrompt(options.path, {
1438
1458
  environment: options.environment,
1439
- tier: options.tier
1459
+ tier: options.tier,
1460
+ runtime: options.runtime
1440
1461
  });
1441
1462
  } else {
1442
1463
  throw new Error('Either "path" or "source" must be provided to renderPrompt()');