@thinkai/tai-api-contract 2.116.0 → 2.119.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.116.0
4
+ version: 2.119.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}/...`.
@@ -7878,6 +7878,23 @@ paths:
7878
7878
  "409":
7879
7879
  description: No ready repository index in scope
7880
7880
 
7881
+ /workspaces/{workspaceId}/knowledge-pages/generate/status:
7882
+ get:
7883
+ tags: [CodeChat]
7884
+ summary: Get live workspace context generation progress
7885
+ operationId: getWorkspaceContextGenerationStatus
7886
+ parameters:
7887
+ - $ref: "#/components/parameters/WorkspaceId"
7888
+ responses:
7889
+ "200":
7890
+ description: Current or most recent workspace context generation phase
7891
+ content:
7892
+ application/json:
7893
+ schema:
7894
+ $ref: "#/components/schemas/WorkspaceContextGenerationStatusDto"
7895
+ "401":
7896
+ $ref: "#/components/responses/Unauthorized"
7897
+
7881
7898
  /workspaces/{workspaceId}/knowledge-pages/prd/generate:
7882
7899
  post:
7883
7900
  tags: [CodeChat]
@@ -7911,6 +7928,73 @@ paths:
7911
7928
  "409":
7912
7929
  description: No ready repository index in scope
7913
7930
 
7931
+ /workspaces/{workspaceId}/knowledge-graph:
7932
+ get:
7933
+ tags: [CodeChat]
7934
+ summary: Get the persisted workspace knowledge graph
7935
+ description: >-
7936
+ Cross-repository graph (repo nodes and dependency edges) built when workspace
7937
+ knowledge pages are generated. Empty until the first successful generate.
7938
+ operationId: getWorkspaceKnowledgeGraph
7939
+ parameters:
7940
+ - $ref: "#/components/parameters/WorkspaceId"
7941
+ responses:
7942
+ "200":
7943
+ description: Workspace knowledge graph
7944
+ content:
7945
+ application/json:
7946
+ schema:
7947
+ $ref: "#/components/schemas/WorkspaceKnowledgeGraphDto"
7948
+ "401":
7949
+ $ref: "#/components/responses/Unauthorized"
7950
+ "404":
7951
+ description: Graph not generated yet
7952
+
7953
+ /workspaces/{workspaceId}/knowledge-pages/export:
7954
+ get:
7955
+ tags: [CodeChat]
7956
+ summary: Export workspace knowledge for local use
7957
+ description: >-
7958
+ Download workspace context as `WORKSPACE.md` (markdown) or a structured
7959
+ `wkg-pack` JSON bundle. Markdown rewrites `ecg://` deep links per `linkMode`.
7960
+ operationId: exportWorkspaceKnowledgePages
7961
+ parameters:
7962
+ - $ref: "#/components/parameters/WorkspaceId"
7963
+ - name: format
7964
+ in: query
7965
+ required: false
7966
+ schema:
7967
+ type: string
7968
+ enum: [markdown, wkg-pack, zip]
7969
+ default: markdown
7970
+ - name: linkMode
7971
+ in: query
7972
+ required: false
7973
+ description: How to rewrite ecg:// links in markdown export
7974
+ schema:
7975
+ type: string
7976
+ enum: [github, platform, relative]
7977
+ default: github
7978
+ responses:
7979
+ "200":
7980
+ description: Export payload (markdown body or wkg-pack JSON)
7981
+ content:
7982
+ text/markdown:
7983
+ schema:
7984
+ type: string
7985
+ description: WORKSPACE.md body when format=markdown
7986
+ application/json:
7987
+ schema:
7988
+ $ref: "#/components/schemas/WorkspaceKnowledgePackDto"
7989
+ "401":
7990
+ $ref: "#/components/responses/Unauthorized"
7991
+ "403":
7992
+ description: Code Intelligence is disabled for this workspace
7993
+ "404":
7994
+ description: No workspace knowledge pages to export
7995
+ "501":
7996
+ description: ZIP export not implemented (use markdown or wkg-pack)
7997
+
7914
7998
  /workspaces/{workspaceId}/code-intelligence/repo-wiki-json:
