@nirmos/sdk 0.2.0 → 0.3.2

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 (93) hide show
  1. package/README.md +81 -44
  2. package/dist/cjs/client.js +112 -20
  3. package/dist/cjs/client.js.map +1 -1
  4. package/dist/cjs/core/errors.js +4 -2
  5. package/dist/cjs/core/errors.js.map +1 -1
  6. package/dist/cjs/core/metadata.js +3 -3
  7. package/dist/cjs/core/metadata.js.map +1 -1
  8. package/dist/cjs/core/transport.js +36 -9
  9. package/dist/cjs/core/transport.js.map +1 -1
  10. package/dist/cjs/index.js +10 -2
  11. package/dist/cjs/index.js.map +1 -1
  12. package/dist/cjs/management/contracts.js +3 -0
  13. package/dist/cjs/management/contracts.js.map +1 -0
  14. package/dist/cjs/management/execution-types.js +3 -0
  15. package/dist/cjs/management/execution-types.js.map +1 -0
  16. package/dist/cjs/management/manifest.js +1551 -0
  17. package/dist/cjs/management/manifest.js.map +1 -0
  18. package/dist/cjs/management/resources.js +199 -0
  19. package/dist/cjs/management/resources.js.map +1 -0
  20. package/dist/cjs/memory/memory.js +68 -0
  21. package/dist/cjs/memory/memory.js.map +1 -0
  22. package/dist/cjs/memory/types.js +3 -0
  23. package/dist/cjs/memory/types.js.map +1 -0
  24. package/dist/cjs/prompts/render.js +12 -4
  25. package/dist/cjs/prompts/render.js.map +1 -1
  26. package/dist/cjs/prompts/variables.js +117 -0
  27. package/dist/cjs/prompts/variables.js.map +1 -0
  28. package/dist/esm/client.d.ts +140 -13
  29. package/dist/esm/client.d.ts.map +1 -1
  30. package/dist/esm/client.js +111 -20
  31. package/dist/esm/client.js.map +1 -1
  32. package/dist/esm/core/errors.d.ts +4 -0
  33. package/dist/esm/core/errors.d.ts.map +1 -1
  34. package/dist/esm/core/errors.js +4 -2
  35. package/dist/esm/core/errors.js.map +1 -1
  36. package/dist/esm/core/metadata.d.ts.map +1 -1
  37. package/dist/esm/core/metadata.js +3 -3
  38. package/dist/esm/core/metadata.js.map +1 -1
  39. package/dist/esm/core/transport.d.ts +9 -2
  40. package/dist/esm/core/transport.d.ts.map +1 -1
  41. package/dist/esm/core/transport.js +36 -9
  42. package/dist/esm/core/transport.js.map +1 -1
  43. package/dist/esm/gateway/types.d.ts +2 -0
  44. package/dist/esm/gateway/types.d.ts.map +1 -1
  45. package/dist/esm/index.d.ts +7 -2
  46. package/dist/esm/index.d.ts.map +1 -1
  47. package/dist/esm/index.js +3 -1
  48. package/dist/esm/index.js.map +1 -1
  49. package/dist/esm/management/contracts.d.ts +30184 -0
  50. package/dist/esm/management/contracts.d.ts.map +1 -0
  51. package/dist/esm/management/contracts.js +2 -0
  52. package/dist/esm/management/contracts.js.map +1 -0
  53. package/dist/esm/management/execution-types.d.ts +246 -0
  54. package/dist/esm/management/execution-types.d.ts.map +1 -0
  55. package/dist/esm/management/execution-types.js +2 -0
  56. package/dist/esm/management/execution-types.js.map +1 -0
  57. package/dist/esm/management/manifest.d.ts +1353 -0
  58. package/dist/esm/management/manifest.d.ts.map +1 -0
  59. package/dist/esm/management/manifest.js +1548 -0
  60. package/dist/esm/management/manifest.js.map +1 -0
  61. package/dist/esm/management/resources.d.ts +290 -0
  62. package/dist/esm/management/resources.d.ts.map +1 -0
  63. package/dist/esm/management/resources.js +196 -0
  64. package/dist/esm/management/resources.js.map +1 -0
  65. package/dist/esm/memory/memory.d.ts +35 -0
  66. package/dist/esm/memory/memory.d.ts.map +1 -0
  67. package/dist/esm/memory/memory.js +64 -0
  68. package/dist/esm/memory/memory.js.map +1 -0
  69. package/dist/esm/memory/types.d.ts +135 -0
  70. package/dist/esm/memory/types.d.ts.map +1 -0
  71. package/dist/esm/memory/types.js +2 -0
  72. package/dist/esm/memory/types.js.map +1 -0
  73. package/dist/esm/prompts/render.js +11 -3
  74. package/dist/esm/prompts/render.js.map +1 -1
  75. package/dist/esm/prompts/variables.d.ts +29 -0
  76. package/dist/esm/prompts/variables.d.ts.map +1 -0
  77. package/dist/esm/prompts/variables.js +108 -0
  78. package/dist/esm/prompts/variables.js.map +1 -0
  79. package/package.json +2 -2
  80. package/src/client.ts +299 -36
  81. package/src/core/errors.ts +8 -2
  82. package/src/core/metadata.ts +3 -12
  83. package/src/core/transport.ts +47 -11
  84. package/src/gateway/types.ts +2 -0
  85. package/src/index.ts +71 -2
  86. package/src/management/contracts.ts +1179 -0
  87. package/src/management/execution-types.ts +10 -0
  88. package/src/management/manifest.ts +1547 -0
  89. package/src/management/resources.ts +198 -0
  90. package/src/memory/memory.ts +108 -0
  91. package/src/memory/types.ts +157 -0
  92. package/src/prompts/render.ts +9 -4
  93. package/src/prompts/variables.ts +156 -0
