@enterpriseai/cli 3.19.4 → 3.20.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 (121) hide show
  1. package/README.md +47 -16
  2. package/dist/commands/agent.js +3 -1
  3. package/dist/commands/agent.js.map +1 -1
  4. package/dist/commands/content-understanding.d.ts +15 -0
  5. package/dist/commands/content-understanding.d.ts.map +1 -0
  6. package/dist/commands/content-understanding.js +277 -0
  7. package/dist/commands/content-understanding.js.map +1 -0
  8. package/dist/commands/docs.d.ts.map +1 -1
  9. package/dist/commands/docs.js +129 -1
  10. package/dist/commands/docs.js.map +1 -1
  11. package/dist/commands/eai-managed-deploy-output.d.ts.map +1 -1
  12. package/dist/commands/eai-managed-deploy-output.js +12 -2
  13. package/dist/commands/eai-managed-deploy-output.js.map +1 -1
  14. package/dist/commands/eai-managed-source-authorize-commit.d.ts +28 -0
  15. package/dist/commands/eai-managed-source-authorize-commit.d.ts.map +1 -0
  16. package/dist/commands/eai-managed-source-authorize-commit.js +200 -0
  17. package/dist/commands/eai-managed-source-authorize-commit.js.map +1 -0
  18. package/dist/commands/eai-managed-source-move.d.ts.map +1 -1
  19. package/dist/commands/eai-managed-source-move.js +3 -0
  20. package/dist/commands/eai-managed-source-move.js.map +1 -1
  21. package/dist/commands/init.js +17 -17
  22. package/dist/commands/resources.d.ts.map +1 -1
  23. package/dist/commands/resources.js +6 -6
  24. package/dist/commands/resources.js.map +1 -1
  25. package/dist/commands/support.d.ts +6 -3
  26. package/dist/commands/support.d.ts.map +1 -1
  27. package/dist/commands/support.js +117 -25
  28. package/dist/commands/support.js.map +1 -1
  29. package/dist/commands/tenant.d.ts.map +1 -1
  30. package/dist/commands/tenant.js +6 -34
  31. package/dist/commands/tenant.js.map +1 -1
  32. package/dist/index.js +65 -11
  33. package/dist/index.js.map +1 -1
  34. package/dist/lib/agent-guide.d.ts.map +1 -1
  35. package/dist/lib/agent-guide.js +30 -16
  36. package/dist/lib/agent-guide.js.map +1 -1
  37. package/dist/lib/api.d.ts +47 -0
  38. package/dist/lib/api.d.ts.map +1 -1
  39. package/dist/lib/api.js +99 -6
  40. package/dist/lib/api.js.map +1 -1
  41. package/dist/lib/cli-qa-transport.d.ts +7 -0
  42. package/dist/lib/cli-qa-transport.d.ts.map +1 -0
  43. package/dist/lib/cli-qa-transport.js +18 -0
  44. package/dist/lib/cli-qa-transport.js.map +1 -0
  45. package/dist/lib/content-understanding-client.d.ts +64 -0
  46. package/dist/lib/content-understanding-client.d.ts.map +1 -0
  47. package/dist/lib/content-understanding-client.js +105 -0
  48. package/dist/lib/content-understanding-client.js.map +1 -0
  49. package/dist/lib/content-understanding-manifest.d.ts +39 -0
  50. package/dist/lib/content-understanding-manifest.d.ts.map +1 -0
  51. package/dist/lib/content-understanding-manifest.js +265 -0
  52. package/dist/lib/content-understanding-manifest.js.map +1 -0
  53. package/dist/lib/context.d.ts +3 -0
  54. package/dist/lib/context.d.ts.map +1 -1
  55. package/dist/lib/context.js +12 -2
  56. package/dist/lib/context.js.map +1 -1
  57. package/dist/lib/eai-managed-source-client-types.d.ts +44 -1
  58. package/dist/lib/eai-managed-source-client-types.d.ts.map +1 -1
  59. package/dist/lib/eai-managed-source-operation-client.d.ts +3 -0
  60. package/dist/lib/eai-managed-source-operation-client.d.ts.map +1 -1
  61. package/dist/lib/eai-managed-source-operation-client.js +69 -2
  62. package/dist/lib/eai-managed-source-operation-client.js.map +1 -1
  63. package/dist/lib/eai-managed-source-publication-client.d.ts.map +1 -1
  64. package/dist/lib/eai-managed-source-publication-client.js +1 -0
  65. package/dist/lib/eai-managed-source-publication-client.js.map +1 -1
  66. package/dist/lib/error-codes.d.ts +1 -1
  67. package/dist/lib/error-codes.d.ts.map +1 -1
  68. package/dist/lib/error-codes.js +9 -5
  69. package/dist/lib/error-codes.js.map +1 -1
  70. package/dist/lib/gofer-installer.d.ts.map +1 -1
  71. package/dist/lib/gofer-installer.js +3 -1
  72. package/dist/lib/gofer-installer.js.map +1 -1
  73. package/dist/lib/support-context.d.ts +4 -3
  74. package/dist/lib/support-context.d.ts.map +1 -1
  75. package/dist/lib/support-context.js +11 -13
  76. package/dist/lib/support-context.js.map +1 -1
  77. package/dist/lib/support-harness.d.ts +86 -0
  78. package/dist/lib/support-harness.d.ts.map +1 -0
  79. package/dist/lib/support-harness.js +471 -0
  80. package/dist/lib/support-harness.js.map +1 -0
  81. package/dist/lib/support-redaction.d.ts.map +1 -1
  82. package/dist/lib/support-redaction.js +221 -3
  83. package/dist/lib/support-redaction.js.map +1 -1
  84. package/dist/lib/support-report.d.ts +27 -5
  85. package/dist/lib/support-report.d.ts.map +1 -1
  86. package/dist/lib/support-report.js +75 -31
  87. package/dist/lib/support-report.js.map +1 -1
  88. package/dist/lib/tenant-context.d.ts +7 -0
  89. package/dist/lib/tenant-context.d.ts.map +1 -1
  90. package/dist/lib/tenant-context.js +17 -4
  91. package/dist/lib/tenant-context.js.map +1 -1
  92. package/package.json +8 -3
  93. package/resources/content-understanding/contract-golden.json +444 -0
  94. package/resources/content-understanding/manifest.schema.json +551 -0
  95. package/resources/content-understanding/procurement-example.json +135 -0
  96. package/resources/deploy/eai-app-template/producer-pin.json +4 -4
  97. package/resources/gofer/agents-skills/eai/SKILL.md +22 -21
  98. package/resources/gofer/claude-commands/eai.md +22 -21
  99. package/resources/gofer/claude-skills/eai/SKILL.md +22 -21
  100. package/resources/gofer/commands/0_gofer_start.md +26 -24
  101. package/resources/gofer/commands/5_gofer_implement.md +8 -4
  102. package/resources/gofer/commands/gofer_eai_first_run.md +27 -22
  103. package/resources/gofer/copilot-prompts/eai.prompt.md +22 -21
  104. package/resources/gofer/gemini/commands/gofer/eai.md +22 -21
  105. package/resources/gofer/gemini/commands/gofer/manifest.json +1 -1
  106. package/resources/gofer/github-skills/eai/SKILL.md +22 -21
  107. package/resources/gofer/grok-skills/eai/SKILL.md +22 -21
  108. package/resources/gofer/instruction-templates/base/agents-base.md +18 -17
  109. package/resources/gofer/instruction-templates/base/claude-base.md +0 -18
  110. package/resources/gofer/instruction-templates/base/copilot-base.md +18 -17
  111. package/resources/gofer/instruction-templates/gofer/gofer-claude.md +1 -7
  112. package/resources/gofer/node-scripts/generate-commands.mjs +37 -24
  113. package/resources/gofer/node-scripts/package-agent-plugin.mjs +55 -6
  114. package/resources/gofer/node-scripts/workspace-bootstrap-lib.mjs +8 -4
  115. package/resources/gofer/references/platform/README.md +8 -3
  116. package/resources/gofer/references/platform/eai-support.md +16 -16
  117. package/resources/gofer/specify-commands/0_gofer_start.md +26 -24
  118. package/resources/gofer/specify-commands/5_gofer_implement.md +8 -4
  119. package/resources/gofer/specify-commands/gofer_eai_first_run.md +27 -22
  120. package/resources/gofer/system-skills/eai/SKILL.md +22 -21
  121. package/resources/linked-sources.json +2 -2
