@celigo/api-specs 0.2.182 → 0.2.184

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/ai-agent.yml CHANGED
@@ -27,6 +27,15 @@ tags:
27
27
  providers — Mistral, xAI, Hugging Face, DeepSeek, Cohere, and Groq — use one generic
28
28
  flat configuration format and always run on a BYOK connection.
29
29
 
30
+ Every model carries a lifecycle in the platform's model catalog (`active`,
31
+ `deprecated`, `retired`, plus an availability switch). The save and every run
32
+ refuse a model that is not in the catalog, switched off, not offered for the
33
+ agent's credential type, or retired; a deprecated model keeps working until its
34
+ retirement date. With a `_connectionId` (BYOK), a model the catalog does not
35
+ list is passed through to the vendor as-is, while a catalog-listed model remains
36
+ governed. `GET /v1/aiagents/aiModelHealth` lists the agents and guardrails that
37
+ need attention.
38
+
30
39
  ## AI agent schema
31
40
 
32
41
  {% openapi-schemas spec="ai-agent" schemas="AiAgent" grouped="true" %}
@@ -742,6 +751,194 @@ paths:
742
751
  description: '`Content-Type: application/json` header is missing.'
743
752
  '422':
744
753
  $ref: '#/components/responses/422-unprocessable-entity'
