@hcrosse/opencode-pr-tracker 0.4.2 → 0.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/server.ts", "../src/adapters/github/Client.ts", "../src/ports/GitHub.ts", "../src/domain/Snapshot.ts", "../src/domain/PullRequest.ts", "../src/adapters/Command.ts", "../src/adapters/github/Query.ts", "../src/adapters/github/Repository.ts", "../src/adapters/github/Response.ts", "../src/domain/Checks.ts", "../src/adapters/github/Token.ts", "../src/adapters/Storage.ts", "../src/domain/Tracking.ts", "../src/ports/TrackingRepository.ts", "../src/application/Monitor.ts", "../src/application/FetchQueue.ts", "../src/application/Known.ts", "../src/domain/RefreshPolicy.ts", "../src/application/Time.ts", "../src/application/Tracker.ts", "../src/application/SessionLocks.ts", "../src/rpc.ts", "../src/domain/StackLayout.ts", "../src/server/Requests.ts", "../src/messages.ts", "../src/server/Rpc.ts", "../src/server/Tools.ts", "../src/domain/Appearance.ts"],
3
+ "sources": ["../src/server.ts", "../src/adapters/github/Client.ts", "../src/ports/GitHub.ts", "../src/domain/Snapshot.ts", "../src/domain/PullRequest.ts", "../src/adapters/Command.ts", "../src/adapters/github/Query.ts", "../src/adapters/github/Repository.ts", "../src/adapters/github/Response.ts", "../src/domain/Checks.ts", "../src/adapters/github/Token.ts", "../src/adapters/Storage.ts", "../src/domain/Tracking.ts", "../src/ports/TrackingRepository.ts", "../src/application/Monitor.ts", "../src/domain/StackLayout.ts", "../src/application/FetchQueue.ts", "../src/application/Known.ts", "../src/domain/RefreshPolicy.ts", "../src/application/Time.ts", "../src/application/Tracker.ts", "../src/application/SessionLocks.ts", "../src/rpc.ts", "../src/server/Requests.ts", "../src/messages.ts", "../src/server/Rpc.ts", "../src/server/Tools.ts", "../src/domain/Appearance.ts"],
4
4
  "sourcesContent": [
5
5
  "import { Plugin } from \"@opencode/plugin/effect\"\nimport { Context, Effect, Layer, Option, Schedule, Schema, Stream } from \"effect\"\n\nimport { live as githubLive } from \"./adapters/github/Client.ts\"\nimport { layer as storageLayer } from \"./adapters/Storage.ts\"\nimport { Monitor, layer as monitorLayer } from \"./application/Monitor.ts\"\nimport { Tracker, layer as trackerLayer } from \"./application/Tracker.ts\"\nimport { Layout, PullRequestTracker } from \"./rpc.ts\"\nimport { toView, type Services, type Settings } from \"./server/Requests.ts\"\nimport { handlers } from \"./server/Rpc.ts\"\nimport { registerTools } from \"./server/Tools.ts\"\n\nconst pollInterval = \"1 second\"\n\nconst Options = Schema.Struct({ layout: Layout })\n\n/** The sidebar layout from the plugin options; anything but \"compact\" is the default. */\nconst layoutOf = (options: Plugin.Context[\"options\"]): Layout =>\n Option.match(Schema.decodeUnknownOption(Options)(options), {\n onNone: () => \"default\",\n onSome: ({ layout }) => layout,\n })\n\n/** Forgets a session everywhere once OpenCode deletes it. Every plugin instance sees the event. */\nconst forgetDeletedSessions = (ctx: Plugin.Context, services: Services): Effect.Effect<void> =>\n ctx.event.subscribe().pipe(\n Stream.runForEach((event) =>\n event.type === \"session.deleted\"\n ? Effect.andThen(\n services.tracker.forget(event.data.sessionID),\n services.monitor.forget(event.data.sessionID),\n )\n : Effect.void,\n ),\n Effect.ignore,\n )\n\nexport default Plugin.define({\n effect: (ctx) =>\n Effect.gen(function* () {\n const application = monitorLayer.pipe(\n Layer.provideMerge(trackerLayer),\n Layer.provide([githubLive, storageLayer(ctx.storage)]),\n )\n\n const context = yield* Layer.build(application)\n\n const services: Services = {\n monitor: Context.get(context, Monitor),\n tracker: Context.get(context, Tracker),\n }\n\n const settings: Settings = {\n directory: ctx.location.directory,\n layout: layoutOf(ctx.options),\n }\n\n const registration = yield* ctx.rpc\n .register(PullRequestTracker, handlers(services, settings))\n .pipe(Effect.orDie)\n\n yield* registerTools(ctx.tool, services, settings)\n yield* Effect.forkScoped(forgetDeletedSessions(ctx, services))\n yield* Effect.forkScoped(Effect.repeat(services.monitor.poll, Schedule.spaced(pollInterval)))\n yield* services.monitor.changes.pipe(\n Stream.runForEach((view) =>\n registration.events.emit(\"updated\", toView(view, settings.layout)).pipe(Effect.ignore),\n ),\n Effect.forkScoped,\n )\n }),\n id: \"opencode-pr-tracker\",\n})\n",
6
6
  "import { Array as Arr, Effect, Layer, Option, Redacted, Result, Schema } from \"effect\"\nimport { FetchHttpClient, HttpClient, HttpClientRequest } from \"effect/unstable/http\"\n\nimport type { PullRequestRef } from \"../../domain/PullRequest.ts\"\nimport type { Diagnostic } from \"../../domain/Snapshot.ts\"\nimport { GitHub, GitHubFailure, maximumBatch, type ItemResult } from \"../../ports/GitHub.ts\"\nimport { CommandRunner, layer as commandLayer } from \"../Command.ts\"\nimport { alias, batch, continuation } from \"./Query.ts\"\nimport { resolveInRepository } from \"./Repository.ts\"\nimport {\n combined,\n Contexts,\n PullRequestNode,\n toReport,\n type BatchOutcome,\n type ContextNode,\n type Entry,\n} from \"./Response.ts\"\nimport { Token, layer as tokenLayer } from \"./Token.ts\"\n\nconst endpoint = \"https://api.github.com/graphql\"\n\nconst GraphQlError = Schema.Struct({\n path: Schema.optional(Schema.Array(Schema.Union([Schema.String, Schema.Number]))),\n type: Schema.optional(Schema.String),\n})\n\nconst Envelope = Schema.Struct({\n data: Schema.optional(Schema.NullOr(Schema.Record(Schema.String, Schema.Unknown))),\n errors: Schema.optional(Schema.Array(GraphQlError)),\n})\n\ntype Envelope = typeof Envelope.Type\n\nconst ContinuationData = Schema.Struct({\n resource: Schema.Struct({ statusCheckRollup: Schema.Struct({ contexts: Contexts }) }),\n})\n\nconst failure = (diagnostic: Diagnostic): GitHubFailure => new GitHubFailure({ diagnostic })\n\n/** A 401 from GitHub: the cached token may be stale. */\nclass Unauthorized extends Schema.TaggedError<Unauthorized>()(\"Unauthorized\", {}) {}\n\nconst failed = (diagnostic: Diagnostic): ItemResult => ({ _tag: \"Failed\", diagnostic })\n\nconst decodeEnvelope = Schema.decodeUnknownEffect(Envelope)\n\ntype Variables = Readonly<Record<string, string>>\n\n/** Posts one GraphQL document and decodes GitHub's response envelope. */\ntype Post = (query: string, variables: Variables) => Effect.Effect<Envelope, GitHubFailure>\n\n/** Posts one GraphQL document. A 401 refreshes the token and retries once. */\nconst makePost = Effect.fn(\"makePost\")(function* (): Effect.fn.Return<\n Post,\n never,\n HttpClient.HttpClient | Token\n> {\n const http = yield* HttpClient.HttpClient\n const token = yield* Token\n\n const attempt = Effect.fn(\"attempt\")(function* (query: string, variables: Variables) {\n const bearer = yield* token.get\n\n const request = HttpClientRequest.post(endpoint).pipe(\n HttpClientRequest.bearerToken(Redacted.value(bearer)),\n HttpClientRequest.bodyJsonUnsafe({ query, variables }),\n )\n\n const response = yield* http\n .execute(request)\n .pipe(Effect.mapError(() => failure(\"GitHubUnavailable\")))\n\n if (response.status === 401) return yield* new Unauthorized()\n\n if (response.status < 200 || response.status >= 300) return yield* failure(\"GitHubUnavailable\")\n\n const body = yield* response.json.pipe(Effect.mapError(() => failure(\"InvalidResponse\")))\n\n return yield* decodeEnvelope(body).pipe(Effect.mapError(() => failure(\"InvalidResponse\")))\n })\n\n return (query: string, variables: Variables): Effect.Effect<Envelope, GitHubFailure> =>\n attempt(query, variables).pipe(\n Effect.catchTag(\"Unauthorized\", () =>\n Effect.andThen(token.invalidate, attempt(query, variables)),\n ),\n Effect.catchTag(\"Unauthorized\", () => Effect.fail(failure(\"AuthenticationRequired\"))),\n )\n})\n\n/** Every check context for a pull request, following continuation pages. */\nconst allContexts = Effect.fn(\"allContexts\")(function* (post: Post, node: PullRequestNode) {\n const collected: ContextNode[] = []\n const followed = new Set<string>()\n let page = Option.map(Option.fromNullishOr(node.statusCheckRollup), (rollup) => rollup.contexts)\n\n while (Option.isSome(page)) {\n collected.push(...page.value.nodes)\n\n if (!page.value.pageInfo.hasNextPage) break\n\n // A claimed next page needs a new cursor, or CI would be judged on part or paging never end.\n const after = page.value.pageInfo.endCursor ?? \"\"\n\n if (after === \"\" || followed.has(after)) return yield* failure(\"InvalidResponse\")\n\n followed.add(after)\n\n const envelope = yield* post(continuation(), { cursor: after, url: node.url })\n\n if ((envelope.errors ?? []).length > 0) return yield* failure(\"InvalidResponse\")\n\n const data = yield* Schema.decodeUnknownEffect(ContinuationData)(envelope.data).pipe(\n Effect.mapError(() => failure(\"InvalidResponse\")),\n )\n\n page = Option.some(data.resource.statusCheckRollup.contexts)\n }\n\n return collected\n})\n\n/** GraphQL error types meaning the pull request does not exist or this token cannot see it. */\nconst inaccessible = new Set([\"NOT_FOUND\", \"FORBIDDEN\"])\n\n/** Errors for `key`, or naming no alias, fail it; only its own inaccessible errors mean missing. */\nfunction aliasFailure(request: Batch, key: string): Option.Option<Diagnostic> {\n const diagnostics = (request.envelope.errors ?? []).flatMap((error): Diagnostic[] => {\n const root = String((error.path ?? [])[0] ?? \"\")\n\n if (root === key) return [inaccessible.has(error.type ?? \"\") ? \"NotFound\" : \"InvalidResponse\"]\n\n return request.aliases.has(root) ? [] : [\"InvalidResponse\"]\n })\n\n if (diagnostics.length === 0) return Option.none()\n\n return Option.some(diagnostics.includes(\"InvalidResponse\") ? \"InvalidResponse\" : \"NotFound\")\n}\n\ninterface Batch {\n readonly post: Post\n readonly envelope: Envelope\n /** The aliases of this batch's pull requests. */\n readonly aliases: ReadonlySet<string>\n}\n\nconst itemResult = Effect.fn(\"itemResult\")(function* (\n request: Batch,\n ref: PullRequestRef,\n key: string,\n) {\n const { envelope, post } = request\n const reported = aliasFailure(request, key)\n const raw = Option.fromNullishOr((envelope.data ?? {})[key])\n\n if (Option.isSome(reported)) return failed(reported.value)\n\n if (Option.isNone(raw)) return failed(\"NotFound\")\n\n const node = Schema.decodeUnknownOption(PullRequestNode)(raw.value)\n\n if (Option.isNone(node)) return failed(\"InvalidResponse\")\n\n const contexts = yield* Effect.result(allContexts(post, node.value))\n\n if (Result.isFailure(contexts)) return failed(contexts.failure.diagnostic)\n\n return {\n _tag: \"Reported\",\n report: toReport(ref, node.value, contexts.success),\n } satisfies ItemResult\n})\n\nconst fetchBatch = Effect.fn(\"fetchBatch\")(function* (post: Post, refs: readonly PullRequestRef[]) {\n const variables = Object.fromEntries(refs.map((ref, index) => [alias(index), ref.url]))\n const envelope = yield* post(batch(refs.length), variables)\n\n // GitHub answers a request it could not run at all, such as a rate-limited one, without data.\n if (Option.isNone(Option.fromNullishOr(envelope.data))) return yield* failure(\"GitHubUnavailable\")\n\n const results = yield* Effect.forEach(\n refs,\n (ref, index) =>\n itemResult({ aliases: new Set(Object.keys(variables)), envelope, post }, ref, alias(index)),\n {\n concurrency: 4,\n },\n )\n\n return Arr.zip(\n refs.map((ref) => ref.url),\n results,\n )\n})\n\n/** A batch's results; when the whole batch failed, a failure for each of its pull requests. */\nconst outcomeOf = (post: Post, refs: readonly PullRequestRef[]): Effect.Effect<BatchOutcome> =>\n Effect.gen(function* () {\n const result = yield* Effect.result(fetchBatch(post, refs))\n\n if (Result.isSuccess(result)) return { entries: result.success, failure: Option.none() }\n\n const { diagnostic } = result.failure\n\n return {\n entries: refs.map((ref): Entry => [ref.url, { _tag: \"Failed\", diagnostic }]),\n failure: Option.some(diagnostic),\n }\n })\n\n/** The GitHub port over GraphQL. Requires an HTTP client, a token source, and `gh`. */\nexport const layer = Layer.effect(\n GitHub,\n Effect.gen(function* () {\n const post = yield* makePost()\n const runner = yield* CommandRunner\n\n return GitHub.of({\n fetch: (refs) => {\n const batches = Arr.chunksOf(\n Arr.dedupeWith(refs, (left, right) => left.url === right.url),\n maximumBatch,\n )\n\n return Effect.forEach(batches, (refsInBatch: readonly PullRequestRef[]) =>\n outcomeOf(post, refsInBatch),\n ).pipe(\n Effect.flatMap((outcomes: readonly BatchOutcome[]) =>\n Effect.fromResult(combined(outcomes)),\n ),\n Effect.mapError(failure),\n )\n },\n pullRequestInRepository: (directory, number) =>\n resolveInRepository(directory, number).pipe(Effect.provideService(CommandRunner, runner)),\n })\n }),\n)\n\n/** The GitHub port over `api.github.com`, with tokens from the environment or `gh`. */\nexport const live = layer.pipe(\n Layer.provide(tokenLayer),\n Layer.provide([commandLayer, FetchHttpClient.layer]),\n)\n",
@@ -14,24 +14,24 @@
14
14
  "import { Array as Arr, Option, Order } from \"effect\"\n\nimport type { Ci } from \"./Snapshot.ts\"\n\nexport type CheckOutcome = \"passed\" | \"pending\" | \"failed\" | \"ignored\"\n\n/**\n * One check run or status context. Checks with the same `identity` are runs of one check;\n * only those with the greatest `generation` count. A generation is compared element by element,\n * for example `[runNumber, runAttempt]` or `[createdAtSeconds, createdAtNanoseconds]`.\n */\nexport interface Check {\n readonly identity: string\n readonly generation: readonly number[]\n readonly outcome: CheckOutcome\n}\n\nconst generationOrder = Arr.makeOrder(Order.Number)\n\ninterface Latest {\n readonly generation: readonly number[]\n readonly outcomes: readonly CheckOutcome[]\n}\n\n/** The newest runs of one check after seeing `check`: a newer run replaces them, a tie joins them. */\nfunction withRun(current: Option.Option<Latest>, check: Check): Latest {\n const replacement: Latest = { generation: check.generation, outcomes: [check.outcome] }\n\n return Option.match(current, {\n onNone: () => replacement,\n onSome: (existing: Latest): Latest => {\n const comparison = generationOrder(check.generation, existing.generation)\n\n if (comparison > 0) return replacement\n\n if (comparison < 0) return existing\n\n return { generation: existing.generation, outcomes: [...existing.outcomes, check.outcome] }\n },\n })\n}\n\nfunction latestOutcomes(checks: readonly Check[]): Set<CheckOutcome> {\n const latest = new Map<string, Latest>()\n\n for (const check of checks) {\n latest.set(check.identity, withRun(Option.fromNullishOr(latest.get(check.identity)), check))\n }\n\n return new Set([...latest.values()].flatMap((entry: Latest) => entry.outcomes))\n}\n\n/** Failed beats pending beats passed. Superseded runs are ignored; so are skipped or neutral runs. */\nexport function classifyCi(checks: readonly Check[]): Ci {\n const outcomes = latestOutcomes(checks)\n\n if (outcomes.has(\"failed\")) return \"failed\"\n\n if (outcomes.has(\"pending\")) return \"pending\"\n\n if (outcomes.has(\"passed\")) return \"passed\"\n\n return \"none\"\n}\n",
15
15
  "import { Config, Context, Effect, Layer, Option, Redacted, Ref } from \"effect\"\n\nimport { GitHubFailure } from \"../../ports/GitHub.ts\"\nimport { CommandRunner } from \"../Command.ts\"\n\nexport interface TokenApi {\n /** The GitHub token, from `GH_TOKEN`, `GITHUB_TOKEN`, or `gh auth token`, cached after first use. */\n readonly get: Effect.Effect<Redacted.Redacted, GitHubFailure>\n /** Forgets the cached token, so the next `get` reads it again. */\n readonly invalidate: Effect.Effect<void>\n}\n\nexport class Token extends Context.Service<Token, TokenApi>()(\"opencode-pr-tracker/Token\") {}\n\n/** `GH_TOKEN`, then `GITHUB_TOKEN`, as `gh` itself reads them. Empty values count as unset. */\nconst variable = (name: string): Config.Config<Option.Option<Redacted.Redacted>> =>\n Config.option(Config.redacted(name)).pipe(\n Config.map(Option.filter((token) => Redacted.value(token).trim() !== \"\")),\n )\n\nconst environmentToken = Config.all([variable(\"GH_TOKEN\"), variable(\"GITHUB_TOKEN\")]).pipe(\n Config.map(\n ([ghToken, githubToken]: readonly [\n Option.Option<Redacted.Redacted>,\n Option.Option<Redacted.Redacted>,\n ]) => Option.orElse(ghToken, () => githubToken),\n ),\n)\n\nexport const layer = Layer.effect(\n Token,\n Effect.gen(function* () {\n const runner = yield* CommandRunner\n const cached = yield* Ref.make(Option.none<Redacted.Redacted>())\n\n const fromGh = runner.run(\"gh\", [\"auth\", \"token\"], process.cwd()).pipe(\n Effect.map((output) => output.trim()),\n Effect.filterOrFail(\n (token) => token !== \"\",\n () => new GitHubFailure({ diagnostic: \"AuthenticationRequired\" }),\n ),\n Effect.catchTags({\n CommandFailed: () =>\n Effect.fail(new GitHubFailure({ diagnostic: \"AuthenticationRequired\" })),\n CommandMissing: () => Effect.fail(new GitHubFailure({ diagnostic: \"GitHubCliMissing\" })),\n }),\n )\n\n // Read once: the environment does not change while the plugin runs.\n const fromEnvironment = yield* environmentToken.pipe(\n Effect.orElseSucceed(() => Option.none<Redacted.Redacted>()),\n )\n\n const load = Option.match(fromEnvironment, {\n onNone: () => Effect.map(fromGh, Redacted.make),\n onSome: Effect.succeed,\n }).pipe(Effect.tap((token) => Ref.set(cached, Option.some(token))))\n\n return Token.of({\n get: Ref.get(cached).pipe(\n Effect.flatMap(Option.match({ onNone: () => load, onSome: Effect.succeed })),\n ),\n invalidate: Ref.set(cached, Option.none()),\n })\n }),\n)\n",
16
16
  "import type { StorageDomain } from \"@opencode/plugin/effect/storage\"\nimport { Array as Arr, Effect, Layer, Option, Result, Schema } from \"effect\"\n\nimport { parsePullRequestUrl } from \"../domain/PullRequest.ts\"\nimport { Attachment, maximumAttachments, type Tracking } from \"../domain/Tracking.ts\"\nimport { StoredStateInvalid, TrackingRepository } from \"../ports/TrackingRepository.ts\"\n\n/** The stored form of a session's attachments. Bump `version` for incompatible changes. */\nconst Stored = Schema.Struct({\n pullRequests: Schema.Array(Schema.Struct({ attachedAt: Schema.Int, url: Schema.String })).check(\n Schema.isMaxLength(maximumAttachments),\n ),\n version: Schema.Literal(1),\n})\n\ntype Stored = typeof Stored.Type\n\nconst keyOf = (sessionID: string): string => `session/${sessionID}`\n\nfunction toTracking(stored: Stored): Option.Option<Tracking> {\n const attachments = stored.pullRequests.map((entry) =>\n Result.map(\n parsePullRequestUrl(entry.url),\n (ref) => new Attachment({ attachedAt: entry.attachedAt, ref }),\n ),\n )\n\n const valid = attachments.flatMap((attachment) => Option.toArray(Result.getSuccess(attachment)))\n const unique = Arr.dedupeWith(valid, (left, right) => left.ref.url === right.ref.url)\n\n return unique.length === stored.pullRequests.length ? Option.some(unique) : Option.none()\n}\n\nfunction toStored(tracking: Tracking): Stored {\n return {\n pullRequests: tracking.map((attachment) => ({\n attachedAt: attachment.attachedAt,\n url: attachment.ref.url,\n })),\n version: 1,\n }\n}\n\n/** Attachments kept in plugin storage, one key per session. */\nexport function layer(storage: StorageDomain): Layer.Layer<TrackingRepository> {\n return Layer.succeed(\n TrackingRepository,\n TrackingRepository.of({\n load: (sessionID) =>\n storage.get(keyOf(sessionID)).pipe(\n Effect.flatMap((value) =>\n Option.match(Option.fromNullishOr(value), {\n onNone: () => Effect.succeed<Tracking>([]),\n onSome: (json) =>\n Schema.decodeUnknownOption(Stored)(json).pipe(\n Option.flatMap(toTracking),\n Option.match({\n onNone: () => Effect.fail(new StoredStateInvalid({ sessionID })),\n onSome: (tracking) => Effect.succeed(tracking),\n }),\n ),\n }),\n ),\n ),\n remove: (sessionID) => storage.remove(keyOf(sessionID)),\n save: (sessionID, tracking) => storage.set(keyOf(sessionID), toStored(tracking)),\n }),\n )\n}\n",
17
- "import { Array as Arr, Option, Result, Schema } from \"effect\"\n\nimport { PullRequestRef, samePullRequest } from \"./PullRequest.ts\"\n\nexport const maximumAttachments = 20\n\nexport class Attachment extends Schema.Class<Attachment>(\"Attachment\")({\n attachedAt: Schema.Int,\n ref: PullRequestRef,\n}) {}\n\n/** The pull requests attached to one session, in display order. */\nexport type Tracking = readonly Attachment[]\n\nexport class AttachmentLimitReached extends Schema.TaggedError<AttachmentLimitReached>()(\n \"AttachmentLimitReached\",\n { limit: Schema.Int, requested: Schema.Int },\n) {}\n\nexport class AmbiguousPullRequestNumber extends Schema.TaggedError<AmbiguousPullRequestNumber>()(\n \"AmbiguousPullRequestNumber\",\n { matches: Schema.Array(PullRequestRef), number: Schema.Int },\n) {}\n\nexport interface Change {\n readonly tracking: Tracking\n readonly changed: boolean\n}\n\nexport interface Removal {\n readonly tracking: Tracking\n readonly removed: Option.Option<PullRequestRef>\n}\n\nfunction isMember(stack: readonly PullRequestRef[], attachment: Attachment): boolean {\n return stack.some((ref) => samePullRequest(ref, attachment.ref))\n}\n\n/**\n * Attaches every member of a stack, bottom to top. A single pull request is a stack of one.\n * Members are placed together where the earliest of them was already attached, or at the end.\n */\nexport function attach(\n tracking: Tracking,\n stack: Arr.NonEmptyReadonlyArray<PullRequestRef>,\n now: number,\n): Result.Result<Change, AttachmentLimitReached> {\n const members = Arr.dedupeWith(stack, samePullRequest)\n const others = tracking.filter((attachment) => !isMember(members, attachment))\n const requested = others.length + members.length\n\n if (requested > maximumAttachments) {\n return Result.fail(new AttachmentLimitReached({ limit: maximumAttachments, requested }))\n }\n\n const position = tracking.findIndex((attachment) => isMember(members, attachment))\n const insertAt = position === -1 ? others.length : position\n\n const placed = members.map((ref) =>\n Option.getOrElse(\n Arr.findFirst(tracking, (attachment) => samePullRequest(attachment.ref, ref)),\n () => new Attachment({ attachedAt: now, ref }),\n ),\n )\n\n const next = [...others.slice(0, insertAt), ...placed, ...others.slice(insertAt)]\n\n // Existing attachments are reused as they are, so any change shows as a different element.\n const changed =\n next.length !== tracking.length ||\n next.some((attachment, index) => attachment !== tracking[index])\n\n return Result.succeed({ changed, tracking: next })\n}\n\nexport function detach(tracking: Tracking, ref: PullRequestRef): Removal {\n const next = tracking.filter((attachment) => !samePullRequest(attachment.ref, ref))\n const removed = next.length === tracking.length ? Option.none() : Option.some(ref)\n\n return { removed, tracking: next }\n}\n\n/** Detaches the only attachment with `number`. Several matches are ambiguous. */\nexport function detachNumber(\n tracking: Tracking,\n number: number,\n): Result.Result<Removal, AmbiguousPullRequestNumber> {\n const matches = tracking.filter((attachment) => attachment.ref.number === number)\n\n if (matches.length > 1) {\n const refs = matches.map((attachment) => attachment.ref)\n\n return Result.fail(new AmbiguousPullRequestNumber({ matches: refs, number }))\n }\n\n return Result.succeed(\n Option.match(Arr.head(matches), {\n onNone: () => ({ removed: Option.none(), tracking }),\n onSome: (attachment) => detach(tracking, attachment.ref),\n }),\n )\n}\n",
17
+ "import { Array as Arr, Option, Result, Schema } from \"effect\"\n\nimport { PullRequestRef, samePullRequest } from \"./PullRequest.ts\"\n\nexport const maximumAttachments = 20\n\nexport class Attachment extends Schema.Class<Attachment>(\"Attachment\")({\n attachedAt: Schema.Int,\n ref: PullRequestRef,\n}) {}\n\n/** The pull requests attached to one session, in display order. */\nexport type Tracking = readonly Attachment[]\n\nexport class AttachmentLimitReached extends Schema.TaggedError<AttachmentLimitReached>()(\n \"AttachmentLimitReached\",\n { limit: Schema.Int, requested: Schema.Int },\n) {}\n\nexport class AmbiguousPullRequestNumber extends Schema.TaggedError<AmbiguousPullRequestNumber>()(\n \"AmbiguousPullRequestNumber\",\n { matches: Schema.Array(PullRequestRef), number: Schema.Int },\n) {}\n\nexport interface Change {\n readonly tracking: Tracking\n readonly changed: boolean\n}\n\nexport interface Removal {\n readonly tracking: Tracking\n readonly removed: Option.Option<PullRequestRef>\n}\n\nfunction isMember(stack: readonly PullRequestRef[], attachment: Attachment): boolean {\n return stack.some((ref) => samePullRequest(ref, attachment.ref))\n}\n\n// Attachments are reused as they are, so any change shows as a different element.\nconst differs = (before: Tracking, after: Tracking): boolean =>\n after.length !== before.length || after.some((attachment, index) => attachment !== before[index])\n\nfunction groupOne(tracking: Tracking, stack: readonly PullRequestRef[]): Tracking {\n const members = Arr.dedupeWith(stack, samePullRequest)\n // Every attachment before the earliest member is not a member, so this is also its place among the others.\n const insertAt = tracking.findIndex((attachment) => isMember(members, attachment))\n\n if (insertAt === -1) return tracking\n\n const others = tracking.filter((attachment) => !isMember(members, attachment))\n\n const placed = members.flatMap((ref) =>\n Option.toArray(Arr.findFirst(tracking, (attachment) => samePullRequest(attachment.ref, ref))),\n )\n\n return [...others.slice(0, insertAt), ...placed, ...others.slice(insertAt)]\n}\n\n/**\n * Brings each stack's attached members together, bottom to top, where the earliest of them is\n * attached. Other attachments keep their order. Nothing is attached or detached. A stack sharing a\n * member with an earlier one is skipped, since both cannot hold together; this keeps grouping\n * idempotent.\n */\nexport function group(tracking: Tracking, stacks: readonly (readonly PullRequestRef[])[]): Change {\n const grouped = new Set<string>()\n let next = tracking\n\n for (const stack of stacks) {\n if (stack.some((ref) => grouped.has(ref.url))) continue\n\n for (const ref of stack) grouped.add(ref.url)\n\n next = groupOne(next, stack)\n }\n\n return { changed: differs(tracking, next), tracking: next }\n}\n\n/**\n * Attaches every member of a stack, bottom to top. A single pull request is a stack of one.\n * Members are placed together where the earliest of them was already attached, or at the end.\n */\nexport function attach(\n tracking: Tracking,\n stack: Arr.NonEmptyReadonlyArray<PullRequestRef>,\n now: number,\n): Result.Result<Change, AttachmentLimitReached> {\n const members = Arr.dedupeWith(stack, samePullRequest)\n\n const missing = members.filter(\n (ref) => !tracking.some((attachment) => samePullRequest(attachment.ref, ref)),\n )\n\n const requested = tracking.length + missing.length\n\n if (requested > maximumAttachments) {\n return Result.fail(new AttachmentLimitReached({ limit: maximumAttachments, requested }))\n }\n\n const appended = [...tracking, ...missing.map((ref) => new Attachment({ attachedAt: now, ref }))]\n const next = group(appended, [members]).tracking\n\n return Result.succeed({ changed: differs(tracking, next), tracking: next })\n}\n\nexport function detach(tracking: Tracking, ref: PullRequestRef): Removal {\n const next = tracking.filter((attachment) => !samePullRequest(attachment.ref, ref))\n const removed = next.length === tracking.length ? Option.none() : Option.some(ref)\n\n return { removed, tracking: next }\n}\n\n/** Detaches the only attachment with `number`. Several matches are ambiguous. */\nexport function detachNumber(\n tracking: Tracking,\n number: number,\n): Result.Result<Removal, AmbiguousPullRequestNumber> {\n const matches = tracking.filter((attachment) => attachment.ref.number === number)\n\n if (matches.length > 1) {\n const refs = matches.map((attachment) => attachment.ref)\n\n return Result.fail(new AmbiguousPullRequestNumber({ matches: refs, number }))\n }\n\n return Result.succeed(\n Option.match(Arr.head(matches), {\n onNone: () => ({ removed: Option.none(), tracking }),\n onSome: (attachment) => detach(tracking, attachment.ref),\n }),\n )\n}\n",
18
18
  "import { Context, Schema, type Effect } from \"effect\"\n\nimport type { Tracking } from \"../domain/Tracking.ts\"\n\n/** A session's stored attachments could not be read. They are kept as they are, not discarded. */\nexport class StoredStateInvalid extends Schema.TaggedError<StoredStateInvalid>()(\n \"StoredStateInvalid\",\n {\n sessionID: Schema.String,\n },\n) {}\n\nexport interface TrackingRepositoryApi {\n /** The session's attachments; empty when nothing is stored. */\n readonly load: (sessionID: string) => Effect.Effect<Tracking, StoredStateInvalid>\n readonly save: (sessionID: string, tracking: Tracking) => Effect.Effect<void>\n readonly remove: (sessionID: string) => Effect.Effect<void>\n}\n\nexport class TrackingRepository extends Context.Service<\n TrackingRepository,\n TrackingRepositoryApi\n>()(\"opencode-pr-tracker/TrackingRepository\") {}\n",
19
- "import { Context, Effect, Layer, Option, PubSub, Ref, Result, Stream } from \"effect\"\n\nimport type { PullRequestRef } from \"../domain/PullRequest.ts\"\nimport type { Status } from \"../domain/Snapshot.ts\"\nimport type { Membership } from \"../domain/StackLayout.ts\"\nimport type { Attachment, Tracking } from \"../domain/Tracking.ts\"\nimport { GitHub, type GitHubApi, type ItemResult, type Report } from \"../ports/GitHub.ts\"\nimport type { StoredStateInvalid } from \"../ports/TrackingRepository.ts\"\nimport { FetchQueue } from \"./FetchQueue.ts\"\nimport { afterRefresh, isDue, unknown, withoutUnattached, type Known } from \"./Known.ts\"\nimport { currentMillis } from \"./Time.ts\"\nimport { Tracker, type TrackerApi } from \"./Tracker.ts\"\n\nexport interface Entry {\n readonly ref: PullRequestRef\n readonly attachedAt: number\n readonly status: Status\n readonly membership: Option.Option<Membership>\n}\n\nexport interface SessionView {\n readonly sessionID: string\n readonly entries: readonly Entry[]\n}\n\nexport interface MonitorApi {\n /** The session's pull requests with their latest known status. Marks the session as in use. */\n readonly view: (sessionID: string) => Effect.Effect<SessionView, StoredStateInvalid>\n /** Refreshes the session's pull requests now, except merged ones, and returns the result. */\n readonly refresh: (sessionID: string) => Effect.Effect<SessionView, StoredStateInvalid>\n /**\n * Shows a session after `ref` was attached: records what GitHub reported for `ref` so it is not\n * fetched again, then continues as `show`.\n */\n readonly attached: (\n sessionID: string,\n ref: PullRequestRef,\n report: Report,\n ) => Effect.Effect<SessionView, StoredStateInvalid>\n /**\n * Fetches the session's pull requests whose status is not yet known, publishes its view, and\n * returns it. Marks the session as in use. Use after its attachments change.\n */\n readonly show: (sessionID: string) => Effect.Effect<SessionView, StoredStateInvalid>\n /** Stops watching a session. Safe to repeat. */\n readonly forget: (sessionID: string) => Effect.Effect<void>\n /** Refreshes every due pull request of the sessions in use. Run it repeatedly. */\n readonly poll: Effect.Effect<void>\n /** A session's view after each refresh of it, including refreshes that `poll` runs. */\n readonly changes: Stream.Stream<SessionView>\n}\n\nexport class Monitor extends Context.Service<Monitor, MonitorApi>()(\n \"opencode-pr-tracker/Monitor\",\n) {}\n\nfunction entryOf(known: ReadonlyMap<string, Known>, attachment: Attachment): Entry {\n const current = known.get(attachment.ref.url) ?? unknown\n\n return {\n attachedAt: attachment.attachedAt,\n membership: current.membership,\n ref: attachment.ref,\n status: current.status,\n }\n}\n\nconst urlsOf = (tracking: Tracking): string[] => tracking.map((attachment) => attachment.ref.url)\n\ninterface Cache {\n readonly github: GitHubApi\n readonly known: Ref.Ref<ReadonlyMap<string, Known>>\n}\n\ninterface State extends Cache {\n readonly tracker: TrackerApi\n readonly working: Ref.Ref<ReadonlySet<string>>\n readonly published: PubSub.PubSub<SessionView>\n /** Fetches pull requests and records the results; see `FetchQueue`. */\n readonly fetch: (refs: readonly PullRequestRef[]) => Effect.Effect<void>\n}\n\n/** Records GitHub's results for pull requests as of now. */\nfunction remember(cache: Cache, results: ReadonlyMap<string, ItemResult>): Effect.Effect<void> {\n return Effect.gen(function* () {\n const now = yield* currentMillis\n\n yield* Ref.update(cache.known, (current: ReadonlyMap<string, Known>) => {\n const next = new Map(current)\n\n for (const [url, result] of results)\n next.set(url, afterRefresh(current.get(url) ?? unknown, result, now))\n\n return next\n })\n })\n}\n\n/** Fetches `refs` and records what GitHub said; a failed request counts against each of them. */\nfunction update(cache: Cache, refs: readonly PullRequestRef[]): Effect.Effect<void> {\n return Effect.gen(function* () {\n const outcome = yield* Effect.result(cache.github.fetch(refs))\n\n const results: ReadonlyMap<string, ItemResult> = Result.isSuccess(outcome)\n ? outcome.success\n : new Map(\n refs.map(\n (ref) => [ref.url, { _tag: \"Failed\", diagnostic: outcome.failure.diagnostic }] as const,\n ),\n )\n\n yield* remember(cache, results)\n })\n}\n\nfunction viewOf(state: State, sessionID: string): Effect.Effect<SessionView, StoredStateInvalid> {\n return Effect.gen(function* () {\n const tracking = yield* state.tracker.list(sessionID)\n const current = yield* Ref.get(state.known)\n\n return { entries: tracking.map((attachment) => entryOf(current, attachment)), sessionID }\n })\n}\n\nfunction publish(state: State, sessionID: string): Effect.Effect<void> {\n return viewOf(state, sessionID).pipe(\n Effect.flatMap((view: SessionView) => PubSub.publish(state.published, view)),\n Effect.ignore,\n )\n}\n\nconst use = (state: State, sessionID: string): Effect.Effect<void> =>\n Ref.update(state.working, (sessions: ReadonlySet<string>) => new Set(sessions).add(sessionID))\n\nfunction poll(state: State): Effect.Effect<void> {\n return Effect.gen(function* () {\n const sessions = [...(yield* Ref.get(state.working))]\n // Taken before listing attachments: statuses recorded after this belong to newer attachments.\n const known = yield* Ref.get(state.known)\n\n const trackings = yield* Effect.forEach(sessions, (sessionID: string) =>\n state.tracker.list(sessionID).pipe(Effect.orElseSucceed((): Tracking => [])),\n )\n\n const attached = new Map(\n trackings.flat().map((attachment) => [attachment.ref.url, attachment.ref]),\n )\n\n const now = yield* currentMillis\n // Choose from the cache as it is now: an attach may have recorded a report while listing.\n const current = yield* Ref.get(state.known)\n const due = [...attached.values()].filter((ref: PullRequestRef) => isDue(current, now, ref))\n\n yield* Ref.update(state.known, (entries: ReadonlyMap<string, Known>) =>\n withoutUnattached(entries, known, attached),\n )\n\n if (due.length === 0) return\n\n yield* state.fetch(due)\n\n const dueUrls = new Set(due.map((ref) => ref.url))\n\n const affected = sessions.filter((_, index) =>\n urlsOf(trackings[index] ?? []).some((url) => dueUrls.has(url)),\n )\n\n yield* Effect.forEach(affected, (sessionID: string) => publish(state, sessionID), {\n discard: true,\n })\n })\n}\n\n/** Fetches the session's pull requests that `select` picks, then publishes and returns its view. */\nfunction fetchAndShow(\n state: State,\n sessionID: string,\n select: (known: Option.Option<Known>) => boolean,\n): Effect.Effect<SessionView, StoredStateInvalid> {\n return Effect.gen(function* () {\n yield* use(state, sessionID)\n\n const tracking = yield* state.tracker.list(sessionID)\n const known = yield* Ref.get(state.known)\n\n yield* state.fetch(\n tracking\n .map((attachment) => attachment.ref)\n .filter((ref) => select(Option.fromNullishOr(known.get(ref.url)))),\n )\n const view = yield* viewOf(state, sessionID)\n\n yield* PubSub.publish(state.published, view)\n\n return view\n })\n}\n\nconst refreshable = (known: Option.Option<Known>): boolean =>\n Option.isSome(Option.getOrElse(known, () => unknown).dueAt)\n\nconst notYetKnown = (known: Option.Option<Known>): boolean => Option.isNone(known)\n\nexport const layer = Layer.effect(\n Monitor,\n Effect.gen(function* () {\n const cache: Cache = {\n github: yield* GitHub,\n known: yield* Ref.make<ReadonlyMap<string, Known>>(new Map()),\n }\n\n const queue = new FetchQueue((refs) => update(cache, refs), yield* Effect.scope)\n\n const state: State = {\n fetch: (refs) => queue.fetch(refs),\n github: cache.github,\n known: cache.known,\n published: yield* PubSub.unbounded<SessionView>(),\n tracker: yield* Tracker,\n working: yield* Ref.make<ReadonlySet<string>>(new Set()),\n }\n\n return Monitor.of({\n changes: Stream.fromPubSub(state.published),\n forget: (sessionID) =>\n Ref.update(\n state.working,\n (sessions: ReadonlySet<string>) =>\n new Set([...sessions].filter((id) => id !== sessionID)),\n ),\n poll: poll(state),\n attached: (sessionID, ref, report) =>\n Effect.andThen(\n remember(cache, new Map([[ref.url, { _tag: \"Reported\", report }]])),\n fetchAndShow(state, sessionID, notYetKnown),\n ),\n refresh: (sessionID) => fetchAndShow(state, sessionID, refreshable),\n show: (sessionID) => fetchAndShow(state, sessionID, notYetKnown),\n view: (sessionID) => Effect.andThen(use(state, sessionID), viewOf(state, sessionID)),\n })\n }),\n)\n",
19
+ "import { Context, Effect, Layer, Option, PubSub, Ref, Result, Stream } from \"effect\"\n\nimport type { PullRequestRef } from \"../domain/PullRequest.ts\"\nimport type { Status } from \"../domain/Snapshot.ts\"\nimport { agreedStacks, type Membership } from \"../domain/StackLayout.ts\"\nimport { group, type Attachment, type Tracking } from \"../domain/Tracking.ts\"\nimport { GitHub, type GitHubApi, type ItemResult, type Report } from \"../ports/GitHub.ts\"\nimport type { StoredStateInvalid } from \"../ports/TrackingRepository.ts\"\nimport { FetchQueue } from \"./FetchQueue.ts\"\nimport { isDue, recorded, unknown, withoutUnattached, type Known } from \"./Known.ts\"\nimport { currentMillis } from \"./Time.ts\"\nimport { Tracker, type TrackerApi } from \"./Tracker.ts\"\n\nexport interface Entry {\n readonly ref: PullRequestRef\n readonly attachedAt: number\n readonly status: Status\n readonly membership: Option.Option<Membership>\n}\n\nexport interface SessionView {\n readonly sessionID: string\n readonly entries: readonly Entry[]\n}\n\nexport interface MonitorApi {\n /** The session's pull requests with their latest known status. Marks the session as in use. */\n readonly view: (sessionID: string) => Effect.Effect<SessionView, StoredStateInvalid>\n /** Refreshes the session's pull requests now, except merged ones, and returns the result. */\n readonly refresh: (sessionID: string) => Effect.Effect<SessionView, StoredStateInvalid>\n /**\n * Shows a session after `ref` was attached: records what GitHub reported for `ref` so it is not\n * fetched again, then continues as `show`.\n */\n readonly attached: (\n sessionID: string,\n ref: PullRequestRef,\n report: Report,\n ) => Effect.Effect<SessionView, StoredStateInvalid>\n /**\n * Fetches the session's pull requests whose status is not yet known, publishes its view, and\n * returns it. Marks the session as in use. Use after its attachments change.\n */\n readonly show: (sessionID: string) => Effect.Effect<SessionView, StoredStateInvalid>\n /** Stops watching a session. Safe to repeat. */\n readonly forget: (sessionID: string) => Effect.Effect<void>\n /** Refreshes every due pull request of the sessions in use. Run it repeatedly. */\n readonly poll: Effect.Effect<void>\n /** A session's view after each refresh of it, including refreshes that `poll` runs. */\n readonly changes: Stream.Stream<SessionView>\n}\n\nexport class Monitor extends Context.Service<Monitor, MonitorApi>()(\n \"opencode-pr-tracker/Monitor\",\n) {}\n\nfunction entryOf(known: ReadonlyMap<string, Known>, attachment: Attachment): Entry {\n const current = known.get(attachment.ref.url) ?? unknown\n\n return {\n attachedAt: attachment.attachedAt,\n membership: current.membership,\n ref: attachment.ref,\n status: current.status,\n }\n}\n\nconst urlsOf = (tracking: Tracking): string[] => tracking.map((attachment) => attachment.ref.url)\n\ninterface Cache {\n readonly github: GitHubApi\n readonly known: Ref.Ref<ReadonlyMap<string, Known>>\n}\n\ninterface State extends Cache {\n readonly tracker: TrackerApi\n readonly working: Ref.Ref<ReadonlySet<string>>\n readonly published: PubSub.PubSub<SessionView>\n /** Fetches pull requests and records the results; see `FetchQueue`. */\n readonly fetch: (refs: readonly PullRequestRef[]) => Effect.Effect<void>\n}\n\n/** Records GitHub's results for pull requests as of now. */\nfunction remember(cache: Cache, results: ReadonlyMap<string, ItemResult>): Effect.Effect<void> {\n return Effect.gen(function* () {\n const now = yield* currentMillis\n\n yield* Ref.update(cache.known, (current: ReadonlyMap<string, Known>) =>\n recorded(current, results, now),\n )\n })\n}\n\n/** Fetches `refs` and records what GitHub said; a failed request counts against each of them. */\nfunction update(cache: Cache, refs: readonly PullRequestRef[]): Effect.Effect<void> {\n return Effect.gen(function* () {\n const outcome = yield* Effect.result(cache.github.fetch(refs))\n\n const results: ReadonlyMap<string, ItemResult> = Result.isSuccess(outcome)\n ? outcome.success\n : new Map(\n refs.map(\n (ref) => [ref.url, { _tag: \"Failed\", diagnostic: outcome.failure.diagnostic }] as const,\n ),\n )\n\n yield* remember(cache, results)\n })\n}\n\n/** The session's view. Agreed Stacks whose attached members sit apart are regrouped first. */\nfunction viewOf(state: State, sessionID: string): Effect.Effect<SessionView, StoredStateInvalid> {\n return Effect.gen(function* () {\n const stored = yield* state.tracker.list(sessionID)\n const current = yield* Ref.get(state.known)\n const entries = stored.map((attachment) => entryOf(current, attachment))\n const stacks = agreedStacks(entries).map((stack) => stack.members)\n\n if (!group(stored, stacks).changed) return { entries, sessionID }\n // A failed regroup leaves the stored order as it was.\n const regrouped = Effect.orElseSucceed(state.tracker.regroup(sessionID, stacks), () => stored)\n const tracking = yield* regrouped\n\n return { entries: tracking.map((attachment) => entryOf(current, attachment)), sessionID }\n })\n}\n\nfunction publish(state: State, sessionID: string): Effect.Effect<void> {\n return viewOf(state, sessionID).pipe(\n Effect.flatMap((view: SessionView) => PubSub.publish(state.published, view)),\n Effect.ignore,\n )\n}\n\nconst use = (state: State, sessionID: string): Effect.Effect<void> =>\n Ref.update(state.working, (sessions: ReadonlySet<string>) => new Set(sessions).add(sessionID))\n\nfunction poll(state: State): Effect.Effect<void> {\n return Effect.gen(function* () {\n const sessions = [...(yield* Ref.get(state.working))]\n // Taken before listing attachments: statuses recorded after this belong to newer attachments.\n const known = yield* Ref.get(state.known)\n\n const trackings = yield* Effect.forEach(sessions, (sessionID: string) =>\n state.tracker.list(sessionID).pipe(Effect.orElseSucceed((): Tracking => [])),\n )\n\n const attached = new Map(\n trackings.flat().map((attachment) => [attachment.ref.url, attachment.ref]),\n )\n\n const now = yield* currentMillis\n // Choose from the cache as it is now: an attach may have recorded a report while listing.\n const current = yield* Ref.get(state.known)\n const due = [...attached.values()].filter((ref: PullRequestRef) => isDue(current, now, ref))\n\n yield* Ref.update(state.known, (entries: ReadonlyMap<string, Known>) =>\n withoutUnattached(entries, known, attached),\n )\n\n if (due.length === 0) return\n\n yield* state.fetch(due)\n\n const dueUrls = new Set(due.map((ref) => ref.url))\n\n const affected = sessions.filter((_, index) =>\n urlsOf(trackings[index] ?? []).some((url) => dueUrls.has(url)),\n )\n\n yield* Effect.forEach(affected, (sessionID: string) => publish(state, sessionID), {\n discard: true,\n })\n })\n}\n\n/** Fetches the session's pull requests that `select` picks, then publishes and returns its view. */\nfunction fetchAndShow(\n state: State,\n sessionID: string,\n select: (known: Option.Option<Known>) => boolean,\n): Effect.Effect<SessionView, StoredStateInvalid> {\n return Effect.gen(function* () {\n yield* use(state, sessionID)\n\n const tracking = yield* state.tracker.list(sessionID)\n const known = yield* Ref.get(state.known)\n\n yield* state.fetch(\n tracking\n .map((attachment) => attachment.ref)\n .filter((ref) => select(Option.fromNullishOr(known.get(ref.url)))),\n )\n const view = yield* viewOf(state, sessionID)\n\n yield* PubSub.publish(state.published, view)\n\n return view\n })\n}\n\nconst refreshable = (known: Option.Option<Known>): boolean =>\n Option.isSome(Option.getOrElse(known, () => unknown).dueAt)\n\nconst notYetKnown = (known: Option.Option<Known>): boolean => Option.isNone(known)\n\nexport const layer = Layer.effect(\n Monitor,\n Effect.gen(function* () {\n const cache: Cache = {\n github: yield* GitHub,\n known: yield* Ref.make<ReadonlyMap<string, Known>>(new Map()),\n }\n\n const queue = new FetchQueue((refs) => update(cache, refs), yield* Effect.scope)\n\n const state: State = {\n fetch: (refs) => queue.fetch(refs),\n github: cache.github,\n known: cache.known,\n published: yield* PubSub.unbounded<SessionView>(),\n tracker: yield* Tracker,\n working: yield* Ref.make<ReadonlySet<string>>(new Set()),\n }\n\n return Monitor.of({\n changes: Stream.fromPubSub(state.published),\n forget: (sessionID) =>\n Ref.update(\n state.working,\n (sessions: ReadonlySet<string>) =>\n new Set([...sessions].filter((id) => id !== sessionID)),\n ),\n poll: poll(state),\n attached: (sessionID, ref, report) =>\n Effect.andThen(\n remember(cache, new Map([[ref.url, { _tag: \"Reported\", report }]])),\n fetchAndShow(state, sessionID, notYetKnown),\n ),\n refresh: (sessionID) => fetchAndShow(state, sessionID, refreshable),\n show: (sessionID) => fetchAndShow(state, sessionID, notYetKnown),\n view: (sessionID) => Effect.andThen(use(state, sessionID), viewOf(state, sessionID)),\n })\n }),\n)\n",
20
+ "import { Array as Arr, Option, Schema } from \"effect\"\n\nimport { PullRequestRef } from \"./PullRequest.ts\"\n\n/** GitHub Stack membership. Members are listed bottom to top. */\nexport const Membership = Schema.Union([\n Schema.TaggedStruct(\"Standalone\", {}),\n Schema.TaggedStruct(\"Stack\", {\n id: Schema.String,\n members: Schema.NonEmptyArray(PullRequestRef),\n }),\n])\n\nexport type Membership = typeof Membership.Type\n\nexport type StackMembership = Extract<Membership, { readonly _tag: \"Stack\" }>\n\nexport interface Entry {\n readonly ref: PullRequestRef\n readonly membership: Option.Option<Membership>\n}\n\n/** `first`, `middle` and `last` draw a Stack's boundary; `bullet` is an ordinary pull request. */\nexport type Marker = \"bullet\" | \"first\" | \"middle\" | \"last\"\n\n/** How the line under a row continues: to the next attached member, to unattached members, or not. */\nexport type Connector = \"continues\" | \"open\" | \"none\"\n\nexport type Row<E extends Entry> =\n | {\n readonly _tag: \"PullRequest\"\n readonly entry: E\n readonly marker: Marker\n readonly connector: Connector\n }\n | { readonly _tag: \"Gap\"; readonly count: number }\n\ninterface Placed {\n readonly index: number\n readonly position: number\n readonly size: number\n}\n\n/** Where one entry sits within its Stack's attached members. */\ninterface Place {\n readonly current: Placed\n readonly previous: Option.Option<Placed>\n readonly first: boolean\n readonly last: boolean\n readonly attached: number\n}\n\ninterface Reported {\n readonly index: number\n readonly url: string\n readonly stack: StackMembership\n}\n\nconst stackOf = (entry: Entry): Option.Option<StackMembership> =>\n Option.filter(entry.membership, (membership) => membership._tag === \"Stack\")\n\nconst urlsOf = (stack: StackMembership): string[] => stack.members.map((member) => member.url)\n\nfunction reportsById(entries: readonly Entry[]): Map<string, Reported[]> {\n const byId = new Map<string, Reported[]>()\n\n for (const [index, entry] of entries.entries()) {\n for (const stack of Option.toArray(stackOf(entry))) {\n byId.set(stack.id, [...(byId.get(stack.id) ?? []), { index, stack, url: entry.ref.url }])\n }\n }\n\n return byId\n}\n\n/** Every Stack ID that lists each pull request, across all reported memberships. */\nfunction claims(byId: ReadonlyMap<string, readonly Reported[]>): Map<string, Set<string>> {\n const claimed = new Map<string, Set<string>>()\n\n for (const [id, reports] of byId) {\n for (const url of reports.flatMap((report) => urlsOf(report.stack))) {\n claimed.set(url, new Set([...(claimed.get(url) ?? []), id]))\n }\n }\n\n return claimed\n}\n\nfunction agrees(\n reports: readonly Reported[],\n entries: readonly Entry[],\n claimed: ReadonlyMap<string, ReadonlySet<string>>,\n): boolean {\n const members = Option.match(Arr.head(reports), {\n onNone: (): string[] => [],\n onSome: (report) => urlsOf(report.stack),\n })\n\n const listed = new Set(members)\n const attachedMembers = entries.filter((entry) => listed.has(entry.ref.url))\n\n return (\n listed.size === members.length &&\n reports.every((report) => urlsOf(report.stack).join(\"\\n\") === members.join(\"\\n\")) &&\n members.every((url) => (claimed.get(url) ?? new Set()).size === 1) &&\n reports.every((report) => listed.has(report.url)) &&\n attachedMembers.length === reports.length\n )\n}\n\nfunction placements(reports: readonly Reported[]): Option.Option<Placed[]> {\n const placed = reports.map((report) => ({\n index: report.index,\n position: urlsOf(report.stack).indexOf(report.url),\n size: report.stack.members.length,\n }))\n\n const adjacent = Arr.zipWith(\n placed,\n placed.slice(1),\n (before: Placed, after: Placed) =>\n after.index === before.index + 1 && after.position > before.position,\n )\n\n const ordered = placed.every((member: Placed) => member.position >= 0) && adjacent.every(Boolean)\n\n return ordered ? Option.some(placed) : Option.none()\n}\n\n/** The reports of each Stack whose attached members all agree on it, and no other Stack claims. */\nfunction agreedReports(entries: readonly Entry[]): (readonly Reported[])[] {\n const byId = reportsById(entries)\n const claimed = claims(byId)\n\n return [...byId.values()].filter((reports: readonly Reported[]) =>\n agrees(reports, entries, claimed),\n )\n}\n\n/** Stacks the entries report consistently: the ones `layout` can draw once their members sit together. */\nexport function agreedStacks(entries: readonly Entry[]): StackMembership[] {\n return agreedReports(entries).flatMap((reports: readonly Reported[]) =>\n Option.toArray(Option.map(Arr.head(reports), (report) => report.stack)),\n )\n}\n\n/** Each entry that belongs to a consistent Stack, with its place among the attached members. */\nfunction consistentStacks(entries: readonly Entry[]): Map<number, Place> {\n const places = new Map<number, Place>()\n\n for (const reports of agreedReports(entries)) {\n const placed = placements(reports)\n\n for (const group of Option.toArray(placed)) {\n for (const [step, current] of group.entries()) {\n places.set(current.index, {\n attached: group.length,\n current,\n first: step === 0,\n last: step === group.length - 1,\n previous: Arr.get(group, step - 1),\n })\n }\n }\n }\n\n return places\n}\n\nfunction marker(place: Place): Marker {\n const { current } = place\n\n if (place.attached === 1 && current.size > 1) return \"middle\"\n\n if (place.first && current.position === 0) return \"first\"\n\n if (place.last && current.position === current.size - 1) return \"last\"\n\n return \"middle\"\n}\n\nfunction connector(place: Place): Connector {\n if (!place.last) return \"continues\"\n\n return place.current.position < place.current.size - 1 ? \"open\" : \"none\"\n}\n\nfunction stackRows<E extends Entry>(entry: E, place: Place): Row<E>[] {\n const skipped = Option.match(place.previous, {\n onNone: () => 0,\n onSome: (before) => place.current.position - before.position - 1,\n })\n\n const row: Row<E> = {\n _tag: \"PullRequest\",\n connector: connector(place),\n entry,\n marker: marker(place),\n }\n\n return skipped > 0 ? [{ _tag: \"Gap\", count: skipped }, row] : [row]\n}\n\n/** Sidebar rows in attachment order, with Stack markers and gaps where membership is consistent. */\nexport function layout<E extends Entry>(entries: readonly E[]): Row<E>[] {\n const places = consistentStacks(entries)\n\n return entries.flatMap((entry, index) =>\n Option.match(Option.fromNullishOr(places.get(index)), {\n onNone: (): Row<E>[] => [{ _tag: \"PullRequest\", connector: \"none\", entry, marker: \"bullet\" }],\n onSome: (place) => stackRows(entry, place),\n }),\n )\n}\n",
20
21
  "import { type Cause, Deferred, Effect, Exit, Option, type Scope } from \"effect\"\n\nimport type { PullRequestRef } from \"../domain/PullRequest.ts\"\n\n/** The fetch after the running one, shared by every request made while that one runs. */\ninterface Queued {\n readonly refs: Map<string, PullRequestRef>\n readonly done: Deferred.Deferred<boolean>\n}\n\n/**\n * Runs a fetch one call at a time. Requests made while a fetch runs join a single following fetch\n * of all their pull requests, so a burst of requests costs at most two fetches. Each request\n * completes once a fetch that started after it has finished. Fetches run in the given scope, so an\n * interrupted caller does not cancel a fetch that others are waiting for. A fetch that dies fails\n * the requests waiting for it; the next request starts a new fetch.\n */\nexport class FetchQueue {\n private running = false\n private queued = Option.none<Queued>()\n private readonly fetchNow: (refs: readonly PullRequestRef[]) => Effect.Effect<void>\n private readonly scope: Scope.Scope\n\n public constructor(\n fetchNow: (refs: readonly PullRequestRef[]) => Effect.Effect<void>,\n scope: Scope.Scope,\n ) {\n this.fetchNow = fetchNow\n this.scope = scope\n }\n\n public fetch(refs: readonly PullRequestRef[]): Effect.Effect<void> {\n return Effect.suspend(() => {\n if (refs.length === 0) return Effect.void\n\n if (this.running) return Effect.asVoid(Deferred.await(this.join(refs)))\n\n this.running = true\n\n const done = Deferred.makeUnsafe<boolean>()\n\n return Effect.andThen(Effect.forkIn(this.drain(refs, done), this.scope), Deferred.await(done))\n })\n }\n\n private join(refs: readonly PullRequestRef[]): Deferred.Deferred<boolean> {\n const next = Option.getOrElse(this.queued, (): Queued => ({\n done: Deferred.makeUnsafe(),\n refs: new Map(),\n }))\n\n for (const ref of refs) next.refs.set(ref.url, ref)\n this.queued = Option.some(next)\n\n return next.done\n }\n\n private drain(\n refs: readonly PullRequestRef[],\n done: Deferred.Deferred<boolean>,\n ): Effect.Effect<void> {\n return this.fetchNow(refs).pipe(\n Effect.andThen(Deferred.succeed(done, true)),\n Effect.andThen(Effect.suspend(() => this.next())),\n // A fetch that dies, or is interrupted when the scope closes, fails its waiters and resets the queue.\n Effect.onExit((exit) =>\n Exit.isSuccess(exit) ? Effect.void : Effect.suspend(() => this.reset(done, exit.cause)),\n ),\n )\n }\n\n private next(): Effect.Effect<void> {\n return Option.match(this.queued, {\n onNone: () =>\n Effect.sync(() => {\n this.running = false\n }),\n onSome: (queued) => {\n this.queued = Option.none()\n\n return this.drain([...queued.refs.values()], queued.done)\n },\n })\n }\n\n private reset(done: Deferred.Deferred<boolean>, cause: Cause.Cause<never>): Effect.Effect<void> {\n const waiting = [done, ...Option.toArray(Option.map(this.queued, (queued) => queued.done))]\n\n this.running = false\n this.queued = Option.none()\n\n return Effect.forEach(waiting, (deferred) => Deferred.failCause(deferred, cause), {\n discard: true,\n })\n }\n}\n",
21
- "/** What the monitor knows about one pull request, and when to ask GitHub again. */\nimport { Duration, Option } from \"effect\"\n\nimport type { PullRequestRef } from \"../domain/PullRequest.ts\"\nimport { nextRefresh } from \"../domain/RefreshPolicy.ts\"\nimport { failed, pending, succeeded, type Status } from \"../domain/Snapshot.ts\"\nimport type { Membership } from \"../domain/StackLayout.ts\"\nimport type { ItemResult } from \"../ports/GitHub.ts\"\n\nexport interface Known {\n readonly status: Status\n readonly membership: Option.Option<Membership>\n /** When to refresh next; none once refreshing can no longer change anything. */\n readonly dueAt: Option.Option<number>\n}\n\nexport const unknown: Known = { dueAt: Option.some(0), membership: Option.none(), status: pending }\n\nexport function afterRefresh(previous: Known, result: ItemResult, now: number): Known {\n const status =\n result._tag === \"Reported\"\n ? succeeded(result.report.snapshot)\n : failed(previous.status, result.diagnostic, now)\n\n const membership = result._tag === \"Reported\" ? result.report.membership : previous.membership\n\n return {\n dueAt: Option.map(nextRefresh(status), (delay) => now + Duration.toMillis(delay)),\n membership,\n status,\n }\n}\n\nexport const isDue = (\n known: ReadonlyMap<string, Known>,\n now: number,\n ref: PullRequestRef,\n): boolean =>\n Option.match((known.get(ref.url) ?? unknown).dueAt, {\n onNone: () => false,\n onSome: (at: number) => at <= now,\n })\n\n/**\n * `entries` without pull requests that no session in use has attached, as of the `before`\n * snapshot. Entries that changed since were recorded for attachments newer than the snapshot.\n */\nexport function withoutUnattached(\n entries: ReadonlyMap<string, Known>,\n before: ReadonlyMap<string, Known>,\n attached: ReadonlyMap<string, PullRequestRef>,\n): ReadonlyMap<string, Known> {\n return new Map(\n [...entries].filter(\n ([url, entry]: readonly [string, Known]) => attached.has(url) || entry !== before.get(url),\n ),\n )\n}\n",
22
- "import { Duration, Option } from \"effect\"\n\nimport type { Status } from \"./Snapshot.ts\"\n\nexport const refreshInterval = Duration.seconds(15)\n\n/** When to refresh a pull request next. Merged pull requests never change, so they stop. */\nexport function nextRefresh(status: Status): Option.Option<Duration.Duration> {\n const merged =\n (status._tag === \"Fresh\" || status._tag === \"Stale\") && status.snapshot.state._tag === \"Merged\"\n\n return merged ? Option.none() : Option.some(refreshInterval)\n}\n",
22
+ "/** What the monitor knows about one pull request, and when to ask GitHub again. */\nimport { Duration, Option } from \"effect\"\n\nimport type { PullRequestRef } from \"../domain/PullRequest.ts\"\nimport { nextRefresh } from \"../domain/RefreshPolicy.ts\"\nimport { failed, pending, succeeded, type Status } from \"../domain/Snapshot.ts\"\nimport type { Membership } from \"../domain/StackLayout.ts\"\nimport type { ItemResult } from \"../ports/GitHub.ts\"\n\nexport interface Known {\n readonly status: Status\n readonly membership: Option.Option<Membership>\n /** When to refresh next; none once refreshing can no longer change anything. */\n readonly dueAt: Option.Option<number>\n}\n\nexport const unknown: Known = { dueAt: Option.some(0), membership: Option.none(), status: pending }\n\nexport function afterRefresh(previous: Known, result: ItemResult, now: number): Known {\n const status =\n result._tag === \"Reported\"\n ? succeeded(result.report.snapshot)\n : failed(previous.status, result.diagnostic, now)\n\n const membership = result._tag === \"Reported\" ? result.report.membership : previous.membership\n\n return {\n dueAt: Option.map(nextRefresh(status), (delay) => now + Duration.toMillis(delay)),\n membership,\n status,\n }\n}\n\nconst membersOf = (membership: Option.Option<Membership>): readonly PullRequestRef[] =>\n Option.match(membership, {\n onNone: () => [],\n onSome: (known) => (known._tag === \"Stack\" ? known.members : []),\n })\n\n/** Membership as a comparable string: none, standalone, or the Stack with its members in order. */\nconst keyOf = (membership: Option.Option<Membership>): string =>\n Option.match(membership, {\n onNone: () => \"\",\n onSome: (known) =>\n known._tag === \"Stack\"\n ? [known.id, ...known.members.map((member) => member.url)].join(\"\\n\")\n : \"standalone\",\n })\n\nconst sameMembership = (\n left: Option.Option<Membership>,\n right: Option.Option<Membership>,\n): boolean => keyOf(left) === keyOf(right)\n\n/** Whether `known` stopped refreshing with membership other than `reported`. */\nconst outdated = (known: Option.Option<Known>, reported: Option.Option<Membership>): boolean =>\n Option.exists(\n known,\n (entry) => Option.isNone(entry.dueAt) && !sameMembership(entry.membership, reported),\n )\n\n/**\n * Pull requests to ask about again because a changed Stack report contradicts what is known about\n * them. Merged pull requests stop refreshing, so without this their membership would stay as it\n * was when they merged, and a Stack linked or unlinked afterwards would never agree. A report that\n * does not change asks for nothing, so a lasting contradiction costs one extra refresh.\n */\nfunction contradicted(\n current: ReadonlyMap<string, Known>,\n results: ReadonlyMap<string, ItemResult>,\n): Set<string> {\n const urls = new Set<string>()\n\n for (const [url, result] of results) {\n if (result._tag !== \"Reported\") continue\n\n const reported = result.report.membership\n const previous = (current.get(url) ?? unknown).membership\n\n if (sameMembership(previous, reported)) continue\n\n for (const member of [...membersOf(previous), ...membersOf(reported)]) {\n const known = Option.fromNullishOr(current.get(member.url))\n\n if (!results.has(member.url) && outdated(known, reported)) urls.add(member.url)\n }\n }\n\n return urls\n}\n\n/** `current` with GitHub's `results` recorded as of `now`. */\nexport function recorded(\n current: ReadonlyMap<string, Known>,\n results: ReadonlyMap<string, ItemResult>,\n now: number,\n): Map<string, Known> {\n const next = new Map(current)\n\n for (const [url, result] of results)\n next.set(url, afterRefresh(current.get(url) ?? unknown, result, now))\n\n // Contradicted pull requests are known and were not in `results`, so they are as in `current`.\n for (const url of contradicted(current, results)) {\n const { membership, status } = current.get(url) ?? unknown\n\n next.set(url, { dueAt: Option.some(now), membership, status })\n }\n\n return next\n}\n\nexport const isDue = (\n known: ReadonlyMap<string, Known>,\n now: number,\n ref: PullRequestRef,\n): boolean =>\n Option.match((known.get(ref.url) ?? unknown).dueAt, {\n onNone: () => false,\n onSome: (at: number) => at <= now,\n })\n\n/**\n * `entries` without pull requests that no session in use has attached, as of the `before`\n * snapshot. Entries that changed since were recorded for attachments newer than the snapshot.\n */\nexport function withoutUnattached(\n entries: ReadonlyMap<string, Known>,\n before: ReadonlyMap<string, Known>,\n attached: ReadonlyMap<string, PullRequestRef>,\n): ReadonlyMap<string, Known> {\n return new Map(\n [...entries].filter(\n ([url, entry]: readonly [string, Known]) => attached.has(url) || entry !== before.get(url),\n ),\n )\n}\n",
23
+ "import { Duration, Option } from \"effect\"\n\nimport type { Status } from \"./Snapshot.ts\"\n\nexport const refreshInterval = Duration.seconds(15)\n\n/**\n * When to refresh a pull request next. Merged pull requests never change, so they stop once a\n * refresh succeeds. A failed refresh was still wanted, such as to learn a merged pull request's\n * current Stack, so it is retried.\n */\nexport function nextRefresh(status: Status): Option.Option<Duration.Duration> {\n const merged = status._tag === \"Fresh\" && status.snapshot.state._tag === \"Merged\"\n\n return merged ? Option.none() : Option.some(refreshInterval)\n}\n",
23
24
  "import { Clock, Effect } from \"effect\"\n\n/**\n * The current time in whole epoch milliseconds. `Clock` promises only a number, and OpenCode's\n * clock reports fractions, but attachment and failure times are stored as integers.\n */\nexport const currentMillis: Effect.Effect<number> = Effect.map(Clock.currentTimeMillis, Math.floor)\n",
24
- "import { Array as Arr, Context, Effect, Layer, Option, Schema } from \"effect\"\n\nimport type { PullRequestInput, PullRequestRef } from \"../domain/PullRequest.ts\"\nimport { Diagnostic } from \"../domain/Snapshot.ts\"\nimport {\n attach,\n detach,\n detachNumber,\n type AmbiguousPullRequestNumber,\n type AttachmentLimitReached,\n type Removal,\n type Tracking,\n} from \"../domain/Tracking.ts\"\nimport {\n GitHub,\n type GitHubApi,\n type GitHubFailure,\n type ItemResult,\n type Report,\n type RepositoryUnavailable,\n} from \"../ports/GitHub.ts\"\nimport {\n TrackingRepository,\n type StoredStateInvalid,\n type TrackingRepositoryApi,\n} from \"../ports/TrackingRepository.ts\"\nimport { SessionLocks } from \"./SessionLocks.ts\"\nimport { currentMillis } from \"./Time.ts\"\n\n/** GitHub could not report the pull request being attached. */\nexport class PullRequestUnavailable extends Schema.TaggedError<PullRequestUnavailable>()(\n \"PullRequestUnavailable\",\n { diagnostic: Diagnostic, url: Schema.String },\n) {}\n\n/** GitHub reported only part of the pull request's Stack, so attaching all of it is impossible. */\nexport class StackIncomplete extends Schema.TaggedError<StackIncomplete>()(\"StackIncomplete\", {\n url: Schema.String,\n}) {}\n\nexport type AttachFailure =\n | AttachmentLimitReached\n | StackIncomplete\n | GitHubFailure\n | PullRequestUnavailable\n | RepositoryUnavailable\n | StoredStateInvalid\n\nexport interface Attached {\n /** The pull request that was named; its Stack may have brought others with it. */\n readonly ref: PullRequestRef\n /** What GitHub reported for it while attaching. */\n readonly report: Report\n readonly changed: boolean\n /** How many pull requests the named one's Stack has, itself included. */\n readonly stackSize: number\n readonly tracking: Tracking\n}\n\nexport interface TrackerApi {\n readonly list: (sessionID: string) => Effect.Effect<Tracking, StoredStateInvalid>\n /** Attaches a pull request, with its whole Stack. A bare number is resolved in `directory`. */\n readonly attach: (\n sessionID: string,\n input: PullRequestInput,\n directory: string,\n ) => Effect.Effect<Attached, AttachFailure>\n readonly detach: (\n sessionID: string,\n input: PullRequestInput,\n ) => Effect.Effect<Removal, StoredStateInvalid | AmbiguousPullRequestNumber>\n /** Removes everything stored for a session. Safe to repeat. */\n readonly forget: (sessionID: string) => Effect.Effect<void>\n}\n\nexport class Tracker extends Context.Service<Tracker, TrackerApi>()(\n \"opencode-pr-tracker/Tracker\",\n) {}\n\ninterface Discovered {\n readonly report: Report\n /** The pull request's Stack, bottom first; just the pull request when it has none. */\n readonly stack: Arr.NonEmptyReadonlyArray<PullRequestRef>\n}\n\nfunction discovered(\n ref: PullRequestRef,\n result: ItemResult,\n): Effect.Effect<Discovered, PullRequestUnavailable | StackIncomplete> {\n if (result._tag === \"Failed\")\n return Effect.fail(new PullRequestUnavailable({ diagnostic: result.diagnostic, url: ref.url }))\n\n const { report } = result\n\n return Option.match(report.membership, {\n onNone: () => Effect.fail(new StackIncomplete({ url: ref.url })),\n onSome: (membership) =>\n Effect.succeed({\n report,\n stack: membership._tag === \"Stack\" ? membership.members : Arr.of(ref),\n }),\n })\n}\n\ninterface Services {\n readonly github: GitHubApi\n readonly repository: TrackingRepositoryApi\n}\n\nfunction resolve(\n { github }: Services,\n input: PullRequestInput,\n directory: string,\n): Effect.Effect<PullRequestRef, GitHubFailure | RepositoryUnavailable> {\n return input._tag === \"Reference\"\n ? Effect.succeed(input.ref)\n : github.pullRequestInRepository(directory, input.number)\n}\n\nconst attachTo = Effect.fn(\"Tracker.attach\")(function* (\n services: Services,\n sessionID: string,\n target: Readonly<{ input: PullRequestInput; directory: string }>,\n) {\n const ref = yield* resolve(services, target.input, target.directory)\n const reports = yield* services.github.fetch([ref])\n const missing: ItemResult = { _tag: \"Failed\", diagnostic: \"NotFound\" }\n const { report, stack } = yield* discovered(ref, reports.get(ref.url) ?? missing)\n const current = yield* services.repository.load(sessionID)\n const change = yield* Effect.fromResult(attach(current, stack, yield* currentMillis))\n\n if (change.changed) yield* services.repository.save(sessionID, change.tracking)\n\n return {\n changed: change.changed,\n ref,\n report,\n stackSize: stack.length,\n tracking: change.tracking,\n }\n})\n\nconst detachFrom = Effect.fn(\"Tracker.detach\")(function* (\n { repository }: Services,\n sessionID: string,\n input: PullRequestInput,\n) {\n const current = yield* repository.load(sessionID)\n\n const removal: Removal =\n input._tag === \"Reference\"\n ? detach(current, input.ref)\n : yield* Effect.fromResult(detachNumber(current, input.number))\n\n if (Option.isSome(removal.removed)) yield* repository.save(sessionID, removal.tracking)\n\n return removal\n})\n\nexport const layer = Layer.effect(\n Tracker,\n Effect.gen(function* () {\n const services: Services = { github: yield* GitHub, repository: yield* TrackingRepository }\n const locks = new SessionLocks()\n\n return Tracker.of({\n attach: (sessionID, input, directory) =>\n locks.run(sessionID, attachTo(services, sessionID, { directory, input })),\n detach: (sessionID, input) => locks.run(sessionID, detachFrom(services, sessionID, input)),\n forget: (sessionID) => locks.run(sessionID, services.repository.remove(sessionID)),\n list: (sessionID) => services.repository.load(sessionID),\n })\n }),\n)\n",
25
+ "import { Array as Arr, Context, Effect, Layer, Option, Schema } from \"effect\"\n\nimport type { PullRequestInput, PullRequestRef } from \"../domain/PullRequest.ts\"\nimport { Diagnostic } from \"../domain/Snapshot.ts\"\nimport {\n attach,\n detach,\n detachNumber,\n group,\n type AmbiguousPullRequestNumber,\n type AttachmentLimitReached,\n type Removal,\n type Tracking,\n} from \"../domain/Tracking.ts\"\nimport {\n GitHub,\n type GitHubApi,\n type GitHubFailure,\n type ItemResult,\n type Report,\n type RepositoryUnavailable,\n} from \"../ports/GitHub.ts\"\nimport {\n TrackingRepository,\n type StoredStateInvalid,\n type TrackingRepositoryApi,\n} from \"../ports/TrackingRepository.ts\"\nimport { SessionLocks } from \"./SessionLocks.ts\"\nimport { currentMillis } from \"./Time.ts\"\n\n/** GitHub could not report the pull request being attached. */\nexport class PullRequestUnavailable extends Schema.TaggedError<PullRequestUnavailable>()(\n \"PullRequestUnavailable\",\n { diagnostic: Diagnostic, url: Schema.String },\n) {}\n\n/** GitHub reported only part of the pull request's Stack, so attaching all of it is impossible. */\nexport class StackIncomplete extends Schema.TaggedError<StackIncomplete>()(\"StackIncomplete\", {\n url: Schema.String,\n}) {}\n\nexport type AttachFailure =\n | AttachmentLimitReached\n | StackIncomplete\n | GitHubFailure\n | PullRequestUnavailable\n | RepositoryUnavailable\n | StoredStateInvalid\n\nexport interface Attached {\n /** The pull request that was named; its Stack may have brought others with it. */\n readonly ref: PullRequestRef\n /** What GitHub reported for it while attaching. */\n readonly report: Report\n readonly changed: boolean\n /** How many pull requests the named one's Stack has, itself included. */\n readonly stackSize: number\n readonly tracking: Tracking\n}\n\nexport interface TrackerApi {\n readonly list: (sessionID: string) => Effect.Effect<Tracking, StoredStateInvalid>\n /** Attaches a pull request, with its whole Stack. A bare number is resolved in `directory`. */\n readonly attach: (\n sessionID: string,\n input: PullRequestInput,\n directory: string,\n ) => Effect.Effect<Attached, AttachFailure>\n readonly detach: (\n sessionID: string,\n input: PullRequestInput,\n ) => Effect.Effect<Removal, StoredStateInvalid | AmbiguousPullRequestNumber>\n /**\n * Brings each Stack's attached members together, bottom to top, where the earliest of them is\n * attached. Stacks are listed bottom first. Saves only when the order changes.\n */\n readonly regroup: (\n sessionID: string,\n stacks: readonly (readonly PullRequestRef[])[],\n ) => Effect.Effect<Tracking, StoredStateInvalid>\n /** Removes everything stored for a session. Safe to repeat. */\n readonly forget: (sessionID: string) => Effect.Effect<void>\n}\n\nexport class Tracker extends Context.Service<Tracker, TrackerApi>()(\n \"opencode-pr-tracker/Tracker\",\n) {}\n\ninterface Discovered {\n readonly report: Report\n /** The pull request's Stack, bottom first; just the pull request when it has none. */\n readonly stack: Arr.NonEmptyReadonlyArray<PullRequestRef>\n}\n\nfunction discovered(\n ref: PullRequestRef,\n result: ItemResult,\n): Effect.Effect<Discovered, PullRequestUnavailable | StackIncomplete> {\n if (result._tag === \"Failed\")\n return Effect.fail(new PullRequestUnavailable({ diagnostic: result.diagnostic, url: ref.url }))\n\n const { report } = result\n\n return Option.match(report.membership, {\n onNone: () => Effect.fail(new StackIncomplete({ url: ref.url })),\n onSome: (membership) =>\n Effect.succeed({\n report,\n stack: membership._tag === \"Stack\" ? membership.members : Arr.of(ref),\n }),\n })\n}\n\ninterface Services {\n readonly github: GitHubApi\n readonly repository: TrackingRepositoryApi\n}\n\nfunction resolve(\n { github }: Services,\n input: PullRequestInput,\n directory: string,\n): Effect.Effect<PullRequestRef, GitHubFailure | RepositoryUnavailable> {\n return input._tag === \"Reference\"\n ? Effect.succeed(input.ref)\n : github.pullRequestInRepository(directory, input.number)\n}\n\nconst attachTo = Effect.fn(\"Tracker.attach\")(function* (\n services: Services,\n sessionID: string,\n target: Readonly<{ input: PullRequestInput; directory: string }>,\n) {\n const ref = yield* resolve(services, target.input, target.directory)\n const reports = yield* services.github.fetch([ref])\n const missing: ItemResult = { _tag: \"Failed\", diagnostic: \"NotFound\" }\n const { report, stack } = yield* discovered(ref, reports.get(ref.url) ?? missing)\n const current = yield* services.repository.load(sessionID)\n const change = yield* Effect.fromResult(attach(current, stack, yield* currentMillis))\n\n if (change.changed) yield* services.repository.save(sessionID, change.tracking)\n\n return {\n changed: change.changed,\n ref,\n report,\n stackSize: stack.length,\n tracking: change.tracking,\n }\n})\n\nconst detachFrom = Effect.fn(\"Tracker.detach\")(function* (\n { repository }: Services,\n sessionID: string,\n input: PullRequestInput,\n) {\n const current = yield* repository.load(sessionID)\n\n const removal: Removal =\n input._tag === \"Reference\"\n ? detach(current, input.ref)\n : yield* Effect.fromResult(detachNumber(current, input.number))\n\n if (Option.isSome(removal.removed)) yield* repository.save(sessionID, removal.tracking)\n\n return removal\n})\n\nconst regroupIn = Effect.fn(\"Tracker.regroup\")(function* (\n { repository }: Services,\n sessionID: string,\n stacks: readonly (readonly PullRequestRef[])[],\n) {\n const change = group(yield* repository.load(sessionID), stacks)\n\n if (change.changed) yield* repository.save(sessionID, change.tracking)\n\n return change.tracking\n})\n\nexport const layer = Layer.effect(\n Tracker,\n Effect.gen(function* () {\n const services: Services = { github: yield* GitHub, repository: yield* TrackingRepository }\n const locks = new SessionLocks()\n\n return Tracker.of({\n attach: (sessionID, input, directory) =>\n locks.run(sessionID, attachTo(services, sessionID, { directory, input })),\n detach: (sessionID, input) => locks.run(sessionID, detachFrom(services, sessionID, input)),\n forget: (sessionID) => locks.run(sessionID, services.repository.remove(sessionID)),\n list: (sessionID) => services.repository.load(sessionID),\n regroup: (sessionID, stacks) => locks.run(sessionID, regroupIn(services, sessionID, stacks)),\n })\n }),\n)\n",
25
26
  "import { Effect, Option, Semaphore } from \"effect\"\n\ninterface SessionLock {\n readonly semaphore: Semaphore.Semaphore\n /** Operations queued or running on this lock. */\n readonly users: number\n}\n\n/**\n * Runs each session's operations one at a time. A session's lock is dropped once no operation\n * holds or awaits it; dropping it earlier would let a new operation create a second lock and\n * overlap operations still queued on the first.\n */\nexport class SessionLocks {\n private readonly locks = new Map<string, SessionLock>()\n\n /** How many sessions have operations queued or running. */\n public get held(): number {\n return this.locks.size\n }\n\n public run<A, E, R>(sessionID: string, effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> {\n return Effect.uninterruptibleMask((restore) =>\n Effect.suspend(() =>\n restore(this.enter(sessionID).withPermit(effect)).pipe(\n Effect.ensuring(\n Effect.sync(() => {\n this.leave(sessionID)\n }),\n ),\n ),\n ),\n )\n }\n\n private enter(sessionID: string): Semaphore.Semaphore {\n const { semaphore, users } = this.locks.get(sessionID) ?? {\n semaphore: Semaphore.makeUnsafe(1),\n users: 0,\n }\n\n this.locks.set(sessionID, { semaphore, users: users + 1 })\n\n return semaphore\n }\n\n private leave(sessionID: string): void {\n const current = Option.fromUndefinedOr(this.locks.get(sessionID))\n\n if (Option.isNone(current)) return\n\n const { semaphore, users } = current.value\n\n if (users === 1) this.locks.delete(sessionID)\n else this.locks.set(sessionID, { semaphore, users: users - 1 })\n }\n}\n",
26
27
  "/**\n * The RPC contract between the server plugin and its clients, including the terminal plugin.\n * Schemas are Standard Schema so both Effect and Promise clients can use them.\n */\nimport { Rpc } from \"@opencode/plugin/rpc\"\nimport { Schema, type StandardSchema } from \"effect\"\n\nimport { PullRequestRef } from \"./domain/PullRequest.ts\"\nimport { Status } from \"./domain/Snapshot.ts\"\nimport { Membership } from \"./domain/StackLayout.ts\"\n\nexport const Layout = Schema.Literals([\"default\", \"compact\"])\n\nexport type Layout = typeof Layout.Type\n\nexport const EntryView = Schema.Struct({\n attachedAt: Schema.Int,\n membership: Schema.NullOr(Membership),\n ref: PullRequestRef,\n status: Status,\n})\n\nexport type EntryView = typeof EntryView.Type\n\n/** A session's attached pull requests, in display order, with the configured sidebar layout. */\nexport const View = Schema.Struct({\n entries: Schema.Array(EntryView),\n layout: Layout,\n sessionID: Schema.String,\n})\n\nexport type View = typeof View.Type\n\n/** A view as clients receive it: plain JSON data. */\nexport type ViewData = typeof View.Encoded\n\nconst Session = Schema.Struct({ sessionID: Schema.String })\n\n/** A pull request URL, with or without `https://`, or a number in the session's repository. */\nconst Target = Schema.Struct({ sessionID: Schema.String, target: Schema.String })\n\n/** The outcome of a change, with a message for the person who asked, and the session's new view. */\nexport const Changed = Schema.Struct({ message: Schema.String, view: View })\n\nexport type Changed = typeof Changed.Type\n\n/** A request that could not be carried out, with a message for the person who made it. */\nconst Rejected = Schema.Struct({ message: Schema.String })\n\n/**\n * The wire form of `schema`: plain JSON data, validated by the plugin's own copy of Effect.\n * OpenCode would handle an Effect schema with its own copy, which can reject values this one\n * accepts, and it sends only JSON, so decoded values such as class instances cannot cross.\n */\nfunction portable<S extends Schema.Top>(\n schema: S,\n): StandardSchema.StandardSchemaV1<S[\"Encoded\"], S[\"Encoded\"]> {\n return { \"~standard\": Schema.toStandardSchemaV1(Schema.toEncoded(schema))[\"~standard\"] }\n}\n\nexport const PullRequestTracker = Rpc.define({\n events: {\n updated: { schema: portable(View) },\n },\n id: \"opencode-pr-tracker\",\n methods: {\n attach: {\n errors: { rejected: portable(Rejected) },\n input: portable(Target),\n output: portable(Changed),\n },\n detach: {\n errors: { rejected: portable(Rejected) },\n input: portable(Target),\n output: portable(Changed),\n },\n list: {\n errors: { rejected: portable(Rejected) },\n input: portable(Session),\n output: portable(View),\n },\n refresh: {\n errors: { rejected: portable(Rejected) },\n input: portable(Session),\n output: portable(View),\n },\n },\n})\n\nexport type PullRequestTracker = typeof PullRequestTracker\n",
27
- "import { Array as Arr, Option, Schema } from \"effect\"\n\nimport { PullRequestRef } from \"./PullRequest.ts\"\n\n/** GitHub Stack membership. Members are listed bottom to top. */\nexport const Membership = Schema.Union([\n Schema.TaggedStruct(\"Standalone\", {}),\n Schema.TaggedStruct(\"Stack\", {\n id: Schema.String,\n members: Schema.NonEmptyArray(PullRequestRef),\n }),\n])\n\nexport type Membership = typeof Membership.Type\n\ntype StackMembership = Extract<Membership, { readonly _tag: \"Stack\" }>\n\nexport interface Entry {\n readonly ref: PullRequestRef\n readonly membership: Option.Option<Membership>\n}\n\n/** `first`, `middle` and `last` draw a Stack's boundary; `bullet` is an ordinary pull request. */\nexport type Marker = \"bullet\" | \"first\" | \"middle\" | \"last\"\n\n/** How the line under a row continues: to the next attached member, to unattached members, or not. */\nexport type Connector = \"continues\" | \"open\" | \"none\"\n\nexport type Row<E extends Entry> =\n | {\n readonly _tag: \"PullRequest\"\n readonly entry: E\n readonly marker: Marker\n readonly connector: Connector\n }\n | { readonly _tag: \"Gap\"; readonly count: number }\n\ninterface Placed {\n readonly index: number\n readonly position: number\n readonly size: number\n}\n\n/** Where one entry sits within its Stack's attached members. */\ninterface Place {\n readonly current: Placed\n readonly previous: Option.Option<Placed>\n readonly first: boolean\n readonly last: boolean\n readonly attached: number\n}\n\ninterface Reported {\n readonly index: number\n readonly url: string\n readonly stack: StackMembership\n}\n\nconst stackOf = (entry: Entry): Option.Option<StackMembership> =>\n Option.filter(entry.membership, (membership) => membership._tag === \"Stack\")\n\nconst urlsOf = (stack: StackMembership): string[] => stack.members.map((member) => member.url)\n\nfunction reportsById(entries: readonly Entry[]): Map<string, Reported[]> {\n const byId = new Map<string, Reported[]>()\n\n for (const [index, entry] of entries.entries()) {\n for (const stack of Option.toArray(stackOf(entry))) {\n byId.set(stack.id, [...(byId.get(stack.id) ?? []), { index, stack, url: entry.ref.url }])\n }\n }\n\n return byId\n}\n\n/** Every Stack ID that lists each pull request, across all reported memberships. */\nfunction claims(byId: ReadonlyMap<string, readonly Reported[]>): Map<string, Set<string>> {\n const claimed = new Map<string, Set<string>>()\n\n for (const [id, reports] of byId) {\n for (const url of reports.flatMap((report) => urlsOf(report.stack))) {\n claimed.set(url, new Set([...(claimed.get(url) ?? []), id]))\n }\n }\n\n return claimed\n}\n\nfunction agrees(\n reports: readonly Reported[],\n entries: readonly Entry[],\n claimed: ReadonlyMap<string, ReadonlySet<string>>,\n): boolean {\n const members = Option.match(Arr.head(reports), {\n onNone: (): string[] => [],\n onSome: (report) => urlsOf(report.stack),\n })\n\n const listed = new Set(members)\n const attachedMembers = entries.filter((entry) => listed.has(entry.ref.url))\n\n return (\n listed.size === members.length &&\n reports.every((report) => urlsOf(report.stack).join(\"\\n\") === members.join(\"\\n\")) &&\n members.every((url) => (claimed.get(url) ?? new Set()).size === 1) &&\n attachedMembers.length === reports.length\n )\n}\n\nfunction placements(reports: readonly Reported[]): Option.Option<Placed[]> {\n const placed = reports.map((report) => ({\n index: report.index,\n position: urlsOf(report.stack).indexOf(report.url),\n size: report.stack.members.length,\n }))\n\n const adjacent = Arr.zipWith(\n placed,\n placed.slice(1),\n (before: Placed, after: Placed) =>\n after.index === before.index + 1 && after.position > before.position,\n )\n\n const ordered = placed.every((member: Placed) => member.position >= 0) && adjacent.every(Boolean)\n\n return ordered ? Option.some(placed) : Option.none()\n}\n\n/** Each entry that belongs to a consistent Stack, with its place among the attached members. */\nfunction consistentStacks(entries: readonly Entry[]): Map<number, Place> {\n const byId = reportsById(entries)\n const claimed = claims(byId)\n const places = new Map<number, Place>()\n\n for (const reports of byId.values()) {\n const placed = agrees(reports, entries, claimed) ? placements(reports) : Option.none()\n\n for (const group of Option.toArray(placed)) {\n for (const [step, current] of group.entries()) {\n places.set(current.index, {\n attached: group.length,\n current,\n first: step === 0,\n last: step === group.length - 1,\n previous: Arr.get(group, step - 1),\n })\n }\n }\n }\n\n return places\n}\n\nfunction marker(place: Place): Marker {\n const { current } = place\n\n if (place.attached === 1 && current.size > 1) return \"middle\"\n\n if (place.first && current.position === 0) return \"first\"\n\n if (place.last && current.position === current.size - 1) return \"last\"\n\n return \"middle\"\n}\n\nfunction connector(place: Place): Connector {\n if (!place.last) return \"continues\"\n\n return place.current.position < place.current.size - 1 ? \"open\" : \"none\"\n}\n\nfunction stackRows<E extends Entry>(entry: E, place: Place): Row<E>[] {\n const skipped = Option.match(place.previous, {\n onNone: () => 0,\n onSome: (before) => place.current.position - before.position - 1,\n })\n\n const row: Row<E> = {\n _tag: \"PullRequest\",\n connector: connector(place),\n entry,\n marker: marker(place),\n }\n\n return skipped > 0 ? [{ _tag: \"Gap\", count: skipped }, row] : [row]\n}\n\n/** Sidebar rows in attachment order, with Stack markers and gaps where membership is consistent. */\nexport function layout<E extends Entry>(entries: readonly E[]): Row<E>[] {\n const places = consistentStacks(entries)\n\n return entries.flatMap((entry, index) =>\n Option.match(Option.fromNullishOr(places.get(index)), {\n onNone: (): Row<E>[] => [{ _tag: \"PullRequest\", connector: \"none\", entry, marker: \"bullet\" }],\n onSome: (place) => stackRows(entry, place),\n }),\n )\n}\n",
28
28
  "/** Requests to change a session's attachments, shared by the RPC methods and the agent tools. */\nimport { Effect, Option } from \"effect\"\n\nimport type { MonitorApi, SessionView } from \"../application/Monitor.ts\"\nimport type { TrackerApi } from \"../application/Tracker.ts\"\nimport { parsePullRequestInput, type PullRequestInput } from \"../domain/PullRequest.ts\"\nimport { attachedMessage, detachedMessage, type RequestFailure } from \"../messages.ts\"\nimport type { Changed, Layout, View } from \"../rpc.ts\"\n\nexport interface Services {\n readonly tracker: TrackerApi\n readonly monitor: MonitorApi\n}\n\nexport interface Settings {\n readonly layout: Layout\n /** Where this plugin instance runs; bare pull request numbers resolve in its repository. */\n readonly directory: string\n}\n\nexport function toView(view: SessionView, layout: Layout): View {\n return {\n entries: view.entries.map((entry) => ({\n attachedAt: entry.attachedAt,\n membership: Option.getOrNull(entry.membership),\n ref: entry.ref,\n status: entry.status,\n })),\n layout,\n sessionID: view.sessionID,\n }\n}\n\nconst parseTarget = (target: string): Effect.Effect<PullRequestInput, RequestFailure> =>\n Effect.fromResult(parsePullRequestInput(target))\n\n/** Changes a session's attachments for `target` and reports the change. */\nexport type Change = (sessionID: string, target: string) => Effect.Effect<Changed, RequestFailure>\n\nexport interface Requests {\n /**\n * Attaches `target`, with its Stack, then publishes the session's view. Only Stack members not yet\n * known are fetched; `target` itself was fetched while attaching.\n */\n readonly attach: Change\n /** Detaches `target`, then publishes the session's view, fetching only statuses not yet known. */\n readonly detach: Change\n}\n\nexport function requests({ monitor, tracker }: Services, settings: Settings): Requests {\n return {\n attach: (sessionID, target) =>\n Effect.gen(function* () {\n const attached = yield* tracker.attach(\n sessionID,\n yield* parseTarget(target),\n settings.directory,\n )\n\n const view = yield* monitor.attached(sessionID, attached.ref, attached.report)\n\n return { message: attachedMessage(attached), view: toView(view, settings.layout) }\n }),\n detach: (sessionID, target) =>\n Effect.gen(function* () {\n const removal = yield* tracker.detach(sessionID, yield* parseTarget(target))\n const view = yield* monitor.show(sessionID)\n\n return { message: detachedMessage(removal, target), view: toView(view, settings.layout) }\n }),\n }\n}\n",
29
29
  "/** Messages for people: results and failures of tracker requests, shared by tools and the terminal. */\nimport { Match, Option } from \"effect\"\n\nimport type { AttachFailure, Attached } from \"./application/Tracker.ts\"\nimport type { InvalidPullRequestInput, PullRequestRef } from \"./domain/PullRequest.ts\"\nimport type { Diagnostic } from \"./domain/Snapshot.ts\"\nimport type { AmbiguousPullRequestNumber, Removal } from \"./domain/Tracking.ts\"\nimport type { StoredStateInvalid } from \"./ports/TrackingRepository.ts\"\n\nexport type RequestFailure =\n | AttachFailure\n | AmbiguousPullRequestNumber\n | InvalidPullRequestInput\n | StoredStateInvalid\n\nconst diagnosticMessages: Record<Diagnostic, string> = {\n AuthenticationRequired: \"GitHub needs you to sign in: run `gh auth login`, or set GH_TOKEN.\",\n GitHubCliMissing: \"Install the GitHub CLI (`gh`), or set GH_TOKEN.\",\n GitHubUnavailable: \"GitHub is not responding right now. Try again shortly.\",\n InvalidResponse: \"GitHub returned a response the tracker could not read.\",\n NotFound: \"The pull request does not exist, or your GitHub account cannot see it.\",\n}\n\nconst list = (refs: readonly PullRequestRef[]): string => {\n const labels = refs.map((ref) => ref.label)\n\n return labels.length <= 2\n ? labels.join(\" and \")\n : `${labels.slice(0, -1).join(\", \")}, and ${labels.at(-1) ?? \"\"}`\n}\n\nexport function failureMessage(failure: RequestFailure): string {\n return Match.valueTags(failure, {\n AmbiguousPullRequestNumber: ({ matches, number }) =>\n `#${String(number)} matches ${list(matches)}. Use the pull request URL instead.`,\n AttachmentLimitReached: ({ limit, requested }) =>\n `A session can track at most ${String(limit)} pull requests; this would make ${String(requested)}.`,\n GitHubFailure: ({ diagnostic }) => diagnosticMessages[diagnostic],\n InvalidPullRequestInput: () =>\n \"Expected a pull request URL, such as github.com/owner/repository/pull/123, or a pull request number.\",\n PullRequestUnavailable: ({ diagnostic, url }) => `${url}: ${diagnosticMessages[diagnostic]}`,\n RepositoryUnavailable: () =>\n \"This session's directory is not a GitHub repository that `gh` can see. Use the pull request URL instead.\",\n StackIncomplete: ({ url }) =>\n `GitHub returned only part of the Stack of ${url}, so nothing was attached. Try again later.`,\n StoredStateInvalid: () =>\n \"The tracker's saved state for this session cannot be read. It has been left unchanged.\",\n })\n}\n\nexport function attachedMessage(attached: Attached): string {\n const label = attached.ref.label\n\n if (!attached.changed) return `${label} is already attached.`\n\n return attached.stackSize > 1\n ? `Attached ${label} with the rest of its Stack (${String(attached.stackSize)} pull requests).`\n : `Attached ${label}.`\n}\n\nexport function detachedMessage(removal: Removal, target: string): string {\n return Option.match(removal.removed, {\n onNone: () => `${target} is not attached.`,\n onSome: (ref: PullRequestRef) => `Detached ${ref.label}.`,\n })\n}\n",
30
30
  "import type { RpcHandlers } from \"@opencode/plugin/effect/rpc\"\nimport { Effect } from \"effect\"\n\nimport type { SessionView } from \"../application/Monitor.ts\"\nimport { failureMessage } from \"../messages.ts\"\nimport type { PullRequestTracker, View } from \"../rpc.ts\"\nimport { requests, toView, type Services, type Settings } from \"./Requests.ts\"\n\n/** The RPC methods, over the tracker and monitor of this plugin instance. */\nexport function handlers(services: Services, settings: Settings): RpcHandlers<PullRequestTracker> {\n const viewOf = (view: SessionView): View => toView(view, settings.layout)\n const { attach, detach } = requests(services, settings)\n\n return {\n attach: ({ sessionID, target }, context) =>\n attach(sessionID, target).pipe(\n Effect.mapError(failureMessage),\n Effect.mapError((message) => context.error(\"rejected\", message, { message })),\n ),\n detach: ({ sessionID, target }, context) =>\n detach(sessionID, target).pipe(\n Effect.mapError(failureMessage),\n Effect.mapError((message) => context.error(\"rejected\", message, { message })),\n ),\n list: ({ sessionID }, context) =>\n services.monitor.view(sessionID).pipe(\n Effect.map(viewOf),\n Effect.mapError(failureMessage),\n Effect.mapError((message) => context.error(\"rejected\", message, { message })),\n ),\n refresh: ({ sessionID }, context) =>\n services.monitor.refresh(sessionID).pipe(\n Effect.map(viewOf),\n Effect.mapError(failureMessage),\n Effect.mapError((message) => context.error(\"rejected\", message, { message })),\n ),\n }\n}\n",
31
- "import type { ToolDomain } from \"@opencode/plugin/effect/tool\"\nimport { Tool } from \"@opencode/schema/tool\"\nimport { Effect, Schema, type Scope } from \"effect\"\n\nimport { appearance } from \"../domain/Appearance.ts\"\nimport { failureMessage, type RequestFailure } from \"../messages.ts\"\nimport { requests, type Change, type Services, type Settings } from \"./Requests.ts\"\n\nconst options = { codemode: true, namespace: \"pr\", pinned: true } as const\n\n/** A pull request URL or number. Agents may pass the number as text or as a JSON integer. */\nexport const PullRequestArgument = Schema.Struct({\n pull_request: Schema.Union([Schema.String, Schema.Int]).annotate({\n description:\n \"A pull request URL, such as github.com/owner/repository/pull/123, or a number in this repository\",\n }),\n})\n\nexport type PullRequestArgument = typeof PullRequestArgument.Type\n\ntype PullRequestArgumentSchema = typeof PullRequestArgument\n\n/** The argument as the text the tracker parses. */\nexport const targetOf = ({ pull_request }: PullRequestArgument): string => String(pull_request)\n\nconst NoArguments = Schema.Struct({})\n\ntype NoArguments = typeof NoArguments\n\nconst asToolError = (failure: RequestFailure): Tool.Error =>\n new Tool.Error({ message: failureMessage(failure) })\n\nconst listTool = ({ monitor }: Services): Tool.Info<NoArguments> => ({\n description: \"List the pull requests attached to this session, with their status.\",\n execute: (_input, context) =>\n monitor.view(context.sessionID).pipe(\n Effect.map((view) => ({\n content:\n view.entries.length === 0\n ? \"No pull requests are attached to this session.\"\n : view.entries\n .map((entry) => `- ${entry.ref.url} (${appearance(entry.status).label})`)\n .join(\"\\n\"),\n })),\n Effect.mapError(asToolError),\n ),\n input: NoArguments,\n name: \"list\",\n options,\n})\n\nconst changeTool = (\n name: string,\n description: string,\n change: Change,\n): Tool.Info<PullRequestArgumentSchema> => ({\n description,\n execute: (argument, context) =>\n change(context.sessionID, targetOf(argument)).pipe(\n Effect.map((changed) => ({ content: changed.message })),\n Effect.mapError(asToolError),\n ),\n input: PullRequestArgument,\n name,\n options,\n})\n\n/** Registers the `pr` tools, which act on the calling session. */\nexport function registerTools(\n tools: ToolDomain,\n services: Services,\n settings: Settings,\n): Effect.Effect<unknown, never, Scope.Scope> {\n return tools.transform((editor) => {\n editor.namespace({\n description: \"Pull requests attached to this session and shown in its sidebar\",\n name: \"pr\",\n })\n const changes = requests(services, settings)\n\n editor.add(listTool(services))\n editor.add(\n changeTool(\n \"attach\",\n \"Attach a pull request to this session. Attaching a GitHub Stack member attaches the whole Stack.\",\n changes.attach,\n ),\n )\n editor.add(\n changeTool(\n \"detach\",\n \"Detach a pull request from this session. Other members of its Stack stay attached.\",\n changes.detach,\n ),\n )\n })\n}\n",
31
+ "import type { ToolDomain } from \"@opencode/plugin/effect/tool\"\nimport { Tool } from \"@opencode/schema/tool\"\nimport { Effect, Schema, type Scope } from \"effect\"\n\nimport { appearance } from \"../domain/Appearance.ts\"\nimport { failureMessage, type RequestFailure } from \"../messages.ts\"\nimport { requests, type Change, type Services, type Settings } from \"./Requests.ts\"\n\nconst options = { codemode: true, namespace: \"pr\", pinned: true } as const\n\n/**\n * A pull request URL or number. Agents may pass the number as text or as a JSON number.\n *\n * OpenCode validates tool input with its own copy of effect, where checks such as `Schema.Int`\n * reject every value, so tool input schemas use only unchecked types and the tracker validates.\n */\nexport const PullRequestArgument = Schema.Struct({\n pull_request: Schema.Union([Schema.String, Schema.Number]).annotate({\n description:\n \"A pull request URL, such as github.com/owner/repository/pull/123, or a number in this repository\",\n }),\n})\n\nexport type PullRequestArgument = typeof PullRequestArgument.Type\n\ntype PullRequestArgumentSchema = typeof PullRequestArgument\n\n/** The argument as the text the tracker parses. */\nexport const targetOf = ({ pull_request }: PullRequestArgument): string => String(pull_request)\n\nconst NoArguments = Schema.Struct({})\n\ntype NoArguments = typeof NoArguments\n\nconst asToolError = (failure: RequestFailure): Tool.Error =>\n new Tool.Error({ message: failureMessage(failure) })\n\nconst listTool = ({ monitor }: Services): Tool.Info<NoArguments> => ({\n description: \"List the pull requests attached to this session, with their status.\",\n execute: (_input, context) =>\n monitor.view(context.sessionID).pipe(\n Effect.map((view) => ({\n content:\n view.entries.length === 0\n ? \"No pull requests are attached to this session.\"\n : view.entries\n .map((entry) => `- ${entry.ref.url} (${appearance(entry.status).label})`)\n .join(\"\\n\"),\n })),\n Effect.mapError(asToolError),\n ),\n input: NoArguments,\n name: \"list\",\n options,\n})\n\nconst changeTool = (\n name: string,\n description: string,\n change: Change,\n): Tool.Info<PullRequestArgumentSchema> => ({\n description,\n execute: (argument, context) =>\n change(context.sessionID, targetOf(argument)).pipe(\n Effect.map((changed) => ({ content: changed.message })),\n Effect.mapError(asToolError),\n ),\n input: PullRequestArgument,\n name,\n options,\n})\n\n/** Registers the `pr` tools, which act on the calling session. */\nexport function registerTools(\n tools: ToolDomain,\n services: Services,\n settings: Settings,\n): Effect.Effect<unknown, never, Scope.Scope> {\n return tools.transform((editor) => {\n editor.namespace({\n description: \"Pull requests attached to this session and shown in its sidebar\",\n name: \"pr\",\n })\n const changes = requests(services, settings)\n\n editor.add(listTool(services))\n editor.add(\n changeTool(\n \"attach\",\n \"Attach a pull request to this session. Attaching a GitHub Stack member attaches the whole Stack.\",\n changes.attach,\n ),\n )\n editor.add(\n changeTool(\n \"detach\",\n \"Detach a pull request from this session. Other members of its Stack stay attached.\",\n changes.detach,\n ),\n )\n })\n}\n",
32
32
  "import { Match } from \"effect\"\n\nimport type { Diagnostic, PullRequestState, Status } from \"./Snapshot.ts\"\n\nexport type Tone = \"green\" | \"yellow\" | \"red\" | \"purple\" | \"gray\"\n\nexport interface Appearance {\n readonly tone: Tone\n readonly label: string\n readonly strikethrough: boolean\n readonly stale: boolean\n}\n\ntype Open = Extract<PullRequestState, { readonly _tag: \"Open\" }>\n\nconst diagnosticLabels: Record<Diagnostic, string> = {\n AuthenticationRequired: \"authenticate\",\n GitHubCliMissing: \"install gh\",\n GitHubUnavailable: \"GitHub unavailable\",\n InvalidResponse: \"invalid response\",\n NotFound: \"inaccessible\",\n}\n\nconst shown = (tone: Tone, label: string, strikethrough = false): Appearance => ({\n label,\n stale: false,\n strikethrough,\n tone,\n})\n\n/** Precedence: conflict, failed CI, draft, pending CI, behind, then passed or no checks. */\nfunction openAppearance(open: Open): Appearance {\n if (open.mergeability === \"conflicting\") return shown(\"red\", \"conflict\")\n\n if (open.ci === \"failed\") return shown(\"red\", \"failed\")\n\n if (open.draft) return shown(\"gray\", \"draft\")\n\n if (open.ci === \"pending\") return shown(\"yellow\", \"pending\")\n\n if (open.behind) return shown(\"yellow\", \"behind\")\n\n return open.ci === \"passed\" ? shown(\"green\", \"passed\") : shown(\"gray\", \"no checks\")\n}\n\nfunction stateAppearance(state: PullRequestState): Appearance {\n return Match.valueTags(state, {\n Closed: () => shown(\"red\", \"closed\", true),\n Merged: () => shown(\"purple\", \"merged\", true),\n Open: openAppearance,\n })\n}\n\nfunction markStale(fresh: Appearance): Appearance {\n return { label: fresh.label, stale: true, strikethrough: fresh.strikethrough, tone: fresh.tone }\n}\n\nexport function appearance(status: Status): Appearance {\n return Match.valueTags(status, {\n Fresh: ({ snapshot }) => stateAppearance(snapshot.state),\n Pending: () => shown(\"gray\", \"unavailable\"),\n Stale: ({ snapshot }) => markStale(stateAppearance(snapshot.state)),\n Unavailable: ({ diagnostic }) => shown(\"gray\", diagnosticLabels[diagnostic]),\n })\n}\n"
33
33
  ],
