@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 +2 -0
- package/dist/gh-tool/errors.d.ts +1 -1
- package/dist/gh-tool/errors.d.ts.map +1 -1
- package/dist/gh-tool/pr/core.d.ts.map +1 -1
- package/dist/gh-tool/pr/review.d.ts.map +1 -1
- package/dist/gh-tool/types.d.ts +10 -0
- package/dist/gh-tool/types.d.ts.map +1 -1
- package/dist/gh-tool/workflow.d.ts.map +1 -1
- package/dist/logs-tool/index.d.ts.map +1 -1
- package/dist/session-tool/index.d.ts.map +1 -1
- package/dist/shared/format.d.ts +3 -1
- package/dist/shared/format.d.ts.map +1 -1
- package/dist/shared/index.d.ts +1 -1
- package/dist/shared/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/audit-tool/index.ts +4 -3
- package/src/az-tool/index.ts +9 -8
- package/src/db-tool/index.ts +6 -5
- package/src/gh-tool/errors.ts +7 -1
- package/src/gh-tool/pr/commands.ts +2 -2
- package/src/gh-tool/pr/core.ts +181 -72
- package/src/gh-tool/pr/review.ts +8 -0
- package/src/gh-tool/types.ts +10 -0
- package/src/gh-tool/workflow.ts +4 -4
- package/src/k8s-tool/index.ts +4 -3
- package/src/logs-tool/index.ts +4 -3
- package/src/observability-tool/logs.ts +4 -4
- package/src/observability-tool/metrics.ts +4 -4
- package/src/observability-tool/trace.ts +6 -6
- package/src/session-tool/index.ts +5 -5
- package/src/shared/format.ts +18 -3
- package/src/shared/index.ts +1 -1
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.
|
package/dist/gh-tool/errors.d.ts
CHANGED
|
@@ -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,
|
|
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":"AAAA,OAAO,EAA4B,MAAM,EAAkB,MAAM,QAAQ,CAAC;AAE1E,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,iBAAiB,EAEjB,WAAW,EACX,aAAa,EACb,MAAM,EAGN,iBAAiB,EAIlB,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
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;
|
|
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"}
|
package/dist/gh-tool/types.d.ts
CHANGED
|
@@ -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,
|
|
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,
|
|
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,
|
|
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"}
|
package/dist/shared/format.d.ts
CHANGED
|
@@ -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
|
|
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;
|
|
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"}
|
package/dist/shared/index.d.ts
CHANGED
|
@@ -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;
|
|
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
package/src/audit-tool/index.ts
CHANGED
|
@@ -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 {
|
|
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*
|
|
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*
|
|
87
|
+
yield* logText(formatOutput(result, format));
|
|
87
88
|
}),
|
|
88
89
|
).pipe(Command.withDescription("Delete old audit log entries"));
|
|
89
90
|
|
package/src/az-tool/index.ts
CHANGED
|
@@ -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 {
|
|
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*
|
|
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*
|
|
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*
|
|
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*
|
|
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*
|
|
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*
|
|
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*
|
|
158
|
+
yield* logText(
|
|
158
159
|
formatOutput(
|
|
159
160
|
{
|
|
160
161
|
success: true,
|
package/src/db-tool/index.ts
CHANGED
|
@@ -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 {
|
|
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*
|
|
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*
|
|
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*
|
|
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*
|
|
202
|
+
yield* logText(formatOutput(result, format));
|
|
202
203
|
}),
|
|
203
204
|
).pipe(Command.withDescription(description));
|
|
204
205
|
|
package/src/gh-tool/errors.ts
CHANGED
|
@@ -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([
|
|
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) =>
|
|
890
|
+
(event) => logText(JSON.stringify(event)),
|
|
891
891
|
);
|
|
892
892
|
}),
|
|
893
893
|
),
|
package/src/gh-tool/pr/core.ts
CHANGED
|
@@ -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*
|
|
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
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
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
|
-
|
|
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:
|
|
1055
|
+
sha: mergedSha,
|
|
947
1056
|
retargetedChildren: retargetedChildren.length > 0 ? retargetedChildren : undefined,
|
|
948
1057
|
branchDeleteSkipped: branchDeleteSkipped ? true : undefined,
|
|
949
1058
|
};
|
package/src/gh-tool/pr/review.ts
CHANGED
|
@@ -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) {
|
package/src/gh-tool/types.ts
CHANGED
|
@@ -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"));
|
package/src/gh-tool/workflow.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Command, Flag, Param } from "effect/unstable/cli";
|
|
2
|
-
import {
|
|
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*
|
|
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*
|
|
933
|
+
yield* logText(result.formatted ?? "");
|
|
934
934
|
} else {
|
|
935
935
|
yield* logFormatted(result, format);
|
|
936
936
|
}
|
package/src/k8s-tool/index.ts
CHANGED
|
@@ -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 {
|
|
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*
|
|
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*
|
|
187
|
+
yield* logText(formatOutput(transformedResult, format));
|
|
187
188
|
});
|
|
188
189
|
|
|
189
190
|
const commonFlags = {
|
package/src/logs-tool/index.ts
CHANGED
|
@@ -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 {
|
|
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*
|
|
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*
|
|
220
|
+
yield* logText(formatOutput(logResult, format));
|
|
220
221
|
}),
|
|
221
222
|
).pipe(Command.withDescription("Read application logs"));
|
|
222
223
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
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*
|
|
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*
|
|
171
|
+
yield* logText(formatOutput(result, format));
|
|
172
172
|
}),
|
|
173
173
|
),
|
|
174
174
|
);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
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*
|
|
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*
|
|
119
|
+
yield* logText(formatOutput(result, format));
|
|
120
120
|
}),
|
|
121
121
|
),
|
|
122
122
|
);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
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*
|
|
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*
|
|
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*
|
|
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*
|
|
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 {
|
|
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*
|
|
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*
|
|
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*
|
|
312
|
+
yield* logText(formatOutput(output, format));
|
|
313
313
|
}),
|
|
314
314
|
).pipe(Command.withDescription("Read all messages from a session"));
|
|
315
315
|
|
package/src/shared/format.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Flag } from "effect/unstable/cli";
|
|
2
2
|
import { encode as encodeToon } from "@toon-format/toon";
|
|
3
|
-
import {
|
|
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
|
-
|
|
27
|
-
|
|
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));
|
package/src/shared/index.ts
CHANGED
|
@@ -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
|
|