@blogic-cz/agent-tools 0.17.1 → 0.18.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 (41) hide show
  1. package/README.md +43 -0
  2. package/dist/config/loader.d.ts.map +1 -1
  3. package/dist/config/types.d.ts +17 -0
  4. package/dist/config/types.d.ts.map +1 -1
  5. package/dist/db-tool/service.d.ts +23 -0
  6. package/dist/db-tool/service.d.ts.map +1 -1
  7. package/dist/db-tool/types.d.ts +2 -0
  8. package/dist/db-tool/types.d.ts.map +1 -1
  9. package/dist/gh-tool/pr/core.d.ts.map +1 -1
  10. package/dist/gh-tool/pr/review.d.ts.map +1 -1
  11. package/dist/gh-tool/types.d.ts +10 -0
  12. package/dist/gh-tool/types.d.ts.map +1 -1
  13. package/dist/gh-tool/workflow.d.ts.map +1 -1
  14. package/dist/logs-tool/index.d.ts.map +1 -1
  15. package/dist/session-tool/index.d.ts.map +1 -1
  16. package/dist/shared/format.d.ts +3 -1
  17. package/dist/shared/format.d.ts.map +1 -1
  18. package/dist/shared/index.d.ts +1 -1
  19. package/dist/shared/index.d.ts.map +1 -1
  20. package/package.json +1 -1
  21. package/schemas/agent-tools.schema.json +8 -0
  22. package/src/audit-tool/index.ts +4 -3
  23. package/src/az-tool/index.ts +9 -8
  24. package/src/config/loader.ts +2 -0
  25. package/src/config/types.ts +17 -0
  26. package/src/db-tool/index.ts +6 -5
  27. package/src/db-tool/service.ts +113 -1
  28. package/src/db-tool/types.ts +2 -0
  29. package/src/gh-tool/pr/commands.ts +2 -2
  30. package/src/gh-tool/pr/core.ts +2 -1
  31. package/src/gh-tool/pr/review.ts +8 -0
  32. package/src/gh-tool/types.ts +10 -0
  33. package/src/gh-tool/workflow.ts +4 -4
  34. package/src/k8s-tool/index.ts +4 -3
  35. package/src/logs-tool/index.ts +4 -3
  36. package/src/observability-tool/logs.ts +4 -4
  37. package/src/observability-tool/metrics.ts +4 -4
  38. package/src/observability-tool/trace.ts +6 -6
  39. package/src/session-tool/index.ts +5 -5
  40. package/src/shared/format.ts +18 -3
  41. 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.
@@ -436,6 +438,47 @@ Secrets are **never** stored in the config file. The `db-tool` config references
436
438
  }
437
439
  ```
438
440
 
441
+ #### Endpoint overrides: `hostEnvVar` and `portEnvVar`
442
+
443
+ A database environment can also take its `host` and `port` from environment variables:
444
+
445
+ | Field | Effect |
446
+ | ------------ | -------------------------------------------------------------------------- |
447
+ | `hostEnvVar` | Name of an environment variable that overrides the literal `host` when set |
448
+ | `portEnvVar` | Name of an environment variable that overrides the literal `port` when set |
449
+
450
+ These are **overrides with fallback**, not requirements — the opposite of `passwordEnvVar`, which fails when its variable is unset:
451
+
452
+ - variable set to a value → that value wins over the literal in the config;
453
+ - variable unset or empty → the literal `host` / `port` in the config is used, and no error is raised;
454
+ - `portEnvVar` set to something that is not an integer between 1 and 65535 → the command **fails**. It never falls back to the literal, because that would query a different database while you believe the override applied.
455
+
456
+ The variable is read from the process environment first (Bun loads `.env` files into it), then from `~/.zshrc` exports.
457
+
458
+ The typical use is a repository where every git worktree runs its own database container on its own host port, published by that worktree's `.env`:
459
+
460
+ ```json5
461
+ {
462
+ database: {
463
+ default: {
464
+ environments: {
465
+ local: {
466
+ host: "127.0.0.1",
467
+ port: 40543, // the main checkout's database
468
+ user: "app",
469
+ database: "app",
470
+ portEnvVar: "APP_POSTGRES_PORT", // a worktree's .env sets this to e.g. 40643
471
+ hostEnvVar: "APP_POSTGRES_HOST", // optional, same fallback rule
472
+ prerequisites: [],
473
+ },
474
+ },
475
+ },
476
+ },
477
+ }
478
+ ```
479
+
480
+ Run from the main checkout, where `APP_POSTGRES_PORT` is unset, `db-tool` connects to `127.0.0.1:40543`. Run from a worktree whose `.env` sets `APP_POSTGRES_PORT=40643`, the same config connects to `127.0.0.1:40643` — so `db-tool` and `job-tool` inspect that worktree's own database instead of the main checkout's.
481
+
439
482
  Database VPN prerequisites can be set at the database profile or environment level. If an environment declares `vpn` or `prerequisites`, that environment config replaces the profile prerequisites; `prerequisites: []` explicitly disables inherited VPN setup. DB commands try the query directly first and only connect VPN prerequisites if direct access fails. Package-managed VPNs remain reusable for `idleDisconnectMs` (default 30000) after the last lease; `0` restores immediate cleanup. Preconnected or `leave-running` connections are treated as external and never stopped automatically. If runtime state is corrupt, unknown, or contains legacy artifacts, first stop all agent-tools processes using the VPN, then remove that VPN state directory under `~/.agent-tools/runtime/vpn-prerequisites`.
440
483
 
441
484
  ```json5
@@ -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;AA2NlE,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,YAAY,GAAG,UAAU,GAAG,eAAe,GAAG,MAAM,CAC/D,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;AA6NlE,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,YAAY,GAAG,UAAU,GAAG,eAAe,GAAG,MAAM,CAC/D,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"}
@@ -77,6 +77,23 @@ export type DbEnvConfig = ProfilePrerequisites & {
77
77
  password?: string;
78
78
  /** Name of environment variable holding the password, e.g. "DB_TEST_PWD" */
79
79
  passwordEnvVar?: string;
80
+ /**
81
+ * Name of an environment variable that overrides `host`, e.g. "APP_POSTGRES_HOST".
82
+ *
83
+ * Override with fallback, deliberately unlike `passwordEnvVar`: an unset or empty variable is
84
+ * not an error, it keeps the literal `host` above. The variable usually exists only in a
85
+ * per-worktree environment, and the main checkout must keep working from the literal.
86
+ */
87
+ hostEnvVar?: string;
88
+ /**
89
+ * Name of an environment variable that overrides `port`, e.g. "APP_POSTGRES_PORT".
90
+ *
91
+ * Same override-with-fallback rule as `hostEnvVar`: unset or empty keeps the literal `port`,
92
+ * because only a worktree environment publishes its own port. A variable that *is* set but is
93
+ * not an integer in 1..65535 fails instead of falling back — a silent fallback would query the
94
+ * wrong database while the caller believes the override applied.
95
+ */
96
+ portEnvVar?: string;
80
97
  };
81
98
  /** SQL mutation operation that can be explicitly allowed for a database environment. */
82
99
  export declare const DbMutationOperationSchema: Schema.Literals<readonly ["insert", "update", "delete"]>;
