promptopskit 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +9 -7
  2. package/SKILL.md +16 -10
  3. package/dist/{chunk-QK3WKE3K.js → chunk-35NN5F6O.js} +2 -2
  4. package/dist/{chunk-D75HKF64.js → chunk-3G3EAV7H.js} +2 -2
  5. package/dist/{chunk-LNGHGGJN.js → chunk-6NOUETAC.js} +2 -2
  6. package/dist/{chunk-KN7H4JRK.js → chunk-F552OBUV.js} +619 -502
  7. package/dist/chunk-F552OBUV.js.map +1 -0
  8. package/dist/{chunk-6BOUQVSX.js → chunk-FICB2ZSK.js} +3 -3
  9. package/dist/{chunk-6VLKZCNS.js → chunk-OWMP5NMV.js} +2 -2
  10. package/dist/{chunk-IN4KT5EU.js → chunk-R65RAHAG.js} +3 -3
  11. package/dist/{chunk-K6ZU3CGV.js → chunk-ULVY473P.js} +306 -17
  12. package/dist/chunk-ULVY473P.js.map +1 -0
  13. package/dist/cli/index.js +446 -103
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/index.cjs +1223 -772
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.d.cts +9 -5
  18. package/dist/index.d.ts +9 -5
  19. package/dist/index.js +67 -18
  20. package/dist/index.js.map +1 -1
  21. package/dist/providers/anthropic.cjs +902 -502
  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 +3 -3
  26. package/dist/providers/gemini.cjs +902 -502
  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 +3 -3
  31. package/dist/providers/llmasaservice.cjs +901 -501
  32. package/dist/providers/llmasaservice.cjs.map +1 -1
  33. package/dist/providers/llmasaservice.d.cts +2 -2
  34. package/dist/providers/llmasaservice.d.ts +2 -2
  35. package/dist/providers/llmasaservice.js +4 -4
  36. package/dist/providers/openai-responses.cjs +902 -502
  37. package/dist/providers/openai-responses.cjs.map +1 -1
  38. package/dist/providers/openai-responses.d.cts +2 -2
  39. package/dist/providers/openai-responses.d.ts +2 -2
  40. package/dist/providers/openai-responses.js +3 -3
  41. package/dist/providers/openai.cjs +902 -502
  42. package/dist/providers/openai.cjs.map +1 -1
  43. package/dist/providers/openai.d.cts +2 -2
  44. package/dist/providers/openai.d.ts +2 -2
  45. package/dist/providers/openai.js +3 -3
  46. package/dist/providers/openrouter.cjs +902 -502
  47. package/dist/providers/openrouter.cjs.map +1 -1
  48. package/dist/providers/openrouter.d.cts +2 -2
  49. package/dist/providers/openrouter.d.ts +2 -2
  50. package/dist/providers/openrouter.js +4 -4
  51. package/dist/{schema-D-RI4w-k.d.cts → schema-DBcSns_b.d.cts} +732 -206
  52. package/dist/{schema-D-RI4w-k.d.ts → schema-DBcSns_b.d.ts} +732 -206
  53. package/dist/testing.cjs +54 -5
  54. package/dist/testing.cjs.map +1 -1
  55. package/dist/testing.d.cts +1 -1
  56. package/dist/testing.d.ts +1 -1
  57. package/dist/testing.js +1 -1
  58. package/dist/{types-B3dxBGu6.d.ts → types-8T2D5KB5.d.cts} +20 -2
  59. package/dist/{types-DbTAjlTN.d.cts → types-BlLXT5Qb.d.ts} +20 -2
  60. package/dist/usagetap/index.d.cts +2 -2
  61. package/dist/usagetap/index.d.ts +2 -2
  62. package/package.json +9 -2
  63. package/dist/chunk-K6ZU3CGV.js.map +0 -1
  64. package/dist/chunk-KN7H4JRK.js.map +0 -1
  65. /package/dist/{chunk-QK3WKE3K.js.map → chunk-35NN5F6O.js.map} +0 -0
  66. /package/dist/{chunk-D75HKF64.js.map → chunk-3G3EAV7H.js.map} +0 -0
  67. /package/dist/{chunk-LNGHGGJN.js.map → chunk-6NOUETAC.js.map} +0 -0
  68. /package/dist/{chunk-6BOUQVSX.js.map → chunk-FICB2ZSK.js.map} +0 -0
  69. /package/dist/{chunk-6VLKZCNS.js.map → chunk-OWMP5NMV.js.map} +0 -0
  70. /package/dist/{chunk-IN4KT5EU.js.map → chunk-R65RAHAG.js.map} +0 -0
