@company-semantics/contracts 49.0.0 → 50.0.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@company-semantics/contracts",
3
- "version": "49.0.0",
3
+ "version": "50.0.0",
4
4
  "private": false,
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,3 +1,3 @@
1
1
  // AUTO-GENERATED — do not edit. Run pnpm generate:spec-hash to regenerate.
2
- export const SPEC_HASH = '6aca68a12d82' as const;
3
- export const SPEC_HASH_FULL = '6aca68a12d828a1efb9e1d1865a3955e8540d9c83563d2d6be6b04ae3eac7da1' as const;
2
+ export const SPEC_HASH = '7ed2b7218b4b' as const;
3
+ export const SPEC_HASH_FULL = '7ed2b7218b4b4a160ba6e9d8854f2e9277d540c33658448d9a0452e96f1cd581' as const;
@@ -3565,6 +3565,74 @@ export interface paths {
3565
3565
  patch?: never;
3566
3566
  trace?: never;
3567
3567
  };
3568
+ "/api/comments/threads/{threadId}/accept-intent": {
3569
+ parameters: {
3570
+ query?: never;
3571
+ header?: never;
3572
+ path?: never;
3573
+ cookie?: never;
3574
+ };
3575
+ get?: never;
3576
+ put?: never;
3577
+ /** Claim the acceptance lease on an open suggestion */
3578
+ post: operations["acceptSuggestionIntent"];
3579
+ delete?: never;
3580
+ options?: never;
3581
+ head?: never;
3582
+ patch?: never;
3583
+ trace?: never;
3584
+ };
3585
+ "/api/comments/threads/{threadId}/accept-complete": {
3586
+ parameters: {
3587
+ query?: never;
3588
+ header?: never;
3589
+ path?: never;
3590
+ cookie?: never;
3591
+ };
3592
+ get?: never;
3593
+ put?: never;
3594
+ /** Record the accept decision by claim token */
3595
+ post: operations["acceptSuggestionComplete"];
3596
+ delete?: never;
3597
+ options?: never;
3598
+ head?: never;
3599
+ patch?: never;
3600
+ trace?: never;
3601
+ };
3602
+ "/api/comments/threads/{threadId}/accept-release": {
3603
+ parameters: {
3604
+ query?: never;
3605
+ header?: never;
3606
+ path?: never;
3607
+ cookie?: never;
3608
+ };
3609
+ get?: never;
3610
+ put?: never;
3611
+ /** Release a held acceptance lease without deciding */
3612
+ post: operations["releaseSuggestionClaim"];
3613
+ delete?: never;
3614
+ options?: never;
3615
+ head?: never;
3616
+ patch?: never;
3617
+ trace?: never;
3618
+ };
3619
+ "/api/comments/threads/{threadId}/reject": {
3620
+ parameters: {
3621
+ query?: never;
3622
+ header?: never;
3623
+ path?: never;
3624
+ cookie?: never;
3625
+ };
3626
+ get?: never;
3627
+ put?: never;
3628
+ /** Reject an open suggestion (or withdraw as its author) */
3629
+ post: operations["rejectSuggestion"];
3630
+ delete?: never;
3631
+ options?: never;
3632
+ head?: never;
3633
+ patch?: never;
3634
+ trace?: never;
3635
+ };
3568
3636
  }
3569
3637
  export type webhooks = Record<string, never>;
