@blogic-cz/agent-tools 0.17.2 → 0.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -290,6 +290,8 @@ Zero reported checks is a state, not an error: `gh pr checks` exits nonzero on a
290
290
 
291
291
  `pr feedback` returns the whole inventory by default. Narrow it with `--only visible-open|needs-human-reply|current-head` (narrowed filters drop issue comments), drop bots with `--exclude-authors github-actions,dependabot`, and read `omitted` for what each filter removed. Base64 report payloads in bodies are replaced with `[base64 payload omitted]`; pass `--raw-bodies` to keep them. `review-triage --omit reviews,inlineComments` trims a repeated snapshot to the verdict and check state, and lists what it left out in `omittedSections`.
292
292
 
293
+ An empty thread list can mean the reviewer is still drafting: comments inside a pending review are invisible to the API until the reviewer submits, and they keep their draft time in `createdAt`. `pr threads` and `pr comments` therefore also report `reviewId` and `updatedAt`. Equal `reviewId` values mark one submitted batch; join that id to the matching `reviews[].submittedAt` from `pr feedback` for the exact time the batch became visible. `updatedAt` is a cheap proxy for the same moment, but it also moves when someone edits the comment. Never conclude from an older `createdAt` that an earlier scan missed anything.
294
+
293
295
  Call the wrappers through `bun run --silent <tool>` in repos that expose them as package scripts; without `--silent` every invocation echoes the resolved command line into the agent's context.
294
296
 
295
297
  `audit-tool` reads the same SQLite file the wrappers write to. By default that file lives at `~/.agent-tools/audit.sqlite`, and you can override both path and retention per repo with the global `audit` config section.
@@ -30,7 +30,7 @@ export declare class GitHubAuthError extends GitHubAuthError_base {
30
30
  }
31
31
  declare const GitHubMergeError_base: Schema.Class<GitHubMergeError, Schema.TaggedStruct<"GitHubMergeError", {
32
32
  readonly message: Schema.String;
33
- readonly reason: Schema.Literals<readonly ["conflicts", "checks_failing", "branch_protected", "unknown"]>;
33
+ readonly reason: Schema.Literals<readonly ["conflicts", "checks_failing", "branch_protected", "merge_queue", "unknown"]>;
34
34
  readonly hint: Schema.optionalKey<Schema.String>;
35
35
  readonly nextCommand: Schema.optionalKey<Schema.String>;
36
36
  readonly retryable: Schema.optionalKey<Schema.Boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/gh-tool/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;;;;;;;AAEhC,qBAAa,kBAAmB,SAAQ,uBAWvC;CAAG;;;;;;;;;AAEJ,qBAAa,mBAAoB,SAAQ,wBAUxC;CAAG;;;;;;;AAEJ,qBAAa,eAAgB,SAAQ,oBAKnC;CAAG;;;;;;;;AAEL,qBAAa,gBAAiB,SAAQ,qBAMpC;CAAG;;;;;;;;AAEL,qBAAa,kBAAmB,SAAQ,uBASvC;CAAG;AAEJ,MAAM,MAAM,kBAAkB,GAC1B,kBAAkB,GAClB,mBAAmB,GACnB,eAAe,GACf,gBAAgB,GAChB,kBAAkB,CAAC"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/gh-tool/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;;;;;;;;;;AAEhC,qBAAa,kBAAmB,SAAQ,uBAWvC;CAAG;;;;;;;;;AAEJ,qBAAa,mBAAoB,SAAQ,wBAUxC;CAAG;;;;;;;AAEJ,qBAAa,eAAgB,SAAQ,oBAKnC;CAAG;;;;;;;;AAEL,qBAAa,gBAAiB,SAAQ,qBAYpC;CAAG;;;;;;;;AAEL,qBAAa,kBAAmB,SAAQ,uBASvC;CAAG;AAEJ,MAAM,MAAM,kBAAkB,GAC1B,kBAAkB,GAClB,mBAAmB,GACnB,eAAe,GACf,gBAAgB,GAChB,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/pr/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/pr/core.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/pr/review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAEV,YAAY,EAGZ,iBAAiB,EACjB,aAAa,EACb,YAAY,EAEb,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA2b5C;;;GAGG;AACH,eAAO,MAAM,YAAY,uQAcvB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,aAAa,8OAkCxB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,kBAAkB,qPAmC7B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,YAAY,sSA+CvB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;uHAaxB,CAAC;AAEH,eAAO,MAAM,uBAAuB,oOAgBlC,CAAC;AAEH,eAAO,MAAM,gBAAgB,uLA0C3B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;uHA4CjC,CAAC;AAeH;;GAEG;AACH,eAAO,MAAM,cAAc;;;uHA4FzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;uHA0FjC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa;;;uHAWxB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;uHAiD9B,CAAC;AAeH,eAAO,MAAM,sBAAsB;;;;uHA8CjC,CAAC"}
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/pr/review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAEV,YAAY,EAGZ,iBAAiB,EACjB,aAAa,EACb,YAAY,EAEb,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAic5C;;;GAGG;AACH,eAAO,MAAM,YAAY,uQAcvB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,aAAa,8OAoCxB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,kBAAkB,qPAmC7B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,YAAY,sSA+CvB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;uHAaxB,CAAC;AAEH,eAAO,MAAM,uBAAuB,oOAgBlC,CAAC;AAEH,eAAO,MAAM,gBAAgB,uLA0C3B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;uHA4CjC,CAAC;AAeH;;GAEG;AACH,eAAO,MAAM,cAAc;;;uHA4FzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;uHA0FjC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa;;;uHAWxB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;uHAiD9B,CAAC;AAeH,eAAO,MAAM,sBAAsB;;;;uHA8CjC,CAAC"}
@@ -46,6 +46,8 @@ export type ReviewThread = {
46
46
  isVisibleOpen: boolean;
47
47
  lastReplyAuthor: string | null;
48
48
  lastReplyAt: string | null;
49
+ reviewId: number | null;
50
+ updatedAt: string | null;
49
51
  /** Thread ids of exact duplicates collapsed into this representative (encounter order). */
50
52
  duplicateThreadIds: string[];
51
53
  };
@@ -59,6 +61,14 @@ export type ReviewComment = {
59
61
  path: string;
60
62
  line: number;
61
63
  createdAt: string;
64
+ reviewId: number | null;
65
+ /**
66
+ * Last change to the comment. A comment drafted inside a pending review keeps its draft time in
67
+ * `createdAt` and carries the submit time here until someone edits it, so this is a proxy for
68
+ * when the comment became visible. Join `reviewId` to the review's `submittedAt` for the exact
69
+ * time.
70
+ */
71
+ updatedAt: string;
62
72
  };
63
73
  export declare const IssueCommentId: Schema.brand<Schema.Int, "IssueCommentId">;