package/README.md CHANGED
@@ -59,7 +59,7 @@ This creates:
59
59
 
60
60
  ```
61
61
  prompts/
62
- ├── defaults.md # Folder-level defaults (provider, model, metadata, system instructions)
62
+ ├── defaults.md # Folder-level defaults (provider, model, options, metadata, system instructions)
63
63
  ├── hello.md # Sample prompt with variables
64
64
  ├── hello.test.yaml # Test sidecar with sample inputs and hardcoded responses
65
65
  └── shared/
@@ -146,7 +146,7 @@ Supported values for `warnings.contextSize` are `auto`, `off`, `result-only`, `c
146
146
  - **Prompts as Markdown** — YAML front matter for settings, H1 headings for sections (`# System instructions`, `# Prompt template`, `# Notes`)
147
147
  - **Variable interpolation** — `{{ variable }}` syntax with strict and permissive modes
148
148
  - **Composition** — `includes` to share system instructions across prompts, with circular detection
149
- - **Folder defaults** — `defaults.md` inheritance for shared provider, model, metadata, and system instructions
149
+ - **Folder defaults** — `defaults.md` inheritance for shared provider, model, options, metadata, and system instructions
150
150
  - **Overrides** — Environment and tier-based overrides (base → env → tier → runtime)
151
151
  - **6 provider adapters** — OpenAI (Chat), OpenAI (Responses), Anthropic, Gemini, OpenRouter, LLMAsAService
152
152
  - **Provider-aware input caching controls** — optional `cache` front matter maps to OpenAI prompt cache hints, Anthropic `cache_control`, and Gemini `cachedContent`
@@ -261,7 +261,7 @@ In browser or client-side code, keep provider credentials on the server. Use the
261
261
 
262
262
  ### Provider-specific fields and raw passthrough
263
263
 
264
- Use normalized fields first (`sampling`, `response`, `cache`, `tools`) so prompts stay portable. `response.schema` is the neutral JSON Schema path; adapters emit it as OpenAI/OpenRouter/LLMAsAService `response_format`, OpenAI Responses `text.format`, Anthropic `output_config.format`, and Gemini `generationConfig.responseJsonSchema`.
264
+ Use normalized fields first (`sampling`, `response`, `cache`, `tools`) so prompts stay portable. `response.schema` is the neutral JSON Schema path; adapters emit it as OpenAI/OpenRouter/LLMAsAService `response_format`, OpenAI Responses `text.format`, Anthropic `output_config.format`, and Gemini `generationConfig.responseJsonSchema`. You can also provide `response.schema_ref` to load schema from a prompt-relative `.json` file or `.js/.mjs/.cjs` zod module (mutually exclusive with `response.schema`).
265
265
 
266
266
  Use `provider_options` when PromptOpsKit has a known provider-specific mapping, such as Anthropic `top_k`, Gemini's native `response_schema`, OpenRouter routing fields, or LLMAsAService gateway routing/customer metadata.
267
267
 
@@ -496,13 +496,15 @@ Handle support requests carefully.
496
496
 
497
497
  Define a `defaults.md` file in `prompts/` (and optional subfolders) to provide inherited defaults for prompts:
498
498
 
