ridgeline 0.7.21 → 0.8.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 (138) hide show
  1. package/dist/agents/core/builder.md +15 -0
  2. package/dist/cli.js +91 -42
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/build.js +0 -1
  5. package/dist/commands/build.js.map +1 -1
  6. package/dist/commands/check.d.ts +1 -5
  7. package/dist/commands/check.js +2 -60
  8. package/dist/commands/check.js.map +1 -1
  9. package/dist/commands/create.d.ts +0 -1
  10. package/dist/commands/create.js +0 -18
  11. package/dist/commands/create.js.map +1 -1
  12. package/dist/commands/design.d.ts +0 -1
  13. package/dist/commands/design.js +1 -2
  14. package/dist/commands/design.js.map +1 -1
  15. package/dist/commands/refine.d.ts +0 -1
  16. package/dist/commands/refine.js +0 -1
  17. package/dist/commands/refine.js.map +1 -1
  18. package/dist/commands/research.d.ts +0 -1
  19. package/dist/commands/research.js +0 -2
  20. package/dist/commands/research.js.map +1 -1
  21. package/dist/commands/retrospective.d.ts +0 -1
  22. package/dist/commands/retrospective.js +1 -2
  23. package/dist/commands/retrospective.js.map +1 -1
  24. package/dist/commands/shape.d.ts +30 -1
  25. package/dist/commands/shape.js +16 -5
  26. package/dist/commands/shape.js.map +1 -1
  27. package/dist/commands/spec.d.ts +0 -1
  28. package/dist/commands/spec.js +0 -1
  29. package/dist/commands/spec.js.map +1 -1
  30. package/dist/commands/ui.d.ts +7 -0
  31. package/dist/commands/ui.js +96 -0
  32. package/dist/commands/ui.js.map +1 -0
  33. package/dist/config.js +0 -1
  34. package/dist/config.js.map +1 -1
  35. package/dist/engine/claude/claude.exec.js +1 -1
  36. package/dist/engine/claude/claude.exec.js.map +1 -1
  37. package/dist/engine/detect/index.d.ts +15 -0
  38. package/dist/engine/detect/index.js +160 -0
  39. package/dist/engine/detect/index.js.map +1 -0
  40. package/dist/engine/discovery/agent.registry.d.ts +5 -6
  41. package/dist/engine/discovery/agent.registry.js +20 -54
  42. package/dist/engine/discovery/agent.registry.js.map +1 -1
  43. package/dist/engine/discovery/skill.check.d.ts +3 -3
  44. package/dist/engine/discovery/skill.check.js +4 -4
  45. package/dist/engine/discovery/skill.check.js.map +1 -1
  46. package/dist/engine/index.d.ts +0 -1
  47. package/dist/engine/index.js +1 -3
  48. package/dist/engine/index.js.map +1 -1
  49. package/dist/engine/pipeline/build.exec.js +19 -6
  50. package/dist/engine/pipeline/build.exec.js.map +1 -1
  51. package/dist/engine/pipeline/ensemble.exec.js +1 -2
  52. package/dist/engine/pipeline/ensemble.exec.js.map +1 -1
  53. package/dist/engine/pipeline/phase.sequence.js +88 -1
  54. package/dist/engine/pipeline/phase.sequence.js.map +1 -1
  55. package/dist/engine/pipeline/pipeline.shared.js +1 -2
  56. package/dist/engine/pipeline/pipeline.shared.js.map +1 -1
  57. package/dist/engine/pipeline/refine.exec.d.ts +0 -1
  58. package/dist/engine/pipeline/refine.exec.js +1 -2
  59. package/dist/engine/pipeline/refine.exec.js.map +1 -1
  60. package/dist/engine/pipeline/research.exec.d.ts +0 -1
  61. package/dist/engine/pipeline/research.exec.js +1 -2
  62. package/dist/engine/pipeline/research.exec.js.map +1 -1
  63. package/dist/engine/pipeline/review.exec.js +1 -2
  64. package/dist/engine/pipeline/review.exec.js.map +1 -1
  65. package/dist/engine/pipeline/sensors.collect.d.ts +6 -0
  66. package/dist/engine/pipeline/sensors.collect.js +34 -0
  67. package/dist/engine/pipeline/sensors.collect.js.map +1 -0
  68. package/dist/engine/pipeline/specify.exec.d.ts +0 -1
  69. package/dist/engine/pipeline/specify.exec.js +1 -2
  70. package/dist/engine/pipeline/specify.exec.js.map +1 -1
  71. package/dist/sensors/a11y.d.ts +36 -0
  72. package/dist/sensors/a11y.js +134 -0
  73. package/dist/sensors/a11y.js.map +1 -0
  74. package/dist/sensors/contrast.d.ts +3 -0
  75. package/dist/sensors/contrast.js +117 -0
  76. package/dist/sensors/contrast.js.map +1 -0
  77. package/dist/sensors/index.d.ts +27 -0
  78. package/dist/sensors/index.js +3 -0
  79. package/dist/sensors/index.js.map +1 -0
  80. package/dist/sensors/playwright.d.ts +69 -0
  81. package/dist/sensors/playwright.js +266 -0
  82. package/dist/sensors/playwright.js.map +1 -0
  83. package/dist/sensors/vision.d.ts +18 -0
  84. package/dist/sensors/vision.js +125 -0
  85. package/dist/sensors/vision.js.map +1 -0
  86. package/dist/stores/settings.d.ts +0 -1
  87. package/dist/stores/settings.js.map +1 -1
  88. package/dist/types.d.ts +0 -1
  89. package/dist/ui/color.d.ts +16 -0
  90. package/dist/ui/color.js +46 -0
  91. package/dist/ui/color.js.map +1 -0
  92. package/dist/ui/contrast.d.ts +2 -0
  93. package/dist/ui/contrast.js +94 -0
  94. package/dist/ui/contrast.js.map +1 -0
  95. package/dist/ui/dashboard/client.d.ts +1 -0
  96. package/dist/ui/dashboard/client.js +281 -0
  97. package/dist/ui/dashboard/client.js.map +1 -0
  98. package/dist/ui/dashboard/css.d.ts +1 -0
  99. package/dist/ui/dashboard/css.js +341 -0
  100. package/dist/ui/dashboard/css.js.map +1 -0
  101. package/dist/ui/dashboard/events.d.ts +15 -0
  102. package/dist/ui/dashboard/events.js +40 -0
  103. package/dist/ui/dashboard/events.js.map +1 -0
  104. package/dist/ui/dashboard/favicon.d.ts +2 -0
  105. package/dist/ui/dashboard/favicon.js +20 -0
  106. package/dist/ui/dashboard/favicon.js.map +1 -0
  107. package/dist/ui/dashboard/hex.d.ts +7 -0
  108. package/dist/ui/dashboard/hex.js +16 -0
  109. package/dist/ui/dashboard/hex.js.map +1 -0
  110. package/dist/ui/dashboard/html.d.ts +7 -0
  111. package/dist/ui/dashboard/html.js +69 -0
  112. package/dist/ui/dashboard/html.js.map +1 -0
  113. package/dist/ui/dashboard/server.d.ts +26 -0
  114. package/dist/ui/dashboard/server.js +257 -0
  115. package/dist/ui/dashboard/server.js.map +1 -0
  116. package/dist/ui/dashboard/snapshot.d.ts +29 -0
  117. package/dist/ui/dashboard/snapshot.js +71 -0
  118. package/dist/ui/dashboard/snapshot.js.map +1 -0
  119. package/dist/ui/dashboard/tokens.d.ts +19 -0
  120. package/dist/ui/dashboard/tokens.js +25 -0
  121. package/dist/ui/dashboard/tokens.js.map +1 -0
  122. package/dist/ui/dashboard/watcher.d.ts +13 -0
  123. package/dist/ui/dashboard/watcher.js +238 -0
  124. package/dist/ui/dashboard/watcher.js.map +1 -0
  125. package/dist/ui/output.js +3 -2
  126. package/dist/ui/output.js.map +1 -1
  127. package/dist/ui/preflight.d.ts +15 -0
  128. package/dist/ui/preflight.js +147 -0
  129. package/dist/ui/preflight.js.map +1 -0
  130. package/dist/ui/spinner.d.ts +0 -6
  131. package/dist/ui/spinner.js +25 -6
  132. package/dist/ui/spinner.js.map +1 -1
  133. package/dist/ui/transcript.js +2 -3
  134. package/dist/ui/transcript.js.map +1 -1
  135. package/dist/utils/flavour-removed.d.ts +12 -0
  136. package/dist/utils/flavour-removed.js +44 -0
  137. package/dist/utils/flavour-removed.js.map +1 -0
  138. package/package.json +16 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vision.js","sourceRoot":"","sources":["../../src/sensors/vision.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,6 @@ type RidgelineSettings = {
5
5
  network?: {
6
6
  allowlist?: string[];
7
7
  };
8
- flavour?: string;
9
8
  assetDir?: string;
10
9
  model?: string;
11
10
  };
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/stores/settings.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA6B;AAC7B,gDAAiC;AAEjC,mFAAmF;AACtE,QAAA,uBAAuB,GAAa;IAC/C,mBAAmB;IACnB,qBAAqB;IACrB,oCAAoC;CACrC,CAAA;AAED,kFAAkF;AAClF,MAAM,wBAAwB,GAAa;IACzC,WAAW;IACX,kBAAkB;IAClB,yBAAyB;IACzB,oBAAoB;IACpB,iBAAiB;IACjB,uBAAuB;IACvB,SAAS;IACT,YAAY;IACZ,qBAAqB;IACrB,YAAY;CACb,CAAA;AAEY,QAAA,yBAAyB,GAAa;IACjD,GAAG,+BAAuB;IAC1B,oBAAoB;IACpB,YAAY;IACZ,+BAA+B;IAC/B,2BAA2B;IAC3B,UAAU;IACV,wBAAwB;IACxB,WAAW;IACX,kBAAkB;IAClB,cAAc;IACd,kBAAkB;IAClB,YAAY;IACZ,YAAY;IACZ,eAAe;CAChB,CAAA;AAWD,yFAAyF;AAClF,MAAM,YAAY,GAAG,CAAC,QAA4B,EAAE,YAAoB,EAAU,EAAE,CACzF,QAAQ,IAAI,IAAA,oBAAY,EAAC,YAAY,CAAC,CAAC,KAAK,IAAI,MAAM,CAAA;AAD3C,QAAA,YAAY,gBAC+B;AAEjD,MAAM,YAAY,GAAG,CAAC,YAAoB,EAAqB,EAAE;IACtE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAA;IAC7D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAsB,CAAA;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAA;AARY,QAAA,YAAY,gBAQxB;AAEM,MAAM,uBAAuB,GAAG,CAAC,YAAoB,EAAY,EAAE;IACxE,MAAM,QAAQ,GAAG,IAAA,oBAAY,EAAC,YAAY,CAAC,CAAA;IAC3C,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACjF,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS;QAC5B,CAAC,CAAC,CAAC,GAAG,iCAAyB,CAAC,CAAA;IAClC,iFAAiF;IACjF,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAA;IACjC,+EAA+E;IAC/E,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,+BAAuB,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;IAC7D,OAAO,CAAC,GAAG,MAAM,CAAC,CAAA;AACpB,CAAC,CAAA;AAVY,QAAA,uBAAuB,2BAUnC;AAED,0FAA0F;AACnF,MAAM,wBAAwB,GAAG,CAAC,YAAoB,EAAY,EAAE;IACzE,MAAM,IAAI,GAAG,IAAA,+BAAuB,EAAC,YAAY,CAAC,CAAA;IAClD,uEAAuE;IACvE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAChC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,wBAAwB,CAAC,CAAC,CAAA;IAC9D,OAAO,CAAC,GAAG,MAAM,CAAC,CAAA;AACpB,CAAC,CAAA;AANY,QAAA,wBAAwB,4BAMpC"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/stores/settings.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA6B;AAC7B,gDAAiC;AAEjC,mFAAmF;AACtE,QAAA,uBAAuB,GAAa;IAC/C,mBAAmB;IACnB,qBAAqB;IACrB,oCAAoC;CACrC,CAAA;AAED,kFAAkF;AAClF,MAAM,wBAAwB,GAAa;IACzC,WAAW;IACX,kBAAkB;IAClB,yBAAyB;IACzB,oBAAoB;IACpB,iBAAiB;IACjB,uBAAuB;IACvB,SAAS;IACT,YAAY;IACZ,qBAAqB;IACrB,YAAY;CACb,CAAA;AAEY,QAAA,yBAAyB,GAAa;IACjD,GAAG,+BAAuB;IAC1B,oBAAoB;IACpB,YAAY;IACZ,+BAA+B;IAC/B,2BAA2B;IAC3B,UAAU;IACV,wBAAwB;IACxB,WAAW;IACX,kBAAkB;IAClB,cAAc;IACd,kBAAkB;IAClB,YAAY;IACZ,YAAY;IACZ,eAAe;CAChB,CAAA;AAUD,yFAAyF;AAClF,MAAM,YAAY,GAAG,CAAC,QAA4B,EAAE,YAAoB,EAAU,EAAE,CACzF,QAAQ,IAAI,IAAA,oBAAY,EAAC,YAAY,CAAC,CAAC,KAAK,IAAI,MAAM,CAAA;AAD3C,QAAA,YAAY,gBAC+B;AAEjD,MAAM,YAAY,GAAG,CAAC,YAAoB,EAAqB,EAAE;IACtE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAA;IAC7D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAsB,CAAA;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAA;AARY,QAAA,YAAY,gBAQxB;AAEM,MAAM,uBAAuB,GAAG,CAAC,YAAoB,EAAY,EAAE;IACxE,MAAM,QAAQ,GAAG,IAAA,oBAAY,EAAC,YAAY,CAAC,CAAA;IAC3C,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACjF,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS;QAC5B,CAAC,CAAC,CAAC,GAAG,iCAAyB,CAAC,CAAA;IAClC,iFAAiF;IACjF,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAA;IACjC,+EAA+E;IAC/E,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,+BAAuB,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;IAC7D,OAAO,CAAC,GAAG,MAAM,CAAC,CAAA;AACpB,CAAC,CAAA;AAVY,QAAA,uBAAuB,2BAUnC;AAED,0FAA0F;AACnF,MAAM,wBAAwB,GAAG,CAAC,YAAoB,EAAY,EAAE;IACzE,MAAM,IAAI,GAAG,IAAA,+BAAuB,EAAC,YAAY,CAAC,CAAA;IAClD,uEAAuE;IACvE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAChC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,wBAAwB,CAAC,CAAC,CAAA;IAC9D,OAAO,CAAC,GAAG,MAAM,CAAC,CAAA;AACpB,CAAC,CAAA;AANY,QAAA,wBAAwB,4BAMpC"}
package/dist/types.d.ts CHANGED
@@ -16,7 +16,6 @@ export type RidgelineConfig = {
16
16
  networkAllowlist: string[];
17
17
  sandboxProvider?: import("./engine/claude/sandbox").SandboxProvider | null;
18
18
  extraContext: string | null;
19
- flavour: string | null;
20
19
  isDeepEnsemble: boolean;
21
20
  };