64
74
  export type IssueCommentId = typeof IssueCommentId.Type;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/gh-tool/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/gh-tool/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/gh-tool/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAqB,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAI3D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAsC,YAAY,EAAE,MAAM,SAAS,CAAC;AAwChF,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAqKF,eAAO,MAAM,gBAAgB;cACjB,MAAM;SACX,MAAM;YACH,aAAa,CAAC,MAAM,CAAC;UACvB,MAAM,GAAG,IAAI;;;;;;;gGAsBnB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAKF,eAAO,MAAM,kBAAkB;cACnB,MAAM;SACX,MAAM;UACL,MAAM,GAAG,IAAI;6GAyBnB,CAAC;AAKH,eAAO,MAAM,qBAAqB;cACtB,MAAM;SACX,MAAM;UACL,MAAM,GAAG,IAAI;iBACN,WAAW,CAAC,MAAM,CAAC;kHAShC,CAAC;AAMH,eAAO,MAAM,gBAAgB,GAC3B,OAAO,MAAM,EACb,YAAY;IACV,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;CAClF,EACD,aAAa,MAAM,GAAG,IAAI,EAC1B,QAAQ,OAAO,EACf,gBAAgB,MAAM;;;;;;;;;;CAiBtB,CAAC;AAmHH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAsBvD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAa5D;AAgBD,eAAO,MAAM,kBAAkB,GAAI,SAAS,SAAS,QAAQ,EAAE,KAAG,YA0CjE,CAAC;AA0DF,eAAO,MAAM,YAAY;WAChB,MAAM;SACR,MAAM;YACH,MAAM,GAAG,IAAI;sBACH,SAAS,MAAM,EAAE,GAAG,IAAI;qBACzB,OAAO;eACb,OAAO;YACV,MAAM;UACR,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;gGA8DnB,CAAC;AAMH,eAAO,MAAM,mBAAmB;;;;;;;oGA8C/B,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;oGAaqD,CAAC;AAEtF,eAAO,MAAM,mBAAmB;;;;oGAa+C,CAAC;AAEhF,eAAO,MAAM,mBAAmB;;;;;oGAsB2D,CAAC;AAE5F,eAAO,MAAM,oBAAoB;;;;;oGAiBoD,CAAC;AAEtF,eAAO,MAAM,qBAAqB;;;;oGAamC,CAAC;AAEtE,eAAO,MAAM,kBAAkB;;;;;;oGAgD6C,CAAC;AAE7E,eAAO,MAAM,oBAAoB;;;;;;oGA4BiE,CAAC;AAEnG,eAAO,MAAM,sBAAsB;;;;;;;oGAwClC,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;;;oGAyBtC,CAAC"}
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/gh-tool/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAY,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIlD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAsC,YAAY,EAAE,MAAM,SAAS,CAAC;AAwChF,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAqKF,eAAO,MAAM,gBAAgB;cACjB,MAAM;SACX,MAAM;YACH,aAAa,CAAC,MAAM,CAAC;UACvB,MAAM,GAAG,IAAI;;;;;;;gGAsBnB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAKF,eAAO,MAAM,kBAAkB;cACnB,MAAM;SACX,MAAM;UACL,MAAM,GAAG,IAAI;6GAyBnB,CAAC;AAKH,eAAO,MAAM,qBAAqB;cACtB,MAAM;SACX,MAAM;UACL,MAAM,GAAG,IAAI;iBACN,WAAW,CAAC,MAAM,CAAC;kHAShC,CAAC;AAMH,eAAO,MAAM,gBAAgB,GAC3B,OAAO,MAAM,EACb,YAAY;IACV,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;CAClF,EACD,aAAa,MAAM,GAAG,IAAI,EAC1B,QAAQ,OAAO,EACf,gBAAgB,MAAM;;;;;;;;;;CAiBtB,CAAC;AAmHH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAsBvD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAa5D;AAgBD,eAAO,MAAM,kBAAkB,GAAI,SAAS,SAAS,QAAQ,EAAE,KAAG,YA0CjE,CAAC;AA0DF,eAAO,MAAM,YAAY;WAChB,MAAM;SACR,MAAM;YACH,MAAM,GAAG,IAAI;sBACH,SAAS,MAAM,EAAE,GAAG,IAAI;qBACzB,OAAO;eACb,OAAO;YACV,MAAM;UACR,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;gGA8DnB,CAAC;AAMH,eAAO,MAAM,mBAAmB;;;;;;;oGA8C/B,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;oGAaqD,CAAC;AAEtF,eAAO,MAAM,mBAAmB;;;;oGAa+C,CAAC;AAEhF,eAAO,MAAM,mBAAmB;;;;;oGAsB2D,CAAC;AAE5F,eAAO,MAAM,oBAAoB;;;;;oGAiBoD,CAAC;AAEtF,eAAO,MAAM,qBAAqB;;;;oGAamC,CAAC;AAEtE,eAAO,MAAM,kBAAkB;;;;;;oGAgD6C,CAAC;AAE7E,eAAO,MAAM,oBAAoB;;;;;;oGA4BiE,CAAC;AAEnG,eAAO,MAAM,sBAAsB;;;;;;;oGAwClC,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;;;oGAyBtC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logs-tool/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAQ,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAW,MAAM,EAAyB,MAAM,QAAQ,CAAC;AAYhE,OAAO,EAAE,aAAa,EAA6C,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,eAAe,EAAsD,MAAM,UAAU,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAoB,MAAM,WAAW,CAAC;AAyM1D,eAAO,MAAM,GAAG,6KAEd,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logs-tool/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAQ,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAyB,MAAM,QAAQ,CAAC;AAavD,OAAO,EAAE,aAAa,EAA6C,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,eAAe,EAAsD,MAAM,UAAU,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAoB,MAAM,WAAW,CAAC;AAyM1D,eAAO,MAAM,GAAG,6KAEd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session-tool/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAY,OAAO,EAAQ,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAW,MAAM,EAAiB,MAAM,QAAQ,CAAC;AAQxD,OAAO,EAAE,aAAa,EAAsB,MAAM,UAAU,CAAC;AAE7D,OAAO,EAAc,cAAc,EAAiC,MAAM,WAAW,CAAC;AAiTtF,eAAO,MAAM,GAAG,8JAEd,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session-tool/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAY,OAAO,EAAQ,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,MAAM,EAAiB,MAAM,QAAQ,CAAC;AAQ/C,OAAO,EAAE,aAAa,EAAsB,MAAM,UAAU,CAAC;AAE7D,OAAO,EAAc,cAAc,EAAiC,MAAM,WAAW,CAAC;AAiTtF,eAAO,MAAM,GAAG,8JAEd,CAAC"}
@@ -1,7 +1,9 @@
1
1
  import { Flag } from "effect/unstable/cli";
2
+ import { Effect } from "effect";
2
3
  import type { BaseResult, OutputFormat } from "./types";
3
4
  export declare const formatOption: Flag.Flag<"json" | "toon">;