34
- "mappings": "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",
35
- "debugId": "7CB75665EE3FC22164756E2164756E21",
34
+ "mappings": "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",
35
+ "debugId": "3A0BF0214CF1B17464756E2164756E21",
36
36
  "names": []
37
37
  }
package/dist/tui.js CHANGED
@@ -209,7 +209,7 @@ function agrees(reports, entries, claimed) {
209
209
  const attachedMembers = entries.filter((entry) => listed.has(entry.ref.url));
210
210
  return listed.size === members.length && reports.every((report) => urlsOf(report.stack).join(`
211
211
  `) === members.join(`
212
- `)) && members.every((url) => (claimed.get(url) ?? new Set).size === 1) && attachedMembers.length === reports.length;
212
+ `)) && members.every((url) => (claimed.get(url) ?? new Set).size === 1) && reports.every((report) => listed.has(report.url)) && attachedMembers.length === reports.length;
213
213
  }
214
214
  function placements(reports) {
215
215
  const placed = reports.map((report) => ({
@@ -221,12 +221,18 @@ function placements(reports) {
221
221
  const ordered = placed.every((member) => member.position >= 0) && adjacent.every(Boolean);
222
222
  return ordered ? Option2.some(placed) : Option2.none();
223
223
  }
224
- function consistentStacks(entries) {
224
+ function agreedReports(entries) {
225
225
  const byId = reportsById(entries);
226
226
  const claimed = claims(byId);
227
+ return [...byId.values()].filter((reports) => agrees(reports, entries, claimed));
228
+ }
229
+ function agreedStacks(entries) {
230
+ return agreedReports(entries).flatMap((reports) => Option2.toArray(Option2.map(Arr.head(reports), (report) => report.stack)));
231
+ }
232
+ function consistentStacks(entries) {
227
233
  const places = new Map;
228
- for (const reports of byId.values()) {
229
- const placed = agrees(reports, entries, claimed) ? placements(reports) : Option2.none();
234
+ for (const reports of agreedReports(entries)) {
235
+ const placed = placements(reports);
230
236
  for (const group of Option2.toArray(placed)) {
231
237
  for (const [step, current] of group.entries()) {
232
238
  places.set(current.index, {
@@ -1214,4 +1220,4 @@ export {
1214
1220
  tui_default as default
1215
1221
  };
1216
1222
 
1217
- //# debugId=B041D0C9BE2BA06064756E2164756E21
1223
+ //# debugId=DA9B9221B1090ED864756E2164756E21