7915
7999
  get:
7916
8000
  tags: [CodeChat]
@@ -9325,6 +9409,30 @@ paths:
9325
9409
  "503":
9326
9410
  $ref: "#/components/responses/ZenHrSyncInProgress"
9327
9411
 
9412
+ /workspaces/{workspaceId}/ingest-coverage:
9413
+ get:
9414
+ tags: [Workspace]
9415
+ summary: Ingest / backfill data coverage
9416
+ operationId: getWorkspaceIngestCoverage
9417
+ description: >
9418
+ Read-only snapshot of historical ingest coverage for connected pipelines
9419
+ (productivity GitHub, AI usage/spend per provider, SDLC components, monitoring, HRIS).
9420
+ Aggregates existing watermarks and stored day/week evidence — does not trigger ingest or refresh.
9421
+ Requires workspace membership. Disconnected sources are omitted.
9422
+ parameters:
9423
+ - $ref: "#/components/parameters/WorkspaceId"
9424
+ responses:
9425
+ "200":
9426
+ description: Ingest coverage for connected pipelines
9427
+ content:
9428
+ application/json:
9429
+ schema:
9430
+ $ref: "#/components/schemas/IngestCoverageDto"
9431
+ "401":
9432
+ $ref: "#/components/responses/Unauthorized"
9433
+ "403":
9434
+ $ref: "#/components/responses/Forbidden"
9435
+
9328
9436
  /workspaces/{workspaceId}/hris/status:
9329
9437
  get:
9330
9438
  tags: [HRIS]
@@ -17661,6 +17769,289 @@ components:
17661
17769
  nullable: true
17662
17770
  description: ISO timestamp of the most recent successful HRIS sync, or null if never synced.
17663
17771
 