4
5
  export declare function formatOutput<T extends BaseResult>(result: T, format: OutputFormat): string;
5
6
  export declare function formatAny<T>(data: T, format: OutputFormat): string;
6
- export declare const logFormatted: <T>(data: T, format: OutputFormat) => import("effect/Effect").Effect<void, never, never>;
7
+ export declare const logText: (text: string) => Effect.Effect<undefined, never, never>;
8
+ export declare const logFormatted: <T>(data: T, format: OutputFormat) => Effect.Effect<undefined, never, never>;
7
9
  //# sourceMappingURL=format.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/shared/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAI3C,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAExD,eAAO,MAAM,YAAY,4BAGxB,CAAC;AAEF,wBAAgB,YAAY,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAK1F;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAKlE;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,MAAM,CAAC,EAAE,QAAQ,YAAY,uDACvB,CAAC"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/shared/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAExD,eAAO,MAAM,YAAY,4BAGxB,CAAC;AAEF,wBAAgB,YAAY,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAK1F;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAKlE;AAOD,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,2CAShC,CAAC;AAEL,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,MAAM,CAAC,EAAE,QAAQ,YAAY,2CAAqC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export type { BaseResult, CommandOptions, CommandResult, Environment, OutputFormat, ToolResult, } from "./types";
2
- export { formatAny, formatOption, formatOutput, logFormatted } from "./format";
2
+ export { formatAny, formatOption, formatOutput, logFormatted, logText } from "./format";
3
3
  export { expandPath, runCommand } from "./bun";
4
4
  export { commonArgOptions, parseCommonArgs } from "./cli";
5
5
  export { renderCauseToStderr } from "./error-renderer";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,GACX,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE/E,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAIzF,eAAO,MAAM,OAAO,QAAc,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE5F,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhE,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,GACX,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAIzF,eAAO,MAAM,OAAO,QAAc,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE5F,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhE,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blogic-cz/agent-tools",
3
- "version": "0.17.2",
3
+ "version": "0.18.1",
4
4
  "description": "CLI tools for AI coding agent workflows — GitHub, database, Kubernetes, Azure DevOps, logs, sessions, and audit",
5
5
  "keywords": [
6
6
  "agent",
@@ -1,12 +1,13 @@
1
1
  #!/usr/bin/env bun
2
2
  import { Command, Flag } from "effect/unstable/cli";
3
3
  import { BunRuntime, BunServices } from "@effect/platform-bun";
4
- import { Console, Effect, Layer, Option } from "effect";
4
+ import { Effect, Layer, Option } from "effect";
5
5
 
6
6
  import {
7
7
  makeSchemaCommand,
8
8
  formatOption,
9
9
  formatOutput,
10
+ logText,
10
11
  renderCauseToStderr,
11
12
  VERSION,
12
13
  } from "#shared";
@@ -58,7 +59,7 @@ const listCommand = Command.make(
58
59
  data: filteredEntries,
59
60
  };
60
61
 
61
- yield* Console.log(formatOutput(result, format));
62
+ yield* logText(formatOutput(result, format));
62
63
  }),
63
64
  ).pipe(Command.withDescription("List recent audit log entries"));
64
65
 
@@ -83,7 +84,7 @@ const purgeCommand = Command.make(
83
84
  data: { deleted, days },
84
85
  };
85
86
 
86
- yield* Console.log(formatOutput(result, format));
87
+ yield* logText(formatOutput(result, format));
87
88
  }),
88
89
  ).pipe(Command.withDescription("Delete old audit log entries"));
89
90
 
@@ -1,13 +1,14 @@
1
1
  #!/usr/bin/env bun
2
2
  import { Command, Flag } from "effect/unstable/cli";
3
3
  import { BunRuntime, BunServices } from "@effect/platform-bun";
4
- import { Console, Effect, Layer, Option } from "effect";
4
+ import { Effect, Layer, Option } from "effect";
5
5
 
6
6
  import {
7
7
  makeSchemaCommand,
8
8
  formatAny,
9
9
  formatOption,
10
10
  formatOutput,
11
+ logText,
11
12
  renderCauseToStderr,
12
13
  VERSION,
13
14
  } from "#shared";
@@ -46,7 +47,7 @@ const buildTimelineCommand = Command.make(
46
47
  ({ buildId, format, profile: _profile }) =>
47
48
  Effect.gen(function* () {
48
49
  const result = yield* getBuildTimeline(buildId);
49
- yield* Console.log(formatAny(result, format));
50
+ yield* logText(formatAny(result, format));
50
51
  }),
51
52
  ).pipe(Command.withDescription("Get build timeline with all records (jobs, stages, tasks)"));
52
53
 
@@ -59,7 +60,7 @@ const buildFailedJobsCommand = Command.make(
59
60
  ({ buildId, format, profile: _profile }) =>
60
61
  Effect.gen(function* () {
61
62
  const failedJobs = yield* findFailedJobs(buildId);
62
- yield* Console.log(formatAny({ buildId, failedJobs }, format));
63
+ yield* logText(formatAny({ buildId, failedJobs }, format));
63
64
  }),
64
65
  ).pipe(Command.withDescription("Find failed or canceled jobs in a build"));
65
66
 
@@ -72,7 +73,7 @@ const buildLogsCommand = Command.make(
72
73
  ({ buildId, format, profile: _profile }) =>
73
74
  Effect.gen(function* () {
74
75
  const result = yield* getBuildLogs(buildId);
75
- yield* Console.log(formatAny(result, format));
76
+ yield* logText(formatAny(result, format));
76
77
  }),
77
78
  ).pipe(Command.withDescription("Get list of build logs"));
78
79
 
@@ -86,7 +87,7 @@ const buildLogContentCommand = Command.make(
86
87
  ({ buildId, format, logId, profile: _profile }) =>
87
88
  Effect.gen(function* () {
88
89
  const content = yield* getBuildLogContent(buildId, logId);
89
- yield* Console.log(formatAny({ buildId, logId, content }, format));
90
+ yield* logText(formatAny({ buildId, logId, content }, format));
90
91
  }),
91
92
  ).pipe(Command.withDescription("Get specific log content by log ID"));
92
93
 
@@ -99,7 +100,7 @@ const buildSummaryCommand = Command.make(
99
100
  ({ buildId, format, profile: _profile }) =>
100
101
  Effect.gen(function* () {
101
102
  const summary = yield* getBuildJobSummary(buildId);
102
- yield* Console.log(formatAny({ buildId, summary }, format));
103
+ yield* logText(formatAny({ buildId, summary }, format));
103
104
  }),
104
105
  ).pipe(Command.withDescription("Get job summaries with duration and status information"));
105
106
 