@@ -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":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,yCAAyC;AACzC,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,iBAAiB,CAAC;AAEhE,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,KAAK,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0FAA0F;IAC1F,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,aAAa,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,eAAe,GACvB,0BAA0B,GAC1B,yBAAyB,GACzB,6BAA6B,CAAC;AAElC,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6DAA6D;IAC7D,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mGAAmG;IACnG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wFAAwF;IACxF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,0BAA0B,CAAC;QACpC,KAAK,CAAC,EAAE,yBAAyB,CAAC;QAClC,KAAK,CAAC,EAAE,6BAA6B,CAAC;KACvC,CAAC;IACF,uGAAuG;IACvG,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IAC3C,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,+CAA+C;AAC/C,MAAM,MAAM,SAAS,GAAG,oBAAoB,GAAG;IAC7C,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,qDAAqD;AACrD,MAAM,MAAM,WAAW,GAAG,oBAAoB,GAAG;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,mGAAmG;IACnG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wFAAwF;AACxF,eAAO,MAAM,yBAAyB,0DAAkD,CAAC;AACzF,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,yBAAyB,CAAC,CAAC;AACvF,MAAM,MAAM,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;AAE/F,qCAAqC;AACrC,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG;IAClD,mFAAmF;IACnF,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC1C,+GAA+G;IAC/G,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,mBAAmB,EAAE,CAAC,CAAC;IAClE,sBAAsB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAClE,OAAO,CAAC,EAAE;QACR,+DAA+D;QAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,iCAAiC;AACjC,MAAM,MAAM,UAAU,GAAG,oBAAoB,GAAG;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,0DAA0D;AAC1D,MAAM,MAAM,sBAAsB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,0CAA0C;AAC1C,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,8DAA8D;AAC9D,MAAM,MAAM,qBAAqB,GAAG;IAClC,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,yBAAyB,CAAC,EAAE,eAAe,EAAE,CAAC;IAC9C,+BAA+B,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,6CAA6C;AAC7C,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oGAAoG;IACpG,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpC,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvC,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,sGAAsG;IACtG,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACpD,8CAA8C;IAC9C,OAAO,CAAC,EAAE;QACR,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,sFAAsF;IACtF,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,uGAAuG;IACvG,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC3C,CAAC"}
@@ -5,6 +5,29 @@ import { ConfigService } from "#config";
5
5
  import { DbConfigService } from "./config-service";
6
6
  import { DbSqlClient } from "./sql-client";
7
7
  import { type DbError } from "./errors";
8
+ export type ResolvedPortOverride = {
9
+ readonly ok: true;
10
+ readonly port: number;
11
+ } | {
12
+ readonly ok: false;
13
+ readonly message: string;
14
+ };
15
+ /**
16
+ * Applies a `portEnvVar` override to the literal `port` of a database environment.
17
+ *
18
+ * Override with fallback: no variable name, or a variable that is unset or blank, keeps
19
+ * `literalPort`, because the variable exists only in environments that publish their own port
20
+ * (a per-repository worktree) while the main checkout runs from the literal. A variable that is
21
+ * set but does not hold an integer in 1..65535 fails instead of falling back, since falling back
22
+ * would silently query the main checkout's database while the caller believes the override applied.
23
+ */
24
+ export declare function resolvePortOverride(env: string, literalPort: number, portEnvVar: string | undefined, value: string | undefined): ResolvedPortOverride;
25
+ /**
26
+ * Applies a `hostEnvVar` override to the literal `host` of a database environment.
27
+ * Unset or blank keeps `literalHost`; every non-blank value is a usable host, so there is no
28
+ * failure case here, unlike {@link resolvePortOverride}.
29
+ */
30
+ export declare function resolveHostOverride(literalHost: string, hostEnvVar: string | undefined, value: string | undefined): string;
8
31
  export declare function resolveDbAccessMode(env: string, host: string, hasKubectlConfig: boolean, allowedMutations?: readonly DbMutationOperation[]): Pick<DbConfig, "allowMutations" | "allowedMutations" | "host" | "needsTunnel">;
9
32
  export declare function isFullyReadOnly(config: Pick<DbConfig, "allowMutations" | "allowedMutations" | "allowedMutationTargets">): boolean;