17772
+ IngestCoverageGapDto:
17773
+ type: object
17774
+ required: [from, to]
17775
+ additionalProperties: false
17776
+ properties:
17777
+ from:
17778
+ type: string
17779
+ description: Inclusive gap start (ISO date or UTC Monday week start).
17780
+ to:
17781
+ type: string
17782
+ description: Inclusive gap end (ISO date or UTC Monday week start).
17783
+
17784
+ IngestCoverageLastRunDto:
17785
+ type: object
17786
+ additionalProperties: false
17787
+ properties:
17788
+ startedAt:
17789
+ type: string
17790
+ format: date-time
17791
+ nullable: true
17792
+ completedAt:
17793
+ type: string
17794
+ format: date-time
17795
+ nullable: true
17796
+ durationMs:
17797
+ type: integer
17798
+ format: int64
17799
+ nullable: true
17800
+ mode:
17801
+ type: string
17802
+ nullable: true
17803
+ description: Pipeline-specific run mode (e.g. recent, historical, refresh).
17804
+ outcome:
17805
+ type: string
17806
+ enum: [ok, failed, in_progress]
17807
+ nullable: true
17808
+
17809
+ IngestCoverageProductivityRepoDto:
17810
+ type: object
17811
+ required: [slug, queueStatus]
17812
+ additionalProperties: false
17813
+ properties:
17814
+ slug:
17815
+ type: string
17816
+ queueStatus:
17817
+ type: string
17818
+ enum: [pending, complete, failed, skipped]
17819
+ weeksWithData:
17820
+ type: integer
17821
+ minimum: 0
17822
+ nullable: true
17823
+ earliestWeek:
17824
+ type: string
17825
+ nullable: true
17826
+ latestWeek:
17827
+ type: string
17828
+ nullable: true
17829
+ missingWeeks:
17830
+ type: integer
17831
+ minimum: 0
17832
+ nullable: true
17833
+ gaps:
17834
+ type: array
17835
+ items:
17836
+ $ref: "#/components/schemas/IngestCoverageGapDto"
17837
+ lastErrorKind:
17838
+ type: string
17839
+ nullable: true
17840
+
17841
+ IngestCoverageProductivityDetailDto:
17842
+ type: object
17843
+ additionalProperties: false
17844
+ properties:
17845
+ phase:
17846
+ type: string
17847
+ enum: [recent, historical, complete]
17848
+ nullable: true
17849
+ historicalWeekStart:
17850
+ type: string
17851
+ nullable: true
17852
+ pendingRepoCount:
17853
+ type: integer
17854
+ minimum: 0
17855
+ skippedRepoCount:
17856
+ type: integer
17857
+ minimum: 0
17858
+ failedRepoCount:
17859
+ type: integer
17860
+ minimum: 0
17861
+ coveragePercent:
17862
+ type: number
17863
+ nullable: true
17864
+ repos:
17865
+ type: array
17866
+ items:
17867
+ $ref: "#/components/schemas/IngestCoverageProductivityRepoDto"
17868
+
17869
+ IngestCoverageFactFamilyDto:
17870
+ type: object
17871
+ required: [id]
17872
+ additionalProperties: false
17873
+ properties:
17874
+ id:
17875
+ type: string
17876
+ enum: [daily_usage, spend_daily, model_daily, product_daily]
17877
+ expectedDays:
17878
+ type: integer
17879
+ minimum: 0
17880
+ daysPresent:
17881
+ type: integer
17882
+ minimum: 0
17883
+ ingestedFrom:
17884
+ type: string
17885
+ nullable: true
17886
+ ingestedTo:
17887
+ type: string
17888
+ nullable: true
17889
+ missingDayCount:
17890
+ type: integer
17891
+ minimum: 0
17892
+ gaps:
17893
+ type: array
17894
+ items:
17895
+ $ref: "#/components/schemas/IngestCoverageGapDto"
17896
+
17897
+ IngestCoverageAiDetailDto:
17898
+ type: object
17899
+ additionalProperties: false
17900
+ properties:
17901
+ factFamilies:
17902
+ type: array
17903
+ items:
17904
+ $ref: "#/components/schemas/IngestCoverageFactFamilyDto"
17905
+ refreshInProgress:
17906
+ type: boolean
17907
+
17908
+ IngestCoverageSdlcComponentDto:
17909
+ type: object
17910
+ required: [id]
17911
+ additionalProperties: false
17912
+ properties:
17913
+ id:
17914
+ type: string
17915
+ enum:
17916
+ [
17917
+ rollup,
17918
+ security_ingest,
17919
+ governance_github,
17920
+ governance_auditor,
17921
+ financial_ingest,
17922
+ cost_refresher,
17923
+ ]
17924
+ latestBucketDate:
17925
+ type: string
17926
+ nullable: true
17927
+ lookbackDays:
17928
+ type: integer
17929
+ minimum: 0
17930
+ mode:
17931
+ type: string
17932
+ nullable: true
17933
+ gaps:
17934
+ type: array
17935
+ items:
17936
+ $ref: "#/components/schemas/IngestCoverageGapDto"
17937
+ missingCount:
17938
+ type: integer
17939
+ minimum: 0
17940
+ nullable: true
17941
+ lastSuccessAt:
17942
+ type: string
17943
+ format: date-time
17944
+ nullable: true
17945
+ staleForMs:
17946
+ type: integer
17947
+ format: int64
17948
+ nullable: true
17949
+ isStale:
17950
+ type: boolean
17951
+
17952
+ IngestCoverageSdlcDetailDto:
17953
+ type: object
17954
+ additionalProperties: false
17955
+ properties:
17956
+ components:
17957
+ type: array
17958
+ items:
17959
+ $ref: "#/components/schemas/IngestCoverageSdlcComponentDto"
17960
+
17961
+ IngestCoverageSyncDetailDto:
17962
+ type: object
17963
+ additionalProperties: false
17964
+ properties:
17965
+ provider:
17966
+ type: string
17967
+ syncStatus:
17968
+ type: string
17969
+ enum: [ok, error, never]
17970
+
17971
+ IngestCoveragePipelineDto:
17972
+ type: object
17973
+ required: [id, kind, status, targetWindowDays, isStale]
17974
+ additionalProperties: false
17975
+ properties:
17976
+ id:
17977
+ type: string
17978
+ kind:
17979
+ type: string
17980
+ enum: [productivity_github, ai_usage, sdlc_github, monitoring, hris]
17981
+ provider:
17982
+ type: string
17983
+ nullable: true
17984
+ status:
17985
+ type: string
17986
+ enum: [not_started, backfilling, incremental, complete, failed, in_progress]
17987
+ targetWindowDays:
17988
+ type: integer
17989
+ minimum: 0
17990
+ ingestedFrom:
17991
+ type: string
17992
+ nullable: true
17993
+ ingestedTo:
17994
+ type: string
17995
+ nullable: true
17996
+ progressPercent:
17997
+ type: number
17998
+ nullable: true
17999
+ lastSuccessAt:
18000
+ type: string
18001
+ format: date-time
18002
+ nullable: true
18003
+ lastAttemptAt:
18004
+ type: string
18005
+ format: date-time
18006
+ nullable: true
18007
+ lastErrorKind:
18008
+ type: string
18009
+ nullable: true
18010
+ lastErrorMessage:
18011
+ type: string
18012
+ nullable: true
18013
+ staleForMs:
18014
+ type: integer
18015
+ format: int64
18016
+ nullable: true
18017
+ isStale:
18018
+ type: boolean
18019
+ dataLagDays:
18020
+ type: integer
18021
+ minimum: 0
18022
+ nullable: true
18023
+ gaps:
18024
+ type: array
18025
+ items:
18026
+ $ref: "#/components/schemas/IngestCoverageGapDto"
18027
+ missingCount:
18028
+ type: integer
18029
+ minimum: 0
18030
+ nullable: true
18031
+ lastRun:
18032
+ $ref: "#/components/schemas/IngestCoverageLastRunDto"
18033
+ productivity:
18034
+ $ref: "#/components/schemas/IngestCoverageProductivityDetailDto"
18035
+ ai:
18036
+ $ref: "#/components/schemas/IngestCoverageAiDetailDto"
18037
+ sdlc:
18038
+ $ref: "#/components/schemas/IngestCoverageSdlcDetailDto"
18039
+ sync:
18040
+ $ref: "#/components/schemas/IngestCoverageSyncDetailDto"
18041
+
18042
+ IngestCoverageDto:
18043
+ type: object
18044
+ required: [pipelines]
18045
+ additionalProperties: false
18046
+ properties:
18047
+ pipelines:
18048
+ type: array
18049
+ items:
18050
+ $ref: "#/components/schemas/IngestCoveragePipelineDto"
18051
+ generatedAt:
18052
+ type: string
18053
+ format: date-time
18054
+
17664
18055
  HrisSyncStatusDto:
17665
18056
  type: object
17666
18057
  required: [provider, lastSyncAt, status]
@@ -18197,7 +18588,10 @@ components:
18197
18588
  syncedAt:
18198
18589
  type: string
18199
18590
  format: date-time
18200
- description: ISO timestamp when numbers were computed server-side
18591
+ description: >-
18592
+ ISO timestamp when numbers were computed server-side. An empty string
18593
+ means the workspace has no successful AI-tool refresh or productivity
18594
+ ingest timestamp yet.
18201
18595
  isMock:
18202
18596
  type: boolean
18203
18597
  description: Must be false for production handlers
@@ -19069,6 +19463,11 @@ components:
19069
19463
  type: array
19070
19464
  description: Ready repository indexes to synthesize from. Omit or send empty for all ready indexes.
19071
19465
  items: { type: string, format: uuid }
19466
+ deepResearch:
19467
+ type: boolean
19468
+ description: >-
19469
+ When true and execution keys are configured, run a deeper LLM pass to
19470
+ expand Key decisions with multi-repo citations (falls back to deterministic on failure).
19072
19471
 
19073
19472
  GenerateWorkspaceKnowledgePagesResultDto:
19074
19473
  type: object
@@ -19091,6 +19490,26 @@ components:
19091
19490
  usage:
19092
19491
  $ref: "#/components/schemas/CodeIntelligenceUsageDto"
19093
19492
 
19493
+ WorkspaceContextGenerationStatusDto:
19494
+ type: object
19495
+ required: [phase, status, detail, updatedAt]
19496
+ properties:
19497
+ phase:
19498
+ type: string
19499
+ enum: [inventory, facts, contracts, integrations, clustering, llm, persisted]
19500
+ status:
19501
+ type: string
19502
+ enum: [running, complete, failed]
19503
+ detail: { type: string }
19504
+ updatedAt: { type: string, format: date-time }
19505
+ partial:
19506
+ type: object
19507
+ properties:
19508
+ repoCount: { type: integer }
19509
+ contractCount: { type: integer }
19510
+ groupCount: { type: integer }
19511
+ standaloneCount: { type: integer }
19512
+
19094
19513
  GeneratePrdDraftBodyDto:
19095
19514
  type: object
19096
19515
  required: [featureIntent]
@@ -19144,7 +19563,11 @@ components:
19144
19563
  properties:
19145
19564
  id: { type: string, format: uuid }
19146
19565
  workspaceId: { type: string, format: uuid }
19147
- slug: { type: string }
19566
+ slug:
19567
+ type: string
19568
+ description: >-
19569
+ Page slug. `workspace-agent` is the canonical hub; supporting pages include
19570
+ `workspace-overview`, `cross-repo-map`, `shared-concepts`, and `prd-*` drafts.
19148
19571
  title: { type: string }
19149
19572
  bodyMd: { type: string }
19150
19573
  sortOrder: { type: integer }
@@ -19192,6 +19615,136 @@ components:
19192
19615
  platformSnippet:
19193
19616
  type: string
19194
19617
  description: Bounded markdown summary of platform evidence for the system panel