@@ -144,7 +145,7 @@ const cmdCommand = Command.make(
144
145
 
145
146
  if (dryRun) {
146
147
  const fullCommand = `az ${cmd}`;
147
- yield* Console.log(`[DRY-RUN] Would execute: ${fullCommand}`);
148
+ yield* logText(`[DRY-RUN] Would execute: ${fullCommand}`);
148
149
  return;
149
150
  }
150
151
 
@@ -154,7 +155,7 @@ const cmdCommand = Command.make(
154
155
  const output = yield* az.runCommand(cmd, projectName);
155
156
  const executionTimeMs = Date.now() - startTime;
156
157
 
157
- yield* Console.log(
158
+ yield* logText(
158
159
  formatOutput(
159
160
  {
160
161
  success: true,
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bun
2
2
  import { Command, Flag } from "effect/unstable/cli";
3
3
  import { BunRuntime, BunServices } from "@effect/platform-bun";
4
- import { Console, Effect, Layer, Option } from "effect";
4
+ import { Effect, Layer, Option } from "effect";
5
5
 
6
6
  import type { SchemaMode } from "./types";
7
7
 
@@ -9,6 +9,7 @@ import {
9
9
  makeSchemaCommand,
10
10
  formatOption,
11
11
  formatOutput,
12
+ logText,
12
13
  renderCauseToStderr,
13
14
  VERSION,
14
15
  } from "#shared";
@@ -80,7 +81,7 @@ const sqlCommand = Command.make(
80
81
  const resolvedEnv = yield* resolveEnv(env);
81
82
  const db = yield* DbService;
82
83
  const result = yield* db.executeQuery(resolvedEnv, sql, Option.getOrUndefined(limit));
83
- yield* Console.log(formatOutput(result, format));
84
+ yield* logText(formatOutput(result, format));
84
85
  }),
85
86
  ).pipe(Command.withDescription("Execute a SQL query"));
86
87
 
@@ -115,7 +116,7 @@ const schemaCommand = Command.make(
115
116
  mode as SchemaMode,
116
117
  Option.getOrUndefined(table),
117
118
  );
118
- yield* Console.log(formatOutput(result, format));
119
+ yield* logText(formatOutput(result, format));
119
120
  }),
120
121
  ).pipe(Command.withDescription("Introspect database schema (tables, columns, relationships)"));
121
122
 
@@ -139,7 +140,7 @@ const envsCommand = Command.make(
139
140
  message: `${environments.length} environment(s) configured`,
140
141
  executionTimeMs: 0,
141
142
  };
142
- yield* Console.log(formatOutput(result, format));
143
+ yield* logText(formatOutput(result, format));
143
144
  }),
144
145
  ).pipe(
145
146
  Command.withDescription("List configured database environments and the default (no network)"),
@@ -198,7 +199,7 @@ const makeDiagnosticCommand = (name: string, description: string, sql: string) =
198
199
  const resolvedEnv = yield* resolveEnv(env);
199
200
  const db = yield* DbService;
200
201
  const result = yield* db.executeQuery(resolvedEnv, sql, Option.getOrUndefined(limit));
201
- yield* Console.log(formatOutput(result, format));
202
+ yield* logText(formatOutput(result, format));
202
203
  }),
203
204
  ).pipe(Command.withDescription(description));
204
205
 