754
+ /v1/aiagents/aiModelHealth:
755
+ get:
756
+ x-internal: false
757
+ operationId: listAiModelHealth
758
+ tags:
759
+ - AI Agents
760
+ summary: List AI agents on affected models
761
+ description: |-
762
+ Returns the AI agent and guardrail imports the caller can read whose configured
763
+ model is refused (not in the catalog, switched off, not offered for the import's
764
+ credential type, or retired) or deprecated. Healthy imports and imports in the
765
+ recycle bin are omitted; production and sandbox copies both appear. Computed
766
+ fresh on every call; no query parameters.
767
+
768
+ A model the catalog does not list is reported only for imports on
769
+ platform-managed credentials — with a `_connectionId` (BYOK) such a model is
770
+ passed through to the vendor and never listed; a catalog-listed BYOK model is
771
+ governed and can appear. An `error` entry is blocked on save and on run; a
772
+ `warning` entry is deprecated and keeps working until `lifecycle.retiredAt`.
773
+ Fix an entry by changing the import's model, usually to one of
774
+ `lifecycle.suggestedNextModels`.
775
+ responses:
776
+ '200':
777
+ description: Affected imports. `agents` is empty when every model is healthy.
778
+ content:
779
+ application/json:
780
+ schema:
781
+ $ref: '#/components/schemas/AiModelHealth'
782
+ examples:
783
+ healthy:
784
+ summary: Every model healthy
785
+ value:
786
+ agents: []
787
+ deprecated:
788
+ summary: One agent on a model retiring soon
789
+ value:
790
+ agents:
791
+ - _importId: 6ad764e00d32aa4416a1e9d5
792
+ modelId: gpt-4.1-nano
793
+ provider: openai
794
+ severity: warning
795
+ displayName: gpt-4.1-nano
796
+ lifecycle:
797
+ status: deprecated
798
+ deprecatedAt: '2026-04-22'
799
+ retiredAt: '2026-10-23'
800
+ suggestedNextModels:
801
+ - gpt-5.6-luna
802
+ retired:
803
+ summary: The same agent once its retirement date has passed — `status` still reads `deprecated`, the entry is an error
804
+ value:
805
+ agents:
806
+ - _importId: 6ad764e00d32aa4416a1e9d5
807
+ modelId: gpt-4.1-nano
808
+ provider: openai
809
+ severity: error
810
+ displayName: gpt-4.1-nano
811
+ code: ai_model_retired
812
+ lifecycle:
813
+ status: deprecated
814
+ deprecatedAt: '2026-04-22'
815
+ retiredAt: '2026-10-23'
816
+ suggestedNextModels:
817
+ - gpt-5.6-luna
818
+ '401':
819
+ $ref: '#/components/responses/401-unauthorized'
820
+ '403':
821
+ $ref: '#/components/responses/403-forbidden'
822
+ '502':
823
+ description: |-
824
+ The model catalog or the health computation was unavailable. The platform never
825
+ answers a fake-healthy `200` — retry later.
826
+ content:
827
+ application/json:
828
+ schema:
829
+ $ref: '#/components/schemas/Error'
830
+ examples:
831
+ default:
832
+ value:
833
+ errors:
834
+ - code: ai_model_health_unavailable
835
+ message: Model health could not be computed.
836
+ source: resource
837
+ /v1/integrations/{_integrationId}/aiModelHealth:
838
+ get:
839
+ x-internal: false
840
+ operationId: listIntegrationAiModelHealth
841
+ tags:
842
+ - AI Agents
843
+ summary: List an integration's affected AI agents
844
+ description: |-
845
+ Same rules as `GET /v1/aiagents/aiModelHealth`, then keeps only the imports a
846
+ live flow of this integration references (as a page processor, inside a router
847
+ branch, or as the flow's top-level import), each with the flows and
848
+ integrations that use it. Flows in the recycle bin and imports no flow uses are
849
+ dropped — an agent that is on an affected model but in no flow appears on the
850
+ account route only.
851
+
852
+ A parent Integration App includes its child integrations' flows; a child does
853
+ not include its parent or siblings.
854
+ parameters:
855
+ - name: _integrationId
856
+ in: path
857
+ required: true
858
+ description: The integration to scope to. A parent Integration App includes its children.
859
+ schema:
860
+ type: string
861
+ format: objectId
862
+ x-celigo-refModel: integrations
863
+ responses:
864
+ '200':
865
+ description: Affected imports referenced by the integration's live flows. `agents` is empty when every model is healthy.
866
+ content:
867
+ application/json:
868
+ schema:
869
+ $ref: '#/components/schemas/IntegrationAiModelHealth'
870
+ examples:
871
+ healthy:
872
+ summary: Every model healthy
873
+ value:
874
+ agents: []
875
+ deprecated:
876
+ summary: One agent on a model retiring soon, used by two flows of the integration
877
+ description: |-
878
+ The first flow references the import as a page processor, the second as its
879
+ top-level `_importId`; both are listed. The same import on the account route
880
+ carries no `_flowIds` or `_integrationIds`.
881
+ value:
882
+ agents:
883
+ - _importId: 6ad764e00d32aa4416a1e9d5
884
+ modelId: gpt-4.1-nano
885
+ provider: openai
886
+ severity: warning
887
+ displayName: gpt-4.1-nano
888
+ lifecycle:
889
+ status: deprecated
890
+ deprecatedAt: '2026-04-22'
891
+ retiredAt: '2026-10-23'
892
+ suggestedNextModels:
893
+ - gpt-5.6-luna
894
+ _flowIds:
895
+ - 6ada3adacbe134dabe31a5b2
896
+ - 6ada3ad8f4f545d98e142507
897
+ _integrationIds:
898
+ - 6ada3ad4f4f545d98e142445
899
+ '400':
900
+ description: The id is not a valid ObjectId.
901
+ content:
902
+ application/json:
903
+ schema:
904
+ $ref: '#/components/schemas/Error'
905
+ examples:
906
+ default:
907
+ value:
908
+ errors:
909
+ - code: invalid_ref
910
+ message: Please provide a valid _integrationId.
911
+ '401':
912
+ $ref: '#/components/responses/401-unauthorized'
913
+ '403':
914
+ $ref: '#/components/responses/403-forbidden'
915
+ '404':
916
+ description: No integration with this id is visible to the caller, or it is in the recycle bin.
917
+ content:
918
+ application/json:
919
+ schema:
920
+ $ref: '#/components/schemas/Error'
921
+ examples:
922
+ default:
923
+ value:
924
+ errors:
925
+ - code: invalid_ref
926
+ message: Integration not found.
927
+ '502':
928
+ description: |-
929
+ The model catalog or the health computation was unavailable. The platform never
930
+ answers a fake-healthy `200` — retry later.
931
+ content:
932
+ application/json:
933
+ schema:
934
+ $ref: '#/components/schemas/Error'
935
+ examples:
936
+ default:
937
+ value:
938
+ errors:
939
+ - code: ai_model_health_unavailable
940
+ message: Model health could not be computed.
941
+ source: resource
745
942
  components:
746
943
  securitySchemes:
747
944
  bearerAuth:
@@ -858,8 +1055,30 @@ components:
858
1055
  A `_connectionId` on the parent import selects bring-your-own-key (BYOK)
859
1056
  credentials. Without one, built-in providers run on platform-managed
860
1057
  credentials; catalog providers have no platform-managed credentials, so the
861
- save requires one — without it the agent fails to save with 422
862
- `connection_required` on `_connectionId`.
1058
+ save requires one — without it the agent fails to save with 422 on
1059
+ `aiAgent.model`: `ai_model_not_available` for a catalog-listed model,
1060
+ `ai_model_not_in_catalog` for one the catalog does not list (the model
1061
+ catalog check answers before any `connection_required`).
1062
+
1063
+ **Model lifecycle.** Every model the platform offers — built-in and catalog
1064
+ providers alike — carries a lifecycle in the platform's model catalog:
1065
+ `active`, `deprecated` (still usable; a retirement date and suggested
1066
+ replacement models may be published), or `retired`, plus an availability
1067
+ switch. The save and every run check the configured model against it: a
1068
+ model that is not in the catalog, switched off, not offered for the agent's
1069
+ credential type, or retired (by status, or once its retirement date has
1070
+ passed) is refused — the save with 422 `ai_model_not_in_catalog`,
1071
+ `ai_model_disabled`, `ai_model_not_available`, or `ai_model_retired` on the
1072
+ model field, the run with a `Run blocked:` error carrying the same code before
1073
+ any model call (`Run blocked: model "gpt-4.1-nano" is retired on "Oct 23,
1074
+ 2026". Please choose a supported model and test your agent configuration.` —
1075
+ the run-time message names the date only; the chat route streams it as an
1076
+ `error` event). A deprecated model saves and runs until its retirement date. The
1077
+ platform never substitutes a model: once a model is retired, every save of
1078
+ the agent is refused until the model changes. Agents and guardrails on
1079
+ affected models are listed by `GET /v1/aiagents/aiModelHealth`. With a
1080
+ `_connectionId`, a model the catalog does not list is passed through to the
1081
+ vendor as-is; a catalog-listed model remains governed.
863
1082
  required:
864
1083
  - provider
865
1084
  properties:
@@ -896,11 +1115,13 @@ components:
896
1115
  generic flat format — `model` and `modelOptions` directly on this object,
897
1116
  never an `openai` or `litellm` block.
898
1117
  - |-
899
- Catalog providers are BYOK-only, and the save enforces it: without a `_connectionId`
900
- the agent fails to save with 422 `connection_required` on `_connectionId` ("No API
901
- key is available for provider 'xai'. Add a connection for this provider with your
902
- API key and select it on this agent."). Attach an HTTP connection to the vendor's
903
- API (token auth) before saving a catalog-provider agent.
1118
+ Catalog providers are BYOK-only, and the save enforces it through the model
1119
+ catalog: without a `_connectionId` the agent fails to save with 422
1120
+ `ai_model_not_available` on `aiAgent.model` ("Model \"grok-4.6\" is not
1121
+ supported. Please choose a supported model and test your agent
1122
+ configuration.") — the model is a catalog row that is not offered on
1123
+ platform-managed credentials. Attach an HTTP connection to the vendor's API
1124
+ (token auth) before saving a catalog-provider agent.
904
1125
  model:
905
1126
  type: string
906
1127
  description: |-
@@ -912,11 +1133,15 @@ components:
912
1133
  Required for every catalog provider — omitting it or sending an empty string
913
1134
  fails the save with 422 `missing_required_field`.
914
1135
  - |-
915
- The connection is checked before the model: without a `_connectionId` on the
916
- parent import a catalog-provider agent fails to save with 422
917
- `connection_required` whatever the model string (an unknown id included).
918
- With a `_connectionId` (BYOK) any model string saves — the server does not
919
- check it against the catalog or the vendor.
1136
+ Without a `_connectionId` on the parent import the model check answers first:
1137
+ a catalog-provider agent fails to save with 422 on `aiAgent.model` —
1138
+ `ai_model_not_available` for a catalog-listed model (catalog providers are not
1139
+ offered on platform-managed credentials), `ai_model_not_in_catalog` for an id
1140
+ the catalog does not list.
1141
+ With a `_connectionId` (BYOK) a model the catalog does not list saves as-is —
1142
+ the server does not check it against the catalog or the vendor; a
1143
+ catalog-listed model is still governed by its lifecycle row (see the
1144
+ schema description — a retired or switched-off model is refused on save).
920
1145
  modelOptions:
921
1146
  type: object
922
1147
  description: |-
@@ -1117,11 +1342,23 @@ components:
1117
1342
  x-celigo-ai-guidance:
1118
1343
  - |-
1119
1344
  With platform-managed credentials (no `_connectionId` on the parent
1120
- import), the model must be one the platform hosts. The save does not
1121
- check this — an unlisted model saves, and the agent's first run fails
1122
- with 422 `invalid_model`, whose message lists the hosted models. A
1123
- BYOK connection bypasses the hosted list and the model string is
1124
- passed through to the provider as-is.
1345
+ import), the model must be a catalog row the platform offers on its own
1346
+ credentials. The save checks this — a model that is not in the catalog
1347
+ fails with 422 `ai_model_not_in_catalog` on `aiAgent.openai.model`
1348
+ ("Model \"gpt-4\" is not supported. Please choose a supported model and
1349
+ test your agent configuration."), and a dry-run answers the same
1350
+ `errors` with `valid: false`. A retired model is refused the same way with
1351
+ `ai_model_retired` — the message names the retirement date and, when any
1352
+ remain eligible, the suggested next models ("Model \"gpt-4.1-nano\" is
1353
+ retired on \"Oct 23, 2026\" and cannot be used. Suggested next models:
1354
+ gpt-5.6-luna. Please test and update your agent configuration.") — and so
1355
+ is a switched-off one with `ai_model_disabled`; a deprecated model saves.
1356
+ Never swap the model on the user's behalf — relay the message and let
1357
+ them choose.
1358
+ - |-
1359
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
1360
+ through to the provider as-is; a catalog-listed model is still governed by
1361
+ its lifecycle row.
1125
1362
  reasoning:
1126
1363
  type: object
1127
1364
  description: Controls depth of reasoning for complex tasks.
@@ -1550,10 +1787,18 @@ components:
1550
1787
  x-celigo-ai-guidance:
1551
1788
  - |-
1552
1789
  With platform-managed credentials (no `_connectionId` on the parent
1553
- import), the model must be one the platform hosts for the provider —
1554
- Gemini and Anthropic Claude both have a hosted list. The save does not
1555
- check this — an unlisted model saves, and the agent's first run fails
1556
- with 422 `invalid_model`, whose message lists the hosted models.
1790
+ import), the model must be a catalog row the platform offers for the
1791
+ provider on its own credentials — Gemini and Anthropic Claude each have
1792
+ their own rows. The save checks this: a model that is not in the catalog
1793
+ fails with 422 `ai_model_not_in_catalog` on `aiAgent.litellm.model`, a
1794
+ retired one with `ai_model_retired` (the message names the retirement
1795
+ date and, when any remain eligible, the suggested next models), a
1796
+ switched-off one with `ai_model_disabled`; a deprecated model saves. Never
1797
+ swap the model on the user's behalf — relay the message and let them choose.
1798
+ - |-
1799
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
1800
+ through to the provider as-is; a catalog-listed model is still governed by
1801
+ its lifecycle row.
1557
1802
  temperature:
1558
1803
  type: number
1559
1804
  minimum: 0
@@ -6613,6 +6858,147 @@ components:
6613
6858
  selects the BYOK connection the turn runs through.
6614
6859
  allOf:
6615
6860
  - $ref: '#/components/schemas/Request'
6861
+ AiModelLifecycle:
6862
+ type: object
6863
+ description: |-
6864
+ Lifecycle row of a catalog model, as the platform stores it. `status` is returned as
6865
+ stored — a `deprecated` model whose `retiredAt` has passed is treated as retired by the
6866
+ save and the run even though `status` still reads `deprecated`.
6867
+ required:
6868
+ - status
6869
+ properties:
6870
+ status:
6871
+ type: string
6872
+ enum:
6873
+ - active
6874
+ - deprecated
6875
+ - retired
6876
+ x-enumDescriptions:
6877
+ active: Offered with no warning
6878
+ deprecated: Still saves and runs; migrate before `retiredAt` when one is published
6879
+ retired: Refused on save and on run
6880
+ description: Stored lifecycle status of the model.
6881
+ deprecatedAt:
6882
+ type: string
6883
+ format: date
6884
+ description: Date the model was marked deprecated.
6885
+ retiredAt:
6886
+ type: string
6887
+ format: date
6888
+ description: |-
6889
+ Date from which the model is refused on save and on run, whatever `status` says.
6890
+ Absent when no retirement date has been published.
6891
+ suggestedNextModels:
6892
+ type: array
6893
+ description: |-
6894
+ Replacement model ids the platform recommends, already narrowed to models the
6895
+ agent could switch to with its current credential type (never the model itself,
6896
+ never a model that is itself refused). Absent when no eligible replacement remains.
6897
+ items:
6898
+ type: string
6899
+ AffectedAiAgent:
6900
+ type: object
6901
+ description: |-
6902
+ One AI agent or guardrail import whose configured model needs attention. One entry
6903
+ per import — two imports on the same model can differ in severity.
6904
+ required:
6905
+ - _importId
6906
+ - modelId
6907
+ - provider
6908
+ - severity
6909
+ properties:
6910
+ _importId:
6911
+ type: string
6912
+ format: objectId
6913
+ x-celigo-refModel: imports
6914
+ description: The AI agent (`AiAgentImport`) or guardrail (`GuardrailImport`) import.
6915
+ modelId:
6916
+ type: string
6917
+ description: Model id configured on the import.
6918
+ examples:
6919
+ - gpt-4.1-nano
6920
+ provider:
6921
+ type: string
6922
+ description: Provider the import is configured for.
6923
+ examples:
6924
+ - openai
6925
+ displayName:
6926
+ type: string
6927
+ description: Catalog display name of the model. Present for catalog-listed models only.
6928
+ severity:
6929
+ type: string
6930
+ enum:
6931
+ - error
6932
+ - warning
6933
+ x-enumDescriptions:
6934
+ error: The model is refused on save and on run; `code` says why
6935
+ warning: The model is deprecated — it still saves and runs; migrate before `lifecycle.retiredAt`
6936
+ description: Whether the import is blocked or only warned about.
6937
+ code:
6938
+ type: string
6939
+ enum:
6940
+ - ai_model_disabled
6941
+ - ai_model_not_available
6942
+ - ai_model_not_in_catalog
6943
+ - ai_model_retired
6944
+ x-enumDescriptions:
6945
+ ai_model_disabled: The model or its provider is switched off in the catalog
6946
+ ai_model_not_available: The model is not offered for the import's credential type (platform-managed or BYOK)
6947
+ ai_model_not_in_catalog: The model is not a catalog row and the import runs on platform-managed credentials
6948
+ ai_model_retired: The model is retired by status or by a passed `retiredAt`
6949
+ description: Reason the model is refused. Present on `error` entries only.
6950
+ lifecycle:
6951
+ $ref: '#/components/schemas/AiModelLifecycle'
6952
+ sandbox:
6953
+ type: boolean
6954
+ description: Present and true when the import is a sandbox document.
6955
+ AiModelHealth:
6956
+ type: object
6957
+ description: Imports on affected models across the account. Empty when every model is healthy.
6958
+ required:
6959
+ - agents
6960
+ properties:
6961
+ agents:
6962
+ type: array
6963
+ items:
6964
+ $ref: '#/components/schemas/AffectedAiAgent'
6965
+ AffectedAiAgentWithFlows:
6966
+ allOf:
6967
+ - $ref: '#/components/schemas/AffectedAiAgent'
6968
+ - type: object
6969
+ required:
6970
+ - _flowIds
6971
+ - _integrationIds
6972
+ properties:
6973
+ _flowIds:
6974
+ type: array
6975
+ description: |-
6976
+ Live flows of the integration that reference the import — as a page processor,
6977
+ inside a router branch, or as the flow's top-level `_importId`. Always present
6978
+ on this route, with at least one id: an import no live flow uses is not listed.
6979
+ items:
6980
+ type: string
6981
+ format: objectId
6982
+ x-celigo-refModel: flows
6983
+ _integrationIds:
6984
+ type: array
6985
+ description: |-
6986
+ Integrations of those flows. For a parent Integration App this can include
6987
+ child integration ids.
6988
+ items:
6989
+ type: string
6990
+ format: objectId
6991
+ x-celigo-refModel: integrations
6992
+ IntegrationAiModelHealth:
6993
+ type: object
6994
+ description: Imports on affected models referenced by the integration's live flows. Empty when every model is healthy.
6995
+ required:
6996
+ - agents
6997
+ properties:
6998
+ agents:
6999
+ type: array
7000
+ items:
7001
+ $ref: '#/components/schemas/AffectedAiAgentWithFlows'
6616
7002
  responses:
6617
7003
  400-bad-request:
6618
7004
  description: |
@@ -610,8 +610,30 @@ components:
610
610
  A `_connectionId` on the parent import selects bring-your-own-key (BYOK)
611
611
  credentials. Without one, built-in providers run on platform-managed
612
612
  credentials; catalog providers have no platform-managed credentials, so the
613
- save requires one — without it the guardrail fails to save with 422
614
- `connection_required` on `_connectionId`.
613
+ save requires one — without it the guardrail fails to save with 422 on
614
+ `guardrail.aiAgent.model`: `ai_model_not_available` for a catalog-listed model,
615
+ `ai_model_not_in_catalog` for one the catalog does not list (the model
616
+ catalog check answers before any `connection_required`).
617
+
618
+ **Model lifecycle.** Every model the platform offers carries a lifecycle in
619
+ the platform's model catalog: `active`, `deprecated` (still usable; a
620
+ retirement date and suggested replacement models may be published), or
621
+ `retired`, plus an availability switch. The save and every run of an
622
+ `ai_agent` guardrail check the configured model against it exactly as for an
623
+ AI agent import: a model that is not in the catalog, switched off, not offered
624
+ for the guardrail's credential type, or retired (by status, or once its
625
+ retirement date has passed) is refused — the save with 422
626
+ `ai_model_not_in_catalog`, `ai_model_disabled`, `ai_model_not_available`, or
627
+ `ai_model_retired` on the model field, the run with a `Run blocked:` error
628
+ carrying the same code before any model call (`Run blocked: model
629
+ "gpt-4.1-nano" is retired on "Oct 23, 2026". Please choose a supported model
630
+ and test your agent configuration.` — the run-time message names the date
631
+ only). A deprecated model saves and runs until
632
+ its retirement date. The platform never substitutes a model: once a model is
633
+ retired, every save of the guardrail is refused until the model changes.
634
+ Guardrails on affected models are listed by `GET /v1/aiagents/aiModelHealth`.
635
+ With a `_connectionId`, a model the catalog does not list is passed through to
636
+ the vendor as-is; a catalog-listed model remains governed.
615
637
  x-celigo-ai-guidance:
616
638
  - |-
617
639
  Do not send `tools` on any block. A non-empty array at `tools`, `openai.tools`,
@@ -654,11 +676,13 @@ components:
654
676
  generic flat format — `model` and `modelOptions` directly on this object,
655
677
  never an `openai` or `litellm` block.
656
678
  - |-
657
- Catalog providers are BYOK-only, and the save enforces it: without a `_connectionId`
658
- the guardrail fails to save with 422 `connection_required` on `_connectionId` ("No
659
- API key is available for provider 'xai'. Add a connection for this provider with
660
- your API key and select it on this agent."). Attach an HTTP connection to the
661
- vendor's API (token auth) before saving a catalog-provider guardrail.
679
+ Catalog providers are BYOK-only, and the save enforces it through the model
680
+ catalog: without a `_connectionId` the guardrail fails to save with 422
681
+ `ai_model_not_available` on `guardrail.aiAgent.model` ("Model \"grok-4.6\" is
682
+ not supported. Please choose a supported model and test your agent
683
+ configuration.") — the model is a catalog row that is not offered on
684
+ platform-managed credentials. Attach an HTTP connection to the vendor's API
685
+ (token auth) before saving a catalog-provider guardrail.
662
686
  model:
663
687
  type: string
664
688
  description: |-
@@ -670,11 +694,15 @@ components:
670
694
  Required for every catalog provider — omitting it or sending an empty string
671
695
  fails the save with 422 `missing_required_field`.
672
696
  - |-
673
- The connection is checked before the model: without a `_connectionId` on the
674
- parent import a catalog-provider guardrail fails to save with 422
675
- `connection_required` whatever the model string (an unknown id included).
676
- With a `_connectionId` (BYOK) any model string saves — the server does not
677
- check it against the catalog or the vendor.
697
+ Without a `_connectionId` on the parent import the model check answers first:
698
+ a catalog-provider guardrail fails to save with 422 on `guardrail.aiAgent.model` —
699
+ `ai_model_not_available` for a catalog-listed model (catalog providers are not
700
+ offered on platform-managed credentials), `ai_model_not_in_catalog` for an id
701
+ the catalog does not list.
702
+ With a `_connectionId` (BYOK) a model the catalog does not list saves as-is —
703
+ the server does not check it against the catalog or the vendor; a
704
+ catalog-listed model is still governed by its lifecycle row (see the
705
+ schema description — a retired or switched-off model is refused on save).
678
706
  modelOptions:
679
707
  type: object
680
708
  description: |-
@@ -820,11 +848,22 @@ components:
820
848
  x-celigo-ai-guidance:
821
849
  - |-
822
850
  With platform-managed credentials (no `_connectionId` on the parent
823
- import), the model must be one the platform hosts. The save does not
824
- check this — an unlisted model saves, and the guardrail's first run fails
825
- with 422 `invalid_model`, whose message lists the hosted models. A
826
- BYOK connection bypasses the hosted list and the model string is
827
- passed through to the provider as-is.
851
+ import), the model must be a catalog row the platform offers on its own
852
+ credentials. The save checks this — a model that is not in the catalog
853
+ fails with 422 `ai_model_not_in_catalog` on
854
+ `guardrail.aiAgent.openai.model` ("Model \"gpt-4\" is not supported.
855
+ Please choose a supported model and test your agent configuration."). A
856
+ retired model is refused the same way with `ai_model_retired` — the
857
+ message names the retirement date and, when any remain eligible, the
858
+ suggested next models ("Model \"gpt-4.1-nano\" is retired on \"Oct 23,
859
+ 2026\" and cannot be used. Suggested next models: gpt-5.6-luna. Please
860
+ test and update your agent configuration.") — and so is a switched-off
861
+ one with `ai_model_disabled`; a deprecated model saves. Never swap the
862
+ model on the user's behalf — relay the message and let them choose.
863
+ - |-
864
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
865
+ through to the provider as-is; a catalog-listed model is still governed by
866
+ its lifecycle row.
828
867
  reasoning:
829
868
  type: object
830
869
  description: Controls depth of reasoning for complex tasks.
@@ -1092,10 +1131,19 @@ components:
1092
1131
  x-celigo-ai-guidance:
1093
1132
  - |-
1094
1133
  With platform-managed credentials (no `_connectionId` on the parent
1095
- import), the model must be one the platform hosts for the provider —
1096
- Gemini and Anthropic Claude both have a hosted list. The save does not
1097
- check this — an unlisted model saves, and the guardrail's first run fails
1098
- with 422 `invalid_model`, whose message lists the hosted models.
1134
+ import), the model must be a catalog row the platform offers for the
1135
+ provider on its own credentials — Gemini and Anthropic Claude each have
1136
+ their own rows. The save checks this: a model that is not in the catalog
1137
+ fails with 422 `ai_model_not_in_catalog` on
1138
+ `guardrail.aiAgent.litellm.model`, a retired one with `ai_model_retired`
1139
+ (the message names the retirement date and, when any remain eligible, the
1140
+ suggested next models), a switched-off one with `ai_model_disabled`; a
1141
+ deprecated model saves. Never
1142
+ swap the model on the user's behalf — relay the message and let them choose.
1143
+ - |-
1144
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
1145
+ through to the provider as-is; a catalog-listed model is still governed by
1146
+ its lifecycle row.
1099
1147
  temperature:
1100
1148
  type: number
1101
1149
  minimum: 0
package/dist/import.yml CHANGED
@@ -4454,7 +4454,11 @@ components:
4454
4454
  description: When true, the value is a NetSuite internal ID reference.
4455
4455
  isKey:
4456
4456
  type: boolean
4457
- description: When true, this field is a key field for matching existing sublist lines.
4457
+ description: |-
4458
+ When true, this field is a key for matching the record's existing sublist lines: a
4459
+ mapped line updates the one existing line whose key fields hold the same values. `lists`
4460
+ says which records match lines, the keys used when no field sets `isKey`, and what a
4461
+ line that matches no line, or several, does.
4458
4462
  immutable:
4459
4463
  type: boolean
4460
4464
  description: When true, this field is only set on record creation, not on updates.
@@ -4630,6 +4634,40 @@ components:
4630
4634
  description: Field mappings for each column in the sublist.
4631
4635
  description: |
4632
4636
  Sublist (line-item) mappings. Each entry maps source data to a NetSuite sublist.
4637
+
4638
+ Each mapped line updates the one existing line whose key fields hold the same values: its
4639
+ `isKey` fields, or, with none, the sublist's default key. The existing lines are the stored
4640
+ record's on an update, and on a transform (`Created From`: the body field
4641
+ `celigo_nlobjTransformId` holds the source transaction's internal id) the lines the transform
4642
+ fills in. Default keys:
4643
+
4644
+ - the item (`item`, else `itemkey` or `itemname`) on item fulfillments, item receipts,
4645
+ invoices, cash sales, cash refunds, return authorizations, bin worksheets, inbound shipment
4646
+ receipts and inventory counts, and on an assembly build's `component` sublist;
4647
+ - the applied transaction (`refnum`) on the `apply`, `credit` and `deposit` sublists of
4648
+ customer and vendor payments, credit memos, vendor credits and customer refunds;
4649
+ - `docnumber` on a deposit's `payment` sublist;
4650
+ - `vendor` and `language` on an item record's `itemvendor` and `translations` sublists.
4651
+
4652
+ A sublist with neither, such as a sales order's or purchase order's `item`, matches nothing, so
4653
+ an update adds every mapped line after the existing ones. Two matching lines fail the record
4654
+ with `MULTIPLE_LINES_WITH_SAME_KEYS` ("Multiple lines found with keys item=<value> ..."). A
4655
+ line that matches none is added as a new line, which an item fulfillment's `item` sublist
4656
+ refuses with `SSS_INVALID_SUBLIST_OPERATION`: its lines are its order's.
4657
+ x-celigo-ai-guidance:
4658
+ - |-
4659
+ To make an update replace a sublist's lines, also map the body field
4660
+ `celigo_replaceAllLines_<sublist id>` (for example `celigo_replaceAllLines_item`) to `true`:
4661
+ the existing lines no mapped line matched are removed, then the mapped lines are written. Where
4662
+ lines can't be removed it clears them instead: `itemreceive` false on an item fulfillment or
4663
+ item receipt, `apply` false on an `apply` sublist. On a sublist with no `isKey` field and no
4664
+ default key every existing line is unmatched, so all are replaced; with a default key, the lines
4665
+ it matches stay.
4666
+ - |-
4667
+ Key an update on a value each line holds once: a line id the record's create wrote to a line
4668
+ field, or, on a fulfillment, the order line's id mapped to `orderline`. Keying on the item fails
4669
+ with `MULTIPLE_LINES_WITH_SAME_KEYS` when an order holds the same item on two lines, and records
4670
+ that already hold repeated lines fail the same way once a key is set.
4633
4671
  x-celigo-agent:
4634
4672
  - mapping
4635
4673
  lookups:
@@ -9348,8 +9386,30 @@ components:
9348
9386
  A `_connectionId` on the parent import selects bring-your-own-key (BYOK)
9349
9387
  credentials. Without one, built-in providers run on platform-managed
9350
9388
  credentials; catalog providers have no platform-managed credentials, so the
9351
- save requires one — without it the agent fails to save with 422
9352
- `connection_required` on `_connectionId`.
9389
+ save requires one — without it the agent fails to save with 422 on
9390
+ `aiAgent.model`: `ai_model_not_available` for a catalog-listed model,
9391
+ `ai_model_not_in_catalog` for one the catalog does not list (the model
9392
+ catalog check answers before any `connection_required`).
9393
+
9394
+ **Model lifecycle.** Every model the platform offers — built-in and catalog
9395
+ providers alike — carries a lifecycle in the platform's model catalog:
9396
+ `active`, `deprecated` (still usable; a retirement date and suggested
9397
+ replacement models may be published), or `retired`, plus an availability
9398
+ switch. The save and every run check the configured model against it: a
9399
+ model that is not in the catalog, switched off, not offered for the agent's
9400
+ credential type, or retired (by status, or once its retirement date has
9401
+ passed) is refused — the save with 422 `ai_model_not_in_catalog`,
9402
+ `ai_model_disabled`, `ai_model_not_available`, or `ai_model_retired` on the
9403
+ model field, the run with a `Run blocked:` error carrying the same code before
9404
+ any model call (`Run blocked: model "gpt-4.1-nano" is retired on "Oct 23,
9405
+ 2026". Please choose a supported model and test your agent configuration.` —
9406
+ the run-time message names the date only; the chat route streams it as an
9407
+ `error` event). A deprecated model saves and runs until its retirement date. The
9408
+ platform never substitutes a model: once a model is retired, every save of
9409
+ the agent is refused until the model changes. Agents and guardrails on
9410
+ affected models are listed by `GET /v1/aiagents/aiModelHealth`. With a
9411
+ `_connectionId`, a model the catalog does not list is passed through to the
9412
+ vendor as-is; a catalog-listed model remains governed.
9353
9413
  required:
9354
9414
  - provider
9355
9415
  properties:
@@ -9386,11 +9446,13 @@ components:
9386
9446
  generic flat format — `model` and `modelOptions` directly on this object,
9387
9447
  never an `openai` or `litellm` block.
9388
9448
  - |-
9389
- Catalog providers are BYOK-only, and the save enforces it: without a `_connectionId`
9390
- the agent fails to save with 422 `connection_required` on `_connectionId` ("No API
9391
- key is available for provider 'xai'. Add a connection for this provider with your
9392
- API key and select it on this agent."). Attach an HTTP connection to the vendor's
9393
- API (token auth) before saving a catalog-provider agent.
9449
+ Catalog providers are BYOK-only, and the save enforces it through the model
9450
+ catalog: without a `_connectionId` the agent fails to save with 422
9451
+ `ai_model_not_available` on `aiAgent.model` ("Model \"grok-4.6\" is not
9452
+ supported. Please choose a supported model and test your agent
9453
+ configuration.") — the model is a catalog row that is not offered on
9454
+ platform-managed credentials. Attach an HTTP connection to the vendor's API
9455
+ (token auth) before saving a catalog-provider agent.
9394
9456
  model:
9395
9457
  type: string
9396
9458
  description: |-
@@ -9402,11 +9464,15 @@ components:
9402
9464
  Required for every catalog provider — omitting it or sending an empty string
9403
9465
  fails the save with 422 `missing_required_field`.
9404
9466
  - |-
9405
- The connection is checked before the model: without a `_connectionId` on the
9406
- parent import a catalog-provider agent fails to save with 422
9407
- `connection_required` whatever the model string (an unknown id included).
9408
- With a `_connectionId` (BYOK) any model string saves — the server does not
9409
- check it against the catalog or the vendor.
9467
+ Without a `_connectionId` on the parent import the model check answers first:
9468
+ a catalog-provider agent fails to save with 422 on `aiAgent.model` —
9469
+ `ai_model_not_available` for a catalog-listed model (catalog providers are not
9470
+ offered on platform-managed credentials), `ai_model_not_in_catalog` for an id
9471
+ the catalog does not list.
9472
+ With a `_connectionId` (BYOK) a model the catalog does not list saves as-is —
9473
+ the server does not check it against the catalog or the vendor; a
9474
+ catalog-listed model is still governed by its lifecycle row (see the
9475
+ schema description — a retired or switched-off model is refused on save).
9410
9476
  modelOptions:
9411
9477
  type: object
9412
9478
  description: |-
@@ -9607,11 +9673,23 @@ components:
9607
9673
  x-celigo-ai-guidance:
9608
9674
  - |-
9609
9675
  With platform-managed credentials (no `_connectionId` on the parent
9610
- import), the model must be one the platform hosts. The save does not
9611
- check this — an unlisted model saves, and the agent's first run fails
9612
- with 422 `invalid_model`, whose message lists the hosted models. A
9613
- BYOK connection bypasses the hosted list and the model string is
9614
- passed through to the provider as-is.
9676
+ import), the model must be a catalog row the platform offers on its own
9677
+ credentials. The save checks this — a model that is not in the catalog
9678
+ fails with 422 `ai_model_not_in_catalog` on `aiAgent.openai.model`
9679
+ ("Model \"gpt-4\" is not supported. Please choose a supported model and
9680
+ test your agent configuration."), and a dry-run answers the same
9681
+ `errors` with `valid: false`. A retired model is refused the same way with
9682
+ `ai_model_retired` — the message names the retirement date and, when any
9683
+ remain eligible, the suggested next models ("Model \"gpt-4.1-nano\" is
9684
+ retired on \"Oct 23, 2026\" and cannot be used. Suggested next models:
9685
+ gpt-5.6-luna. Please test and update your agent configuration.") — and so
9686
+ is a switched-off one with `ai_model_disabled`; a deprecated model saves.
9687
+ Never swap the model on the user's behalf — relay the message and let
9688
+ them choose.
9689
+ - |-
9690
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
9691
+ through to the provider as-is; a catalog-listed model is still governed by
9692
+ its lifecycle row.
9615
9693
  reasoning:
9616
9694
  type: object
9617
9695
  description: Controls depth of reasoning for complex tasks.
@@ -10040,10 +10118,18 @@ components:
10040
10118
  x-celigo-ai-guidance:
10041
10119
  - |-
10042
10120
  With platform-managed credentials (no `_connectionId` on the parent
10043
- import), the model must be one the platform hosts for the provider —
10044
- Gemini and Anthropic Claude both have a hosted list. The save does not
10045
- check this — an unlisted model saves, and the agent's first run fails
10046
- with 422 `invalid_model`, whose message lists the hosted models.
10121
+ import), the model must be a catalog row the platform offers for the
10122
+ provider on its own credentials — Gemini and Anthropic Claude each have
10123
+ their own rows. The save checks this: a model that is not in the catalog
10124
+ fails with 422 `ai_model_not_in_catalog` on `aiAgent.litellm.model`, a
10125
+ retired one with `ai_model_retired` (the message names the retirement
10126
+ date and, when any remain eligible, the suggested next models), a
10127
+ switched-off one with `ai_model_disabled`; a deprecated model saves. Never
10128
+ swap the model on the user's behalf — relay the message and let them choose.
10129
+ - |-
10130
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
10131
+ through to the provider as-is; a catalog-listed model is still governed by
10132
+ its lifecycle row.
10047
10133
  temperature:
10048
10134
  type: number
10049
10135
  minimum: 0
@@ -10783,8 +10869,30 @@ components:
10783
10869
  A `_connectionId` on the parent import selects bring-your-own-key (BYOK)
10784
10870
  credentials. Without one, built-in providers run on platform-managed
10785
10871
  credentials; catalog providers have no platform-managed credentials, so the
10786
- save requires one — without it the guardrail fails to save with 422
10787
- `connection_required` on `_connectionId`.
10872
+ save requires one — without it the guardrail fails to save with 422 on
10873
+ `guardrail.aiAgent.model`: `ai_model_not_available` for a catalog-listed model,
10874
+ `ai_model_not_in_catalog` for one the catalog does not list (the model
10875
+ catalog check answers before any `connection_required`).
10876
+
10877
+ **Model lifecycle.** Every model the platform offers carries a lifecycle in
10878
+ the platform's model catalog: `active`, `deprecated` (still usable; a
10879
+ retirement date and suggested replacement models may be published), or
10880
+ `retired`, plus an availability switch. The save and every run of an
10881
+ `ai_agent` guardrail check the configured model against it exactly as for an
10882
+ AI agent import: a model that is not in the catalog, switched off, not offered
10883
+ for the guardrail's credential type, or retired (by status, or once its
10884
+ retirement date has passed) is refused — the save with 422
10885
+ `ai_model_not_in_catalog`, `ai_model_disabled`, `ai_model_not_available`, or
10886
+ `ai_model_retired` on the model field, the run with a `Run blocked:` error
10887
+ carrying the same code before any model call (`Run blocked: model
10888
+ "gpt-4.1-nano" is retired on "Oct 23, 2026". Please choose a supported model
10889
+ and test your agent configuration.` — the run-time message names the date
10890
+ only). A deprecated model saves and runs until
10891
+ its retirement date. The platform never substitutes a model: once a model is
10892
+ retired, every save of the guardrail is refused until the model changes.
10893
+ Guardrails on affected models are listed by `GET /v1/aiagents/aiModelHealth`.
10894
+ With a `_connectionId`, a model the catalog does not list is passed through to
10895
+ the vendor as-is; a catalog-listed model remains governed.
10788
10896
  x-celigo-ai-guidance:
10789
10897
  - |-
10790
10898
  Do not send `tools` on any block. A non-empty array at `tools`, `openai.tools`,
@@ -10827,11 +10935,13 @@ components:
10827
10935
  generic flat format — `model` and `modelOptions` directly on this object,
10828
10936
  never an `openai` or `litellm` block.
10829
10937
  - |-
10830
- Catalog providers are BYOK-only, and the save enforces it: without a `_connectionId`
10831
- the guardrail fails to save with 422 `connection_required` on `_connectionId` ("No
10832
- API key is available for provider 'xai'. Add a connection for this provider with
10833
- your API key and select it on this agent."). Attach an HTTP connection to the
10834
- vendor's API (token auth) before saving a catalog-provider guardrail.
10938
+ Catalog providers are BYOK-only, and the save enforces it through the model
10939
+ catalog: without a `_connectionId` the guardrail fails to save with 422
10940
+ `ai_model_not_available` on `guardrail.aiAgent.model` ("Model \"grok-4.6\" is
10941
+ not supported. Please choose a supported model and test your agent
10942
+ configuration.") — the model is a catalog row that is not offered on
10943
+ platform-managed credentials. Attach an HTTP connection to the vendor's API
10944
+ (token auth) before saving a catalog-provider guardrail.
10835
10945
  model:
10836
10946
  type: string
10837
10947
  description: |-
@@ -10843,11 +10953,15 @@ components:
10843
10953
  Required for every catalog provider — omitting it or sending an empty string
10844
10954
  fails the save with 422 `missing_required_field`.
10845
10955
  - |-
10846
- The connection is checked before the model: without a `_connectionId` on the
10847
- parent import a catalog-provider guardrail fails to save with 422
10848
- `connection_required` whatever the model string (an unknown id included).
10849
- With a `_connectionId` (BYOK) any model string saves — the server does not
10850
- check it against the catalog or the vendor.
10956
+ Without a `_connectionId` on the parent import the model check answers first:
10957
+ a catalog-provider guardrail fails to save with 422 on `guardrail.aiAgent.model` —
10958
+ `ai_model_not_available` for a catalog-listed model (catalog providers are not
10959
+ offered on platform-managed credentials), `ai_model_not_in_catalog` for an id
10960
+ the catalog does not list.
10961
+ With a `_connectionId` (BYOK) a model the catalog does not list saves as-is —
10962
+ the server does not check it against the catalog or the vendor; a
10963
+ catalog-listed model is still governed by its lifecycle row (see the
10964
+ schema description — a retired or switched-off model is refused on save).
10851
10965
  modelOptions:
10852
10966
  type: object
10853
10967
  description: |-
@@ -10993,11 +11107,22 @@ components:
10993
11107
  x-celigo-ai-guidance:
10994
11108
  - |-
10995
11109
  With platform-managed credentials (no `_connectionId` on the parent
10996
- import), the model must be one the platform hosts. The save does not
10997
- check this — an unlisted model saves, and the guardrail's first run fails
10998
- with 422 `invalid_model`, whose message lists the hosted models. A
10999
- BYOK connection bypasses the hosted list and the model string is
11000
- passed through to the provider as-is.
11110
+ import), the model must be a catalog row the platform offers on its own
11111
+ credentials. The save checks this — a model that is not in the catalog
11112
+ fails with 422 `ai_model_not_in_catalog` on
11113
+ `guardrail.aiAgent.openai.model` ("Model \"gpt-4\" is not supported.
11114
+ Please choose a supported model and test your agent configuration."). A
11115
+ retired model is refused the same way with `ai_model_retired` — the
11116
+ message names the retirement date and, when any remain eligible, the
11117
+ suggested next models ("Model \"gpt-4.1-nano\" is retired on \"Oct 23,
11118
+ 2026\" and cannot be used. Suggested next models: gpt-5.6-luna. Please
11119
+ test and update your agent configuration.") — and so is a switched-off
11120
+ one with `ai_model_disabled`; a deprecated model saves. Never swap the
11121
+ model on the user's behalf — relay the message and let them choose.
11122
+ - |-
11123
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
11124
+ through to the provider as-is; a catalog-listed model is still governed by
11125
+ its lifecycle row.
11001
11126
  reasoning:
11002
11127
  type: object
11003
11128
  description: Controls depth of reasoning for complex tasks.
@@ -11265,10 +11390,19 @@ components:
11265
11390
  x-celigo-ai-guidance:
11266
11391
  - |-
11267
11392
  With platform-managed credentials (no `_connectionId` on the parent
11268
- import), the model must be one the platform hosts for the provider —
11269
- Gemini and Anthropic Claude both have a hosted list. The save does not
11270
- check this — an unlisted model saves, and the guardrail's first run fails
11271
- with 422 `invalid_model`, whose message lists the hosted models.
11393
+ import), the model must be a catalog row the platform offers for the
11394
+ provider on its own credentials — Gemini and Anthropic Claude each have
11395
+ their own rows. The save checks this: a model that is not in the catalog
11396
+ fails with 422 `ai_model_not_in_catalog` on
11397
+ `guardrail.aiAgent.litellm.model`, a retired one with `ai_model_retired`
11398
+ (the message names the retirement date and, when any remain eligible, the
11399
+ suggested next models), a switched-off one with `ai_model_disabled`; a
11400
+ deprecated model saves. Never
11401
+ swap the model on the user's behalf — relay the message and let them choose.
11402
+ - |-
11403
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
11404
+ through to the provider as-is; a catalog-listed model is still governed by
11405
+ its lifecycle row.
11272
11406
  temperature:
11273
11407
  type: number
11274
11408
  minimum: 0
package/dist/tool.yml CHANGED
@@ -16335,7 +16335,11 @@ components:
16335
16335
  description: When true, the value is a NetSuite internal ID reference.
16336
16336
  isKey:
16337
16337
  type: boolean
16338
- description: When true, this field is a key field for matching existing sublist lines.
16338
+ description: |-
16339
+ When true, this field is a key for matching the record's existing sublist lines: a
16340
+ mapped line updates the one existing line whose key fields hold the same values. `lists`
16341
+ says which records match lines, the keys used when no field sets `isKey`, and what a
16342
+ line that matches no line, or several, does.
16339
16343
  immutable:
16340
16344
  type: boolean
16341
16345
  description: When true, this field is only set on record creation, not on updates.
@@ -16511,6 +16515,40 @@ components:
16511
16515
  description: Field mappings for each column in the sublist.
16512
16516
  description: |
16513
16517
  Sublist (line-item) mappings. Each entry maps source data to a NetSuite sublist.
16518
+
16519
+ Each mapped line updates the one existing line whose key fields hold the same values: its
16520
+ `isKey` fields, or, with none, the sublist's default key. The existing lines are the stored
16521
+ record's on an update, and on a transform (`Created From`: the body field
16522
+ `celigo_nlobjTransformId` holds the source transaction's internal id) the lines the transform
16523
+ fills in. Default keys:
16524
+
16525
+ - the item (`item`, else `itemkey` or `itemname`) on item fulfillments, item receipts,
16526
+ invoices, cash sales, cash refunds, return authorizations, bin worksheets, inbound shipment
16527
+ receipts and inventory counts, and on an assembly build's `component` sublist;
16528
+ - the applied transaction (`refnum`) on the `apply`, `credit` and `deposit` sublists of
16529
+ customer and vendor payments, credit memos, vendor credits and customer refunds;
16530
+ - `docnumber` on a deposit's `payment` sublist;
16531
+ - `vendor` and `language` on an item record's `itemvendor` and `translations` sublists.
16532
+
16533
+ A sublist with neither, such as a sales order's or purchase order's `item`, matches nothing, so
16534
+ an update adds every mapped line after the existing ones. Two matching lines fail the record
16535
+ with `MULTIPLE_LINES_WITH_SAME_KEYS` ("Multiple lines found with keys item=<value> ..."). A
16536
+ line that matches none is added as a new line, which an item fulfillment's `item` sublist
16537
+ refuses with `SSS_INVALID_SUBLIST_OPERATION`: its lines are its order's.
16538
+ x-celigo-ai-guidance:
16539
+ - |-
16540
+ To make an update replace a sublist's lines, also map the body field
16541
+ `celigo_replaceAllLines_<sublist id>` (for example `celigo_replaceAllLines_item`) to `true`:
16542
+ the existing lines no mapped line matched are removed, then the mapped lines are written. Where
16543
+ lines can't be removed it clears them instead: `itemreceive` false on an item fulfillment or
16544
+ item receipt, `apply` false on an `apply` sublist. On a sublist with no `isKey` field and no
16545
+ default key every existing line is unmatched, so all are replaced; with a default key, the lines
16546
+ it matches stay.
16547
+ - |-
16548
+ Key an update on a value each line holds once: a line id the record's create wrote to a line
16549
+ field, or, on a fulfillment, the order line's id mapped to `orderline`. Keying on the item fails
16550
+ with `MULTIPLE_LINES_WITH_SAME_KEYS` when an order holds the same item on two lines, and records
16551
+ that already hold repeated lines fail the same way once a key is set.
16514
16552
  x-celigo-agent:
16515
16553
  - mapping
16516
16554
  lookups:
@@ -20950,8 +20988,30 @@ components:
20950
20988
  A `_connectionId` on the parent import selects bring-your-own-key (BYOK)
20951
20989
  credentials. Without one, built-in providers run on platform-managed
20952
20990
  credentials; catalog providers have no platform-managed credentials, so the
20953
- save requires one — without it the agent fails to save with 422
20954
- `connection_required` on `_connectionId`.
20991
+ save requires one — without it the agent fails to save with 422 on
20992
+ `aiAgent.model`: `ai_model_not_available` for a catalog-listed model,
20993
+ `ai_model_not_in_catalog` for one the catalog does not list (the model
20994
+ catalog check answers before any `connection_required`).
20995
+
20996
+ **Model lifecycle.** Every model the platform offers — built-in and catalog
20997
+ providers alike — carries a lifecycle in the platform's model catalog:
20998
+ `active`, `deprecated` (still usable; a retirement date and suggested
20999
+ replacement models may be published), or `retired`, plus an availability
21000
+ switch. The save and every run check the configured model against it: a
21001
+ model that is not in the catalog, switched off, not offered for the agent's
21002
+ credential type, or retired (by status, or once its retirement date has
21003
+ passed) is refused — the save with 422 `ai_model_not_in_catalog`,
21004
+ `ai_model_disabled`, `ai_model_not_available`, or `ai_model_retired` on the
21005
+ model field, the run with a `Run blocked:` error carrying the same code before
21006
+ any model call (`Run blocked: model "gpt-4.1-nano" is retired on "Oct 23,
21007
+ 2026". Please choose a supported model and test your agent configuration.` —
21008
+ the run-time message names the date only; the chat route streams it as an
21009
+ `error` event). A deprecated model saves and runs until its retirement date. The
21010
+ platform never substitutes a model: once a model is retired, every save of
21011
+ the agent is refused until the model changes. Agents and guardrails on
21012
+ affected models are listed by `GET /v1/aiagents/aiModelHealth`. With a
21013
+ `_connectionId`, a model the catalog does not list is passed through to the
21014
+ vendor as-is; a catalog-listed model remains governed.
20955
21015
  required:
20956
21016
  - provider
20957
21017
  properties:
@@ -20988,11 +21048,13 @@ components:
20988
21048
  generic flat format — `model` and `modelOptions` directly on this object,
20989
21049
  never an `openai` or `litellm` block.
20990
21050
  - |-
20991
- Catalog providers are BYOK-only, and the save enforces it: without a `_connectionId`
20992
- the agent fails to save with 422 `connection_required` on `_connectionId` ("No API
20993
- key is available for provider 'xai'. Add a connection for this provider with your
20994
- API key and select it on this agent."). Attach an HTTP connection to the vendor's
20995
- API (token auth) before saving a catalog-provider agent.
21051
+ Catalog providers are BYOK-only, and the save enforces it through the model
21052
+ catalog: without a `_connectionId` the agent fails to save with 422
21053
+ `ai_model_not_available` on `aiAgent.model` ("Model \"grok-4.6\" is not
21054
+ supported. Please choose a supported model and test your agent
21055
+ configuration.") — the model is a catalog row that is not offered on
21056
+ platform-managed credentials. Attach an HTTP connection to the vendor's API
21057
+ (token auth) before saving a catalog-provider agent.
20996
21058
  model:
20997
21059
  type: string
20998
21060
  description: |-
@@ -21004,11 +21066,15 @@ components:
21004
21066
  Required for every catalog provider — omitting it or sending an empty string
21005
21067
  fails the save with 422 `missing_required_field`.
21006
21068
  - |-
21007
- The connection is checked before the model: without a `_connectionId` on the
21008
- parent import a catalog-provider agent fails to save with 422
21009
- `connection_required` whatever the model string (an unknown id included).
21010
- With a `_connectionId` (BYOK) any model string saves — the server does not
21011
- check it against the catalog or the vendor.
21069
+ Without a `_connectionId` on the parent import the model check answers first:
21070
+ a catalog-provider agent fails to save with 422 on `aiAgent.model` —
21071
+ `ai_model_not_available` for a catalog-listed model (catalog providers are not
21072
+ offered on platform-managed credentials), `ai_model_not_in_catalog` for an id
21073
+ the catalog does not list.
21074
+ With a `_connectionId` (BYOK) a model the catalog does not list saves as-is —
21075
+ the server does not check it against the catalog or the vendor; a
21076
+ catalog-listed model is still governed by its lifecycle row (see the
21077
+ schema description — a retired or switched-off model is refused on save).
21012
21078
  modelOptions:
21013
21079
  type: object
21014
21080
  description: |-
@@ -21209,11 +21275,23 @@ components:
21209
21275
  x-celigo-ai-guidance:
21210
21276
  - |-
21211
21277
  With platform-managed credentials (no `_connectionId` on the parent
21212
- import), the model must be one the platform hosts. The save does not
21213
- check this — an unlisted model saves, and the agent's first run fails
21214
- with 422 `invalid_model`, whose message lists the hosted models. A
21215
- BYOK connection bypasses the hosted list and the model string is
21216
- passed through to the provider as-is.
21278
+ import), the model must be a catalog row the platform offers on its own
21279
+ credentials. The save checks this — a model that is not in the catalog
21280
+ fails with 422 `ai_model_not_in_catalog` on `aiAgent.openai.model`
21281
+ ("Model \"gpt-4\" is not supported. Please choose a supported model and
21282
+ test your agent configuration."), and a dry-run answers the same
21283
+ `errors` with `valid: false`. A retired model is refused the same way with
21284
+ `ai_model_retired` — the message names the retirement date and, when any
21285
+ remain eligible, the suggested next models ("Model \"gpt-4.1-nano\" is
21286
+ retired on \"Oct 23, 2026\" and cannot be used. Suggested next models:
21287
+ gpt-5.6-luna. Please test and update your agent configuration.") — and so
21288
+ is a switched-off one with `ai_model_disabled`; a deprecated model saves.
21289
+ Never swap the model on the user's behalf — relay the message and let
21290
+ them choose.
21291
+ - |-
21292
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
21293
+ through to the provider as-is; a catalog-listed model is still governed by
21294
+ its lifecycle row.
21217
21295
  reasoning:
21218
21296
  type: object
21219
21297
  description: Controls depth of reasoning for complex tasks.
@@ -21642,10 +21720,18 @@ components:
21642
21720
  x-celigo-ai-guidance:
21643
21721
  - |-
21644
21722
  With platform-managed credentials (no `_connectionId` on the parent
21645
- import), the model must be one the platform hosts for the provider —
21646
- Gemini and Anthropic Claude both have a hosted list. The save does not
21647
- check this — an unlisted model saves, and the agent's first run fails
21648
- with 422 `invalid_model`, whose message lists the hosted models.
21723
+ import), the model must be a catalog row the platform offers for the
21724
+ provider on its own credentials — Gemini and Anthropic Claude each have
21725
+ their own rows. The save checks this: a model that is not in the catalog
21726
+ fails with 422 `ai_model_not_in_catalog` on `aiAgent.litellm.model`, a
21727
+ retired one with `ai_model_retired` (the message names the retirement
21728
+ date and, when any remain eligible, the suggested next models), a
21729
+ switched-off one with `ai_model_disabled`; a deprecated model saves. Never
21730
+ swap the model on the user's behalf — relay the message and let them choose.
21731
+ - |-
21732
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
21733
+ through to the provider as-is; a catalog-listed model is still governed by
21734
+ its lifecycle row.
21649
21735
  temperature:
21650
21736
  type: number
21651
21737
  minimum: 0
@@ -22385,8 +22471,30 @@ components:
22385
22471
  A `_connectionId` on the parent import selects bring-your-own-key (BYOK)
22386
22472
  credentials. Without one, built-in providers run on platform-managed
22387
22473
  credentials; catalog providers have no platform-managed credentials, so the
22388
- save requires one — without it the guardrail fails to save with 422
22389
- `connection_required` on `_connectionId`.
22474
+ save requires one — without it the guardrail fails to save with 422 on
22475
+ `guardrail.aiAgent.model`: `ai_model_not_available` for a catalog-listed model,
22476
+ `ai_model_not_in_catalog` for one the catalog does not list (the model
22477
+ catalog check answers before any `connection_required`).
22478
+
22479
+ **Model lifecycle.** Every model the platform offers carries a lifecycle in
22480
+ the platform's model catalog: `active`, `deprecated` (still usable; a
22481
+ retirement date and suggested replacement models may be published), or
22482
+ `retired`, plus an availability switch. The save and every run of an
22483
+ `ai_agent` guardrail check the configured model against it exactly as for an
22484
+ AI agent import: a model that is not in the catalog, switched off, not offered
22485
+ for the guardrail's credential type, or retired (by status, or once its
22486
+ retirement date has passed) is refused — the save with 422
22487
+ `ai_model_not_in_catalog`, `ai_model_disabled`, `ai_model_not_available`, or
22488
+ `ai_model_retired` on the model field, the run with a `Run blocked:` error
22489
+ carrying the same code before any model call (`Run blocked: model
22490
+ "gpt-4.1-nano" is retired on "Oct 23, 2026". Please choose a supported model
22491
+ and test your agent configuration.` — the run-time message names the date
22492
+ only). A deprecated model saves and runs until
22493
+ its retirement date. The platform never substitutes a model: once a model is
22494
+ retired, every save of the guardrail is refused until the model changes.
22495
+ Guardrails on affected models are listed by `GET /v1/aiagents/aiModelHealth`.
22496
+ With a `_connectionId`, a model the catalog does not list is passed through to
22497
+ the vendor as-is; a catalog-listed model remains governed.
22390
22498
  x-celigo-ai-guidance:
22391
22499
  - |-
22392
22500
  Do not send `tools` on any block. A non-empty array at `tools`, `openai.tools`,
@@ -22429,11 +22537,13 @@ components:
22429
22537
  generic flat format — `model` and `modelOptions` directly on this object,
22430
22538
  never an `openai` or `litellm` block.
22431
22539
  - |-
22432
- Catalog providers are BYOK-only, and the save enforces it: without a `_connectionId`
22433
- the guardrail fails to save with 422 `connection_required` on `_connectionId` ("No
22434
- API key is available for provider 'xai'. Add a connection for this provider with
22435
- your API key and select it on this agent."). Attach an HTTP connection to the
22436
- vendor's API (token auth) before saving a catalog-provider guardrail.
22540
+ Catalog providers are BYOK-only, and the save enforces it through the model
22541
+ catalog: without a `_connectionId` the guardrail fails to save with 422
22542
+ `ai_model_not_available` on `guardrail.aiAgent.model` ("Model \"grok-4.6\" is
22543
+ not supported. Please choose a supported model and test your agent
22544
+ configuration.") — the model is a catalog row that is not offered on
22545
+ platform-managed credentials. Attach an HTTP connection to the vendor's API
22546
+ (token auth) before saving a catalog-provider guardrail.
22437
22547
  model:
22438
22548
  type: string
22439
22549
  description: |-
@@ -22445,11 +22555,15 @@ components:
22445
22555
  Required for every catalog provider — omitting it or sending an empty string
22446
22556
  fails the save with 422 `missing_required_field`.
22447
22557
  - |-
22448
- The connection is checked before the model: without a `_connectionId` on the
22449
- parent import a catalog-provider guardrail fails to save with 422
22450
- `connection_required` whatever the model string (an unknown id included).
22451
- With a `_connectionId` (BYOK) any model string saves — the server does not
22452
- check it against the catalog or the vendor.
22558
+ Without a `_connectionId` on the parent import the model check answers first:
22559
+ a catalog-provider guardrail fails to save with 422 on `guardrail.aiAgent.model` —
22560
+ `ai_model_not_available` for a catalog-listed model (catalog providers are not
22561
+ offered on platform-managed credentials), `ai_model_not_in_catalog` for an id
22562
+ the catalog does not list.
22563
+ With a `_connectionId` (BYOK) a model the catalog does not list saves as-is —
22564
+ the server does not check it against the catalog or the vendor; a
22565
+ catalog-listed model is still governed by its lifecycle row (see the
22566
+ schema description — a retired or switched-off model is refused on save).
22453
22567
  modelOptions:
22454
22568
  type: object
22455
22569
  description: |-
@@ -22595,11 +22709,22 @@ components:
22595
22709
  x-celigo-ai-guidance:
22596
22710
  - |-
22597
22711
  With platform-managed credentials (no `_connectionId` on the parent
22598
- import), the model must be one the platform hosts. The save does not
22599
- check this — an unlisted model saves, and the guardrail's first run fails
22600
- with 422 `invalid_model`, whose message lists the hosted models. A
22601
- BYOK connection bypasses the hosted list and the model string is
22602
- passed through to the provider as-is.
22712
+ import), the model must be a catalog row the platform offers on its own
22713
+ credentials. The save checks this — a model that is not in the catalog
22714
+ fails with 422 `ai_model_not_in_catalog` on
22715
+ `guardrail.aiAgent.openai.model` ("Model \"gpt-4\" is not supported.
22716
+ Please choose a supported model and test your agent configuration."). A
22717
+ retired model is refused the same way with `ai_model_retired` — the
22718
+ message names the retirement date and, when any remain eligible, the
22719
+ suggested next models ("Model \"gpt-4.1-nano\" is retired on \"Oct 23,
22720
+ 2026\" and cannot be used. Suggested next models: gpt-5.6-luna. Please
22721
+ test and update your agent configuration.") — and so is a switched-off
22722
+ one with `ai_model_disabled`; a deprecated model saves. Never swap the
22723
+ model on the user's behalf — relay the message and let them choose.
22724
+ - |-
22725
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
22726
+ through to the provider as-is; a catalog-listed model is still governed by
22727
+ its lifecycle row.
22603
22728
  reasoning:
22604
22729
  type: object
22605
22730
  description: Controls depth of reasoning for complex tasks.
@@ -22867,10 +22992,19 @@ components:
22867
22992
  x-celigo-ai-guidance:
22868
22993
  - |-
22869
22994
  With platform-managed credentials (no `_connectionId` on the parent
22870
- import), the model must be one the platform hosts for the provider —
22871
- Gemini and Anthropic Claude both have a hosted list. The save does not
22872
- check this — an unlisted model saves, and the guardrail's first run fails
22873
- with 422 `invalid_model`, whose message lists the hosted models.
22995
+ import), the model must be a catalog row the platform offers for the
22996
+ provider on its own credentials — Gemini and Anthropic Claude each have
22997
+ their own rows. The save checks this: a model that is not in the catalog
22998
+ fails with 422 `ai_model_not_in_catalog` on
22999
+ `guardrail.aiAgent.litellm.model`, a retired one with `ai_model_retired`
23000
+ (the message names the retirement date and, when any remain eligible, the
23001
+ suggested next models), a switched-off one with `ai_model_disabled`; a
23002
+ deprecated model saves. Never
23003
+ swap the model on the user's behalf — relay the message and let them choose.
23004
+ - |-
23005
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
23006
+ through to the provider as-is; a catalog-listed model is still governed by
23007
+ its lifecycle row.
22874
23008
  temperature:
22875
23009
  type: number
22876
23010
  minimum: 0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celigo/api-specs",
3
- "version": "0.2.182",
3
+ "version": "0.2.184",
4
4
  "private": false,
5
5
  "description": "Public OpenAPI bundles (dist/) and the celigo-cli lint schema pack (schemas.json).",
6
6
  "keywords": [
package/schemas.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "provenance": {
3
3
  "repo": "celigo/integrator-api-specs",
4
- "iasCommit": "1fdd11e5",
4
+ "iasCommit": "c6451242",
5
5
  "generatedAt": "2026-10-23"
6
6
  },
7
7
  "roots": {