@fourier-labs/harbour-contracts 0.97.0 → 0.99.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/contract-release.json +36 -36
- package/dist/gen-ts/ai-governance-decision.d.ts +1 -0
- package/dist/gen-ts/ai-policy-snapshot.d.ts +7 -3
- package/dist/gen-ts/ai-pricing-revision.d.ts +1 -1
- package/dist/gen-ts/ai-runtime-contract.d.ts +1 -0
- package/dist/gen-ts/ai-trace-event.d.ts +2 -2
- package/dist/gen-ts/app-integrations-declaration.d.ts +1 -0
- package/dist/gen-ts/binding-classification-subject.d.ts +1 -1
- package/dist/gen-ts/contract-release.d.ts +6 -6
- package/dist/gen-ts/contract-release.js +6 -6
- package/dist/gen-ts/data-grant-v2.d.ts +4 -4
- package/dist/gen-ts/deploy-request.d.ts +2 -2
- package/dist/gen-ts/integration-execute-input-rules.d.ts +12 -0
- package/dist/gen-ts/integration-execute-input-rules.js +6 -0
- package/dist/gen-ts/integration-execute-request.d.ts +1 -1
- package/dist/gen-ts/integration-operations.d.ts +7 -0
- package/dist/gen-ts/integration-operations.js +9 -0
- package/dist/gen-ts/promotion-request.d.ts +2 -2
- package/dist/gen-ts/saas-connection.d.ts +6 -6
- package/dist/gen-ts/sanitized-binding-evidence.d.ts +1 -1
- package/dist/resolver/index.d.ts +2 -1
- package/dist/resolver/index.js +6 -6
- package/gen-ts/ai-governance-decision.ts +1 -0
- package/gen-ts/ai-policy-snapshot.ts +34 -3
- package/gen-ts/ai-pricing-revision.ts +11 -1
- package/gen-ts/ai-runtime-contract.ts +1 -0
- package/gen-ts/ai-trace-event.ts +22 -2
- package/gen-ts/app-integrations-declaration.ts +1 -0
- package/gen-ts/binding-classification-subject.ts +1 -1
- package/gen-ts/contract-release.ts +6 -6
- package/gen-ts/data-grant-v2.ts +4 -2
- package/gen-ts/deploy-request.ts +4 -2
- package/gen-ts/integration-execute-input-rules.ts +6 -0
- package/gen-ts/integration-execute-request.ts +1 -0
- package/gen-ts/integration-operations.ts +9 -0
- package/gen-ts/promotion-request.ts +4 -2
- package/gen-ts/saas-connection.ts +6 -3
- package/gen-ts/sanitized-binding-evidence.ts +1 -1
- package/package.json +1 -1
- package/schema/ai-governance-decision.schema.json +2 -1
- package/schema/ai-policy-snapshot.schema.json +5 -4
- package/schema/ai-pricing-revision.schema.json +1 -1
- package/schema/ai-runtime-contract.schema.json +2 -1
- package/schema/ai-trace-event.schema.json +2 -2
- package/schema/app-integrations-declaration.schema.json +14 -0
- package/schema/binding-classification-subject.schema.json +1 -1
- package/schema/data-grant-v2.schema.json +2 -2
- package/schema/integration-execute-request.schema.json +44 -0
- package/schema/saas-connection.schema.json +3 -3
- package/schema/sanitized-binding-evidence.schema.json +1 -1
package/dist/resolver/index.js
CHANGED
|
@@ -49,9 +49,9 @@ const SECRET_OUTPUT_GUARDRAIL = { ruleId: "platform.secret.output", detectorId:
|
|
|
49
49
|
const MAX_REQUEST_BYTES = 20 * 1024 * 1024;
|
|
50
50
|
export const AI_PLATFORM_BASELINE = {
|
|
51
51
|
schema: "harbour.ai-platform-baseline/1.0",
|
|
52
|
-
artifactVersion: "1.
|
|
52
|
+
artifactVersion: "1.2.0",
|
|
53
53
|
controls: {
|
|
54
|
-
permittedProviderTypes: ["anthropic", "gemini", "higgsfield", "openai", "openrouter"],
|
|
54
|
+
permittedProviderTypes: ["anthropic", "datalab", "gemini", "higgsfield", "mistral", "openai", "openrouter"],
|
|
55
55
|
requireApprovedModels: false,
|
|
56
56
|
maxCaptureMode: "BEST_EFFORT",
|
|
57
57
|
maxRetentionDays: 90,
|
|
@@ -70,11 +70,11 @@ export const AI_PLATFORM_BASELINE = {
|
|
|
70
70
|
* and are versioned by `artifactVersion` plus `RESOLVER_VERSION`. */
|
|
71
71
|
export const AI_CLASSIFICATION_MINIMUMS = {
|
|
72
72
|
schema: "harbour.ai-classification-minimums/1.0",
|
|
73
|
-
artifactVersion: "1.
|
|
73
|
+
artifactVersion: "1.2.0",
|
|
74
74
|
defaultClassification: "Yellow",
|
|
75
75
|
classes: {
|
|
76
76
|
Green: {
|
|
77
|
-
permittedProviderTypes: ["anthropic", "gemini", "higgsfield", "openai", "openrouter"],
|
|
77
|
+
permittedProviderTypes: ["anthropic", "datalab", "gemini", "higgsfield", "mistral", "openai", "openrouter"],
|
|
78
78
|
requireApprovedModels: false,
|
|
79
79
|
maxCaptureMode: "BEST_EFFORT",
|
|
80
80
|
maxRetentionDays: 90,
|
|
@@ -88,7 +88,7 @@ export const AI_CLASSIFICATION_MINIMUMS = {
|
|
|
88
88
|
requiredGuardrails: [],
|
|
89
89
|
},
|
|
90
90
|
Yellow: {
|
|
91
|
-
permittedProviderTypes: ["anthropic", "gemini", "higgsfield", "openai", "openrouter"],
|
|
91
|
+
permittedProviderTypes: ["anthropic", "datalab", "gemini", "higgsfield", "mistral", "openai", "openrouter"],
|
|
92
92
|
requireApprovedModels: true,
|
|
93
93
|
maxCaptureMode: "BEST_EFFORT",
|
|
94
94
|
maxRetentionDays: 60,
|
|
@@ -276,7 +276,7 @@ export function mergeKeyedFamily(tenant, application, rules) {
|
|
|
276
276
|
* another route. `{ ...tenant, ...application }` made the application the
|
|
277
277
|
* authority for both. */
|
|
278
278
|
export function mergeModelAliases(tenant, application) {
|
|
279
|
-
const merged = ["generation", "embeddings", "transcription", "translation", "speech", "image", "video", "realtime"].map(capability => {
|
|
279
|
+
const merged = ["generation", "embeddings", "transcription", "translation", "speech", "image", "video", "realtime", "document"].map(capability => {
|
|
280
280
|
const assigned = application[capability];
|
|
281
281
|
if (assigned === undefined)
|
|
282
282
|
return {};
|
|
@@ -94,7 +94,17 @@ export interface AiPolicyClassificationMinimum {
|
|
|
94
94
|
}
|
|
95
95
|
export interface AiPolicyProvider {
|
|
96
96
|
id: AiPolicyIdentifier;
|
|
97
|
-
provider:
|
|
97
|
+
provider:
|
|
98
|
+
| 'openai'
|
|
99
|
+
| 'anthropic'
|
|
100
|
+
| 'gemini'
|
|
101
|
+
| 'openrouter'
|
|
102
|
+
| 'deepseek'
|
|
103
|
+
| 'elevenlabs'
|
|
104
|
+
| 'deepgram'
|
|
105
|
+
| 'higgsfield'
|
|
106
|
+
| 'mistral'
|
|
107
|
+
| 'datalab';
|
|
98
108
|
baseUrl?: string;
|
|
99
109
|
credentialSecretRef: string;
|
|
100
110
|
enabled: boolean;
|
|
@@ -108,7 +118,15 @@ export interface AiPolicyModel {
|
|
|
108
118
|
* @maxItems 2
|
|
109
119
|
*/
|
|
110
120
|
capabilities: (
|
|
111
|
-
|
|
121
|
+
| 'generation'
|
|
122
|
+
| 'embeddings'
|
|
123
|
+
| 'transcription'
|
|
124
|
+
| 'translation'
|
|
125
|
+
| 'speech'
|
|
126
|
+
| 'image'
|
|
127
|
+
| 'video'
|
|
128
|
+
| 'realtime'
|
|
129
|
+
| 'document'
|
|
112
130
|
)[];
|
|
113
131
|
approved: boolean;
|
|
114
132
|
pricing: AiPolicyPricing;
|
|
@@ -144,12 +162,25 @@ export interface AiPolicyPricing {
|
|
|
144
162
|
audio_characters?: number;
|
|
145
163
|
image_count?: number;
|
|
146
164
|
video_seconds?: number;
|
|
165
|
+
/**
|
|
166
|
+
* Price per page read by document OCR (ADR 0043).
|
|
167
|
+
*/
|
|
168
|
+
document_pages?: number;
|
|
147
169
|
};
|
|
148
170
|
}
|
|
149
171
|
export interface AiPolicyRoute {
|
|
150
172
|
alias: AiPolicyIdentifier;
|
|
151
173
|
version: number;
|
|
152
|
-
capability:
|
|
174
|
+
capability:
|
|
175
|
+
| 'generation'
|
|
176
|
+
| 'embeddings'
|
|
177
|
+
| 'transcription'
|
|
178
|
+
| 'translation'
|
|
179
|
+
| 'speech'
|
|
180
|
+
| 'image'
|
|
181
|
+
| 'video'
|
|
182
|
+
| 'realtime'
|
|
183
|
+
| 'document';
|
|
153
184
|
/**
|
|
154
185
|
* @minItems 1
|
|
155
186
|
* @maxItems 16
|
|
@@ -10,7 +10,17 @@ export type AiPricingDigest = string;
|
|
|
10
10
|
export interface AiPricingRevision {
|
|
11
11
|
schema: 'harbour.ai-pricing-revision/2.0';
|
|
12
12
|
revisionId: AiPricingIdentifier;
|
|
13
|
-
provider:
|
|
13
|
+
provider:
|
|
14
|
+
| 'openai'
|
|
15
|
+
| 'anthropic'
|
|
16
|
+
| 'gemini'
|
|
17
|
+
| 'openrouter'
|
|
18
|
+
| 'deepseek'
|
|
19
|
+
| 'elevenlabs'
|
|
20
|
+
| 'deepgram'
|
|
21
|
+
| 'higgsfield'
|
|
22
|
+
| 'mistral'
|
|
23
|
+
| 'datalab';
|
|
14
24
|
providerModel: string;
|
|
15
25
|
region?: AiPricingIdentifier;
|
|
16
26
|
currency: 'USD';
|
package/gen-ts/ai-trace-event.ts
CHANGED
|
@@ -17,7 +17,17 @@ export type AiTraceEvent = {
|
|
|
17
17
|
routeRevision?: string;
|
|
18
18
|
requestedModel?: string;
|
|
19
19
|
governedModelAlias?: string;
|
|
20
|
-
provider?:
|
|
20
|
+
provider?:
|
|
21
|
+
| 'openai'
|
|
22
|
+
| 'anthropic'
|
|
23
|
+
| 'gemini'
|
|
24
|
+
| 'openrouter'
|
|
25
|
+
| 'deepseek'
|
|
26
|
+
| 'elevenlabs'
|
|
27
|
+
| 'deepgram'
|
|
28
|
+
| 'higgsfield'
|
|
29
|
+
| 'mistral'
|
|
30
|
+
| 'datalab';
|
|
21
31
|
providerModel?: string;
|
|
22
32
|
outcome: 'succeeded' | 'blocked' | 'failed' | 'cancelled';
|
|
23
33
|
/**
|
|
@@ -48,7 +58,17 @@ export type AiTraceIdentifier = string;
|
|
|
48
58
|
export type AiTraceDigest = string;
|
|
49
59
|
export type AiTraceAttempt = {
|
|
50
60
|
attempt: number;
|
|
51
|
-
provider:
|
|
61
|
+
provider:
|
|
62
|
+
| 'openai'
|
|
63
|
+
| 'anthropic'
|
|
64
|
+
| 'gemini'
|
|
65
|
+
| 'openrouter'
|
|
66
|
+
| 'deepseek'
|
|
67
|
+
| 'elevenlabs'
|
|
68
|
+
| 'deepgram'
|
|
69
|
+
| 'higgsfield'
|
|
70
|
+
| 'mistral'
|
|
71
|
+
| 'datalab';
|
|
52
72
|
providerModel: string;
|
|
53
73
|
priceRevision: AiTraceIdentifier;
|
|
54
74
|
outcome: 'succeeded' | 'failed' | 'timed_out' | 'cancelled';
|
|
@@ -97,6 +97,7 @@ export type DeclaredConnection = {
|
|
|
97
97
|
'zohobooks.salesorder.list'?: UserModeChannelOperation;
|
|
98
98
|
'zohobooks.salesorder.read'?: UserModeChannelOperation;
|
|
99
99
|
'zohobooks.invoice.reviseDraft'?: UserModeChannelOperation;
|
|
100
|
+
'zohobooks.invoice.markSent'?: UserModeChannelOperation;
|
|
100
101
|
'zohobooks.creditnote.create'?: UserModeChannelOperation;
|
|
101
102
|
'zohobooks.creditnote.read'?: UserModeChannelOperation;
|
|
102
103
|
};
|
|
@@ -19,7 +19,7 @@ export type BindingClassificationEntry = {
|
|
|
19
19
|
requestedAiMappingId?: BindingClassificationIdentifier;
|
|
20
20
|
};
|
|
21
21
|
export type BindingClassificationProviderId =
|
|
22
|
-
'openai' | 'anthropic' | 'gemini' | 'openrouter' | 'deepseek' | 'deepgram' | 'higgsfield';
|
|
22
|
+
'openai' | 'anthropic' | 'gemini' | 'openrouter' | 'deepseek' | 'deepgram' | 'higgsfield' | 'mistral' | 'datalab';
|
|
23
23
|
/**
|
|
24
24
|
* Closed current credential category. Add a reviewed contract version before supporting another credential mechanism.
|
|
25
25
|
*/
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// Code generated by tools/gen/gen.mjs from schema/*.json. DO NOT EDIT.
|
|
3
3
|
|
|
4
|
-
export const ContractRepositoryVersion = "0.
|
|
5
|
-
export const ContractPublishVersion = "0.
|
|
6
|
-
export const ContractPublishTag = "v0.
|
|
7
|
-
export const ContractSchemasDigest = "sha256:
|
|
4
|
+
export const ContractRepositoryVersion = "0.99.0.0" as const;
|
|
5
|
+
export const ContractPublishVersion = "0.99.0" as const;
|
|
6
|
+
export const ContractPublishTag = "v0.99.0" as const;
|
|
7
|
+
export const ContractSchemasDigest = "sha256:cc0771713c8d57b755587400cf5f7145cfd835a8d78647f105b305dbbc4d28cb" as const;
|
|
8
8
|
export const ContractAiFixturesDigest = "sha256:edac31c92e146ca1c40130f2fb5649db82e24b8cd1ac758153b90612052fddb6" as const;
|
|
9
|
-
export const ContractGeneratedGoDigest = "sha256:
|
|
10
|
-
export const ContractGeneratedTypeScriptDigest = "sha256:
|
|
9
|
+
export const ContractGeneratedGoDigest = "sha256:907ba331a26386dd7b2b6f651988ee441da125b1949f287e376d0551626afd93" as const;
|
|
10
|
+
export const ContractGeneratedTypeScriptDigest = "sha256:a13398995bbac4f876d8b39cbb40cadcc8d166b6cc582975c13f8322d08632d9" as const;
|
package/gen-ts/data-grant-v2.ts
CHANGED
|
@@ -35,7 +35,7 @@ export interface DataGrantV2 {
|
|
|
35
35
|
/**
|
|
36
36
|
* Approved operations; each must match this grant's mode. Empty until the first approval. At most the seventy-eight SaaS operations (0.86.0: eleven Slack and Gmail, eleven Basecamp, nine SharePoint, two phone, forty-five Google Workspace and Microsoft 365); a database grant holds up to two (warehouse.view.read, warehouse.table.append).
|
|
37
37
|
*
|
|
38
|
-
* @maxItems
|
|
38
|
+
* @maxItems 92
|
|
39
39
|
*/
|
|
40
40
|
operations: (
|
|
41
41
|
| 'slack.channel.history'
|
|
@@ -130,6 +130,7 @@ export interface DataGrantV2 {
|
|
|
130
130
|
| 'zohobooks.salesorder.list'
|
|
131
131
|
| 'zohobooks.salesorder.read'
|
|
132
132
|
| 'zohobooks.invoice.reviseDraft'
|
|
133
|
+
| 'zohobooks.invoice.markSent'
|
|
133
134
|
| 'zohobooks.creditnote.create'
|
|
134
135
|
| 'zohobooks.creditnote.read'
|
|
135
136
|
)[];
|
|
@@ -202,7 +203,7 @@ export interface IntegrationResource {
|
|
|
202
203
|
*/
|
|
203
204
|
export interface ReviewedIntegrationScope {
|
|
204
205
|
/**
|
|
205
|
-
* @maxItems
|
|
206
|
+
* @maxItems 92
|
|
206
207
|
*/
|
|
207
208
|
operations: (
|
|
208
209
|
| 'slack.channel.history'
|
|
@@ -297,6 +298,7 @@ export interface ReviewedIntegrationScope {
|
|
|
297
298
|
| 'zohobooks.salesorder.list'
|
|
298
299
|
| 'zohobooks.salesorder.read'
|
|
299
300
|
| 'zohobooks.invoice.reviseDraft'
|
|
301
|
+
| 'zohobooks.invoice.markSent'
|
|
300
302
|
| 'zohobooks.creditnote.create'
|
|
301
303
|
| 'zohobooks.creditnote.read'
|
|
302
304
|
)[];
|
package/gen-ts/deploy-request.ts
CHANGED
|
@@ -24,7 +24,8 @@ export type DeployRequestEnvironmentBinding1 = {
|
|
|
24
24
|
type BindingClassificationEntry = {
|
|
25
25
|
kind: 'configuration' | 'secret' | 'provider_credential';
|
|
26
26
|
confidence: 'high' | 'low';
|
|
27
|
-
providerId?:
|
|
27
|
+
providerId?:
|
|
28
|
+
'openai' | 'anthropic' | 'gemini' | 'openrouter' | 'deepseek' | 'deepgram' | 'higgsfield' | 'mistral' | 'datalab';
|
|
28
29
|
/**
|
|
29
30
|
* Closed current credential category. Add a reviewed contract version before supporting another credential mechanism.
|
|
30
31
|
*/
|
|
@@ -148,5 +149,6 @@ interface BindingClassificationSubject {
|
|
|
148
149
|
}
|
|
149
150
|
interface BindingClassificationAiMapping {
|
|
150
151
|
mappingVersion: string;
|
|
151
|
-
providerId:
|
|
152
|
+
providerId:
|
|
153
|
+
'openai' | 'anthropic' | 'gemini' | 'openrouter' | 'deepseek' | 'deepgram' | 'higgsfield' | 'mistral' | 'datalab';
|
|
152
154
|
}
|
|
@@ -797,6 +797,12 @@ export const IntegrationExecuteInputRules = {
|
|
|
797
797
|
} },
|
|
798
798
|
},
|
|
799
799
|
},
|
|
800
|
+
"zohobooks.invoice.markSent": {
|
|
801
|
+
idempotencyKey: true,
|
|
802
|
+
fields: {
|
|
803
|
+
documentId: { kind: "string", required: true, minLength: 0, maxLength: 32, pattern: "^[0-9]{1,32}$" },
|
|
804
|
+
},
|
|
805
|
+
},
|
|
800
806
|
"zohobooks.creditnote.create": {
|
|
801
807
|
idempotencyKey: true,
|
|
802
808
|
fields: {
|
|
@@ -105,6 +105,7 @@ export type IntegrationExecuteRequest = {
|
|
|
105
105
|
| 'zohobooks.salesorder.list'
|
|
106
106
|
| 'zohobooks.salesorder.read'
|
|
107
107
|
| 'zohobooks.invoice.reviseDraft'
|
|
108
|
+
| 'zohobooks.invoice.markSent'
|
|
108
109
|
| 'zohobooks.creditnote.create'
|
|
109
110
|
| 'zohobooks.creditnote.read';
|
|
110
111
|
/**
|
|
@@ -835,6 +835,15 @@ export const IntegrationOperations = {
|
|
|
835
835
|
"declaredMode": false,
|
|
836
836
|
"idempotencyKey": true
|
|
837
837
|
},
|
|
838
|
+
"zohobooks.invoice.markSent": {
|
|
839
|
+
"kind": "saas",
|
|
840
|
+
"identities": [
|
|
841
|
+
"user"
|
|
842
|
+
],
|
|
843
|
+
"readOnly": false,
|
|
844
|
+
"declaredMode": false,
|
|
845
|
+
"idempotencyKey": true
|
|
846
|
+
},
|
|
838
847
|
"zohobooks.creditnote.create": {
|
|
839
848
|
"kind": "saas",
|
|
840
849
|
"identities": [
|
|
@@ -24,7 +24,8 @@ export type PromotionRequestSecretBinding1 = {
|
|
|
24
24
|
type BindingClassificationEntry = {
|
|
25
25
|
kind: 'configuration' | 'secret' | 'provider_credential';
|
|
26
26
|
confidence: 'high' | 'low';
|
|
27
|
-
providerId?:
|
|
27
|
+
providerId?:
|
|
28
|
+
'openai' | 'anthropic' | 'gemini' | 'openrouter' | 'deepseek' | 'deepgram' | 'higgsfield' | 'mistral' | 'datalab';
|
|
28
29
|
/**
|
|
29
30
|
* Closed current credential category. Add a reviewed contract version before supporting another credential mechanism.
|
|
30
31
|
*/
|
|
@@ -98,5 +99,6 @@ interface BindingClassificationSubject {
|
|
|
98
99
|
}
|
|
99
100
|
interface BindingClassificationAiMapping {
|
|
100
101
|
mappingVersion: string;
|
|
101
|
-
providerId:
|
|
102
|
+
providerId:
|
|
103
|
+
'openai' | 'anthropic' | 'gemini' | 'openrouter' | 'deepseek' | 'deepgram' | 'higgsfield' | 'mistral' | 'datalab';
|
|
102
104
|
}
|
|
@@ -73,7 +73,7 @@ export interface SaasConnection {
|
|
|
73
73
|
* Operations IT allows apps to request on this connection: the provider's own SaaS operations (Slack: slack.channel.history, slack.message.post, slack.message.update, slack.message.delete, slack.dm.send, slack.user.lookup; Gmail: gmail.thread.list, gmail.thread.read, gmail.message.read, gmail.message.send, gmail.attachment.read; Basecamp (0.76.0): basecamp.project.list, basecamp.todolist.list, basecamp.todo.list, basecamp.todo.create, basecamp.todo.complete, basecamp.message.list, basecamp.message.post, basecamp.comment.list, basecamp.comment.post, basecamp.campfire.post, basecamp.people.list; SharePoint (0.78.0): sharepoint.list.list, sharepoint.item.list, sharepoint.item.create, sharepoint.item.update, sharepoint.drive.list, sharepoint.file.list, sharepoint.file.search, sharepoint.file.read, sharepoint.file.upload; Google Workspace and Microsoft 365 (0.86.0): the calendar.*, drive.*, docs.*, sheets.*, outlook.*, onedrive.*, excel.* and teams.* operations of the connection's provider). Never warehouse.view.read. Phone (0.82.0): phone.sms.list; 0.83.0 adds phone.number.get. Seventy-eight SaaS operations in all since 0.86.0.
|
|
74
74
|
*
|
|
75
75
|
* @minItems 1
|
|
76
|
-
* @maxItems
|
|
76
|
+
* @maxItems 92
|
|
77
77
|
*/
|
|
78
78
|
operations: (
|
|
79
79
|
| 'slack.channel.history'
|
|
@@ -168,13 +168,14 @@ export interface SaasConnection {
|
|
|
168
168
|
| 'zohobooks.salesorder.list'
|
|
169
169
|
| 'zohobooks.salesorder.read'
|
|
170
170
|
| 'zohobooks.invoice.reviseDraft'
|
|
171
|
+
| 'zohobooks.invoice.markSent'
|
|
171
172
|
| 'zohobooks.creditnote.create'
|
|
172
173
|
| 'zohobooks.creditnote.read'
|
|
173
174
|
)[];
|
|
174
175
|
/**
|
|
175
176
|
* Explicit user-mode operations eligible for automatic app access, subject to the connection operation ceiling and personal consent. Empty means review all; absent inherits company defaults or the existing userModeApproval migration rule. Governance validates provider and mode compatibility. Background execution still requires personal background consent, not a separate admin grant.
|
|
176
177
|
*
|
|
177
|
-
* @maxItems
|
|
178
|
+
* @maxItems 92
|
|
178
179
|
*/
|
|
179
180
|
automaticUserOperations?: (
|
|
180
181
|
| 'slack.channel.history'
|
|
@@ -269,6 +270,7 @@ export interface SaasConnection {
|
|
|
269
270
|
| 'zohobooks.salesorder.list'
|
|
270
271
|
| 'zohobooks.salesorder.read'
|
|
271
272
|
| 'zohobooks.invoice.reviseDraft'
|
|
273
|
+
| 'zohobooks.invoice.markSent'
|
|
272
274
|
| 'zohobooks.creditnote.create'
|
|
273
275
|
| 'zohobooks.creditnote.read'
|
|
274
276
|
)[];
|
|
@@ -376,7 +378,7 @@ export interface ReusableSaasAccess {
|
|
|
376
378
|
mode: 'app' | 'user';
|
|
377
379
|
/**
|
|
378
380
|
* @minItems 1
|
|
379
|
-
* @maxItems
|
|
381
|
+
* @maxItems 92
|
|
380
382
|
*/
|
|
381
383
|
operations: (
|
|
382
384
|
| 'slack.channel.history'
|
|
@@ -471,6 +473,7 @@ export interface ReusableSaasAccess {
|
|
|
471
473
|
| 'zohobooks.salesorder.list'
|
|
472
474
|
| 'zohobooks.salesorder.read'
|
|
473
475
|
| 'zohobooks.invoice.reviseDraft'
|
|
476
|
+
| 'zohobooks.invoice.markSent'
|
|
474
477
|
| 'zohobooks.creditnote.create'
|
|
475
478
|
| 'zohobooks.creditnote.read'
|
|
476
479
|
)[];
|
|
@@ -17,7 +17,7 @@ export type SanitizedRuntimeBinding = {
|
|
|
17
17
|
secretRef?: string;
|
|
18
18
|
};
|
|
19
19
|
export type SanitizedBindingProviderId =
|
|
20
|
-
'openai' | 'anthropic' | 'gemini' | 'openrouter' | 'deepseek' | 'deepgram' | 'higgsfield';
|
|
20
|
+
'openai' | 'anthropic' | 'gemini' | 'openrouter' | 'deepseek' | 'deepgram' | 'higgsfield' | 'mistral' | 'datalab';
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* Immutable DCP allocation receipt and sanitized runtime-binding set for one exact allocated version and normalized source revision. DCP persists this evidence atomically with version admission before publish or provisioning. classificationDigest chains to the caller's pre-allocation BindingClassificationSubject; bindings contain only approved configuration, app secrets or approved data-source credential references and never an AI-mapping-owned provider credential.
|
package/package.json
CHANGED
|
@@ -71,7 +71,8 @@
|
|
|
71
71
|
"speech": { "type": "string", "minLength": 3, "maxLength": 160 },
|
|
72
72
|
"image": { "type": "string", "minLength": 3, "maxLength": 160 },
|
|
73
73
|
"video": { "type": "string", "minLength": 3, "maxLength": 160 },
|
|
74
|
-
"realtime": { "type": "string", "minLength": 3, "maxLength": 160 }
|
|
74
|
+
"realtime": { "type": "string", "minLength": 3, "maxLength": 160 },
|
|
75
|
+
"document": { "type": "string", "minLength": 3, "maxLength": 160 }
|
|
75
76
|
}
|
|
76
77
|
},
|
|
77
78
|
"policyDigest": { "$ref": "#/definitions/AiDecisionDigest" },
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
"required": ["id", "provider", "credentialSecretRef", "enabled"],
|
|
110
110
|
"properties": {
|
|
111
111
|
"id": { "$ref": "#/definitions/AiPolicyIdentifier" },
|
|
112
|
-
"provider": { "type": "string", "enum": ["openai", "anthropic", "gemini", "openrouter", "deepseek", "elevenlabs", "deepgram", "higgsfield"] },
|
|
112
|
+
"provider": { "type": "string", "enum": ["openai", "anthropic", "gemini", "openrouter", "deepseek", "elevenlabs", "deepgram", "higgsfield", "mistral", "datalab"] },
|
|
113
113
|
"baseUrl": { "type": "string", "format": "uri", "maxLength": 512 },
|
|
114
114
|
"credentialSecretRef": {
|
|
115
115
|
"type": "string",
|
|
@@ -138,7 +138,8 @@
|
|
|
138
138
|
"audio_seconds": { "type": "integer", "minimum": 0 },
|
|
139
139
|
"audio_characters": { "type": "integer", "minimum": 0 },
|
|
140
140
|
"image_count": { "type": "integer", "minimum": 0 },
|
|
141
|
-
"video_seconds": { "type": "integer", "minimum": 0 }
|
|
141
|
+
"video_seconds": { "type": "integer", "minimum": 0 },
|
|
142
|
+
"document_pages": { "type": "integer", "minimum": 0, "description": "Price per page read by document OCR (ADR 0043)." }
|
|
142
143
|
}
|
|
143
144
|
}
|
|
144
145
|
}
|
|
@@ -156,7 +157,7 @@
|
|
|
156
157
|
"minItems": 1,
|
|
157
158
|
"maxItems": 2,
|
|
158
159
|
"uniqueItems": true,
|
|
159
|
-
"items": { "type": "string", "enum": ["generation", "embeddings", "transcription", "translation", "speech", "image", "video", "realtime"] }
|
|
160
|
+
"items": { "type": "string", "enum": ["generation", "embeddings", "transcription", "translation", "speech", "image", "video", "realtime", "document"] }
|
|
160
161
|
},
|
|
161
162
|
"approved": { "type": "boolean" },
|
|
162
163
|
"pricing": { "$ref": "#/definitions/AiPolicyPricing" },
|
|
@@ -186,7 +187,7 @@
|
|
|
186
187
|
"properties": {
|
|
187
188
|
"alias": { "$ref": "#/definitions/AiPolicyIdentifier" },
|
|
188
189
|
"version": { "type": "integer", "minimum": 1 },
|
|
189
|
-
"capability": { "type": "string", "enum": ["generation", "embeddings", "transcription", "translation", "speech", "image", "video", "realtime"] },
|
|
190
|
+
"capability": { "type": "string", "enum": ["generation", "embeddings", "transcription", "translation", "speech", "image", "video", "realtime", "document"] },
|
|
190
191
|
"targets": {
|
|
191
192
|
"type": "array",
|
|
192
193
|
"minItems": 1,
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"properties": {
|
|
10
10
|
"schema": { "type": "string", "const": "harbour.ai-pricing-revision/2.0" },
|
|
11
11
|
"revisionId": { "$ref": "#/definitions/AiPricingIdentifier" },
|
|
12
|
-
"provider": { "type": "string", "enum": ["openai", "anthropic", "gemini", "openrouter", "deepseek", "elevenlabs", "deepgram", "higgsfield"] },
|
|
12
|
+
"provider": { "type": "string", "enum": ["openai", "anthropic", "gemini", "openrouter", "deepseek", "elevenlabs", "deepgram", "higgsfield", "mistral", "datalab"] },
|
|
13
13
|
"providerModel": { "type": "string", "minLength": 1, "maxLength": 256 },
|
|
14
14
|
"region": { "$ref": "#/definitions/AiPricingIdentifier" },
|
|
15
15
|
"currency": { "type": "string", "const": "USD" },
|
|
@@ -55,7 +55,8 @@
|
|
|
55
55
|
"speech": { "$ref": "#/definitions/AiRuntimeModelAlias" },
|
|
56
56
|
"image": { "$ref": "#/definitions/AiRuntimeModelAlias" },
|
|
57
57
|
"video": { "$ref": "#/definitions/AiRuntimeModelAlias" },
|
|
58
|
-
"realtime": { "$ref": "#/definitions/AiRuntimeModelAlias" }
|
|
58
|
+
"realtime": { "$ref": "#/definitions/AiRuntimeModelAlias" },
|
|
59
|
+
"document": { "$ref": "#/definitions/AiRuntimeModelAlias" }
|
|
59
60
|
}
|
|
60
61
|
},
|
|
61
62
|
"policyDigest": { "$ref": "#/definitions/AiRuntimeDigest" },
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"routeRevision": { "type": "string", "minLength": 1, "maxLength": 256 },
|
|
43
43
|
"requestedModel": { "type": "string", "minLength": 1, "maxLength": 256 },
|
|
44
44
|
"governedModelAlias": { "type": "string", "minLength": 1, "maxLength": 160 },
|
|
45
|
-
"provider": { "type": "string", "enum": ["openai", "anthropic", "gemini", "openrouter", "deepseek", "elevenlabs", "deepgram", "higgsfield"] },
|
|
45
|
+
"provider": { "type": "string", "enum": ["openai", "anthropic", "gemini", "openrouter", "deepseek", "elevenlabs", "deepgram", "higgsfield", "mistral", "datalab"] },
|
|
46
46
|
"providerModel": { "type": "string", "minLength": 1, "maxLength": 256 },
|
|
47
47
|
"outcome": { "type": "string", "enum": ["succeeded", "blocked", "failed", "cancelled"] },
|
|
48
48
|
"usage": {
|
|
@@ -140,7 +140,7 @@
|
|
|
140
140
|
"required": ["attempt", "provider", "providerModel", "priceRevision", "outcome", "usage", "costMicroUsd", "latencyMs"],
|
|
141
141
|
"properties": {
|
|
142
142
|
"attempt": { "type": "integer", "minimum": 1, "maximum": 32 },
|
|
143
|
-
"provider": { "type": "string", "enum": ["openai", "anthropic", "gemini", "openrouter", "deepseek", "elevenlabs", "deepgram", "higgsfield"] },
|
|
143
|
+
"provider": { "type": "string", "enum": ["openai", "anthropic", "gemini", "openrouter", "deepseek", "elevenlabs", "deepgram", "higgsfield", "mistral", "datalab"] },
|
|
144
144
|
"providerModel": { "type": "string", "minLength": 1, "maxLength": 256 },
|
|
145
145
|
"priceRevision": { "$ref": "#/definitions/AiTraceIdentifier" },
|
|
146
146
|
"outcome": { "type": "string", "enum": ["succeeded", "failed", "timed_out", "cancelled"] },
|
|
@@ -145,6 +145,7 @@
|
|
|
145
145
|
"zohobooks.salesorder.list",
|
|
146
146
|
"zohobooks.salesorder.read",
|
|
147
147
|
"zohobooks.invoice.reviseDraft",
|
|
148
|
+
"zohobooks.invoice.markSent",
|
|
148
149
|
"zohobooks.creditnote.create",
|
|
149
150
|
"zohobooks.creditnote.read"
|
|
150
151
|
],
|
|
@@ -614,6 +615,9 @@
|
|
|
614
615
|
"zohobooks.invoice.reviseDraft": {
|
|
615
616
|
"$ref": "#/definitions/UserModeChannelOperation"
|
|
616
617
|
},
|
|
618
|
+
"zohobooks.invoice.markSent": {
|
|
619
|
+
"$ref": "#/definitions/UserModeChannelOperation"
|
|
620
|
+
},
|
|
617
621
|
"zohobooks.creditnote.create": {
|
|
618
622
|
"$ref": "#/definitions/UserModeChannelOperation"
|
|
619
623
|
},
|
|
@@ -1121,6 +1125,11 @@
|
|
|
1121
1125
|
"zohobooks.invoice.reviseDraft"
|
|
1122
1126
|
]
|
|
1123
1127
|
},
|
|
1128
|
+
{
|
|
1129
|
+
"required": [
|
|
1130
|
+
"zohobooks.invoice.markSent"
|
|
1131
|
+
]
|
|
1132
|
+
},
|
|
1124
1133
|
{
|
|
1125
1134
|
"required": [
|
|
1126
1135
|
"zohobooks.creditnote.create"
|
|
@@ -1610,6 +1619,11 @@
|
|
|
1610
1619
|
"zohobooks.invoice.reviseDraft"
|
|
1611
1620
|
]
|
|
1612
1621
|
},
|
|
1622
|
+
{
|
|
1623
|
+
"required": [
|
|
1624
|
+
"zohobooks.invoice.markSent"
|
|
1625
|
+
]
|
|
1626
|
+
},
|
|
1613
1627
|
{
|
|
1614
1628
|
"required": [
|
|
1615
1629
|
"zohobooks.creditnote.create"
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
},
|
|
65
65
|
"BindingClassificationProviderId": {
|
|
66
66
|
"type": "string",
|
|
67
|
-
"enum": ["openai", "anthropic", "gemini", "openrouter", "deepseek", "deepgram", "higgsfield"]
|
|
67
|
+
"enum": ["openai", "anthropic", "gemini", "openrouter", "deepseek", "deepgram", "higgsfield", "mistral", "datalab"]
|
|
68
68
|
},
|
|
69
69
|
"BindingClassificationCredentialCategory": {
|
|
70
70
|
"description": "Closed current credential category. Add a reviewed contract version before supporting another credential mechanism.",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"status": { "$ref": "#/definitions/DataGrantV2Status" },
|
|
18
18
|
"operations": {
|
|
19
19
|
"type": "array",
|
|
20
|
-
"maxItems":
|
|
20
|
+
"maxItems": 92,
|
|
21
21
|
"uniqueItems": true,
|
|
22
22
|
"items": { "$ref": "app-integrations-declaration.schema.json#/definitions/IntegrationOperation" },
|
|
23
23
|
"description": "Approved operations; each must match this grant's mode. Empty until the first approval. At most the seventy-eight SaaS operations (0.86.0: eleven Slack and Gmail, eleven Basecamp, nine SharePoint, two phone, forty-five Google Workspace and Microsoft 365); a database grant holds up to two (warehouse.view.read, warehouse.table.append)."
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"description": "Only for SaaS grants mixing reviewed and automatic access: the previously human-reviewed scope. The remaining scope must satisfy current automatic rules. Homogeneous grants continue using approvedBy alone. Governance validates this is a subset of the grant; database behaviour is unchanged.",
|
|
66
66
|
"properties": {
|
|
67
67
|
"operations": {
|
|
68
|
-
"type": "array", "maxItems":
|
|
68
|
+
"type": "array", "maxItems": 92, "uniqueItems": true,
|
|
69
69
|
"items": { "$ref": "app-integrations-declaration.schema.json#/definitions/IntegrationOperation" }
|
|
70
70
|
},
|
|
71
71
|
"resources": {
|
|
@@ -3974,6 +3974,41 @@
|
|
|
3974
3974
|
]
|
|
3975
3975
|
}
|
|
3976
3976
|
},
|
|
3977
|
+
{
|
|
3978
|
+
"if": {
|
|
3979
|
+
"properties": {
|
|
3980
|
+
"operation": {
|
|
3981
|
+
"const": "zohobooks.invoice.markSent"
|
|
3982
|
+
}
|
|
3983
|
+
}
|
|
3984
|
+
},
|
|
3985
|
+
"then": {
|
|
3986
|
+
"x-read-only": false,
|
|
3987
|
+
"x-primary-identity": "user",
|
|
3988
|
+
"properties": {
|
|
3989
|
+
"mode": false,
|
|
3990
|
+
"input": {
|
|
3991
|
+
"propertyNames": {
|
|
3992
|
+
"enum": [
|
|
3993
|
+
"documentId"
|
|
3994
|
+
]
|
|
3995
|
+
},
|
|
3996
|
+
"required": [
|
|
3997
|
+
"documentId"
|
|
3998
|
+
],
|
|
3999
|
+
"properties": {
|
|
4000
|
+
"documentId": {
|
|
4001
|
+
"pattern": "^[0-9]{1,32}$",
|
|
4002
|
+
"maxLength": 32
|
|
4003
|
+
}
|
|
4004
|
+
}
|
|
4005
|
+
}
|
|
4006
|
+
},
|
|
4007
|
+
"required": [
|
|
4008
|
+
"idempotencyKey"
|
|
4009
|
+
]
|
|
4010
|
+
}
|
|
4011
|
+
},
|
|
3977
4012
|
{
|
|
3978
4013
|
"if": {
|
|
3979
4014
|
"properties": {
|
|
@@ -5460,6 +5495,15 @@
|
|
|
5460
5495
|
},
|
|
5461
5496
|
"idempotencyKey": "940e4390-ce19-4668-97f8-c5e963bb8662"
|
|
5462
5497
|
},
|
|
5498
|
+
{
|
|
5499
|
+
"connection": "company-zohobooks",
|
|
5500
|
+
"resource": "organization",
|
|
5501
|
+
"operation": "zohobooks.invoice.markSent",
|
|
5502
|
+
"input": {
|
|
5503
|
+
"documentId": "123"
|
|
5504
|
+
},
|
|
5505
|
+
"idempotencyKey": "940e4390-ce19-4668-97f8-c5e963bb8662"
|
|
5506
|
+
},
|
|
5463
5507
|
{
|
|
5464
5508
|
"connection": "company-zohobooks",
|
|
5465
5509
|
"resource": "organization",
|