@@ -34,7 +34,13 @@ export class GitHubAuthError extends Schema.TaggedError<GitHubAuthError>()("GitH
34
34
 
35
35
  export class GitHubMergeError extends Schema.TaggedError<GitHubMergeError>()("GitHubMergeError", {
36
36
  message: Schema.String,
37
- reason: Schema.Literals(["conflicts", "checks_failing", "branch_protected", "unknown"]),
37
+ reason: Schema.Literals([
38
+ "conflicts",
39
+ "checks_failing",
40
+ "branch_protected",
41
+ "merge_queue",
42
+ "unknown",
43
+ ]),
38
44
  hint: Schema.optionalKey(Schema.String),
39
45
  nextCommand: Schema.optionalKey(Schema.String),
40
46
  retryable: Schema.optionalKey(Schema.Boolean),
@@ -3,7 +3,7 @@ import { Console, Effect, Option } from "effect";
3
3
 
4
4
  import type { CheckResult, PRStatusResult } from "#gh/types";
5
5
 
6
- import { formatOption, logFormatted } from "#shared";
6
+ import { formatOption, logFormatted, logText } from "#shared";
7
7
  import { GitHubService } from "#gh/service";
8
8
  import { GitHubCommandError } from "#gh/errors";
9
9
 
@@ -887,7 +887,7 @@ export const prWatchCommand = Command.make(
887
887
  yield* watchPRs(
888
888
  numbers,
889
889
  { intervalSeconds: interval, timeoutSeconds: timeout, until },
890
- (event) => Console.log(JSON.stringify(event)),
890
+ (event) => logText(JSON.stringify(event)),
891
891
  );
892
892
  }),
893
893
  ),
@@ -19,6 +19,7 @@ import type {
19
19
  import type { GitHubAuthError, GitHubNotFoundError } from "#gh/errors";
20
20
  import { GitHubCommandError, GitHubMergeError } from "#gh/errors";
21
21
  import { GitHubService } from "#gh/service";
22
+ import { logText } from "#shared";
22
23
 
23
24
  import type { ButStatusJson, PRViewJsonResult } from "./helpers";
24
25
  import { runLocalCommand } from "./helpers";
@@ -701,6 +702,99 @@ export const createPR = Effect.fn("pr.createPR")(function* (opts: {
701
702
  );
702
703
  });
703
704
 
705
+ // GitHub rejects GraphQL `mergePullRequest` for a PR that belongs to a native stack and points at
706
+ // the asynchronous REST merge instead. `gh pr merge` only speaks GraphQL.
707
+ const ASYNC_MERGE_REQUIRED_RE = /asynchronous merge/i;
708
+ const ASYNC_MERGE_POLL_INTERVAL_MS = 2000;
709
+ const MAX_ASYNC_MERGE_WAIT_SECONDS = 120;
710
+
711
+ type AsyncMergeResult = {
712
+ status: "pending" | "merged" | "enqueued" | "failed";
713
+ details?: { message?: string; uuid?: string; sha?: string };
714
+ };
715
+
716
+ const asyncMergeFailure = (
717
+ pr: number,
718
+ message: string,
719
+ hint: string,
720
+ reason: "merge_queue" | "unknown" = "unknown",
721
+ ) =>
722
+ new GitHubMergeError({
723
+ message: `Failed to merge PR #${pr} asynchronously: ${message}`,
724
+ reason,
725
+ hint,
726
+ nextCommand: `agent-tools-gh pr view --pr ${pr}`,
727
+ });
728
+
729
+ const mergeViaAsyncApi = Effect.fn("pr.mergeViaAsyncApi")(function* (opts: {
730
+ pr: number;
731
+ strategy: MergeStrategy;
732
+ }) {
733
+ const gh = yield* GitHubService;
734
+ const repo = yield* gh.getRepoInfo();
735
+ const asyncPath = `repos/${repo.owner}/${repo.name}/pulls/${opts.pr}/merge-async`;
736
+
737
+ let latest = yield* gh.runGhJson<AsyncMergeResult>([
738
+ "api",
739
+ "--method",
740
+ "PUT",
741
+ asyncPath,
742
+ "-f",
743
+ `merge_method=${opts.strategy}`,
744
+ ]);
745
+
746
+ const uuid = latest.details?.uuid;
747
+ if (latest.status === "pending" && uuid !== undefined) {
748
+ const start = yield* Clock.currentTimeMillis;
749
+ const deadlineMs = Number(start) + MAX_ASYNC_MERGE_WAIT_SECONDS * 1000;
750
+ let timedOut = false;
751
+
752
+ // Effect.whileLoop (not recursion) so TestClock.adjust can advance Effect.sleep without real waits.
753
+ yield* Effect.whileLoop({
754
+ while: () => latest.status === "pending" && !timedOut,
755
+ body: () =>
756
+ Effect.gen(function* () {
757
+ const now = yield* Clock.currentTimeMillis;
758
+ if (Number(now) >= deadlineMs) {
759
+ timedOut = true;
760
+ return;
761
+ }
762
+ const remaining = deadlineMs - Number(now);
763
+ yield* Effect.sleep(Duration.millis(Math.min(ASYNC_MERGE_POLL_INTERVAL_MS, remaining)));
764
+ latest = yield* gh.runGhJson<AsyncMergeResult>(["api", `${asyncPath}/${uuid}`]);
765
+ }),
766
+ step: () => undefined,
767
+ });
768
+ }
769
+
770
+ if (latest.status === "merged") {
771
+ return latest.details?.sha ?? null;
772
+ }
773
+
774
+ if (latest.status === "enqueued") {
775
+ return yield* asyncMergeFailure(
776
+ opts.pr,
777
+ latest.details?.message ?? "the pull request entered a merge queue",
778
+ "The merge queue owns the merge from here; it is not merged yet. Watch the PR until the queue drains.",
779
+ "merge_queue",
780
+ );
781
+ }
782
+
783
+ if (latest.status === "pending") {
784
+ return yield* asyncMergeFailure(
785
+ opts.pr,
786
+ `still pending after ${MAX_ASYNC_MERGE_WAIT_SECONDS}s`,
787
+ "The asynchronous merge is still running. Re-check the PR state before retrying so the merge is not requested twice.",
788
+ );
789
+ }
790
+
791
+ return yield* asyncMergeFailure(
792
+ opts.pr,
793
+ latest.details?.message ?? "the merge request failed",
794
+ "Inspect the PR state and branch protections, then retry.",
795
+ );
796
+ });
797
+
704
798
  export const mergePR = Effect.fn("pr.mergePR")(function* (opts: {
705
799
  pr: number;
706
800
  strategy: MergeStrategy;
@@ -764,7 +858,7 @@ export const mergePR = Effect.fn("pr.mergePR")(function* (opts: {
764
858
  "(rolled back if the merge fails); branch deletion is skipped if any retarget fails. "
765
859
  : "";
766
860
 
767
- yield* Console.log(
861
+ yield* logText(
768
862
  `DRY RUN: Would merge PR #${info.number} "${info.title}" via ${opts.strategy.toUpperCase()}. ` +
769
863
  `Branch \`${info.headRefName}\` → \`${info.baseRefName}\`. ` +
770
864
  (opts.deleteBranch && !headIsLongLived
@@ -846,77 +940,92 @@ export const mergePR = Effect.fn("pr.mergePR")(function* (opts: {
846
940
 
847
941
  const mergeArgs = ["pr", "merge", String(opts.pr), `--${opts.strategy}`];
848
942
 
849
- const mergeResult = yield* gh.runGh(mergeArgs).pipe(
850
- Effect.catch((error) =>
851
- rollbackRetargets.pipe(
852
- Effect.andThen(
853
- (
854
- rollbackFailed,
855
- ): Effect.Effect<never, GitHubNotFoundError | GitHubAuthError | GitHubMergeError> => {
856
- const rollbackNote =
857
- rollbackFailed.length > 0
858
- ? ` ROLLBACK INCOMPLETE: dependent PR(s) ${rollbackFailed
859
- .map((child) => `#${child}`)
860
- .join(", ")} are still retargeted to \`${info.baseRefName}\`; ` +
861
- `manually restore their base to \`${info.headRefName}\`.`
862
- : "";
863
-
864
- if (error._tag !== "GitHubCommandError") {
865
- return rollbackNote === ""
866
- ? Effect.fail(error)
867
- : Console.error(rollbackNote.trim()).pipe(Effect.andThen(Effect.fail(error)));
868
- }
869
-
870
- const stderr = error.stderr.toLowerCase();
871
-
872
- if (stderr.includes("merge conflict") || stderr.includes("conflicts")) {
873
- return Effect.fail(
874
- new GitHubMergeError({
875
- message: `PR #${opts.pr} has merge conflicts`,
876
- reason: "conflicts",
877
- hint: `Resolve merge conflicts locally, push the fix, then retry the merge.${rollbackNote}`,
878
- nextCommand: `gh pr diff ${opts.pr}`,
879
- }),
880
- );
881
- }
882
-
883
- if (stderr.includes("required status check") || stderr.includes("checks")) {
884
- return Effect.fail(
885
- new GitHubMergeError({
886
- message: `PR #${opts.pr} has failing required checks`,
887
- reason: "checks_failing",
888
- hint: `Wait for CI checks to pass or investigate failures before merging.${rollbackNote}`,
889
- nextCommand: `agent-tools-gh pr checks --pr ${opts.pr}`,
890
- retryable: true,
891
- }),
892
- );
893
- }
894
-
895
- if (stderr.includes("protected branch")) {
896
- return Effect.fail(
897
- new GitHubMergeError({
898
- message: `PR #${opts.pr} targets a protected branch`,
899
- reason: "branch_protected",
900
- hint: `This branch has protection rules. Ensure required reviews and checks are satisfied, or ask a repo admin.${rollbackNote}`,
901
- }),
902
- );
903
- }
904
-
905
- return Effect.fail(
906
- new GitHubMergeError({
907
- message: `Failed to merge PR #${opts.pr}: ${error.stderr}`,
908
- reason: "unknown",
909
- hint: `Check the PR state and branch protections. The PR may already be merged or closed.${rollbackNote}`,
910
- nextCommand: `agent-tools-gh pr view --pr ${opts.pr}`,
911
- }),
912
- );
913
- },
914
- ),
943
+ const mergedSha = yield* gh
944
+ .runGh(mergeArgs)
945
+ .pipe(
946
+ Effect.map((result) => result.stdout.match(/([0-9a-f]{7,40})/)?.[1] ?? null),
947
+ Effect.catchTag("GitHubCommandError", (error) =>
948
+ ASYNC_MERGE_REQUIRED_RE.test(error.stderr)
949
+ ? mergeViaAsyncApi({ pr: opts.pr, strategy: opts.strategy })
950
+ : Effect.fail(error),
915
951
  ),
916
- ),
917
- );
918
-
919
- const shaMatch = mergeResult.stdout.match(/([0-9a-f]{7,40})/);
952
+ )
953
+ .pipe(
954
+ Effect.catch((error) =>
955
+ // A queued merge still lands, and its head branch disappears with it. Rolling the
956
+ // dependents back onto that branch would close them (cli/cli#1168), so keep the retargets.
957
+ error._tag === "GitHubMergeError" && error.reason === "merge_queue"
958
+ ? Effect.fail(error)
959
+ : rollbackRetargets.pipe(
960
+ Effect.andThen(
961
+ (
962
+ rollbackFailed,
963
+ ): Effect.Effect<
964
+ never,
965
+ GitHubNotFoundError | GitHubAuthError | GitHubMergeError
966
+ > => {
967
+ const rollbackNote =
968
+ rollbackFailed.length > 0
969
+ ? ` ROLLBACK INCOMPLETE: dependent PR(s) ${rollbackFailed
970
+ .map((child) => `#${child}`)
971
+ .join(", ")} are still retargeted to \`${info.baseRefName}\`; ` +
972
+ `manually restore their base to \`${info.headRefName}\`.`
973
+ : "";
974
+
975
+ if (error._tag !== "GitHubCommandError") {
976
+ return rollbackNote === ""
977
+ ? Effect.fail(error)
978
+ : Console.error(rollbackNote.trim()).pipe(Effect.andThen(Effect.fail(error)));
979
+ }
980
+
981
+ const stderr = error.stderr.toLowerCase();
982
+
983
+ if (stderr.includes("merge conflict") || stderr.includes("conflicts")) {
984
+ return Effect.fail(
985
+ new GitHubMergeError({
986
+ message: `PR #${opts.pr} has merge conflicts`,
987
+ reason: "conflicts",
988
+ hint: `Resolve merge conflicts locally, push the fix, then retry the merge.${rollbackNote}`,
989
+ nextCommand: `gh pr diff ${opts.pr}`,
990
+ }),
991
+ );
992
+ }
993
+
994
+ if (stderr.includes("required status check") || stderr.includes("checks")) {
995
+ return Effect.fail(
996
+ new GitHubMergeError({
997
+ message: `PR #${opts.pr} has failing required checks`,
998
+ reason: "checks_failing",
999
+ hint: `Wait for CI checks to pass or investigate failures before merging.${rollbackNote}`,
1000
+ nextCommand: `agent-tools-gh pr checks --pr ${opts.pr}`,
1001
+ retryable: true,
1002
+ }),
1003
+ );
1004
+ }
1005
+
1006
+ if (stderr.includes("protected branch")) {
1007
+ return Effect.fail(
1008
+ new GitHubMergeError({
1009
+ message: `PR #${opts.pr} targets a protected branch`,
1010
+ reason: "branch_protected",
1011
+ hint: `This branch has protection rules. Ensure required reviews and checks are satisfied, or ask a repo admin.${rollbackNote}`,
1012
+ }),
1013
+ );
1014
+ }
1015
+
1016
+ return Effect.fail(
1017
+ new GitHubMergeError({
1018
+ message: `Failed to merge PR #${opts.pr}: ${error.stderr}`,
1019
+ reason: "unknown",
1020
+ hint: `Check the PR state and branch protections. The PR may already be merged or closed.${rollbackNote}`,
1021
+ nextCommand: `agent-tools-gh pr view --pr ${opts.pr}`,
1022
+ }),
1023
+ );
1024
+ },
1025
+ ),
1026
+ ),
1027
+ ),
1028
+ );
920
1029
 
921
1030
  // `gh pr merge --delete-branch` aborts its remote delete when the head branch is checked out in a
922
1031
  // worktree; deleting the remote ref explicitly is worktree-independent. Local cleanup is separate.
@@ -943,7 +1052,7 @@ export const mergePR = Effect.fn("pr.mergePR")(function* (opts: {
943
1052
  merged: true,
944
1053
  strategy: opts.strategy,
945
1054
  branchDeleted: willDeleteBranch,
946
- sha: shaMatch?.[1] ?? null,
1055
+ sha: mergedSha,
947
1056
  retargetedChildren: retargetedChildren.length > 0 ? retargetedChildren : undefined,
948
1057
  branchDeleteSkipped: branchDeleteSkipped ? true : undefined,
949
1058
  };
@@ -228,6 +228,8 @@ type RawReviewComment = {
228
228
  path: string;
229
229
  line: number;
230
230
  created_at: string;
231
+ updated_at: string;
232
+ pull_request_review_id?: number | null;
231
233
  commit_id?: string | null;
232
234
  };
233
235
 
@@ -353,6 +355,7 @@ const enrichThreads = (
353
355
  currentHeadSha: string | null,
354
356
  ): ReviewThread[] => {
355
357
  const repliesByRootCommentId = new Map<number, ReviewComment[]>();
358
+ const commentsById = new Map(reviewComments.map((comment) => [comment.id, comment]));
356
359
 
357
360
  for (const comment of reviewComments) {
358
361
  if (comment.inReplyToId === null) {
@@ -371,6 +374,7 @@ const enrichThreads = (
371
374
  return null;
372
375
  }
373
376
 
377
+ const root = commentsById.get(comment.databaseId);
374
378
  const replies = repliesByRootCommentId.get(comment.databaseId) ?? [];
375
379
  const lastReply = replies.reduce<ReviewComment | null>((latest, current) => {
376
380
  if (latest === null) {
@@ -399,6 +403,8 @@ const enrichThreads = (
399
403
  isVisibleOpen: !node.isResolved || needsHumanReply,
400
404
  lastReplyAuthor: lastReply?.author ?? null,
401
405
  lastReplyAt: lastReply?.createdAt ?? null,
406
+ reviewId: root?.reviewId ?? null,
407
+ updatedAt: root?.updatedAt ?? null,
402
408
  duplicateThreadIds: [] as string[],
403
409
  };
404
410
  })
@@ -505,6 +511,8 @@ export const fetchComments = Effect.fn("pr.fetchComments")(function* (
505
511
  path: c.path,
506
512
  line: c.line,
507
513
  createdAt: c.created_at,
514
+ reviewId: c.pull_request_review_id ?? null,
515
+ updatedAt: c.updated_at,
508
516
  }));
509
517
 
510
518
  if (since !== null) {
@@ -44,6 +44,8 @@ export type ReviewThread = {
44
44
  isVisibleOpen: boolean;
45
45
  lastReplyAuthor: string | null;
46
46
  lastReplyAt: string | null;
47
+ reviewId: number | null;
48
+ updatedAt: string | null;
47
49
  /** Thread ids of exact duplicates collapsed into this representative (encounter order). */
48
50
  duplicateThreadIds: string[];
49
51
  };
@@ -58,6 +60,14 @@ export type ReviewComment = {
58
60
  path: string;
59
61
  line: number;
60
62
  createdAt: string;
63
+ reviewId: number | null;
64
+ /**
65
+ * Last change to the comment. A comment drafted inside a pending review keeps its draft time in
66
+ * `createdAt` and carries the submit time here until someone edits it, so this is a proxy for
67
+ * when the comment became visible. Join `reviewId` to the review's `submittedAt` for the exact
68
+ * time.
69
+ */
70
+ updatedAt: string;
61
71
  };
62
72
 
63
73
  export const IssueCommentId = Schema.Int.pipe(Schema.brand("IssueCommentId"));
@@ -1,7 +1,7 @@
1
1
  import { Command, Flag, Param } from "effect/unstable/cli";
2
- import { Console, Duration, Effect, Option } from "effect";
2
+ import { Duration, Effect, Option } from "effect";
3
3
 
4
- import { formatOption, logFormatted } from "#shared";
4
+ import { formatOption, logFormatted, logText } from "#shared";
5
5
  import { CI_CHECK_WATCH_TIMEOUT_MS } from "#gh/config";
6
6
  import { GitHubCommandError, GitHubNotFoundError } from "./errors";
7
7
  import { GitHubService } from "./service";
@@ -780,7 +780,7 @@ export const workflowLogsCommand = Command.make(
780
780
  if (format === "toon" || format === "json") {
781
781
  yield* logFormatted(logs, format);
782
782
  } else {
783
- yield* Console.log(logs.log);
783
+ yield* logText(logs.log);
784
784
  }
785
785
  }),
786
786
  ).pipe(Command.withDescription("Fetch logs for a workflow run (--failed-only by default)"));
@@ -930,7 +930,7 @@ export const workflowJobLogsCommand = Command.make(
930
930
  });
931
931
 
932
932
  if ("formatted" in result) {
933
- yield* Console.log(result.formatted);
933
+ yield* logText(result.formatted ?? "");
934
934
  } else {
935
935
  yield* logFormatted(result, format);
936
936
  }
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bun
2
2
  import { Command, Flag } from "effect/unstable/cli";
3
3
  import { BunRuntime, BunServices } from "@effect/platform-bun";
4
- import { Console, Effect, Layer, Option } from "effect";
4
+ import { Effect, Layer, Option } from "effect";
5
5
 
6
6
  import type { CommandResult } from "./types";
7
7
 
@@ -9,6 +9,7 @@ import {
9
9
  makeSchemaCommand,
10
10
  formatOption,
11
11
  formatOutput,
12
+ logText,
12
13
  renderCauseToStderr,
13
14
  VERSION,
14
15
  } from "#shared";
@@ -172,7 +173,7 @@ const executeK8sCommand = (command: string, options: CommonK8sCommandOptions) =>
172
173
  const runK8sCommand = (command: string, options: CommonK8sCommandOptions) =>
173
174
  Effect.gen(function* () {
174
175
  const result = yield* executeK8sCommand(command, options);
175
- yield* Console.log(formatOutput(result, options.format));
176
+ yield* logText(formatOutput(result, options.format));
176
177
  });
177
178
 
178
179
  const logTransformedResult = (
@@ -183,7 +184,7 @@ const logTransformedResult = (
183
184
  Effect.gen(function* () {
184
185
  const transformedResult =
185
186
  typeof result.output === "string" ? { ...result, output: transform(result.output) } : result;
186
- yield* Console.log(formatOutput(transformedResult, format));
187
+ yield* logText(formatOutput(transformedResult, format));
187
188
  });
188
189
 
189
190
  const commonFlags = {
@@ -16,7 +16,7 @@
16
16
 
17
17
  import { Command, Flag } from "effect/unstable/cli";
18
18
  import { BunRuntime, BunServices } from "@effect/platform-bun";
19
- import { Console, Effect, Layer, Option, Result } from "effect";
19
+ import { Effect, Layer, Option, Result } from "effect";
20
20
 
21
21
  import type { Environment, LogResult, ReadOptions } from "./types";
22
22
 
@@ -24,6 +24,7 @@ import {
24
24
  makeSchemaCommand,
25
25
  formatOption,
26
26
  formatOutput,
27
+ logText,
27
28
  renderCauseToStderr,
28
29
  VERSION,
29
30
  } from "#shared";
@@ -140,7 +141,7 @@ const listCommand = Command.make(
140
141
  }),
141
142
  });
142
143
 
143
- yield* Console.log(formatOutput(logResult, format));
144
+ yield* logText(formatOutput(logResult, format));
144
145
  }),
145
146
  ).pipe(Command.withDescription("List available log files"));
146
147
 
@@ -216,7 +217,7 @@ const readCommand = Command.make(
216
217
  }),
217
218
  });
218
219
 
219
- yield* Console.log(formatOutput(logResult, format));
220
+ yield* logText(formatOutput(logResult, format));
220
221
  }),
221
222
  ).pipe(Command.withDescription("Read application logs"));
222
223
 
@@ -1,7 +1,7 @@
1
- import { Console, Effect } from "effect";
1
+ import { Effect } from "effect";
2
2
  import { Argument, Command, Flag } from "effect/unstable/cli";
3
3
 
4
- import { formatOption, formatOutput } from "#shared";
4
+ import { formatOption, formatOutput, logText } from "#shared";
5
5
 
6
6
  import { ObservabilityToolError } from "./errors";
7
7
  import {
@@ -157,7 +157,7 @@ const queryCommand = Command.make(
157
157
  executionTimeMs: Date.now() - startedAt,
158
158
  };
159
159
 
160
- yield* Console.log(formatOutput(result, format));
160
+ yield* logText(formatOutput(result, format));
161
161
  }).pipe(
162
162
  Effect.catchTag("ObservabilityToolError", (error) =>
163
163
  Effect.gen(function* () {
@@ -168,7 +168,7 @@ const queryCommand = Command.make(
168
168
  hint: "Check LogQL syntax and Grafana/Loki connectivity",
169
169
  executionTimeMs: Date.now() - startedAt,
170
170
  };
171
- yield* Console.log(formatOutput(result, format));
171
+ yield* logText(formatOutput(result, format));
172
172
  }),
173
173
  ),
174
174
  );
@@ -1,7 +1,7 @@
1
- import { Console, Effect } from "effect";
1
+ import { Effect } from "effect";
2
2
  import { Argument, Command, Flag } from "effect/unstable/cli";
3
3
 
4
- import { formatOption, formatOutput } from "#shared";
4
+ import { formatOption, formatOutput, logText } from "#shared";
5
5
 
6
6
  import { ObservabilityToolError } from "./errors";
7
7
  import {
@@ -105,7 +105,7 @@ const queryCommand = Command.make(
105
105
  executionTimeMs: Date.now() - startedAt,
106
106
  };
107
107
 
108
- yield* Console.log(formatOutput(result, format));
108
+ yield* logText(formatOutput(result, format));
109
109
  }).pipe(
110
110
  Effect.catch((error) =>
111
111
  Effect.gen(function* () {
@@ -116,7 +116,7 @@ const queryCommand = Command.make(
116
116
  hint: "Check PromQL syntax and Grafana/Prometheus connectivity",
117
117
  executionTimeMs: Date.now() - startedAt,
118
118
  };
119
- yield* Console.log(formatOutput(result, format));
119
+ yield* logText(formatOutput(result, format));
120
120
  }),
121
121
  ),
122
122
  );
@@ -1,7 +1,7 @@
1
- import { Console, Effect, type Option } from "effect";
1
+ import { Effect, type Option } from "effect";
2
2
  import { Argument, Command, Flag } from "effect/unstable/cli";
3
3
 
4
- import { formatOption, formatOutput } from "#shared";
4
+ import { formatOption, formatOutput, logText } from "#shared";
5
5
  import type { OutputFormat } from "#shared";
6
6
 
7
7
  import { ObservabilityToolError } from "./errors";
@@ -396,7 +396,7 @@ function handleTraceGet(
396
396
  executionTimeMs: Date.now() - startedAt,
397
397
  };
398
398
 
399
- yield* Console.log(formatOutput(result, format));
399
+ yield* logText(formatOutput(result, format));
400
400
  }).pipe(
401
401
  Effect.catch((error) =>
402
402
  Effect.gen(function* () {
@@ -407,7 +407,7 @@ function handleTraceGet(
407
407
  hint: "Accepts 32-char trace ID or 16-char span ID. Check format and Grafana/Tempo connectivity",
408
408
  executionTimeMs: Date.now() - startedAt,
409
409
  };
410
- yield* Console.log(formatOutput(result, format));
410
+ yield* logText(formatOutput(result, format));
411
411
  }),
412
412
  ),
413
413
  );
@@ -497,7 +497,7 @@ const logsCommand = Command.make(
497
497
  executionTimeMs: Date.now() - startedAt,
498
498
  };
499
499
 
500
- yield* Console.log(formatOutput(result, format));
500
+ yield* logText(formatOutput(result, format));
501
501
  }).pipe(
502
502
  Effect.catch((error) =>
503
503
  Effect.gen(function* () {
@@ -508,7 +508,7 @@ const logsCommand = Command.make(
508
508
  hint: "Accepts 32-char trace ID or 16-char span ID. Check format and Grafana/Loki connectivity",
509
509
  executionTimeMs: Date.now() - startedAt,
510
510
  };
511
- yield* Console.log(formatOutput(result, format));
511
+ yield* logText(formatOutput(result, format));
512
512
  }),
513
513
  ),
514
514
  );
@@ -9,13 +9,13 @@
9
9
 
10
10
  import { Argument, Command, Flag } from "effect/unstable/cli";
11
11
  import { BunRuntime, BunServices } from "@effect/platform-bun";
12
- import { Console, Effect, Layer, Result } from "effect";
12
+ import { Effect, Layer, Result } from "effect";
13
13
 
14
14
  import type { MessageSummary, SessionResult, SessionSource } from "./types";
15
15
 
16
16
  import { ALL_SESSION_SOURCES } from "./types";
17
17
 
18
- import { makeSchemaCommand, formatOption, formatOutput, VERSION } from "#shared";
18
+ import { makeSchemaCommand, formatOption, formatOutput, logText, VERSION } from "#shared";
19
19
  import { AuditServiceLayer, withAudit } from "#shared/audit";
20
20
  import { ResolvedPaths, ResolvedPathsLayer } from "./config";
21
21
  import { SessionStorageNotFoundError } from "./errors";
@@ -171,7 +171,7 @@ const listCommand = Command.make(
171
171
  onSuccess: (okResult) => okResult,
172
172
  });