19618
+ insights:
19619
+ $ref: "#/components/schemas/WorkspaceContextInsightsDto"
19620
+
19621
+ WorkspaceContextInsightsDto:
19622
+ type: object
19623
+ required:
19624
+ [
19625
+ kind,
19626
+ version,
19627
+ generatedAt,
19628
+ repoRoles,
19629
+ emergentInsights,
19630
+ sharedConcepts,
19631
+ crossRepoLinks,
19632
+ contracts,
19633
+ groups,
19634
+ standaloneRepos,
19635
+ coverage,
19636
+ integrationFootprints,
19637
+ integrationOpportunities,
19638
+ ]
19639
+ properties:
19640
+ kind: { type: string, enum: [workspace-insights] }
19641
+ version: { type: integer, enum: [2] }
19642
+ generatedAt: { type: string, format: date-time }
19643
+ repoRoles:
19644
+ type: array
19645
+ items:
19646
+ type: object
19647
+ required: [repoId, repoName, role, rationale]
19648
+ properties:
19649
+ repoId: { type: string, format: uuid }
19650
+ repoName: { type: string }
19651
+ role: { type: string }
19652
+ rationale: { type: string }
19653
+ emergentInsights:
19654
+ type: array
19655
+ items:
19656
+ type: object
19657
+ required: [kind, title, detail, repoIds, certainty]
19658
+ properties:
19659
+ kind: { type: string }
19660
+ title: { type: string }
19661
+ detail: { type: string }
19662
+ repoIds: { type: array, items: { type: string, format: uuid } }
19663
+ certainty: { type: string, enum: [fact, inference, possibility] }
19664
+ evidenceRefs: { type: array, items: { type: string } }
19665
+ sharedConcepts:
19666
+ type: array
19667
+ items:
19668
+ type: object
19669
+ required: [term, repoNames, kind]
19670
+ properties:
19671
+ term: { type: string }
19672
+ repoNames: { type: array, items: { type: string } }
19673
+ kind: { type: string }
19674
+ crossRepoLinks:
19675
+ type: array
19676
+ items: { $ref: "#/components/schemas/WorkspaceKnowledgeCrossRepoLinkDto" }
19677
+ contracts:
19678
+ type: array
19679
+ items:
19680
+ type: object
19681
+ required: [id, kind, specKey, producers, consumers, certainty, score]
19682
+ properties:
19683
+ id: { type: string }
19684
+ kind: { type: string }
19685
+ specKey: { type: string }
19686
+ producers: { type: array, items: { type: object, additionalProperties: true } }
19687
+ consumers: { type: array, items: { type: object, additionalProperties: true } }
19688
+ certainty: { type: string, enum: [fact, inference, possibility] }
19689
+ score: { type: number, minimum: 0, maximum: 1 }
19690
+ groups:
19691
+ type: array
19692
+ items:
19693
+ type: object
19694
+ required:
19695
+ [
19696
+ id,
19697
+ kind,
19698
+ label,
19699
+ repoIds,
19700
+ backboneContractIds,
19701
+ possibilityLinkCount,
19702
+ integrationSummary,
19703
+ summary,
19704
+ ]
19705
+ properties:
19706
+ id: { type: string }
19707
+ kind: { type: string }
19708
+ label: { type: string }
19709
+ repoIds: { type: array, items: { type: string, format: uuid } }
19710
+ backboneContractIds: { type: array, items: { type: string } }
19711
+ possibilityLinkCount: { type: integer }
19712
+ integrationSummary: { type: string }
19713
+ summary: { type: string }
19714
+ standaloneRepos:
19715
+ type: array
19716
+ items:
19717
+ type: object
19718
+ required: [repoId, repoName, summary]
19719
+ properties:
19720
+ repoId: { type: string, format: uuid }
19721
+ repoName: { type: string }
19722
+ summary: { type: string }
19723
+ coverage:
19724
+ type: array
19725
+ items:
19726
+ type: object
19727
+ required: [repoId, detected, resolved, external, unresolved]
19728
+ properties:
19729
+ repoId: { type: string, format: uuid }
19730
+ detected: { type: integer }
19731
+ resolved: { type: integer }
19732
+ external: { type: integer }
19733
+ unresolved: { type: integer }
19734
+ integrationFootprints:
19735
+ type: array
19736
+ items:
19737
+ type: object
19738
+ required: [repoId, repoName, availableSignals, missingSignals, gaps]
19739
+ properties:
19740
+ repoId: { type: string, format: uuid }
19741
+ repoName: { type: string }
19742
+ availableSignals: { type: array, items: { type: string } }
19743
+ missingSignals: { type: array, items: { type: string } }
19744
+ gaps: { type: array, items: { type: string } }
19745
+ integrationOpportunities:
19746
+ type: array
19747
+ items: { type: string }
19195
19748
 
19196
19749
  WorkspaceKnowledgePageListDto:
19197
19750
  type: object
@@ -19203,6 +19756,106 @@ components:
19203
19756
  systemContext:
19204
19757
  $ref: "#/components/schemas/WorkspaceKnowledgeSystemContextDto"
19205
19758
 
