@knpkv/codecommit-web 0.15.0 → 0.17.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.
Files changed (83) hide show
  1. package/README.md +13 -0
  2. package/dist/client/assets/index-BQbzvlT7.js +90 -0
  3. package/dist/client/assets/index-Rg2HVfx7.css +1 -0
  4. package/dist/client/assets/pr-review-workspace-B7GX-PRi.js +23 -0
  5. package/dist/client/index.html +2 -2
  6. package/dist/pull-request-coordinates.d.ts.map +1 -1
  7. package/dist/pull-request-coordinates.js +5 -4
  8. package/dist/pull-request-coordinates.js.map +1 -1
  9. package/dist/server/Api.d.ts +269 -269
  10. package/dist/server/Api.d.ts.map +1 -1
  11. package/dist/server/Api.js +3 -3
  12. package/dist/server/Api.js.map +1 -1
  13. package/dist/server/Server.d.ts +3 -3
  14. package/dist/server/Server.d.ts.map +1 -1
  15. package/dist/server/Server.js +13 -11
  16. package/dist/server/Server.js.map +1 -1
  17. package/dist/server/handlers/accounts-live.d.ts +1 -1
  18. package/dist/server/handlers/accounts-live.d.ts.map +1 -1
  19. package/dist/server/handlers/accounts-live.js +1 -1
  20. package/dist/server/handlers/accounts-live.js.map +1 -1
  21. package/dist/server/handlers/audit-live.d.ts +1 -1
  22. package/dist/server/handlers/audit-live.d.ts.map +1 -1
  23. package/dist/server/handlers/audit-live.js +1 -1
  24. package/dist/server/handlers/audit-live.js.map +1 -1
  25. package/dist/server/handlers/config-live.d.ts +1 -1
  26. package/dist/server/handlers/config-live.d.ts.map +1 -1
  27. package/dist/server/handlers/config-live.js +2 -2
  28. package/dist/server/handlers/config-live.js.map +1 -1
  29. package/dist/server/handlers/events-live.d.ts +1 -1
  30. package/dist/server/handlers/events-live.d.ts.map +1 -1
  31. package/dist/server/handlers/events-live.js +26 -8
  32. package/dist/server/handlers/events-live.js.map +1 -1
  33. package/dist/server/handlers/notifications-live.d.ts +2 -2
  34. package/dist/server/handlers/notifications-live.d.ts.map +1 -1
  35. package/dist/server/handlers/notifications-live.js +2 -2
  36. package/dist/server/handlers/notifications-live.js.map +1 -1
  37. package/dist/server/handlers/permissions-live.d.ts +1 -1
  38. package/dist/server/handlers/permissions-live.d.ts.map +1 -1
  39. package/dist/server/handlers/permissions-live.js +1 -1
  40. package/dist/server/handlers/permissions-live.js.map +1 -1
  41. package/dist/server/handlers/prs-live.d.ts +15 -15
  42. package/dist/server/handlers/prs-live.d.ts.map +1 -1
  43. package/dist/server/handlers/prs-live.js +3 -3
  44. package/dist/server/handlers/prs-live.js.map +1 -1
  45. package/dist/server/handlers/sandbox-live.d.ts +1 -1
  46. package/dist/server/handlers/sandbox-live.d.ts.map +1 -1
  47. package/dist/server/handlers/sandbox-live.js +2 -2
  48. package/dist/server/handlers/sandbox-live.js.map +1 -1
  49. package/dist/server/handlers/stats-live.d.ts +1 -1
  50. package/dist/server/handlers/stats-live.d.ts.map +1 -1
  51. package/dist/server/handlers/stats-live.js +1 -1
  52. package/dist/server/handlers/stats-live.js.map +1 -1
  53. package/dist/server/handlers/subscriptions-live.d.ts +1 -1
  54. package/dist/server/handlers/subscriptions-live.d.ts.map +1 -1
  55. package/dist/server/handlers/subscriptions-live.js +1 -1
  56. package/dist/server/handlers/subscriptions-live.js.map +1 -1
  57. package/dist/server/internal/OwnerSessionSecurity.d.ts +19 -8
  58. package/dist/server/internal/OwnerSessionSecurity.d.ts.map +1 -1
  59. package/dist/server/internal/OwnerSessionSecurity.js +109 -32
  60. package/dist/server/internal/OwnerSessionSecurity.js.map +1 -1
  61. package/dist/server/internal/PublicOrigin.d.ts +9 -0
  62. package/dist/server/internal/PublicOrigin.d.ts.map +1 -0
  63. package/dist/server/internal/PublicOrigin.js +17 -0
  64. package/dist/server/internal/PublicOrigin.js.map +1 -0
  65. package/dist/server/review/PullRequestReview.d.ts +77 -22
  66. package/dist/server/review/PullRequestReview.d.ts.map +1 -1
  67. package/dist/server/review/PullRequestReview.js +61 -18
  68. package/dist/server/review/PullRequestReview.js.map +1 -1
  69. package/dist/server/review/ReviewPromptBudget.d.ts +4 -0
  70. package/dist/server/review/ReviewPromptBudget.d.ts.map +1 -1
  71. package/dist/server/review/ReviewPromptBudget.js +4 -0
  72. package/dist/server/review/ReviewPromptBudget.js.map +1 -1
  73. package/dist/server/review/ReviewSkillCatalog.js +2 -2
  74. package/dist/tooling/authenticated-dev-proxy.d.ts +20 -5
  75. package/dist/tooling/authenticated-dev-proxy.d.ts.map +1 -1
  76. package/dist/tooling/authenticated-dev-proxy.js +25 -9
  77. package/dist/tooling/authenticated-dev-proxy.js.map +1 -1
  78. package/dist/tooling/authenticated-dev-proxy.test.js +96 -5
  79. package/dist/tooling/authenticated-dev-proxy.test.js.map +1 -1
  80. package/package.json +32 -25
  81. package/dist/client/assets/index-Ds8Muxxv.css +0 -1
  82. package/dist/client/assets/index-eLkbewLN.js +0 -90
  83. package/dist/client/assets/pr-review-workspace-CgczAXj_.js +0 -22