173
173
 
174
- yield* Console.log(formatOutput(output, format));
174
+ yield* logText(formatOutput(output, format));
175
175
  }),
176
176
  ).pipe(Command.withDescription("List OpenCode session summaries"));
177
177
 
@@ -252,7 +252,7 @@ const searchCommand = Command.make(
252
252
  onSuccess: (okResult) => okResult,
253
253
  });
254
254
 
255
- yield* Console.log(formatOutput(output, format));
255
+ yield* logText(formatOutput(output, format));
256
256
  }),
257
257
  ).pipe(Command.withDescription("Search message history"));
258
258
 
@@ -309,7 +309,7 @@ const readCommand = Command.make(
309
309
  },
310
310
  });
311
311
 
312
- yield* Console.log(formatOutput(output, format));
312
+ yield* logText(formatOutput(output, format));
313
313
  }),
314
314
  ).pipe(Command.withDescription("Read all messages from a session"));
315
315
 
@@ -1,6 +1,6 @@
1
1
  import { Flag } from "effect/unstable/cli";
2
2
  import { encode as encodeToon } from "@toon-format/toon";
3
- import { Console } from "effect";
3
+ import { Effect } from "effect";
4
4
 
5
5
  import type { BaseResult, OutputFormat } from "./types";
6
6
 
