@elevasis/sdk 1.41.0 → 1.41.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.
package/dist/cli.cjs CHANGED
@@ -45834,7 +45834,7 @@ function wrapAction(commandName, fn) {
45834
45834
  // package.json
45835
45835
  var package_default = {
45836
45836
  name: "@elevasis/sdk",
45837
- version: "1.41.0",
45837
+ version: "1.41.1",
45838
45838
  description: "SDK for building Elevasis organization resources",
45839
45839
  type: "module",
45840
45840
  bin: {
package/dist/index.d.ts CHANGED
@@ -502,6 +502,15 @@ interface ModelConfig {
502
502
  modelOptions?: ModelSpecificOptions;
503
503
  }
504
504
 
505
+ /**
506
+ * What happened to `strict` on a request, recorded per call rather than inferred.
507
+ *
508
+ * `applied` and `notAttempted` are the two states that a refusal-only field cannot tell apart —
509
+ * both leave `strictRefusalReasons` empty. Recording the verdict positively is what makes "was
510
+ * this agent's output actually enforced?" answerable from an `ai_calls` row.
511
+ */
512
+ type StrictStatus = 'applied' | 'refused' | 'compileRejected' | 'notAttempted';
513
+
505
514
  declare const ResourceGovernanceStatusSchema: z.ZodEnum<{
506
515
  active: "active";
507
516
  deprecated: "deprecated";
@@ -1029,6 +1038,7 @@ interface WorkflowDefinition {
1029
1038
  * Generic LLM Types
1030
1039
  * Universal interfaces for LLM interaction across all resource types
1031
1040
  */
1041
+
1032
1042
  /**
1033
1043
  * Standard chat message format
1034
1044
  * Compatible with OpenAI, Anthropic, and other providers
@@ -1062,15 +1072,30 @@ interface LLMGenerateResponse<T = unknown> {
1062
1072
  totalTokens: number;
1063
1073
  };
1064
1074
  cost?: number;
1075
+ /**
1076
+ * What actually happened to `strict` on the request that produced this response. Every server
1077
+ * adapter sets it on every call, so the value is a statement rather than an inference:
1078
+ *
1079
+ * - `applied` — the request carried `strict: true` and the grammar was in effect
1080
+ * - `refused` — `toStrictSchema` could not express the schema, so the request went out unstrict
1081
+ * - `compileRejected` — the schema passed `toStrictSchema` but the provider's grammar compiler
1082
+ * rejected it at request time, and the call was retried unstrict
1083
+ * - `notAttempted` — this adapter does not send strict at all (OpenAI, Google, OpenRouter)
1084
+ *
1085
+ * This exists because `strictRefusalReasons` alone cannot answer the question. Its absence means
1086
+ * "strict held" OR "nothing ever tried", and a prod run that recorded zero refusals while
1087
+ * returning an array-typed field as a string is exactly the case where the difference matters.
1088
+ *
1089
+ * Internal-only, like `usage` — `UniversalLLMAdapter` lifts it onto the `ai_calls` row and
1090
+ * strips it before the response reaches callers.
1091
+ */
1092
+ strictStatus?: StrictStatus;
1065
1093
  /**
1066
1094
  * Why this call went out WITHOUT `strict`, on an adapter that tried to send it with one.
1067
1095
  *
1068
- * Present only on a refusal, so absence means either "strict was in effect" or "this adapter
1069
- * does not attempt strict at all" the two are distinguished by which adapter answered, not by
1070
- * this field. `toStrictSchema` already computes these reasons and, until now, nothing consumed
1071
- * them at the call site: an unstrict call was indistinguishable from a strict one anywhere
1072
- * outside a dev-only flow log. That invisibility is what let every tenant run unstrict against a
1073
- * strict-capable API for as long as it took someone to recognise a pre-strict error signature.
1096
+ * The detail behind a `refused` / `compileRejected` `strictStatus` the short, stable reason
1097
+ * strings `toStrictSchema` computes. Read `strictStatus` to answer "was it enforced"; read this
1098
+ * to answer "why not".
1074
1099
  *
1075
1100
  * Internal-only, like `usage` — `UniversalLLMAdapter` lifts it onto the `ai_calls` row and
1076
1101
  * strips it before the response reaches callers.
@@ -11248,15 +11273,24 @@ interface BaseAICall {
11248
11273
  */
11249
11274
  unvalidatedOutput?: string;
11250
11275
  /**
11251
- * Why this call went out without `strict` structured output, on an adapter that tried to send it
11252
- * with one. Present ONLY on a refusal its absence on a row from a strict-capable adapter means
11253
- * strict was in effect.
11276
+ * What happened to `strict` structured output on this call `applied`, `refused`,
11277
+ * `compileRejected`, or `notAttempted`. Every server adapter sets it, so this is the field that
11278
+ * answers "is this agent's output actually being enforced?" without reading source.
11254
11279
  *
11255
- * This is the row that answers "is this agent's output actually being enforced?" without reading
11256
- * source. Counting rows that carry it, per resource, is the refusal count: a redeployed agent on
11257
- * a current bundle should read zero. It exists because the previous answer was a dev-only flow
11258
- * log, which meant production had no answer and every sync-managed tenant ran unstrict against
11259
- * a strict-capable API until a 14-turn session surfaced a pre-strict error signature.
11280
+ * It replaces an inference that turned out to be unsound. `strictRefusalReasons` alone records
11281
+ * only refusals, so an empty row meant "strict held" OR "this adapter never tries" and a prod
11282
+ * run recorded zero refusals while a call returned an array-typed field as a string, which a
11283
+ * grammar makes impossible. The absence proved nothing, because the deployed API had no way to
11284
+ * write the field at all.
11285
+ *
11286
+ * Absent on rows written before this field existed; that absence is itself diagnostic (the API
11287
+ * predates the change). Existing readers that only look at the fields above are unaffected.
11288
+ */
11289
+ strictStatus?: StrictStatus;
11290
+ /**
11291
+ * Why this call went out without `strict`, when a strict-capable adapter refused the schema. The
11292
+ * detail behind `strictStatus: 'refused' | 'compileRejected'` — read `strictStatus` for whether
11293
+ * it was enforced, this for why not.
11260
11294
  *
11261
11295
  * Existing readers that only look at the fields above are unaffected.
11262
11296
  */
@@ -11316,6 +11350,8 @@ interface LLMUsageData {
11316
11350
  outputValidationError?: string;
11317
11351
  /** Raw model output that failed validation — JSON-stringified, truncated, truncation marked inline */
11318
11352
  unvalidatedOutput?: string;
11353
+ /** What happened to `strict` on this call — set by every server adapter, refusal or not */
11354
+ strictStatus?: StrictStatus;
11319
11355
  /** Why the call went out unstrict, when a strict-capable adapter refused the schema */
11320
11356
  strictRefusalReasons?: string[];
11321
11357
  }
@@ -372,6 +372,15 @@ interface ModelConfig {
372
372
  modelOptions?: ModelSpecificOptions;
373
373
  }
374
374
 
375
+ /**
376
+ * What happened to `strict` on a request, recorded per call rather than inferred.
377
+ *
378
+ * `applied` and `notAttempted` are the two states that a refusal-only field cannot tell apart —
379
+ * both leave `strictRefusalReasons` empty. Recording the verdict positively is what makes "was
380
+ * this agent's output actually enforced?" answerable from an `ai_calls` row.
381
+ */
382
+ type StrictStatus = 'applied' | 'refused' | 'compileRejected' | 'notAttempted';
383
+
375
384
  declare const ResourceGovernanceStatusSchema: z.ZodEnum<{
376
385
  active: "active";
377
386
  deprecated: "deprecated";
@@ -899,6 +908,7 @@ interface WorkflowDefinition {
899
908
  * Generic LLM Types
900
909
  * Universal interfaces for LLM interaction across all resource types
901
910
  */
911
+
902
912
  /**
903
913
  * Standard chat message format
904
914
  * Compatible with OpenAI, Anthropic, and other providers
@@ -932,15 +942,30 @@ interface LLMGenerateResponse<T = unknown> {
932
942
  totalTokens: number;
933
943
  };
934
944
  cost?: number;
945
+ /**
946
+ * What actually happened to `strict` on the request that produced this response. Every server
947
+ * adapter sets it on every call, so the value is a statement rather than an inference:
948
+ *
949
+ * - `applied` — the request carried `strict: true` and the grammar was in effect
950
+ * - `refused` — `toStrictSchema` could not express the schema, so the request went out unstrict
951
+ * - `compileRejected` — the schema passed `toStrictSchema` but the provider's grammar compiler
952
+ * rejected it at request time, and the call was retried unstrict
953
+ * - `notAttempted` — this adapter does not send strict at all (OpenAI, Google, OpenRouter)
954
+ *
955
+ * This exists because `strictRefusalReasons` alone cannot answer the question. Its absence means
956
+ * "strict held" OR "nothing ever tried", and a prod run that recorded zero refusals while
957
+ * returning an array-typed field as a string is exactly the case where the difference matters.
958
+ *
959
+ * Internal-only, like `usage` — `UniversalLLMAdapter` lifts it onto the `ai_calls` row and
960
+ * strips it before the response reaches callers.
961
+ */
962
+ strictStatus?: StrictStatus;
935
963
  /**
936
964
  * Why this call went out WITHOUT `strict`, on an adapter that tried to send it with one.
937
965
  *
938
- * Present only on a refusal, so absence means either "strict was in effect" or "this adapter
939
- * does not attempt strict at all" the two are distinguished by which adapter answered, not by
940
- * this field. `toStrictSchema` already computes these reasons and, until now, nothing consumed
941
- * them at the call site: an unstrict call was indistinguishable from a strict one anywhere
942
- * outside a dev-only flow log. That invisibility is what let every tenant run unstrict against a
943
- * strict-capable API for as long as it took someone to recognise a pre-strict error signature.
966
+ * The detail behind a `refused` / `compileRejected` `strictStatus` the short, stable reason
967
+ * strings `toStrictSchema` computes. Read `strictStatus` to answer "was it enforced"; read this
968
+ * to answer "why not".
944
969
  *
945
970
  * Internal-only, like `usage` — `UniversalLLMAdapter` lifts it onto the `ai_calls` row and
946
971
  * strips it before the response reaches callers.
@@ -2749,15 +2774,24 @@ interface BaseAICall {
2749
2774
  */
2750
2775
  unvalidatedOutput?: string;
2751
2776
  /**
2752
- * Why this call went out without `strict` structured output, on an adapter that tried to send it
2753
- * with one. Present ONLY on a refusal its absence on a row from a strict-capable adapter means
2754
- * strict was in effect.
2777
+ * What happened to `strict` structured output on this call `applied`, `refused`,
2778
+ * `compileRejected`, or `notAttempted`. Every server adapter sets it, so this is the field that
2779
+ * answers "is this agent's output actually being enforced?" without reading source.
2755
2780
  *
2756
- * This is the row that answers "is this agent's output actually being enforced?" without reading
2757
- * source. Counting rows that carry it, per resource, is the refusal count: a redeployed agent on
2758
- * a current bundle should read zero. It exists because the previous answer was a dev-only flow
2759
- * log, which meant production had no answer and every sync-managed tenant ran unstrict against
2760
- * a strict-capable API until a 14-turn session surfaced a pre-strict error signature.
2781
+ * It replaces an inference that turned out to be unsound. `strictRefusalReasons` alone records
2782
+ * only refusals, so an empty row meant "strict held" OR "this adapter never tries" and a prod
2783
+ * run recorded zero refusals while a call returned an array-typed field as a string, which a
2784
+ * grammar makes impossible. The absence proved nothing, because the deployed API had no way to
2785
+ * write the field at all.
2786
+ *
2787
+ * Absent on rows written before this field existed; that absence is itself diagnostic (the API
2788
+ * predates the change). Existing readers that only look at the fields above are unaffected.
2789
+ */
2790
+ strictStatus?: StrictStatus;
2791
+ /**
2792
+ * Why this call went out without `strict`, when a strict-capable adapter refused the schema. The
2793
+ * detail behind `strictStatus: 'refused' | 'compileRejected'` — read `strictStatus` for whether
2794
+ * it was enforced, this for why not.
2761
2795
  *
2762
2796
  * Existing readers that only look at the fields above are unaffected.
2763
2797
  */
@@ -2817,6 +2851,8 @@ interface LLMUsageData {
2817
2851
  outputValidationError?: string;
2818
2852
  /** Raw model output that failed validation — JSON-stringified, truncated, truncation marked inline */
2819
2853
  unvalidatedOutput?: string;
2854
+ /** What happened to `strict` on this call — set by every server adapter, refusal or not */
2855
+ strictStatus?: StrictStatus;
2820
2856
  /** Why the call went out unstrict, when a strict-capable adapter refused the schema */
2821
2857
  strictRefusalReasons?: string[];
2822
2858
  }
@@ -335,6 +335,15 @@ interface ModelConfig {
335
335
  modelOptions?: ModelSpecificOptions;
336
336
  }
337
337
 
338
+ /**
339
+ * What happened to `strict` on a request, recorded per call rather than inferred.
340
+ *
341
+ * `applied` and `notAttempted` are the two states that a refusal-only field cannot tell apart —
342
+ * both leave `strictRefusalReasons` empty. Recording the verdict positively is what makes "was
343
+ * this agent's output actually enforced?" answerable from an `ai_calls` row.
344
+ */
345
+ type StrictStatus = 'applied' | 'refused' | 'compileRejected' | 'notAttempted';
346
+
338
347
  declare const ResourceGovernanceStatusSchema: z.ZodEnum<{
339
348
  active: "active";
340
349
  deprecated: "deprecated";
@@ -862,6 +871,7 @@ interface WorkflowDefinition {
862
871
  * Generic LLM Types
863
872
  * Universal interfaces for LLM interaction across all resource types
864
873
  */
874
+
865
875
  /**
866
876
  * Standard chat message format
867
877
  * Compatible with OpenAI, Anthropic, and other providers
@@ -895,15 +905,30 @@ interface LLMGenerateResponse<T = unknown> {
895
905
  totalTokens: number;
896
906
  };
897
907
  cost?: number;
908
+ /**
909
+ * What actually happened to `strict` on the request that produced this response. Every server
910
+ * adapter sets it on every call, so the value is a statement rather than an inference:
911
+ *
912
+ * - `applied` — the request carried `strict: true` and the grammar was in effect
913
+ * - `refused` — `toStrictSchema` could not express the schema, so the request went out unstrict
914
+ * - `compileRejected` — the schema passed `toStrictSchema` but the provider's grammar compiler
915
+ * rejected it at request time, and the call was retried unstrict
916
+ * - `notAttempted` — this adapter does not send strict at all (OpenAI, Google, OpenRouter)
917
+ *
918
+ * This exists because `strictRefusalReasons` alone cannot answer the question. Its absence means
919
+ * "strict held" OR "nothing ever tried", and a prod run that recorded zero refusals while
920
+ * returning an array-typed field as a string is exactly the case where the difference matters.
921
+ *
922
+ * Internal-only, like `usage` — `UniversalLLMAdapter` lifts it onto the `ai_calls` row and
923
+ * strips it before the response reaches callers.
924
+ */
925
+ strictStatus?: StrictStatus;
898
926
  /**
899
927
  * Why this call went out WITHOUT `strict`, on an adapter that tried to send it with one.
900
928
  *
901
- * Present only on a refusal, so absence means either "strict was in effect" or "this adapter
902
- * does not attempt strict at all" the two are distinguished by which adapter answered, not by
903
- * this field. `toStrictSchema` already computes these reasons and, until now, nothing consumed
904
- * them at the call site: an unstrict call was indistinguishable from a strict one anywhere
905
- * outside a dev-only flow log. That invisibility is what let every tenant run unstrict against a
906
- * strict-capable API for as long as it took someone to recognise a pre-strict error signature.
929
+ * The detail behind a `refused` / `compileRejected` `strictStatus` the short, stable reason
930
+ * strings `toStrictSchema` computes. Read `strictStatus` to answer "was it enforced"; read this
931
+ * to answer "why not".
907
932
  *
908
933
  * Internal-only, like `usage` — `UniversalLLMAdapter` lifts it onto the `ai_calls` row and
909
934
  * strips it before the response reaches callers.
@@ -10322,15 +10347,24 @@ interface BaseAICall {
10322
10347
  */
10323
10348
  unvalidatedOutput?: string;
10324
10349
  /**
10325
- * Why this call went out without `strict` structured output, on an adapter that tried to send it
10326
- * with one. Present ONLY on a refusal its absence on a row from a strict-capable adapter means
10327
- * strict was in effect.
10350
+ * What happened to `strict` structured output on this call `applied`, `refused`,
10351
+ * `compileRejected`, or `notAttempted`. Every server adapter sets it, so this is the field that
10352
+ * answers "is this agent's output actually being enforced?" without reading source.
10328
10353
  *
10329
- * This is the row that answers "is this agent's output actually being enforced?" without reading
10330
- * source. Counting rows that carry it, per resource, is the refusal count: a redeployed agent on
10331
- * a current bundle should read zero. It exists because the previous answer was a dev-only flow
10332
- * log, which meant production had no answer and every sync-managed tenant ran unstrict against
10333
- * a strict-capable API until a 14-turn session surfaced a pre-strict error signature.
10354
+ * It replaces an inference that turned out to be unsound. `strictRefusalReasons` alone records
10355
+ * only refusals, so an empty row meant "strict held" OR "this adapter never tries" and a prod
10356
+ * run recorded zero refusals while a call returned an array-typed field as a string, which a
10357
+ * grammar makes impossible. The absence proved nothing, because the deployed API had no way to
10358
+ * write the field at all.
10359
+ *
10360
+ * Absent on rows written before this field existed; that absence is itself diagnostic (the API
10361
+ * predates the change). Existing readers that only look at the fields above are unaffected.
10362
+ */
10363
+ strictStatus?: StrictStatus;
10364
+ /**
10365
+ * Why this call went out without `strict`, when a strict-capable adapter refused the schema. The
10366
+ * detail behind `strictStatus: 'refused' | 'compileRejected'` — read `strictStatus` for whether
10367
+ * it was enforced, this for why not.
10334
10368
  *
10335
10369
  * Existing readers that only look at the fields above are unaffected.
10336
10370
  */
@@ -10390,6 +10424,8 @@ interface LLMUsageData {
10390
10424
  outputValidationError?: string;
10391
10425
  /** Raw model output that failed validation — JSON-stringified, truncated, truncation marked inline */
10392
10426
  unvalidatedOutput?: string;
10427
+ /** What happened to `strict` on this call — set by every server adapter, refusal or not */
10428
+ strictStatus?: StrictStatus;
10393
10429
  /** Why the call went out unstrict, when a strict-capable adapter refused the schema */
10394
10430
  strictRefusalReasons?: string[];
10395
10431
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elevasis/sdk",
3
- "version": "1.41.0",
3
+ "version": "1.41.1",
4
4
  "description": "SDK for building Elevasis organization resources",
5
5
  "type": "module",
6
6
  "bin": {
@@ -59,8 +59,8 @@
59
59
  "typescript": "5.9.2",
60
60
  "zod": "^4.1.0",
61
61
  "@repo/core": "0.57.0",
62
- "@repo/eslint-config": "0.0.0",
63
- "@repo/typescript-config": "0.0.0"
62
+ "@repo/typescript-config": "0.0.0",
63
+ "@repo/eslint-config": "0.0.0"
64
64
  },
65
65
  "scripts": {
66
66
  "lint": "eslint src --max-warnings 0",