@@ -0,0 +1,156 @@
1
+ /** Shared placeholder semantics for managed prompts, the dashboard and execution. */
2
+ export const PROMPT_VARIABLE_PATTERN =
3
+ /\{\{\s*([a-zA-Z][a-zA-Z0-9_.-]*)\s*\}\}/g;
4
+ export function extractPromptVariableNames(
5
+ ...values: Array<string | null | undefined>
6
+ ): string[] {
7
+ return [
8
+ ...new Set(
9
+ values.flatMap((value) =>
10
+ [...(value ?? "").matchAll(PROMPT_VARIABLE_PATTERN)].map(
11
+ (match) => match[1]!,
12
+ ),
13
+ ),
14
+ ),
15
+ ];
16
+ }
17
+ export function promptVariableValue(
18
+ values: Record<string, unknown>,
19
+ name: string,
20
+ ): unknown {
21
+ if (Object.hasOwn(values, name)) return values[name];
22
+ let current: unknown = values;
23
+ for (const key of name.split(".")) {
24
+ if (
25
+ ["__proto__", "prototype", "constructor"].includes(key) ||
26
+ !current ||
27
+ typeof current !== "object" ||
28
+ !Object.hasOwn(current, key)
29
+ )
30
+ return undefined;
31
+ current = (current as Record<string, unknown>)[key];
32
+ }
33
+ return current;
34
+ }
35
+ export function interpolatePromptVariables(
36
+ text: string,
37
+ values: Record<string, unknown>,
38
+ ): string {
39
+ return text.replace(PROMPT_VARIABLE_PATTERN, (token, name: string) => {
40
+ const value = promptVariableValue(values, name);
41
+ return value === undefined
42
+ ? token
43
+ : typeof value === "string"
44
+ ? value
45
+ : JSON.stringify(value);
46
+ });
47
+ }
48
+ export function validatePromptTemplate(text: string): string[] {
49
+ const remaining = text.replace(PROMPT_VARIABLE_PATTERN, "");
50
+ return /\{\{|\{%/.test(remaining)
51
+ ? [
52
+ "Unsupported variable syntax. Use {{name}}, {{ spaced }}, or {{user.name}}. Expressions, filters and template blocks cannot run as managed prompt variables.",
53
+ ]
54
+ : [];
55
+ }
56
+ export type VariableDefinition = {
57
+ name: string;
58
+ type: string;
59
+ required?: boolean;
60
+ default?: unknown;
61
+ enum?: readonly string[];
62
+ values?: readonly string[];
63
+ min?: number;
64
+ max?: number;
65
+ minLength?: number;
66
+ maxLength?: number;
67
+ min_length?: number;
68
+ max_length?: number;
69
+ itemType?: string;
70
+ item_type?: string;
71
+ };
72
+ export function validatePromptVariableValues(
73
+ definitions: readonly VariableDefinition[],
74
+ values: Record<string, unknown>,
75
+ ): Record<string, string> {
76
+ const errors: Record<string, string> = {};
77
+ for (const definition of definitions) {
78
+ const supplied = promptVariableValue(values, definition.name);
79
+ const value = supplied === undefined ? definition.default : supplied;
80
+ let error = "";
81
+ if (value === undefined || value === "") {
82
+ if (definition.required) error = "A value is required.";
83
+ } else {
84
+ const type = definition.type;
85
+ if (
86
+ type === "number" &&
87
+ (typeof value !== "number" || !Number.isFinite(value))
88
+ )
89
+ error = "Enter a valid number.";
90
+ if (type === "boolean" && typeof value !== "boolean")
91
+ error = "Choose true or false.";
92
+ if (type === "string" && typeof value !== "string") error = "Enter text.";
93
+ if (
94
+ type === "enum" &&
95
+ !(definition.enum ?? definition.values)?.includes(String(value))
96
+ )
97
+ error = "Choose one of the allowed values.";
98
+ if (type === "array" && !Array.isArray(value))
99
+ error = "Enter a valid array.";
100
+ if (
101
+ typeof value === "number" &&
102
+ ((definition.min !== undefined && value < definition.min) ||
103
+ (definition.max !== undefined && value > definition.max))
104
+ )
105
+ error = `Enter a number between ${definition.min ?? "−∞"} and ${definition.max ?? "∞"}.`;
106
+ const minLength = definition.minLength ?? definition.min_length;
107
+ const maxLength = definition.maxLength ?? definition.max_length;
108
+ if (
109
+ typeof value === "string" &&
110
+ ((minLength !== undefined && value.length < minLength) ||
111
+ (maxLength !== undefined && value.length > maxLength))
112
+ )
113
+ error = `Use ${minLength ?? 0} to ${maxLength ?? "any number of"} characters.`;
114
+ const itemType = definition.itemType ?? definition.item_type;
115
+ if (
116
+ Array.isArray(value) &&
117
+ itemType &&
118
+ value.some((item) =>
119
+ itemType === "array"
120
+ ? !Array.isArray(item)
121
+ : itemType !== "enum" && typeof item !== itemType,
122
+ )
123
+ )
124
+ error = `Every item must be ${itemType}.`;
125
+ }
126
+ if (error) errors[definition.name] = error;
127
+ }
128
+ return errors;
129
+ }
130
+ export function validatePromptSettings(settings: {
131
+ temperature: unknown;
132
+ topP: unknown;
133
+ maxTokens: unknown;
134
+ }): Record<string, string> {
135
+ const errors: Record<string, string> = {};
136
+ for (const [field, label, min, max] of [
137
+ ["temperature", "Temperature", 0, 2],
138
+ ["topP", "Top P", 0, 1],
139
+ ["maxTokens", "Max tokens", 1, 200000],
140
+ ] as const) {
141
+ const raw = settings[field];
142
+ const value = Number(raw);
143
+ if (
144
+ raw === "" ||
145
+ raw === null ||
146
+ raw === undefined ||
147
+ !Number.isFinite(value) ||
148
+ value < min ||
149
+ value > max ||
150
+ (field === "maxTokens" && !Number.isInteger(value))
151
+ )
152
+ errors[field] =
153
+ `${label} must be ${field === "maxTokens" ? "a whole number" : "a number"} between ${min} and ${max}.`;
154
+ }
155
+ return errors;
156
+ }