10
33
  export { buildApiProbeArgs } from "#shared/k8s-probe";
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/db-tool/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAS,OAAO,EAAY,MAAM,EAAE,KAAK,EAAuB,MAAM,QAAQ,CAAC;AAEtF,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEtF,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAOxC,OAAO,EAAE,eAAe,EAA4B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAqB,MAAM,cAAc,CAAC;AAC9D,OAAO,EAKL,KAAK,OAAO,EACb,MAAM,UAAU,CAAC;AAoBlB,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,OAAO,EACzB,gBAAgB,GAAE,SAAS,mBAAmB,EAAO,GACpD,IAAI,CAAC,QAAQ,EAAE,gBAAgB,GAAG,kBAAkB,GAAG,MAAM,GAAG,aAAa,CAAC,CAUhF;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,gBAAgB,GAAG,kBAAkB,GAAG,wBAAwB,CAAC,GACvF,OAAO,CAMT;AAGD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;;2BAK3B,CACrB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC;iCACX,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,EAChB,KAAK,CAAC,EAAE,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC;;AAZ5C,qBAAa,SAAU,SAAQ,cAcF;IAC3B,MAAM,CAAC,QAAQ,CAAC,KAAK,yHA4rBnB;CACH"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/db-tool/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAS,OAAO,EAAY,MAAM,EAAE,KAAK,EAAuB,MAAM,QAAQ,CAAC;AAEtF,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEtF,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAOxC,OAAO,EAAE,eAAe,EAA4B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAqB,MAAM,cAAc,CAAC;AAC9D,OAAO,EAKL,KAAK,OAAO,EACb,MAAM,UAAU,CAAC;AA8BlB,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,oBAAoB,CAqBtB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,CAOR;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,OAAO,EACzB,gBAAgB,GAAE,SAAS,mBAAmB,EAAO,GACpD,IAAI,CAAC,QAAQ,EAAE,gBAAgB,GAAG,kBAAkB,GAAG,MAAM,GAAG,aAAa,CAAC,CAUhF;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,gBAAgB,GAAG,kBAAkB,GAAG,wBAAwB,CAAC,GACvF,OAAO,CAMT;AAGD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;;2BAK3B,CACrB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC;iCACX,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,EAChB,KAAK,CAAC,EAAE,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC;;AAZ5C,qBAAa,SAAU,SAAQ,cAcF;IAC3B,MAAM,CAAC,QAAQ,CAAC,KAAK,yHAuuBnB;CACH"}
@@ -9,6 +9,8 @@ export type DbConfig = ProfilePrerequisites & {
9
9
  database: string;
10
10
  password?: string;
11
11
  passwordEnvVar?: string;
12
+ hostEnvVar?: string;
13
+ portEnvVar?: string;
12
14
  port: number;
13
15
  needsTunnel: boolean;
14
16
  allowMutations: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/db-tool/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEzD,YAAY,EAAE,mBAAmB,EAAE,CAAC;AACpC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AAE1C,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,eAAe,CAAC;AAEzE,MAAM,MAAM,QAAQ,GAAG,oBAAoB,GAAG;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACjD,sBAAsB,EAAE,wBAAwB,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,IAAI,CAAC;IACpD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/db-tool/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEzD,YAAY,EAAE,mBAAmB,EAAE,CAAC;AACpC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AAE1C,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,eAAe,CAAC;AAEzE,MAAM,MAAM,QAAQ,GAAG,oBAAoB,GAAG;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACjD,sBAAsB,EAAE,wBAAwB,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,IAAI,CAAC;IACpD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/pr/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/pr/core.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/pr/review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAEV,YAAY,EAGZ,iBAAiB,EACjB,aAAa,EACb,YAAY,EAEb,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA2b5C;;;GAGG;AACH,eAAO,MAAM,YAAY,uQAcvB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,aAAa,8OAkCxB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,kBAAkB,qPAmC7B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,YAAY,sSA+CvB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;uHAaxB,CAAC;AAEH,eAAO,MAAM,uBAAuB,oOAgBlC,CAAC;AAEH,eAAO,MAAM,gBAAgB,uLA0C3B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;uHA4CjC,CAAC;AAeH;;GAEG;AACH,eAAO,MAAM,cAAc;;;uHA4FzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;uHA0FjC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa;;;uHAWxB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;uHAiD9B,CAAC;AAeH,eAAO,MAAM,sBAAsB;;;;uHA8CjC,CAAC"}
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../src/gh-tool/pr/review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAEV,YAAY,EAGZ,iBAAiB,EACjB,aAAa,EACb,YAAY,EAEb,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAic5C;;;GAGG;AACH,eAAO,MAAM,YAAY,uQAcvB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,aAAa,8OAoCxB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,kBAAkB,qPAmC7B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,YAAY,sSA+CvB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;uHAaxB,CAAC;AAEH,eAAO,MAAM,uBAAuB,oOAgBlC,CAAC;AAEH,eAAO,MAAM,gBAAgB,uLA0C3B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;uHA4CjC,CAAC;AAeH;;GAEG;AACH,eAAO,MAAM,cAAc;;;uHA4FzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;uHA0FjC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa;;;uHAWxB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;uHAiD9B,CAAC;AAeH,eAAO,MAAM,sBAAsB;;;;uHA8CjC,CAAC"}
@@ -46,6 +46,8 @@ export type ReviewThread = {
46
46
  isVisibleOpen: boolean;
47
47
  lastReplyAuthor: string | null;
48
48
  lastReplyAt: string | null;
49
+ reviewId: number | null;
50
+ updatedAt: string | null;
49
51
  /** Thread ids of exact duplicates collapsed into this representative (encounter order). */
50
52
  duplicateThreadIds: string[];
51
53
  };
@@ -59,6 +61,14 @@ export type ReviewComment = {
59
61
  path: string;
60
62
  line: number;
61
63
  createdAt: string;
64
+ reviewId: number | null;
65
+ /**
66
+ * Last change to the comment. A comment drafted inside a pending review keeps its draft time in
67
+ * `createdAt` and carries the submit time here until someone edits it, so this is a proxy for
68
+ * when the comment became visible. Join `reviewId` to the review's `submittedAt` for the exact
69
+ * time.
70
+ */
71
+ updatedAt: string;
62
72
  };
63
73
  export declare const IssueCommentId: Schema.brand<Schema.Int, "IssueCommentId">;
64
74
  export type IssueCommentId = typeof IssueCommentId.Type;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/gh-tool/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE1D,MAAM,MAAM,MAAM,GAAG;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,aAAa,GACrB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG;IAChC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAC3C,cAAc,EAAE,UAAU,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,EAAE,CAAC;IAC1E,cAAc,EAAE,aAAa,EAAE,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,cAAc,uEAA+D,CAAC;AAC3F,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAC;AAExD,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,2FAA2F;IAC3F,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,cAAc,4CAAkD,CAAC;AAC9E,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAC;AAExD,eAAO,MAAM,YAAY,6CAAmD,CAAC;AAC7E,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAC;AAEpD,eAAO,MAAM,qBAAqB,sDAA4D,CAAC;AAC/F,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAC,IAAI,CAAC;AAEtE,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,cAAc,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,cAAc,EAAE,SAAS,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,YAAY,CAAC;IACxB,GAAG,EAAE,qBAAqB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,YAAY,GAAG,IAAI,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG;IAC5C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,YAAY,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,oBAAoB,gIAQ/B,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAC,IAAI,CAAC;AAEpE,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC,CAAC;AAEF,eAAO,MAAM,uBAAuB,qEAA6D,CAAC;AAClG,MAAM,MAAM,uBAAuB,GAAG,OAAO,uBAAuB,CAAC,IAAI,CAAC;AAE1E,MAAM,MAAM,kBAAkB,GAC1B;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,YAAY,CAAA;CAAE,GAC9C;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChE;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7C,eAAO,MAAM,gBAAgB,oKAS3B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAC;AAE5D,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,sBAAsB,GAAG,qBAAqB,GAAG,QAAQ,GAAG,eAAe,CAAC;IACrF,IAAI,CAAC,EAAE,cAAc,EAAE,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACpE,MAAM,EAAE,QAAQ,GAAG,aAAa,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,KAAK,CAAC;QACV,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,KAAK,CAAC;YACX,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,EAAE,MAAM,CAAC;YACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;SAC3B,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,mFAAmF;IACnF,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,oFAAoF;IACpF,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,MAAM,EAAE,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAC;KAC5B,GAAG,IAAI,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,gBAAgB,GAAG,YAAY,CAAC;AAE9E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gBAAgB,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IACnD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,kBAAkB,EAAE,CAAC;CACnC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/gh-tool/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/gh-tool/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAqB,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAI3D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAsC,YAAY,EAAE,MAAM,SAAS,CAAC;AAwChF,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAqKF,eAAO,MAAM,gBAAgB;cACjB,MAAM;SACX,MAAM;YACH,aAAa,CAAC,MAAM,CAAC;UACvB,MAAM,GAAG,IAAI;;;;;;;gGAsBnB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAKF,eAAO,MAAM,kBAAkB;cACnB,MAAM;SACX,MAAM;UACL,MAAM,GAAG,IAAI;6GAyBnB,CAAC;AAKH,eAAO,MAAM,qBAAqB;cACtB,MAAM;SACX,MAAM;UACL,MAAM,GAAG,IAAI;iBACN,WAAW,CAAC,MAAM,CAAC;kHAShC,CAAC;AAMH,eAAO,MAAM,gBAAgB,GAC3B,OAAO,MAAM,EACb,YAAY;IACV,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;CAClF,EACD,aAAa,MAAM,GAAG,IAAI,EAC1B,QAAQ,OAAO,EACf,gBAAgB,MAAM;;;;;;;;;;CAiBtB,CAAC;AAmHH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAsBvD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAa5D;AAgBD,eAAO,MAAM,kBAAkB,GAAI,SAAS,SAAS,QAAQ,EAAE,KAAG,YA0CjE,CAAC;AA0DF,eAAO,MAAM,YAAY;WAChB,MAAM;SACR,MAAM;YACH,MAAM,GAAG,IAAI;sBACH,SAAS,MAAM,EAAE,GAAG,IAAI;qBACzB,OAAO;eACb,OAAO;YACV,MAAM;UACR,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;gGA8DnB,CAAC;AAMH,eAAO,MAAM,mBAAmB;;;;;;;oGA8C/B,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;oGAaqD,CAAC;AAEtF,eAAO,MAAM,mBAAmB;;;;oGAa+C,CAAC;AAEhF,eAAO,MAAM,mBAAmB;;;;;oGAsB2D,CAAC;AAE5F,eAAO,MAAM,oBAAoB;;;;;oGAiBoD,CAAC;AAEtF,eAAO,MAAM,qBAAqB;;;;oGAamC,CAAC;AAEtE,eAAO,MAAM,kBAAkB;;;;;;oGAgD6C,CAAC;AAE7E,eAAO,MAAM,oBAAoB;;;;;;oGA4BiE,CAAC;AAEnG,eAAO,MAAM,sBAAsB;;;;;;;oGAwClC,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;;;oGAyBtC,CAAC"}
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/gh-tool/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAY,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIlD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAsC,YAAY,EAAE,MAAM,SAAS,CAAC;AAwChF,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAqKF,eAAO,MAAM,gBAAgB;cACjB,MAAM;SACX,MAAM;YACH,aAAa,CAAC,MAAM,CAAC;UACvB,MAAM,GAAG,IAAI;;;;;;;gGAsBnB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAKF,eAAO,MAAM,kBAAkB;cACnB,MAAM;SACX,MAAM;UACL,MAAM,GAAG,IAAI;6GAyBnB,CAAC;AAKH,eAAO,MAAM,qBAAqB;cACtB,MAAM;SACX,MAAM;UACL,MAAM,GAAG,IAAI;iBACN,WAAW,CAAC,MAAM,CAAC;kHAShC,CAAC;AAMH,eAAO,MAAM,gBAAgB,GAC3B,OAAO,MAAM,EACb,YAAY;IACV,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;CAClF,EACD,aAAa,MAAM,GAAG,IAAI,EAC1B,QAAQ,OAAO,EACf,gBAAgB,MAAM;;;;;;;;;;CAiBtB,CAAC;AAmHH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAsBvD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAa5D;AAgBD,eAAO,MAAM,kBAAkB,GAAI,SAAS,SAAS,QAAQ,EAAE,KAAG,YA0CjE,CAAC;AA0DF,eAAO,MAAM,YAAY;WAChB,MAAM;SACR,MAAM;YACH,MAAM,GAAG,IAAI;sBACH,SAAS,MAAM,EAAE,GAAG,IAAI;qBACzB,OAAO;eACb,OAAO;YACV,MAAM;UACR,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;gGA8DnB,CAAC;AAMH,eAAO,MAAM,mBAAmB;;;;;;;oGA8C/B,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;oGAaqD,CAAC;AAEtF,eAAO,MAAM,mBAAmB;;;;oGAa+C,CAAC;AAEhF,eAAO,MAAM,mBAAmB;;;;;oGAsB2D,CAAC;AAE5F,eAAO,MAAM,oBAAoB;;;;;oGAiBoD,CAAC;AAEtF,eAAO,MAAM,qBAAqB;;;;oGAamC,CAAC;AAEtE,eAAO,MAAM,kBAAkB;;;;;;oGAgD6C,CAAC;AAE7E,eAAO,MAAM,oBAAoB;;;;;;oGA4BiE,CAAC;AAEnG,eAAO,MAAM,sBAAsB;;;;;;;oGAwClC,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;;;oGAyBtC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logs-tool/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAQ,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAW,MAAM,EAAyB,MAAM,QAAQ,CAAC;AAYhE,OAAO,EAAE,aAAa,EAA6C,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,eAAe,EAAsD,MAAM,UAAU,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAoB,MAAM,WAAW,CAAC;AAyM1D,eAAO,MAAM,GAAG,6KAEd,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logs-tool/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAQ,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAyB,MAAM,QAAQ,CAAC;AAavD,OAAO,EAAE,aAAa,EAA6C,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,eAAe,EAAsD,MAAM,UAAU,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAoB,MAAM,WAAW,CAAC;AAyM1D,eAAO,MAAM,GAAG,6KAEd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session-tool/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAY,OAAO,EAAQ,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAW,MAAM,EAAiB,MAAM,QAAQ,CAAC;AAQxD,OAAO,EAAE,aAAa,EAAsB,MAAM,UAAU,CAAC;AAE7D,OAAO,EAAc,cAAc,EAAiC,MAAM,WAAW,CAAC;AAiTtF,eAAO,MAAM,GAAG,8JAEd,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session-tool/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAY,OAAO,EAAQ,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,MAAM,EAAiB,MAAM,QAAQ,CAAC;AAQ/C,OAAO,EAAE,aAAa,EAAsB,MAAM,UAAU,CAAC;AAE7D,OAAO,EAAc,cAAc,EAAiC,MAAM,WAAW,CAAC;AAiTtF,eAAO,MAAM,GAAG,8JAEd,CAAC"}
@@ -1,7 +1,9 @@
1
1
  import { Flag } from "effect/unstable/cli";
2
+ import { Effect } from "effect";
2
3
  import type { BaseResult, OutputFormat } from "./types";
3
4
  export declare const formatOption: Flag.Flag<"json" | "toon">;
4
5
  export declare function formatOutput<T extends BaseResult>(result: T, format: OutputFormat): string;
5
6
  export declare function formatAny<T>(data: T, format: OutputFormat): string;
6
- export declare const logFormatted: <T>(data: T, format: OutputFormat) => import("effect/Effect").Effect<void, never, never>;
7
+ export declare const logText: (text: string) => Effect.Effect<undefined, never, never>;
8
+ export declare const logFormatted: <T>(data: T, format: OutputFormat) => Effect.Effect<undefined, never, never>;
7
9
  //# sourceMappingURL=format.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/shared/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAI3C,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAExD,eAAO,MAAM,YAAY,4BAGxB,CAAC;AAEF,wBAAgB,YAAY,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAK1F;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAKlE;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,MAAM,CAAC,EAAE,QAAQ,YAAY,uDACvB,CAAC"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/shared/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAExD,eAAO,MAAM,YAAY,4BAGxB,CAAC;AAEF,wBAAgB,YAAY,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAK1F;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAKlE;AAOD,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,2CAShC,CAAC;AAEL,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,MAAM,CAAC,EAAE,QAAQ,YAAY,2CAAqC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export type { BaseResult, CommandOptions, CommandResult, Environment, OutputFormat, ToolResult, } from "./types";
2
- export { formatAny, formatOption, formatOutput, logFormatted } from "./format";
2
+ export { formatAny, formatOption, formatOutput, logFormatted, logText } from "./format";
3
3
  export { expandPath, runCommand } from "./bun";
4
4
  export { commonArgOptions, parseCommonArgs } from "./cli";
5
5
  export { renderCauseToStderr } from "./error-renderer";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,GACX,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE/E,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAIzF,eAAO,MAAM,OAAO,QAAc,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE5F,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhE,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,GACX,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAIzF,eAAO,MAAM,OAAO,QAAc,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE5F,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhE,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blogic-cz/agent-tools",
3
- "version": "0.17.1",
3
+ "version": "0.18.0",
4
4
  "description": "CLI tools for AI coding agent workflows — GitHub, database, Kubernetes, Azure DevOps, logs, sessions, and audit",
5
5
  "keywords": [
6
6
  "agent",
@@ -209,6 +209,14 @@
209
209
  "description": "Name of the environment variable holding the database password.",
210
210
  "type": "string"
211
211
  },
212
+ "hostEnvVar": {
213
+ "description": "Name of an environment variable that overrides host when it is set. Unset or empty keeps the literal host.",
214
+ "type": "string"
215
+ },
216
+ "portEnvVar": {
217
+ "description": "Name of an environment variable that overrides port when it is set. Unset or empty keeps the literal port; a value that is not an integer between 1 and 65535 is an error, never a silent fallback.",
218
+ "type": "string"
219
+ },
212
220
  "prerequisites": {
213
221
  "description": "Ordered prerequisite references for this database environment. Declaring this or vpn overrides profile-level database prerequisites; an empty array explicitly disables inherited prerequisites.",
214
222
  "type": "array",
@@ -1,12 +1,13 @@
1
1
  #!/usr/bin/env bun
2
2
  import { Command, Flag } from "effect/unstable/cli";
3
3
  import { BunRuntime, BunServices } from "@effect/platform-bun";
4
- import { Console, Effect, Layer, Option } from "effect";
4
+ import { Effect, Layer, Option } from "effect";
5
5
 
6
6
  import {
7
7
  makeSchemaCommand,
8
8
  formatOption,
9
9
  formatOutput,
10
+ logText,
10
11
  renderCauseToStderr,
11
12
  VERSION,
12
13
  } from "#shared";
@@ -58,7 +59,7 @@ const listCommand = Command.make(
58
59
  data: filteredEntries,
59
60
  };
60
61
 
61
- yield* Console.log(formatOutput(result, format));
62
+ yield* logText(formatOutput(result, format));
62
63
  }),
