@blogic-cz/agent-tools 1.8.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/config/loader.d.ts.map +1 -1
  2. package/dist/config/types.d.ts +1 -0
  3. package/dist/config/types.d.ts.map +1 -1
  4. package/dist/credential-guard/index.d.ts.map +1 -1
  5. package/dist/gh-tool/issue/commands.d.ts +2 -0
  6. package/dist/gh-tool/issue/commands.d.ts.map +1 -1
  7. package/dist/gh-tool/issue/core.d.ts +15 -2
  8. package/dist/gh-tool/issue/core.d.ts.map +1 -1
  9. package/dist/gh-tool/label.d.ts +20 -0
  10. package/dist/gh-tool/label.d.ts.map +1 -0
  11. package/dist/gh-tool/read/classes.d.ts +4 -0
  12. package/dist/gh-tool/read/classes.d.ts.map +1 -1
  13. package/dist/gh-tool/read/commits.d.ts +10 -0
  14. package/dist/gh-tool/read/commits.d.ts.map +1 -0
  15. package/dist/gh-tool/read/issues.d.ts +14 -2
  16. package/dist/gh-tool/read/issues.d.ts.map +1 -1
  17. package/dist/gh-tool/read/keys.d.ts +3 -0
  18. package/dist/gh-tool/read/keys.d.ts.map +1 -1
  19. package/dist/gh-tool/read/reads.d.ts +13 -2
  20. package/dist/gh-tool/read/reads.d.ts.map +1 -1
  21. package/dist/gh-tool/repo.d.ts +5 -0
  22. package/dist/gh-tool/repo.d.ts.map +1 -1
  23. package/package.json +2 -1
  24. package/schemas/agent-tools.schema.json +5 -0
  25. package/src/config/loader.ts +1 -0
  26. package/src/config/types.ts +1 -0
  27. package/src/credential-guard/index.ts +169 -1
  28. package/src/gh-tool/issue/commands.ts +11 -1
  29. package/src/gh-tool/issue/core.ts +4 -1
  30. package/src/gh-tool/label.ts +57 -0
  31. package/src/gh-tool/main.ts +19 -2
  32. package/src/gh-tool/read/classes.ts +1 -0
  33. package/src/gh-tool/read/commits.ts +28 -0
  34. package/src/gh-tool/read/issues.ts +21 -4
  35. package/src/gh-tool/read/keys.ts +2 -0
  36. package/src/gh-tool/repo.ts +21 -0
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAgB,KAAK,EAAU,MAAM,QAAQ,CAAC;AAE9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAuOlE,wBAAgB,YAAY,CAC1B,MAAM,EAAE,OAAO,EACf,UAAU,GAAE,MAA4B,GACvC,gBAAgB,CAmClB;AAmFD,wBAAsB,UAAU,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAcxE;;AAED,qBAAa,aAAc,SAAQ,kBAElC;CAAG;;;;AAEJ,qBAAa,eAAgB,SAAQ,qBAAoC;IACvE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB,CAAC;CAAG;AAEL,eAAO,MAAM,kBAAkB,oDAM9B,CAAC;AAEF,KAAK,eAAe,GAAG,MAAM,IAAI,CAC/B,gBAAgB,EAChB,OAAO,GAAG,eAAe,GAAG,YAAY,GAAG,UAAU,GAAG,eAAe,GAAG,MAAM,CACjF,CAAC;AAEF,wBAAgB,aAAa,CAAC,CAAC,EAC7B,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACpC,OAAO,EAAE,eAAe,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,CAAC,GAAG,SAAS,CAkCf;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAE9F;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACpC,OAAO,CAAC,EAAE,MAAM,GACf,gBAAgB,GAAG,SAAS,CAc9B;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACpC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GACrB,MAAM,GAAG,SAAS,CAqBpB"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAgB,KAAK,EAAU,MAAM,QAAQ,CAAC;AAE9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAwOlE,wBAAgB,YAAY,CAC1B,MAAM,EAAE,OAAO,EACf,UAAU,GAAE,MAA4B,GACvC,gBAAgB,CAmClB;AAmFD,wBAAsB,UAAU,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAcxE;;AAED,qBAAa,aAAc,SAAQ,kBAElC;CAAG;;;;AAEJ,qBAAa,eAAgB,SAAQ,qBAAoC;IACvE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB,CAAC;CAAG;AAEL,eAAO,MAAM,kBAAkB,oDAM9B,CAAC;AAEF,KAAK,eAAe,GAAG,MAAM,IAAI,CAC/B,gBAAgB,EAChB,OAAO,GAAG,eAAe,GAAG,YAAY,GAAG,UAAU,GAAG,eAAe,GAAG,MAAM,CACjF,CAAC;AAEF,wBAAgB,aAAa,CAAC,CAAC,EAC7B,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACpC,OAAO,EAAE,eAAe,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,CAAC,GAAG,SAAS,CAkCf;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAE9F;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACpC,OAAO,CAAC,EAAE,MAAM,GACf,gBAAgB,GAAG,SAAS,CAc9B;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACpC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GACrB,MAAM,GAAG,SAAS,CAqBpB"}
@@ -165,6 +165,7 @@ export type CliToolOverride = {
165
165
  export type CredentialGuardConfig = {
166
166
  /** Exact, case-sensitive names approved for static printenv reads. Empty by default. */
167
167
  allowedEnvironmentVariables?: string[];
168
+ chainCopyDestinations?: string[];
168
169
  additionalBlockedPaths?: string[];
169
170
  additionalAllowedPaths?: string[];
170
171
  additionalBlockedCliTools?: CliToolOverride[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/credential-guard/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAmB,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAM5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAM/D,8CAA8C;AAC9C,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,+CAA+C;AAC/C,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,CAAC;AAQF,+CAA+C;AAC/C,MAAM,MAAM,eAAe,GAAG;IAC5B,uBAAuB,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACxE,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC3E,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAC7C,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAC7C,sBAAsB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACrD,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACjF,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACjD,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACxD,CAAC;AAy+GF,6CAA6C;AAC7C,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAErE;AAED,2CAA2C;AAC3C,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAEpE;AAED,2CAA2C;AAC3C,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAEpE;AAMD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,eAAe,CA8hBrF;AAQD,kEAAkE;AAClE,eAAO,MAAM,uBAAuB,UAjjID,SAAS,UAAU,UAAU,KAAK,IAijIM,CAAC;AAE5E,oDAAoD;AACpD,eAAO,MAAM,aAAa,YAnjIC,MAAM,KAAK;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAmjIjB,CAAC;AAExD,yEAAyE;AACzE,eAAO,MAAM,aAAa,aArjIE,MAAM,KAAK,OAqjIgB,CAAC;AAExD,yDAAyD;AACzD,eAAO,MAAM,aAAa,aAvjIE,MAAM,KAAK,OAujIgB,CAAC;AAExD,oEAAoE;AACpE,eAAO,MAAM,sBAAsB,YAzjIC,MAAM,KAAK,OAyjI0B,CAAC;AAE1E,iDAAiD;AACjD,eAAO,MAAM,iBAAiB,YA3jIC,MAAM,KAAK;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IA2jIf,CAAC;AAEhE,wDAAwD;AACxD,eAAO,MAAM,kBAAkB,YA7jIC,MAAM,KAAK,OA6jIsB,CAAC;AAElE,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB,YA/jIC,MAAM,KAAK,MAAM,GAAG,IA+jIa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/credential-guard/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAmB,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAO5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAM/D,8CAA8C;AAC9C,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,+CAA+C;AAC/C,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,CAAC;AAQF,+CAA+C;AAC/C,MAAM,MAAM,eAAe,GAAG;IAC5B,uBAAuB,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACxE,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC3E,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAC7C,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAC7C,sBAAsB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACrD,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACjF,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACjD,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACxD,CAAC;AAsmHF,6CAA6C;AAC7C,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAErE;AAED,2CAA2C;AAC3C,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAEpE;AAED,2CAA2C;AAC3C,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAEpE;AAMD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,eAAe,CAwkBrF;AAQD,kEAAkE;AAClE,eAAO,MAAM,uBAAuB,UAxtID,SAAS,UAAU,UAAU,KAAK,IAwtIM,CAAC;AAE5E,oDAAoD;AACpD,eAAO,MAAM,aAAa,YA1tIC,MAAM,KAAK;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IA0tIjB,CAAC;AAExD,yEAAyE;AACzE,eAAO,MAAM,aAAa,aA5tIE,MAAM,KAAK,OA4tIgB,CAAC;AAExD,yDAAyD;AACzD,eAAO,MAAM,aAAa,aA9tIE,MAAM,KAAK,OA8tIgB,CAAC;AAExD,oEAAoE;AACpE,eAAO,MAAM,sBAAsB,YAhuIC,MAAM,KAAK,OAguI0B,CAAC;AAE1E,iDAAiD;AACjD,eAAO,MAAM,iBAAiB,YAluIC,MAAM,KAAK;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAkuIf,CAAC;AAEhE,wDAAwD;AACxD,eAAO,MAAM,kBAAkB,YApuIC,MAAM,KAAK,OAouIsB,CAAC;AAElE,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB,YAtuIC,MAAM,KAAK,MAAM,GAAG,IAsuIa,CAAC"}
@@ -3,6 +3,8 @@ import { Option } from "effect";
3
3
  import { GitHubService } from "#gh/read/transport";
4
4
  export declare const issueListCommand: Command.Command<"list", {
5
5
  readonly format: "json" | "toon";
6
+ readonly includeBody: boolean;
7
+ readonly fresh: boolean;
6
8
  readonly labels: Option.Option<string>;
7
9
  readonly limit: number;
8
10
  readonly repo: Option.Option<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/issue/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AAmBxC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAanD,eAAO,MAAM,gBAAgB;;;;;;2DA8BwD,CAAC;AAEtF,eAAO,MAAM,gBAAgB;;;;2DAmB5B,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;;;;2DAgCiC,CAAC;AAEnE,eAAO,MAAM,iBAAiB;;;;;;;2DAwCoD,CAAC;AAEnF,eAAO,MAAM,kBAAkB;;;;;;2DAmCyB,CAAC;AAEzD,eAAO,MAAM,kBAAkB;;;;;;;;;2DAiDsB,CAAC;AAEtD,eAAO,MAAM,mBAAmB;;;;;;2DA6B6B,CAAC;AAE9D,eAAO,MAAM,gBAAgB;;;;;;;;;;;2DAiEkD,CAAC"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/issue/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AAmBxC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAanD,eAAO,MAAM,gBAAgB;;;;;;;;2DAwCwD,CAAC;AAEtF,eAAO,MAAM,gBAAgB;;;;2DAmB5B,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;;;;2DAgCiC,CAAC;AAEnE,eAAO,MAAM,iBAAiB;;;;;;;2DAwCoD,CAAC;AAEnF,eAAO,MAAM,kBAAkB;;;;;;2DAmCyB,CAAC;AAEzD,eAAO,MAAM,kBAAkB;;;;;;;;;2DAiDsB,CAAC;AAEtD,eAAO,MAAM,mBAAmB;;;;;;2DA6B6B,CAAC;AAE9D,eAAO,MAAM,gBAAgB;;;;;;;;;;;2DAiEkD,CAAC"}
@@ -41,7 +41,20 @@ export declare const listIssues: (opts: {
41
41
  state: string;
42
42
  labels: string | null;
43
43
  limit: number;
44
- }) => Effect.Effect<{
44
+ includeBody?: boolean;
45
+ fresh?: boolean;
46
+ }) => Effect.Effect<({
47
+ readonly number: number;
48
+ readonly title: string;
49
+ readonly state: string;
50
+ readonly url: string;
51
+ readonly labels: {
52
+ readonly name: string;
53
+ }[];
54
+ readonly createdAt: string;
55
+ readonly body: string;
56
+ } | {
57
+ readonly body?: string | undefined;
45
58
  readonly number: number;
46
59
  readonly title: string;
47
60
  readonly state: string;
@@ -50,7 +63,7 @@ export declare const listIssues: (opts: {
50
63
  readonly name: string;
51
64
  }[];
52
65
  readonly createdAt: string;
53
- }[], import("#gh/read/transport").GhError, GitHubService>;
66
+ })[], import("#gh/read/transport").GhError, GitHubService>;
54
67
  export declare const viewIssue: (issueNumber: number) => Effect.Effect<Pick<{
55
68
  readonly number: number;
56
69
  readonly title: string;
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/issue/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAAyB,YAAY,EAAgC,MAAM,WAAW,CAAC;AAGnG,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMnD,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChC,SAAS,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAYF,eAAO,MAAM,UAAU;WACd,MAAM;YACL,MAAM,GAAG,IAAI;WACd,MAAM;;;;;;;;;;yDAGb,CAAC;AAEH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;6JAapB,CAAC;AAEH,eAAO,MAAM,kBAAkB,uLA0B7B,CAAC;AAEH,eAAO,MAAM,UAAU;WACd,MAAM;aACJ,MAAM,GAAG,IAAI;YACd,MAAM;;;;;;;;;;;;;;;;;;6JAgBd,CAAC;AAEH,eAAO,MAAM,WAAW;WACf,MAAM;aACJ,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;6JAgBtB,CAAC;AAEH,eAAO,MAAM,cAAc;WAClB,MAAM;UACP,MAAM;;;;;;;uDAiDZ,CAAC;AAEH,eAAO,MAAM,WAAW;WACf,MAAM;UACP,MAAM;cACF,MAAM,GAAG,IAAI;YACf,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;6JA2BrB,CAAC;AAEH,eAAO,MAAM,SAAS;WACb,MAAM;WACN,MAAM,GAAG,IAAI;UACd,MAAM,GAAG,IAAI;eACR,MAAM,GAAG,IAAI;kBACV,MAAM,GAAG,IAAI;iBACd,MAAM,GAAG,IAAI;oBACV,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;6JA+B7B,CAAC"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/issue/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAAyB,YAAY,EAAgC,MAAM,WAAW,CAAC;AAGnG,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMnD,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChC,SAAS,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAYF,eAAO,MAAM,UAAU;WACd,MAAM;YACL,MAAM,GAAG,IAAI;WACd,MAAM;kBACC,OAAO;YACb,OAAO;;;;;;;;;;;;;;;;;;;;;0DAIf,CAAC;AAEH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;6JAapB,CAAC;AAEH,eAAO,MAAM,kBAAkB,uLA0B7B,CAAC;AAEH,eAAO,MAAM,UAAU;WACd,MAAM;aACJ,MAAM,GAAG,IAAI;YACd,MAAM;;;;;;;;;;;;;;;;;;6JAgBd,CAAC;AAEH,eAAO,MAAM,WAAW;WACf,MAAM;aACJ,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;6JAgBtB,CAAC;AAEH,eAAO,MAAM,cAAc;WAClB,MAAM;UACP,MAAM;;;;;;;uDAiDZ,CAAC;AAEH,eAAO,MAAM,WAAW;WACf,MAAM;UACP,MAAM;cACF,MAAM,GAAG,IAAI;YACf,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;6JA2BrB,CAAC;AAEH,eAAO,MAAM,SAAS;WACb,MAAM;WACN,MAAM,GAAG,IAAI;UACd,MAAM,GAAG,IAAI;eACR,MAAM,GAAG,IAAI;kBACV,MAAM,GAAG,IAAI;iBACd,MAAM,GAAG,IAAI;oBACV,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;6JA+B7B,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { Command } from "effect/cli";
2
+ import { Effect, Option } from "effect";
3
+ import { GitHubService } from "#gh/read/transport";
4
+ export declare const createLabel: (opts: {
5
+ name: string;
6
+ color: string;
7
+ description: string;
8
+ force: boolean;
9
+ }) => Effect.Effect<{
10
+ name: string;
11
+ }, import("#gh/read/transport").GhError, GitHubService>;
12
+ export declare const labelCreateCommand: Command.Command<"create", {
13
+ readonly name: string;
14
+ readonly color: string;
15
+ readonly description: string;
16
+ readonly force: boolean;
17
+ readonly repo: Option.Option<string>;
18
+ readonly format: "json" | "toon";
19
+ }, {}, import("#gh/read/transport").GhError, GitHubService>;
20
+ //# sourceMappingURL=label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../src/gh-tool/label.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGxC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKnD,eAAO,MAAM,WAAW;UAChB,MAAM;WACL,MAAM;iBACA,MAAM;WACZ,OAAO;;;uDAed,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;2DA0B6B,CAAC"}
@@ -90,5 +90,9 @@ export declare const OPS: {
90
90
  readonly jobIdentity: {
91
91
  readonly kind: "immutable";
92
92
  };
93
+ readonly commitAuthor: {
94
+ readonly kind: "ttl";
95
+ readonly ttlMs: 300000;
96
+ };
93
97
  };
94
98
  //# sourceMappingURL=classes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"classes.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/read/classes.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC7E;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAErC,eAAO,MAAM,GAAG;;iBACJ,IAAI,EAAE,MAAM;iBAAE,KAAK,EAAE,IAAI;;;iBACpB,IAAI,EAAE,MAAM;iBAAE,KAAK,EAAE,IAAI;;;iBAC9B,IAAI,EAAE,OAAO;iBAAE,KAAK,EAAE,IAAI;iBAAE,QAAQ,EAAE,KAAK;;;iBACzC,IAAI,EAAE,OAAO;iBAAE,KAAK,EAAE,IAAI;iBAAE,QAAQ,EAAE,KAAK;;;iBAC7C,IAAI,EAAE,KAAK;iBAAE,KAAK,EAAE,KAAK;;;iBACrB,IAAI,EAAE,MAAM;iBAAE,KAAK,EAAE,KAAK;;;iBAC3B,IAAI,EAAE,MAAM;iBAAE,KAAK,EAAE,KAAK;;;iBACtB,IAAI,EAAE,OAAO;iBAAE,KAAK,EAAE,IAAI;iBAAE,QAAQ,EAAE,KAAK;;;iBACvC,IAAI,EAAE,KAAK;iBAAE,KAAK,EAAE,KAAK;;;iBACjC,IAAI,EAAE,KAAK;iBAAE,KAAK,EAAE,KAAK;;;iBACzB,IAAI,EAAE,KAAK;iBAAE,KAAK,EAAE,KAAK;;;iBACrB,IAAI,EAAE,MAAM;iBAAE,KAAK,EAAE,KAAK;;;iBAChC,IAAI,EAAE,KAAK;iBAAE,KAAK,EAAE,KAAK;;;iBACzB,IAAI,EAAE,KAAK;iBAAE,KAAK,EAAE,KAAK;;;iBACzB,IAAI,EAAE,KAAK;iBAAE,KAAK,EAAE,KAAK;;;iBACZ,IAAI,EAAE,WAAW;;;iBAC/B,IAAI,EAAE,KAAK;iBAAE,KAAK,EAAE,KAAK;;;iBACzB,IAAI,EAAE,aAAa;;;iBACd,IAAI,EAAE,aAAa;;;iBACnB,IAAI,EAAE,WAAW;;CACS,CAAC"}
1
+ {"version":3,"file":"classes.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/read/classes.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC7E;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAErC,eAAO,MAAM,GAAG;;iBACJ,IAAI,EAAE,MAAM;iBAAE,KAAK,EAAE,IAAI;;;iBACpB,IAAI,EAAE,MAAM;iBAAE,KAAK,EAAE,IAAI;;;iBAC9B,IAAI,EAAE,OAAO;iBAAE,KAAK,EAAE,IAAI;iBAAE,QAAQ,EAAE,KAAK;;;iBACzC,IAAI,EAAE,OAAO;iBAAE,KAAK,EAAE,IAAI;iBAAE,QAAQ,EAAE,KAAK;;;iBAC7C,IAAI,EAAE,KAAK;iBAAE,KAAK,EAAE,KAAK;;;iBACrB,IAAI,EAAE,MAAM;iBAAE,KAAK,EAAE,KAAK;;;iBAC3B,IAAI,EAAE,MAAM;iBAAE,KAAK,EAAE,KAAK;;;iBACtB,IAAI,EAAE,OAAO;iBAAE,KAAK,EAAE,IAAI;iBAAE,QAAQ,EAAE,KAAK;;;iBACvC,IAAI,EAAE,KAAK;iBAAE,KAAK,EAAE,KAAK;;;iBACjC,IAAI,EAAE,KAAK;iBAAE,KAAK,EAAE,KAAK;;;iBACzB,IAAI,EAAE,KAAK;iBAAE,KAAK,EAAE,KAAK;;;iBACrB,IAAI,EAAE,MAAM;iBAAE,KAAK,EAAE,KAAK;;;iBAChC,IAAI,EAAE,KAAK;iBAAE,KAAK,EAAE,KAAK;;;iBACzB,IAAI,EAAE,KAAK;iBAAE,KAAK,EAAE,KAAK;;;iBACzB,IAAI,EAAE,KAAK;iBAAE,KAAK,EAAE,KAAK;;;iBACZ,IAAI,EAAE,WAAW;;;iBAC/B,IAAI,EAAE,KAAK;iBAAE,KAAK,EAAE,KAAK;;;iBACzB,IAAI,EAAE,aAAa;;;iBACd,IAAI,EAAE,aAAa;;;iBACnB,IAAI,EAAE,WAAW;;;iBAChB,IAAI,EAAE,KAAK;iBAAE,KAAK,EAAE,MAAM;;CACD,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Effect } from "effect";
2
+ import { GitHubService } from "./transport";
3
+ import type { RepoRef } from "./keys";
4
+ export declare const commitAuthor: (repo: RepoRef, sha: string) => Effect.Effect<{
5
+ sha: string;
6
+ author: {
7
+ login: string;
8
+ } | null;
9
+ }, import("./transport").GhError, GitHubService>;
10
+ //# sourceMappingURL=commits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commits.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/read/commits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAQtC,eAAO,MAAM,YAAY;;;;;gDAavB,CAAC"}
@@ -24,6 +24,7 @@ export type IssueListFilter = {
24
24
  state: string;
25
25
  labels: string | null;
26
26
  limit: number;
27
+ includeBody?: boolean;
27
28
  };
28
29
  export declare const ISSUE_LIST_FIELDS = "number,title,state,url,labels,createdAt";
29
30
  export declare const ISSUE_VIEW_FIELDS = "number,title,state,url,labels,assignees,author,body,createdAt,closedAt";
@@ -45,7 +46,7 @@ export declare const issueView: (repo: RepoRef, issue: number, consistency?: "ca
45
46
  readonly body: string;
46
47
  readonly closedAt: string | null;
47
48
  }, import("#gh/read/transport").GhError, GitHubService>;
48
- export declare const issueList: (repo: RepoRef, filter: IssueListFilter) => Effect.Effect<{
49
+ export declare const issueList: (repo: RepoRef, filter: IssueListFilter, consistency?: "cached" | "origin" | undefined) => Effect.Effect<({
49
50
  readonly number: number;
50
51
  readonly title: string;
51
52
  readonly state: string;
@@ -54,7 +55,18 @@ export declare const issueList: (repo: RepoRef, filter: IssueListFilter) => Effe
54
55
  readonly name: string;
55
56
  }[];
56
57
  readonly createdAt: string;
57
- }[], import("#gh/read/transport").GhError, GitHubService>;
58
+ readonly body: string;
59
+ } | {
60
+ readonly body?: string | undefined;
61
+ readonly number: number;
62
+ readonly title: string;
63
+ readonly state: string;
64
+ readonly url: string;
65
+ readonly labels: {
66
+ readonly name: string;
67
+ }[];
68
+ readonly createdAt: string;
69
+ })[], import("#gh/read/transport").GhError, GitHubService>;
58
70
  export declare const issueComments: (repo: RepoRef, issue: number) => Effect.Effect<{
59
71
  readonly id: number;
60
72
  readonly user: {
@@ -1 +1 @@
1
- {"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/read/issues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAatC,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;EAMb,CAAC;AAQH,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAC;AAC9C,MAAM,MAAM,eAAe,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AACtF,eAAO,MAAM,iBAAiB,4CAA4C,CAAC;AAC3E,eAAO,MAAM,iBAAiB,2EAC4C,CAAC;AAE3E,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;uDAwBpB,CAAC;AAEH,eAAO,MAAM,SAAS;;;;;;;;;yDA2BpB,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;yDAYxB,CAAC"}
1
+ {"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/read/issues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AActC,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;EAMb,CAAC;AAQH,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAC;AAC9C,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AACF,eAAO,MAAM,iBAAiB,4CAA4C,CAAC;AAC3E,eAAO,MAAM,iBAAiB,2EAC4C,CAAC;AAE3E,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;uDAwBpB,CAAC;AAEH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;0DAsCpB,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;yDAYxB,CAAC"}
@@ -21,6 +21,9 @@ export type ReadKey = {
21
21
  } | {
22
22
  readonly op: "checkSignal";
23
23
  readonly sha: string;
24
+ } | {
25
+ readonly op: "commitAuthor";
26
+ readonly sha: string;
24
27
  } | {
25
28
  readonly op: "prList" | "issueList";
26
29
  readonly filter: Readonly<Record<string, string | number | boolean | null>>;
@@ -1 +1 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/read/keys.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/read/keys.ts"],"names":[],"mappings":"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"}
@@ -186,7 +186,7 @@ export declare const reads: {
186
186
  readonly body: string;
187
187
  readonly closedAt: string | null;
188
188
  }, import("#gh/read/transport").GhError, GitHubService>;
189
- issueList: (repo: RepoRef, filter: import("./issues").IssueListFilter) => Effect.Effect<{
189
+ issueList: (repo: RepoRef, filter: import("./issues").IssueListFilter, consistency?: "cached" | "origin" | undefined) => Effect.Effect<({
190
190
  readonly number: number;
191
191
  readonly title: string;
192
192
  readonly state: string;
@@ -195,7 +195,18 @@ export declare const reads: {
195
195
  readonly name: string;
196
196
  }[];
197
197
  readonly createdAt: string;
198
- }[], import("#gh/read/transport").GhError, GitHubService>;
198
+ readonly body: string;
199
+ } | {
200
+ readonly body?: string | undefined;
201
+ readonly number: number;
202
+ readonly title: string;
203
+ readonly state: string;
204
+ readonly url: string;
205
+ readonly labels: {
206
+ readonly name: string;
207
+ }[];
208
+ readonly createdAt: string;
209
+ })[], import("#gh/read/transport").GhError, GitHubService>;
199
210
  issueComments: (repo: RepoRef, issue: number) => Effect.Effect<{
200
211
  readonly id: number;
201
212
  readonly user: {
@@ -1 +1 @@
1
- {"version":3,"file":"reads.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/read/reads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAShD,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAUjD,MAAM,MAAM,MAAM,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AA+CtE,eAAO,MAAM,WAAW,sGAatB,CAAC;AAgHH,eAAO,MAAM,SAAS,6HAWpB,CAAC;AA+EH,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsBjB,CAAC"}
1
+ {"version":3,"file":"reads.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/read/reads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAShD,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAUjD,MAAM,MAAM,MAAM,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AA+CtE,eAAO,MAAM,WAAW,sGAatB,CAAC;AAgHH,eAAO,MAAM,SAAS,6HAWpB,CAAC;AA+EH,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsBjB,CAAC"}
@@ -1,6 +1,11 @@
1
1
  import { Command } from "effect/cli";
2
2
  import { Option } from "effect";
3
3
  import { GitHubService } from "./read/transport";
4
+ export declare const repoCommitAuthorCommand: Command.Command<"commit-author", {
5
+ readonly sha: string;
6
+ readonly repo: Option.Option<string>;
7
+ readonly format: "json" | "toon";
8
+ }, {}, import("./read/transport").GhError, GitHubService>;
4
9
  export declare const repoInfoCommand: Command.Command<"info", {
5
10
  readonly format: "json" | "toon";
6
11
  readonly repo: Option.Option<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../src/gh-tool/repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIxC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAkBjD,eAAO,MAAM,eAAe;;;yDAcqE,CAAC;AAElG,eAAO,MAAM,eAAe;;;;;yDAyB3B,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;yDAoB6C,CAAC"}
1
+ {"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../src/gh-tool/repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIxC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAoBjD,eAAO,MAAM,uBAAuB;;;;yDAiB6D,CAAC;AAElG,eAAO,MAAM,eAAe;;;yDAcqE,CAAC;AAElG,eAAO,MAAM,eAAe;;;;;yDAyB3B,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;yDAoB6C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blogic-cz/agent-tools",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
4
4
  "description": "CLI tools for AI coding agent workflows — GitHub, database, Kubernetes, Azure platform, Azure DevOps, logs, sessions, and audit",
5
5
  "keywords": [
6
6
  "agent",
@@ -174,6 +174,7 @@
174
174
  "oxfmt": "0.72.0",
175
175
  "oxlint": "1.87.0",
176
176
  "typescript": "7.0.2",
177
+ "vite": "8.0.16",
177
178
  "vitest": "5.0.4"
178
179
  },
179
180
  "peerDependencies": {
@@ -463,6 +463,11 @@
463
463
  "type": "object",
464
464
  "additionalProperties": false,
465
465
  "properties": {
466
+ "chainCopyDestinations": {
467
+ "description": "Absolute canonical directories approved for cp destinations in proved command chains. Empty by default. Symlinks and traversal are refused.",
468
+ "type": "array",
469
+ "items": { "type": "string" }
470
+ },
466
471
  "allowedEnvironmentVariables": {
467
472
  "description": "Exact, case-sensitive environment names approved for static printenv reads. Empty by default.",
468
473
  "type": "array",
@@ -11,6 +11,7 @@ const CliToolOverrideSchema = Schema.Struct({
11
11
  });
12
12
 
13
13
  const CredentialGuardConfigSchema = Schema.Struct({
14
+ chainCopyDestinations: Schema.optionalKey(Schema.Array(Schema.String)),
14
15
  allowedEnvironmentVariables: Schema.optionalKey(Schema.Array(Schema.String)),
15
16
  additionalBlockedPaths: Schema.optionalKey(Schema.Array(Schema.String)),
16
17
  additionalAllowedPaths: Schema.optionalKey(Schema.Array(Schema.String)),
@@ -187,6 +187,7 @@ export type CliToolOverride = {
187
187
  export type CredentialGuardConfig = {
188
188
  /** Exact, case-sensitive names approved for static printenv reads. Empty by default. */
189
189
  allowedEnvironmentVariables?: string[];
190
+ chainCopyDestinations?: string[];
190
191
  additionalBlockedPaths?: string[];
191
192
  additionalAllowedPaths?: string[];
192
193
  additionalBlockedCliTools?: CliToolOverride[];
@@ -18,6 +18,7 @@ import type { CliToolOverride, CredentialGuardConfig } from "#config/types";
18
18
  import { redactSensitiveText } from "#shared/content-security";
19
19
  import { SECRET_PATTERNS } from "#shared/credential-patterns";
20
20
  import { posix } from "node:path";
21
+ import { lstatSync, realpathSync } from "node:fs";
21
22
  import { passiveJqProgramIndex } from "./passive-jq";
22
23
 
23
24
  export { findSecretMatches } from "#shared/credential-patterns";
@@ -2558,6 +2559,131 @@ function hasStaticEnvironmentRead(
2558
2559
  );
2559
2560
  }
2560
2561
 
2562
+ function commandChainSources(command: string): string[] | undefined {
2563
+ const parts: string[] = [];
2564
+ let start = 0;
2565
+ let quote: "'" | '"' | "`" | undefined;
2566
+ let depth = 0;
2567
+ for (let index = 0; index < command.length; index++) {
2568
+ const char = command[index];
2569
+ if (char === "\\" && quote !== "'") {
2570
+ index++;
2571
+ } else if (quote) {
2572
+ if (char === quote) quote = undefined;
2573
+ } else if (char === "'" || char === '"' || char === "`") {
2574
+ quote = char;
2575
+ } else if (char === "#") {
2576
+ return undefined;
2577
+ } else if (char === "(") {
2578
+ depth++;
2579
+ } else if (char === ")") {
2580
+ if (--depth < 0) return undefined;
2581
+ } else if (!depth && (char === ";" || command.startsWith("&&", index))) {
2582
+ const part = command.slice(start, index).trim();
2583
+ if (!part || parts.length >= 31) return undefined;
2584
+ parts.push(part);
2585
+ if (char === "&") index++;
2586
+ start = index + 1;
2587
+ }
2588
+ }
2589
+ const last = command.slice(start).trim();
2590
+ return !quote && !depth && last && parts.length ? [...parts, last] : undefined;
2591
+ }
2592
+
2593
+ type LiteralChainPart = { source: string; argv: string[]; redirects: boolean };
2594
+
2595
+ function literalCommandChain(command: string): LiteralChainPart[] | undefined {
2596
+ const literal = literalBindingText(command, "", "");
2597
+ if (!literal || /[|&\r\n]/.test(literal.syntax.replaceAll("&&", ""))) return undefined;
2598
+ const boundaries = [...literal.syntax.matchAll(/&&|;/g)];
2599
+ if (!boundaries.length || boundaries.length > 31) return undefined;
2600
+ const parts: LiteralChainPart[] = [];
2601
+ let start = 0;
2602
+ for (const end of [...boundaries.map((match) => match.index), command.length]) {
2603
+ const source = command.slice(start, end).trim();
2604
+ const parsed = parseStaticShellCommands(source);
2605
+ if (
2606
+ !parsed ||
2607
+ typeof parsed === "string" ||
2608
+ parsed.pipelines.length !== 1 ||
2609
+ parsed.pipelines[0]?.length !== 1
2610
+ )
2611
+ return undefined;
2612
+ const argv = unwrapProofCommand(parsed.pipelines[0][0] ?? [], "\0");
2613
+ if (!argv) return undefined;
2614
+ parts.push({ source, argv, redirects: parsed.redirects.length > 0 });
2615
+ start = end + (literal.syntax.startsWith("&&", end) ? 2 : 1);
2616
+ }
2617
+ return parts;
2618
+ }
2619
+
2620
+ function isIndependentHerdrOperation(argv: string[]): boolean {
2621
+ if (isLiteralHerdrPrompt(argv)) return argv.length === 5;
2622
+ if (argv[0] !== "herdr") return false;
2623
+ if (argv[1] === "agent" && argv[2] === "start") {
2624
+ const separator = argv.indexOf("--", 3);
2625
+ const options = argv.slice(3, separator < 0 ? undefined : separator);
2626
+ const kinds = options.filter((arg) => arg === "--kind" || arg.startsWith("--kind="));
2627
+ return (
2628
+ kinds.length === 1 &&
2629
+ kinds[0] === "--kind" &&
2630
+ options[options.indexOf("--kind") + 1] === "codex"
2631
+ );
2632
+ }
2633
+ if (argv[1] !== "pane") return false;
2634
+ if (argv[2] === "run")
2635
+ return argv.length === 5 && argv[4] === "exec bash ~/.codex/codex-clean.sh bash --norc -i";
2636
+ if (argv[2] !== "wait-output" || argv.length < 6) return false;
2637
+ const seen = new Set<string>();
2638
+ for (let index = 4; index < argv.length; index += 2) {
2639
+ const option = argv[index] ?? "";
2640
+ if (seen.has(option)) return false;
2641
+ seen.add(option);
2642
+ if (!["--match", "--regex", "--timeout"].includes(option) || !argv[index + 1]) return false;
2643
+ if (argv[index] === "--timeout" && !/^\d+$/.test(argv[index + 1] ?? "")) return false;
2644
+ }
2645
+ return true;
2646
+ }
2647
+
2648
+ function isIndependentDataCopy(argv: string[], destinations: string[]): boolean {
2649
+ if (!destinations.length || argv[0] !== "cp" || argv.length !== 3) return false;
2650
+ const source = argv[1] ?? "";
2651
+ const target = argv[2] ?? "";
2652
+ const literalPath = (path: string) =>
2653
+ /^\/[A-Za-z0-9_./ -]+$/.test(path) &&
2654
+ !path.split("/").some((part) => part === "." || part === "..");
2655
+ if (!/^(?:~\/)?[A-Za-z0-9_./-]+$/.test(source) || source.startsWith("-") || !literalPath(target))
2656
+ return false;
2657
+ try {
2658
+ const targetPath = target.replace(/\/+$/, "");
2659
+ const targetStat = lstatSync(targetPath, { throwIfNoEntry: false });
2660
+ if (target.endsWith("/") && !targetStat?.isDirectory()) return false;
2661
+ const destination = targetStat?.isDirectory()
2662
+ ? posix.join(targetPath, posix.basename(source))
2663
+ : targetPath;
2664
+ for (const directory of destinations) {
2665
+ if (!literalPath(directory)) continue;
2666
+ const root = directory.replace(/\/+$/, "");
2667
+ if (!destination.startsWith(root + "/")) continue;
2668
+ if (!lstatSync(root).isDirectory() || realpathSync(root) !== root) return false;
2669
+ const parts = destination.slice(root.length + 1).split("/");
2670
+ let current = root;
2671
+ for (const [index, part] of parts.entries()) {
2672
+ current += "/" + part;
2673
+ const stat = lstatSync(current, { throwIfNoEntry: false });
2674
+ const last = index === parts.length - 1;
2675
+ if (!stat) return last;
2676
+ if (stat.isSymbolicLink() || (!last && !stat.isDirectory())) return false;
2677
+ if (realpathSync(current) !== current) return false;
2678
+ }
2679
+ return true;
2680
+ }
2681
+ } catch {
2682
+ return false;
2683
+ }
2684
+ return false;
2685
+ }
2686
+
2561
2687
  function isLiteralHerdrPrompt(argv: string[]): boolean {
2562
2688
  return argv[0] === "herdr" && argv[1] === "agent" && argv[2] === "prompt" && argv.length >= 5;
2563
2689
  }
@@ -3730,6 +3856,31 @@ export function createCredentialGuard(config?: CredentialGuardConfig): Credentia
3730
3856
  });
3731
3857
  if (unterminatedQuote)
3732
3858
  return "cannot prove shell syntax: an unterminated quoted argument was found";
3859
+ const chain = literalCommandChain(command);
3860
+ if (chain?.some(({ argv }) => isLiteralHerdrPrompt(argv)) && !isStaticHerdrPrompt(command)) {
3861
+ let copied = false;
3862
+ for (const [index, part] of chain.entries()) {
3863
+ const reason = getDangerousBashReason(part.source, shellDepth);
3864
+ if (reason) return `cannot prove chain part ${index + 1} (${part.source}): ${reason}`;
3865
+ if (
3866
+ !part.redirects &&
3867
+ isIndependentDataCopy(part.argv, config?.chainCopyDestinations ?? []) &&
3868
+ !copied
3869
+ ) {
3870
+ copied = true;
3871
+ continue;
3872
+ }
3873
+ if (
3874
+ part.redirects ||
3875
+ !isIndependentHerdrOperation(part.argv) ||
3876
+ (copied && !(isLiteralHerdrPrompt(part.argv) && part.argv.length === 5))
3877
+ )
3878
+ return `cannot prove independent chain part ${index + 1} (${part.source}) under the environment/execution policy`;
3879
+ }
3880
+ if (dangerousBashPatterns.some((pattern) => pattern.test(originalCommand)))
3881
+ return "matches a configured dangerous-command pattern";
3882
+ return null;
3883
+ }
3733
3884
  const allowPackageInventory = hasProvedPackageInventoryInvocation(originalCommand);
3734
3885
  const promptWords = isStaticHerdrPrompt(command)
3735
3886
  ? parseStaticShellCommands(command)
@@ -4140,7 +4291,24 @@ export function createCredentialGuard(config?: CredentialGuardConfig): Credentia
4140
4291
  if (tool === "bash") {
4141
4292
  const command = extractCommand(args);
4142
4293
 
4143
- const dangerousReason = getDangerousBashReason(command);
4294
+ let dangerousReason = getDangerousBashReason(command);
4295
+ if (dangerousReason && !dangerousReason.includes("chain part")) {
4296
+ let unproved: string | undefined;
4297
+ for (const [index, source] of (commandChainSources(command) ?? []).entries()) {
4298
+ const reason = getDangerousBashReason(source);
4299
+ const parsed = parseStaticShellCommands(source);
4300
+ const literal = literalBindingText(source, "", "");
4301
+ const words = parsed && typeof parsed !== "string" ? parsed.pipelines[0]?.[0] : undefined;
4302
+ const argv = words ? unwrapProofCommand(words, "\0") : undefined;
4303
+ if (reason) {
4304
+ dangerousReason += `; cannot prove chain part ${index + 1} (${source}): ${reason}`;
4305
+ break;
4306
+ }
4307
+ if (!unproved && (!literal || /[<>]/.test(literal.syntax) || !argv))
4308
+ unproved = `cannot prove chain part ${index + 1} (${source}): independent composition is unproved`;
4309
+ }
4310
+ if (!dangerousReason.includes("chain part") && unproved) dangerousReason += `; ${unproved}`;
4311
+ }
4144
4312
  if (dangerousReason) {
4145
4313
  throw new Error(
4146
4314
  `\u{1F6AB} Command blocked: ${dangerousReason}.\n\n` +
@@ -35,6 +35,14 @@ export const issueListCommand = Command.make(
35
35
  "list",
36
36
  {
37
37
  format: formatOption,
38
+ includeBody: Flag.Boolean("include-body").pipe(
39
+ Flag.withDescription("Include each issue's body in the result"),
40
+ Flag.withDefault(false),
41
+ ),
42
+ fresh: Flag.Boolean("fresh").pipe(
43
+ Flag.withDescription("Read from GitHub instead of the shared cache"),
44
+ Flag.withDefault(false),
45
+ ),
38
46
  labels: Flag.String("labels").pipe(
39
47
  Flag.withDescription("Filter by label (comma-separated)"),
40
48
  Flag.optional,
@@ -49,12 +57,14 @@ export const issueListCommand = Command.make(
49
57
  Flag.withDefault("open"),
50
58
  ),
51
59
  },
52
- ({ format, labels, limit, repo, state }) =>
60
+ ({ format, fresh, includeBody, labels, limit, repo, state }) =>
53
61
  withRepo(
54
62
  repo,
55
63
  Effect.gen(function* () {
56
64
  const issues = yield* listIssues({
57
65
  labels: Option.getOrNull(labels),
66
+ includeBody,
67
+ fresh,
58
68
  limit,
59
69
  state,
60
70
  });
@@ -52,8 +52,11 @@ export const listIssues = Effect.fn("issue.listIssues")(function* (opts: {
52
52
  state: string;
53
53
  labels: string | null;
54
54
  limit: number;
55
+ includeBody?: boolean;
56
+ fresh?: boolean;
55
57
  }) {
56
- return yield* reads.issueList(yield* resolveRepo(null), opts);
58
+ const { fresh, ...filter } = opts;
59
+ return yield* reads.issueList(yield* resolveRepo(null), filter, fresh ? "origin" : "cached");
57
60
  });
58
61
 
59
62
  export const viewIssue = Effect.fn("issue.viewIssue")(function* (issueNumber: number) {
@@ -0,0 +1,57 @@
1
+ import { Command, Flag } from "effect/cli";
2
+ import { Effect, Option } from "effect";
3
+
4
+ import { formatOption, logFormatted } from "#shared";
5
+ import { GitHubService } from "#gh/read/transport";
6
+ import { resolveRepo } from "#gh/read/reads";
7
+ import { repoSlug } from "#gh/read/keys";
8
+ import { writes } from "#gh/read/writes";
9
+
10
+ export const createLabel = Effect.fn("label.createLabel")(function* (opts: {
11
+ name: string;
12
+ color: string;
13
+ description: string;
14
+ force: boolean;
15
+ }) {
16
+ const repo = yield* resolveRepo(null);
17
+ const args = [
18
+ "label",
19
+ "create",
20
+ opts.name,
21
+ "--color",
22
+ opts.color,
23
+ "--description",
24
+ opts.description,
25
+ ];
26
+ if (opts.force) args.push("--force");
27
+ yield* writes.run(args, [`repo:${repoSlug(repo)}`]);
28
+ return { name: opts.name };
29
+ });
30
+
31
+ export const labelCreateCommand = Command.make(
32
+ "create",
33
+ {
34
+ name: Flag.String("name").pipe(Flag.withDescription("Label name")),
35
+ color: Flag.String("color").pipe(Flag.withDescription("Six-character hexadecimal color")),
36
+ description: Flag.String("description").pipe(Flag.withDefault("")),
37
+ force: Flag.Boolean("force").pipe(
38
+ Flag.withDescription("Update the label if it already exists"),
39
+ Flag.withDefault(false),
40
+ ),
41
+ repo: Flag.String("repo").pipe(
42
+ Flag.withDescription("Target repository profile name or owner/name"),
43
+ Flag.optional,
44
+ ),
45
+ format: formatOption,
46
+ },
47
+ ({ format, repo, ...opts }) =>
48
+ Effect.gen(function* () {
49
+ const gh = yield* GitHubService;
50
+ yield* gh.withRepoTarget(
51
+ Option.getOrNull(repo),
52
+ Effect.gen(function* () {
53
+ yield* logFormatted(yield* createLabel(opts), format);
54
+ }),
55
+ );
56
+ }),
57
+ ).pipe(Command.withDescription("Create a repository label"));
@@ -71,7 +71,13 @@ import {
71
71
  releaseStatusCommand,
72
72
  releaseViewCommand,
73
73
  } from "./release";
74
- import { repoInfoCommand, repoListCommand, repoSearchCodeCommand } from "./repo";
74
+ import {
75
+ repoCommitAuthorCommand,
76
+ repoInfoCommand,
77
+ repoListCommand,
78
+ repoSearchCodeCommand,
79
+ } from "./repo";
80
+ import { labelCreateCommand } from "./label";
75
81
  import { GitHubService } from "./read/transport";
76
82
  import { withReadCache } from "./read";
77
83
  import { cacheCommand } from "./read/commands";
@@ -153,7 +159,17 @@ const branchCommand = Command.make("branch", {}).pipe(
153
159
 
154
160
  const repoCommand = Command.make("repo", {}).pipe(
155
161
  Command.withDescription("Repository operations"),
156
- Command.withSubcommands([repoInfoCommand, repoListCommand, repoSearchCodeCommand]),
162
+ Command.withSubcommands([
163
+ repoInfoCommand,
164
+ repoListCommand,
165
+ repoSearchCodeCommand,
166
+ repoCommitAuthorCommand,
167
+ ]),
168
+ );
169
+
170
+ const labelCommand = Command.make("label", {}).pipe(
171
+ Command.withDescription("Repository label operations"),
172
+ Command.withSubcommands([labelCreateCommand]),
157
173
  );
158
174
 
159
175
  const workflowCommand = Command.make("workflow", {}).pipe(
@@ -237,6 +253,7 @@ WORKFLOW FOR AI AGENTS:
237
253
  prCommand,
238
254
  issueCommand,
239
255
  repoCommand,
256
+ labelCommand,
240
257
  branchCommand,
241
258
  workflowCommand,
242
259
  releaseCommand,
@@ -27,4 +27,5 @@ export const OPS = {
27
27
  jobLog: { kind: "passthrough" },
28
28
  annotations: { kind: "passthrough" },
29
29
  jobIdentity: { kind: "immutable" },
30
+ commitAuthor: { kind: "ttl", ttlMs: 300000 },
30
31
  } as const satisfies Record<Op, CacheClass>;
@@ -0,0 +1,28 @@
1
+ import { Effect, Schema } from "effect";
2
+
3
+ import { GitHubService } from "./transport";
4
+ import { cachedRead } from "./cache";
5
+ import { OPS } from "./classes";
6
+ import { repoSlug } from "./keys";
7
+ import type { RepoRef } from "./keys";
8
+ import { parsePreserving } from "./porcelain";
9
+
10
+ const CommitAuthor = Schema.Struct({
11
+ sha: Schema.String,
12
+ author: Schema.NullOr(Schema.Struct({ login: Schema.String })),
13
+ });
14
+
15
+ export const commitAuthor = Effect.fn("reads.commitAuthor")(function* (repo: RepoRef, sha: string) {
16
+ const gh = yield* GitHubService;
17
+ const decode = parsePreserving(CommitAuthor);
18
+ const value = yield* cachedRead({
19
+ key: { op: "commitAuthor", repo, sha },
20
+ policy: OPS.commitAuthor,
21
+ decode,
22
+ fetch: () =>
23
+ gh
24
+ .runGhJson<unknown>(["api", `repos/${repoSlug(repo)}/commits/${encodeURIComponent(sha)}`])
25
+ .pipe(Effect.map((raw) => ({ kind: "fresh" as const, value: decode(raw) }))),
26
+ });
27
+ return { sha: value.sha, author: value.author === null ? null : { login: value.author.login } };
28
+ });
@@ -10,6 +10,7 @@ import { parsePreserving } from "./porcelain";
10
10
  const Label = Schema.Struct({ name: Schema.String });
11
11
  const Login = Schema.Struct({ login: Schema.String });
12
12
  const IssueListItem = Schema.Struct({
13
+ body: Schema.optional(Schema.String),
13
14
  number: Schema.Number,
14
15
  title: Schema.String,
15
16
  state: Schema.String,
@@ -32,7 +33,12 @@ const IssueComment = Schema.Struct({
32
33
  html_url: Schema.String,
33
34
  });
34
35
  export type IssueView = typeof IssueView.Type;
35
- export type IssueListFilter = { state: string; labels: string | null; limit: number };
36
+ export type IssueListFilter = {
37
+ state: string;
38
+ labels: string | null;
39
+ limit: number;
40
+ includeBody?: boolean;
41
+ };
36
42
  export const ISSUE_LIST_FIELDS = "number,title,state,url,labels,createdAt";
37
43
  export const ISSUE_VIEW_FIELDS =
38
44
  "number,title,state,url,labels,assignees,author,body,createdAt,closedAt";
@@ -66,6 +72,7 @@ export const issueView = Effect.fn("reads.issueView")(function* (
66
72
  export const issueList = Effect.fn("reads.issueList")(function* (
67
73
  repo: RepoRef,
68
74
  filter: IssueListFilter,
75
+ consistency: "cached" | "origin" = "cached",
69
76
  ) {
70
77
  const gh = yield* GitHubService;
71
78
  const args = [
@@ -76,19 +83,29 @@ export const issueList = Effect.fn("reads.issueList")(function* (
76
83
  "--limit",
77
84
  String(filter.limit),
78
85
  "--json",
79
- ISSUE_LIST_FIELDS,
86
+ filter.includeBody ? `${ISSUE_LIST_FIELDS},body` : ISSUE_LIST_FIELDS,
80
87
  "--repo",
81
88
  repoSlug(repo),
82
89
  ];
83
90
  if (filter.labels !== null) args.push("--label", filter.labels);
91
+ const decode = parsePreserving(
92
+ Schema.mutable(
93
+ Schema.Array(
94
+ filter.includeBody
95
+ ? Schema.Struct({ ...IssueListItem.fields, body: Schema.String })
96
+ : IssueListItem,
97
+ ),
98
+ ),
99
+ );
84
100
  return yield* cachedRead({
85
101
  key: { op: "issueList", repo, filter },
86
102
  policy: OPS.issueList,
87
- decode: parsePreserving(Schema.mutable(Schema.Array(IssueListItem))),
103
+ consistency,
104
+ decode,
88
105
  fetch: () =>
89
106
  gh
90
107
  .runGhJson<Array<typeof IssueListItem.Type>>(args)
91
- .pipe(Effect.map((value) => ({ kind: "fresh" as const, value }))),
108
+ .pipe(Effect.map((value) => ({ kind: "fresh" as const, value: decode(value) }))),
92
109
  });
93
110
  });
94
111
 
@@ -21,6 +21,7 @@ export type ReadKey = { readonly repo: RepoRef } & (
21
21
  }
22
22
  | { readonly op: "prChecks"; readonly pr: number; readonly headSha: string }
23
23
  | { readonly op: "checkSignal"; readonly sha: string }
24
+ | { readonly op: "commitAuthor"; readonly sha: string }
24
25
  | {
25
26
  readonly op: "prList" | "issueList";
26
27
  readonly filter: Readonly<Record<string, string | number | boolean | null>>;
@@ -93,6 +94,7 @@ export const tagsFor = (key: ReadKey): readonly Tag[] => {
93
94
  case "jobLog":
94
95
  case "annotations":
95
96
  case "jobIdentity":
97
+ case "commitAuthor":
96
98
  return [fallback];
97
99
  default: {
98
100
  const exhaustive: never = key;
@@ -4,6 +4,8 @@ import { Effect, Option } from "effect";
4
4
  import { formatOption, logFormatted } from "#shared";
5
5
  import { passthrough } from "./read/catalog";
6
6
  import { GitHubService } from "./read/transport";
7
+ import { commitAuthor } from "./read/commits";
8
+ import { resolveRepo } from "./read/reads";
7
9
 
8
10
  // ---------------------------------------------------------------------------
9
11
  // Types
@@ -21,6 +23,25 @@ const repoOption = Flag.String("repo").pipe(
21
23
  Flag.optional,
22
24
  );
23
25
 
26
+ export const repoCommitAuthorCommand = Command.make(
27
+ "commit-author",
28
+ {
29
+ sha: Flag.String("sha").pipe(Flag.withDescription("Commit SHA")),
30
+ repo: repoOption,
31
+ format: formatOption,
32
+ },
33
+ ({ sha, repo, format }) =>
34
+ Effect.gen(function* () {
35
+ const gh = yield* GitHubService;
36
+ yield* gh.withRepoTarget(
37
+ Option.getOrNull(repo),
38
+ Effect.gen(function* () {
39
+ yield* logFormatted(yield* commitAuthor(yield* resolveRepo(null), sha), format);
40
+ }),
41
+ );
42
+ }),
43
+ ).pipe(Command.withDescription("Look up a commit's GitHub author through the shared read cache"));
44
+
24
45
  export const repoInfoCommand = Command.make(
25
46
  "info",
26
47
  { format: formatOption, repo: repoOption },