@thinkai/tai-api-contract 2.170.0 → 2.171.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.
@@ -1,7 +1,7 @@
1
1
  openapi: 3.0.3
2
2
  info:
3
3
  title: ThinkAI API
4
- version: 2.170.0
4
+ version: 2.171.0
5
5
  description: >
6
6
  Contract surface for the AI Driven SDLC backend used by ThinkAI.
7
7
  Workspace-scoped routes use `/workspaces/{workspaceId}/...`.
@@ -412,6 +412,162 @@ paths:
412
412
  error: Forbidden
413
413
  code: forbidden
414
414
 
415
+ /admin/assessment-manifest-validation:
416
+ post:
417
+ tags: [PlatformAdmin]
418
+ summary: Validate an assessment manifest before export
419
+ operationId: runAssessmentManifestValidation
420
+ description: >
421
+ Runs the fail-closed manifest check for one sold assessment. The server
422
+ ignores `manifest.validation` and `manifest.watermark` from the client.
423
+ `buyerDeliverable` is true only when the result is validated and
424
+ `shareMode` is internal. An external share-safe result can be validated
425
+ and is never the buyer file. Unset or exceeded tolerances fail. No
426
+ numeric tolerance is assumed. GitLab and Bitbucket fixtures are not part
427
+ of this operation.
428
+
429
+ **Authorization:** Bearer JWT required. Caller email must appear in `PLATFORM_ADMIN_EMAILS`.
430
+ requestBody:
431
+ required: true
432
+ content:
433
+ application/json:
434
+ schema:
435
+ type: object
436
+ required:
437
+ - manifest
438
+ - workspaceId
439
+ - expectedWorkspaceId
440
+ - expectedRepositoryIds
441
+ - soldWindowComplete
442
+ - premiumAiAssessable
443
+ - namedPersonSectionIds
444
+ - tolerances
445
+ properties:
446
+ manifest:
447
+ type: object
448
+ required:
449
+ - offerId
450
+ - dictionaryVersion
451
+ - validation
452
+ - shareMode
453
+ - watermark
454
+ - scope
455
+ - windows
456
+ - sources
457
+ - consent
458
+ - sections
459
+ properties:
460
+ offerId:
461
+ type: string
462
+ enum: [engineering_readiness_baseline, agentic_ai_roi]
463
+ dictionaryVersion:
464
+ type: string
465
+ validation:
466
+ type: string
467
+ enum: [validated, not_validated]
468
+ shareMode:
469
+ type: string
470
+ enum: [internal, external]
471
+ watermark:
472
+ type: string
473
+ nullable: true
474
+ enum: ["NOT VALIDATED", "SAMPLE · SYNTHETIC DATA"]
475
+ scope:
476
+ type: object
477
+ windows:
478
+ type: object
479
+ sources:
480
+ type: array
481
+ items:
482
+ type: object
483
+ consent:
484
+ type: object
485
+ sections:
486
+ type: array
487
+ items:
488
+ type: object
489
+ workspaceId:
490
+ type: string
491
+ expectedWorkspaceId:
492
+ type: string
493
+ expectedRepositoryIds:
494
+ type: array
495
+ items:
496
+ type: string
497
+ soldWindowComplete:
498
+ type: boolean
499
+ premiumAiAssessable:
500
+ type: boolean
501
+ namedPersonSectionIds:
502
+ type: array
503
+ items:
504
+ type: string
505
+ tolerances:
506
+ type: array
507
+ items:
508
+ type: object
509
+ required: [id, status]
510
+ properties:
511
+ id:
512
+ type: string
513
+ status:
514
+ type: string
515
+ enum: [unset, exceeded, within]
516
+ responses:
517
+ "200":
518
+ description: Validation result. Client validation and watermark inputs are ignored.
519
+ content:
520
+ application/json:
521
+ schema:
522
+ type: object
523
+ required: [buyerDeliverable, validation, watermark, reasons, contentHash]
524
+ properties:
525
+ buyerDeliverable:
526
+ type: boolean
527
+ validation:
528
+ type: string
529
+ enum: [validated, not_validated]
530
+ watermark:
531
+ type: string
532
+ nullable: true
533
+ enum: ["NOT VALIDATED"]
534
+ reasons:
535
+ type: array
536
+ items:
537
+ type: object
538
+ required: [code, message]
539
+ properties:
540
+ code:
541
+ type: string
542
+ message:
543
+ type: string
544
+ contentHash:
545
+ type: string
546
+ "400":
547
+ description: Body failed validation.
548
+ content:
549
+ application/json:
550
+ schema:
551
+ $ref: "#/components/schemas/ErrorMessageDto"
552
+ example:
553
+ error: manifest.offerId is not a known assessment offer
554
+ code: invalid_body
555
+ "401":
556
+ description: Missing or invalid JWT.
557
+ content:
558
+ application/json:
559
+ schema:
560
+ $ref: "#/components/schemas/ErrorMessageDto"
561
+ "403":
562
+ description: Caller is not a platform admin.
563
+ content:
564
+ application/json:
565
+ schema:
566
+ $ref: "#/components/schemas/ErrorMessageDto"
567
+ example:
568
+ error: Forbidden
569
+ code: forbidden
570
+
415
571
  /admin/readiness/token-usage:
416
572
  get:
417
573
  tags: [PlatformAdmin]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thinkai/tai-api-contract",
3
- "version": "2.170.0",
3
+ "version": "2.171.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -67,6 +67,27 @@ export interface paths {
67
67
  patch?: never;
68
68
  trace?: never;
69
69
  };
70
+ "/admin/assessment-manifest-validation": {
71
+ parameters: {
72
+ query?: never;
73
+ header?: never;
74
+ path?: never;
75
+ cookie?: never;
76
+ };
77
+ get?: never;
78
+ put?: never;
79
+ /**
80
+ * Validate an assessment manifest before export
81
+ * @description Runs the fail-closed manifest check for one sold assessment. The server ignores `manifest.validation` and `manifest.watermark` from the client. `buyerDeliverable` is true only when the result is validated and `shareMode` is internal. An external share-safe result can be validated and is never the buyer file. Unset or exceeded tolerances fail. No numeric tolerance is assumed. GitLab and Bitbucket fixtures are not part of this operation.
82
+ * **Authorization:** Bearer JWT required. Caller email must appear in `PLATFORM_ADMIN_EMAILS`.
83
+ */
84
+ post: operations["runAssessmentManifestValidation"];
85
+ delete?: never;
86
+ options?: never;
87
+ head?: never;
88
+ patch?: never;
89
+ trace?: never;
90
+ };
70
91
  "/admin/readiness/token-usage": {
71
92
  parameters: {
72
93
  query?: never;
@@ -12014,6 +12035,108 @@ export interface operations {
12014
12035
  };
12015
12036
  };
12016
12037
  };
12038
+ runAssessmentManifestValidation: {
12039
+ parameters: {
12040
+ query?: never;
12041
+ header?: never;
12042
+ path?: never;
12043
+ cookie?: never;
12044
+ };
12045
+ requestBody: {
12046
+ content: {
12047
+ "application/json": {
12048
+ manifest: {
12049
+ /** @enum {string} */
12050
+ offerId: "engineering_readiness_baseline" | "agentic_ai_roi";
12051
+ dictionaryVersion: string;
12052
+ /** @enum {string} */
12053
+ validation: "validated" | "not_validated";
12054
+ /** @enum {string} */
12055
+ shareMode: "internal" | "external";
12056
+ /** @enum {string|null} */
12057
+ watermark: "NOT VALIDATED" | "SAMPLE · SYNTHETIC DATA" | null;
12058
+ scope: Record<string, never>;
12059
+ windows: Record<string, never>;
12060
+ sources: Record<string, never>[];
12061
+ consent: Record<string, never>;
12062
+ sections: Record<string, never>[];
12063
+ };
12064
+ workspaceId: string;
12065
+ expectedWorkspaceId: string;
12066
+ expectedRepositoryIds: string[];
12067
+ soldWindowComplete: boolean;
12068
+ premiumAiAssessable: boolean;
12069
+ namedPersonSectionIds: string[];
12070
+ tolerances: {
12071
+ id: string;
12072
+ /** @enum {string} */
12073
+ status: "unset" | "exceeded" | "within";
12074
+ }[];
12075
+ };
12076
+ };
12077
+ };
12078
+ responses: {
12079
+ /** @description Validation result. Client validation and watermark inputs are ignored. */
12080
+ 200: {
12081
+ headers: {
12082
+ [name: string]: unknown;
12083
+ };
12084
+ content: {
12085
+ "application/json": {
12086
+ buyerDeliverable: boolean;
12087
+ /** @enum {string} */
12088
+ validation: "validated" | "not_validated";
12089
+ /** @enum {string|null} */
12090
+ watermark: "NOT VALIDATED" | null;
12091
+ reasons: {
12092
+ code: string;
12093
+ message: string;
12094
+ }[];
12095
+ contentHash: string;
12096
+ };
12097
+ };
12098
+ };
12099
+ /** @description Body failed validation. */
12100
+ 400: {
12101
+ headers: {
12102
+ [name: string]: unknown;
12103
+ };
12104
+ content: {
12105
+ /**
12106
+ * @example {
12107
+ * "error": "manifest.offerId is not a known assessment offer",
12108
+ * "code": "invalid_body"
12109
+ * }
12110
+ */
12111
+ "application/json": components["schemas"]["ErrorMessageDto"];
12112
+ };
12113
+ };
12114
+ /** @description Missing or invalid JWT. */
12115
+ 401: {
12116
+ headers: {
12117
+ [name: string]: unknown;
12118
+ };
12119
+ content: {
12120
+ "application/json": components["schemas"]["ErrorMessageDto"];
12121
+ };
12122
+ };
12123
+ /** @description Caller is not a platform admin. */
12124
+ 403: {
12125
+ headers: {
12126
+ [name: string]: unknown;
12127
+ };
12128
+ content: {
12129
+ /**
12130
+ * @example {
12131
+ * "error": "Forbidden",
12132
+ * "code": "forbidden"
12133
+ * }
12134
+ */
12135
+ "application/json": components["schemas"]["ErrorMessageDto"];
12136
+ };
12137
+ };
12138
+ };
12139
+ };
12017
12140
  adminListReadinessTokenUsage: {
12018
12141
  parameters: {
12019
12142
  query?: {