63
64
  ).pipe(Command.withDescription("List recent audit log entries"));
64
65
 
@@ -83,7 +84,7 @@ const purgeCommand = Command.make(
83
84
  data: { deleted, days },
84
85
  };
85
86
 
86
- yield* Console.log(formatOutput(result, format));
87
+ yield* logText(formatOutput(result, format));
87
88
  }),
88
89
  ).pipe(Command.withDescription("Delete old audit log entries"));
89
90
 
@@ -1,13 +1,14 @@
1
1
  #!/usr/bin/env bun
2
2
  import { Command, Flag } from "effect/unstable/cli";
3
3
  import { BunRuntime, BunServices } from "@effect/platform-bun";
4
- import { Console, Effect, Layer, Option } from "effect";
4
+ import { Effect, Layer, Option } from "effect";
5
5
 
6
6
  import {
7
7
  makeSchemaCommand,
8
8
  formatAny,
9
9
  formatOption,
10
10
  formatOutput,
11
+ logText,
11
12
  renderCauseToStderr,
12
13
  VERSION,
13
14
  } from "#shared";
@@ -46,7 +47,7 @@ const buildTimelineCommand = Command.make(
46
47
  ({ buildId, format, profile: _profile }) =>
47
48
  Effect.gen(function* () {
48
49
  const result = yield* getBuildTimeline(buildId);
49
- yield* Console.log(formatAny(result, format));
50
+ yield* logText(formatAny(result, format));
50
51
  }),
51
52
  ).pipe(Command.withDescription("Get build timeline with all records (jobs, stages, tasks)"));
