promptopskit 0.4.0 → 0.5.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 (82) hide show
  1. package/README.md +98 -57
  2. package/SKILL.md +360 -6
  3. package/dist/chunk-6BOUQVSX.js +130 -0
  4. package/dist/chunk-6BOUQVSX.js.map +1 -0
  5. package/dist/{chunk-F6UJ73Y6.js → chunk-6VLKZCNS.js} +6 -4
  6. package/dist/chunk-6VLKZCNS.js.map +1 -0
  7. package/dist/{chunk-HWEVRBKZ.js → chunk-AGTGIZMR.js} +6 -2
  8. package/dist/chunk-AGTGIZMR.js.map +1 -0
  9. package/dist/{chunk-L2V7LDKD.js → chunk-D75HKF64.js} +6 -4
  10. package/dist/chunk-D75HKF64.js.map +1 -0
  11. package/dist/{chunk-UPTCSWK3.js → chunk-IN4KT5EU.js} +4 -3
  12. package/dist/chunk-IN4KT5EU.js.map +1 -0
  13. package/dist/{chunk-JBLUPKY4.js → chunk-K6ZU3CGV.js} +54 -6
  14. package/dist/chunk-K6ZU3CGV.js.map +1 -0
  15. package/dist/{chunk-XNNDGDPI.js → chunk-KN7H4JRK.js} +61 -4
  16. package/dist/chunk-KN7H4JRK.js.map +1 -0
  17. package/dist/{chunk-HLNVKKMS.js → chunk-LNGHGGJN.js} +6 -4
  18. package/dist/chunk-LNGHGGJN.js.map +1 -0
  19. package/dist/{chunk-RY5DVTLV.js → chunk-QK3WKE3K.js} +6 -4
  20. package/dist/chunk-QK3WKE3K.js.map +1 -0
  21. package/dist/cli/index.js +114 -55
  22. package/dist/cli/index.js.map +1 -1
  23. package/dist/index.cjs +265 -22
  24. package/dist/index.cjs.map +1 -1
  25. package/dist/index.d.cts +9 -9
  26. package/dist/index.d.ts +9 -9
  27. package/dist/index.js +32 -10
  28. package/dist/index.js.map +1 -1
  29. package/dist/providers/anthropic.cjs +114 -9
  30. package/dist/providers/anthropic.cjs.map +1 -1
  31. package/dist/providers/anthropic.d.cts +2 -2
  32. package/dist/providers/anthropic.d.ts +2 -2
  33. package/dist/providers/anthropic.js +3 -3
  34. package/dist/providers/gemini.cjs +114 -9
  35. package/dist/providers/gemini.cjs.map +1 -1
  36. package/dist/providers/gemini.d.cts +2 -2
  37. package/dist/providers/gemini.d.ts +2 -2
  38. package/dist/providers/gemini.js +3 -3
  39. package/dist/providers/llmasaservice.cjs +1467 -0
  40. package/dist/providers/llmasaservice.cjs.map +1 -0
  41. package/dist/providers/llmasaservice.d.cts +28 -0
  42. package/dist/providers/llmasaservice.d.ts +28 -0
  43. package/dist/providers/llmasaservice.js +20 -0
  44. package/dist/providers/llmasaservice.js.map +1 -0
  45. package/dist/providers/openai-responses.cjs +114 -9
  46. package/dist/providers/openai-responses.cjs.map +1 -1
  47. package/dist/providers/openai-responses.d.cts +2 -2
  48. package/dist/providers/openai-responses.d.ts +2 -2
  49. package/dist/providers/openai-responses.js +3 -3
  50. package/dist/providers/openai.cjs +114 -9
  51. package/dist/providers/openai.cjs.map +1 -1
  52. package/dist/providers/openai.d.cts +2 -2
  53. package/dist/providers/openai.d.ts +2 -2
  54. package/dist/providers/openai.js +3 -3
  55. package/dist/providers/openrouter.cjs +115 -9
  56. package/dist/providers/openrouter.cjs.map +1 -1
  57. package/dist/providers/openrouter.d.cts +2 -2
  58. package/dist/providers/openrouter.d.ts +2 -2
  59. package/dist/providers/openrouter.js +4 -4
  60. package/dist/{schema-B9A1zLRk.d.cts → schema-D-RI4w-k.d.cts} +695 -183
  61. package/dist/{schema-B9A1zLRk.d.ts → schema-D-RI4w-k.d.ts} +695 -183
  62. package/dist/testing.cjs +21 -4
  63. package/dist/testing.cjs.map +1 -1
  64. package/dist/testing.d.cts +1 -1
  65. package/dist/testing.d.ts +1 -1
  66. package/dist/testing.js +1 -1
  67. package/dist/{types-DjGAwJxC.d.ts → types-B3dxBGu6.d.ts} +18 -6
  68. package/dist/{types-DpbzzZO2.d.cts → types-DbTAjlTN.d.cts} +18 -6
  69. package/dist/usagetap/index.cjs +6 -1
  70. package/dist/usagetap/index.cjs.map +1 -1
  71. package/dist/usagetap/index.d.cts +4 -3
  72. package/dist/usagetap/index.d.ts +4 -3
  73. package/dist/usagetap/index.js +3 -1
  74. package/package.json +11 -1
  75. package/dist/chunk-F6UJ73Y6.js.map +0 -1
  76. package/dist/chunk-HLNVKKMS.js.map +0 -1
  77. package/dist/chunk-HWEVRBKZ.js.map +0 -1
  78. package/dist/chunk-JBLUPKY4.js.map +0 -1
  79. package/dist/chunk-L2V7LDKD.js.map +0 -1
  80. package/dist/chunk-RY5DVTLV.js.map +0 -1
  81. package/dist/chunk-UPTCSWK3.js.map +0 -1
  82. package/dist/chunk-XNNDGDPI.js.map +0 -1
