ghagga-forge 3.3.0 → 3.4.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.
@@ -21,6 +21,18 @@
21
21
  * which the boundary lint explicitly permits (`import type` from core).
22
22
  */
23
23
  import type { DependencyGraph, GraphMetadata } from 'ghagga-core';
24
+ import type { ExplanationCommentLookup, ExplanationCommentRef } from '../../ports/forge-adapter.js';
25
+ /** Response from one client-owned, revision-pinned explanation read. */
26
+ export interface GitHubRevisionPinnedSnapshot {
27
+ readonly repositoryId: string;
28
+ readonly baseSha: string;
29
+ readonly headSha: string;
30
+ readonly diff: string;
31
+ readonly files: readonly {
32
+ readonly path: string;
33
+ readonly content: string;
34
+ }[];
35
+ }
24
36
  /** Reaction emojis the underlying GitHub client accepts. */
25
37
  export type GitHubReactionContent = '+1' | '-1' | 'laugh' | 'confused' | 'heart' | 'hooray' | 'rocket' | 'eyes';
26
38
  /**
@@ -63,6 +75,36 @@ export interface GitHubClientPort {
63
75
  fetchGraphFromBranch(owner: string, repo: string, token: string): Promise<DependencyGraph | null>;
64
76
  /** Read graph metadata from the `ghagga/graph` orphan branch, or null. */
65
77
  fetchGraphMetadata(owner: string, repo: string, token: string): Promise<GraphMetadata | null>;
78
+ /**
79
+ * Read one repo-relative file's UTF-8 contents at `ref`, or null if the path
80
+ * is not a file there. Mirrors `client.ts` `fetchFileContents`
81
+ * (owner/repo/path/ref/token positional style). An EMPTY-STRING `ref` reads the
82
+ * repository default branch (the adapter passes '' when its caller omits ref).
83
+ * Throws on a real fault.
84
+ */
85
+ fetchFileContents(owner: string, repo: string, path: string, ref: string, token: string): Promise<string | null>;
86
+ /**
87
+ * Search the repo's code (default branch) for `term`, returning matching file
88
+ * paths (deduped, capped at `limit`). Mirrors `client.ts` `searchCode`
89
+ * (owner/repo/term/limit/token positional style). Never throws — a real fault
90
+ * degrades to `[]` inside `client.ts` itself.
91
+ */
92
+ searchCode(owner: string, repo: string, term: string, limit: number, token: string): Promise<string[]>;
93
+ /**
94
+ * Optional atomic read for an explanation target. The implementation must
95
+ * prove that repository, base, requested head, diff, and file payloads all
96
+ * came from the same requested revision; the adapter never composes a live
97
+ * PR-number fallback when this seam is absent or inconclusive.
98
+ */
99
+ fetchRevisionPinnedSnapshot?(owner: string, repo: string, prNumber: number, requestedHeadSha: string, token: string): Promise<GitHubRevisionPinnedSnapshot | null>;
100
+ /** Optional exact-owner explanation lookup, with explicit ambiguity state. */
101
+ findExplanationComment?(owner: string, repo: string, prNumber: number, reference: ExplanationCommentRef, token: string): Promise<ExplanationCommentLookup>;
102
+ /** Optional typed explanation-comment create delegation. */
103
+ createExplanationComment?(owner: string, repo: string, prNumber: number, reference: ExplanationCommentRef, body: string, token: string): Promise<{
104
+ id: number;
105
+ }>;
106
+ /** Optional typed explanation-comment update delegation. */
107
+ updateExplanationComment?(owner: string, repo: string, commentId: number, reference: ExplanationCommentRef, body: string, token: string): Promise<void>;
66
108
  }
67
109
  /**
68
110
  * A minted installation token plus its absolute expiry.
@@ -1 +1 @@
1
- {"version":3,"file":"github-client-port.d.ts","sourceRoot":"","sources":["../../../src/adapters/github/github-client-port.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github-client-port.d.ts","sourceRoot":"","sources":["../../../src/adapters/github/github-client-port.ts"],"names":[],"mappings":"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"}
@@ -23,10 +23,16 @@
23
23
  * and unwraps `raw` to the GitHub-native number internally.
24
24
  */
25
25
  import type { DependencyGraph, GraphMetadata } from 'ghagga-core';
26
- import type { ForgeAdapterBase, GraphReadCapable, ReactionCapable, ReactionKind } from '../../ports/forge-adapter.js';
26
+ import type { ExplanationPublicationCapable, ExplanationSnapshotCapable, FileReadCapable, ForgeAdapterBase, GraphReadCapable, ReactionCapable, ReactionKind, SearchCapable } from '../../ports/forge-adapter.js';
27
27
  import { REACTION_KIND } from '../../ports/forge-adapter.js';
28
28
  import type { ChangedFile, ChangeRequest, ChangeRequestRef, CommentId, CommentMarker, Commit, ForgeCapabilities, RepoRef, UnifiedDiff, UpsertSummaryResult } from '../../types.js';