52
53
 
@@ -59,7 +60,7 @@ const buildFailedJobsCommand = Command.make(
59
60
  ({ buildId, format, profile: _profile }) =>
60
61
  Effect.gen(function* () {
61
62
  const failedJobs = yield* findFailedJobs(buildId);
62
- yield* Console.log(formatAny({ buildId, failedJobs }, format));
63
+ yield* logText(formatAny({ buildId, failedJobs }, format));
63
64
  }),
64
65
  ).pipe(Command.withDescription("Find failed or canceled jobs in a build"));
65
66
 
@@ -72,7 +73,7 @@ const buildLogsCommand = Command.make(
72
73
  ({ buildId, format, profile: _profile }) =>
73
74
  Effect.gen(function* () {
74
75
  const result = yield* getBuildLogs(buildId);
75
- yield* Console.log(formatAny(result, format));
76
+ yield* logText(formatAny(result, format));
76
77
  }),
77
78
  ).pipe(Command.withDescription("Get list of build logs"));
78
79
 
@@ -86,7 +87,7 @@ const buildLogContentCommand = Command.make(
86
87
  ({ buildId, format, logId, profile: _profile }) =>
87
88
  Effect.gen(function* () {
88
89
  const content = yield* getBuildLogContent(buildId, logId);
89
- yield* Console.log(formatAny({ buildId, logId, content }, format));
90
+ yield* logText(formatAny({ buildId, logId, content }, format));
90
91
  }),
91
92
  ).pipe(Command.withDescription("Get specific log content by log ID"));
92
93
 
@@ -99,7 +100,7 @@ const buildSummaryCommand = Command.make(
99
100
  ({ buildId, format, profile: _profile }) =>
100
101
  Effect.gen(function* () {
101
102
  const summary = yield* getBuildJobSummary(buildId);
102
- yield* Console.log(formatAny({ buildId, summary }, format));
103
+ yield* logText(formatAny({ buildId, summary }, format));
103
104
  }),
104
105
  ).pipe(Command.withDescription("Get job summaries with duration and status information"));
105
106
 
@@ -144,7 +145,7 @@ const cmdCommand = Command.make(
144
145
 
145
146
  if (dryRun) {
146
147
  const fullCommand = `az ${cmd}`;
147
- yield* Console.log(`[DRY-RUN] Would execute: ${fullCommand}`);
148
+ yield* logText(`[DRY-RUN] Would execute: ${fullCommand}`);
148
149
  return;
149
150
  }
150
151
 
@@ -154,7 +155,7 @@ const cmdCommand = Command.make(
154
155
  const output = yield* az.runCommand(cmd, projectName);
155
156
  const executionTimeMs = Date.now() - startTime;
156
157
 
157
- yield* Console.log(
158
+ yield* logText(
158
159
  formatOutput(
159
160
  {
160
161
  success: true,
@@ -105,6 +105,8 @@ const DbEnvConfigSchema = Schema.Struct({
105
105
  database: Schema.String,
106
106
  password: Schema.optionalKey(Schema.String),
107
107
  passwordEnvVar: Schema.optionalKey(Schema.String),
108
+ hostEnvVar: Schema.optionalKey(Schema.String),
109
+ portEnvVar: Schema.optionalKey(Schema.String),
108
110
  prerequisites: Schema.optionalKey(PrerequisitesSchema),
109
111
  vpn: Schema.optionalKey(Schema.String),
110
112
  });
@@ -91,6 +91,23 @@ export type DbEnvConfig = ProfilePrerequisites & {
91
91
  password?: string;
92
92
  /** Name of environment variable holding the password, e.g. "DB_TEST_PWD" */
93
93
  passwordEnvVar?: string;
94
+ /**
95
+ * Name of an environment variable that overrides `host`, e.g. "APP_POSTGRES_HOST".
96
+ *
97
+ * Override with fallback, deliberately unlike `passwordEnvVar`: an unset or empty variable is
98
+ * not an error, it keeps the literal `host` above. The variable usually exists only in a
99
+ * per-worktree environment, and the main checkout must keep working from the literal.
100
+ */
101
+ hostEnvVar?: string;
102
+ /**
103
+ * Name of an environment variable that overrides `port`, e.g. "APP_POSTGRES_PORT".
104
+ *
105
+ * Same override-with-fallback rule as `hostEnvVar`: unset or empty keeps the literal `port`,
106
+ * because only a worktree environment publishes its own port. A variable that *is* set but is
107
+ * not an integer in 1..65535 fails instead of falling back — a silent fallback would query the
108
+ * wrong database while the caller believes the override applied.
109
+ */
110
+ portEnvVar?: string;
94
111
  };
95
112
 
96
113
  /** SQL mutation operation that can be explicitly allowed for a database environment. */
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bun
2
2
  import { Command, Flag } from "effect/unstable/cli";
3
3
  import { BunRuntime, BunServices } from "@effect/platform-bun";
4
- import { Console, Effect, Layer, Option } from "effect";
4
+ import { Effect, Layer, Option } from "effect";
5
5
 
6
6
  import type { SchemaMode } from "./types";
7
7
 
@@ -9,6 +9,7 @@ import {
9
9
  makeSchemaCommand,
10
10
  formatOption,
11
11
  formatOutput,
12
+ logText,
12
13
  renderCauseToStderr,
13
14
  VERSION,
14
15
  } from "#shared";
@@ -80,7 +81,7 @@ const sqlCommand = Command.make(
80
81
  const resolvedEnv = yield* resolveEnv(env);
81
82
  const db = yield* DbService;
82
83
  const result = yield* db.executeQuery(resolvedEnv, sql, Option.getOrUndefined(limit));
83
- yield* Console.log(formatOutput(result, format));
84
+ yield* logText(formatOutput(result, format));
84
85
  }),
85
86
  ).pipe(Command.withDescription("Execute a SQL query"));
86
87
 
@@ -115,7 +116,7 @@ const schemaCommand = Command.make(
115
116
  mode as SchemaMode,
116
117
  Option.getOrUndefined(table),
117
118
  );
118
- yield* Console.log(formatOutput(result, format));
119
+ yield* logText(formatOutput(result, format));
119
120
  }),
120
121
  ).pipe(Command.withDescription("Introspect database schema (tables, columns, relationships)"));
121
122
 
@@ -139,7 +140,7 @@ const envsCommand = Command.make(
139
140
  message: `${environments.length} environment(s) configured`,
140
141
  executionTimeMs: 0,
141
142
  };
142
- yield* Console.log(formatOutput(result, format));
143
+ yield* logText(formatOutput(result, format));
143
144
  }),
144
145
  ).pipe(
145
146
  Command.withDescription("List configured database environments and the default (no network)"),
@@ -198,7 +199,7 @@ const makeDiagnosticCommand = (name: string, description: string, sql: string) =
198
199
  const resolvedEnv = yield* resolveEnv(env);
199
200
  const db = yield* DbService;
200
201
  const result = yield* db.executeQuery(resolvedEnv, sql, Option.getOrUndefined(limit));
201
- yield* Console.log(formatOutput(result, format));
202
+ yield* logText(formatOutput(result, format));
202
203
  }),
203
204
  ).pipe(Command.withDescription(description));
204
205
 
@@ -38,6 +38,75 @@ import { transformQueryResult } from "./transformers";
38
38
 
39
39
  const LOCALHOST_HOSTS = new Set(["localhost", "127.0.0.1"]);
40
40
 
