issue-flow 0.17.0 → 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 (110) hide show
  1. package/dist/{agent-TB6W7PT7.js → agent-HMZTXCRT.js} +5 -5
  2. package/dist/{analyze-6M3KEOX7.js → analyze-Q4ONIWRZ.js} +10 -10
  3. package/dist/{apply-ADB3ZK7W.js → apply-EEFPY2W4.js} +5 -5
  4. package/dist/{bench-FM7I7EIV.js → bench-WWWXLTFH.js} +9 -9
  5. package/dist/{chunk-KZ5EY5XX.js → chunk-34OCSKOB.js} +7 -7
  6. package/dist/{chunk-UWDCIFTP.js → chunk-45WZ6GMI.js} +27 -43
  7. package/dist/chunk-45WZ6GMI.js.map +1 -0
  8. package/dist/{chunk-QMIQR7EE.js → chunk-62GVVZQO.js} +3 -3
  9. package/dist/{chunk-YII4U7ZD.js → chunk-6K2LCFG6.js} +2 -2
  10. package/dist/{chunk-A4H7P7T7.js → chunk-7UMMFOL2.js} +3 -3
  11. package/dist/chunk-7UMMFOL2.js.map +1 -0
  12. package/dist/{chunk-HJBF4WD2.js → chunk-CWSQVHVV.js} +59 -25
  13. package/dist/chunk-CWSQVHVV.js.map +1 -0
  14. package/dist/{chunk-SGTTR4XW.js → chunk-E4I6MMHD.js} +4 -4
  15. package/dist/{chunk-6YQT3SSM.js → chunk-ECU7YO7S.js} +2 -2
  16. package/dist/{chunk-MI5TREN3.js → chunk-EG2MGDP5.js} +6 -6
  17. package/dist/{chunk-RCZJQUTC.js → chunk-HOAHMERN.js} +43 -10
  18. package/dist/chunk-HOAHMERN.js.map +1 -0
  19. package/dist/{chunk-HLAPOUEM.js → chunk-KMCS76ZW.js} +3 -3
  20. package/dist/{chunk-KZXQWC7U.js → chunk-KRAGAUKD.js} +8 -8
  21. package/dist/{chunk-E6KXCV3T.js → chunk-LGHND47K.js} +2 -2
  22. package/dist/{chunk-DV7HUC4Z.js → chunk-LI35PIIS.js} +2 -2
  23. package/dist/{chunk-Z5O2XBWA.js → chunk-LTH6XYZ3.js} +5 -5
  24. package/dist/{chunk-2SUFAE6X.js → chunk-NEWNXZ65.js} +21 -12
  25. package/dist/{chunk-2SUFAE6X.js.map → chunk-NEWNXZ65.js.map} +1 -1
  26. package/dist/{chunk-LPWPFIIB.js → chunk-OODXFCQV.js} +7 -7
  27. package/dist/{chunk-ISZ54SVE.js → chunk-PMLE7KAQ.js} +17 -9
  28. package/dist/chunk-PMLE7KAQ.js.map +1 -0
  29. package/dist/{chunk-HY5HLFDU.js → chunk-QF7VEL3M.js} +115 -14
  30. package/dist/chunk-QF7VEL3M.js.map +1 -0
  31. package/dist/{chunk-B3TSS7BT.js → chunk-QJ44VG5G.js} +2 -2
  32. package/dist/{chunk-VE3IYNDN.js → chunk-SA6HXL4Y.js} +2 -2
  33. package/dist/{chunk-UK4E2FUA.js → chunk-TZYINKCC.js} +75 -53
  34. package/dist/chunk-TZYINKCC.js.map +1 -0
  35. package/dist/{chunk-32JSYXEK.js → chunk-V7QOIQYC.js} +2 -2
  36. package/dist/{chunk-ANI2NTR4.js → chunk-XUEMATVY.js} +6 -6
  37. package/dist/{chunk-D6ZBGJ3L.js → chunk-ZVZMWNCG.js} +129 -35
  38. package/dist/chunk-ZVZMWNCG.js.map +1 -0
  39. package/dist/cli.js +35 -35
  40. package/dist/cli.js.map +1 -1
  41. package/dist/{config-KGZUPAUP.js → config-LEBZZCJP.js} +4 -4
  42. package/dist/{conventions-RYN7OXJN.js → conventions-XOT6YW5L.js} +6 -6
  43. package/dist/{execute-QL3ZQIAP.js → execute-LELOSR5T.js} +14 -14
  44. package/dist/{generate-CX6KNHZS.js → generate-JGW5JSKB.js} +10 -10
  45. package/dist/{init-PDVQDRS6.js → init-TO6MUXO4.js} +7 -5
  46. package/dist/{operations-CAKIT2BO.js → operations-O4FORFIH.js} +4 -4
  47. package/dist/{plan-PRORGS3L.js → plan-OXAT344Q.js} +12 -12
  48. package/dist/{policy-WX6O2JID.js → policy-U5NBFAO5.js} +5 -5
  49. package/dist/{pr-27RMQI5F.js → pr-UZHNKKZC.js} +12 -12
  50. package/dist/{pr-review-VNESMAMT.js → pr-review-Q4ACAWDM.js} +9 -9
  51. package/dist/{prd-ZNC4T5BS.js → prd-6CYEMLDY.js} +12 -12
  52. package/dist/{recorder-N7U66HCO.js → recorder-2BAKPBRA.js} +2 -2
  53. package/dist/{resume-VLWIE264.js → resume-URCU6CIJ.js} +26 -26
  54. package/dist/{review-7CREJDKB.js → review-LVZT2TMW.js} +13 -13
  55. package/dist/{routing-VCDYHSXA.js → routing-EK6RBZM4.js} +6 -6
  56. package/dist/run-2RXJCJKT.js +56 -0
  57. package/dist/{usage-U7QNGCPK.js → usage-KTMYXAPF.js} +3 -3
  58. package/dist/{web-HUNDHCJ4.js → web-B5UPHHR5.js} +8 -8
  59. package/package.json +1 -1
  60. package/web/AGENTS.md +115 -7
  61. package/web/public/app.css +393 -245
  62. package/web/public/app.js +108 -38
  63. package/web/public/index.html +106 -78
  64. package/dist/chunk-A4H7P7T7.js.map +0 -1
  65. package/dist/chunk-D6ZBGJ3L.js.map +0 -1
  66. package/dist/chunk-HJBF4WD2.js.map +0 -1
  67. package/dist/chunk-HY5HLFDU.js.map +0 -1
  68. package/dist/chunk-ISZ54SVE.js.map +0 -1
  69. package/dist/chunk-RCZJQUTC.js.map +0 -1
  70. package/dist/chunk-UK4E2FUA.js.map +0 -1
  71. package/dist/chunk-UWDCIFTP.js.map +0 -1
  72. package/dist/run-3MPORLF5.js +0 -56
  73. /package/dist/{agent-TB6W7PT7.js.map → agent-HMZTXCRT.js.map} +0 -0
  74. /package/dist/{analyze-6M3KEOX7.js.map → analyze-Q4ONIWRZ.js.map} +0 -0
  75. /package/dist/{apply-ADB3ZK7W.js.map → apply-EEFPY2W4.js.map} +0 -0
  76. /package/dist/{bench-FM7I7EIV.js.map → bench-WWWXLTFH.js.map} +0 -0
  77. /package/dist/{chunk-KZ5EY5XX.js.map → chunk-34OCSKOB.js.map} +0 -0
  78. /package/dist/{chunk-QMIQR7EE.js.map → chunk-62GVVZQO.js.map} +0 -0
  79. /package/dist/{chunk-YII4U7ZD.js.map → chunk-6K2LCFG6.js.map} +0 -0
  80. /package/dist/{chunk-SGTTR4XW.js.map → chunk-E4I6MMHD.js.map} +0 -0
  81. /package/dist/{chunk-6YQT3SSM.js.map → chunk-ECU7YO7S.js.map} +0 -0
  82. /package/dist/{chunk-MI5TREN3.js.map → chunk-EG2MGDP5.js.map} +0 -0
  83. /package/dist/{chunk-HLAPOUEM.js.map → chunk-KMCS76ZW.js.map} +0 -0
  84. /package/dist/{chunk-KZXQWC7U.js.map → chunk-KRAGAUKD.js.map} +0 -0
  85. /package/dist/{chunk-E6KXCV3T.js.map → chunk-LGHND47K.js.map} +0 -0
  86. /package/dist/{chunk-DV7HUC4Z.js.map → chunk-LI35PIIS.js.map} +0 -0
  87. /package/dist/{chunk-Z5O2XBWA.js.map → chunk-LTH6XYZ3.js.map} +0 -0
  88. /package/dist/{chunk-LPWPFIIB.js.map → chunk-OODXFCQV.js.map} +0 -0
  89. /package/dist/{chunk-B3TSS7BT.js.map → chunk-QJ44VG5G.js.map} +0 -0
  90. /package/dist/{chunk-VE3IYNDN.js.map → chunk-SA6HXL4Y.js.map} +0 -0
  91. /package/dist/{chunk-32JSYXEK.js.map → chunk-V7QOIQYC.js.map} +0 -0
  92. /package/dist/{chunk-ANI2NTR4.js.map → chunk-XUEMATVY.js.map} +0 -0
  93. /package/dist/{config-KGZUPAUP.js.map → config-LEBZZCJP.js.map} +0 -0
  94. /package/dist/{conventions-RYN7OXJN.js.map → conventions-XOT6YW5L.js.map} +0 -0
  95. /package/dist/{execute-QL3ZQIAP.js.map → execute-LELOSR5T.js.map} +0 -0
  96. /package/dist/{generate-CX6KNHZS.js.map → generate-JGW5JSKB.js.map} +0 -0
  97. /package/dist/{init-PDVQDRS6.js.map → init-TO6MUXO4.js.map} +0 -0
  98. /package/dist/{operations-CAKIT2BO.js.map → operations-O4FORFIH.js.map} +0 -0
  99. /package/dist/{plan-PRORGS3L.js.map → plan-OXAT344Q.js.map} +0 -0
  100. /package/dist/{policy-WX6O2JID.js.map → policy-U5NBFAO5.js.map} +0 -0
  101. /package/dist/{pr-27RMQI5F.js.map → pr-UZHNKKZC.js.map} +0 -0
  102. /package/dist/{pr-review-VNESMAMT.js.map → pr-review-Q4ACAWDM.js.map} +0 -0
  103. /package/dist/{prd-ZNC4T5BS.js.map → prd-6CYEMLDY.js.map} +0 -0
  104. /package/dist/{recorder-N7U66HCO.js.map → recorder-2BAKPBRA.js.map} +0 -0
  105. /package/dist/{resume-VLWIE264.js.map → resume-URCU6CIJ.js.map} +0 -0
  106. /package/dist/{review-7CREJDKB.js.map → review-LVZT2TMW.js.map} +0 -0
  107. /package/dist/{routing-VCDYHSXA.js.map → routing-EK6RBZM4.js.map} +0 -0
  108. /package/dist/{run-3MPORLF5.js.map → run-2RXJCJKT.js.map} +0 -0
  109. /package/dist/{usage-U7QNGCPK.js.map → usage-KTMYXAPF.js.map} +0 -0
  110. /package/dist/{web-HUNDHCJ4.js.map → web-B5UPHHR5.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  resolveIssuePaths
4
- } from "./chunk-DV7HUC4Z.js";
4
+ } from "./chunk-LI35PIIS.js";
5
5
  import {
6
6
  formatDuration,
7
7
  printWarning
@@ -16,7 +16,7 @@ import {
16
16
  } from "./chunk-YVPZUN6X.js";
17
17
  import {
18
18
  DEFAULT_TELEMETRY_CONFIG
19
- } from "./chunk-YII4U7ZD.js";
19
+ } from "./chunk-6K2LCFG6.js";
20
20
  import {
21
21
  parseCodexUsage,
22
22
  parseUsage
@@ -1631,7 +1631,7 @@ function dropUndefined(value) {
1631
1631
  return result;
1632
1632
  }
1633
1633
  async function resolveAgentFor(phase, options = {}) {
1634
- const { getAgentCliOverrides: getAgentCliOverrides2, loadAgentConfig: loadAgentConfig2 } = await import("./config-KGZUPAUP.js");
1634
+ const { getAgentCliOverrides: getAgentCliOverrides2, loadAgentConfig: loadAgentConfig2 } = await import("./config-LEBZZCJP.js");
1635
1635
  const config = options.config ?? await loadAgentConfig2();
1636
1636
  const cli = options.cli ?? getAgentCliOverrides2();
1637
1637
  const defaultBlock = {
@@ -1737,7 +1737,7 @@ async function describeRunAgents(phases = AGENT_PHASES) {
1737
1737
  defaultModel = settings.model;
1738
1738
  }
1739
1739
  }
1740
- const { loadAgentConfig: loadAgentConfig2 } = await import("./config-KGZUPAUP.js");
1740
+ const { loadAgentConfig: loadAgentConfig2 } = await import("./config-LEBZZCJP.js");
1741
1741
  const config = await loadAgentConfig2();
1742
1742
  defaultProvider = config.provider;
1743
1743
  defaultModel = config.model;
@@ -1769,17 +1769,54 @@ function hasExplicitAgentSelection(config, cli, phase) {
1769
1769
  }
1770
1770
 
1771
1771
  // src/agents/availability.ts
1772
+ var READINESS_SCHEMA_VERSION = "1";
1773
+ var DEFAULT_READINESS_TTL_MS = 5 * 6e4;
1774
+ var PROVIDER_HARNESS = {
1775
+ claude: "claude-code",
1776
+ codex: "codex-cli",
1777
+ cursor: "cursor-cli",
1778
+ antigravity: "antigravity-cli"
1779
+ };
1780
+ var ALL_PROVIDERS = ["claude", "codex", "cursor", "antigravity"];
1772
1781
  var probeCache = /* @__PURE__ */ new Map();
1782
+ var inventoryCache = null;
1783
+ function deriveState(installed2, authentication, cooldownUntil, nowMs) {
1784
+ if (!installed2) return "unavailable";
1785
+ if (cooldownUntil !== null && Date.parse(cooldownUntil) > nowMs) return "unavailable";
1786
+ if (authentication === "failed") return "unavailable";
1787
+ if (authentication === "unverified") return "conditional";
1788
+ return "ready";
1789
+ }
1790
+ function toAvailability(readiness) {
1791
+ return {
1792
+ id: readiness.provider,
1793
+ installed: readiness.installed,
1794
+ version: readiness.version,
1795
+ authenticated: readiness.installed && readiness.authentication !== "failed",
1796
+ authentication: readiness.authentication,
1797
+ state: readiness.state,
1798
+ detail: readiness.detail,
1799
+ observedAt: readiness.observedAt,
1800
+ expiresAt: readiness.expiresAt,
1801
+ source: readiness.source,
1802
+ cooldownUntil: readiness.cooldownUntil
1803
+ };
1804
+ }
1773
1805
  async function probeAgent(id) {
1774
1806
  const cached = probeCache.get(id);
1775
1807
  if (cached) return cached;
1776
- const pending = probeAgentUncached(id);
1808
+ const pending = probeAgentUncached(id).then(toAvailability);
1777
1809
  probeCache.set(id, pending);
1778
1810
  return pending;
1779
1811
  }
1780
- async function probeAgentUncached(id) {
1812
+ async function probeAgentUncached(id, options = {}) {
1781
1813
  ensureRunnersRegistered();
1782
1814
  const runner = runnerFor(id);
1815
+ const now = options.now?.() ?? /* @__PURE__ */ new Date();
1816
+ const ttlMs = options.ttlMs ?? DEFAULT_READINESS_TTL_MS;
1817
+ const observedAt = now.toISOString();
1818
+ const expiresAt = new Date(now.getTime() + ttlMs).toISOString();
1819
+ const cooldownUntil = options.cooldownUntil ?? null;
1783
1820
  let version = null;
1784
1821
  let installed2 = false;
1785
1822
  try {
@@ -1790,22 +1827,85 @@ async function probeAgentUncached(id) {
1790
1827
  } catch {
1791
1828
  installed2 = false;
1792
1829
  }
1793
- let authenticated = installed2;
1830
+ let authentication = installed2 ? "unverified" : "failed";
1794
1831
  let detail = installed2 ? version ?? "installed" : "not found";
1795
- if (installed2 && runner.authCommand && runner.capabilities.authProbe !== "none") {
1832
+ let source = "probe";
1833
+ if (!installed2) {
1834
+ authentication = "failed";
1835
+ detail = "not found";
1836
+ } else if (runner.authCommand && runner.capabilities.authProbe !== "none") {
1796
1837
  try {
1797
1838
  const { command, args } = runner.authCommand();
1798
1839
  const auth = await execa6(command, args, { reject: false, timeout: 1e4 });
1799
1840
  const text = `${auth.stdout?.toString() ?? ""}
1800
1841
  ${auth.stderr?.toString() ?? ""}`;
1801
- authenticated = runner.capabilities.authProbe === "text" ? !/not logged in|not authenticated|no models available/i.test(text) : auth.exitCode === 0;
1802
- detail = authenticated ? `${version} (authenticated)` : `${version} (not authenticated)`;
1842
+ const ok = runner.capabilities.authProbe === "text" ? !/not logged in|not authenticated|no models available/i.test(text) : auth.exitCode === 0;
1843
+ authentication = ok ? "confirmed" : "failed";
1844
+ detail = ok ? `${version} (authenticated)` : `${version} (not authenticated)`;
1803
1845
  } catch {
1804
- authenticated = false;
1846
+ authentication = "failed";
1805
1847
  detail = `${version} (not authenticated)`;
1806
1848
  }
1849
+ } else {
1850
+ authentication = "unverified";
1851
+ detail = `${version} (auth unverified)`;
1852
+ source = "probe";
1853
+ }
1854
+ const state = deriveState(installed2, authentication, cooldownUntil, now.getTime());
1855
+ if (state === "unavailable" && cooldownUntil !== null && Date.parse(cooldownUntil) > now.getTime()) {
1856
+ detail = `${detail}; cooldown until ${cooldownUntil}`;
1807
1857
  }
1808
- return { id, installed: installed2, version, authenticated, detail };
1858
+ return {
1859
+ provider: id,
1860
+ harness: PROVIDER_HARNESS[id],
1861
+ installed: installed2,
1862
+ authentication,
1863
+ state,
1864
+ models: [
1865
+ {
1866
+ id: null,
1867
+ access: installed2 ? "unverified" : "denied",
1868
+ confidence: "unknown",
1869
+ source: "static-catalog"
1870
+ }
1871
+ ],
1872
+ version,
1873
+ detail,
1874
+ observedAt,
1875
+ expiresAt,
1876
+ source,
1877
+ cooldownUntil
1878
+ };
1879
+ }
1880
+ async function probeReadinessInventory(options = {}) {
1881
+ const now = options.now?.() ?? /* @__PURE__ */ new Date();
1882
+ const ttlMs = options.ttlMs ?? DEFAULT_READINESS_TTL_MS;
1883
+ if (!options.force && inventoryCache !== null && inventoryCache.expiresAtMs > now.getTime()) {
1884
+ return inventoryCache.promise;
1885
+ }
1886
+ const promise = (async () => {
1887
+ const providers = await Promise.all(
1888
+ ALL_PROVIDERS.map(
1889
+ (id) => probeAgentUncached(id, {
1890
+ now: () => now,
1891
+ ttlMs,
1892
+ cooldownUntil: options.cooldowns?.[id] ?? null
1893
+ })
1894
+ )
1895
+ );
1896
+ const byId = Object.fromEntries(providers.map((entry) => [entry.provider, entry]));
1897
+ for (const entry of providers) {
1898
+ probeCache.set(entry.provider, Promise.resolve(toAvailability(entry)));
1899
+ }
1900
+ return {
1901
+ schemaVersion: READINESS_SCHEMA_VERSION,
1902
+ observedAt: now.toISOString(),
1903
+ expiresAt: new Date(now.getTime() + ttlMs).toISOString(),
1904
+ providers: byId
1905
+ };
1906
+ })();
1907
+ inventoryCache = { expiresAtMs: now.getTime() + ttlMs, promise };
1908
+ return promise;
1809
1909
  }
1810
1910
  function installHint(id) {
1811
1911
  if (id === "codex") {
@@ -2170,7 +2270,7 @@ async function resolvePaths(config, scriptDir) {
2170
2270
  lastBranchFile: join3(base, ".last-branch"),
2171
2271
  projectRoot
2172
2272
  };
2173
- const { bindTelemetry } = await import("./recorder-N7U66HCO.js");
2273
+ const { bindTelemetry } = await import("./recorder-2BAKPBRA.js");
2174
2274
  bindTelemetry({ tasksPath: standalone.prdFile });
2175
2275
  return standalone;
2176
2276
  }
@@ -2742,6 +2842,7 @@ export {
2742
2842
  runnerFor,
2743
2843
  ensureHarnessVersion,
2744
2844
  probeAgent,
2845
+ probeReadinessInventory,
2745
2846
  mergeConfigLayers,
2746
2847
  setAgentCliOverrides,
2747
2848
  getAgentCliOverrides,
@@ -2774,4 +2875,4 @@ export {
2774
2875
  describeRunAgents,
2775
2876
  hasExplicitAgentSelection
2776
2877
  };
2777
- //# sourceMappingURL=chunk-HY5HLFDU.js.map
2878
+ //# sourceMappingURL=chunk-QF7VEL3M.js.map