@@ -1,11 +1,14 @@
1
- import { Clock, Context, Crypto, Effect, Layer, Redacted, Ref, Schema } from "effect";
2
- import { HttpRouter, HttpServerRequest, HttpServerResponse } from "effect/unstable/http";
1
+ import { credentialValuesEqual, decideOneTimeCredential, expiresAt, issueCsrfToken, issuePairingCode, issueSessionToken, serializeCredentialCookie } from "@knpkv/browser-pairing";
2
+ import { Clock, Context, Effect, Layer, Redacted, Ref, Schema } from "effect";
3
+ import { HttpRouter, HttpServerRequest, HttpServerResponse } from "effect/http";
3
4
  import { ForbiddenApiError, OwnerSessionAuth, UnauthorizedApiError } from "../Api.js";
4
5
  export class OwnerSessionSecrets extends Context.Service()("@knpkv/codecommit-web/OwnerSessionSecrets") {
5
6
  }
6
7
  export class UnsafeServerHostnameError extends Schema.TaggedError()("UnsafeServerHostnameError", { hostname: Schema.String, message: Schema.String }) {
7
8
  }
8
9
  const safeMethods = new Set(["GET", "HEAD", "OPTIONS"]);
10
+ const MAX_BOOTSTRAP_FAILURES = 5;
11
+ const authenticatedDevPublicOrigin = "http://localhost:5173";
9
12
  export const isLoopbackHostname = (hostname) => hostname === "127.0.0.1" || hostname === "localhost" || hostname === "::1" || hostname === "[::1]";