41
+ const MIN_TCP_PORT = 1;
42
+ const MAX_TCP_PORT = 65535;
43
+ const INTEGER_ONLY = /^\d+$/;
44
+
45
+ // Bun.env is the primary source: it carries the values Bun loads from a .env file, which is where
46
+ // a per-worktree host/port lives. It aliases process.env, which is also the only one that exists
47
+ // when this module runs outside Bun (the vitest runner).
48
+ const readProcessEnv = (envVar: string): string | undefined =>
49
+ (typeof Bun === "undefined" ? process.env : Bun.env)[envVar];
50
+
51
+ export type ResolvedPortOverride =
52
+ | { readonly ok: true; readonly port: number }
53
+ | { readonly ok: false; readonly message: string };
54
+
55
+ /**
56
+ * Applies a `portEnvVar` override to the literal `port` of a database environment.
57
+ *
58
+ * Override with fallback: no variable name, or a variable that is unset or blank, keeps
59
+ * `literalPort`, because the variable exists only in environments that publish their own port
60
+ * (a per-repository worktree) while the main checkout runs from the literal. A variable that is
61
+ * set but does not hold an integer in 1..65535 fails instead of falling back, since falling back
62
+ * would silently query the main checkout's database while the caller believes the override applied.
63
+ */
64
+ export function resolvePortOverride(
65
+ env: string,
66
+ literalPort: number,
67
+ portEnvVar: string | undefined,
68
+ value: string | undefined,
69
+ ): ResolvedPortOverride {
70
+ if (!portEnvVar) {
71
+ return { ok: true, port: literalPort };
72
+ }
73
+
74
+ const trimmed = value?.trim() ?? "";
75
+ if (trimmed === "") {
76
+ return { ok: true, port: literalPort };
77
+ }
78
+
79
+ const parsed = Number(trimmed);
80
+ if (!INTEGER_ONLY.test(trimmed) || parsed < MIN_TCP_PORT || parsed > MAX_TCP_PORT) {
81
+ return {
82
+ ok: false,
83
+ message:
84
+ `Environment variable ${portEnvVar} (override for the 'port' config field) is set to ` +
85
+ `"${value}" in environment ${env}, which is not an integer port between ${MIN_TCP_PORT} and ${MAX_TCP_PORT}.`,
86
+ };
87
+ }
88
+
89
+ return { ok: true, port: parsed };
90
+ }
91
+
92
+ /**
93
+ * Applies a `hostEnvVar` override to the literal `host` of a database environment.
94
+ * Unset or blank keeps `literalHost`; every non-blank value is a usable host, so there is no
95
+ * failure case here, unlike {@link resolvePortOverride}.
96
+ */
97
+ export function resolveHostOverride(
98
+ literalHost: string,
99
+ hostEnvVar: string | undefined,
100
+ value: string | undefined,
101
+ ): string {
102
+ if (!hostEnvVar) {
103
+ return literalHost;
104
+ }
105
+
106
+ const trimmed = value?.trim() ?? "";
107
+ return trimmed === "" ? literalHost : trimmed;
108
+ }
109
+
41
110
  export function resolveDbAccessMode(
42
111
  env: string,
43
112
  host: string,
@@ -204,15 +273,56 @@ export class DbService extends Context.Service<
204
273
  });
205
274
  });
206
275
 