3570
3638
  export interface components {
@@ -6397,7 +6465,16 @@ export interface components {
6397
6465
  /** Format: uuid */
6398
6466
  subjectId: string;
6399
6467
  anchor: components["schemas"]["CommentAnchor"];
6400
- body: string;
6468
+ /** @enum {string} */
6469
+ kind?: "comment" | "suggestion";
6470
+ suggestion?: {
6471
+ /** @constant */
6472
+ v: 1;
6473
+ /** @enum {string} */
6474
+ op: "insert" | "delete" | "replace";
6475
+ insertedText?: string;
6476
+ };
6477
+ body?: string;
6401
6478
  mentions?: {
6402
6479
  /** Format: uuid */
6403
6480
  userId: string;
@@ -6436,6 +6513,14 @@ export interface components {
6436
6513
  CommentThreadSummaryResponse: {
6437
6514
  thread: components["schemas"]["CommentThreadSummary"];
6438
6515
  };
6516
+ /** @description The acceptance lease: the opaque claim token that alone can complete the accept, and how long the lease lives. */
6517
+ SuggestionClaimResponse: {
6518
+ claimToken: string;
6519
+ leaseDurationMs: number;
6520
+ };
6521
+ SuggestionClaimRequest: {
6522
+ claimToken: string;
6523
+ };
6439
6524
  /** @description Server-enforced collaboration size limits, published so clients can pre-check. */
6440
6525
  CollabSyncLimits: {
6441
6526
  maxUpdateBytes: number;
@@ -6473,10 +6558,13 @@ export interface components {
6473
6558
  subjectType: "company_md" | "strategy_doc" | "work_item" | "meeting_recording";
6474
6559
  subjectId: string;
6475
6560
  /** @enum {string} */
6476
- anchorType: "document" | "text";
6561
+ anchorType: "document" | "text" | "text-insertion";
6477
6562
  anchor: components["schemas"]["CommentAnchor"];
6478
6563
  /** @enum {string} */
6479
6564
  status: "open" | "resolved";
6565
+ /** @enum {string} */
6566
+ kind: "comment" | "suggestion";
6567
+ suggestion: components["schemas"]["Suggestion"] | null;
6480
6568
  createdByUserId: string | null;
6481
6569
  resolvedByUserId: string | null;
6482
6570
  resolvedAt: string | null;
@@ -6484,7 +6572,7 @@ export interface components {
6484
6572
  updatedAt: string;
6485
6573
  comments: components["schemas"]["Comment"][];
6486
6574
  };
6487
- /** @description Opaque, versioned comment anchor: document-level, or a text anchor with a required quote and optional relative positions. */
6575
+ /** @description Opaque, versioned comment anchor: document-level, a text anchor with a required quote and optional relative positions, or a zero-width text-insertion point for insert suggestions. */
6488
6576
  CommentAnchor: {
6489
6577
  /** @constant */
6490
6578
  type: "document";
@@ -6500,6 +6588,24 @@ export interface components {
6500
6588
  quote: string;
6501
6589
  prefix: string;
6502
6590
  suffix: string;
6591
+ } | {
6592
+ /** @constant */
6593
+ type: "text-insertion";
6594
+ /** @constant */
6595
+ v: 1;
6596
+ relPos?: string;
6597
+ leftContext: string;
6598
+ rightContext: string;
6599
+ };
6600
+ /** @description A suggested edit as proposed: the operation, its insertedText (insert/replace only), and the decision status composed from the thread row. */
6601
+ Suggestion: {
6602
+ /** @constant */
6603
+ v: 1;
6604
+ /** @enum {string} */
6605
+ op: "insert" | "delete" | "replace";
6606
+ insertedText?: string;
6607
+ /** @enum {string} */
6608
+ status: "open" | "accepted" | "rejected";
6503
6609
  };
6504
6610
  /** @description One comment; body is null iff soft-deleted (redacted projection with empty mentions). */
6505
6611
  Comment: {
@@ -6526,10 +6632,13 @@ export interface components {
6526
6632
  subjectType: "company_md" | "strategy_doc" | "work_item" | "meeting_recording";
6527
6633
  subjectId: string;
6528
6634
  /** @enum {string} */
6529
- anchorType: "document" | "text";
6635
+ anchorType: "document" | "text" | "text-insertion";
6530
6636
  anchor: components["schemas"]["CommentAnchor"];
6531
6637
  /** @enum {string} */
6532
6638
  status: "open" | "resolved";
6639
+ /** @enum {string} */
6640
+ kind: "comment" | "suggestion";
6641
+ suggestion: components["schemas"]["Suggestion"] | null;
6533
6642
  createdByUserId: string | null;
6534
6643
  resolvedByUserId: string | null;
6535
6644
  resolvedAt: string | null;
@@ -12635,6 +12744,13 @@ export interface operations {
12635
12744
  };
12636
12745
  content?: never;
12637
12746
  };
12747
+ /** @description Not a comment thread: a suggestion is decided via accept or reject, never resolved */
12748
+ 409: {
12749
+ headers: {
12750
+ [name: string]: unknown;
12751
+ };
12752
+ content?: never;
12753
+ };
12638
12754
  };
12639
12755
  };
12640
12756
  reopenCommentThread: {
@@ -12664,6 +12780,179 @@ export interface operations {
12664
12780
  };
12665
12781
  content?: never;
12666
12782
  };
12783
+ /** @description Not a comment thread: a decided suggestion is terminal and never reopens */
12784
+ 409: {
12785
+ headers: {
12786
+ [name: string]: unknown;
12787
+ };
12788
+ content?: never;
12789
+ };
12790
+ };
12791
+ };
12792
+ acceptSuggestionIntent: {
12793
+ parameters: {
12794
+ query?: never;
12795
+ header?: never;
12796
+ path: {
12797
+ threadId: string;
12798
+ };
12799
+ cookie?: never;
12800
+ };
12801
+ requestBody?: never;
12802
+ responses: {
12803
+ /** @description Lease claimed: the opaque claim token (the only artifact that can complete the accept) and its duration */
12804
+ 200: {
12805
+ headers: {
12806
+ [name: string]: unknown;
12807
+ };
12808
+ content: {
12809
+ "application/json": components["schemas"]["SuggestionClaimResponse"];
12810
+ };
12811
+ };
12812
+ /** @description Thread not found, or the caller may not decide suggestions on it */
12813
+ 404: {
12814
+ headers: {
12815
+ [name: string]: unknown;
12816
+ };
12817
+ content?: never;
12818
+ };
12819
+ /** @description Not a suggestion thread, already claimed by a live lease, or already decided */
12820
+ 409: {
12821
+ headers: {
12822
+ [name: string]: unknown;
12823
+ };
12824
+ content?: never;
12825
+ };
12826
+ };
12827
+ };
12828
+ acceptSuggestionComplete: {
12829
+ parameters: {
12830
+ query?: never;
12831
+ header?: never;
12832
+ path: {
12833
+ threadId: string;
12834
+ };
12835
+ cookie?: never;
12836
+ };
12837
+ requestBody: {
12838
+ content: {
12839
+ "application/json": components["schemas"]["SuggestionClaimRequest"];
12840
+ };
12841
+ };
12842
+ responses: {
12843
+ /** @description Suggestion accepted (thread resolved); valid after lease expiry and retry-safe for the same actor */
12844
+ 200: {
12845
+ headers: {
12846
+ [name: string]: unknown;
12847
+ };
12848
+ content: {
12849
+ "application/json": components["schemas"]["CommentThreadSummaryResponse"];
12850
+ };
12851
+ };
12852
+ /** @description Malformed claim token */
12853
+ 400: {
12854
+ headers: {
12855
+ [name: string]: unknown;
12856
+ };
12857
+ content?: never;
12858
+ };
12859
+ /** @description Thread not found, or the caller may not read its subject */
12860
+ 404: {
12861
+ headers: {
12862
+ [name: string]: unknown;
12863
+ };
12864
+ content?: never;
12865
+ };
12866
+ /** @description Not a suggestion thread, or the token does not match a live claim on an open suggestion */
12867
+ 409: {
12868
+ headers: {
12869
+ [name: string]: unknown;
12870
+ };
12871
+ content?: never;
12872
+ };
12873
+ };
12874
+ };
12875
+ releaseSuggestionClaim: {
12876
+ parameters: {
12877
+ query?: never;
12878
+ header?: never;
12879
+ path: {
12880
+ threadId: string;
12881
+ };
12882
+ cookie?: never;
12883
+ };
12884
+ requestBody: {
12885
+ content: {
12886
+ "application/json": components["schemas"]["SuggestionClaimRequest"];
12887
+ };
12888
+ };
12889
+ responses: {
12890
+ /** @description Lease released; the suggestion stays open and claimable */
12891
+ 200: {
12892
+ headers: {
12893
+ [name: string]: unknown;
12894
+ };
12895
+ content: {
12896
+ "application/json": components["schemas"]["CommentThreadSummaryResponse"];
12897
+ };
12898
+ };
12899
+ /** @description Malformed claim token */
12900
+ 400: {
12901
+ headers: {
12902
+ [name: string]: unknown;
12903
+ };
12904
+ content?: never;
12905
+ };
12906
+ /** @description Thread not found, or the caller may not read its subject */
12907
+ 404: {
12908
+ headers: {
12909
+ [name: string]: unknown;
12910
+ };
12911
+ content?: never;
12912
+ };
12913
+ /** @description Not a suggestion thread, or the token does not match a live claim on an open suggestion */
12914
+ 409: {
12915
+ headers: {
12916
+ [name: string]: unknown;
12917
+ };
12918
+ content?: never;
12919
+ };
12920
+ };
12921
+ };
12922
+ rejectSuggestion: {
12923
+ parameters: {
12924
+ query?: never;
12925
+ header?: never;
12926
+ path: {
12927
+ threadId: string;
12928
+ };
12929
+ cookie?: never;
12930
+ };
12931
+ requestBody?: never;
12932
+ responses: {
12933
+ /** @description Suggestion rejected (thread resolved) */
12934
+ 200: {
12935
+ headers: {
12936
+ [name: string]: unknown;
12937
+ };
12938
+ content: {
12939
+ "application/json": components["schemas"]["CommentThreadSummaryResponse"];
12940
+ };
12941
+ };
12942
+ /** @description Thread not found, or the caller may not decide suggestions on it */
12943
+ 404: {
12944
+ headers: {
12945
+ [name: string]: unknown;
12946
+ };
12947
+ content?: never;
12948
+ };
12949
+ /** @description Not a suggestion thread, a live acceptance lease is held, or already decided */
12950
+ 409: {
12951
+ headers: {
12952
+ [name: string]: unknown;
12953
+ };
12954
+ content?: never;
12955
+ };
12667
12956
  };
12668
12957
  };
12669
12958
  }
@@ -23,7 +23,11 @@ export const openApiRoutes = {
23
23
  '/api/chats/{id}/pin': ['DELETE', 'POST'],
24
24
  '/api/comments': ['GET'],
25
25
  '/api/comments/threads': ['POST'],
26
+ '/api/comments/threads/{threadId}/accept-complete': ['POST'],
27
+ '/api/comments/threads/{threadId}/accept-intent': ['POST'],
28
+ '/api/comments/threads/{threadId}/accept-release': ['POST'],
26
29
  '/api/comments/threads/{threadId}/comments': ['POST'],
30
+ '/api/comments/threads/{threadId}/reject': ['POST'],
27
31
  '/api/comments/threads/{threadId}/reopen': ['POST'],
28
32
  '/api/comments/threads/{threadId}/resolve': ['POST'],
29
33
  '/api/comments/{commentId}': ['DELETE', 'PATCH'],