@@ -123,7 +123,8 @@ function mergeOverride(base, override) {
123
123
  anthropic: mergeRecordBlock(result.raw?.anthropic, override.raw.anthropic),
124
124
  gemini: mergeRecordBlock(result.raw?.gemini, override.raw.gemini),
125
125
  google: mergeRecordBlock(result.raw?.google, override.raw.google),
126
- openrouter: mergeRecordBlock(result.raw?.openrouter, override.raw.openrouter)
126
+ openrouter: mergeRecordBlock(result.raw?.openrouter, override.raw.openrouter),
127
+ llmasaservice: mergeRecordBlock(result.raw?.llmasaservice, override.raw.llmasaservice)
127
128
  };
128
129
  }
129
130
  if (override.provider_options !== void 0) {
@@ -141,6 +142,10 @@ function mergeOverride(base, override) {
141
142
  openrouter: {
142
143
  ...result.provider_options?.openrouter,
143
144
  ...override.provider_options.openrouter
145
+ },
146
+ llmasaservice: {
147
+ ...result.provider_options?.llmasaservice,
148
+ ...override.provider_options.llmasaservice
144
149
  }
145
150
  };
146
151
  }
@@ -276,10 +281,26 @@ var OpenRouterProviderOptionsSchema = import_zod.z.object({
276
281
  plugins: import_zod.z.array(import_zod.z.record(import_zod.z.unknown())).optional(),
277
282
  models: import_zod.z.array(import_zod.z.string()).optional()
278
283
  });
284
+ var LLMAsAServiceCustomerSchema = import_zod.z.object({
285
+ customer_id: import_zod.z.string(),
286
+ customer_name: import_zod.z.string().optional(),
287
+ customer_user_id: import_zod.z.string().optional(),
288
+ customer_user_name: import_zod.z.string().optional(),
289
+ customer_user_email: import_zod.z.string().optional()
290
+ });
291
+ var LLMAsAServiceProviderOptionsSchema = import_zod.z.object({
292
+ base_url: import_zod.z.string().url().optional(),
293
+ project_id: import_zod.z.string().optional(),
294
+ customer: LLMAsAServiceCustomerSchema.optional(),
295
+ conversationId: import_zod.z.string().optional(),
296
+ conversationTitle: import_zod.z.string().optional(),
297
+ projectId: import_zod.z.string().optional()
298
+ });
279
299
  var ProviderOptionsSchema = import_zod.z.object({
280
300
  anthropic: AnthropicProviderOptionsSchema.optional(),
281
301
  gemini: GeminiProviderOptionsSchema.optional(),
282
- openrouter: OpenRouterProviderOptionsSchema.optional()
302
+ openrouter: OpenRouterProviderOptionsSchema.optional(),
303
+ llmasaservice: LLMAsAServiceProviderOptionsSchema.optional()
283
304
  });