@@ -23,5 +23,20 @@ export function formatAny<T>(data: T, format: OutputFormat): string {
23
23
  return JSON.stringify(data, null, 2);
24
24
  }
25
25
 
26
- export const logFormatted = <T>(data: T, format: OutputFormat) =>
27
- Console.log(formatAny(data, format));
26
+ // `Console.log` drops bytes on a non-blocking pipe: a payload over the pipe buffer arrives
27
+ // truncated at a page boundary, reaching the caller as invalid JSON. Awaiting the write callback
28
+ // makes the stream retry the short write. Never replace this with `Console.log`.
29
+ // EPIPE is the expected end of `<tool> | head`, so only other write failures become defects
30
+ // instead of a silent exit 0 with partial output.
31
+ export const logText = (text: string) =>
32
+ Effect.callback<undefined>((resume) => {
33
+ process.stdout.write(`${text}\n`, (error) =>
34
+ resume(
35
+ error && (error as NodeJS.ErrnoException).code !== "EPIPE"
36
+ ? Effect.die(error)
37
+ : Effect.succeed(undefined),
38
+ ),
39
+ );
40
+ });
41
+
42
+ export const logFormatted = <T>(data: T, format: OutputFormat) => logText(formatAny(data, format));
@@ -7,7 +7,7 @@ export type {
7
7
  ToolResult,
8
8
  } from "./types";
9
9
 
10
- export { formatAny, formatOption, formatOutput, logFormatted } from "./format";
10
+ export { formatAny, formatOption, formatOutput, logFormatted, logText } from "./format";
11
11
 
12
12
  export { expandPath, runCommand } from "./bun";
13
13