499
- - Shared `provider` and `model` in front matter
499
+ - Shared `provider`, `model`, `fallback_models`, `reasoning`, `sampling`, `response`, `cache`, `provider_options`, `raw`, `tools`, `mcp`, `context`, `includes`, `environments`, and `tiers` in front matter
500
500
  - Shared `metadata` defaults in front matter
501
501
  - Shared `# System instructions` in body
502
502
  - Nearest subfolder `defaults.md` overrides parent defaults
503
503
  - Prompt-local values always win over defaults
504
504
  - Included files (`includes`) are not affected by folder defaults
505
505
 
506
+ Scalars and arrays are replaced by nearer values. Object blocks are shallow-merged, including provider sub-blocks such as `provider_options.llmasaservice` and `cache.openai`.
507
+
506
508
  > `promptopskit init` scaffolds a starter `defaults.md` in the prompts root.
507
509
 
508
510
  ```text
@@ -630,7 +632,7 @@ Renders a prompt for a specific provider. Returns `{ resolved, request?, returnM
630
632
  | `tier` | `string` | Tier override name |
631
633
  | `history` | `Array<{ role, content }>` | Conversation history. If the prompt declares `context.history.max_items`, older turns are compacted into one preserved history item before provider rendering. |
632
634
  | `toolRegistry` | `Record<string, unknown>` | Tool definitions for resolving string tool references |
633
- | `strict` | `boolean` | Fail on missing variables |
635
+ | `strict` | `boolean` | Fail on missing variables except object-form inputs marked `optional: true` |
634
636
  | `openaiResponses` | `object` | Optional Responses API extras (`previous_response_id`, `conversation`, `instructions`, `parallel_tool_calls`, `max_tool_calls`, `store`, `metadata`, `include`, `background`) |
635
637
 
636
638
  ### `kit.loadPrompt(path)` / `kit.resolvePrompt(path, options)` / `kit.validatePrompt(path)`
@@ -656,13 +658,13 @@ Prompt files use YAML front matter with these fields:
656
658
  | `fallback_models` | `string[]` | Fallback model list |
657
659
  | `reasoning` | `object` | `{ effort, budget_tokens }` |
658
660
  | `sampling` | `object` | `{ temperature, top_p, frequency_penalty, presence_penalty, stop, max_output_tokens }` |
659
- | `response` | `object` | `{ format, stream, schema, schema_name, schema_description, schema_strict }` |
661
+ | `response` | `object` | `{ format, stream, schema, schema_ref, schema_name, schema_description, schema_strict }` |
660
662
  | `cache` | `object` | Provider-specific cache controls (`openai`, `anthropic`, `gemini`/`google`) |
661
663
  | `tools` | `array` | Tool references (string names or inline definitions) |
662
664
  | `provider_options` | `object` | Provider-specific non-portable options (`anthropic`, `gemini`, `openrouter`, `llmasaservice`) |
663
665
  | `raw` | `object` | Provider-scoped request-body passthrough (`openai`, `openai-responses`, `anthropic`, `gemini`/`google`, `openrouter`, `llmasaservice`) |
664
666
  | `mcp` | `object` | MCP server references |
665
- | `context` | `object` | `{ inputs, history }` — declare expected variables, with optional per-input `max_size`, `trim`, structured or literal `allow_regex`/`deny_regex`, built-in `non_empty` / `reject_secrets` validators, and `history.max_items` compaction |
667
+ | `context` | `object` | `{ inputs, history }` — declare expected variables, with optional per-input `optional`, `warnings`, `max_size`, `trim`, structured or literal `allow_regex`/`deny_regex`, built-in `non_empty` / `reject_secrets` validators, and `history.max_items` compaction |
666
668
  | `includes` | `string[]` | Paths to included prompt files |
667
669
  | `environments` | `object` | Named environment overrides |
668
670
  | `tiers` | `object` | Named tier overrides |
package/SKILL.md CHANGED
@@ -387,7 +387,7 @@ the fields required by that specific file:
387
387
  | `provider_options` | object | no | Provider-specific advanced options (`anthropic`, `gemini`, `openrouter`, `llmasaservice`) |
388
388
  | `raw` | object | no | Provider-scoped request-body passthrough for unmodeled vendor fields |
389
389
  | `mcp` | object | no | `{ servers: [string | { name, config }] }` |
390
- | `context.inputs` | `Array<string | { name, max_size?, trim?, allow_regex?, deny_regex?, non_empty?, reject_secrets? }>` | no | Declared variable names used in templates, with optional size budgets and runtime hardening controls |
390
+ | `context.inputs` | `Array<string | { name, optional?, warnings?, max_size?, trim?, allow_regex?, deny_regex?, non_empty?, reject_secrets? }>` | no | Declared variable names used in templates, with optionality, warning controls, size budgets, and runtime hardening controls |
391
391
  | `context.history` | object | no | `{ max_items: number }`; caps rendered history by compacting older turns into one preserved message |
392
392
  | `includes` | string[] | no | Relative paths to other prompt files to include |
393
393
  | `environments` | object | no | Per-environment overrides (see Overrides) |
@@ -421,6 +421,8 @@ Rules:
421
421
  - Before finishing a new prompt file, scan the body for every `{{ variable }}` and
422
422
  ensure each exact variable name appears in `context.inputs`
423
423
  - Use object-form inputs with `max_size` when a variable is likely to grow large and should trigger early warnings
424
+ - Use `optional: true` when a variable may be absent; strict rendering will not throw for that missing variable
425
+ - Use `warnings: false` sparingly for intentional exceptions that should not emit input-scoped validation or size warnings
424
426
  - Use `trim` to enforce byte budgets before interpolation when `max_size` is set
425
427
  - Use `allow_regex` for allowlist checks and `deny_regex` for blocklist checks on risky inputs
426
428
  - Prefer unquoted `/pattern/i` literals for regex validators so backslash escapes such as `\s` and `\b` stay copyable from regex tools
@@ -442,7 +444,7 @@ context:
442
444
  max_size: 4096
443
445
  ```
444
446
 
445
- If a rendered value exceeds `max_size`, `renderPrompt()` emits a non-blocking `POK030` warning.
447
+ If a rendered value exceeds `max_size`, `renderPrompt()` emits a non-blocking `POK030` warning unless the input sets `warnings: false`.
446
448
  At render time, callers can also pass `onContextOverflow` to transform oversized values before warnings/rendering.
447
449
 
448
450
  If a validator declares `return_message`, `renderPrompt()` returns that message in a structured result and omits the provider request instead of throwing for that validation failure. Invalid regex definitions still fail during `validate` and `compile` as `POK013` prompt-authoring errors.
@@ -522,28 +524,32 @@ folder:
522
524
 
523
525
  ```text
524
526
  prompts/
525
- ├── defaults.md # global provider, model, metadata + system instructions
527
+ ├── defaults.md # global provider, model, options, metadata + system instructions
526
528
  └── support/
527
529
  ├── defaults.md # overrides for support/*
528
530
  └── reply.md # inherits from support/defaults.md
529
531
  ```
530
532
 
531
533
  Supported default fields:
532
- - `provider` (front matter) — default provider for the folder
533
- - `model` (front matter) — default model for the folder
534
- - `cache` (front matter) — default provider-specific cache hints
534
+ - `provider`, `model`, `fallback_models` (front matter) — default routing
535
+ - `reasoning`, `sampling`, `response` (front matter) — default model behavior
536
+ - `cache`, `provider_options`, `raw` (front matter) — default provider-specific options
537
+ - `tools`, `mcp`, `context`, `includes` (front matter) — default bindings and input/include configuration
538
+ - `environments`, `tiers` (front matter) — default override maps
535
539
  - `metadata` (front matter) — merged with prompt-local metadata
536
540
  - `# System instructions` (body section) — used when the prompt has none
537
541
 
538
542
  This lets you configure app-wide settings like `provider` and `model`
539
543
  in a single root `defaults.md`, so individual prompts only declare what's unique to them.
540
544
 
541
- Important: `defaults.md` does not declare or infer `context.inputs` for a prompt.
542
- If a prompt body uses placeholders, the prompt file itself must declare them.
545
+ Important: use shared `context.inputs` in `defaults.md` only when every prompt
546
+ under that folder uses the same placeholders. Prompt-local `context.inputs`
547
+ replace the inherited array.
543
548
 
544
549
  Rules:
545
550
  - Nearest subfolder `defaults.md` overrides parent defaults
546
551
  - Prompt-local values always take precedence over defaults
552
+ - Inherited `includes` are authored relative to the `defaults.md` file that declares them
547
553
  - `defaults.md` files are skipped during compilation and validation
548
554
  - `loadPromptFile` defaults the search boundary to the file's own directory;
549
555
  pass `defaultsRoot` to enable ancestor traversal
@@ -889,8 +895,8 @@ Hello {{ name }}
889
895
 
890
896
  1. **One prompt per file** — each `.md` file is a single prompt asset
891
897
  2. **Always set `id` and `schema_version: 1`** unless a surrounding tool explicitly generates those fields
892
- 3. **Declare every placeholder** in `context.inputs`; do not rely on defaults or includes to infer variables
893
- 4. **Use `defaults.md` for shared provider, model, metadata, and fallback system instructions**
898
+ 3. **Declare every placeholder** in `context.inputs`; use `defaults.md` only for input declarations that apply to every prompt under that folder
899
+ 4. **Use `defaults.md` for shared provider, model, provider options, metadata, and fallback system instructions**
894
900
  5. **Use includes for reusable system behavior**, not for user-specific prompt bodies
895
901
  6. **Prefer `createPromptOpsKit().renderPrompt()` for server-side app code** when prompts live as source files
896
902
  7. **Prefer direct adapters for compiled assets or provider-specific integration points**
@@ -4,7 +4,7 @@ import {
4
4
  renderSections,
5
5
  resolveAssetForProvider,
6
6
  withPromptInputSupport
7
- } from "./chunk-KN7H4JRK.js";
7
+ } from "./chunk-F552OBUV.js";
8
8
 