29
29
  import type { GitHubClientPort } from './github-client-port.js';
30
+ /** Stable installation/repository binding required before explanation seams exist. */
31
+ export interface GitHubExplanationBinding {
32
+ readonly forgeInstance: string;
33
+ readonly installationId: string;
34
+ readonly repositoryId: string;
35
+ }
30
36
  /** Construction options for {@link GitHubForgeAdapter}. */
31
37
  export interface GitHubForgeAdapterDeps {
32
38
  /** Injected GitHub client function-set (real impl = apps/server client.ts). */
@@ -37,6 +43,11 @@ export interface GitHubForgeAdapterDeps {
37
43
  owner: string;
38
44
  /** Repository name. */
39
45
  repo: string;
46
+ /**
47
+ * Optional stable identity binding for PR-native explanation seams. Legacy
48
+ * review callers omit it and receive no explanation methods at runtime.
49
+ */
50
+ explanationBinding?: GitHubExplanationBinding;
40
51
  }
41
52
  /**
42
53
  * GitHub implementation of the forge adapter.
@@ -46,9 +57,17 @@ export interface GitHubForgeAdapterDeps {
46
57
  * deferred), so `publishInline` is ABSENT — callers guarding by method-presence
47
58
  * will skip inline publishing cleanly.
48
59
  */
49
- export declare class GitHubForgeAdapter implements ForgeAdapterBase, ReactionCapable, GraphReadCapable {
60
+ export declare class GitHubForgeAdapter implements ForgeAdapterBase, ReactionCapable, GraphReadCapable, FileReadCapable, SearchCapable {
50
61
  #private;
51
62
  readonly capabilities: ForgeCapabilities;
63
+ /** Present only when the injected client and stable binding prove this seam. */
64
+ readonly fetchExplanationSnapshot?: ExplanationSnapshotCapable['fetchExplanationSnapshot'];
65
+ /** Present only when all exact-owner publication delegates are available. */
66
+ readonly lookupExplanationComment?: ExplanationPublicationCapable['lookupExplanationComment'];
67
+ /** Present only when all exact-owner publication delegates are available. */
68
+ readonly createExplanationComment?: ExplanationPublicationCapable['createExplanationComment'];
69
+ /** Present only when all exact-owner publication delegates are available. */
70
+ readonly updateExplanationComment?: ExplanationPublicationCapable['updateExplanationComment'];
52
71
  constructor(deps: GitHubForgeAdapterDeps);
53
72
  fetchDiff(ref: ChangeRequestRef): Promise<UnifiedDiff>;
54
73
  fetchChangeRequest(ref: ChangeRequestRef): Promise<ChangeRequest>;
@@ -111,6 +130,30 @@ export declare class GitHubForgeAdapter implements ForgeAdapterBase, ReactionCap
111
130
  * 404→null + validation handled inside client.fetchGraphMetadata).
112
131
  */
113
132
  fetchGraphMetadata(_repo: RepoRef): Promise<GraphMetadata | null>;
133
+ /**
134
+ * Read one repo-relative file's contents at `ref`, or null if the path is not
135
+ * a file there. The path-traversal guard, size cap, file-vs-directory check,
136
+ * base64 decode, and 404→null all live INSIDE client.fetchFileContents — this
137
+ * adapter delegates with the adapter's fixed owner/repo (so `_repo` is unused,
138
+ * matching the graph methods). Wrapped in `#mapAuth` so a 401/403 from the
139
+ * Contents API reclassifies to `ForgeAuthError` — same P2 token-remint recovery
140
+ * every base read gets (the graph methods skip it only because the client
141
+ * swallows their auth failures to null; this one throws). Not exposed via the
142
+ * `capabilities` flags: consumers narrow by method-presence
143
+ * (`'fetchFileContents' in adapter`) per the R-CAPABILITY doctrine, which is
144
+ * authoritative over the informational flags.
145
+ */
146
+ fetchFileContents(_repo: RepoRef, path: string, ref?: string): Promise<string | null>;
147
+ /**
148
+ * Search the repo's code (default branch) for `term`. Throttle/rate-limit and
149
+ * other non-auth degradation all live INSIDE client.searchCode (it returns
150
+ * `[]` rather than throwing); this adapter delegates with the adapter's fixed
151
+ * owner/repo, wrapped in `#mapAuth` so a genuine 401/403 reclassifies to
152
+ * `ForgeAuthError` — same P2 token-remint recovery every other read gets. Not
153
+ * exposed via the `capabilities` flags: consumers narrow by method-presence
154
+ * (`'searchCode' in adapter`) per the R-CAPABILITY doctrine.
155
+ */
156
+ searchCode(_repo: RepoRef, term: string, limit: number): Promise<string[]>;
114
157
  }
115
158
  export { REACTION_KIND };
116
159
  //# sourceMappingURL=github-forge-adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"github-forge-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/github/github-forge-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAElE,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,YAAY,EACb,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,MAAM,EACN,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,gBAAgB,EAAyB,MAAM,yBAAyB,CAAC;AAEvF,2DAA2D;AAC3D,MAAM,WAAW,sBAAsB;IACrC,+EAA+E;IAC/E,MAAM,EAAE,gBAAgB,CAAC;IACzB,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;CACd;AA4BD;;;;;;;GAOG;AACH,qBAAa,kBAAmB,YAAW,gBAAgB,EAAE,eAAe,EAAE,gBAAgB;;IAC5F,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAItC;gBAOU,IAAI,EAAE,sBAAsB;IAqClC,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IAOtD,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IAcjE,aAAa,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAY5D,YAAY,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAa5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACG,oBAAoB,CACxB,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,mBAAmB,CAAC;IAyD/B;;;;;;OAMG;IACG,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAc9E;;;;;;OAMG;IACG,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAIjE;;;OAGG;IACG,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;CAGxE;AAGD,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"github-forge-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/github/github-forge-adapter.ts"],"names":[],"mappings":"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"}
@@ -65,11 +65,24 @@ export class GitHubForgeAdapter {
65
65
  #token;
66
66
  #owner;
67
67
  #repo;
68
+ #explanationBinding;
68
69
  constructor(deps) {
69
70
  this.#client = deps.client;
70
71
  this.#token = deps.token;
71
72
  this.#owner = deps.owner;
72
73
  this.#repo = deps.repo;
74
+ this.#explanationBinding = deps.explanationBinding;
75
+ if (this.#explanationBinding && this.#client.fetchRevisionPinnedSnapshot) {
76
+ this.fetchExplanationSnapshot = (identity, ref) => this.#fetchExplanationSnapshot(identity, ref);
77
+ }
78
+ if (this.#explanationBinding &&
79
+ this.#client.findExplanationComment &&
80
+ this.#client.createExplanationComment &&
81
+ this.#client.updateExplanationComment) {
82
+ this.lookupExplanationComment = (reference) => this.#lookupExplanationComment(reference);
83
+ this.createExplanationComment = (reference, body) => this.#createExplanationComment(reference, body);
84
+ this.updateExplanationComment = (reference, commentId, body) => this.#updateExplanationComment(reference, commentId, body);
85
+ }
73
86
  }
74
87
  /**
75
88
  * Run a client call, reclassifying a 401/403 failure as a {@link ForgeAuthError}.
@@ -95,6 +108,125 @@ export class GitHubForgeAdapter {
95
108
  throw error;
96
109
  }
97
110
  }
111
+ #matchesExplanationBinding(identity) {
112
+ const binding = this.#explanationBinding;
113
+ return (binding !== undefined &&
114
+ identity.forgeInstance === binding.forgeInstance &&
115
+ identity.installationId === binding.installationId &&
116
+ identity.repositoryId === binding.repositoryId);
117
+ }
118
+ #validateExplanationReference(reference) {
119
+ if (!this.#matchesExplanationBinding(reference) ||
120
+ reference.changeRequest.repo.nativeId !== reference.repositoryId ||
121
+ reference.changeRequest.repo.kind !== 'github' ||
122
+ !Number.isSafeInteger(reference.changeRequest.iid) ||
123
+ reference.changeRequest.iid < 1 ||
124
+ reference.ownerId.length === 0 ||
125
+ reference.invocationId.length === 0 ||
126
+ (reference.channel !== 'progress' && reference.channel !== 'answer')) {
127
+ throw new TypeError('GitHubForgeAdapter explanation comment reference is not exactly bound');
128
+ }
129
+ }
130
+ #sameExplanationReference(left, right) {
131
+ return (left.forgeInstance === right.forgeInstance &&
132
+ left.installationId === right.installationId &&
133
+ left.repositoryId === right.repositoryId &&
134
+ left.changeRequest.repo.kind === right.changeRequest.repo.kind &&
135
+ left.changeRequest.repo.nativeId === right.changeRequest.repo.nativeId &&
136
+ left.changeRequest.iid === right.changeRequest.iid &&
137
+ left.changeRequest.globalId === right.changeRequest.globalId &&
138
+ left.ownerId === right.ownerId &&
139
+ left.channel === right.channel &&
140
+ left.invocationId === right.invocationId);
141
+ }
142
+ #snapshotFailure(kind, reason) {
143
+ return { kind, reason };
144
+ }
145
+ #isCompleteSnapshot(snapshot) {
146
+ if (snapshot.baseSha.length === 0 ||
147
+ snapshot.diff.length === 0 ||
148
+ snapshot.files.length === 0) {
149
+ return false;
150
+ }
151
+ const paths = new Set();
152
+ return snapshot.files.every((file) => {
153
+ if (file.path.length === 0 || typeof file.content !== 'string' || paths.has(file.path)) {
154
+ return false;
155
+ }
156
+ paths.add(file.path);
157
+ return true;
158
+ });
159
+ }
160
+ async #fetchExplanationSnapshot(identity, ref) {
161
+ if (!this.#matchesExplanationBinding(identity) ||
162
+ identity.repositoryId !== ref.repo.nativeId ||
163
+ identity.pullRequestNumber !== ref.iid ||
164
+ identity.requestedHeadSha.length === 0 ||
165
+ !Number.isSafeInteger(ref.iid) ||
166
+ ref.iid < 1) {
167
+ return this.#snapshotFailure('INVALID', 'Explanation identity is not bound to this change request');
168
+ }
169
+ const fetchSnapshot = this.#client.fetchRevisionPinnedSnapshot;
170
+ if (!fetchSnapshot) {
171
+ return this.#snapshotFailure('INVALID', 'Revision-pinned snapshot capability is unavailable');
172
+ }
173
+ const snapshot = await this.#mapAuth(() => fetchSnapshot(this.#owner, this.#repo, ref.iid, identity.requestedHeadSha, this.#token));
174
+ if (!snapshot) {
175
+ return this.#snapshotFailure('INVALID', 'Revision-pinned snapshot is missing');
176
+ }
177
+ if (snapshot.headSha !== identity.requestedHeadSha) {
178
+ return this.#snapshotFailure('STALE', 'Requested head SHA is superseded');
179
+ }
180
+ if (snapshot.repositoryId !== identity.repositoryId || !this.#isCompleteSnapshot(snapshot)) {
181
+ return this.#snapshotFailure('INVALID', 'Revision-pinned snapshot is incomplete or mismatched');
182
+ }
183
+ return {
184
+ kind: 'SNAPSHOT',
185
+ snapshot: {
186
+ repositoryId: snapshot.repositoryId,
187
+ baseSha: snapshot.baseSha,
188
+ headSha: snapshot.headSha,
189
+ diff: snapshot.diff,
190
+ files: snapshot.files,
191
+ },
192
+ };
193
+ }
194
+ async #lookupExplanationComment(reference) {
195
+ this.#validateExplanationReference(reference);
196
+ const findComment = this.#client.findExplanationComment;
197
+ if (!findComment) {
198
+ throw new TypeError('GitHubForgeAdapter explanation publication capability is unavailable');
199
+ }
200
+ const lookup = await this.#mapAuth(() => findComment(this.#owner, this.#repo, reference.changeRequest.iid, reference, this.#token));
201
+ if (lookup.kind === 'FOUND') {
202
+ if (!this.#sameExplanationReference(reference, lookup.reference) ||
203
+ lookup.commentId.kind !== 'github:issue-comment' ||
204
+ !Number.isSafeInteger(lookup.commentId.raw)) {
205
+ return { kind: 'INCOMPLETE', reason: 'Explanation comment ownership is unprovable' };
206
+ }
207
+ }
208
+ return lookup;
209
+ }
210
+ async #createExplanationComment(reference, body) {
211
+ this.#validateExplanationReference(reference);
212
+ const createComment = this.#client.createExplanationComment;
213
+ if (!createComment) {
214
+ throw new TypeError('GitHubForgeAdapter explanation publication capability is unavailable');
215
+ }
216
+ const created = await this.#mapAuth(() => createComment(this.#owner, this.#repo, reference.changeRequest.iid, reference, body, this.#token));
217
+ if (!Number.isSafeInteger(created?.id)) {
218
+ throw new TypeError('GitHubForgeAdapter.createExplanationComment: client returned no numeric id');
219
+ }
220
+ return { kind: 'github:issue-comment', raw: created.id };
221
+ }
222
+ async #updateExplanationComment(reference, commentId, body) {
223
+ this.#validateExplanationReference(reference);
224
+ const updateComment = this.#client.updateExplanationComment;
225
+ if (!updateComment) {
226
+ throw new TypeError('GitHubForgeAdapter explanation publication capability is unavailable');
227
+ }
228
+ await this.#mapAuth(() => updateComment(this.#owner, this.#repo, toNativeCommentId(commentId), reference, body, this.#token));
229
+ }
98
230
  // ─── Base: reads ───────────────────────────────────────────────
99
231
  async fetchDiff(ref) {
100
232
  const text = await this.#mapAuth(() => this.#client.fetchPRDiff(this.#owner, this.#repo, ref.iid, this.#token));
@@ -234,6 +366,38 @@ export class GitHubForgeAdapter {
234
366
  async fetchGraphMetadata(_repo) {
235
367
  return this.#client.fetchGraphMetadata(this.#owner, this.#repo, this.#token);
236
368
  }
369
+ // ─── FileReadCapable ────────────────────────────────────────────
370
+ /**
371
+ * Read one repo-relative file's contents at `ref`, or null if the path is not
372
+ * a file there. The path-traversal guard, size cap, file-vs-directory check,
373
+ * base64 decode, and 404→null all live INSIDE client.fetchFileContents — this
374
+ * adapter delegates with the adapter's fixed owner/repo (so `_repo` is unused,
375
+ * matching the graph methods). Wrapped in `#mapAuth` so a 401/403 from the
376
+ * Contents API reclassifies to `ForgeAuthError` — same P2 token-remint recovery
377
+ * every base read gets (the graph methods skip it only because the client
378
+ * swallows their auth failures to null; this one throws). Not exposed via the
379
+ * `capabilities` flags: consumers narrow by method-presence
380
+ * (`'fetchFileContents' in adapter`) per the R-CAPABILITY doctrine, which is
381
+ * authoritative over the informational flags.
382
+ */
383
+ async fetchFileContents(_repo, path, ref) {
384
+ // Bridge the optional capability ref to the client's positional `ref`: '' is
385
+ // the client's "default branch" sentinel (Contents API omits ?ref).
386
+ return this.#mapAuth(() => this.#client.fetchFileContents(this.#owner, this.#repo, path, ref ?? '', this.#token));
387
+ }
388
+ // ─── SearchCapable ──────────────────────────────────────────────
389
+ /**
390
+ * Search the repo's code (default branch) for `term`. Throttle/rate-limit and
391
+ * other non-auth degradation all live INSIDE client.searchCode (it returns
392
+ * `[]` rather than throwing); this adapter delegates with the adapter's fixed
393
+ * owner/repo, wrapped in `#mapAuth` so a genuine 401/403 reclassifies to
394
+ * `ForgeAuthError` — same P2 token-remint recovery every other read gets. Not
395
+ * exposed via the `capabilities` flags: consumers narrow by method-presence
396
+ * (`'searchCode' in adapter`) per the R-CAPABILITY doctrine.
397
+ */
398
+ async searchCode(_repo, term, limit) {
399
+ return this.#mapAuth(() => this.#client.searchCode(this.#owner, this.#repo, term, limit, this.#token));
400
+ }
237
401
  }
238
402
  // Re-export so test files and 1.4 can reference the reaction-kind set succinctly.
239
403
  export { REACTION_KIND };
@@ -1 +1 @@
1
- {"version":3,"file":"github-forge-adapter.js","sourceRoot":"","sources":["../../../src/adapters/github/github-forge-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github-forge-adapter.js","sourceRoot":"","sources":["../../../src/adapters/github/github-forge-adapter.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -12,7 +12,7 @@
12
12
  */
13
13
  export type { Actor, ActorKind, AuthorAssociation, ChangedFile, ChangeKind, ChangeRequest, ChangeRequestRef, CommentId, CommentMarker, Commit, DiffRefs, ForgeCapabilities, ForgeEvent, ForgeKind, NormalizedComment, PublishFailure, PublishReport, RepoRef, TenantHint, UnifiedDiff, UpsertSummaryResult, } from './types.js';
14
14
  export { ACTOR_KIND, AUTHOR_ASSOCIATION, CHANGE_KIND, FORGE_KIND, } from './types.js';
15
- export type { ForgeAdapter, ForgeAdapterBase, GraphReadCapable, InlineCapable, InlineComment, MarkerExtractable, ReactionCapable, ReactionKind, } from './ports/forge-adapter.js';
15
+ export type { ExplanationCommentChannel, ExplanationCommentLookup, ExplanationCommentRef, ExplanationPublicationCapable, ExplanationSnapshotCapable, ExplanationSnapshotReadResult, FileReadCapable, ForgeAdapter, ForgeAdapterBase, GraphReadCapable, InlineCapable, InlineComment, MarkerExtractable, ReactionCapable, ReactionKind, SearchCapable, } from './ports/forge-adapter.js';
16
16
  export { REACTION_KIND } from './ports/forge-adapter.js';
17
17
  export type { CiDispatchRequest, CiDispatchResult, CiRunner, EnsureWorkflowResult, } from './ports/ci-runner.js';
18
18
  export { FORGE_AUTH_STATUSES, ForgeAuthError, getErrorStatus, isForgeAuthError } from './errors.js';
@@ -22,8 +22,8 @@ export type { ForgeRegistry, UnknownForgeErrorContext } from './registry.js';
22
22
  export { MapForgeRegistry, UnknownForgeError } from './registry.js';
23
23
  export type { GitHubAppCredentialProviderDeps } from './adapters/github/github-app-credential-provider.js';
24
24
  export { BUDGET_SECONDS, GitHubAppCredentialProvider, SKEW_SECONDS, } from './adapters/github/github-app-credential-provider.js';
25
- export type { GitHubClientPort, GitHubInstallationTokenMintWithExpiry, GitHubReactionContent, MintedInstallationToken, } from './adapters/github/github-client-port.js';
26
- export type { GitHubForgeAdapterDeps } from './adapters/github/github-forge-adapter.js';
25
+ export type { GitHubClientPort, GitHubInstallationTokenMintWithExpiry, GitHubReactionContent, GitHubRevisionPinnedSnapshot, MintedInstallationToken, } from './adapters/github/github-client-port.js';
26
+ export type { GitHubExplanationBinding, GitHubForgeAdapterDeps, } from './adapters/github/github-forge-adapter.js';
27
27
  export { GitHubForgeAdapter } from './adapters/github/github-forge-adapter.js';
28
28
  export { StaticTokenProvider } from './adapters/github/static-token-provider.js';
29
29
  export type { GitLabClientPort, GitLabDiffPosition, GitLabNote, } from './adapters/gitlab/gitlab-client-port.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,YAAY,EACV,KAAK,EACL,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,MAAM,EACN,QAAQ,EACR,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,OAAO,EACP,UAAU,EACV,WAAW,EACX,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,UAAU,GACX,MAAM,YAAY,CAAC;AAIpB,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,YAAY,GACb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAIzD,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,QAAQ,EACR,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAO9B,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpG,YAAY,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAC9E,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAIlE,YAAY,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AASpE,YAAY,EAAE,+BAA+B,EAAE,MAAM,qDAAqD,CAAC;AAC3G,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,YAAY,GACb,MAAM,qDAAqD,CAAC;AAC7D,YAAY,EACV,gBAAgB,EAChB,qCAAqC,EACrC,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,yCAAyC,CAAC;AACjD,YAAY,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAOjF,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,GACX,MAAM,yCAAyC,CAAC;AACjD,YAAY,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAQ/E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,YAAY,EACV,KAAK,EACL,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,MAAM,EACN,QAAQ,EACR,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,OAAO,EACP,UAAU,EACV,WAAW,EACX,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,UAAU,GACX,MAAM,YAAY,CAAC;AAIpB,YAAY,EACV,yBAAyB,EACzB,wBAAwB,EACxB,qBAAqB,EACrB,6BAA6B,EAC7B,0BAA0B,EAC1B,6BAA6B,EAC7B,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAIzD,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,QAAQ,EACR,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAO9B,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpG,YAAY,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAC9E,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAIlE,YAAY,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AASpE,YAAY,EAAE,+BAA+B,EAAE,MAAM,qDAAqD,CAAC;AAC3G,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,YAAY,GACb,MAAM,qDAAqD,CAAC;AAC7D,YAAY,EACV,gBAAgB,EAChB,qCAAqC,EACrC,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,yCAAyC,CAAC;AACjD,YAAY,EACV,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAOjF,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,GACX,MAAM,yCAAyC,CAAC;AACjD,YAAY,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAQ/E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA2BH,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,UAAU,GACX,MAAM,YAAY,CAAC;AAcpB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAWzD,mEAAmE;AAEnE,mEAAmE;AACnE,iFAAiF;AACjF,yEAAyE;AACzE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAOpG,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAUpE,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,YAAY,GACb,MAAM,qDAAqD,CAAC;AAQ7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAajF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAE/E,mEAAmE;AAEnE,mEAAmE;AACnE,yEAAyE;AACzE,+EAA+E;AAC/E,wEAAwE;AACxE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,mEAAmE;AAEnE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA2BH,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,UAAU,GACX,MAAM,YAAY,CAAC;AAsBpB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAWzD,mEAAmE;AAEnE,mEAAmE;AACnE,iFAAiF;AACjF,yEAAyE;AACzE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAOpG,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAUpE,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,YAAY,GACb,MAAM,qDAAqD,CAAC;AAY7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAajF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAE/E,mEAAmE;AAEnE,mEAAmE;AACnE,yEAAyE;AACzE,+EAA+E;AAC/E,wEAAwE;AACxE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,mEAAmE;AAEnE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
@@ -23,7 +23,7 @@
23
23
  * it would permit `fetchGraph` without `fetchGraphMetadata`.) Single-method
24
24
  * capabilities stay `Partial<>` because co-presence is trivial for one method.
25
25
  */
26
- import type { DependencyGraph, GraphMetadata } from 'ghagga-core';
26
+ import type { DependencyGraph, ExplanationIdentity, ExplanationSnapshot, GraphMetadata, NonAnswerExplanationOutcome } from 'ghagga-core';
27
27
  import type { ChangedFile, ChangeRequest, ChangeRequestRef, CommentId, CommentMarker, Commit, ForgeCapabilities, PublishReport, RepoRef, UnifiedDiff, UpsertSummaryResult } from '../types.js';
28
28
  /** Kinds of reactions an adapter may support. */
29
29
  export declare const REACTION_KIND: {
@@ -144,6 +144,45 @@ export interface GraphReadCapable {
144
144
  /** Read graph metadata (freshness, size, …), or null if none is available. */
145
145
  fetchGraphMetadata(repo: RepoRef): Promise<GraphMetadata | null>;
146
146
  }
147
+ /**
148
+ * Optional: adapter can READ a single file's contents at a ref, no clone.
149
+ *
150
+ * A single-method capability (composed as `Partial<>` on {@link ForgeAdapter}),
151
+ * narrowed by method-presence (`'fetchFileContents' in adapter`) like every other
152
+ * optional capability. `null` means "no such file at this ref" (missing, or the
153
+ * path is a directory/submodule) — distinct from a throw, which is a real fault
154
+ * (auth, rate-limit, oversize). Used to give code-blind (no-checkout) triage some
155
+ * code-in-evidence.
156
+ */
157
+ export interface FileReadCapable {
158
+ /**
159
+ * Read a repo-relative file's UTF-8 contents at `ref`, or null if not a file
160
+ * there. `ref` is optional — omitted reads the repository default branch (for
161
+ * issue triage, which has no natural SHA).
162
+ */
163
+ fetchFileContents(repo: RepoRef, path: string, ref?: string): Promise<string | null>;
164
+ }
165
+ /**
166
+ * Optional: adapter can SEARCH a repo's code for a term, no clone.
167
+ *
168
+ * A single-method capability (composed as `Partial<>` on {@link ForgeAdapter}),
169
+ * narrowed by method-presence (`'searchCode' in adapter`) like every other
170
+ * optional capability — there is no `ForgeCapabilities` flag for it. Used to
171
+ * give code-blind (no-checkout) triage a fallback source of candidate paths
172
+ * when {@link FileReadCapable}-driven path discovery from the issue text alone
173
+ * finds too few files: the caller extracts an identifier the reporter named
174
+ * (backtick-quoted) and searches the repo's DEFAULT branch for it (a GitHub
175
+ * code-search limitation the caller accepts).
176
+ */
177
+ export interface SearchCapable {
178
+ /**
179
+ * Search the repo's code for `term`, returning matching file paths (deduped,
180
+ * capped at `limit`, first-appearance order). Never throws — a real fault
181
+ * (auth, rate-limit/throttle, malformed response) degrades to `[]` so triage
182
+ * proceeds with whatever else it already has.
183
+ */
184
+ searchCode(repo: RepoRef, term: string, limit: number): Promise<string[]>;
185
+ }
147
186
  /** Optional: adapter can publish line-anchored inline comments. */
148
187
  export interface InlineCapable {
149
188
  /** Publish a batch of inline comments; partial success is reported. */
@@ -157,6 +196,60 @@ export interface MarkerExtractable {
157
196
  */
158
197
  extractMarker(body: string, marker: CommentMarker): string | null;
159
198
  }
199
+ /** A revision-pinned explanation snapshot, or a core-compatible non-answer. */
200
+ export type ExplanationSnapshotReadResult = {
201
+ readonly kind: 'SNAPSHOT';
202
+ readonly snapshot: ExplanationSnapshot;
203
+ } | (Pick<NonAnswerExplanationOutcome, 'reason'> & {
204
+ readonly kind: 'STALE' | 'INVALID';
205
+ });
206
+ /** Optional: adapter can acquire every explanation byte through one pinned read. */
207
+ export interface ExplanationSnapshotCapable {
208
+ /**
209
+ * Acquire a snapshot bound to the requested revision without composing live
210
+ * PR-number reads. A missing or unprovable response is never repaired from
211
+ * another endpoint: callers receive STALE or INVALID instead.
212
+ */
213
+ fetchExplanationSnapshot(identity: ExplanationIdentity, ref: ChangeRequestRef): Promise<ExplanationSnapshotReadResult>;
214
+ }
215
+ /** Explanation comments are independent from legacy review markers. */
216
+ export type ExplanationCommentChannel = 'progress' | 'answer';
217
+ /**
218
+ * Exact identity required to reconcile an explanation-owned comment.
219
+ *
220
+ * `ownerId` is a stable forge-native account ID. Repository namespace, login,
221
+ * and marker text are labels, not proof of ownership.
222
+ */
223
+ export interface ExplanationCommentRef {
224
+ readonly forgeInstance: string;
225
+ readonly installationId: string;
226
+ readonly repositoryId: string;
227
+ readonly changeRequest: ChangeRequestRef;
228
+ readonly ownerId: string;
229
+ readonly channel: ExplanationCommentChannel;
230
+ readonly invocationId: string;
231
+ }
232
+ /** An explanation-comment lookup is intentionally three-state. */
233
+ export type ExplanationCommentLookup = {
234
+ readonly kind: 'FOUND';
235
+ readonly commentId: CommentId;
236
+ readonly reference: ExplanationCommentRef;
237
+ } | {
238
+ readonly kind: 'ABSENT';
239
+ } | {
240
+ readonly kind: 'INCOMPLETE';
241
+ readonly reason: string;
242
+ };
243
+ /**
244
+ * Optional explanation publication seam. It delegates one typed operation at a
245
+ * time; it does not choose create versus update or turn ABSENT into authority
246
+ * to recreate a comment. That durable orchestration belongs to Unit 5.
247
+ */
248
+ export interface ExplanationPublicationCapable {
249
+ lookupExplanationComment(reference: ExplanationCommentRef): Promise<ExplanationCommentLookup>;
250
+ createExplanationComment(reference: ExplanationCommentRef, body: string): Promise<CommentId>;
251
+ updateExplanationComment(reference: ExplanationCommentRef, commentId: CommentId, body: string): Promise<void>;
252
+ }
160
253
  /**
161
254
  * The full adapter type the engine consumes.
162
255
  *
@@ -170,5 +263,5 @@ export interface MarkerExtractable {
170
263
  export type ForgeAdapter = ForgeAdapterBase & Partial<ReactionCapable> & (GraphReadCapable | {
171
264
  fetchGraph?: never;
172
265
  fetchGraphMetadata?: never;
173
- }) & Partial<InlineCapable> & Partial<MarkerExtractable>;
266
+ }) & Partial<FileReadCapable> & Partial<SearchCapable> & Partial<InlineCapable> & Partial<MarkerExtractable> & Partial<ExplanationSnapshotCapable> & Partial<ExplanationPublicationCapable>;
174
267
  //# sourceMappingURL=forge-adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"forge-adapter.d.ts","sourceRoot":"","sources":["../../src/ports/forge-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"forge-adapter.d.ts","sourceRoot":"","sources":["../../src/ports/forge-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAMH,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,2BAA2B,EAC5B,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,MAAM,EACN,iBAAiB,EACjB,aAAa,EACb,OAAO,EACP,WAAW,EACX,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAErB,iDAAiD;AACjD,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAE9E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE;QACT,sEAAsE;QACtE,OAAO,EAAE,MAAM,CAAC;QAChB,oEAAoE;QACpE,OAAO,EAAE,MAAM,CAAC;QAChB,gDAAgD;QAChD,QAAQ,EAAE,MAAM,CAAC;QACjB,+DAA+D;QAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,+DAA+D;QAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IAEzC,mDAAmD;IACnD,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAEvD,qEAAqE;IACrE,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAElE,uCAAuC;IACvC,aAAa,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAE7D,+CAA+C;IAC/C,YAAY,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEvD;;;;;OAKG;IACH,oBAAoB,CAClB,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACjC;AAED,uDAAuD;AACvD,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1E;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAC3D,8EAA8E;IAC9E,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;CAClE;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACtF;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC3E;AAED,mEAAmE;AACnE,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CACzF;AAED,0EAA0E;AAC1E,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAAC;CACnE;AAED,+EAA+E;AAC/E,MAAM,MAAM,6BAA6B,GACrC;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAA;CAAE,GACrE,CAAC,IAAI,CAAC,2BAA2B,EAAE,QAAQ,CAAC,GAAG;IAC7C,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;CACpC,CAAC,CAAC;AAEP,oFAAoF;AACpF,MAAM,WAAW,0BAA0B;IACzC;;;;OAIG;IACH,wBAAwB,CACtB,QAAQ,EAAE,mBAAmB,EAC7B,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,6BAA6B,CAAC,CAAC;CAC3C;AAED,uEAAuE;AACvE,MAAM,MAAM,yBAAyB,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,kEAAkE;AAClE,MAAM,MAAM,wBAAwB,GAChC;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;CAC3C,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D;;;;GAIG;AACH,MAAM,WAAW,6BAA6B;IAC5C,wBAAwB,CAAC,SAAS,EAAE,qBAAqB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAC9F,wBAAwB,CAAC,SAAS,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7F,wBAAwB,CACtB,SAAS,EAAE,qBAAqB,EAChC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG,gBAAgB,GACzC,OAAO,CAAC,eAAe,CAAC,GACxB,CAAC,gBAAgB,GAAG;IAAE,UAAU,CAAC,EAAE,KAAK,CAAC;IAAC,kBAAkB,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,GACvE,OAAO,CAAC,eAAe,CAAC,GACxB,OAAO,CAAC,aAAa,CAAC,GACtB,OAAO,CAAC,aAAa,CAAC,GACtB,OAAO,CAAC,iBAAiB,CAAC,GAC1B,OAAO,CAAC,0BAA0B,CAAC,GACnC,OAAO,CAAC,6BAA6B,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"forge-adapter.js","sourceRoot":"","sources":["../../src/ports/forge-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAqBH,iDAAiD;AACjD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;CACZ,CAAC"}
1
+ {"version":3,"file":"forge-adapter.js","sourceRoot":"","sources":["../../src/ports/forge-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AA2BH,iDAAiD;AACjD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;CACZ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ghagga-forge",
3
- "version": "3.3.0",
3
+ "version": "3.4.0",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -27,7 +27,7 @@
27
27
  "code-review"
28
28
  ],
29
29
  "engines": {
30
- "node": ">=20.0.0"
30
+ "node": ">=22.22.2"
31
31
  },
32
32
  "main": "./dist/index.js",
33
33
  "types": "./dist/index.d.ts",
@@ -42,12 +42,12 @@
42
42
  "README.md"
43
43
  ],
44
44
  "dependencies": {
45
- "ghagga-core": "3.3.0"
45
+ "ghagga-core": "3.4.0"
46
46
  },
47
47
  "devDependencies": {
48
- "@types/node": "^26.1.0",
48
+ "@types/node": "^26.6.1",
49
49
  "typescript": "^6.0.3",
50
- "vitest": "^4.1.10"
50
+ "vitest": "^5.0.1"
51
51
  },
52
52
  "scripts": {
53
53
  "build": "tsc && node scripts/copy-impl-assets.mjs",