276
+ const lookupEnvOverride = (envVar: string, zshrcEnv: Record<string, string>) =>
277
+ readProcessEnv(envVar) ?? zshrcEnv[envVar];
278
+
207
279
  const resolveDbConfig = Effect.fn("DbService.resolveDbConfig")(function* (
208
280
  config: DbConfig,
209
281
  env: string,
210
282
  ) {
211
283
  const needsEnvResolution =
212
- envTemplateRegex.test(config.user) || envTemplateRegex.test(config.database);
284
+ envTemplateRegex.test(config.user) ||
285
+ envTemplateRegex.test(config.database) ||
286
+ config.hostEnvVar !== undefined ||
287
+ config.portEnvVar !== undefined;
213
288
  const zshrcEnv = needsEnvResolution ? yield* loadEnvFromZshrc() : {};
289
+
290
+ const host = resolveHostOverride(
291
+ config.host,
292
+ config.hostEnvVar,
293
+ config.hostEnvVar ? lookupEnvOverride(config.hostEnvVar, zshrcEnv) : undefined,
294
+ );
295
+ const portOverride = resolvePortOverride(
296
+ env,
297
+ config.port,
298
+ config.portEnvVar,
299
+ config.portEnvVar ? lookupEnvOverride(config.portEnvVar, zshrcEnv) : undefined,
300
+ );
301
+
302
+ if (!portOverride.ok) {
303
+ return yield* new DbConnectionError({
304
+ message: portOverride.message,
305
+ environment: env,
306
+ });
307
+ }
308
+
309
+ // A host override can flip the tunnel decision (a forwarded localhost port vs a directly
310
+ // reachable host), so re-derive the access mode whenever the override changed the host.
311
+ const needsTunnel =
312
+ host === config.host
313
+ ? config.needsTunnel
314
+ : resolveDbAccessMode(
315
+ env,
316
+ host,
317
+ dbConfig.kubectl !== undefined,
318
+ config.allowedMutations,
319
+ ).needsTunnel;
320
+
214
321
  return {
215
322
  ...config,
323
+ host,
324
+ port: portOverride.port,
325
+ needsTunnel,
216
326
  user: yield* resolveConfigString(config.user, env, "user", zshrcEnv),
217
327
  database: yield* resolveConfigString(config.database, env, "database", zshrcEnv),
218
328
  };
@@ -646,6 +756,8 @@ export class DbService extends Context.Service<
646
756
  database: envConfig.database,
647
757
  password: envConfig.password,
648
758
  passwordEnvVar: envConfig.passwordEnvVar,
759
+ hostEnvVar: envConfig.hostEnvVar,
760
+ portEnvVar: envConfig.portEnvVar,
649
761
  ...resolveEnvironmentScopedPrerequisites(dbConfig, envConfig),
650
762
  port: envConfig.port,
651
763
  needsTunnel: accessMode.needsTunnel,
@@ -16,6 +16,8 @@ export type DbConfig = ProfilePrerequisites & {
16
16
  database: string;
17
17
  password?: string;
18
18
  passwordEnvVar?: string;
19
+ hostEnvVar?: string;
20
+ portEnvVar?: string;
19
21
  port: number;
20
22
  needsTunnel: boolean;
21
23
  allowMutations: boolean;
@@ -3,7 +3,7 @@ import { Console, Effect, Option } from "effect";
3
3
 
4
4
  import type { CheckResult, PRStatusResult } from "#gh/types";
5
5
 
6
- import { formatOption, logFormatted } from "#shared";
6
+ import { formatOption, logFormatted, logText } from "#shared";
7
7
  import { GitHubService } from "#gh/service";
8
8
  import { GitHubCommandError } from "#gh/errors";
9
9
 
@@ -887,7 +887,7 @@ export const prWatchCommand = Command.make(
887
887
  yield* watchPRs(
888
888
  numbers,
889
889
  { intervalSeconds: interval, timeoutSeconds: timeout, until },
890
- (event) => Console.log(JSON.stringify(event)),
890
+ (event) => logText(JSON.stringify(event)),
891
891
  );
892
892
  }),
893
893
  ),
@@ -19,6 +19,7 @@ import type {
19
19
  import type { GitHubAuthError, GitHubNotFoundError } from "#gh/errors";
20
20
  import { GitHubCommandError, GitHubMergeError } from "#gh/errors";
21
21
  import { GitHubService } from "#gh/service";
22
+ import { logText } from "#shared";
22
23
 
23
24
  import type { ButStatusJson, PRViewJsonResult } from "./helpers";
24
25
  import { runLocalCommand } from "./helpers";
@@ -764,7 +765,7 @@ export const mergePR = Effect.fn("pr.mergePR")(function* (opts: {
764
765
  "(rolled back if the merge fails); branch deletion is skipped if any retarget fails. "
765
766
  : "";
766
767
 
767
- yield* Console.log(
768
+ yield* logText(
768
769
  `DRY RUN: Would merge PR #${info.number} "${info.title}" via ${opts.strategy.toUpperCase()}. ` +
769
770
  `Branch \`${info.headRefName}\` → \`${info.baseRefName}\`. ` +
770
771
  (opts.deleteBranch && !headIsLongLived
@@ -228,6 +228,8 @@ type RawReviewComment = {
228
228
  path: string;
229
229
  line: number;
230
230
  created_at: string;
231
+ updated_at: string;
232
+ pull_request_review_id?: number | null;
231
233
  commit_id?: string | null;
232
234
  };
233
235
 
@@ -353,6 +355,7 @@ const enrichThreads = (
353
355
  currentHeadSha: string | null,
354
356
  ): ReviewThread[] => {
355
357
  const repliesByRootCommentId = new Map<number, ReviewComment[]>();
358
+ const commentsById = new Map(reviewComments.map((comment) => [comment.id, comment]));
356
359
 
357
360
  for (const comment of reviewComments) {
358
361
  if (comment.inReplyToId === null) {
@@ -371,6 +374,7 @@ const enrichThreads = (
371
374
  return null;
372
375
  }
373
376
 
377
+ const root = commentsById.get(comment.databaseId);
374
378
  const replies = repliesByRootCommentId.get(comment.databaseId) ?? [];
375
379
  const lastReply = replies.reduce<ReviewComment | null>((latest, current) => {
376
380
  if (latest === null) {
@@ -399,6 +403,8 @@ const enrichThreads = (
399
403
  isVisibleOpen: !node.isResolved || needsHumanReply,
400
404
  lastReplyAuthor: lastReply?.author ?? null,
401
405
  lastReplyAt: lastReply?.createdAt ?? null,
406
+ reviewId: root?.reviewId ?? null,
407
+ updatedAt: root?.updatedAt ?? null,
402
408
  duplicateThreadIds: [] as string[],
403
409
  };
404
410
  })
@@ -505,6 +511,8 @@ export const fetchComments = Effect.fn("pr.fetchComments")(function* (
505
511
  path: c.path,
506
512
  line: c.line,
507
513
  createdAt: c.created_at,
514
+ reviewId: c.pull_request_review_id ?? null,
515
+ updatedAt: c.updated_at,
508
516
  }));
509
517
 
510
518
  if (since !== null) {
@@ -44,6 +44,8 @@ export type ReviewThread = {
44
44
  isVisibleOpen: boolean;
45
45
  lastReplyAuthor: string | null;
46
46
  lastReplyAt: string | null;
47
+ reviewId: number | null;
48
+ updatedAt: string | null;
47
49
  /** Thread ids of exact duplicates collapsed into this representative (encounter order). */
48
50
  duplicateThreadIds: string[];
49
51
  };
@@ -58,6 +60,14 @@ export type ReviewComment = {
58
60
  path: string;
59
61
  line: number;
60
62
  createdAt: string;
63
+ reviewId: number | null;
64
+ /**
65
+ * Last change to the comment. A comment drafted inside a pending review keeps its draft time in
66
+ * `createdAt` and carries the submit time here until someone edits it, so this is a proxy for
67
+ * when the comment became visible. Join `reviewId` to the review's `submittedAt` for the exact
68
+ * time.
69
+ */
70
+ updatedAt: string;
61
71
  };
62
72
 
63
73
  export const IssueCommentId = Schema.Int.pipe(Schema.brand("IssueCommentId"));
@@ -1,7 +1,7 @@
1
1
  import { Command, Flag, Param } from "effect/unstable/cli";
2
- import { Console, Duration, Effect, Option } from "effect";
2
+ import { Duration, Effect, Option } from "effect";
3
3
 
4
- import { formatOption, logFormatted } from "#shared";
4
+ import { formatOption, logFormatted, logText } from "#shared";
5
5
  import { CI_CHECK_WATCH_TIMEOUT_MS } from "#gh/config";
6
6
  import { GitHubCommandError, GitHubNotFoundError } from "./errors";
7
7
  import { GitHubService } from "./service";
@@ -780,7 +780,7 @@ export const workflowLogsCommand = Command.make(
780
780
  if (format === "toon" || format === "json") {
781
781
  yield* logFormatted(logs, format);
782
782
  } else {
783
- yield* Console.log(logs.log);
783
+ yield* logText(logs.log);
784
784
  }
785
785
  }),
786
786
  ).pipe(Command.withDescription("Fetch logs for a workflow run (--failed-only by default)"));
@@ -930,7 +930,7 @@ export const workflowJobLogsCommand = Command.make(
930
930
  });
931
931
 
932
932
  if ("formatted" in result) {
933
- yield* Console.log(result.formatted);
933
+ yield* logText(result.formatted ?? "");
934
934
  } else {
935
935
  yield* logFormatted(result, format);
936
936
  }
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bun
2
2
  import { Command, Flag } from "effect/unstable/cli";
3
3
  import { BunRuntime, BunServices } from "@effect/platform-bun";
4
- import { Console, Effect, Layer, Option } from "effect";
4
+ import { Effect, Layer, Option } from "effect";
5
5
 
6
6
  import type { CommandResult } from "./types";
7
7
 
@@ -9,6 +9,7 @@ import {
9
9
  makeSchemaCommand,
10
10
  formatOption,
11
11
  formatOutput,
12
+ logText,
12
13
  renderCauseToStderr,
13
14
  VERSION,
14
15
  } from "#shared";
@@ -172,7 +173,7 @@ const executeK8sCommand = (command: string, options: CommonK8sCommandOptions) =>
172
173
  const runK8sCommand = (command: string, options: CommonK8sCommandOptions) =>
173
174
  Effect.gen(function* () {
174
175
  const result = yield* executeK8sCommand(command, options);
175
- yield* Console.log(formatOutput(result, options.format));
176
+ yield* logText(formatOutput(result, options.format));
176
177
  });
177
178
 
178
179
  const logTransformedResult = (
@@ -183,7 +184,7 @@ const logTransformedResult = (
183
184
  Effect.gen(function* () {
184
185
  const transformedResult =
185
186
  typeof result.output === "string" ? { ...result, output: transform(result.output) } : result;
186
- yield* Console.log(formatOutput(transformedResult, format));
187
+ yield* logText(formatOutput(transformedResult, format));
187
188
  });
188
189
 
189
190
  const commonFlags = {
@@ -16,7 +16,7 @@
16
16
 
17
17
  import { Command, Flag } from "effect/unstable/cli";
18
18
  import { BunRuntime, BunServices } from "@effect/platform-bun";
19
- import { Console, Effect, Layer, Option, Result } from "effect";
19
+ import { Effect, Layer, Option, Result } from "effect";
20
20
 
21
21
  import type { Environment, LogResult, ReadOptions } from "./types";
22
22
 
@@ -24,6 +24,7 @@ import {
24
24
  makeSchemaCommand,
25
25
  formatOption,
26
26
  formatOutput,
27
+ logText,
27
28
  renderCauseToStderr,
28
29
  VERSION,
29
30
  } from "#shared";
@@ -140,7 +141,7 @@ const listCommand = Command.make(
140
141
  }),
141
142
  });
142
143
 
143
- yield* Console.log(formatOutput(logResult, format));
144
+ yield* logText(formatOutput(logResult, format));
144
145
  }),
145
146
  ).pipe(Command.withDescription("List available log files"));
146
147
 
@@ -216,7 +217,7 @@ const readCommand = Command.make(
216
217
  }),
217
218
  });
218
219
 
219
- yield* Console.log(formatOutput(logResult, format));
220
+ yield* logText(formatOutput(logResult, format));
220
221
  }),
221
222
  ).pipe(Command.withDescription("Read application logs"));
222
223
 
@@ -1,7 +1,7 @@
1
- import { Console, Effect } from "effect";
1
+ import { Effect } from "effect";
2
2
  import { Argument, Command, Flag } from "effect/unstable/cli";
3
3
 
4
- import { formatOption, formatOutput } from "#shared";
4
+ import { formatOption, formatOutput, logText } from "#shared";
5
5
 
6
6
  import { ObservabilityToolError } from "./errors";