10
13
  export const requireLoopbackHostname = Effect.fn("OwnerSessionSecurity.requireLoopbackHostname")(function* (hostname) {
11
14
  if (!isLoopbackHostname(hostname)) {
@@ -16,25 +19,29 @@ export const requireLoopbackHostname = Effect.fn("OwnerSessionSecurity.requireLo
16
19
  }
17
20
  return hostname;
18
21
  });
19
- export const makeOwnerSessionSecrets = Effect.fn("OwnerSessionSecurity.makeSecrets")(function* () {
20
- const cryptoService = yield* Crypto.Crypto;
22
+ export const makeOwnerSessionSecrets = Effect.fn("OwnerSessionSecurity.makeSecrets")(function* (authorityOrigin) {
23
+ const validatedAuthorityOrigin = yield* requireLoopbackOrigin(authorityOrigin);
21
24
  const [ownerToken, csrfToken, bootstrapToken] = yield* Effect.all([
22
- cryptoService.randomUUIDv4,
23
- cryptoService.randomUUIDv4,
24
- cryptoService.randomUUIDv4
25
+ issueSessionToken(),
26
+ issueCsrfToken(),
27
+ issuePairingCode()
25
28
  ]);
26
29
  const bootstrapAvailable = yield* Ref.make(true);
30
+ const bootstrapAttemptState = yield* Ref.make({ failedAttempts: 0, inFlight: 0 });
27
31
  return OwnerSessionSecrets.of({
28
- ownerToken: Redacted.make(ownerToken),
29
- csrfToken: Redacted.make(csrfToken),
30
- bootstrapToken: Redacted.make(bootstrapToken),
32
+ authorityOrigin: validatedAuthorityOrigin,
33
+ ownerToken,
34
+ csrfToken,
35
+ bootstrapToken,
31
36
  bootstrapAvailable,
37
+ bootstrapAttemptState,
32
38
  bootstrapExpiresAtMillis: yield* Ref.make(undefined)
33
39
  });
34
40
  });
35
41
  export const activateOwnerSessionBootstrap = Effect.fn("OwnerSessionSecurity.activateBootstrap")(function* (secrets) {
36
42
  const now = yield* Clock.currentTimeMillis;
37
- yield* Ref.set(secrets.bootstrapExpiresAtMillis, now + 60_000);
43
+ const expiry = yield* expiresAt(now, 60_000);
44
+ yield* Ref.set(secrets.bootstrapExpiresAtMillis, expiry);
38
45
  });
39
46
  export const ownerSessionOrigin = (hostname, port) => {
40
47
  const urlHostname = hostname === "::1" ? "[::1]" : hostname;
@@ -53,7 +60,11 @@ export const requireLoopbackOrigin = Effect.fn("OwnerSessionSecurity.requireLoop
53
60
  message: "CodeCommit public origin must be a valid loopback HTTP origin"
54
61
  })
55
62
  });
56
- if (url.protocol !== "http:" || !isLoopbackHostname(url.hostname) || url.pathname !== "/" || url.search || url.hash) {
63
+ if (url.protocol !== "http:" ||
64
+ !isLoopbackHostname(url.hostname) ||
65
+ url.pathname !== "/" ||
66
+ url.search !== "" ||
67
+ url.hash !== "") {
57
68
  return yield* new UnsafeServerHostnameError({
58
69
  hostname: origin,
59
70
  message: "CodeCommit public origin must be an HTTP loopback origin without a path, query, or fragment"
@@ -61,12 +72,39 @@ export const requireLoopbackOrigin = Effect.fn("OwnerSessionSecurity.requireLoop
61
72
  }
62
73
  return url.origin;
63
74
  });
64
- export const ownerSessionCookie = (secrets) => `cc_owner=${Redacted.value(secrets.ownerToken)}; HttpOnly; Path=/api; SameSite=Strict`;
75
+ /** Validate the advertised origin against either the bound server or the supported Vite proxy. */
76
+ export const requireSupportedPublicOrigin = Effect.fn("OwnerSessionSecurity.requireSupportedPublicOrigin")(function* (origin, authorityOrigin) {
77
+ const validatedOrigin = yield* requireLoopbackOrigin(origin);
78
+ const validatedAuthority = yield* requireLoopbackOrigin(authorityOrigin);
79
+ const authorityUrl = new URL(validatedAuthority);
80
+ const isSupportedProxy = validatedOrigin === authenticatedDevPublicOrigin &&
81
+ authorityUrl.protocol === "http:" && authorityUrl.hostname === "127.0.0.1";
82
+ if (validatedOrigin !== validatedAuthority && !isSupportedProxy) {
83
+ return yield* new UnsafeServerHostnameError({
84
+ hostname: origin,
85
+ message: "CodeCommit public origin must be the bound server or its supported Vite proxy"
86
+ });
87
+ }
88
+ return validatedOrigin;
89
+ });
90
+ export const resolvePublicOrigin = Effect.fn("OwnerSessionSecurity.resolvePublicOrigin")(function* (configuredOrigin, authorityOrigin) {
91
+ return configuredOrigin === undefined
92
+ ? yield* requireLoopbackOrigin(authorityOrigin)
93
+ : yield* requireSupportedPublicOrigin(configuredOrigin, authorityOrigin);
94
+ });
95
+ export const ownerSessionCookie = (secrets) => serializeCredentialCookie(secrets.ownerToken, {
96
+ name: "cc_owner",
97
+ httpOnly: true,
98
+ path: "/api",
99
+ sameSite: "strict",
100
+ secure: false
101
+ });
65
102
  export const authorizeOwnerRequest = Effect.fn("OwnerSessionSecurity.authorizeRequest")(function* (request, secrets) {
66
- if (request.credential !== Redacted.value(secrets.ownerToken)) {
103
+ const ownerCredentialMatches = credentialValuesEqual(request.credential, Redacted.value(secrets.ownerToken)) === true;
104
+ if (!ownerCredentialMatches) {
67
105
  return yield* new UnauthorizedApiError({ message: "Missing or invalid owner session" });
68
106
  }
69
- const sameOrigin = request.host !== undefined && request.origin === `http://${request.host}`;
107
+ const sameOrigin = request.origin !== undefined && request.origin === secrets.authorityOrigin;
70
108
  if (request.origin !== undefined && !sameOrigin) {
71
109
  return yield* new ForbiddenApiError({ message: "Request origin does not match the CodeCommit server" });
72
110
  }
@@ -77,29 +115,68 @@ export const authorizeOwnerRequest = Effect.fn("OwnerSessionSecurity.authorizeRe
77
115
  if (!sameOrigin) {
78
116
  return yield* new ForbiddenApiError({ message: "Mutation origin does not match the CodeCommit server" });
79
117
  }
80
- if (request.csrfToken !== Redacted.value(secrets.csrfToken)) {
118
+ const csrfTokenMatches = request.csrfToken !== undefined &&
119
+ credentialValuesEqual(request.csrfToken, Redacted.value(secrets.csrfToken)) === true;
120
+ if (!csrfTokenMatches) {
81
121
  return yield* new ForbiddenApiError({ message: "Missing or invalid CSRF token" });
82
122
  }
83
123
  });
84
124
  export const authorizeBootstrapRequest = Effect.fn("OwnerSessionSecurity.authorizeBootstrap")(function* (request, secrets) {
85
- if (request.authorization !== `Bearer ${Redacted.value(secrets.bootstrapToken)}`) {
86
- return yield* new UnauthorizedApiError({ message: "Missing or invalid bootstrap token" });
87
- }
88
- if (request.host === undefined || request.origin !== `http://${request.host}`) {
125
+ if (request.origin !== secrets.authorityOrigin) {
89
126
  return yield* new ForbiddenApiError({ message: "Bootstrap origin does not match the CodeCommit server" });
90
127
  }
91
- const expiresAt = yield* Ref.get(secrets.bootstrapExpiresAtMillis);
92
- if (expiresAt === undefined) {
93
- return yield* new UnauthorizedApiError({ message: "Bootstrap token is not active" });
94
- }
95
- const now = yield* Clock.currentTimeMillis;
96
- if (now >= expiresAt) {
97
- return yield* new UnauthorizedApiError({ message: "Bootstrap token has expired" });
98
- }
99
- const available = yield* Ref.getAndSet(secrets.bootstrapAvailable, false);
100
- if (!available) {
101
- return yield* new UnauthorizedApiError({ message: "Bootstrap token has already been used" });
102
- }
128
+ const suppliedToken = request.authorization !== undefined && request.authorization.startsWith("Bearer ")
129
+ ? request.authorization.slice("Bearer ".length)
130
+ : undefined;
131
+ const acquireAdmission = Ref.modify(secrets.bootstrapAttemptState, (state) => {
132
+ if (state.failedAttempts + state.inFlight >= MAX_BOOTSTRAP_FAILURES) {
133
+ return ["unavailable", state];
134
+ }
135
+ const bootstrapTokenMatches = suppliedToken !== undefined &&
136
+ credentialValuesEqual(suppliedToken, Redacted.value(secrets.bootstrapToken)) === true;
137
+ if (!bootstrapTokenMatches) {
138
+ return ["invalid", {
139
+ failedAttempts: Math.min(MAX_BOOTSTRAP_FAILURES, state.failedAttempts + 1),
140
+ inFlight: state.inFlight
141
+ }];
142
+ }
143
+ return ["accepted", { ...state, inFlight: state.inFlight + 1 }];
144
+ }).pipe(Effect.flatMap((admission) => {
145
+ if (admission === "unavailable") {
146
+ return Effect.fail(new UnauthorizedApiError({ message: "Bootstrap confirmation temporarily unavailable" }));
147
+ }
148
+ if (admission === "invalid") {
149
+ return Effect.fail(new UnauthorizedApiError({ message: "Missing or invalid bootstrap token" }));
150
+ }
151
+ return Effect.void;
152
+ }));
153
+ return yield* Effect.acquireUseRelease(acquireAdmission, () => Effect.gen(function* () {
154
+ const expiresAt = yield* Ref.get(secrets.bootstrapExpiresAtMillis);
155
+ if (expiresAt === undefined) {
156
+ return yield* new UnauthorizedApiError({ message: "Bootstrap token is not active" });
157
+ }
158
+ const now = yield* Clock.currentTimeMillis;
159
+ const decision = yield* Ref.modify(secrets.bootstrapAvailable, (available) => {
160
+ const state = {
161
+ expiresAt,
162
+ consumedAt: available ? null : 0,
163
+ revokedAt: null
164
+ };
165
+ const next = decideOneTimeCredential(state, now);
166
+ return [next, next === "accepted" ? false : available];
167
+ });
168
+ if (decision === "expired")
169
+ return yield* new UnauthorizedApiError({ message: "Bootstrap token has expired" });
170
+ if (decision === "consumed") {
171
+ return yield* new UnauthorizedApiError({ message: "Bootstrap token has already been used" });
172
+ }
173
+ if (decision === "invalid") {
174
+ return yield* new UnauthorizedApiError({ message: "Bootstrap token state is invalid" });
175
+ }
176
+ }), () => Ref.update(secrets.bootstrapAttemptState, (state) => ({
177
+ ...state,
178
+ inFlight: Math.max(0, state.inFlight - 1)
179
+ })));
103
180
  });
104
181
  export const ownerSessionAuthLayer = Layer.effect(OwnerSessionAuth, Effect.gen(function* () {
105
182
  const secrets = yield* OwnerSessionSecrets;
@@ -1 +1 @@
1
- {"version":3,"file":"OwnerSessionSecurity.js","sourceRoot":"","sources":["../../../src/server/internal/OwnerSessionSecurity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OwnerSessionSecurity.js","sourceRoot":"","sources":["../../../src/server/internal/OwnerSessionSecurity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Effect } from "effect";
2
+ import { type OwnerSessionSecretsContract } from "./OwnerSessionSecurity.js";
3
+ /** Resolve the advertised origin for one concrete server bind attempt. */
4
+ export declare const resolveCodeCommitPublicOrigin: (configuredOrigin: string | undefined, port: number) => Effect.Effect<string, import("./OwnerSessionSecurity.js").UnsafeServerHostnameError, never>;
5
+ /** Resolve the startup origin before constructing the token-bearing bootstrap URL. */
6
+ export declare const resolveCodeCommitBootstrapUrl: (configuredOrigin: string | undefined, port: number, secrets: OwnerSessionSecretsContract) => Effect.Effect<string, import("./OwnerSessionSecurity.js").UnsafeServerHostnameError, never>;
7
+ /** Keep a retrying backend off the stale Vite proxy port; advertise it directly. */
8
+ export declare const resolveCodeCommitBootstrapUrlForBind: (configuredOrigin: string | undefined, requestedPort: number, actualPort: number, secrets: OwnerSessionSecretsContract) => Effect.Effect<string, import("./OwnerSessionSecurity.js").UnsafeServerHostnameError, never>;
9
+ //# sourceMappingURL=PublicOrigin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PublicOrigin.d.ts","sourceRoot":"","sources":["../../../src/server/internal/PublicOrigin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAEL,KAAK,2BAA2B,EAGjC,MAAM,2BAA2B,CAAA;AAElC,0EAA0E;AAC1E,eAAO,MAAM,6BAA6B,qJAIzC,CAAA;AAED,sFAAsF;AACtF,eAAO,MAAM,6BAA6B,2LAKzC,CAAA;AAED,oFAAoF;AACpF,eAAO,MAAM,oCAAoC,wNAUhD,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { Effect } from "effect";
2
+ import { ownerSessionOrigin, ownerSessionUrlForOrigin, resolvePublicOrigin } from "./OwnerSessionSecurity.js";
3
+ /** Resolve the advertised origin for one concrete server bind attempt. */
4
+ export const resolveCodeCommitPublicOrigin = Effect.fn("CodeCommitServer.resolvePublicOrigin")(function* (configuredOrigin, port) {
5
+ return yield* resolvePublicOrigin(configuredOrigin, ownerSessionOrigin("127.0.0.1", port));
6
+ });
7
+ /** Resolve the startup origin before constructing the token-bearing bootstrap URL. */
8
+ export const resolveCodeCommitBootstrapUrl = Effect.fn("CodeCommitServer.resolveBootstrapUrl")(function* (configuredOrigin, port, secrets) {
9
+ const publicOrigin = yield* resolveCodeCommitPublicOrigin(configuredOrigin, port);
10
+ return ownerSessionUrlForOrigin(publicOrigin, secrets);
11
+ });
12
+ /** Keep a retrying backend off the stale Vite proxy port; advertise it directly. */
13
+ export const resolveCodeCommitBootstrapUrlForBind = Effect.fn("CodeCommitServer.resolveBootstrapUrlForBind")(function* (configuredOrigin, requestedPort, actualPort, secrets) {
14
+ const originOverride = requestedPort === actualPort ? configuredOrigin : undefined;
15
+ return yield* resolveCodeCommitBootstrapUrl(originOverride, actualPort, secrets);
16
+ });
17
+ //# sourceMappingURL=PublicOrigin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PublicOrigin.js","sourceRoot":"","sources":["../../../src/server/internal/PublicOrigin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EACL,kBAAkB,EAElB,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,2BAA2B,CAAA;AAElC,0EAA0E;AAC1E,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC,EAAE,CAAC,sCAAsC,CAAC,CAC5F,QAAQ,CAAC,EAAC,gBAAoC,EAAE,IAAY;IAC1D,OAAO,KAAK,CAAC,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAA;AAC5F,CAAC,CACF,CAAA;AAED,sFAAsF;AACtF,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC,EAAE,CAAC,sCAAsC,CAAC,CAC5F,QAAQ,CAAC,EAAC,gBAAoC,EAAE,IAAY,EAAE,OAAoC;IAChG,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,6BAA6B,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAA;IACjF,OAAO,wBAAwB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;AACxD,CAAC,CACF,CAAA;AAED,oFAAoF;AACpF,MAAM,CAAC,MAAM,oCAAoC,GAAG,MAAM,CAAC,EAAE,CAAC,6CAA6C,CAAC,CAC1G,QAAQ,CAAC,EACP,gBAAoC,EACpC,aAAqB,EACrB,UAAkB,EAClB,OAAoC;IAEpC,MAAM,cAAc,GAAG,aAAa,KAAK,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAA;IAClF,OAAO,KAAK,CAAC,CAAC,6BAA6B,CAAC,cAAc,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;AAClF,CAAC,CACF,CAAA"}
@@ -4,9 +4,9 @@ import { createTwoFilesPatch } from "diff";
4
4
  import { Cause, Effect, Option, Schema, Stream } from "effect";
5
5
  import * as Crypto from "effect/Crypto";
6
6
  import * as FileSystem from "effect/FileSystem";
7
+ import type * as ChildProcessSpawner from "effect/process/ChildProcessSpawner";
7
8
  import type * as Semaphore from "effect/Semaphore";
8
- import type * as ChildProcessSpawner from "effect/unstable/process/ChildProcessSpawner";
9
- import { type PullRequestRelayReviewResponse, type RelayReviewConversationTurn, type RelayReviewKind, type RelayReviewProfile, type RelayReviewProgressPhase, RelayReviewResult, type RelayReviewStreamEvent } from "../Api.js";
9
+ import { type PullRequestRelayReviewResponse, RelayExplainResult, RelayNativeReviewResult, type RelayReviewConversationTurn, type RelayReviewKind, type RelayReviewProfile, type RelayReviewProgressPhase, RelayReviewResult, type RelayReviewStreamEvent } from "../Api.js";
10
10
  import type { RelayFindingPublisherService } from "./RelayFindingPublisher.js";
11
11
  declare const PullRequestReviewError_base: Schema.Class<PullRequestReviewError, Schema.TaggedStruct<"PullRequestReviewError", {
12
12
  readonly operation: Schema.String;
@@ -87,17 +87,72 @@ export declare const withRelayReviewPermit: <A, E, R>(semaphore: Semaphore.Semap
87
87
  export declare const withRelayReviewStreamPermit: <A, E, R>(semaphore: Semaphore.Semaphore, stream: Stream.Stream<A, E, R>) => Stream.Stream<A, E | PullRequestReviewError, R>;
88
88
  /** Host-authored Relay prompt; repository content is isolated as untrusted evidence. */
89
89
  export declare const makeRelayReviewPrompt: (scope: ExactReviewScope, kind: RelayReviewKind, patch: string, skillPrompt?: string) => string;
90
+ declare const RelayReviewConversationResult: Schema.Struct<{
91
+ readonly reply: Schema.String;
92
+ readonly review: Schema.Struct<{
93
+ readonly findings: Schema.$Array<Schema.Struct<{
94
+ readonly id: Schema.String;
95
+ readonly priority: Schema.Literals<readonly ["P1", "P2", "P3", "P4"]>;
96
+ readonly title: Schema.String;
97
+ readonly summary: Schema.String;
98
+ readonly details: Schema.String;
99
+ readonly recommendation: Schema.String;
100
+ readonly verification: Schema.String;
101
+ readonly publicationTarget: Schema.Literals<readonly ["pr-comment", "line-comment"]>;
102
+ readonly location: Schema.Union<readonly [Schema.Struct<{
103
+ readonly scope: Schema.Literal<"general">;
104
+ }>, Schema.Struct<{
105
+ readonly scope: Schema.Literal<"file">;
106
+ readonly filePath: Schema.String;
107
+ }>, Schema.Struct<{
108
+ readonly scope: Schema.Literal<"line">;
109
+ readonly filePath: Schema.String;
110
+ readonly line: Schema.Int;
111
+ readonly side: Schema.Literals<readonly ["before", "after"]>;
112
+ }>]>;
113
+ }>>;
114
+ readonly verdict: Schema.String;
115
+ }>;
116
+ }>;
117
+ declare const RelayExplainConversationResult: Schema.Struct<{
118
+ readonly reply: Schema.String;
119
+ readonly review: Schema.Struct<{
120
+ readonly findings: Schema.$Array<Schema.Struct<{
121
+ readonly id: Schema.String;
122
+ readonly priority: Schema.Literals<readonly ["P1", "P2", "P3", "P4"]>;
123
+ readonly title: Schema.String;
124
+ readonly summary: Schema.String;
125
+ readonly details: Schema.String;
126
+ readonly recommendation: Schema.String;
127
+ readonly verification: Schema.String;
128
+ readonly publicationTarget: Schema.Literals<readonly ["pr-comment", "line-comment"]>;
129
+ readonly location: Schema.Union<readonly [Schema.Struct<{
130
+ readonly scope: Schema.Literal<"general">;
131
+ }>, Schema.Struct<{
132
+ readonly scope: Schema.Literal<"file">;
133
+ readonly filePath: Schema.String;
134
+ }>, Schema.Struct<{
135
+ readonly scope: Schema.Literal<"line">;
136
+ readonly filePath: Schema.String;
137
+ readonly line: Schema.Int;
138
+ readonly side: Schema.Literals<readonly ["before", "after"]>;
139
+ }>]>;
140
+ }>>;
141
+ readonly verdict: Schema.String;
142
+ readonly explanation: Schema.String;
143
+ }>;
144
+ }>;
90
145
  /** Exact native output contract selected before the provider process starts. */
91
- export declare const relayReviewOutputSchema: (kind: RelayReviewKind) => Schema.Top;
146
+ export declare const relayReviewOutputSchema: (kind: RelayReviewKind) => typeof RelayExplainResult | typeof RelayNativeReviewResult;
92
147
  export declare const parseRelayReviewResult: (message: string, kind: RelayReviewKind) => Option.Option<RelayReviewResult>;
93
148
  /** Execute one ephemeral, read-only Relay pass over the exact provider patch. */
94
149
  export declare const runPullRequestRelayReview: (client: ReadClient.CodeCommitReadClientService, pullRequest: Domain.PullRequest, expectedRevision: ExpectedReviewRevision, profile: {
95
150
  readonly id: string;
96
151
  readonly name: string;
97
152
  readonly kind: "explain" | "review" | "security" | "tests";
98
- readonly provider: "codex";
99
- readonly harness: "native-codex";
100
- readonly model: "configured-default" | "gpt-5.6-luna" | "gpt-5.6-sol" | "gpt-5.6-terra";
153
+ readonly provider: "claude" | "codex";
154
+ readonly harness: "native-claude" | "native-codex";
155
+ readonly model: "configured-default" | "default" | "gpt-5.6-luna" | "gpt-5.6-sol" | "gpt-5.6-terra";
101
156
  readonly skillIds: readonly string[];
102
157
  }, changedFiles?: PullRequestChangedFilesSource | undefined, skillPrompt?: string | undefined, reportProgress?: RelayReviewProgressReporter | undefined) => Effect.Effect<{
103
158
  readonly pullRequestId: string & import("effect/Brand").Brand<"PullRequestId">;
@@ -109,9 +164,9 @@ export declare const runPullRequestRelayReview: (client: ReadClient.CodeCommitRe
109
164
  readonly id: string;
110
165
  readonly name: string;
111
166
  readonly kind: "explain" | "review" | "security" | "tests";
112
- readonly provider: "codex";
113
- readonly harness: "native-codex";
114
- readonly model: "configured-default" | "gpt-5.6-luna" | "gpt-5.6-sol" | "gpt-5.6-terra";
167
+ readonly provider: "claude" | "codex";
168
+ readonly harness: "native-claude" | "native-codex";
169
+ readonly model: "configured-default" | "default" | "gpt-5.6-luna" | "gpt-5.6-sol" | "gpt-5.6-terra";
115
170
  readonly skillIds: readonly string[];
116
171
  };
117
172
  readonly result: {
@@ -140,7 +195,7 @@ export declare const runPullRequestRelayReview: (client: ReadClient.CodeCommitRe
140
195
  readonly explanation?: string | undefined;
141
196
  };
142
197
  }, PullRequestReviewError, ChildProcessSpawner.ChildProcessSpawner | FileSystem.FileSystem>;
143
- export declare const relayConversationOutputSchema: (kind: RelayReviewKind) => Schema.Top;
198
+ export declare const relayConversationOutputSchema: (kind: RelayReviewKind) => typeof RelayExplainConversationResult | typeof RelayReviewConversationResult;
144
199
  /** Decode a conversation against the selected review kind without changing its wire shape. */
145
200
  export declare const parseRelayConversationResult: (message: string, kind: RelayReviewKind) => Option.Option<{
146
201
  readonly reply: string;
@@ -175,9 +230,9 @@ export declare const continuePullRequestRelayReview: (client: ReadClient.CodeCom
175
230
  readonly id: string;
176
231
  readonly name: string;
177
232
  readonly kind: "explain" | "review" | "security" | "tests";
178
- readonly provider: "codex";
179
- readonly harness: "native-codex";
180
- readonly model: "configured-default" | "gpt-5.6-luna" | "gpt-5.6-sol" | "gpt-5.6-terra";
233
+ readonly provider: "claude" | "codex";
234
+ readonly harness: "native-claude" | "native-codex";
235
+ readonly model: "configured-default" | "default" | "gpt-5.6-luna" | "gpt-5.6-sol" | "gpt-5.6-terra";
181
236
  readonly skillIds: readonly string[];
182
237
  }, currentReview: {
183
238
  readonly findings: readonly {
@@ -219,9 +274,9 @@ export declare const continuePullRequestRelayReview: (client: ReadClient.CodeCom
219
274
  readonly id: string;
220
275
  readonly name: string;
221
276
  readonly kind: "explain" | "review" | "security" | "tests";
222
- readonly provider: "codex";
223
- readonly harness: "native-codex";
224
- readonly model: "configured-default" | "gpt-5.6-luna" | "gpt-5.6-sol" | "gpt-5.6-terra";
277
+ readonly provider: "claude" | "codex";
278
+ readonly harness: "native-claude" | "native-codex";
279
+ readonly model: "configured-default" | "default" | "gpt-5.6-luna" | "gpt-5.6-sol" | "gpt-5.6-terra";
225
280
  readonly skillIds: readonly string[];
226
281
  };
227
282
  result: {
@@ -275,9 +330,9 @@ export declare const streamPullRequestRelayReview: (client: ReadClient.CodeCommi
275
330
  readonly id: string;
276
331
  readonly name: string;
277
332
  readonly kind: "explain" | "review" | "security" | "tests";
278
- readonly provider: "codex";
279
- readonly harness: "native-codex";
280
- readonly model: "configured-default" | "gpt-5.6-luna" | "gpt-5.6-sol" | "gpt-5.6-terra";
333
+ readonly provider: "claude" | "codex";
334
+ readonly harness: "native-claude" | "native-codex";
335
+ readonly model: "configured-default" | "default" | "gpt-5.6-luna" | "gpt-5.6-sol" | "gpt-5.6-terra";
281
336
  readonly skillIds: readonly string[];
282
337
  };
283
338
  readonly result: {
@@ -329,9 +384,9 @@ export declare const streamPullRequestRelayConversation: (client: ReadClient.Cod
329
384
  readonly id: string;
330
385
  readonly name: string;
331
386
  readonly kind: "explain" | "review" | "security" | "tests";
332
- readonly provider: "codex";
333
- readonly harness: "native-codex";
334
- readonly model: "configured-default" | "gpt-5.6-luna" | "gpt-5.6-sol" | "gpt-5.6-terra";
387
+ readonly provider: "claude" | "codex";
388
+ readonly harness: "native-claude" | "native-codex";
389
+ readonly model: "configured-default" | "default" | "gpt-5.6-luna" | "gpt-5.6-sol" | "gpt-5.6-terra";
335
390
  readonly skillIds: readonly string[];
336
391
  };
337
392
  readonly result: {
@@ -1 +1 @@
1
- {"version":3,"file":"PullRequestReview.d.ts","sourceRoot":"","sources":["../../../src/server/review/PullRequestReview.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,MAAM,kCAAkC,CAAA;AAC/D,OAAO,KAAK,KAAK,UAAU,MAAM,sCAAsC,CAAA;AAEvE,OAAO,EAAE,mBAAmB,EAAc,MAAM,MAAM,CAAA;AACtD,OAAO,EAAS,KAAK,EAAQ,MAAM,EAAQ,MAAM,EAAoB,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACnG,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,KAAK,SAAS,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,KAAK,mBAAmB,MAAM,6CAA6C,CAAA;AAEvF,OAAO,EAGL,KAAK,8BAA8B,EAGnC,KAAK,2BAA2B,EAEhC,KAAK,eAAe,EAEpB,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,iBAAiB,EACjB,KAAK,sBAAsB,EAC5B,MAAM,WAAW,CAAA;AAClB,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAA;;;;;;AAe9E,qBAAa,sBAAuB,SAAQ,2BAO3C;CAAG;AAEJ,UAAU,gBAAgB;IACxB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,qBAAqB,CAAA;IAClD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAA;IACxC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,6BAA6B,CAAA;CAC5D;AAED,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAWD,yEAAyE;AACzE,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,GAAG,EAAE,CACZ,OAAO,EAAE,UAAU,CAAC,qBAAqB,EACzC,QAAQ,EAAE,UAAU,CAAC,6BAA6B,KAC/C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,sBAAsB,CAAC,CAAA;CAC5F;AAaD,UAAU,gBAAgB;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACzC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CACzC;AAED,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAA;CAClD;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAA;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,MAAM,2BAA2B,GAAG,CAAC,QAAQ,EAAE,mBAAmB,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AAsEhG,8DAA8D;AAC9D,eAAO,MAAM,iCAAiC;;;;;gBAwB5C,CAAA;AA6CF,wFAAwF;AACxF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;iCAc9B,CAAA;AA4CF,mFAAmF;AACnF,eAAO,MAAM,0BAA0B;;;;;;iCAwBrC,CAAA;AAsLF,sGAAsG;AACtG,eAAO,MAAM,yBAAyB,yPA0CpC,CAAA;AAEF,wEAAwE;AACxE,eAAO,MAAM,iBAAiB,6OAO5B,CAAA;AAEF,uFAAuF;AACvF,eAAO,MAAM,0BAA0B,WAC7B,iBAAiB,YACf,kBAAkB,KAC3B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,sBAAsB,CAmB5C,CAAA;AAED,mFAAmF;AACnF,eAAO,MAAM,qBAAqB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,aAChC,SAAS,CAAC,SAAS,UACtB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,sBAAsB,EAAE,CAAC,CAU9C,CAAA;AAEH,qEAAqE;AACrE,eAAO,MAAM,2BAA2B,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,aACtC,SAAS,CAAC,SAAS,UACtB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,sBAAsB,EAAE,CAAC,CAgB9C,CAAA;AAgBH,wFAAwF;AACxF,eAAO,MAAM,qBAAqB,UACzB,gBAAgB,QACjB,eAAe,SACd,MAAM,gBACA,MAAM,KAClB,MAkCF,CAAA;AAiBD,gFAAgF;AAChF,eAAO,MAAM,uBAAuB,SAAU,eAAe,KAAG,MAAM,CAAC,GACJ,CAAA;AAEnE,eAAO,MAAM,sBAAsB,YACxB,MAAM,QACT,eAAe,KACpB,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAOjC,CAAA;AAED,iFAAiF;AACjF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2FAwFpC,CAAA;AAYF,eAAO,MAAM,6BAA6B,SAAU,eAAe,KAAG,MAAM,CAAC,GACQ,CAAA;AAUrF,8FAA8F;AAC9F,eAAO,MAAM,4BAA4B,YAAa,MAAM,QAAQ,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;EAOlF,CAAA;AAED,eAAO,MAAM,2BAA2B,UAC/B,gBAAgB,QACjB,eAAe,SACd,MAAM,eACA,MAAM,iBACJ,OAAO,iBAAiB,CAAC,IAAI,SACrC,aAAa,CAAC,2BAA2B,CAAC,aACtC,MAAM,WACR,MAAM,KACd,MAgCF,CAAA;AAED,sGAAsG;AACtG,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2FA8FzC,CAAA;AAQF,8EAA8E;AAC9E,eAAO,MAAM,2BAA2B,GAAI,CAAC,EAAE,CAAC,OACzC,CAAC,MAAM,EAAE,2BAA2B,KAAK,MAAM,CAAC,MAAM,CACzD;IAAE,QAAQ,CAAC,MAAM,EAAE,8BAA8B,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5E,CAAC,EACD,CAAC,CACF,KACA,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,KAAK,EAAE,CAAC,CAqB5C,CAAA;AAEL,+DAA+D;AAC/D,eAAO,MAAM,4BAA4B,WAC/B,UAAU,CAAC,2BAA2B,eACjC,MAAM,CAAC,WAAW,oBACb,sBAAsB,WAC/B,kBAAkB,gBACb,6BAA6B,GAAG,SAAS,eAC1C,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0EAYlB,CAAA;AAEH,gFAAgF;AAChF,eAAO,MAAM,kCAAkC,WACrC,UAAU,CAAC,2BAA2B,eACjC,MAAM,CAAC,WAAW,oBACb,sBAAsB,WAC/B,kBAAkB,iBACZ,OAAO,iBAAiB,CAAC,IAAI,SACrC,aAAa,CAAC,2BAA2B,CAAC,aACtC,MAAM,WACR,MAAM,gBACD,6BAA6B,GAAG,SAAS,eAC1C,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0EAgBlB,CAAA;AA8CH,kGAAkG;AAClG,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;yCA4CtC,CAAA"}
1
+ {"version":3,"file":"PullRequestReview.d.ts","sourceRoot":"","sources":["../../../src/server/review/PullRequestReview.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,21 @@
1
1
  /** Immutable CodeCommit diff reads and prompt-only Relay execution for the web review workbench. @module */
2
+ import { model as claudeModel } from "@knpkv/ai-claude";
2
3
  import { streamEvents } from "@knpkv/ai-codex";
3
4
  import * as ReviewClient from "@knpkv/codecommit-core/ReviewClient.js";
4
5
  import { createTwoFilesPatch, parsePatch } from "diff";
5
6
  import { Cache, Cause, Data, Effect, Exit, Option, Predicate, Queue, Schema, Stream } from "effect";
7
+ import { LanguageModel } from "effect/ai";
6
8
  import * as Crypto from "effect/Crypto";
7
9
  import * as FileSystem from "effect/FileSystem";
8
10
  import { RelayExplainResult, RelayNativeReviewResult, RelayReviewMessage, RelayReviewResult } from "../Api.js";
9
- import { MAXIMUM_RELAY_PATCH_BYTES, MAXIMUM_RELAY_PROMPT_BYTES } from "./ReviewPromptBudget.js";
11
+ import { MAXIMUM_RELAY_CLAUDE_OUTPUT_BYTES, MAXIMUM_RELAY_PATCH_BYTES, MAXIMUM_RELAY_PROMPT_BYTES, MAXIMUM_RELAY_REVIEW_MESSAGE_BYTES } from "./ReviewPromptBudget.js";
10
12
  const MAXIMUM_DIFF_FILES = 1_000;
11
13
  const MAXIMUM_RELAY_DIFF_INPUT_LINES = 5_000;
12
14
  const MAXIMUM_RELAY_DIFF_LINE_PAIRS = 4_000_000;
13
15
  const RELAY_PATCH_SEPARATOR = "\n";
14
16
  const textDecoder = new TextDecoder("utf-8", { fatal: true, ignoreBOM: true });
15
17
  const textEncoder = new TextEncoder();
16
- const withProfileModel = (profile, options) => profile.model === "configured-default" ? options : { ...options, model: profile.model };
18
+ const withProfileModel = (profile, options) => profile.model === "configured-default" || profile.model === "default" ? options : { ...options, model: profile.model };
17
19
  export class PullRequestReviewError extends Schema.TaggedError()("PullRequestReviewError", {
18
20
  operation: Schema.String,
19
21
  message: Schema.String,
@@ -438,6 +440,14 @@ const CodexProgressEvent = Schema.fromJsonString(Schema.Struct({
438
440
  const decodeCodexProgress = Schema.decodeUnknownOption(CodexProgressEvent);
439
441
  const decodeRelayResult = Schema.decodeUnknownOption(Schema.fromJsonString(RelayReviewResult));
440
442
  const decodeRelayExplainResult = Schema.decodeUnknownOption(Schema.fromJsonString(RelayExplainResult));
443
+ const RelayReviewConversationResult = Schema.Struct({
444
+ reply: RelayReviewMessage,
445
+ review: RelayNativeReviewResult
446
+ });
447
+ const RelayExplainConversationResult = Schema.Struct({
448
+ reply: RelayReviewMessage,
449
+ review: RelayExplainResult
450
+ });
441
451
  /** Exact native output contract selected before the provider process starts. */
442
452
  export const relayReviewOutputSchema = (kind) => kind === "explain" ? RelayExplainResult : RelayNativeReviewResult;
443
453
  export const parseRelayReviewResult = (message, kind) => {
@@ -446,6 +456,49 @@ export const parseRelayReviewResult = (message, kind) => {
446
456
  const decode = kind === "explain" ? decodeRelayExplainResult : decodeRelayResult;
447
457
  return decode(trimmed).pipe(Option.orElse(() => fenced === undefined ? Option.none() : decode(fenced)));
448
458
  };
459
+ const encodeClaudeAgentMessage = (value) => Effect.try({
460
+ try: () => JSON.stringify(value),
461
+ catch: (cause) => reviewError("relay-review-encode", "Claude returned an unencodable structured result", cause)
462
+ }).pipe(Effect.flatMap((encoded) => encoded === undefined
463
+ ? Effect.fail(reviewError("relay-review-encode", "Claude returned no structured review result"))
464
+ : Effect.succeed(encoded)));
465
+ const claudeAgentMessage = (profile, request) => LanguageModel.generateObject({
466
+ objectName: "relay-review",
467
+ prompt: request.prompt,
468
+ schema: request.outputSchema
469
+ }).pipe(
470
+ // Dynamic per-review model layer: the application supplies ChildProcessSpawner at its entry point.
471
+ // @effect-diagnostics-next-line strictEffectProvide:off
472
+ Effect.provide(claudeModel({
473
+ access: "prompt-only",
474
+ cwd: request.cwd,
475
+ ...((profile.model !== "configured-default") && { model: profile.model }),
476
+ timeout: request.timeout,
477
+ maxOutputBytes: MAXIMUM_RELAY_CLAUDE_OUTPUT_BYTES,
478
+ maxStderrBytes: MAXIMUM_RELAY_REVIEW_MESSAGE_BYTES
479
+ })), Effect.map((response) => response.value), Effect.flatMap(encodeClaudeAgentMessage), Effect.mapError((cause) => Predicate.isTagged(cause, "PullRequestReviewError")
480
+ ? cause
481
+ : reviewError("relay-review", "Claude review execution failed", cause)));
482
+ const streamRelayAgent = (profile, request) => {
483
+ if (profile.provider === "codex" && profile.harness === "native-codex") {
484
+ return streamEvents(withProfileModel(profile, {
485
+ access: "read-only",
486
+ cwd: request.cwd,
487
+ maxPromptBytes: request.maxPromptBytes,
488
+ outputSchema: request.outputSchema,
489
+ prompt: request.prompt,
490
+ promptOnly: true,
491
+ timeout: request.timeout
492
+ })).pipe(Stream.mapError((cause) => reviewError("relay-review", "Codex review execution failed", cause)));
493
+ }
494
+ if (profile.provider === "claude" && profile.harness === "native-claude") {
495
+ return Stream.fromEffect(claudeAgentMessage(profile, request).pipe(Effect.map((message) => JSON.stringify({
496
+ type: "item.completed",
497
+ item: { type: "agent_message", text: message }
498
+ }))));
499
+ }
500
+ return Stream.fail(reviewError("relay-review-config", `Unsupported Relay reviewer configuration: ${profile.provider}/${profile.harness}/${profile.model}`));
501
+ };
449
502
  /** Execute one ephemeral, read-only Relay pass over the exact provider patch. */
450
503
  export const runPullRequestRelayReview = Effect.fn("PullRequestReview.runPullRequestRelayReview")(function* (client, pullRequest, expectedRevision, profile, changedFiles, skillPrompt = "", reportProgress = noProgress) {
451
504
  const kind = profile.kind;
@@ -467,15 +520,14 @@ export const runPullRequestRelayReview = Effect.fn("PullRequestReview.runPullReq
467
520
  const fileSystem = yield* FileSystem.FileSystem;
468
521
  const workspace = yield* fileSystem.makeTempDirectoryScoped({ prefix: "codecommit-web-relay-" });
469
522
  yield* reportProgress({ phase: "agent", message: "Relay is reviewing the exact patch" });
470
- const message = yield* streamEvents(withProfileModel(profile, {
471
- access: "read-only",
523
+ const message = yield* streamRelayAgent(profile, {
472
524
  cwd: workspace,
525
+ kind,
473
526
  maxPromptBytes: MAXIMUM_RELAY_PROMPT_BYTES,
474
527
  outputSchema: relayReviewOutputSchema(kind),
475
528
  prompt,
476
- promptOnly: true,
477
529
  timeout: "5 minutes"
478
- })).pipe(Stream.tap((line) => {
530
+ }).pipe(Stream.tap((line) => {
479
531
  const event = decodeCodexProgress(line);
480
532
  if (Option.isNone(event))
481
533
  return Effect.void;
@@ -509,14 +561,6 @@ export const runPullRequestRelayReview = Effect.fn("PullRequestReview.runPullReq
509
561
  ? cause
510
562
  : reviewError("relay-review", "Relay review execution failed", cause)));
511
563
  });
512
- const RelayReviewConversationResult = Schema.Struct({
513
- reply: RelayReviewMessage,
514
- review: RelayNativeReviewResult
515
- });
516
- const RelayExplainConversationResult = Schema.Struct({
517
- reply: RelayReviewMessage,
518
- review: RelayExplainResult
519
- });
520
564
  export const relayConversationOutputSchema = (kind) => kind === "explain" ? RelayExplainConversationResult : RelayReviewConversationResult;
521
565
  const decodeRelayReviewConversationResult = Schema.decodeUnknownOption(Schema.fromJsonString(RelayReviewConversationResult));
522
566
  const decodeRelayExplainConversationResult = Schema.decodeUnknownOption(Schema.fromJsonString(RelayExplainConversationResult));
@@ -577,15 +621,14 @@ export const continuePullRequestRelayReview = Effect.fn("PullRequestReview.conti
577
621
  const fileSystem = yield* FileSystem.FileSystem;
578
622
  const workspace = yield* fileSystem.makeTempDirectoryScoped({ prefix: "codecommit-web-relay-" });
579
623
  yield* reportProgress({ phase: "agent", message: "Relay is reconciling the finding deck" });
580
- const response = yield* streamEvents(withProfileModel(profile, {
581
- access: "read-only",
624
+ const response = yield* streamRelayAgent(profile, {
582
625
  cwd: workspace,
626
+ kind,
583
627
  maxPromptBytes: MAXIMUM_RELAY_PROMPT_BYTES,
584
628
  outputSchema: relayConversationOutputSchema(kind),
585
629
  prompt,
586
- promptOnly: true,
587
630
  timeout: "5 minutes"
588
- })).pipe(Stream.tap((line) => {
631
+ }).pipe(Stream.tap((line) => {
589
632
  const event = decodeCodexProgress(line);
590
633
  return Option.isSome(event) && event.value.type === "item.completed" && event.value.item?.type === "reasoning"
591
634
  ? reportProgress({ phase: "agent", message: "Reconciliation step completed" })