@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.
Files changed (50) hide show
  1. package/contract-release.json +36 -36
  2. package/dist/gen-ts/ai-governance-decision.d.ts +1 -0
  3. package/dist/gen-ts/ai-policy-snapshot.d.ts +7 -3
  4. package/dist/gen-ts/ai-pricing-revision.d.ts +1 -1
  5. package/dist/gen-ts/ai-runtime-contract.d.ts +1 -0
  6. package/dist/gen-ts/ai-trace-event.d.ts +2 -2
  7. package/dist/gen-ts/app-integrations-declaration.d.ts +1 -0
  8. package/dist/gen-ts/binding-classification-subject.d.ts +1 -1
  9. package/dist/gen-ts/contract-release.d.ts +6 -6
  10. package/dist/gen-ts/contract-release.js +6 -6
  11. package/dist/gen-ts/data-grant-v2.d.ts +4 -4
  12. package/dist/gen-ts/deploy-request.d.ts +2 -2
  13. package/dist/gen-ts/integration-execute-input-rules.d.ts +12 -0
  14. package/dist/gen-ts/integration-execute-input-rules.js +6 -0
  15. package/dist/gen-ts/integration-execute-request.d.ts +1 -1
  16. package/dist/gen-ts/integration-operations.d.ts +7 -0
  17. package/dist/gen-ts/integration-operations.js +9 -0
  18. package/dist/gen-ts/promotion-request.d.ts +2 -2
  19. package/dist/gen-ts/saas-connection.d.ts +6 -6
  20. package/dist/gen-ts/sanitized-binding-evidence.d.ts +1 -1
  21. package/dist/resolver/index.d.ts +2 -1
  22. package/dist/resolver/index.js +6 -6
  23. package/gen-ts/ai-governance-decision.ts +1 -0
  24. package/gen-ts/ai-policy-snapshot.ts +34 -3
  25. package/gen-ts/ai-pricing-revision.ts +11 -1
  26. package/gen-ts/ai-runtime-contract.ts +1 -0
  27. package/gen-ts/ai-trace-event.ts +22 -2
  28. package/gen-ts/app-integrations-declaration.ts +1 -0
  29. package/gen-ts/binding-classification-subject.ts +1 -1
  30. package/gen-ts/contract-release.ts +6 -6
  31. package/gen-ts/data-grant-v2.ts +4 -2
  32. package/gen-ts/deploy-request.ts +4 -2
  33. package/gen-ts/integration-execute-input-rules.ts +6 -0
  34. package/gen-ts/integration-execute-request.ts +1 -0
  35. package/gen-ts/integration-operations.ts +9 -0
  36. package/gen-ts/promotion-request.ts +4 -2
  37. package/gen-ts/saas-connection.ts +6 -3
  38. package/gen-ts/sanitized-binding-evidence.ts +1 -1
  39. package/package.json +1 -1
  40. package/schema/ai-governance-decision.schema.json +2 -1
  41. package/schema/ai-policy-snapshot.schema.json +5 -4
  42. package/schema/ai-pricing-revision.schema.json +1 -1
  43. package/schema/ai-runtime-contract.schema.json +2 -1
  44. package/schema/ai-trace-event.schema.json +2 -2
  45. package/schema/app-integrations-declaration.schema.json +14 -0
  46. package/schema/binding-classification-subject.schema.json +1 -1
  47. package/schema/data-grant-v2.schema.json +2 -2
  48. package/schema/integration-execute-request.schema.json +44 -0
  49. package/schema/saas-connection.schema.json +3 -3
  50. package/schema/sanitized-binding-evidence.schema.json +1 -1
@@ -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.1.0",
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.1.0",
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 {};
@@ -78,6 +78,7 @@ export interface AiDecisionRuntimeContract {
78
78
  image?: string;
79
79
  video?: string;
80
80
  realtime?: string;
81
+ document?: string;
81
82
  };
82
83
  policyDigest: AiDecisionDigest;
83
84
  /**
@@ -94,7 +94,17 @@ export interface AiPolicyClassificationMinimum {
94
94
  }
95
95
  export interface AiPolicyProvider {
96
96
  id: AiPolicyIdentifier;
97
- provider: 'openai' | 'anthropic' | 'gemini' | 'openrouter' | 'deepseek' | 'elevenlabs' | 'deepgram' | 'higgsfield';
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
- 'generation' | 'embeddings' | 'transcription' | 'translation' | 'speech' | 'image' | 'video' | 'realtime'
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: 'generation' | 'embeddings' | 'transcription' | 'translation' | 'speech' | 'image' | 'video' | 'realtime';
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: 'openai' | 'anthropic' | 'gemini' | 'openrouter' | 'deepseek' | 'elevenlabs' | 'deepgram' | 'higgsfield';
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';
@@ -31,6 +31,7 @@ export interface AiRuntimeContract {
31
31
  image?: AiRuntimeModelAlias;
32
32
  video?: AiRuntimeModelAlias;
33
33
  realtime?: AiRuntimeModelAlias;
34
+ document?: AiRuntimeModelAlias;
34
35
  };
35
36
  policyDigest: AiRuntimeDigest;
36
37
  /**
@@ -17,7 +17,17 @@ export type AiTraceEvent = {
17
17
  routeRevision?: string;
18
18
  requestedModel?: string;
19
19
  governedModelAlias?: string;
20
- provider?: 'openai' | 'anthropic' | 'gemini' | 'openrouter' | 'deepseek' | 'elevenlabs' | 'deepgram' | 'higgsfield';
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: 'openai' | 'anthropic' | 'gemini' | 'openrouter' | 'deepseek' | 'elevenlabs' | 'deepgram' | 'higgsfield';
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.97.0.0" as const;
5
- export const ContractPublishVersion = "0.97.0" as const;
6
- export const ContractPublishTag = "v0.97.0" as const;
7
- export const ContractSchemasDigest = "sha256:96d7ca6fc25f98bb0b35598d8d72eb68cabd841d4b8b644330dea37fbed0916f" as const;
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:628254d6676684c7356611eaa434890fa28ad7cf78a487ec407d33b4aa8dad0a" as const;
10
- export const ContractGeneratedTypeScriptDigest = "sha256:db0823b4134a04e599b159fab0fd439c88160541bdf67c58b568758c98a8dfcc" as const;
9
+ export const ContractGeneratedGoDigest = "sha256:907ba331a26386dd7b2b6f651988ee441da125b1949f287e376d0551626afd93" as const;
10
+ export const ContractGeneratedTypeScriptDigest = "sha256:a13398995bbac4f876d8b39cbb40cadcc8d166b6cc582975c13f8322d08632d9" as const;
@@ -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 91
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 91
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
  )[];
@@ -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?: 'openai' | 'anthropic' | 'gemini' | 'openrouter' | 'deepseek' | 'deepgram' | 'higgsfield';
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: 'openai' | 'anthropic' | 'gemini' | 'openrouter' | 'deepseek' | 'deepgram' | 'higgsfield';
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?: 'openai' | 'anthropic' | 'gemini' | 'openrouter' | 'deepseek' | 'deepgram' | 'higgsfield';
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: 'openai' | 'anthropic' | 'gemini' | 'openrouter' | 'deepseek' | 'deepgram' | 'higgsfield';
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 91
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 91
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 91
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fourier-labs/harbour-contracts",
3
- "version": "0.97.0",
3
+ "version": "0.99.0",
4
4
  "description": "Single source of truth for every data shape that crosses a boundary between Isomorph components.",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,
@@ -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": 91,
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": 91, "uniqueItems": true,
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",