7
7
  import {
@@ -157,7 +157,7 @@ const queryCommand = Command.make(
157
157
  executionTimeMs: Date.now() - startedAt,
158
158
  };
159
159
 
160
- yield* Console.log(formatOutput(result, format));
160
+ yield* logText(formatOutput(result, format));
161
161
  }).pipe(
162
162
  Effect.catchTag("ObservabilityToolError", (error) =>
163
163
  Effect.gen(function* () {
@@ -168,7 +168,7 @@ const queryCommand = Command.make(
168
168
  hint: "Check LogQL syntax and Grafana/Loki connectivity",
169
169
  executionTimeMs: Date.now() - startedAt,
170
170
  };
171
- yield* Console.log(formatOutput(result, format));
171
+ yield* logText(formatOutput(result, format));
172
172
  }),
173
173
  ),
174
174
  );
@@ -1,7 +1,7 @@
1
- import { Console, Effect } from "effect";
1
+ import { Effect } from "effect";
2
2
  import { Argument, Command, Flag } from "effect/unstable/cli";
3
3
 
4
- import { formatOption, formatOutput } from "#shared";
4
+ import { formatOption, formatOutput, logText } from "#shared";
5
5
 
6
6
  import { ObservabilityToolError } from "./errors";
7
7
  import {
@@ -105,7 +105,7 @@ const queryCommand = Command.make(
105
105
  executionTimeMs: Date.now() - startedAt,
106
106
  };
107
107
 
108
- yield* Console.log(formatOutput(result, format));
108
+ yield* logText(formatOutput(result, format));
109
109
  }).pipe(
110
110
  Effect.catch((error) =>
111
111
  Effect.gen(function* () {
@@ -116,7 +116,7 @@ const queryCommand = Command.make(
116
116
  hint: "Check PromQL syntax and Grafana/Prometheus connectivity",
117
117
  executionTimeMs: Date.now() - startedAt,
118
118
  };
119
- yield* Console.log(formatOutput(result, format));
119
+ yield* logText(formatOutput(result, format));
120
120
  }),
121
121
  ),
122
122
  );
@@ -1,7 +1,7 @@
1
- import { Console, Effect, type Option } from "effect";
1
+ import { Effect, type Option } from "effect";
2
2
  import { Argument, Command, Flag } from "effect/unstable/cli";
3
3
 
4
- import { formatOption, formatOutput } from "#shared";
4
+ import { formatOption, formatOutput, logText } from "#shared";
5
5
  import type { OutputFormat } from "#shared";
6
6
 
7
7
  import { ObservabilityToolError } from "./errors";
@@ -396,7 +396,7 @@ function handleTraceGet(
396
396
  executionTimeMs: Date.now() - startedAt,
397
397
  };
398
398
 
399
- yield* Console.log(formatOutput(result, format));
399
+ yield* logText(formatOutput(result, format));
400
400
  }).pipe(
401
401
  Effect.catch((error) =>
402
402
  Effect.gen(function* () {
@@ -407,7 +407,7 @@ function handleTraceGet(
407
407
  hint: "Accepts 32-char trace ID or 16-char span ID. Check format and Grafana/Tempo connectivity",
408
408
  executionTimeMs: Date.now() - startedAt,
409
409
  };
410
- yield* Console.log(formatOutput(result, format));
410
+ yield* logText(formatOutput(result, format));
411
411
  }),
412
412
  ),
413
413
  );
@@ -497,7 +497,7 @@ const logsCommand = Command.make(
497
497
  executionTimeMs: Date.now() - startedAt,
498
498
  };
499
499
 
500
- yield* Console.log(formatOutput(result, format));
500
+ yield* logText(formatOutput(result, format));
501
501
  }).pipe(
502
502
  Effect.catch((error) =>
503
503
  Effect.gen(function* () {
@@ -508,7 +508,7 @@ const logsCommand = Command.make(
508
508
  hint: "Accepts 32-char trace ID or 16-char span ID. Check format and Grafana/Loki connectivity",
509
509
  executionTimeMs: Date.now() - startedAt,
510
510
  };
511
- yield* Console.log(formatOutput(result, format));
511
+ yield* logText(formatOutput(result, format));
512
512
  }),
513
513
  ),
514
514
  );
@@ -9,13 +9,13 @@
9
9
 
10
10
  import { Argument, Command, Flag } from "effect/unstable/cli";
11
11
  import { BunRuntime, BunServices } from "@effect/platform-bun";
12
- import { Console, Effect, Layer, Result } from "effect";
12
+ import { Effect, Layer, Result } from "effect";
13
13
 
14
14
  import type { MessageSummary, SessionResult, SessionSource } from "./types";
15
15
 
16
16
  import { ALL_SESSION_SOURCES } from "./types";
17
17
 
18
- import { makeSchemaCommand, formatOption, formatOutput, VERSION } from "#shared";
18
+ import { makeSchemaCommand, formatOption, formatOutput, logText, VERSION } from "#shared";
19
19
  import { AuditServiceLayer, withAudit } from "#shared/audit";
20
20
  import { ResolvedPaths, ResolvedPathsLayer } from "./config";
21
21
  import { SessionStorageNotFoundError } from "./errors";
@@ -171,7 +171,7 @@ const listCommand = Command.make(
171
171
  onSuccess: (okResult) => okResult,
172
172
  });
173
173
 
174
- yield* Console.log(formatOutput(output, format));
174
+ yield* logText(formatOutput(output, format));
175
175
  }),
176
176
  ).pipe(Command.withDescription("List OpenCode session summaries"));
177
177
 
@@ -252,7 +252,7 @@ const searchCommand = Command.make(
252
252
  onSuccess: (okResult) => okResult,
253
253
  });
254
254
 
255
- yield* Console.log(formatOutput(output, format));
255
+ yield* logText(formatOutput(output, format));
256
256
  }),
257
257
  ).pipe(Command.withDescription("Search message history"));
258
258
 
@@ -309,7 +309,7 @@ const readCommand = Command.make(
309
309
  },
310
310
  });
311
311
 
312
- yield* Console.log(formatOutput(output, format));
312
+ yield* logText(formatOutput(output, format));
313
313
  }),
314
314
  ).pipe(Command.withDescription("Read all messages from a session"));
315
315
 
@@ -1,6 +1,6 @@
1
1
  import { Flag } from "effect/unstable/cli";
2
2
  import { encode as encodeToon } from "@toon-format/toon";
3
- import { Console } from "effect";
3
+ import { Effect } from "effect";
4
4
 
5
5
  import type { BaseResult, OutputFormat } from "./types";
6
6
 
@@ -23,5 +23,20 @@ export function formatAny<T>(data: T, format: OutputFormat): string {
23
23
  return JSON.stringify(data, null, 2);
24
24
  }
25
25
 
26
- export const logFormatted = <T>(data: T, format: OutputFormat) =>
27
- Console.log(formatAny(data, format));
26
+ // `Console.log` drops bytes on a non-blocking pipe: a payload over the pipe buffer arrives
27
+ // truncated at a page boundary, reaching the caller as invalid JSON. Awaiting the write callback
28
+ // makes the stream retry the short write. Never replace this with `Console.log`.
29
+ // EPIPE is the expected end of `<tool> | head`, so only other write failures become defects
30
+ // instead of a silent exit 0 with partial output.
31
+ export const logText = (text: string) =>
32
+ Effect.callback<undefined>((resume) => {
33
+ process.stdout.write(`${text}\n`, (error) =>
34
+ resume(
35
+ error && (error as NodeJS.ErrnoException).code !== "EPIPE"
36
+ ? Effect.die(error)
37
+ : Effect.succeed(undefined),
38
+ ),
39
+ );
40
+ });
41
+
42
+ export const logFormatted = <T>(data: T, format: OutputFormat) => logText(formatAny(data, format));
@@ -7,7 +7,7 @@ export type {
7
7
  ToolResult,
8
8
  } from "./types";
9
9
 
10
- export { formatAny, formatOption, formatOutput, logFormatted } from "./format";
10
+ export { formatAny, formatOption, formatOutput, logFormatted, logText } from "./format";
11
11
 
12
12
  export { expandPath, runCommand } from "./bun";
13
13