poly-weaver 0.9.4 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/dist/agents/reviewers/prompts.d.ts.map +1 -1
  2. package/dist/agents/reviewers/prompts.js +7 -2
  3. package/dist/agents/reviewers/prompts.js.map +1 -1
  4. package/dist/auto-update/budget.d.ts +17 -0
  5. package/dist/auto-update/budget.d.ts.map +1 -0
  6. package/dist/auto-update/budget.js +78 -0
  7. package/dist/auto-update/budget.js.map +1 -0
  8. package/dist/auto-update/check-agent-updates.d.ts +5 -0
  9. package/dist/auto-update/check-agent-updates.d.ts.map +1 -1
  10. package/dist/auto-update/check-agent-updates.js +40 -15
  11. package/dist/auto-update/check-agent-updates.js.map +1 -1
  12. package/dist/auto-update/detect-agents.d.ts +10 -1
  13. package/dist/auto-update/detect-agents.d.ts.map +1 -1
  14. package/dist/auto-update/detect-agents.js +184 -94
  15. package/dist/auto-update/detect-agents.js.map +1 -1
  16. package/dist/auto-update/gate.d.ts.map +1 -1
  17. package/dist/auto-update/gate.js +21 -2
  18. package/dist/auto-update/gate.js.map +1 -1
  19. package/dist/auto-update/timeouts.d.ts +5 -1
  20. package/dist/auto-update/timeouts.d.ts.map +1 -1
  21. package/dist/auto-update/timeouts.js +5 -1
  22. package/dist/auto-update/timeouts.js.map +1 -1
  23. package/dist/auto-update/tui.d.ts.map +1 -1
  24. package/dist/auto-update/tui.js +4 -1
  25. package/dist/auto-update/tui.js.map +1 -1
  26. package/dist/auto-update/winget-retry.d.ts +6 -4
  27. package/dist/auto-update/winget-retry.d.ts.map +1 -1
  28. package/dist/auto-update/winget-retry.js +15 -8
  29. package/dist/auto-update/winget-retry.js.map +1 -1
  30. package/dist/cli.js +1 -1
  31. package/dist/cli.js.map +1 -1
  32. package/dist/flow/built-in/default-factory.d.ts.map +1 -1
  33. package/dist/flow/built-in/default-factory.js +32 -30
  34. package/dist/flow/built-in/default-factory.js.map +1 -1
  35. package/dist/flow/built-in/default.d.ts +1 -0
  36. package/dist/flow/built-in/default.d.ts.map +1 -1
  37. package/dist/flow/built-in/default.js +1 -0
  38. package/dist/flow/built-in/default.js.map +1 -1
  39. package/dist/flow/built-in/default.ts +2 -0
  40. package/dist/flow/custom/AUTHORING.md +8 -19
  41. package/dist/flow/params.d.ts +8 -0
  42. package/dist/flow/params.d.ts.map +1 -1
  43. package/dist/flow/params.js +32 -0
  44. package/dist/flow/params.js.map +1 -1
  45. package/dist/flow/types.d.ts +2 -0
  46. package/dist/flow/types.d.ts.map +1 -1
  47. package/dist/flow-editor/tui.d.ts.map +1 -1
  48. package/dist/flow-editor/tui.js +34 -3
  49. package/dist/flow-editor/tui.js.map +1 -1
  50. package/dist/orchestrator.d.ts.map +1 -1
  51. package/dist/orchestrator.js +9 -4
  52. package/dist/orchestrator.js.map +1 -1
  53. package/dist/preview-panel.d.ts.map +1 -1
  54. package/dist/preview-panel.js +14 -12
  55. package/dist/preview-panel.js.map +1 -1
  56. package/dist/startup-tui.d.ts.map +1 -1
  57. package/dist/startup-tui.js +16 -8
  58. package/dist/startup-tui.js.map +1 -1
  59. package/dist/terminal/key-to-bytes.js +2 -0
  60. package/dist/terminal/key-to-bytes.js.map +1 -1
  61. package/dist/terminal/win32-key-translator.d.ts.map +1 -1
  62. package/dist/terminal/win32-key-translator.js +7 -4
  63. package/dist/terminal/win32-key-translator.js.map +1 -1
  64. package/dist/terminal-input.d.ts +3 -0
  65. package/dist/terminal-input.d.ts.map +1 -1
  66. package/dist/terminal-input.js +22 -5
  67. package/dist/terminal-input.js.map +1 -1
  68. package/dist/text-editing/emacs-input.d.ts +5 -1
  69. package/dist/text-editing/emacs-input.d.ts.map +1 -1
  70. package/dist/text-editing/emacs-input.js +23 -5
  71. package/dist/text-editing/emacs-input.js.map +1 -1
  72. package/dist/text-editing/readline-ops.d.ts +1 -0
  73. package/dist/text-editing/readline-ops.d.ts.map +1 -1
  74. package/dist/text-editing/readline-ops.js +9 -0
  75. package/dist/text-editing/readline-ops.js.map +1 -1
  76. package/dist/text-editing/soft-wrap.d.ts +16 -0
  77. package/dist/text-editing/soft-wrap.d.ts.map +1 -0
  78. package/dist/text-editing/soft-wrap.js +134 -0
  79. package/dist/text-editing/soft-wrap.js.map +1 -0
  80. package/dist/update-check.js +2 -2
  81. package/dist/update-check.js.map +1 -1
  82. package/dist/user/curate-handler.d.ts +16 -11
  83. package/dist/user/curate-handler.d.ts.map +1 -1
  84. package/dist/user/curate-handler.js +33 -22
  85. package/dist/user/curate-handler.js.map +1 -1
  86. package/dist/user/curate-prompt.d.ts +3 -0
  87. package/dist/user/curate-prompt.d.ts.map +1 -1
  88. package/dist/user/curate-prompt.js +4 -1
  89. package/dist/user/curate-prompt.js.map +1 -1
  90. package/dist/user/host-curate-prompt.d.ts +5 -6
  91. package/dist/user/host-curate-prompt.d.ts.map +1 -1
  92. package/dist/user/host-curate-prompt.js +265 -104
  93. package/dist/user/host-curate-prompt.js.map +1 -1
  94. package/dist/user/host-prompt.js +47 -36
  95. package/dist/user/host-prompt.js.map +1 -1
  96. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/agents/reviewers/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEzE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAI7D;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,oBAAoB,CAAC,WAAW,CAAC,GAC3C,MAAM,CAeR;AAuDD,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,EACzB,kBAAkB,CAAC,EAAE,MAAM,EAC3B,gBAAgB,CAAC,EAAE,MAAM,EACzB,YAAY,GAAE,MAAM,GAAG,MAAe,GACrC,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED,wBAAsB,yBAAyB,CAC7C,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,EACzB,iBAAiB,CAAC,EAAE,MAAM,EAC1B,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED,wBAAsB,yCAAyC,CAC7D,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,EACvB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,MAAM,CAAC,CAejB;AAED,wBAAsB,iCAAiC,CACrD,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED,wBAAsB,uCAAuC,CAC3D,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,MAAM,CAAC,CAMjB"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/agents/reviewers/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEzE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAI7D;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,oBAAoB,CAAC,WAAW,CAAC,GAC3C,MAAM,CAiBR;AAyDD,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,EACzB,kBAAkB,CAAC,EAAE,MAAM,EAC3B,gBAAgB,CAAC,EAAE,MAAM,EACzB,YAAY,GAAE,MAAM,GAAG,MAAe,GACrC,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED,wBAAsB,yBAAyB,CAC7C,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,EACzB,iBAAiB,CAAC,EAAE,MAAM,EAC1B,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED,wBAAsB,yCAAyC,CAC7D,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,EACvB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,MAAM,CAAC,CAejB;AAED,wBAAsB,iCAAiC,CACrD,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED,wBAAsB,uCAAuC,CAC3D,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,MAAM,CAAC,CAMjB"}