9
9
  // src/providers/gemini.ts
10
10
  var geminiAdapter = withPromptInputSupport({
@@ -120,4 +120,4 @@ var geminiAdapter = withPromptInputSupport({
120
120
  export {
121
121
  geminiAdapter
122
122
  };
123
- //# sourceMappingURL=chunk-QK3WKE3K.js.map
123
+ //# sourceMappingURL=chunk-35NN5F6O.js.map
@@ -4,7 +4,7 @@ import {
4
4
  renderSections,
5
5
  resolveAssetForProvider,
6
6
  withPromptInputSupport
7
- } from "./chunk-KN7H4JRK.js";
7
+ } from "./chunk-F552OBUV.js";
8
8
 
9
9
  // src/providers/openai.ts
10
10
  var openaiAdapter = withPromptInputSupport({
@@ -107,4 +107,4 @@ var openaiAdapter = withPromptInputSupport({
107
107
  export {
108
108
  openaiAdapter
109
109
  };
110
- //# sourceMappingURL=chunk-D75HKF64.js.map
110
+ //# sourceMappingURL=chunk-3G3EAV7H.js.map
@@ -4,7 +4,7 @@ import {
4
4
  renderSections,
5
5
  resolveAssetForProvider,
6
6
  withPromptInputSupport
7
- } from "./chunk-KN7H4JRK.js";
7
+ } from "./chunk-F552OBUV.js";
8
8
 
9
9
  // src/providers/anthropic.ts
10
10
  var anthropicAdapter = withPromptInputSupport({
@@ -144,4 +144,4 @@ var anthropicAdapter = withPromptInputSupport({
144
144
  export {
145
145
  anthropicAdapter
146
146
  };
147
- //# sourceMappingURL=chunk-LNGHGGJN.js.map
147
+ //# sourceMappingURL=chunk-6NOUETAC.js.map