284
305
  var RawProviderBodySchema = import_zod.z.object({
285
306
  openai: import_zod.z.record(import_zod.z.unknown()).optional(),
@@ -288,7 +309,8 @@ var RawProviderBodySchema = import_zod.z.object({
288
309
  anthropic: import_zod.z.record(import_zod.z.unknown()).optional(),
289
310
  gemini: import_zod.z.record(import_zod.z.unknown()).optional(),
290
311
  google: import_zod.z.record(import_zod.z.unknown()).optional(),
291
- openrouter: import_zod.z.record(import_zod.z.unknown()).optional()
312
+ openrouter: import_zod.z.record(import_zod.z.unknown()).optional(),
313
+ llmasaservice: import_zod.z.record(import_zod.z.unknown()).optional()
292
314
  });
293
315
  var OpenAICacheSchema = import_zod.z.object({
294
316
  prompt_cache_key: import_zod.z.string().min(1).optional(),
@@ -375,7 +397,7 @@ var SectionsSchema = import_zod.z.object({
375
397
  notes: import_zod.z.string().optional()
376
398
  });
377
399
  var PromptDefaultsSchema = import_zod.z.object({
378
- provider: import_zod.z.enum(["openai", "openai-responses", "anthropic", "google", "gemini", "openrouter", "any"]).optional(),
400
+ provider: import_zod.z.enum(["openai", "openai-responses", "anthropic", "google", "gemini", "openrouter", "llmasaservice", "any"]).optional(),
379
401
  model: import_zod.z.string().optional(),
380
402
  cache: CacheSchema.optional(),
381
403
  metadata: MetadataSchema.optional(),
@@ -387,7 +409,7 @@ var PromptAssetSchema = import_zod.z.object({
387
409
  id: import_zod.z.string(),
388
410
  schema_version: import_zod.z.number().int().positive().default(1),
389
411
  description: import_zod.z.string().optional(),
390
- provider: import_zod.z.enum(["openai", "openai-responses", "anthropic", "google", "gemini", "openrouter", "any"]).optional(),
412
+ provider: import_zod.z.enum(["openai", "openai-responses", "anthropic", "google", "gemini", "openrouter", "llmasaservice", "any"]).optional(),
391
413
  model: import_zod.z.string().optional(),
392
414
  fallback_models: import_zod.z.array(import_zod.z.string()).optional(),
393
415
  reasoning: ReasoningSchema.optional(),
@@ -643,6 +665,7 @@ function mergeDefaults(base, local) {
643
665
  return {
644
666
  provider: local.provider ?? base.provider,
645
667
  model: local.model ?? base.model,
668
+ cache: mergeCache(base.cache, local.cache),
646
669
  metadata: {
647
670
  ...base.metadata ?? {},
648
671
  ...local.metadata ?? {}
@@ -654,10 +677,12 @@ function mergeDefaults(base, local) {
654
677
  };
655
678
  }
656
679
  function applyDefaults(asset, defaults) {
680
+ const cache = mergeCache(defaults.cache, asset.cache);
657
681
  const hasDefaultMetadata = defaults.metadata && Object.keys(defaults.metadata).length > 0;
658
682
  const hasDefaultSystem = !!defaults.sections?.system_instructions;
659
683
  const hasDefaultScalars = defaults.provider !== void 0 || defaults.model !== void 0;
660
- if (!hasDefaultMetadata && !hasDefaultSystem && !hasDefaultScalars) {
684
+ const hasDefaultCache = cache !== void 0;
685
+ if (!hasDefaultMetadata && !hasDefaultSystem && !hasDefaultScalars && !hasDefaultCache) {
661
686
  return asset;
662
687
  }
663
688
  const mergedMetadata = {
@@ -671,10 +696,38 @@ function applyDefaults(asset, defaults) {
671
696
  ...asset,
672
697
  provider: asset.provider ?? defaults.provider,
673
698
  model: asset.model ?? defaults.model,
699
+ cache,
674
700
  metadata,
675
701
  sections
676
702
  };
677
703
  }
704
+ function mergeCache(base, local) {
705
+ const merged = {
706
+ ...base ?? {},
707
+ ...local ?? {},
708
+ openai: {
709
+ ...base?.openai ?? {},
710
+ ...local?.openai ?? {}
711
+ },
712
+ anthropic: {
713
+ ...base?.anthropic ?? {},
714
+ ...local?.anthropic ?? {}
715
+ },
716
+ gemini: {
717
+ ...base?.gemini ?? {},
718
+ ...local?.gemini ?? {}
719
+ },
720
+ google: {
721
+ ...base?.google ?? {},
722
+ ...local?.google ?? {}
723
+ }
724
+ };
725
+ if (merged.openai && Object.keys(merged.openai).length === 0) delete merged.openai;
726
+ if (merged.anthropic && Object.keys(merged.anthropic).length === 0) delete merged.anthropic;
727
+ if (merged.gemini && Object.keys(merged.gemini).length === 0) delete merged.gemini;
728
+ if (merged.google && Object.keys(merged.google).length === 0) delete merged.google;
729
+ return Object.keys(merged).length > 0 ? merged : void 0;
730
+ }
678
731
 
679
732
  // src/composition/resolve-includes.ts
680
733
  async function resolveIncludes(asset, basePath, visited = /* @__PURE__ */ new Set()) {
@@ -1077,6 +1130,56 @@ function measureContextValueSize(value) {
1077
1130
  return textEncoder.encode(value).length;
1078
1131
  }
1079
1132
 
1133
+ // src/history.ts
1134
+ function defaultCompactHistory(info) {
1135
+ const content = info.overflow.map((message) => `${message.role}: ${message.content}`).join("\n\n");
1136
+ return {
1137
+ role: "user",
1138
+ content: `Earlier conversation compacted to preserve history:
1139
+
1140
+ ${content}`
1141
+ };
1142
+ }
1143
+ function normalizeCompactionResult(result) {
1144
+ if (typeof result === "string") {
1145
+ return {
1146
+ role: "user",
1147
+ content: result
1148
+ };
1149
+ }
1150
+ return result;
1151
+ }
1152
+ function compactHistoryForPrompt(asset, runtime) {
1153
+ const history = runtime.history;
1154
+ const maxItems = asset.context?.history?.max_items;
1155
+ if (!history || maxItems === void 0 || history.length <= maxItems) {
1156
+ return history;
1157
+ }
1158
+ if (maxItems === 1) {
1159
+ const info2 = {
1160
+ promptId: asset.id,
1161
+ maxItems,
1162
+ overflow: history,
1163
+ preserved: [],
1164
+ history
1165
+ };
1166
+ const compacted2 = runtime.onHistoryCompaction ? normalizeCompactionResult(runtime.onHistoryCompaction(info2)) : defaultCompactHistory(info2);
1167
+ return [compacted2];
1168
+ }
1169
+ const preservedCount = maxItems - 1;
1170
+ const overflow = history.slice(0, history.length - preservedCount);
1171
+ const preserved = history.slice(-preservedCount);
1172
+ const info = {
1173
+ promptId: asset.id,
1174
+ maxItems,
1175
+ overflow,
1176
+ preserved,
1177
+ history
1178
+ };
1179
+ const compacted = runtime.onHistoryCompaction ? normalizeCompactionResult(runtime.onHistoryCompaction(info)) : defaultCompactHistory(info);
1180
+ return [compacted, ...preserved];
1181
+ }
1182
+
1080
1183
  // src/providers/prompt-input.ts
1081
1184
  function isPromptLookup(input) {
1082
1185
  return "path" in input && typeof input.path === "string";
@@ -1112,7 +1215,8 @@ function withPromptInputSupport(adapter) {
1112
1215
  }
1113
1216
  return adapter.render(resolved, {
1114
1217
  ...runtime,
1115
- variables: sanitization.variables
1218
+ variables: sanitization.variables,
1219
+ history: compactHistoryForPrompt(resolved, runtime)
1116
1220
  });
1117
1221
  };
1118
1222
  return {
@@ -1165,8 +1269,9 @@ var openaiAdapter = withPromptInputSupport({
1165
1269
  if (sections.system_instructions) {
1166
1270
  messages.push({ role: "system", content: sections.system_instructions });
1167
1271
  }
1168
- if (runtime.history) {
1169
- for (const msg of runtime.history) {
1272
+ const history = compactHistoryForPrompt(resolvedAsset, runtime);
1273
+ if (history) {
1274
+ for (const msg of history) {
1170
1275
  messages.push({ role: msg.role, content: msg.content });
1171
1276
  }
1172
1277
  }