@foss.global/interfaces 0.11.1 → 0.12.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/changelog.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026-09-04 - 0.12.0
4
+
5
+ ### Features
6
+
7
+ - add forge inventory DTO contracts (forgeinventory)
8
+ - Introduce typed forge inventory instances, identities, scopes, pages, collections, reports, namespaces, and repositories.
9
+ - Export the new forge inventory contracts through the data module.
10
+ - Document inventory semantics and add fixtures for identity precision, visibility, pagination, incomplete scans, and collection coverage.
11
+
12
+ ### Fixes
13
+
14
+ - update development tooling dependencies (deps)
15
+ - Bump @git.zone/tsrun to ^2.0.6, @git.zone/tstest to ^4.0.0, and @types/node to ^26.4.1.
16
+ - Update pnpm package manager version to 11.25.0.
17
+
3
18
  ## 2026-08-31 - 0.11.1
4
19
 
5
20
  ### Fixes
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@foss.global/interfaces',
6
- version: '0.11.1',
6
+ version: '0.12.0',
7
7
  description: 'Shared TypeScript interfaces and TypedRequest contracts for the foss.global Git platform ecosystem.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx5QkFBeUI7SUFDL0IsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLHFHQUFxRztDQUNuSCxDQUFBIn0=
@@ -0,0 +1,173 @@
1
+ /** Provider identity for inventory observations, not a replication authority. */
2
+ export type TForgeKind = 'gitea' | 'gitlab' | 'native';
3
+ export interface IForgeInventoryInstance {
4
+ /** Operator-assigned identity retained when the instance URL changes. */
5
+ instanceId: string;
6
+ kind: TForgeKind;
7
+ /** Observed server version, or null when it could not be established. */
8
+ version: string | null;
9
+ }
10
+ /**
11
+ * Identity namespaces describe the source identifier, for example
12
+ * gitea.repository.id, gitlab.project.id, or gitlab.group.id. They must not
13
+ * silently change between adapter versions. IDs are opaque strings; paths,
14
+ * display names, and issue numbers must not replace provider row IDs.
15
+ */
16
+ export interface IForgeInventoryObjectRef {
17
+ instanceId: string;
18
+ idNamespace: string;
19
+ objectId: string;
20
+ /** Stable parent ID when identifiers are parent-scoped; otherwise null. */
21
+ parentObjectId: string | null;
22
+ }
23
+ /** A missing stable identifier must block automatic correspondence. */
24
+ export type TForgeInventoryIdentity = {
25
+ status: 'identified';
26
+ ref: IForgeInventoryObjectRef;
27
+ } | {
28
+ status: 'unresolved';
29
+ reason: string;
30
+ };
31
+ /** Mutable location observed separately from identity. URLs never contain credentials. */
32
+ export interface IForgeInventoryLocation {
33
+ /** Decoded namespace/repository segments, without splitting literal hyphens. */
34
+ pathSegments: string[];
35
+ webUrl: string | null;
36
+ }
37
+ export type TForgeInventoryScope = {
38
+ kind: 'instance';
39
+ } | {
40
+ kind: 'namespace';
41
+ identity: TForgeInventoryIdentity;
42
+ location: IForgeInventoryLocation;
43
+ includeDescendants: boolean;
44
+ } | {
45
+ kind: 'repository';
46
+ identity: TForgeInventoryIdentity;
47
+ location: IForgeInventoryLocation;
48
+ };
49
+ /** Internal visibility must never be silently normalized to public. */
50
+ export type TForgeInventoryVisibility = 'public' | 'internal' | 'private';
51
+ /** Values are canonical nonnegative decimal integers, retaining JSON precision. */
52
+ export type TForgeInventoryQuantity = {
53
+ status: 'measured';
54
+ value: string;
55
+ accuracy: 'exact' | 'estimate' | 'lowerBound';
56
+ } | {
57
+ status: 'unknown';
58
+ reason: string;
59
+ };
60
+ export interface IForgeInventoryNamespace {
61
+ identity: TForgeInventoryIdentity;
62
+ location: IForgeInventoryLocation;
63
+ kind: 'organization' | 'group' | 'user';
64
+ /** null means no parent; an unknown parent is explicitly unresolved. */
65
+ parent: TForgeInventoryIdentity | null;
66
+ visibility: TForgeInventoryVisibility | null;
67
+ }
68
+ export interface IForgeInventoryRepository {
69
+ identity: TForgeInventoryIdentity;
70
+ namespace: TForgeInventoryIdentity;
71
+ location: IForgeInventoryLocation;
72
+ description: string | null;
73
+ visibility: TForgeInventoryVisibility | null;
74
+ archived: boolean | null;
75
+ /** null means no observed default branch, not proof of an empty repository. */
76
+ defaultBranch: string | null;
77
+ httpCloneUrl: string | null;
78
+ sshCloneUrl: string | null;
79
+ /** Git storage bytes only; never an admission estimate for an outgoing push. */
80
+ gitSizeBytes: TForgeInventoryQuantity;
81
+ }
82
+ export type TForgeInventoryEntityClass = 'namespaces' | 'users' | 'teams' | 'memberships' | 'repositories' | 'gitRefs' | 'gitObjects' | 'protectedRefs' | 'publicSshKeys' | 'deployKeys' | 'issues' | 'issueComments' | 'pullRequests' | 'reviews' | 'reviewComments' | 'labels' | 'milestones' | 'assignees' | 'reactions' | 'releases' | 'releaseAssets' | 'lfsObjects' | 'packages' | 'packageVersions' | 'packageBlobs' | 'webhooks' | 'webhookDeliveries' | 'ciWorkflows' | 'ciRuns' | 'ciArtifacts' | 'wikis' | 'projects';
83
+ /** Availability of an inventory read, never a claim of write/import fidelity. */
84
+ export type TForgeInventoryCapability = {
85
+ status: 'available';
86
+ limitations: string[];
87
+ } | {
88
+ status: 'unavailable' | 'unverified';
89
+ reason: string;
90
+ };
91
+ /** Whether the observation includes entities hidden from an ordinary caller. */
92
+ export type TForgeInventoryAccess = 'publicOnly' | 'callerVisible' | 'entireScope';
93
+ /** Live pagination is not a point-in-time export, even after its last page. */
94
+ export type TForgeInventoryConsistency = {
95
+ status: 'live';
96
+ } | {
97
+ status: 'frozen';
98
+ checkpointId: string;
99
+ };
100
+ export interface IForgeInventoryObservation {
101
+ /** ISO 8601 UTC start and end of this observation, not provider content times. */
102
+ startedAt: string;
103
+ finishedAt: string;
104
+ access: TForgeInventoryAccess;
105
+ consistency: TForgeInventoryConsistency;
106
+ }
107
+ /**
108
+ * Transport cursors are opaque, credential-free, and bound to the exact
109
+ * instance, scope, query, adapter version, and page-size policy. They are not
110
+ * durable replication checkpoints and must not be followed as arbitrary URLs.
111
+ */
112
+ export type TForgeInventoryPagination = {
113
+ status: 'more';
114
+ cursor: string;
115
+ } | {
116
+ status: 'exhausted';
117
+ } | {
118
+ status: 'incomplete';
119
+ reason: string;
120
+ };
121
+ export interface IForgeInventoryPage<TItem> {
122
+ schemaVersion: 1;
123
+ instance: IForgeInventoryInstance;
124
+ scope: TForgeInventoryScope;
125
+ observation: IForgeInventoryObservation;
126
+ items: TItem[];
127
+ pagination: TForgeInventoryPagination;
128
+ }
129
+ /**
130
+ * Enumeration describes the observed scope only. Exhaustion does not prove
131
+ * global visibility, source quiescence, object integrity, or migration fidelity.
132
+ * An interrupted/denied/limited scan cannot return an enumerated result.
133
+ */
134
+ export type TForgeInventoryCollectionResult = {
135
+ status: 'enumerated';
136
+ observation: IForgeInventoryObservation;
137
+ /** Exact distinct entities observed, not a point-in-time total for live scans. */
138
+ count: string;
139
+ sizeBytes: TForgeInventoryQuantity;
140
+ } | {
141
+ status: 'incomplete';
142
+ observation: IForgeInventoryObservation;
143
+ /** Distinct observed entities only; provider estimates are not lower bounds. */
144
+ observedCount: string;
145
+ reason: string;
146
+ } | {
147
+ status: 'notInspected' | 'unavailable';
148
+ reason: string;
149
+ };
150
+ export interface IForgeInventoryCollection {
151
+ capability: TForgeInventoryCapability;
152
+ result: TForgeInventoryCollectionResult;
153
+ }
154
+ /** Unknown provider features must remain visible rather than silently disappearing. */
155
+ export interface IForgeInventoryAdditionalCollection extends IForgeInventoryCollection {
156
+ /** Provider-qualified feature key, distinct from the canonical collection keys. */
157
+ name: string;
158
+ }
159
+ /**
160
+ * Operator-facing inventory data shared by adapters and the website. This is
161
+ * not a public anonymous DTO, a persisted model, or a sealed migration manifest.
162
+ * Every canonical class is present, including unavailable and uninspected ones.
163
+ * Reasons and limitations are sanitized diagnostics, never raw response bodies,
164
+ * credentials, private keys, or secret bindings. Validate these types at runtime
165
+ * in the owning adapter/API; TypeScript alone does not validate network input.
166
+ */
167
+ export interface IForgeInventoryReport {
168
+ schemaVersion: 1;
169
+ instance: IForgeInventoryInstance;
170
+ scope: TForgeInventoryScope;
171
+ collections: Record<TForgeInventoryEntityClass, IForgeInventoryCollection>;
172
+ additionalCollections: IForgeInventoryAdditionalCollection[];
173
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZ2VpbnZlbnRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9kYXRhL2ZvcmdlaW52ZW50b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -1,4 +1,5 @@
1
1
  export * from './codefeed.js';
2
+ export * from './forgeinventory.js';
2
3
  export * from './gitmanager.js';
3
4
  export * from './public.js';
4
5
  export * from './runner.js';
@@ -1,5 +1,6 @@
1
1
  export * from './codefeed.js';
2
+ export * from './forgeinventory.js';
2
3
  export * from './gitmanager.js';
3
4
  export * from './public.js';
4
5
  export * from './runner.js';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9kYXRhL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxhQUFhLENBQUMifQ==
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9kYXRhL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGFBQWEsQ0FBQyJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@foss.global/interfaces",
3
- "version": "0.11.1",
3
+ "version": "0.12.0",
4
4
  "private": false,
5
5
  "description": "Shared TypeScript interfaces and TypedRequest contracts for the foss.global Git platform ecosystem.",
6
6
  "exports": {
@@ -15,9 +15,9 @@
15
15
  "devDependencies": {
16
16
  "@git.zone/tsbuild": "^4.4.2",
17
17
  "@git.zone/tsdoc": "^2.1.1",
18
- "@git.zone/tsrun": "^2.0.5",
19
- "@git.zone/tstest": "^3.6.6",
20
- "@types/node": "^26.1.1"
18
+ "@git.zone/tsrun": "^2.0.6",
19
+ "@git.zone/tstest": "^4.0.0",
20
+ "@types/node": "^26.4.1"
21
21
  },
22
22
  "files": [
23
23
  "ts/**/*",
package/readme.md CHANGED
@@ -95,6 +95,33 @@ The runner lifecycle contracts cover registration, sessions, runner and job hear
95
95
 
96
96
  Protocol v1 describes OCI execution with Docker or Podman and `tar.gz` source archives. Artifacts, caches, and service containers are explicitly unsupported in the v1 capability shape. Supported job network modes are `none` and `bridge`; the execution service remains responsible for enforcing the advertised capability.
97
97
 
98
+ ### Forge inventory contracts
99
+
100
+ `IForgeInventoryReport`, `IForgeInventoryPage<TItem>`, `IForgeInventoryNamespace`,
101
+ and `IForgeInventoryRepository` describe operator inventory observations. They
102
+ are exported from both the package root and `data`. This package supplies types;
103
+ it does not scan a forge or validate network responses.
104
+
105
+ Stable provider identifiers are opaque strings qualified by instance and ID
106
+ namespace. Mutable paths remain separate segment arrays, preserving GitLab
107
+ subgroups and literal hyphens. A source without a stable identifier reports an
108
+ unresolved identity. URLs must be credential-free, and inventory responses need
109
+ operator authorization rather than anonymous public exposure.
110
+
111
+ Every canonical entity class has an explicit capability and collection result,
112
+ including classes not inspected or unavailable. Additional provider features
113
+ have their own entries. `enumerated` means the selected collection was exhausted
114
+ for its recorded visibility scope; a public or caller-visible live scan does
115
+ not establish a complete frozen migration inventory. Page continuation,
116
+ exhaustion, and interrupted enumeration have distinct discriminated shapes.
117
+
118
+ Counts and byte quantities use nonnegative decimal strings to avoid JSON integer
119
+ precision loss. Unknown size differs from zero, and estimated repository storage
120
+ size is not the size of a future Git push. Runtime adapters must validate values,
121
+ scope consistency, capability/result agreement, cursor binding, diagnostics, and
122
+ authorization. These DTOs do not establish replication authority, historical
123
+ import fidelity, checksummed manifests, or durable recovery checkpoints.
124
+
98
125
  ## Exports
99
126
 
100
127
  - `data`: public DTOs for users, organizations, repositories, contents, commits, diffs, releases, issues, activity, news, stats, codefeed commit results, GitManager repository/read API results, and runner/CI contracts.
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@foss.global/interfaces',
6
- version: '0.11.1',
6
+ version: '0.12.0',
7
7
  description: 'Shared TypeScript interfaces and TypedRequest contracts for the foss.global Git platform ecosystem.'
8
8
  }
@@ -0,0 +1,205 @@
1
+ /** Provider identity for inventory observations, not a replication authority. */
2
+ export type TForgeKind = 'gitea' | 'gitlab' | 'native';
3
+
4
+ export interface IForgeInventoryInstance {
5
+ /** Operator-assigned identity retained when the instance URL changes. */
6
+ instanceId: string;
7
+ kind: TForgeKind;
8
+ /** Observed server version, or null when it could not be established. */
9
+ version: string | null;
10
+ }
11
+
12
+ /**
13
+ * Identity namespaces describe the source identifier, for example
14
+ * gitea.repository.id, gitlab.project.id, or gitlab.group.id. They must not
15
+ * silently change between adapter versions. IDs are opaque strings; paths,
16
+ * display names, and issue numbers must not replace provider row IDs.
17
+ */
18
+ export interface IForgeInventoryObjectRef {
19
+ instanceId: string;
20
+ idNamespace: string;
21
+ objectId: string;
22
+ /** Stable parent ID when identifiers are parent-scoped; otherwise null. */
23
+ parentObjectId: string | null;
24
+ }
25
+
26
+ /** A missing stable identifier must block automatic correspondence. */
27
+ export type TForgeInventoryIdentity =
28
+ | { status: 'identified'; ref: IForgeInventoryObjectRef }
29
+ | { status: 'unresolved'; reason: string };
30
+
31
+ /** Mutable location observed separately from identity. URLs never contain credentials. */
32
+ export interface IForgeInventoryLocation {
33
+ /** Decoded namespace/repository segments, without splitting literal hyphens. */
34
+ pathSegments: string[];
35
+ webUrl: string | null;
36
+ }
37
+
38
+ export type TForgeInventoryScope =
39
+ | { kind: 'instance' }
40
+ | {
41
+ kind: 'namespace';
42
+ identity: TForgeInventoryIdentity;
43
+ location: IForgeInventoryLocation;
44
+ includeDescendants: boolean;
45
+ }
46
+ | {
47
+ kind: 'repository';
48
+ identity: TForgeInventoryIdentity;
49
+ location: IForgeInventoryLocation;
50
+ };
51
+
52
+ /** Internal visibility must never be silently normalized to public. */
53
+ export type TForgeInventoryVisibility = 'public' | 'internal' | 'private';
54
+
55
+ /** Values are canonical nonnegative decimal integers, retaining JSON precision. */
56
+ export type TForgeInventoryQuantity =
57
+ | { status: 'measured'; value: string; accuracy: 'exact' | 'estimate' | 'lowerBound' }
58
+ | { status: 'unknown'; reason: string };
59
+
60
+ export interface IForgeInventoryNamespace {
61
+ identity: TForgeInventoryIdentity;
62
+ location: IForgeInventoryLocation;
63
+ kind: 'organization' | 'group' | 'user';
64
+ /** null means no parent; an unknown parent is explicitly unresolved. */
65
+ parent: TForgeInventoryIdentity | null;
66
+ visibility: TForgeInventoryVisibility | null;
67
+ }
68
+
69
+ export interface IForgeInventoryRepository {
70
+ identity: TForgeInventoryIdentity;
71
+ namespace: TForgeInventoryIdentity;
72
+ location: IForgeInventoryLocation;
73
+ description: string | null;
74
+ visibility: TForgeInventoryVisibility | null;
75
+ archived: boolean | null;
76
+ /** null means no observed default branch, not proof of an empty repository. */
77
+ defaultBranch: string | null;
78
+ httpCloneUrl: string | null;
79
+ sshCloneUrl: string | null;
80
+ /** Git storage bytes only; never an admission estimate for an outgoing push. */
81
+ gitSizeBytes: TForgeInventoryQuantity;
82
+ }
83
+
84
+ export type TForgeInventoryEntityClass =
85
+ | 'namespaces'
86
+ | 'users'
87
+ | 'teams'
88
+ | 'memberships'
89
+ | 'repositories'
90
+ | 'gitRefs'
91
+ | 'gitObjects'
92
+ | 'protectedRefs'
93
+ | 'publicSshKeys'
94
+ | 'deployKeys'
95
+ | 'issues'
96
+ | 'issueComments'
97
+ | 'pullRequests'
98
+ | 'reviews'
99
+ | 'reviewComments'
100
+ | 'labels'
101
+ | 'milestones'
102
+ | 'assignees'
103
+ | 'reactions'
104
+ | 'releases'
105
+ | 'releaseAssets'
106
+ | 'lfsObjects'
107
+ | 'packages'
108
+ | 'packageVersions'
109
+ | 'packageBlobs'
110
+ | 'webhooks'
111
+ | 'webhookDeliveries'
112
+ | 'ciWorkflows'
113
+ | 'ciRuns'
114
+ | 'ciArtifacts'
115
+ | 'wikis'
116
+ | 'projects';
117
+
118
+ /** Availability of an inventory read, never a claim of write/import fidelity. */
119
+ export type TForgeInventoryCapability =
120
+ | { status: 'available'; limitations: string[] }
121
+ | { status: 'unavailable' | 'unverified'; reason: string };
122
+
123
+ /** Whether the observation includes entities hidden from an ordinary caller. */
124
+ export type TForgeInventoryAccess = 'publicOnly' | 'callerVisible' | 'entireScope';
125
+
126
+ /** Live pagination is not a point-in-time export, even after its last page. */
127
+ export type TForgeInventoryConsistency =
128
+ | { status: 'live' }
129
+ | { status: 'frozen'; checkpointId: string };
130
+
131
+ export interface IForgeInventoryObservation {
132
+ /** ISO 8601 UTC start and end of this observation, not provider content times. */
133
+ startedAt: string;
134
+ finishedAt: string;
135
+ access: TForgeInventoryAccess;
136
+ consistency: TForgeInventoryConsistency;
137
+ }
138
+
139
+ /**
140
+ * Transport cursors are opaque, credential-free, and bound to the exact
141
+ * instance, scope, query, adapter version, and page-size policy. They are not
142
+ * durable replication checkpoints and must not be followed as arbitrary URLs.
143
+ */
144
+ export type TForgeInventoryPagination =
145
+ | { status: 'more'; cursor: string }
146
+ | { status: 'exhausted' }
147
+ | { status: 'incomplete'; reason: string };
148
+
149
+ export interface IForgeInventoryPage<TItem> {
150
+ schemaVersion: 1;
151
+ instance: IForgeInventoryInstance;
152
+ scope: TForgeInventoryScope;
153
+ observation: IForgeInventoryObservation;
154
+ items: TItem[];
155
+ pagination: TForgeInventoryPagination;
156
+ }
157
+
158
+ /**
159
+ * Enumeration describes the observed scope only. Exhaustion does not prove
160
+ * global visibility, source quiescence, object integrity, or migration fidelity.
161
+ * An interrupted/denied/limited scan cannot return an enumerated result.
162
+ */
163
+ export type TForgeInventoryCollectionResult =
164
+ | {
165
+ status: 'enumerated';
166
+ observation: IForgeInventoryObservation;
167
+ /** Exact distinct entities observed, not a point-in-time total for live scans. */
168
+ count: string;
169
+ sizeBytes: TForgeInventoryQuantity;
170
+ }
171
+ | {
172
+ status: 'incomplete';
173
+ observation: IForgeInventoryObservation;
174
+ /** Distinct observed entities only; provider estimates are not lower bounds. */
175
+ observedCount: string;
176
+ reason: string;
177
+ }
178
+ | { status: 'notInspected' | 'unavailable'; reason: string };
179
+
180
+ export interface IForgeInventoryCollection {
181
+ capability: TForgeInventoryCapability;
182
+ result: TForgeInventoryCollectionResult;
183
+ }
184
+
185
+ /** Unknown provider features must remain visible rather than silently disappearing. */
186
+ export interface IForgeInventoryAdditionalCollection extends IForgeInventoryCollection {
187
+ /** Provider-qualified feature key, distinct from the canonical collection keys. */
188
+ name: string;
189
+ }
190
+
191
+ /**
192
+ * Operator-facing inventory data shared by adapters and the website. This is
193
+ * not a public anonymous DTO, a persisted model, or a sealed migration manifest.
194
+ * Every canonical class is present, including unavailable and uninspected ones.
195
+ * Reasons and limitations are sanitized diagnostics, never raw response bodies,
196
+ * credentials, private keys, or secret bindings. Validate these types at runtime
197
+ * in the owning adapter/API; TypeScript alone does not validate network input.
198
+ */
199
+ export interface IForgeInventoryReport {
200
+ schemaVersion: 1;
201
+ instance: IForgeInventoryInstance;
202
+ scope: TForgeInventoryScope;
203
+ collections: Record<TForgeInventoryEntityClass, IForgeInventoryCollection>;
204
+ additionalCollections: IForgeInventoryAdditionalCollection[];
205
+ }
package/ts/data/index.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './codefeed.js';
2
+ export * from './forgeinventory.js';
2
3
  export * from './gitmanager.js';
3
4
  export * from './public.js';
4
5
  export * from './runner.js';