19759
+ WorkspaceKnowledgeGraphNodeDto:
19760
+ type: object
19761
+ required: [id, label, kind]
19762
+ properties:
19763
+ id: { type: string }
19764
+ label: { type: string }
19765
+ score: { type: number, minimum: 0, maximum: 1 }
19766
+ contractId: { type: string }
19767
+ kind:
19768
+ type: string
19769
+ enum: [repo, package, protocol]
19770
+
19771
+ WorkspaceKnowledgeGraphEdgeDto:
19772
+ type: object
19773
+ required: [from, to, relation]
19774
+ properties:
19775
+ from: { type: string, description: Source node id (usually repoId) }
19776
+ to: { type: string, description: Target node id (usually repoId) }
19777
+ relation: { type: string }
19778
+ label: { type: string }
19779
+ certainty:
19780
+ type: string
19781
+ enum: [fact, inference, possibility]
19782
+
19783
+ WorkspaceKnowledgeGraphDto:
19784
+ type: object
19785
+ required: [kind, version, exportedAt, nodes, edges]
19786
+ properties:
19787
+ kind: { type: string, enum: [workspace-kg] }
19788
+ version: { type: integer }
19789
+ exportedAt: { type: string, format: date-time }
19790
+ nodes:
19791
+ type: array
19792
+ items: { $ref: "#/components/schemas/WorkspaceKnowledgeGraphNodeDto" }
19793
+ edges:
19794
+ type: array
19795
+ items: { $ref: "#/components/schemas/WorkspaceKnowledgeGraphEdgeDto" }
19796
+
19797
+ WorkspaceKnowledgeCrossRepoLinkDto:
19798
+ type: object
19799
+ required: [fromRepoId, toRepoId, relation, certainty, evidence, label]
19800
+ properties:
19801
+ fromRepoId: { type: string, format: uuid }
19802
+ toRepoId: { type: string, format: uuid }
19803
+ fromRepoName: { type: string }
19804
+ toRepoName: { type: string }
19805
+ relation: { type: string }
19806
+ certainty:
19807
+ type: string
19808
+ enum: [fact, inference, possibility]
19809
+ evidence: { type: string }
19810
+ label: { type: string }
19811
+
19812
+ WorkspaceKnowledgePackRepoDto:
19813
+ type: object
19814
+ required: [repoId, repoName]
19815
+ properties:
19816
+ repoId: { type: string, format: uuid }
19817
+ repoName: { type: string }
19818
+ commitSha: { type: string, nullable: true }
19819
+ providerSlug: { type: string, nullable: true }
19820
+ wikiOutline:
19821
+ type: array
19822
+ items:
19823
+ type: object
19824
+ required: [slug, title]
19825
+ properties:
19826
+ slug: { type: string }
19827
+ title: { type: string }
19828
+
19829
+ WorkspaceKnowledgePackPageDto:
19830
+ type: object
19831
+ required: [slug, title, bodyMd]
19832
+ properties:
19833
+ slug: { type: string }
19834
+ title: { type: string }
19835
+ bodyMd: { type: string }
19836
+
19837
+ WorkspaceKnowledgePackDto:
19838
+ type: object
19839
+ required: [kind, version, exportedAt, pages, crossRepoLinks, repos]
19840
+ properties:
19841
+ kind: { type: string, enum: [wkg-pack] }
19842
+ version: { type: integer }
19843
+ exportedAt: { type: string, format: date-time }
19844
+ workspaceName: { type: string }
19845
+ pages:
19846
+ type: array
19847
+ items: { $ref: "#/components/schemas/WorkspaceKnowledgePackPageDto" }
19848
+ crossRepoLinks:
19849
+ type: array
19850
+ items: { $ref: "#/components/schemas/WorkspaceKnowledgeCrossRepoLinkDto" }
19851
+ repos:
19852
+ type: array
19853
+ items: { $ref: "#/components/schemas/WorkspaceKnowledgePackRepoDto" }
19854
+ graph:
19855
+ $ref: "#/components/schemas/WorkspaceKnowledgeGraphDto"
19856
+ workspaceContext:
19857
+ $ref: "#/components/schemas/WorkspaceContextInsightsDto"
19858
+
19206
19859
  CodeIntelligenceUsageDto:
19207
19860
  type: object
19208
19861
  required: [operation, provider, inputTokens, outputTokens]