@@ -0,0 +1,265 @@
1
+ /** Bounded document configuration accepted from any consultant harness. */
2
+ import { isRecord } from './utils.js';
3
+ export const CONTENT_UNDERSTANDING_KIND = 'eai.content-understanding';
4
+ export const CONTENT_UNDERSTANDING_API_VERSION = '2025-11-01';
5
+ export const CONTENT_UNDERSTANDING_MAX_BYTES = 16 * 1024;
6
+ const IDENTIFIER = /^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$/;
7
+ export const CANONICAL_TENANT_ID = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;
8
+ const TYPES = ['string', 'date', 'time', 'number', 'integer', 'boolean', 'array', 'object', 'json'];
9
+ const METHODS = ['extract', 'generate', 'classify'];
10
+ const FIELD_NAME = /^[A-Za-z][A-Za-z0-9_]{0,63}$/;
11
+ const BOOLEAN_CONFIG = ['enableOcr', 'enableLayout', 'enableFormula', 'enableFigureAnalysis', 'enableFigureDescription',
12
+ 'returnDetails', 'estimateFieldSourceAndConfidence', 'omitContent', 'enableSegment', 'segmentPerPage'];
13
+ const FORMAT_CONFIG = { tableFormat: ['html', 'markdown'], chartFormat: ['chartJs', 'markdown'], annotationFormat: ['markdown', 'none'] };
14
+ export class ContentUnderstandingError extends Error {
15
+ code;
16
+ operationId;
17
+ status;
18
+ constructor(code, message, operationId, status) {
19
+ super(message);
20
+ this.code = code;
21
+ this.operationId = operationId;
22
+ this.status = status;
23
+ this.name = 'ContentUnderstandingError';
24
+ }
25
+ }
26
+ function invalid(path, message) {
27
+ throw new ContentUnderstandingError('CU_INVALID_MANIFEST', `${path}: ${message}`);
28
+ }
29
+ function unsupported(path, message) {
30
+ throw new ContentUnderstandingError('CU_CAPABILITY_UNSUPPORTED', `${path}: ${message}`);
31
+ }
32
+ function object(value, path) {
33
+ if (!isRecord(value))
34
+ invalid(path, 'must be an object.');
35
+ return value;
36
+ }
37
+ function keys(value, allowed, path) {
38
+ if (Object.keys(value).some(key => !allowed.includes(key)))
39
+ unsupported(path, 'contains an unsupported setting.');
40
+ }
41
+ function text(value, path, identifier = false) {
42
+ if (typeof value !== 'string' || value.length === 0)
43
+ invalid(path, 'must be a nonempty exact string.');
44
+ if (identifier && !IDENTIFIER.test(value))
45
+ invalid(path, 'must be a bounded stable identifier.');
46
+ return value;
47
+ }
48
+ function optionalText(value, names, path, maximum = 1024) {
49
+ for (const name of names)
50
+ if (value[name] !== undefined && (typeof value[name] !== 'string' || value[name].length > maximum))
51
+ invalid(`${path}.${name}`, 'must be a bounded string.');
52
+ }
53
+ function fieldName(value, path) {
54
+ if (!FIELD_NAME.test(value))
55
+ invalid(path, 'field names must be ASCII identifiers of at most 64 characters.');
56
+ }
57
+ /** RFC 8785 input must contain Unicode scalar values, including authored keys. */
58
+ function scalarStrings(value) {
59
+ const pending = [value], visited = new Set();
60
+ const loneSurrogate = /[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/u;
61
+ while (pending.length > 0) {
62
+ const current = pending.pop();
63
+ if (typeof current === 'string' && loneSurrogate.test(current))
64
+ invalid('manifest', 'strings and keys must contain valid Unicode scalar values.');
65
+ if (current && typeof current === 'object' && !visited.has(current)) {
66
+ visited.add(current);
67
+ for (const [key, child] of Object.entries(current))
68
+ pending.push(key, child);
69
+ }
70
+ }
71
+ }
72
+ /** Validates and normalizes the launch leaf schema without reading auth, profiles or provider endpoints. */
73
+ export function parseContentUnderstandingAnalyzer(value) {
74
+ scalarStrings(value);
75
+ const definition = object(value, 'analyzerDefinition');
76
+ keys(definition, ['schemaVersion', 'baseAnalyzerId', 'description', 'modelProfile', 'config', 'fieldSchema'], 'analyzerDefinition');
77
+ if (definition.schemaVersion !== undefined && definition.schemaVersion !== 1)
78
+ unsupported('analyzerDefinition.schemaVersion', 'only version 1 is supported.');
79
+ if (definition.baseAnalyzerId !== undefined && definition.baseAnalyzerId !== 'prebuilt-document')
80
+ unsupported('analyzerDefinition.baseAnalyzerId', 'only prebuilt-document is supported.');
81
+ if (definition.modelProfile !== undefined && definition.modelProfile !== 'default')
82
+ unsupported('analyzerDefinition.modelProfile', 'only the configured default profile is supported.');
83
+ optionalText(definition, ['description'], 'analyzerDefinition');
84
+ const suppliedConfig = definition.config === undefined ? {} : object(definition.config, 'analyzerDefinition.config');
85
+ keys(suppliedConfig, [...BOOLEAN_CONFIG, ...Object.keys(FORMAT_CONFIG)], 'analyzerDefinition.config');
86
+ for (const name of BOOLEAN_CONFIG)
87
+ if (suppliedConfig[name] !== undefined && typeof suppliedConfig[name] !== 'boolean')
88
+ invalid(`config.${name}`, 'must be an exact boolean.');
89
+ for (const name of ['omitContent', 'enableSegment', 'segmentPerPage'])
90
+ if (suppliedConfig[name] === true)
91
+ unsupported(`config.${name}`, 'hierarchical routing, segmentation and omitted content are unavailable in this launch mode.');
92
+ for (const [name, values] of Object.entries(FORMAT_CONFIG))
93
+ if (suppliedConfig[name] !== undefined && (typeof suppliedConfig[name] !== 'string' || !values.includes(suppliedConfig[name])))
94
+ unsupported(`config.${name}`, 'unsupported output format.');
95
+ const config = { returnDetails: true, estimateFieldSourceAndConfidence: true, ...suppliedConfig };
96
+ const schema = object(definition.fieldSchema, 'fieldSchema');
97
+ keys(schema, ['name', 'description', 'fields', 'definitions'], 'fieldSchema');
98
+ optionalText(schema, ['name'], 'fieldSchema', 64);
99
+ optionalText(schema, ['description'], 'fieldSchema');
100
+ const fields = object(schema.fields, 'fieldSchema.fields');
101
+ if (Object.keys(fields).length === 0)
102
+ invalid('fieldSchema.fields', 'at least one field is required.');
103
+ const definitions = schema.definitions === undefined ? {} : object(schema.definitions, 'fieldSchema.definitions');
104
+ let expandedNodes = 0, classifyCategories = 0;
105
+ function validateField(input, path, depth, references = []) {
106
+ if (++expandedNodes > 200)
107
+ invalid(path, 'expanded field validation exceeds 200 nodes.');
108
+ if (depth > 7)
109
+ invalid(path, 'expanded field nesting exceeds 7.');
110
+ const original = object(input, path);
111
+ keys(original, ['$ref', 'type', 'method', 'description', 'examples', 'estimateSourceAndConfidence', 'properties', 'items', 'enum', 'enumDescriptions'], path);
112
+ const field = original;
113
+ if (field.$ref !== undefined) {
114
+ if (typeof field.$ref !== 'string' || !/^#\/definitions\/[^/~]+$/.test(field.$ref))
115
+ unsupported(path, 'only finite local definition references are supported.');
116
+ const name = field.$ref.slice('#/definitions/'.length);
117
+ fieldName(name, path);
118
+ if (!Object.hasOwn(definitions, name))
119
+ invalid(path, 'definition reference is unresolved.');
120
+ if (references.includes(name))
121
+ invalid(path, 'definition references must not contain cycles.');
122
+ if (Object.keys(field).some(key => !['$ref', 'description', 'estimateSourceAndConfidence'].includes(key)))
123
+ invalid(path, 'reference overlays support only description and evidence.');
124
+ const overlays = { ...original };
125
+ delete overlays.$ref;
126
+ validateField({ ...object(definitions[name], `${path}.$ref`), ...overlays }, `${path}.$ref`, depth, [...references, name]);
127
+ return;
128
+ }
129
+ if (typeof field.type !== 'string' || !TYPES.includes(field.type))
130
+ unsupported(path, 'unsupported or missing field type.');
131
+ if (field.method !== undefined && (typeof field.method !== 'string' || !METHODS.includes(field.method)))
132
+ unsupported(path, 'unsupported field method.');
133
+ optionalText(field, ['description'], path);
134
+ if (typeof field.description === 'string' && (field.description.includes('{{') || field.description.includes('}}')))
135
+ invalid(path, 'typed field descriptions cannot contain context templates.');
136
+ if (field.examples !== undefined && (!Array.isArray(field.examples) || field.examples.length > 100 || !field.examples.every(item => typeof item === 'string' && item.length <= 1024)))
137
+ invalid(path, 'examples must be strings.');
138
+ if (field.estimateSourceAndConfidence !== undefined && typeof field.estimateSourceAndConfidence !== 'boolean')
139
+ invalid(path, 'evidence estimation must be an exact boolean.');
140
+ if ((field.method ?? 'extract') === 'extract' && (field.estimateSourceAndConfidence ?? config.estimateFieldSourceAndConfidence) !== true)
141
+ invalid(path, 'extract fields require effective source and confidence estimation.');
142
+ if (field.method === 'classify') {
143
+ if (field.type !== 'string' || !Array.isArray(field.enum) || field.enum.length === 0 || field.enum.length > 200 || !field.enum.every(item => typeof item === 'string' && item.length > 0 && item.length <= 200)
144
+ || new Set(field.enum).size !== field.enum.length)
145
+ invalid(path, 'classify requires a string field and a nonempty unique string enum.');
146
+ classifyCategories += field.enum.length;
147
+ if (classifyCategories > 300)
148
+ invalid(path, 'expanded classify categories exceed 300.');
149
+ if (field.enumDescriptions !== undefined) {
150
+ const descriptions = object(field.enumDescriptions, `${path}.enumDescriptions`);
151
+ if (Object.keys(descriptions).length !== field.enum.length || !field.enum.every(item => Object.hasOwn(descriptions, item)))
152
+ invalid(path, 'enum descriptions must match all enum values exactly.');
153
+ for (const description of Object.values(descriptions))
154
+ if (typeof description !== 'string' || description.length > 1024)
155
+ invalid(path, 'enum descriptions must be bounded strings.');
156
+ }
157
+ }
158
+ else if (field.enum !== undefined || field.enumDescriptions !== undefined)
159
+ invalid(path, 'enum settings require classify.');
160
+ if (field.type === 'object') {
161
+ const properties = object(field.properties, `${path}.properties`);
162
+ if (Object.keys(properties).length === 0)
163
+ invalid(path, 'objects require properties.');
164
+ for (const [name, child] of Object.entries(properties)) {
165
+ fieldName(name, `${path}.properties`);
166
+ validateField(child, `${path}.properties.${name}`, depth + 1, references);
167
+ }
168
+ }
169
+ else if (field.properties !== undefined)
170
+ invalid(path, 'properties require object type.');
171
+ if (field.type === 'array')
172
+ validateField(field.items, `${path}.items`, depth + 1, references);
173
+ else if (field.items !== undefined)
174
+ invalid(path, 'items require array type.');
175
+ }
176
+ for (const [name, field] of Object.entries(fields)) {
177
+ fieldName(name, 'fieldSchema.fields');
178
+ validateField(field, `fields.${name}`, 1);
179
+ }
180
+ for (const [name, field] of Object.entries(definitions)) {
181
+ fieldName(name, 'fieldSchema.definitions');
182
+ validateField(field, `definitions.${name}`, 1, [name]);
183
+ }
184
+ return { ...structuredClone(definition), schemaVersion: 1, baseAnalyzerId: 'prebuilt-document', modelProfile: 'default', config };
185
+ }
186
+ /** Reject unsupported constructs for the entire bundle before resolving any authenticated command context. */
187
+ export function parseContentUnderstandingManifest(value) {
188
+ scalarStrings(value);
189
+ const manifest = object(value, 'manifest');
190
+ keys(manifest, ['kind', 'schemaVersion', 'tenantId', 'bundleKey', 'provider', 'apiVersion', 'binding', 'documentTypes', 'classifier'], 'manifest');
191
+ if (manifest.kind !== CONTENT_UNDERSTANDING_KIND || manifest.schemaVersion !== 1)
192
+ unsupported('manifest', 'unsupported kind or schema version.');
193
+ if ((!CANONICAL_TENANT_ID.test(text(manifest.tenantId, 'tenantId')) || manifest.tenantId === '00000000-0000-0000-0000-000000000000'))
194
+ invalid('tenantId', 'must be a canonical UUID.');
195
+ text(manifest.bundleKey, 'bundleKey', true);
196
+ if (manifest.provider !== 'azure-content-understanding' || manifest.apiVersion !== CONTENT_UNDERSTANDING_API_VERSION)
197
+ unsupported('manifest', 'only the Azure document GA provider contract is supported.');
198
+ const binding = object(manifest.binding, 'binding');
199
+ keys(binding, ['appKey', 'workflowKey', 'documentLifecycle'], 'binding');
200
+ text(binding.appKey, 'binding.appKey', true);
201
+ text(binding.workflowKey, 'binding.workflowKey', true);
202
+ if (binding.documentLifecycle !== 'business-document-v1')
203
+ unsupported('binding.documentLifecycle', 'only business-document-v1 is supported.');
204
+ if (!Array.isArray(manifest.documentTypes) || manifest.documentTypes.length === 0 || manifest.documentTypes.length > 64)
205
+ invalid('documentTypes', 'must be a nonempty array.');
206
+ const codes = new Set();
207
+ const documentTypes = manifest.documentTypes.map((input, index) => {
208
+ const path = `documentTypes[${index}]`, doc = object(input, path);
209
+ keys(doc, ['code', 'name', 'description', 'category', 'contentUnderstanding'], path);
210
+ const code = text(doc.code, `${path}.code`, true);
211
+ text(doc.name, `${path}.name`);
212
+ optionalText(doc, ['description'], path);
213
+ if (doc.name.length > 200)
214
+ invalid(path, 'document name exceeds 200 characters.');
215
+ if (doc.category !== undefined)
216
+ text(doc.category, `${path}.category`, true);
217
+ if (code === 'Other')
218
+ invalid(path, 'Other is reserved for manual review and cannot be a document type.');
219
+ if (codes.has(code))
220
+ invalid(path, 'document type codes must be unique.');
221
+ codes.add(code);
222
+ const cu = object(doc.contentUnderstanding, `${path}.contentUnderstanding`);
223
+ keys(cu, ['analyzerDefinition'], `${path}.contentUnderstanding`);
224
+ return { ...structuredClone(doc), contentUnderstanding: { analyzerDefinition: parseContentUnderstandingAnalyzer(cu.analyzerDefinition) } };
225
+ });
226
+ if (manifest.classifier !== undefined) {
227
+ const classifier = object(manifest.classifier, 'classifier');
228
+ keys(classifier, ['classifierKey', 'displayName', 'description', 'definition'], 'classifier');
229
+ text(classifier.classifierKey, 'classifier.classifierKey', true);
230
+ text(classifier.displayName, 'classifier.displayName');
231
+ optionalText(classifier, ['description'], 'classifier');
232
+ if (classifier.displayName.length > 200)
233
+ invalid('classifier.displayName', 'exceeds 200 characters.');
234
+ const definition = object(classifier.definition, 'classifier.definition');
235
+ keys(definition, ['labels', 'minimumConfidence'], 'classifier.definition');
236
+ if (!Array.isArray(definition.labels) || definition.labels.length < 2 || definition.labels.length > 64)
237
+ invalid('classifier.definition.labels', 'flat classifiers require 2 to 64 labels.');
238
+ const labels = new Set();
239
+ for (const input of definition.labels) {
240
+ const label = object(input, 'classifier.definition.labels');
241
+ keys(label, ['key', 'displayName', 'description', 'documentTypeKey'], 'classifier.definition.labels');
242
+ const key = text(label.key, 'classifier.label.key', true);
243
+ if (labels.has(key))
244
+ invalid('classifier.definition.labels', 'label keys must be unique.');
245
+ labels.add(key);
246
+ text(label.displayName, 'classifier.label.displayName');
247
+ text(label.description, 'classifier.label.description');
248
+ text(label.documentTypeKey, 'classifier.label.documentTypeKey', true);
249
+ if (label.displayName.length > 200 || label.description.length > 1024)
250
+ invalid('classifier.label', 'display name or description exceeds its bound.');
251
+ if (key === 'Other' && label.documentTypeKey !== 'Other')
252
+ invalid('classifier.label', 'Other must route to the reserved manual review target Other.');
253
+ if (key !== 'Other' && !codes.has(label.documentTypeKey))
254
+ invalid('classifier.label', 'each non-Other label must reference a leaf in this bundle.');
255
+ }
256
+ if (definition.minimumConfidence !== undefined && (typeof definition.minimumConfidence !== 'number' || !Number.isFinite(definition.minimumConfidence) || definition.minimumConfidence < 0 || definition.minimumConfidence > 1))
257
+ invalid('classifier.minimumConfidence', 'must be between 0 and 1.');
258
+ }
259
+ const normalized = { ...structuredClone(manifest), documentTypes };
260
+ const snapshots = Object.fromEntries(documentTypes.map(doc => [doc.code, doc.contentUnderstanding.analyzerDefinition]));
261
+ if (Buffer.byteLength(JSON.stringify(snapshots), 'utf8') > CONTENT_UNDERSTANDING_MAX_BYTES)
262
+ invalid('manifest', 'combined leaf snapshots exceed the 16 KiB admission budget.');
263
+ return normalized;
264
+ }
265
+ //# sourceMappingURL=content-understanding-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-understanding-manifest.js","sourceRoot":"","sources":["../../src/lib/content-understanding-manifest.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import type { Ora } from 'ora';
6
6
  import { PlatformAPIClient } from './api.js';
7
7
  import { type TenantMembership } from './tenant-context.js';
8
8
  import type { StoredTokens } from './auth.js';
9
+ import { ErrorCode } from './error-codes.js';
9
10
  export interface CommandContext {
10
11
  root: string;
11
12
  publicApiUrl: string;
@@ -29,6 +30,8 @@ export declare function resolveCommandContext(options?: {
29
30
  validatePublicApiUrl?: (url: string) => string;
30
31
  publicApiUrl?: string;
31
32
  pinPublicApiUrl?: boolean;
33
+ /** Let an owning command retain operation identity instead of exiting here. */
34
+ onError?: (code: ErrorCode, message?: string) => never;
32
35
  }): Promise<CommandContext>;
33
36
  /**
34
37
  * Normalise the output format — collapses the `--json` shorthand flag into `--format`.
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/lib/context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAIL,KAAK,gBAAgB,EAGtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAG9C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,gBAAgB,CAAC;IAC/B,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,CAAC,EAAE;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oBAAoB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GAAG,OAAO,CAAC,cAAc,CAAC,CAiD1B;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAGpF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAGvE"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/lib/context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAML,KAAK,gBAAgB,EAGtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,SAAS,EAA+B,MAAM,kBAAkB,CAAC;AAE1E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,gBAAgB,CAAC;IAC/B,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,CAAC,EAAE;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oBAAoB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,+EAA+E;IAC/E,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,KAAK,CAAC;CACxD,GAAG,OAAO,CAAC,cAAc,CAAC,CA2D1B;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAGpF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAGvE"}
@@ -5,8 +5,8 @@
5
5
  import ora from 'ora';
6
6
  import { findProjectRoot } from './config.js';
7
7
  import { PlatformAPIClient } from './api.js';
8
- import { resolvePublicApiUrl, resolveActiveTenantContext, TenantMembershipAuthError, } from './tenant-context.js';
9
- import { ErrorCode, exitWithError } from './error-codes.js';
8
+ import { resolvePublicApiUrl, resolveActiveTenantContext, TenantMembershipAuthError, TenantLoginRequiredError, TenantAuthConfigMismatchError, } from './tenant-context.js';
9
+ import { ErrorCode, errorCatalog, exitWithError } from './error-codes.js';
10
10
  /**
11
11
  * Resolve the full command context needed by every authenticated command.
12
12
  *
@@ -16,6 +16,7 @@ import { ErrorCode, exitWithError } from './error-codes.js';
16
16
  export async function resolveCommandContext(options) {
17
17
  const root = await findProjectRoot();
18
18
  if (!root) {
19
+ options?.onError?.(ErrorCode.E001);
19
20
  exitWithError(ErrorCode.E001);
20
21
  }
21
22
  const requestPolicy = options?.validatePublicApiUrl
@@ -39,9 +40,18 @@ export async function resolveCommandContext(options) {
39
40
  });
40
41
  }
41
42
  catch (error) {
43
+ if (error instanceof TenantLoginRequiredError) {
44
+ options?.onError?.(ErrorCode.E101);
45
+ exitWithError(ErrorCode.E101);
46
+ }
42
47
  if (error instanceof TenantMembershipAuthError) {
48
+ options?.onError?.(ErrorCode.E102);
43
49
  exitWithError(ErrorCode.E102);
44
50
  }
51
+ if (error instanceof TenantAuthConfigMismatchError) {
52
+ options?.onError?.(ErrorCode.E104, errorCatalog[ErrorCode.E104].message.replace('{details}', error.safeMessage));
53
+ exitWithError(ErrorCode.E104, { details: error.safeMessage });
54
+ }
45
55
  throw error;
46
56
  }
47
57
  const contextPublicApiUrl = options?.validatePublicApiUrl
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/lib/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/lib/context.ts"],"names":[],"mappings":"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"}
@@ -15,17 +15,60 @@ export interface CliManagedSourceOperation extends CliManagedSourceScope {
15
15
  status: "accepted" | "publishing" | "pending_review" | "deploying" | "handoff_pending" | "completed" | "failed";
16
16
  githubLinkSessionId?: string;
17
17
  templateCommitSha: string;
18
- bundleSha256: string;
18
+ bundleSha256?: string;
19
+ sourceProvenance?: {
20
+ kind: 'customer-merged-commit';
21
+ commitSha: string;
22
+ treeSha: string;
23
+ providerProofDigest: string;
24
+ predecessorReachable: true;
25
+ pullRequest: {
26
+ number: number;
27
+ headBranch: string;
28
+ baseBranch: string;
29
+ headSha: string;
30
+ baseSha: string;
31
+ mergedCommitSha: string;
32
+ mergedAt: string;
33
+ };
34
+ checks: {
35
+ name: string;
36
+ headSha: string;
37
+ conclusion: 'success';
38
+ runId: number;
39
+ }[];
40
+ providerReviews: {
41
+ id: number;
42
+ state: string;
43
+ commitSha: string;
44
+ userId: number;
45
+ }[];
46
+ };
47
+ customerAuthorization?: {
48
+ kind: 'authenticated-exact-commit';
49
+ actorId: string;
50
+ githubUserId: number;
51
+ pullRequestNumber: number;
52
+ mergedCommitSha: string;
53
+ authorizedAt: string;
54
+ };
19
55
  configHash: string;
20
56
  bundleSchemaVersion?: 'eai.cli_managed_source_bundle.v1' | 'eai.cli_managed_source_bundle.v2';
21
57
  reviewRepair?: CliManagedSourceReviewRepair;
22
58
  verifiedGithubUser: NonNullable<CliManagedGithubLinkSession["verifiedGithubUser"]>;
59
+ repositoryAuthority?: "eai-managed" | "customer-owned";
60
+ predecessor?: {
61
+ operationId: string;
62
+ integrityHash: string;
63
+ mergedCommitSha: string;
64
+ };
23
65
  repository: {
24
66
  owner: string;
25
67
  name: string;
26
68
  id?: number;
27
69
  nodeId?: string;
28
70
  defaultBranch?: string;
71
+ installationId?: string;
29
72
  private?: boolean;
30
73
  };
31
74
  review?: {
@@ -1 +1 @@
1
- {"version":3,"file":"eai-managed-source-client-types.d.ts","sourceRoot":"","sources":["../../src/lib/eai-managed-source-client-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eai-managed-source-client-types.d.ts","sourceRoot":"","sources":["../../src/lib/eai-managed-source-client-types.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,9 @@ export interface ExpectedCliManagedSourceOperation {
9
9
  bundleSchemaVersion?: CliManagedSourceOperation['bundleSchemaVersion'];
10
10
  githubLinkSessionId?: string;
11
11
  verifiedGithubUser?: CliManagedSourceOperation["verifiedGithubUser"];
12
+ sourceKind?: 'bundle' | 'customer-merged-commit';
13
+ sourceProvenance?: CliManagedSourceOperation['sourceProvenance'];
14
+ customerAuthorization?: CliManagedSourceOperation['customerAuthorization'];
12
15
  }
13
16
  /** Repeat submission of the same actor-scoped source snapshot cannot create duplicate bot publications. */
14
17
  export declare function cliManagedSourceIdempotencyKey(scope: CliManagedSourceScope, bundleSha256: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"eai-managed-source-operation-client.d.ts","sourceRoot":"","sources":["../../src/lib/eai-managed-source-operation-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAiC,MAAM,UAAU,CAAC;AAG5E,OAAO,KAAK,EACV,yBAAyB,EACzB,qBAAqB,EACtB,MAAM,sCAAsC,CAAC;AAE9C,+EAA+E;AAC/E,MAAM,WAAW,iCAAiC;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,yBAAyB,CAAC,qBAAqB,CAAC,CAAC;IACvE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,yBAAyB,CAAC,oBAAoB,CAAC,CAAC;CACtE;AAED,2GAA2G;AAC3G,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,qBAAqB,EAC5B,YAAY,EAAE,MAAM,GACnB,MAAM,CAkBR;AAED,gGAAgG;AAChG,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,qBAAqB,EAC5B,QAAQ,CAAC,EAAE,iCAAiC,GAC3C,yBAAyB,CA2F3B;AAED,sGAAsG;AACtG,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,yBAAyB,GACnC,SAAS,GAAG,QAAQ,GAAG,YAAY,CAIrC;AAED,0FAA0F;AAC1F,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,yBAAyB,CAAC,CAQpC;AAED,yFAAyF;AACzF,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,qBAAqB,EAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC7C,OAAO,CAAC,EAAE,yBAAyB,EACnC,YAAY,GAAE;IAAE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAAO,GAC3D,OAAO,CAAC,yBAAyB,CAAC,CAgEpC"}
1
+ {"version":3,"file":"eai-managed-source-operation-client.d.ts","sourceRoot":"","sources":["../../src/lib/eai-managed-source-operation-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAiC,MAAM,UAAU,CAAC;AAG5E,OAAO,KAAK,EACV,yBAAyB,EACzB,qBAAqB,EACtB,MAAM,sCAAsC,CAAC;AAE9C,+EAA+E;AAC/E,MAAM,WAAW,iCAAiC;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,yBAAyB,CAAC,qBAAqB,CAAC,CAAC;IACvE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,yBAAyB,CAAC,oBAAoB,CAAC,CAAC;IACrE,UAAU,CAAC,EAAE,QAAQ,GAAG,wBAAwB,CAAC;IACjD,gBAAgB,CAAC,EAAE,yBAAyB,CAAC,kBAAkB,CAAC,CAAC;IACjE,qBAAqB,CAAC,EAAE,yBAAyB,CAAC,uBAAuB,CAAC,CAAC;CAC5E;AAED,2GAA2G;AAC3G,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,qBAAqB,EAC5B,YAAY,EAAE,MAAM,GACnB,MAAM,CAkBR;AAED,gGAAgG;AAChG,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,qBAAqB,EAC5B,QAAQ,CAAC,EAAE,iCAAiC,GAC3C,yBAAyB,CAuJ3B;AAED,sGAAsG;AACtG,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,yBAAyB,GACnC,SAAS,GAAG,QAAQ,GAAG,YAAY,CAIrC;AAED,0FAA0F;AAC1F,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,yBAAyB,CAAC,CAQpC;AAED,yFAAyF;AACzF,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,qBAAqB,EAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC7C,OAAO,CAAC,EAAE,yBAAyB,EACnC,YAAY,GAAE;IAAE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAAO,GAC3D,OAAO,CAAC,yBAAyB,CAAC,CAsEpC"}
@@ -1,4 +1,5 @@
1
1
  import { createHash } from "node:crypto";
2
+ import { isDeepStrictEqual } from "node:util";
2
3
  import { readManagedPublicResponseText } from "./api.js";
3
4
  import { CLI_MANAGED_SOURCE_LIMITS, ManagedSourceError, isManagedAppSourcePath } from "./eai-managed-source.js";
4
5
  import { CLI_MANAGED_SOURCE_OPERATION_ID } from "./eai-managed-identifiers.js";
@@ -22,11 +23,70 @@ export function cliManagedSourceIdempotencyKey(scope, bundleSha256) {
22
23
  }
23
24
  /** Every readback must retain the original actor, runtime scope and immutable source digest. */
24
25
  export function validateCliManagedSourceOperation(value, scope, expected) {
26
+ const provenance = value?.sourceProvenance;
27
+ const authorization = value?.customerAuthorization;
28
+ const customerCommit = provenance?.kind === 'customer-merged-commit';
29
+ if (provenance !== undefined || authorization !== undefined) {
30
+ if (!customerCommit || !authorization || authorization.kind !== 'authenticated-exact-commit'
31
+ || !['deploying', 'handoff_pending', 'completed', 'failed'].includes(value.status)
32
+ || value.repositoryAuthority !== 'customer-owned' || !value.predecessor
33
+ || value.bundleSha256 !== undefined || value.bundleSchemaVersion !== undefined
34
+ || value.upload !== undefined || value.reviewRepair !== undefined
35
+ || Object.keys(authorization).sort().join(',') !== 'actorId,authorizedAt,githubUserId,kind,mergedCommitSha,pullRequestNumber'
36
+ || Object.keys(provenance).sort().join(',') !== 'checks,commitSha,kind,predecessorReachable,providerProofDigest,providerReviews,pullRequest,treeSha'
37
+ || typeof provenance.commitSha !== 'string' || typeof provenance.treeSha !== 'string'
38
+ || typeof provenance.providerProofDigest !== 'string' || typeof authorization.authorizedAt !== 'string'
39
+ || !/^[a-f0-9]{40}$/.test(provenance.commitSha) || !/^[a-f0-9]{40}$/.test(provenance.treeSha)
40
+ || !/^sha256:[a-f0-9]{64}$/.test(provenance.providerProofDigest) || provenance.predecessorReachable !== true
41
+ || provenance.commitSha === value.predecessor.mergedCommitSha
42
+ || authorization.actorId !== scope.actorId || authorization.githubUserId !== value.verifiedGithubUser?.id
43
+ || authorization.pullRequestNumber !== provenance.pullRequest?.number
44
+ || authorization.mergedCommitSha !== provenance.commitSha
45
+ || !Number.isFinite(Date.parse(authorization.authorizedAt))
46
+ || !provenance.pullRequest || !Number.isSafeInteger(provenance.pullRequest.number) || provenance.pullRequest.number < 1
47
+ || Object.keys(provenance.pullRequest).sort().join(',') !== 'baseBranch,baseSha,headBranch,headSha,mergedAt,mergedCommitSha,number'
48
+ || typeof provenance.pullRequest.headBranch !== 'string' || !provenance.pullRequest.headBranch
49
+ || typeof provenance.pullRequest.mergedAt !== 'string'
50
+ || provenance.pullRequest.mergedCommitSha !== provenance.commitSha
51
+ || provenance.pullRequest.baseBranch !== value.repository?.defaultBranch
52
+ || !/^[a-f0-9]{40}$/.test(provenance.pullRequest.headSha) || !/^[a-f0-9]{40}$/.test(provenance.pullRequest.baseSha)
53
+ || !Number.isFinite(Date.parse(provenance.pullRequest.mergedAt))
54
+ || value.review?.mergedCommitSha !== provenance.commitSha || value.review?.workflowRunId !== undefined
55
+ || value.review?.number !== provenance.pullRequest.number || value.review?.headSha !== provenance.pullRequest.headSha
56
+ || value.review?.headBranch !== provenance.pullRequest.headBranch || value.review?.baseSha !== provenance.pullRequest.baseSha
57
+ || !Array.isArray(provenance.checks) || provenance.checks.length < 1 || provenance.checks.length > 100
58
+ || new Set(provenance.checks.map(check => check.runId)).size !== provenance.checks.length
59
+ || provenance.checks.some(check => !check || check.headSha !== provenance.pullRequest.headSha
60
+ || Object.keys(check).sort().join(',') !== 'conclusion,headSha,name,runId'
61
+ || check.conclusion !== 'success' || !Number.isSafeInteger(check.runId) || check.runId < 1
62
+ || typeof check.name !== 'string' || !check.name)
63
+ || !Array.isArray(provenance.providerReviews) || provenance.providerReviews.length > 100
64
+ || provenance.providerReviews.some(review => !review || !Number.isSafeInteger(review.id) || review.id < 1
65
+ || Object.keys(review).sort().join(',') !== 'commitSha,id,state,userId'
66
+ || !Number.isSafeInteger(review.userId) || review.userId < 1 || !/^[a-f0-9]{40}$/.test(review.commitSha)
67
+ || !['APPROVED', 'CHANGES_REQUESTED', 'COMMENTED', 'DISMISSED', 'PENDING'].includes(review.state))) {
68
+ throw new ManagedSourceError('MANAGED_SOURCE_BINDING_MISMATCH', 'Customer commit does not retain exact consent and provider provenance.');
69
+ }
70
+ }
71
+ const customerRepository = value?.repositoryAuthority === "customer-owned"
72
+ && value.repository?.private === true
73
+ && /^[a-z\d][a-z\d-]{0,38}$/i.test(value.repository.owner)
74
+ && value.repository.owner.toLowerCase() !== "eai-generated-apps"
75
+ && Number.isSafeInteger(value.repository.id) && (value.repository.id ?? 0) > 0
76
+ && typeof value.repository.nodeId === "string" && value.repository.nodeId.length > 0
77
+ && typeof value.repository.defaultBranch === "string" && value.repository.defaultBranch.length > 0
78
+ && /^[1-9][0-9]*$/.test(value.repository.installationId ?? "")
79
+ && /^cli-managed-[a-f0-9]{32}$/.test(value.predecessor?.operationId ?? "")
80
+ && /^sha256:[a-f0-9]{64}$/.test(value.predecessor?.integrityHash ?? "")
81
+ && /^[a-f0-9]{40}$/.test(value.predecessor?.mergedCommitSha ?? "");
25
82
  if (!value ||
26
83
  value.schemaVersion !== "eai.cli_managed_source_operation.v1" ||
27
84
  value.sourceMode !== "eai-cli-generated" ||
28
85
  !CLI_MANAGED_SOURCE_OPERATION_ID.test(value.operationId) ||
29
86
  (expected?.operationId && value.operationId !== expected.operationId) ||
87
+ (expected?.sourceKind && expected.sourceKind !== (customerCommit ? 'customer-merged-commit' : 'bundle')) ||
88
+ (expected?.sourceProvenance && !isDeepStrictEqual(expected.sourceProvenance, provenance)) ||
89
+ (expected?.customerAuthorization && !isDeepStrictEqual(expected.customerAuthorization, authorization)) ||
30
90
  value.actorId !== scope.actorId ||
31
91
  !scope.actorId ||
32
92
  value.tenantId !== scope.tenantId ||
@@ -34,7 +94,7 @@ export function validateCliManagedSourceOperation(value, scope, expected) {
34
94
  value.targetTenantId !== scope.targetTenantId ||
35
95
  value.environment !== scope.environment ||
36
96
  !/^[a-f0-9]{40}$/.test(value.templateCommitSha) ||
37
- !/^sha256:[a-f0-9]{64}$/.test(value.bundleSha256) ||
97
+ (!customerCommit && !/^sha256:[a-f0-9]{64}$/.test(value.bundleSha256 ?? '')) ||
38
98
  !/^sha256:[a-f0-9]{64}$/.test(value.configHash) ||
39
99
  (expected?.templateCommitSha &&
40
100
  value.templateCommitSha !== expected.templateCommitSha) ||
@@ -53,7 +113,8 @@ export function validateCliManagedSourceOperation(value, scope, expected) {
53
113
  "completed",
54
114
  "failed",
55
115
  ].includes(value.status) ||
56
- value.repository?.owner !== "eai-generated-apps" ||
116
+ !((value.repositoryAuthority === undefined || value.repositoryAuthority === "eai-managed")
117
+ && value.repository?.owner === "eai-generated-apps") && !customerRepository ||
57
118
  !/^[A-Za-z0-9_.-]+$/.test(value.repository?.name || "") ||
58
119
  value.verifiedGithubUser?.actorId !== scope.actorId ||
59
120
  !Number.isSafeInteger(value.verifiedGithubUser?.id) ||
@@ -141,6 +202,9 @@ export async function pollCliManagedSource(client, scope, operationId, options,
141
202
  configHash: initial?.configHash,
142
203
  githubLinkSessionId: initial?.githubLinkSessionId,
143
204
  verifiedGithubUser: initial?.verifiedGithubUser,
205
+ sourceKind: initial ? (initial.sourceProvenance ? 'customer-merged-commit' : 'bundle') : undefined,
206
+ sourceProvenance: initial?.sourceProvenance,
207
+ customerAuthorization: initial?.customerAuthorization,
144
208
  };
145
209
  while (true) {
146
210
  if (!operation) {
@@ -155,6 +219,9 @@ export async function pollCliManagedSource(client, scope, operationId, options,
155
219
  expected.configHash = operation.configHash;
156
220
  expected.githubLinkSessionId = operation.githubLinkSessionId;
157
221
  expected.verifiedGithubUser = operation.verifiedGithubUser;
222
+ expected.sourceKind = operation.sourceProvenance ? 'customer-merged-commit' : 'bundle';
223
+ expected.sourceProvenance = operation.sourceProvenance;
224
+ expected.customerAuthorization = operation.customerAuthorization;
158
225
  if (!options.wait ||
159
226
  classifyCliManagedSourceOperation(operation) !== "pending" ||
160
227
  operation.status === "pending_review" ||