22
21
  export type PhaseInfo = {
@@ -0,0 +1,16 @@
1
+ export type ColorStream = "stdout" | "stderr";
2
+ type WrapOpts = {
3
+ stream?: ColorStream;
4
+ force?: boolean;
5
+ };
6
+ export declare const isColorEnabled: (stream?: ColorStream) => boolean;
7
+ export declare const error: (text: string, opts?: WrapOpts) => string;
8
+ export declare const success: (text: string, opts?: WrapOpts) => string;
9
+ export declare const warning: (text: string, opts?: WrapOpts) => string;
10
+ export declare const info: (text: string, opts?: WrapOpts) => string;
11
+ export declare const hint: (text: string, opts?: WrapOpts) => string;
12
+ export declare const bold: (text: string, opts?: WrapOpts) => string;
13
+ export declare const dimInfo: (text: string, opts?: WrapOpts) => string;
14
+ export declare const stripAnsi: (text: string) => string;
15
+ export declare const clearLineSequence: () => string;
16
+ export {};
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clearLineSequence = exports.stripAnsi = exports.dimInfo = exports.bold = exports.hint = exports.info = exports.warning = exports.success = exports.error = exports.isColorEnabled = void 0;
4
+ const ESC = String.fromCharCode(27);
5
+ const SGR = (code) => `${ESC}[${code}m`;
6
+ const RESET = SGR("0");
7
+ const ANSI_PATTERN = new RegExp(`${ESC}\\[[0-9;]*m`, "g");
8
+ const CODE_ERROR = "31";
9
+ const CODE_SUCCESS = "32";
10
+ const CODE_WARNING = "33";
11
+ const CODE_INFO = "36";
12
+ const CODE_DIM = "2";
13
+ const CODE_BOLD = "1";
14
+ const streamOf = (s) => s === "stderr" ? process.stderr : process.stdout;
15
+ const isColorEnabled = (stream = "stdout") => {
16
+ const noColor = process.env.NO_COLOR;
17
+ if (noColor !== undefined && noColor !== "")
18
+ return false;
19
+ return Boolean(streamOf(stream).isTTY);
20
+ };
21
+ exports.isColorEnabled = isColorEnabled;
22
+ const wrap = (open, text, opts) => {
23
+ const enabled = opts?.force ?? (0, exports.isColorEnabled)(opts?.stream ?? "stdout");
24
+ if (!enabled)
25
+ return text;
26
+ return `${SGR(open)}${text}${RESET}`;
27
+ };
28
+ const error = (text, opts) => wrap(CODE_ERROR, text, opts);
29
+ exports.error = error;
30
+ const success = (text, opts) => wrap(CODE_SUCCESS, text, opts);
31
+ exports.success = success;
32
+ const warning = (text, opts) => wrap(CODE_WARNING, text, opts);
33
+ exports.warning = warning;
34
+ const info = (text, opts) => wrap(CODE_INFO, text, opts);
35
+ exports.info = info;
36
+ const hint = (text, opts) => wrap(CODE_DIM, text, opts);
37
+ exports.hint = hint;
38
+ const bold = (text, opts) => wrap(CODE_BOLD, text, opts);
39
+ exports.bold = bold;
40
+ const dimInfo = (text, opts) => wrap(`${CODE_DIM};${CODE_INFO}`, text, opts);
41
+ exports.dimInfo = dimInfo;
42
+ const stripAnsi = (text) => text.replace(ANSI_PATTERN, "");
43
+ exports.stripAnsi = stripAnsi;
44
+ const clearLineSequence = () => `\r${ESC}[K`;
45
+ exports.clearLineSequence = clearLineSequence;
46
+ //# sourceMappingURL=color.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/ui/color.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const brightenForContrast: (accentHex: string, bgHex: string, targetRatio?: number) => string;
2
+ export declare const compositeAccentFill: (accentHex: string, bgHex: string) => string;
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compositeAccentFill = exports.brightenForContrast = void 0;
4
+ const wcag_contrast_1 = require("wcag-contrast");
5
+ const hex_1 = require("./dashboard/hex");
6
+ const TEXT_FALLBACK = "#E5E7EB";
7
+ const MAX_L_PERCENT = 98;
8
+ const STEP_PERCENT = 2;
9
+ const DEFAULT_TARGET = 4.5;
10
+ const ACCENT_FILL_ALPHA = 0.1;
11
+ const toHex = (rgb) => {
12
+ const part = (n) => Math.max(0, Math.min(255, Math.round(n))).toString(16).padStart(2, "0");
13
+ return `#${part(rgb.r)}${part(rgb.g)}${part(rgb.b)}`.toUpperCase();
14
+ };
15
+ const compositeOver = (fg, bg, alpha) => ({
16
+ r: fg.r * alpha + bg.r * (1 - alpha),
17
+ g: fg.g * alpha + bg.g * (1 - alpha),
18
+ b: fg.b * alpha + bg.b * (1 - alpha),
19
+ });
20
+ const rgbToHsl = (rgb) => {
21
+ const r = rgb.r / 255;
22
+ const g = rgb.g / 255;
23
+ const b = rgb.b / 255;
24
+ const max = Math.max(r, g, b);
25
+ const min = Math.min(r, g, b);
26
+ const l = (max + min) / 2;
27
+ if (max === min)
28
+ return { h: 0, s: 0, l: l * 100 };
29
+ const d = max - min;
30
+ const s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
31
+ let h;
32
+ switch (max) {
33
+ case r:
34
+ h = ((g - b) / d) + (g < b ? 6 : 0);
35
+ break;
36
+ case g:
37
+ h = ((b - r) / d) + 2;
38
+ break;
39
+ default: h = ((r - g) / d) + 4;
40
+ }
41
+ return { h: h * 60, s: s * 100, l: l * 100 };
42
+ };
43
+ const hueToRgb = (p, q, t) => {
44
+ if (t < 0)
45
+ t += 1;
46
+ if (t > 1)
47
+ t -= 1;
48
+ if (t < 1 / 6)
49
+ return p + (q - p) * 6 * t;
50
+ if (t < 1 / 2)
51
+ return q;
52
+ if (t < 2 / 3)
53
+ return p + (q - p) * (2 / 3 - t) * 6;
54
+ return p;
55
+ };
56
+ const hslToRgb = (hsl) => {
57
+ const h = hsl.h / 360;
58
+ const s = hsl.s / 100;
59
+ const l = hsl.l / 100;
60
+ if (s === 0) {
61
+ const v = l * 255;
62
+ return { r: v, g: v, b: v };
63
+ }
64
+ const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
65
+ const p = 2 * l - q;
66
+ return {
67
+ r: hueToRgb(p, q, h + 1 / 3) * 255,
68
+ g: hueToRgb(p, q, h) * 255,
69
+ b: hueToRgb(p, q, h - 1 / 3) * 255,
70
+ };
71
+ };
72
+ const brightenForContrast = (accentHex, bgHex, targetRatio = DEFAULT_TARGET) => {
73
+ const accentRgb = (0, hex_1.parseHexRgb)(accentHex);
74
+ const bgRgb = (0, hex_1.parseHexRgb)(bgHex);
75
+ const effectiveFill = toHex(compositeOver(accentRgb, bgRgb, ACCENT_FILL_ALPHA));
76
+ if ((0, wcag_contrast_1.hex)(accentHex, effectiveFill) >= targetRatio) {
77
+ return accentHex.toUpperCase();
78
+ }
79
+ const hsl = rgbToHsl(accentRgb);
80
+ for (let l = hsl.l + STEP_PERCENT; l <= MAX_L_PERCENT; l += STEP_PERCENT) {
81
+ const candidate = toHex(hslToRgb({ h: hsl.h, s: hsl.s, l }));
82
+ if ((0, wcag_contrast_1.hex)(candidate, effectiveFill) >= targetRatio)
83
+ return candidate;
84
+ }
85
+ return TEXT_FALLBACK;
86
+ };
87
+ exports.brightenForContrast = brightenForContrast;
88
+ const compositeAccentFill = (accentHex, bgHex) => {
89
+ const accentRgb = (0, hex_1.parseHexRgb)(accentHex);
90
+ const bgRgb = (0, hex_1.parseHexRgb)(bgHex);
91
+ return toHex(compositeOver(accentRgb, bgRgb, ACCENT_FILL_ALPHA));
92
+ };
93
+ exports.compositeAccentFill = compositeAccentFill;
94
+ //# sourceMappingURL=contrast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contrast.js","sourceRoot":"","sources":["../../src/ui/contrast.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const renderClientScript: () => string;
@@ -0,0 +1,281 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderClientScript = void 0;
4
+ const CLIENT_SCRIPT = `(function () {
5
+ "use strict";
6
+ var bootstrap = JSON.parse(document.getElementById("bootstrap").textContent);
7
+ var buildName = bootstrap.buildName;
8
+ var state = bootstrap.snapshot;
9
+ var lastEventId = 0;
10
+ var es = null;
11
+ var pollTimer = null;
12
+ var lastFavicon = null;
13
+ var lastTitle = null;
14
+ var disconnected = false;
15
+ var knownPhases = new Set();
16
+
17
+ function fmtCost(n) {
18
+ if (typeof n !== "number") return "$0.00";
19
+ return "$" + n.toFixed(2);
20
+ }
21
+ function fmtDuration(ms) {
22
+ if (ms == null) return "";
23
+ var s = Math.floor(ms / 1000);
24
+ var h = Math.floor(s / 3600);
25
+ var m = Math.floor((s % 3600) / 60);
26
+ var r = s % 60;
27
+ if (h > 0) return h + "h" + m + "m";
28
+ if (m > 0) return m + "m" + r + "s";
29
+ return r + "s";
30
+ }
31
+
32
+ function elapsedFromStart(startedAt) {
33
+ if (!startedAt) return "";
34
+ var t = Date.parse(startedAt);
35
+ if (isNaN(t)) return "";
36
+ return fmtDuration(Date.now() - t);
37
+ }
38
+
39
+ function pillClass(status) {
40
+ switch (status) {
41
+ case "building":
42
+ case "reviewing":
43
+ return "pill pill-running";
44
+ case "complete":
45
+ return "pill pill-done";
46
+ case "failed":
47
+ return "pill pill-failed";
48
+ case "skipped":
49
+ return "pill pill-skipped";
50
+ default:
51
+ return "pill pill-pending";
52
+ }
53
+ }
54
+ function pillText(status) {
55
+ switch (status) {
56
+ case "building": return "running";
57
+ case "reviewing": return "running";
58
+ case "complete": return "done";
59
+ case "failed": return "failed";
60
+ case "skipped": return "skipped";
61
+ default: return "pending";
62
+ }
63
+ }
64
+
65
+ function setTitle() {
66
+ var status = state.status || "idle";
67
+ var name = state.buildName || buildName || "";
68
+ var title = "● ridgeline" + (name ? " · " + name + " · " + status : "");
69
+ if (title === lastTitle) return;
70
+ lastTitle = title;
71
+ document.title = title;
72
+ }
73
+
74
+ function faviconColor(status) {
75
+ if (status === "running") return "#06B6D4";
76
+ if (status === "done") return "#10B981";
77
+ if (status === "failed") return "#EF4444";
78
+ return "#9CA3AF";
79
+ }
80
+ function setFavicon() {
81
+ var color = faviconColor(state.status || "idle");
82
+ if (color === lastFavicon) return;
83
+ lastFavicon = color;
84
+ var svg = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><circle cx="8" cy="8" r="7" fill="' + color + '"/></svg>';
85
+ var href = "data:image/svg+xml;utf8," + encodeURIComponent(svg);
86
+ var link = document.getElementById("favicon");
87
+ if (link) link.setAttribute("href", href);
88
+ }
89
+
90
+ function renderHeader() {
91
+ var buildEl = document.getElementById("build-name");
92
+ if (buildEl) {
93
+ var name = state.buildName || buildName;
94
+ buildEl.textContent = name || "ridgeline";
95
+ }
96
+ var pill = document.getElementById("header-pill");
97
+ if (pill) {
98
+ pill.className = pillClass(state.status === "running" ? "building" : state.status === "done" ? "complete" : state.status === "failed" ? "failed" : "pending");
99
+ pill.textContent = (state.status || "pending").toUpperCase();
100
+ }
101
+ var elapsed = document.getElementById("header-elapsed");
102
+ if (elapsed) elapsed.textContent = elapsedFromStart(state.startedAt);
103
+ }
104
+
105
+ function renderCost() {
106
+ var total = document.getElementById("cost-total");
107
+ if (total) total.textContent = fmtCost(state.budget && state.budget.totalCostUsd);
108
+ var breakdown = document.getElementById("cost-breakdown");
109
+ if (!breakdown) return;
110
+ var html = "";
111
+ var roles = (state.budget && state.budget.perRole) || [];
112
+ for (var i = 0; i < roles.length; i++) {
113
+ var r = roles[i];
114
+ html += '<div><div class="dim">' + escape(r.role) + '</div><div class="cost-stage-value mono">' + escape(fmtCost(r.costUsd)) + '</div></div>';
115
+ }
116
+ breakdown.innerHTML = html;
117
+ }
118
+
119
+ function escape(s) {
120
+ if (s == null) return "";
121
+ return String(s).replace(/[&<>"']/g, function (c) {
122
+ return { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" }[c];
123
+ });
124
+ }
125
+
126
+ function renderPhases(changedIds) {
127
+ var list = document.getElementById("phase-list");
128
+ if (!list) return;
129
+ var empty = document.getElementById("empty-state");
130
+ var meter = document.getElementById("cost-meter");
131
+ if (!state.buildName) {
132
+ if (empty) empty.hidden = false;
133
+ if (meter) meter.hidden = true;
134
+ list.innerHTML = "";
135
+ return;
136
+ }
137
+ if (empty) empty.hidden = true;
138
+ if (meter) meter.hidden = false;
139
+
140
+ var html = "";
141
+ var lastErr = state.lastError;
142
+ for (var i = 0; i < state.phases.length; i++) {
143
+ var p = state.phases[i];
144
+ var failed = p.status === "failed";
145
+ var cls = "phase-row" + (failed ? " failed" : "");
146
+ var elapsed = p.duration != null ? fmtDuration(p.duration) : "";
147
+ html += '<div class="' + cls + '" data-phase-id="' + escape(p.id) + '">';
148
+ html += '<span class="phase-id mono">' + escape(p.id) + '</span>';
149
+ html += '<span class="phase-slug">' + escape(p.slug) + '</span>';
150
+ html += '<span class="' + pillClass(p.status) + '">' + escape(pillText(p.status)) + '</span>';
151
+ html += '<span class="phase-elapsed mono">' + escape(elapsed) + '</span>';
152
+ if (failed && lastErr && lastErr.phaseId === p.id) {
153
+ html += '<div class="phase-error mono">' + escape(lastErr.message) + '</div>';
154
+ }
155
+ html += '</div>';
156
+ }
157
+ list.innerHTML = html;
158
+
159
+ if (changedIds && changedIds.size > 0) {
160
+ changedIds.forEach(function (id) {
161
+ var row = list.querySelector('[data-phase-id="' + id + '"]');
162
+ if (!row) return;
163
+ row.classList.remove("row-flash");
164
+ void row.offsetWidth;
165
+ row.classList.add("row-flash");
166
+ });
167
+ }
168
+ }
169
+
170
+ function renderAll(changedIds) {
171
+ setTitle();
172
+ setFavicon();
173
+ renderHeader();
174
+ renderCost();
175
+ renderPhases(changedIds);
176
+ for (var i = 0; i < state.phases.length; i++) knownPhases.add(state.phases[i].id);
177
+ }
178
+
179
+ function diffPhases(prev, next) {
180
+ var prevMap = {};
181
+ for (var i = 0; i < prev.length; i++) prevMap[prev[i].id] = prev[i];
182
+ var changed = new Set();
183
+ for (var j = 0; j < next.length; j++) {
184
+ var p = next[j];
185
+ var old = prevMap[p.id];
186
+ if (!old || old.status !== p.status || old.duration !== p.duration || old.retries !== p.retries) {
187
+ changed.add(p.id);
188
+ }
189
+ }
190
+ return changed;
191
+ }
192
+
193
+ function onState(data) {
194
+ var prevPhases = state.phases;
195
+ state = Object.assign({}, state, data);
196
+ var changed = diffPhases(prevPhases, state.phases);
197
+ renderAll(changed);
198
+ }
199
+ function onBudget(data) {
200
+ state = Object.assign({}, state, { budget: data });
201
+ renderCost();
202
+ }
203
+ function onTrajectory(_entry) {
204
+ }
205
+
206
+ function hideBanner() {
207
+ var b = document.getElementById("disconnect-banner");
208
+ if (!b || b.classList.contains("hidden")) return;
209
+ b.classList.add("fade-out");
210
+ setTimeout(function () {
211
+ b.classList.add("hidden");
212
+ b.classList.remove("fade-out");
213
+ }, 400);
214
+ }
215
+ function showBanner() {
216
+ var b = document.getElementById("disconnect-banner");
217
+ if (!b) return;
218
+ b.classList.remove("hidden");
219
+ b.classList.remove("fade-out");
220
+ }
221
+
222
+ function startPolling() {
223
+ if (pollTimer) return;
224
+ pollTimer = setInterval(function () {
225
+ fetch("/state").then(function (r) {
226
+ return r.ok ? r.json() : null;
227
+ }).then(function (snap) {
228
+ if (snap) onState(snap);
229
+ }).catch(function () {});
230
+ }, 2000);
231
+ }
232
+ function stopPolling() {
233
+ if (!pollTimer) return;
234
+ clearInterval(pollTimer);
235
+ pollTimer = null;
236
+ }
237
+
238
+ function openStream() {
239
+ try {
240
+ es = new EventSource("/events");
241
+ } catch (_e) {
242
+ startPolling();
243
+ return;
244
+ }
245
+ es.addEventListener("open", function () {
246
+ if (disconnected) {
247
+ disconnected = false;
248
+ hideBanner();
249
+ }
250
+ stopPolling();
251
+ });
252
+ es.addEventListener("state", function (ev) {
253
+ lastEventId = Number(ev.lastEventId) || lastEventId;
254
+ try { onState(JSON.parse(ev.data)); } catch (_e) {}
255
+ });
256
+ es.addEventListener("budget", function (ev) {
257
+ lastEventId = Number(ev.lastEventId) || lastEventId;
258
+ try { onBudget(JSON.parse(ev.data)); } catch (_e) {}
259
+ });
260
+ es.addEventListener("trajectory", function (ev) {
261
+ lastEventId = Number(ev.lastEventId) || lastEventId;
262
+ try { onTrajectory(JSON.parse(ev.data)); } catch (_e) {}
263
+ });
264
+ es.addEventListener("error", function () {
265
+ disconnected = true;
266
+ showBanner();
267
+ startPolling();
268
+ });
269
+ }
270
+
271
+ renderAll();
272
+ openStream();
273
+ setInterval(function () {
274
+ var el = document.getElementById("header-elapsed");
275
+ if (el) el.textContent = elapsedFromStart(state.startedAt);
276
+ }, 1000);
277
+ })();
278
+ `;
279
+ const renderClientScript = () => CLIENT_SCRIPT;
280
+ exports.renderClientScript = renderClientScript;
281
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/ui/dashboard/client.ts"],"names":[],"mappings":";;;AAAA,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkRrB,CAAA;AAEM,MAAM,kBAAkB,GAAG,GAAW,EAAE,CAAC,aAAa,CAAA;AAAhD,QAAA,kBAAkB,sBAA8B"}
@@ -0,0 +1 @@
1
+ export declare const renderCss: () => string;