@@ -7,7 +7,7 @@ export function truncateWords(text, n) {
7
7
  export function formatUserDecisionsInline(decisions) {
8
8
  return decisions
9
9
  .map((d, i) => {
10
- const head = truncateWords(d.issue.description, 10);
10
+ const head = truncateWords(d.decision === "add" ? d.comment : d.issue.description, 10);
11
11
  let suffix;
12
12
  if (d.decision === "keep") {
13
13
  suffix = "accepted";
@@ -15,6 +15,9 @@ export function formatUserDecisionsInline(decisions) {
15
15
  else if (d.decision === "drop") {
16
16
  suffix = "dropped";
17
17
  }
18
+ else if (d.decision === "add") {
19
+ suffix = `add user feedback (comment: ${d.comment})`;
20
+ }
18
21
  else {
19
22
  suffix = `needs revision (comment: ${d.comment ?? ""})`;
20
23
  }
@@ -28,13 +31,15 @@ function userDecisionsSidecarSection(planFile, userDecisionsFile) {
28
31
  `Read the user's per-issue decisions: ${userDecisionsFile}`,
29
32
  "",
30
33
  // Issue snapshot enables content-match fallback when prior-verdict indices drift.
31
- "Each entry has `index`, an `issue` snapshot, and `decision` ∈ keep/drop/revise (with `comment` on revise).",
34
+ "Reviewer-issue entries have `index`, an `issue` snapshot, and `decision` ∈ keep/drop/revise (with `comment` on revise).",
35
+ "User-added entries have `decision: add` and `comment`.",
32
36
  "Match by `index`, falling back to issue content (catch rephrasings).",
33
37
  "",
34
38
  "Refine the verdict in place:",
35
39
  "- `revise` → rewrite per the user's comment",
36
40
  "- `keep` → leave unchanged",
37
41
  "- `drop` → remove; don't re-raise rephrasings",
42
+ "- `add` → add the user's comment as a new verdict issue unless the revised plan fully addresses it",
38
43
  "- Don't add new issues unless essential",
39
44
  ];
40
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/agents/reviewers/prompts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/agents/reviewers/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface Budget {
2
+ remainingMs(): number;
3
+ expired(): boolean;
4
+ guard<T>(work: Promise<T>, fallback: () => T): Promise<T>;
5
+ dispose(): void;
6
+ }
7
+ export interface BudgetOptions {
8
+ now?: () => number;
9
+ setTimeoutFn?: (fn: () => void, ms: number) => unknown;
10
+ clearTimeoutFn?: (handle: unknown) => void;
11
+ }
12
+ export declare function createBudget(totalMs: number, options?: BudgetOptions): Budget;
13
+ /** Soonest remaining across budgets, clamped >= 0; Infinity if none are given. */
14
+ export declare function remainingMs(...budgets: Budget[]): number;
15
+ /** Safe child-process timeout. Node treats timeout: 0 as disabled. */
16
+ export declare function execTimeoutMs(...budgets: Budget[]): number;
17
+ //# sourceMappingURL=budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../../src/auto-update/budget.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,WAAW,IAAI,MAAM,CAAC;IACtB,OAAO,IAAI,OAAO,CAAC;IACnB,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1D,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACvD,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;AAOD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAwEjF;AAED,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAGxD;AAED,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAE1D"}
@@ -0,0 +1,78 @@
1
+ export function createBudget(totalMs, options = {}) {
2
+ const now = options.now ?? Date.now;
3
+ const setTimeoutFn = options.setTimeoutFn ?? ((fn, ms) => setTimeout(fn, ms));
4
+ const clearTimeoutFn = options.clearTimeoutFn ?? ((handle) => clearTimeout(handle));
5
+ const durationMs = Math.max(0, totalMs);
6
+ const deadline = now() + durationMs;
7
+ const pending = new Set();
8
+ let fired = false;
9
+ let disposed = false;
10
+ let timer;
11
+ const fire = () => {
12
+ if (fired || disposed)
13
+ return;
14
+ fired = true;
15
+ const entries = Array.from(pending);
16
+ pending.clear();
17
+ for (const entry of entries) {
18
+ const fallback = entry.fallback;
19
+ entry.fallback = undefined;
20
+ if (fallback)
21
+ entry.resolve(fallback());
22
+ }
23
+ };
24
+ if (Number.isFinite(durationMs)) {
25
+ timer = setTimeoutFn(fire, durationMs);
26
+ const maybeTimer = timer;
27
+ if (typeof maybeTimer?.unref === "function")
28
+ maybeTimer.unref();
29
+ }
30
+ return {
31
+ remainingMs() {
32
+ if (fired)
33
+ return 0;
34
+ return Math.max(0, deadline - now());
35
+ },
36
+ expired() {
37
+ return this.remainingMs() === 0;
38
+ },
39
+ guard(work, fallback) {
40
+ if (fired || this.expired())
41
+ return Promise.resolve(fallback());
42
+ let entry;
43
+ const deadlinePromise = new Promise((resolve) => {
44
+ entry = { fallback, resolve: (value) => resolve(value) };
45
+ pending.add(entry);
46
+ });
47
+ const trackedWork = work.then((value) => {
48
+ pending.delete(entry);
49
+ entry.fallback = undefined;
50
+ return value;
51
+ }, (err) => {
52
+ pending.delete(entry);
53
+ entry.fallback = undefined;
54
+ throw err;
55
+ });
56
+ return Promise.race([trackedWork, deadlinePromise]);
57
+ },
58
+ dispose() {
59
+ if (disposed)
60
+ return;
61
+ disposed = true;
62
+ if (timer !== undefined)
63
+ clearTimeoutFn(timer);
64
+ pending.clear();
65
+ },
66
+ };
67
+ }
68
+ /** Soonest remaining across budgets, clamped >= 0; Infinity if none are given. */
69
+ export function remainingMs(...budgets) {
70
+ if (budgets.length === 0)
71
+ return Infinity;
72
+ return Math.max(0, Math.min(...budgets.map((budget) => budget.remainingMs())));
73
+ }
74
+ /** Safe child-process timeout. Node treats timeout: 0 as disabled. */
75
+ export function execTimeoutMs(...budgets) {
76
+ return Math.max(1, remainingMs(...budgets));
77
+ }
78
+ //# sourceMappingURL=budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.js","sourceRoot":"","sources":["../../src/auto-update/budget.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { UpdateInfo } from "../update-check.js";
2
+ import { type BudgetOptions } from "./budget.js";
2
3
  import { type AgentName, type DetectAgentsResult, type ExecAsync, type InstallMethod } from "./detect-agents.js";
3
4
  export interface AgentUpdateInfo {
4
5
  kind: "agent";
@@ -7,6 +8,7 @@ export interface AgentUpdateInfo {
7
8
  current: string;
8
9
  latest: string;
9
10
  installMethod: InstallMethod;
11
+ unsupported?: boolean;
10
12
  }
11
13
  export interface PolyWeaverUpdateInfo {
12
14
  kind: "poly-weaver";
@@ -22,6 +24,9 @@ export interface CheckAllUpdatesDeps {
22
24
  stderr?: Pick<NodeJS.WriteStream, "write" | "isTTY">;
23
25
  wingetRetrySleep?: (ms: number) => Promise<void>;
24
26
  wingetRetryRandom?: () => number;
27
+ now?: () => number;
28
+ setTimeoutFn?: BudgetOptions["setTimeoutFn"];
29
+ clearTimeoutFn?: BudgetOptions["clearTimeoutFn"];
25
30
  }
26
31
  export declare function checkAllUpdates(detected: DetectAgentsResult, isPolyWeaverGlobal: boolean, deps?: CheckAllUpdatesDeps): Promise<OutdatedTarget[]>;
27
32
  export declare function parseWingetShowVersion(stdout: string): string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"check-agent-updates.d.ts","sourceRoot":"","sources":["../../src/auto-update/check-agent-updates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAKrD,OAAO,EAML,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,KAAK,CAAC;CACtB;AAED,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,eAAe,CAAC;AAEpE,MAAM,WAAW,mBAAmB;IAClC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAClD,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC;IACrD,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,iBAAiB,CAAC,EAAE,MAAM,MAAM,CAAC;CAClC;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,kBAAkB,EAC5B,kBAAkB,EAAE,OAAO,EAC3B,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,cAAc,EAAE,CAAC,CA4C3B;AA2ED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIzE"}
1
+ {"version":3,"file":"check-agent-updates.d.ts","sourceRoot":"","sources":["../../src/auto-update/check-agent-updates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAML,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,KAAK,CAAC;CACtB;AAED,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,eAAe,CAAC;AAEpE,MAAM,WAAW,mBAAmB;IAClC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAClD,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC;IACrD,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,iBAAiB,CAAC,EAAE,MAAM,MAAM,CAAC;IACjC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC7C,cAAc,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;CAClD;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,kBAAkB,EAC5B,kBAAkB,EAAE,OAAO,EAC3B,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,cAAc,EAAE,CAAC,CA6D3B;AAuFD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIzE"}
@@ -1,24 +1,33 @@
1
1
  import { checkForUpdate as checkForPolyWeaverUpdate } from "../update-check.js";
2
2
  import { compareVersions, parseVersion } from "../providers/version.js";
3
- import { UPDATE_CHECK_TIMEOUT_MS } from "./timeouts.js";
4
- import { isKilledByParent, wingetExecWithRetry } from "./winget-retry.js";
3
+ import { createBudget, execTimeoutMs, } from "./budget.js";
4
+ import { UPDATE_CHECK_STAGE_BUDGET_MS, WINGET_MAX_ATTEMPTS } from "./timeouts.js";
5
+ import { wingetExecWithRetry } from "./winget-retry.js";
5
6
  import { AGENT_ORDER, AGENT_PACKAGE_NPM, AGENT_PACKAGE_WINGET, AGENT_PRODUCT_NAME, } from "./detect-agents.js";
6
7
  export async function checkAllUpdates(detected, isPolyWeaverGlobal, deps = {}) {
7
8
  const checkForUpdate = deps.checkForUpdate ?? checkForPolyWeaverUpdate;
8
9
  const stderr = deps.stderr ?? process.stderr;
9
- const hasAgent = detected.agents.length > 0;
10
+ const hasAgent = detected.agents.length > 0 || detected.unsupported.length > 0;
10
11
  const showProgress = stderr.isTTY === true && (isPolyWeaverGlobal || hasAgent);
11
12
  if (showProgress) {
12
13
  // The trailing glyph is U+2026, not three periods.
13
14
  stderr.write("Checking for updates…");
14
15
  }
16
+ const stage = createBudget(UPDATE_CHECK_STAGE_BUDGET_MS, budgetOptions(deps));
15
17
  try {
16
18
  const byName = new Map(detected.agents.map((agent) => [agent.name, agent]));
19
+ const byNameUnsupported = new Map(detected.unsupported.map((agent) => [agent.name, agent]));
17
20
  const updatePromises = [
18
- isPolyWeaverGlobal ? checkForUpdate() : Promise.resolve(null),
21
+ stage.guard(isPolyWeaverGlobal ? checkForUpdate() : Promise.resolve(null), () => null),
19
22
  ...AGENT_ORDER.map((name) => {
20
23
  const agent = byName.get(name);
21
- return agent ? checkAgentUpdate(agent, deps) : Promise.resolve(null);
24
+ return stage.guard(agent ? checkAgentUpdate(agent, deps, stage) : Promise.resolve(null), () => null);
25
+ }),
26
+ ...AGENT_ORDER.map((name) => {
27
+ const agent = byNameUnsupported.get(name);
28
+ return stage.guard(agent
29
+ ? checkAgentUpdate(agent, deps, stage, { unsupported: true })
30
+ : Promise.resolve(null), () => null);
22
31
  }),
23
32
  ];
24
33
  const [pwInfo, ...agentUpdates] = await Promise.all(updatePromises);
@@ -38,18 +47,19 @@ export async function checkAllUpdates(detected, isPolyWeaverGlobal, deps = {}) {
38
47
  return outdated;
39
48
  }
40
49
  finally {
50
+ stage.dispose();
41
51
  if (showProgress)
42
52
  stderr.write("\r\x1b[2K");
43
53
  }
44
54
  }
45
- async function checkAgentUpdate(agent, deps) {
55
+ async function checkAgentUpdate(agent, deps, stage, opts = {}) {
46
56
  const installMethod = pickManager(agent);
47
57
  if (installMethod === null)
48
58
  return null;
49
59
  const latest = installMethod === "npm"
50
- ? await queryNpmLatest(agent.name, deps)
51
- : await queryWingetLatest(agent.name, deps);
52
- return buildAgentUpdate(agent, latest, installMethod);
60
+ ? await queryNpmLatest(agent.name, deps, stage)
61
+ : await queryWingetLatest(agent.name, deps, stage);
62
+ return buildAgentUpdate(agent, latest, installMethod, opts.unsupported === true);
53
63
  }
54
64
  function pickManager(agent) {
55
65
  if (agent.activeManager === "npm")
@@ -62,12 +72,12 @@ function pickManager(agent) {
62
72
  return "winget";
63
73
  return null;
64
74
  }
65
- function buildAgentUpdate(agent, latest, installMethod) {
75
+ function buildAgentUpdate(agent, latest, installMethod, unsupported) {
66
76
  if (!latest)
67
77
  return null;
68
78
  if (compareVersions(agent.version, latest) >= 0)
69
79
  return null;
70
- return {
80
+ const update = {
71
81
  kind: "agent",
72
82
  name: agent.name,
73
83
  productName: AGENT_PRODUCT_NAME[agent.name],
@@ -75,12 +85,15 @@ function buildAgentUpdate(agent, latest, installMethod) {
75
85
  latest,
76
86
  installMethod,
77
87
  };
88
+ if (unsupported)
89
+ update.unsupported = true;
90
+ return update;
78
91
  }
79
- async function queryNpmLatest(name, deps) {
92
+ async function queryNpmLatest(name, deps, stage) {
80
93
  const execAsync = deps.execAsync ?? defaultExecAsync;
81
94
  try {
82
95
  const result = await execAsync(`npm view ${AGENT_PACKAGE_NPM[name]} version`, {
83
- timeout: UPDATE_CHECK_TIMEOUT_MS,
96
+ timeout: execTimeoutMs(stage),
84
97
  });
85
98
  return parseVersion(result.stdout);
86
99
  }
@@ -88,11 +101,16 @@ async function queryNpmLatest(name, deps) {
88
101
  return undefined;
89
102
  }
90
103
  }
91
- async function queryWingetLatest(name, deps) {
104
+ async function queryWingetLatest(name, deps, stage) {
92
105
  const execAsync = deps.execAsync ?? defaultExecAsync;
93
106
  const id = AGENT_PACKAGE_WINGET[name];
94
107
  try {
95
- const result = await wingetExecWithRetry(`winget show --id ${id} --exact --accept-source-agreements --disable-interactivity`, { timeout: UPDATE_CHECK_TIMEOUT_MS }, (err) => !isKilledByParent(err) && parseWingetShowVersion(stdoutFromError(err)) === undefined, { execAsync, sleep: deps.wingetRetrySleep, random: deps.wingetRetryRandom });
108
+ const result = await wingetExecWithRetry(`winget show --id ${id} --exact --accept-source-agreements --disable-interactivity`, () => ({ timeout: execTimeoutMs(stage) }), (err) => parseWingetShowVersion(stdoutFromError(err)) === undefined, {
109
+ execAsync,
110
+ sleep: deps.wingetRetrySleep,
111
+ random: deps.wingetRetryRandom,
112
+ remainingBudgetMs: () => stage.remainingMs(),
113
+ }, WINGET_MAX_ATTEMPTS);
96
114
  return parseWingetShowVersion(result.stdout);
97
115
  }
98
116
  catch (err) {
@@ -105,6 +123,13 @@ export function parseWingetShowVersion(stdout) {
105
123
  return undefined;
106
124
  return parseVersion(match[1]);
107
125
  }
126
+ function budgetOptions(deps) {
127
+ return {
128
+ now: deps.now,
129
+ setTimeoutFn: deps.setTimeoutFn,
130
+ clearTimeoutFn: deps.clearTimeoutFn,
131
+ };
132
+ }
108
133
  async function defaultExecAsync(command, options) {
109
134
  const { exec } = await import("node:child_process");
110
135
  const { promisify } = await import("node:util");
@@ -1 +1 @@
1
- {"version":3,"file":"check-agent-updates.js","sourceRoot":"","sources":["../../src/auto-update/check-agent-updates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"check-agent-updates.js","sourceRoot":"","sources":["../../src/auto-update/check-agent-updates.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { type ExecFileOptions, type ExecOptions } from "node:child_process";
2
+ import { type BudgetOptions } from "./budget.js";
2
3
  export type AgentName = "claude" | "codex" | "copilot";
3
4
  export type InstallMethod = "npm" | "winget";
4
5
  export type ActiveManager = InstallMethod | "unknown";
@@ -13,6 +14,9 @@ export interface AgentDetection {
13
14
  managedBy: Set<InstallMethod>;
14
15
  activeManager: ActiveManager;
15
16
  }
17
+ export interface UnsupportedAgentDetection extends AgentDetection {
18
+ reason: string;
19
+ }
16
20
  export type NodePtyResult = {
17
21
  ok: true;
18
22
  } | {
@@ -22,6 +26,7 @@ export type NodePtyResult = {
22
26
  export interface DetectAgentsResult {
23
27
  nodePty: NodePtyResult;
24
28
  agents: AgentDetection[];
29
+ unsupported: UnsupportedAgentDetection[];
25
30
  }
26
31
  export interface PreflightNeeds {
27
32
  needClaude: boolean;
@@ -48,6 +53,9 @@ export interface DetectAgentsDeps {
48
53
  platform?: NodeJS.Platform;
49
54
  wingetRetrySleep?: (ms: number) => Promise<void>;
50
55
  wingetRetryRandom?: () => number;
56
+ now?: () => number;
57
+ setTimeoutFn?: BudgetOptions["setTimeoutFn"];
58
+ clearTimeoutFn?: BudgetOptions["clearTimeoutFn"];
51
59
  }
52
60
  export declare function detectAgents(deps?: DetectAgentsDeps): Promise<DetectAgentsResult>;
53
61
  export declare function computePreflightNeeds(opts: {
@@ -65,12 +73,13 @@ export declare function validateCopilotVersion(version: string | undefined): {
65
73
  ok: false;
66
74
  error: string;
67
75
  };
76
+ export declare function unsupportedVersionReason(name: AgentName, version: string): string | null;
68
77
  export declare function runPreflight(opts: {
69
78
  needClaude: boolean;
70
79
  needCodex: boolean;
71
80
  needCopilot: boolean;
72
81
  }, deps?: DetectAgentsDeps): Promise<PreflightResult>;
73
- export declare function detectCliVersion(command: string, args: string[], deps?: DetectAgentsDeps): Promise<string | undefined | false>;
82
+ export declare function detectCliVersion(command: string, args: string[], deps?: DetectAgentsDeps, timeoutMs?: number): Promise<string | undefined | false>;
74
83
  export declare function checkNodePty(deps?: DetectAgentsDeps): Promise<NodePtyResult>;
75
84
  export declare function parseNpmGlobalPackages(stdout: string): Set<string>;
76
85
  export declare function wingetOutputContainsId(stdout: string, id: string): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"detect-agents.d.ts","sourceRoot":"","sources":["../../src/auto-update/detect-agents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detect-agents.d.ts","sourceRoot":"","sources":["../../src/auto-update/detect-agents.ts"],"names":[],"mappings":"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"}