@blogic-cz/agent-tools 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/dist/gh-tool/pr/commands.d.ts.map +1 -1
- package/dist/gh-tool/pr/core.d.ts.map +1 -1
- package/dist/gh-tool/pr/stack.d.ts +11 -0
- package/dist/gh-tool/pr/stack.d.ts.map +1 -1
- package/dist/observability-tool/shared.d.ts.map +1 -1
- package/dist/observability-tool/trace.d.ts +5 -0
- package/dist/observability-tool/trace.d.ts.map +1 -1
- package/dist/observability-tool/types.d.ts +8 -0
- package/dist/observability-tool/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/gh-tool/pr/commands.ts +46 -2
- package/src/gh-tool/pr/core.ts +18 -0
- package/src/gh-tool/pr/stack.ts +45 -0
- package/src/observability-tool/shared.ts +5 -0
- package/src/observability-tool/trace.ts +158 -1
- package/src/observability-tool/types.ts +9 -0
package/README.md
CHANGED
|
@@ -229,6 +229,7 @@ bun run agent-tools/example-tool/index.ts ping
|
|
|
229
229
|
```bash
|
|
230
230
|
bun gh-tool pr status
|
|
231
231
|
bun observability-tool trace get 0b7bdf0dde1c55458364ba5588a8075e --env local
|
|
232
|
+
bun observability-tool trace search '{ status = error }' --env local --start now-6h
|
|
232
233
|
bun k8s-tool kubectl --env test --cmd "get pods"
|
|
233
234
|
bun logs-tool list --env local
|
|
234
235
|
bun audit-tool list --limit 20
|
|
@@ -313,6 +314,11 @@ its own dry-run never disclosed. The bottom member still merges normally.
|
|
|
313
314
|
member first and refuses the whole operation if any is a draft, conflicting, or has failing or
|
|
314
315
|
pending checks — a partial stack merge leaves a parent on the trunk and a broken child.
|
|
315
316
|
|
|
317
|
+
`pr stack unstack` dissolves a stack. GitHub owns the base of every stacked PR, so `pr edit
|
|
318
|
+
--base` on a member refuses and names that command rather than letting GitHub's bare 422
|
|
319
|
+
through; merging the stack needs no retarget at all. `pr review-triage` counts open members
|
|
320
|
+
below the PR as blocking, because a member cannot land on its own while they are open.
|
|
321
|
+
|
|
316
322
|
Membership comes from GitHub's stacks API, never from chaining `baseRefName` to `headRefName`.
|
|
317
323
|
That chain both over-reports (a promotion PR whose head is `main` adopts every ordinary PR as a
|
|
318
324
|
child) and under-reports (a PR based on a stack member's branch need not be in the stack).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/pr/commands.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/pr/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;AAsL5C,eAAO,MAAM,qBAAqB,QAAwB,CAAC;AAE3D,eAAO,MAAM,iBAAiB,gIAiB5B,CAAC;AA8IH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;iBAYuC,MAAM;6EAMnE,CAAC;AAEH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;iBAR4C,MAAM;6EAuBnE,CAAC;AAEH,eAAO,MAAM,cAAc;;cAkBL,cAAc,EAAE;;;;;QAqIb,MAAM;;;;;;;;kGAQ7B,CAAC;AAEH,eAAO,MAAM,OAAO;WACX,MAAM;WACN,MAAM;YACL,MAAM,GAAG,IAAI;UACf,MAAM,GAAG,IAAI;UACb,MAAM,GAAG,IAAI;YACX,MAAM,GAAG,IAAI;wGAkBrB,CAAC;AAMH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;iBAxNkC,MAAM;6EAuPnE,CAAC;AAEH,eAAO,MAAM,QAAQ;UACb,MAAM,GAAG,IAAI;WACZ,MAAM;UACP,MAAM;WACL,OAAO;UACR,MAAM,GAAG,IAAI;sGA8FnB,CAAC;AAkFH,eAAO,MAAM,OAAO;QACd,MAAM;cACA,aAAa;kBACT,OAAO;aACZ,OAAO;gIAqThB,CAAC;AAEH,eAAO,MAAM,OAAO;QACd,MAAM;aACD,MAAM,GAAG,IAAI;kBACR,OAAO;;;;;;;;;;;;;;;;;;;iBA5uBwC,MAAM;6EA6vBnE,CAAC;AAEH,eAAO,MAAM,OAAO;QAAkD,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;iBA/vBpB,MAAM;6EA8wBnE,CAAC;AAEH,eAAO,MAAM,MAAM;QACb,MAAM;WACH,MAAM,GAAG,IAAI;UACd,MAAM,GAAG,IAAI;UACb,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;;iBApxB0C,MAAM;
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/pr/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,4 +39,15 @@ export declare const mergeStack: (opts: {
|
|
|
39
39
|
}[];
|
|
40
40
|
blockers: StackMergeBlocker[];
|
|
41
41
|
}, GitHubMergeError | (import("#gh/errors").GitHubCommandError | import("#gh/errors").GitHubNotFoundError | import("#gh/errors").GitHubAuthError), GitHubService>;
|
|
42
|
+
export declare const unstackStack: (opts: {
|
|
43
|
+
pr: number;
|
|
44
|
+
confirm: boolean;
|
|
45
|
+
}) => Effect.Effect<{
|
|
46
|
+
dissolved: boolean;
|
|
47
|
+
unstacked: boolean;
|
|
48
|
+
dryRun: boolean;
|
|
49
|
+
stackNumber: number;
|
|
50
|
+
pr: number;
|
|
51
|
+
removes: number[];
|
|
52
|
+
}, GitHubMergeError | (import("#gh/errors").GitHubCommandError | import("#gh/errors").GitHubNotFoundError | import("#gh/errors").GitHubAuthError), GitHubService>;
|
|
42
53
|
//# sourceMappingURL=stack.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stack.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/pr/stack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAe,iBAAiB,EAAoB,MAAM,WAAW,CAAC;AAGjG,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,CAAC;AAqFrB,eAAO,MAAM,UAAU;QACjB,MAAM;cACA,aAAa;aACd,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iKA2IhB,CAAC"}
|
|
1
|
+
{"version":3,"file":"stack.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/pr/stack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAe,iBAAiB,EAAoB,MAAM,WAAW,CAAC;AAGjG,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,CAAC;AAqFrB,eAAO,MAAM,UAAU;QACjB,MAAM;cACA,aAAa;aACd,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iKA2IhB,CAAC;AAEH,eAAO,MAAM,YAAY;QACnB,MAAM;aACD,OAAO;;;;;;;;iKAyChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/observability-tool/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAiB,MAAM,SAAS,CAAC;AAGvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EAEf,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAOjB,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/observability-tool/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAiB,MAAM,SAAS,CAAC;AAGvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EAEf,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAOjB,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAe/D;AAED,eAAO,MAAM,SAAS,mBAGrB,CAAC;AAEF,eAAO,MAAM,aAAa,kCAMzB,CAAC;AAkCF;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,sBAAsB,GAC7B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAU/C;AAyDD,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,EAAE,SAAS,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,iFA4BrE,CAAC;AAEL,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAWpD;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,MAAM,EAAE,sBAAsB,EAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,WAAW,GACjB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAyB1C;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,sBAAsB,EAC9B,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,YAAY,GAAG,MAAM,EACrC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,WAAW,GACpB,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAkCxD"}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
1
2
|
import { Command } from "effect/unstable/cli";
|
|
3
|
+
import { ObservabilityToolError } from "./errors";
|
|
4
|
+
import type { ObservabilityEnvConfig, SearchWindow, TempoSearchResponse, TraceSearchHit } from "./types";
|
|
5
|
+
export declare function summarizeSearchHits(response: TempoSearchResponse): TraceSearchHit[];
|
|
6
|
+
export declare function searchTempoByQuery(config: ObservabilityEnvConfig, query: string, window: SearchWindow, limit: number): Effect.Effect<TempoSearchResponse, ObservabilityToolError>;
|
|
2
7
|
export declare const traceCommand: Command.Command<"trace", {} | {}, {}, never, import("../config").ConfigService>;
|
|
3
8
|
//# sourceMappingURL=trace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/observability-tool/trace.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/observability-tool/trace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAe,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAY,OAAO,EAAQ,MAAM,qBAAqB,CAAC;AAK9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAWlD,OAAO,KAAK,EAEV,sBAAsB,EAItB,YAAY,EAEZ,mBAAmB,EAEnB,cAAc,EAEf,MAAM,SAAS,CAAC;AAuVjB,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,cAAc,EAAE,CAsBnF;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,sBAAsB,EAC9B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,CA4C5D;AAgPD,eAAO,MAAM,YAAY,iFAGxB,CAAC"}
|
|
@@ -118,6 +118,14 @@ export type TempoSearchResponse = {
|
|
|
118
118
|
}>;
|
|
119
119
|
readonly metrics?: Record<string, unknown>;
|
|
120
120
|
};
|
|
121
|
+
export type TraceSearchHit = {
|
|
122
|
+
readonly traceId: string;
|
|
123
|
+
readonly startedAt?: string;
|
|
124
|
+
readonly rootServiceName?: string;
|
|
125
|
+
readonly rootTraceName?: string;
|
|
126
|
+
readonly durationMs?: number;
|
|
127
|
+
readonly matchedSpans?: number;
|
|
128
|
+
};
|
|
121
129
|
export declare const IdKind: Schema.Literals<readonly ["trace_id", "span_id"]>;
|
|
122
130
|
export type IdKind = typeof IdKind.Type;
|
|
123
131
|
export declare const ResolutionVia: Schema.Literals<readonly ["direct_trace_id", "span_search"]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/observability-tool/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/observability-tool/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
REVIEW_EVENTS,
|
|
30
30
|
} from "#gh/config";
|
|
31
31
|
|
|
32
|
-
import { mergeStack, readStack } from "./stack";
|
|
32
|
+
import { mergeStack, readStack, unstackStack } from "./stack";
|
|
33
33
|
import {
|
|
34
34
|
closePR,
|
|
35
35
|
collectWithStableState,
|
|
@@ -414,6 +414,23 @@ export const fetchReviewTriage = Effect.fn("pr.fetchReviewTriage")(function* (
|
|
|
414
414
|
if (info.reviewDecision !== "" && info.reviewDecision !== "APPROVED") {
|
|
415
415
|
blocking.push(`review=${info.reviewDecision}`);
|
|
416
416
|
}
|
|
417
|
+
|
|
418
|
+
// A member of a GitHub stack cannot merge on its own while open members sit below it, so a
|
|
419
|
+
// verdict that reads only this PR would report ready for a PR nothing can land.
|
|
420
|
+
const stackView = yield* readStack({ pr: info.number }).pipe(
|
|
421
|
+
Effect.catch(() => Effect.succeed(null)),
|
|
422
|
+
);
|
|
423
|
+
const ownPosition = stackView?.members.find((member) => member.number === info.number)?.position;
|
|
424
|
+
const openBelow =
|
|
425
|
+
stackView?.isStacked === true && ownPosition !== undefined
|
|
426
|
+
? stackView.members.filter(
|
|
427
|
+
(member) => member.state === "open" && member.position < ownPosition,
|
|
428
|
+
)
|
|
429
|
+
: [];
|
|
430
|
+
if (openBelow.length > 0) {
|
|
431
|
+
blocking.push(`stack_members_below=${openBelow.map((member) => member.number).join(",")}`);
|
|
432
|
+
}
|
|
433
|
+
|
|
417
434
|
const ready = {
|
|
418
435
|
ready: blocking.length === 0,
|
|
419
436
|
mergeable: info.mergeable,
|
|
@@ -1657,7 +1674,34 @@ const prStackMergeCommand = Command.make(
|
|
|
1657
1674
|
),
|
|
1658
1675
|
);
|
|
1659
1676
|
|
|
1677
|
+
const prStackUnstackCommand = Command.make(
|
|
1678
|
+
"unstack",
|
|
1679
|
+
{
|
|
1680
|
+
confirm: Flag.boolean("confirm").pipe(
|
|
1681
|
+
Flag.withDescription(
|
|
1682
|
+
"Actually unstack (without this flag, only shows what would be removed)",
|
|
1683
|
+
),
|
|
1684
|
+
Flag.withDefault(false),
|
|
1685
|
+
),
|
|
1686
|
+
format: formatOption,
|
|
1687
|
+
pr: Flag.integer("pr").pipe(Flag.withDescription("Any PR in the stack to dissolve")),
|
|
1688
|
+
repo: repoOption,
|
|
1689
|
+
},
|
|
1690
|
+
({ confirm, format, pr, repo }) =>
|
|
1691
|
+
withRepo(
|
|
1692
|
+
repo,
|
|
1693
|
+
Effect.gen(function* () {
|
|
1694
|
+
const result = yield* unstackStack({ confirm, pr });
|
|
1695
|
+
yield* logFormatted(result, format);
|
|
1696
|
+
}),
|
|
1697
|
+
),
|
|
1698
|
+
).pipe(
|
|
1699
|
+
Command.withDescription(
|
|
1700
|
+
"Remove every unmerged PR from the stack, dissolving it (dry-run by default)",
|
|
1701
|
+
),
|
|
1702
|
+
);
|
|
1703
|
+
|
|
1660
1704
|
export const prStackCommand = Command.make("stack", {}).pipe(
|
|
1661
|
-
Command.withSubcommands([prStackViewCommand, prStackMergeCommand]),
|
|
1705
|
+
Command.withSubcommands([prStackViewCommand, prStackMergeCommand, prStackUnstackCommand]),
|
|
1662
1706
|
Command.withDescription("Stacked pull request operations"),
|
|
1663
1707
|
);
|
package/src/gh-tool/pr/core.ts
CHANGED
|
@@ -1181,6 +1181,24 @@ export const editPR = Effect.fn("pr.editPR")(function* (opts: {
|
|
|
1181
1181
|
|
|
1182
1182
|
const repo = yield* gh.getRepoInfo();
|
|
1183
1183
|
|
|
1184
|
+
// GitHub rejects a base change on a stacked PR with a bare 422. Say what the state is and
|
|
1185
|
+
// which operation changes it, rather than letting the validation error through.
|
|
1186
|
+
if (opts.base !== null) {
|
|
1187
|
+
const stackView = yield* readStack({ pr: opts.pr }).pipe(
|
|
1188
|
+
Effect.catch(() => Effect.succeed(null)),
|
|
1189
|
+
);
|
|
1190
|
+
if (stackView?.isStacked === true) {
|
|
1191
|
+
return yield* new GitHubCommandError({
|
|
1192
|
+
command: "pr edit --base",
|
|
1193
|
+
exitCode: 1,
|
|
1194
|
+
stderr: `PR #${opts.pr} belongs to GitHub stack #${stackView.stackNumber}`,
|
|
1195
|
+
message: `Cannot retarget PR #${opts.pr}: it belongs to GitHub stack #${stackView.stackNumber}, whose members' bases GitHub owns`,
|
|
1196
|
+
hint: "Dissolve the stack first with 'pr stack unstack', which removes every unmerged member, then retarget. Merging the stack instead needs no retarget at all.",
|
|
1197
|
+
nextCommand: `agent-tools-gh pr stack view --pr ${opts.pr}`,
|
|
1198
|
+
});
|
|
1199
|
+
}
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1184
1202
|
const editArgs = [
|
|
1185
1203
|
"api",
|
|
1186
1204
|
"--method",
|
package/src/gh-tool/pr/stack.ts
CHANGED
|
@@ -237,3 +237,48 @@ export const mergeStack = Effect.fn("pr.mergeStack")(function* (opts: {
|
|
|
237
237
|
hint: "Inspect the stack state and branch protections, then retry.",
|
|
238
238
|
});
|
|
239
239
|
});
|
|
240
|
+
|
|
241
|
+
export const unstackStack = Effect.fn("pr.unstackStack")(function* (opts: {
|
|
242
|
+
pr: number;
|
|
243
|
+
confirm: boolean;
|
|
244
|
+
}) {
|
|
245
|
+
const gh = yield* GitHubService;
|
|
246
|
+
const repo = yield* gh.getRepoInfo();
|
|
247
|
+
const view = yield* readStack({ pr: opts.pr });
|
|
248
|
+
|
|
249
|
+
if (!view.isStacked || view.stackNumber === null) {
|
|
250
|
+
return yield* new GitHubMergeError({
|
|
251
|
+
message: `PR #${opts.pr} is not part of a GitHub stack`,
|
|
252
|
+
reason: "unknown",
|
|
253
|
+
hint: "There is no stack to dissolve.",
|
|
254
|
+
nextCommand: `agent-tools-gh pr stack view --pr ${opts.pr}`,
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
const unmerged = view.members.filter((member) => member.state === "open");
|
|
259
|
+
|
|
260
|
+
const plan = {
|
|
261
|
+
stackNumber: view.stackNumber,
|
|
262
|
+
pr: opts.pr,
|
|
263
|
+
removes: unmerged.map((member) => member.number),
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
if (!opts.confirm) {
|
|
267
|
+
return { ...plan, dissolved: false, unstacked: false, dryRun: true };
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// The endpoint removes every unmerged member at once; it has no per-PR form. A 204 means
|
|
271
|
+
// nothing was left and the stack is gone, a 200 means some members could not be removed.
|
|
272
|
+
const result = yield* gh.apiRequest<unknown>({
|
|
273
|
+
path: `repos/${repo.owner}/${repo.name}/stacks/${view.stackNumber}/unstack`,
|
|
274
|
+
method: "POST",
|
|
275
|
+
alsoAcceptStatus: [204],
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
return {
|
|
279
|
+
...plan,
|
|
280
|
+
dissolved: result.status === 204,
|
|
281
|
+
unstacked: true,
|
|
282
|
+
dryRun: false,
|
|
283
|
+
};
|
|
284
|
+
});
|
|
@@ -26,6 +26,11 @@ export function formatObservabilityError(error: unknown): string {
|
|
|
26
26
|
return error.message;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
// Structured causes carry their text in `message`; String() would render "[object Object]".
|
|
30
|
+
if (typeof error === "object" && error !== null && "message" in error) {
|
|
31
|
+
return String((error as { message: unknown }).message);
|
|
32
|
+
}
|
|
33
|
+
|
|
29
34
|
return String(error);
|
|
30
35
|
}
|
|
31
36
|
|
|
@@ -25,6 +25,7 @@ import type {
|
|
|
25
25
|
SpanResolution,
|
|
26
26
|
TempoSearchResponse,
|
|
27
27
|
TempoTraceResponse,
|
|
28
|
+
TraceSearchHit,
|
|
28
29
|
TraceSummary,
|
|
29
30
|
} from "./types";
|
|
30
31
|
|
|
@@ -355,6 +356,95 @@ function resolveTraceFromId(
|
|
|
355
356
|
});
|
|
356
357
|
}
|
|
357
358
|
|
|
359
|
+
/**
|
|
360
|
+
* Strict counterpart of relativeToEpoch for user-supplied windows: an unparseable bound is
|
|
361
|
+
* refused rather than silently collapsed to "now", which would report a zero-width window as
|
|
362
|
+
* "no traces found".
|
|
363
|
+
*/
|
|
364
|
+
function strictRelativeToEpoch(value: string, nowEpoch: number): number | undefined {
|
|
365
|
+
const trimmed = value.trim();
|
|
366
|
+
if (trimmed === "now") return nowEpoch;
|
|
367
|
+
return /^now-\d+[smhd]$/.test(trimmed) ? relativeToEpoch(trimmed, nowEpoch) : undefined;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/** Tempo rejects a search window wider than this, so the CLI says so before the API does. */
|
|
371
|
+
const MAX_SEARCH_RANGE_SECONDS = 168 * 3600;
|
|
372
|
+
|
|
373
|
+
export function summarizeSearchHits(response: TempoSearchResponse): TraceSearchHit[] {
|
|
374
|
+
return (response.traces ?? [])
|
|
375
|
+
.filter((trace) => trace.traceID !== undefined)
|
|
376
|
+
.map((trace) => {
|
|
377
|
+
const startedNano = nanoToBigInt(trace.startTimeUnixNano);
|
|
378
|
+
|
|
379
|
+
return {
|
|
380
|
+
traceId: trace.traceID as string,
|
|
381
|
+
startedAt:
|
|
382
|
+
startedNano === undefined
|
|
383
|
+
? undefined
|
|
384
|
+
: new Date(Number(startedNano / 1_000_000n)).toISOString(),
|
|
385
|
+
rootServiceName: trace.rootServiceName,
|
|
386
|
+
rootTraceName: trace.rootTraceName,
|
|
387
|
+
durationMs: trace.durationMs,
|
|
388
|
+
matchedSpans: trace.spanSets?.reduce(
|
|
389
|
+
(total, spanSet) => total + (spanSet.matched ?? spanSet.spans?.length ?? 0),
|
|
390
|
+
0,
|
|
391
|
+
),
|
|
392
|
+
};
|
|
393
|
+
})
|
|
394
|
+
.toSorted((left, right) => (right.startedAt ?? "").localeCompare(left.startedAt ?? ""));
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
export function searchTempoByQuery(
|
|
398
|
+
config: ObservabilityEnvConfig,
|
|
399
|
+
query: string,
|
|
400
|
+
window: SearchWindow,
|
|
401
|
+
limit: number,
|
|
402
|
+
): Effect.Effect<TempoSearchResponse, ObservabilityToolError> {
|
|
403
|
+
return Effect.gen(function* () {
|
|
404
|
+
const tempoUid = yield* requireTempoUid(config);
|
|
405
|
+
const now = Math.floor(Date.now() / 1000);
|
|
406
|
+
const startEpoch = strictRelativeToEpoch(window.start, now);
|
|
407
|
+
const endEpoch = strictRelativeToEpoch(window.end, now);
|
|
408
|
+
|
|
409
|
+
if (startEpoch === undefined || endEpoch === undefined) {
|
|
410
|
+
const rejected = startEpoch === undefined ? window.start : window.end;
|
|
411
|
+
return yield* new ObservabilityToolError({
|
|
412
|
+
cause: {
|
|
413
|
+
message: `Unparseable time "${rejected}" — use "now" or "now-<number><s|m|h|d>", e.g. now-6h`,
|
|
414
|
+
code: "INVALID_TIME_RANGE",
|
|
415
|
+
retryable: false,
|
|
416
|
+
},
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
if (startEpoch >= endEpoch) {
|
|
421
|
+
return yield* new ObservabilityToolError({
|
|
422
|
+
cause: {
|
|
423
|
+
message: `Search window ${window.start} → ${window.end} ends at or before it starts`,
|
|
424
|
+
code: "INVALID_TIME_RANGE",
|
|
425
|
+
retryable: false,
|
|
426
|
+
},
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
if (endEpoch - startEpoch > MAX_SEARCH_RANGE_SECONDS) {
|
|
431
|
+
return yield* new ObservabilityToolError({
|
|
432
|
+
cause: {
|
|
433
|
+
message: `Search window ${window.start} → ${window.end} exceeds the 168h Tempo limit — query a narrower range`,
|
|
434
|
+
code: "SEARCH_RANGE_TOO_WIDE",
|
|
435
|
+
retryable: false,
|
|
436
|
+
},
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
const searchUrl =
|
|
441
|
+
`/api/datasources/proxy/uid/${tempoUid}/api/search` +
|
|
442
|
+
`?q=${encodeURIComponent(query)}&start=${startEpoch}&end=${endEpoch}&limit=${limit}`;
|
|
443
|
+
|
|
444
|
+
return yield* observabilityFetch<TempoSearchResponse>(config, searchUrl);
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
|
|
358
448
|
function handleTraceGet(
|
|
359
449
|
id: string,
|
|
360
450
|
format: OutputFormat,
|
|
@@ -526,7 +616,74 @@ const findCommand = Command.make(
|
|
|
526
616
|
({ id, format, env, profile }) => handleTraceGet(id, format, env, profile),
|
|
527
617
|
).pipe(Command.withDescription("Alias for 'trace get' — resolve a trace by trace ID or span ID"));
|
|
528
618
|
|
|
619
|
+
const searchCommand = Command.make(
|
|
620
|
+
"search",
|
|
621
|
+
{
|
|
622
|
+
query: Argument.string("query"),
|
|
623
|
+
format: formatOption,
|
|
624
|
+
env: envOption,
|
|
625
|
+
profile: profileOption,
|
|
626
|
+
limit: Flag.integer("limit").pipe(
|
|
627
|
+
Flag.withDescription("Max traces to return (default: 20)"),
|
|
628
|
+
Flag.withDefault(20),
|
|
629
|
+
),
|
|
630
|
+
start: Flag.string("start").pipe(
|
|
631
|
+
Flag.withDescription("Start time (default: now-1h, max span now-168h)"),
|
|
632
|
+
Flag.withDefault("now-1h"),
|
|
633
|
+
),
|
|
634
|
+
end: Flag.string("end").pipe(
|
|
635
|
+
Flag.withDescription("End time (default: now)"),
|
|
636
|
+
Flag.withDefault("now"),
|
|
637
|
+
),
|
|
638
|
+
},
|
|
639
|
+
({ query, format, env, profile, limit, start, end }) => {
|
|
640
|
+
const startedAt = Date.now();
|
|
641
|
+
|
|
642
|
+
return Effect.gen(function* () {
|
|
643
|
+
const config = yield* resolveConfig(env, profile);
|
|
644
|
+
const response = yield* searchTempoByQuery(config, query, { start, end }, limit);
|
|
645
|
+
const traces = summarizeSearchHits(response);
|
|
646
|
+
|
|
647
|
+
const result = {
|
|
648
|
+
success: true,
|
|
649
|
+
message: `Found ${traces.length} trace(s) matching the TraceQL query`,
|
|
650
|
+
data: {
|
|
651
|
+
environment: env,
|
|
652
|
+
grafanaUrl: config.url,
|
|
653
|
+
tempoDatasourceUid: config.tempoUid ?? null,
|
|
654
|
+
query,
|
|
655
|
+
start,
|
|
656
|
+
end,
|
|
657
|
+
limit,
|
|
658
|
+
traceCount: traces.length,
|
|
659
|
+
traces,
|
|
660
|
+
},
|
|
661
|
+
executionTimeMs: Date.now() - startedAt,
|
|
662
|
+
};
|
|
663
|
+
|
|
664
|
+
yield* logText(formatOutput(result, format));
|
|
665
|
+
}).pipe(
|
|
666
|
+
Effect.catch((error) =>
|
|
667
|
+
Effect.gen(function* () {
|
|
668
|
+
const result = {
|
|
669
|
+
success: false,
|
|
670
|
+
message: "Failed to search Tempo",
|
|
671
|
+
error: formatObservabilityError(error),
|
|
672
|
+
hint: 'Query is TraceQL, e.g. { name = "GraphQL Document Validation" && status = error }. The window may not exceed 168h',
|
|
673
|
+
executionTimeMs: Date.now() - startedAt,
|
|
674
|
+
};
|
|
675
|
+
yield* logText(formatOutput(result, format));
|
|
676
|
+
}),
|
|
677
|
+
),
|
|
678
|
+
);
|
|
679
|
+
},
|
|
680
|
+
).pipe(
|
|
681
|
+
Command.withDescription(
|
|
682
|
+
"Search Tempo with a TraceQL query — find traces when no trace or span ID is known yet",
|
|
683
|
+
),
|
|
684
|
+
);
|
|
685
|
+
|
|
529
686
|
export const traceCommand = Command.make("trace", {}).pipe(
|
|
530
687
|
Command.withDescription("Tempo trace operations"),
|
|
531
|
-
Command.withSubcommands([getCommand, logsCommand, findCommand]),
|
|
688
|
+
Command.withSubcommands([getCommand, searchCommand, logsCommand, findCommand]),
|
|
532
689
|
);
|
|
@@ -127,6 +127,15 @@ export type TempoSearchResponse = {
|
|
|
127
127
|
readonly metrics?: Record<string, unknown>;
|
|
128
128
|
};
|
|
129
129
|
|
|
130
|
+
export type TraceSearchHit = {
|
|
131
|
+
readonly traceId: string;
|
|
132
|
+
readonly startedAt?: string;
|
|
133
|
+
readonly rootServiceName?: string;
|
|
134
|
+
readonly rootTraceName?: string;
|
|
135
|
+
readonly durationMs?: number;
|
|
136
|
+
readonly matchedSpans?: number;
|
|
137
|
+
};
|
|
138
|
+
|
|
130
139
|
export const IdKind = Schema.Literals(["trace_id", "span_id"]);
|
|
131
140
|
export type IdKind = typeof IdKind.Type;
|
|
132
141
|
|