@probelabs/visor 0.1.157 → 0.1.158

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 (68) hide show
  1. package/dist/frontends/slack-frontend.d.ts.map +1 -1
  2. package/dist/index.js +29 -16
  3. package/dist/output/traces/{run-2026-03-04T20-18-38-877Z.ndjson → run-2026-03-05T09-35-31-694Z.ndjson} +84 -84
  4. package/dist/output/traces/{run-2026-03-04T20-19-23-273Z.ndjson → run-2026-03-05T09-36-16-833Z.ndjson} +1779 -1779
  5. package/dist/scheduler/scheduler.d.ts.map +1 -1
  6. package/dist/sdk/{check-provider-registry-GJ4EZAIO.mjs → check-provider-registry-2GTN7M37.mjs} +3 -3
  7. package/dist/sdk/{check-provider-registry-46N5DY3V.mjs → check-provider-registry-IRHRMYUJ.mjs} +6 -6
  8. package/dist/sdk/{check-provider-registry-3O2PAJPF.mjs → check-provider-registry-LVXLROAJ.mjs} +3 -3
  9. package/dist/sdk/{chunk-M3BYMES6.mjs → chunk-AVMMKGLQ.mjs} +1 -16
  10. package/dist/sdk/{chunk-M3BYMES6.mjs.map → chunk-AVMMKGLQ.mjs.map} +1 -1
  11. package/dist/sdk/{chunk-PLMM6W3K.mjs → chunk-FRTHLKIG.mjs} +20 -14
  12. package/dist/sdk/chunk-FRTHLKIG.mjs.map +1 -0
  13. package/dist/sdk/{chunk-BAHN2OFA.mjs → chunk-FRVHW725.mjs} +3 -3
  14. package/dist/sdk/{chunk-RR6AHRAI.mjs → chunk-IJGA5TFA.mjs} +2 -2
  15. package/dist/sdk/{chunk-ADYVRVDK.mjs → chunk-QRTO7XNW.mjs} +27 -21
  16. package/dist/sdk/chunk-QRTO7XNW.mjs.map +1 -0
  17. package/dist/sdk/{chunk-74V66BDH.mjs → chunk-TLXAIQLH.mjs} +2 -2
  18. package/dist/sdk/{chunk-74V66BDH.mjs.map → chunk-TLXAIQLH.mjs.map} +1 -1
  19. package/dist/sdk/{chunk-D7STLGAD.mjs → chunk-ZWPQV2VT.mjs} +20 -14
  20. package/dist/sdk/chunk-ZWPQV2VT.mjs.map +1 -0
  21. package/dist/sdk/{failure-condition-evaluator-BQXDXL44.mjs → failure-condition-evaluator-ORMMBR23.mjs} +3 -3
  22. package/dist/sdk/{github-frontend-DLMDMCE3.mjs → github-frontend-NNWL7IXV.mjs} +3 -3
  23. package/dist/sdk/{host-OO5PLU4L.mjs → host-MICUIU7J.mjs} +3 -3
  24. package/dist/sdk/{host-4ONWAJ6Q.mjs → host-YKTAWW33.mjs} +2 -2
  25. package/dist/sdk/{routing-IK63T3E4.mjs → routing-SVLHRQEW.mjs} +4 -4
  26. package/dist/sdk/{schedule-tool-SLR7ZHBZ.mjs → schedule-tool-526VUPMF.mjs} +3 -3
  27. package/dist/sdk/{schedule-tool-EZVQOF55.mjs → schedule-tool-6KIQPMWM.mjs} +3 -3
  28. package/dist/sdk/{schedule-tool-NEH23XPP.mjs → schedule-tool-JNL6TFP4.mjs} +6 -6
  29. package/dist/sdk/{schedule-tool-handler-TPNX4EAS.mjs → schedule-tool-handler-4SG6HYLF.mjs} +6 -6
  30. package/dist/sdk/{schedule-tool-handler-O7T66M3I.mjs → schedule-tool-handler-IYK54BWK.mjs} +3 -3
  31. package/dist/sdk/{schedule-tool-handler-XVHYK4KT.mjs → schedule-tool-handler-Z5VWUB76.mjs} +3 -3
  32. package/dist/sdk/sdk.js +13 -21
  33. package/dist/sdk/sdk.js.map +1 -1
  34. package/dist/sdk/sdk.mjs +5 -5
  35. package/dist/sdk/{slack-frontend-6KDUMDDI.mjs → slack-frontend-QO7LW5BH.mjs} +3 -4
  36. package/dist/sdk/slack-frontend-QO7LW5BH.mjs.map +1 -0
  37. package/dist/sdk/{trace-helpers-L5ZNK3CK.mjs → trace-helpers-TOEA67GA.mjs} +2 -2
  38. package/dist/sdk/{workflow-check-provider-4DC4KOHI.mjs → workflow-check-provider-5G6BGZEX.mjs} +3 -3
  39. package/dist/sdk/{workflow-check-provider-TWDKDSUK.mjs → workflow-check-provider-MVDV4U7F.mjs} +6 -6
  40. package/dist/sdk/{workflow-check-provider-NYBQAYVH.mjs → workflow-check-provider-V5QHQPTG.mjs} +3 -3
  41. package/dist/slack/socket-runner.d.ts.map +1 -1
  42. package/dist/traces/{run-2026-03-04T20-18-38-877Z.ndjson → run-2026-03-05T09-35-31-694Z.ndjson} +84 -84
  43. package/dist/traces/{run-2026-03-04T20-19-23-273Z.ndjson → run-2026-03-05T09-36-16-833Z.ndjson} +1779 -1779
  44. package/package.json +1 -1
  45. package/dist/sdk/chunk-ADYVRVDK.mjs.map +0 -1
  46. package/dist/sdk/chunk-D7STLGAD.mjs.map +0 -1
  47. package/dist/sdk/chunk-PLMM6W3K.mjs.map +0 -1
  48. package/dist/sdk/slack-frontend-6KDUMDDI.mjs.map +0 -1
  49. /package/dist/sdk/{check-provider-registry-3O2PAJPF.mjs.map → check-provider-registry-2GTN7M37.mjs.map} +0 -0
  50. /package/dist/sdk/{check-provider-registry-46N5DY3V.mjs.map → check-provider-registry-IRHRMYUJ.mjs.map} +0 -0
  51. /package/dist/sdk/{check-provider-registry-GJ4EZAIO.mjs.map → check-provider-registry-LVXLROAJ.mjs.map} +0 -0
  52. /package/dist/sdk/{chunk-BAHN2OFA.mjs.map → chunk-FRVHW725.mjs.map} +0 -0
  53. /package/dist/sdk/{chunk-RR6AHRAI.mjs.map → chunk-IJGA5TFA.mjs.map} +0 -0
  54. /package/dist/sdk/{failure-condition-evaluator-BQXDXL44.mjs.map → failure-condition-evaluator-ORMMBR23.mjs.map} +0 -0
  55. /package/dist/sdk/{github-frontend-DLMDMCE3.mjs.map → github-frontend-NNWL7IXV.mjs.map} +0 -0
  56. /package/dist/sdk/{host-4ONWAJ6Q.mjs.map → host-MICUIU7J.mjs.map} +0 -0
  57. /package/dist/sdk/{host-OO5PLU4L.mjs.map → host-YKTAWW33.mjs.map} +0 -0
  58. /package/dist/sdk/{routing-IK63T3E4.mjs.map → routing-SVLHRQEW.mjs.map} +0 -0
  59. /package/dist/sdk/{schedule-tool-EZVQOF55.mjs.map → schedule-tool-526VUPMF.mjs.map} +0 -0
  60. /package/dist/sdk/{schedule-tool-NEH23XPP.mjs.map → schedule-tool-6KIQPMWM.mjs.map} +0 -0
  61. /package/dist/sdk/{schedule-tool-SLR7ZHBZ.mjs.map → schedule-tool-JNL6TFP4.mjs.map} +0 -0
  62. /package/dist/sdk/{schedule-tool-handler-O7T66M3I.mjs.map → schedule-tool-handler-4SG6HYLF.mjs.map} +0 -0
  63. /package/dist/sdk/{schedule-tool-handler-TPNX4EAS.mjs.map → schedule-tool-handler-IYK54BWK.mjs.map} +0 -0
  64. /package/dist/sdk/{schedule-tool-handler-XVHYK4KT.mjs.map → schedule-tool-handler-Z5VWUB76.mjs.map} +0 -0
  65. /package/dist/sdk/{trace-helpers-L5ZNK3CK.mjs.map → trace-helpers-TOEA67GA.mjs.map} +0 -0
  66. /package/dist/sdk/{workflow-check-provider-4DC4KOHI.mjs.map → workflow-check-provider-5G6BGZEX.mjs.map} +0 -0
  67. /package/dist/sdk/{workflow-check-provider-NYBQAYVH.mjs.map → workflow-check-provider-MVDV4U7F.mjs.map} +0 -0
  68. /package/dist/sdk/{workflow-check-provider-TWDKDSUK.mjs.map → workflow-check-provider-V5QHQPTG.mjs.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/scheduler/scheduler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/scheduler/scheduler.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  CheckProviderRegistry,
3
3
  init_check_provider_registry
4
- } from "./chunk-D7STLGAD.mjs";
4
+ } from "./chunk-ZWPQV2VT.mjs";
5
5
  import "./chunk-KFKHU6CM.mjs";
6
- import "./chunk-M3BYMES6.mjs";
6
+ import "./chunk-AVMMKGLQ.mjs";
7
7
  import "./chunk-LG4AUKHB.mjs";
8
8
  import "./chunk-B7BVQM5K.mjs";
9
9
  import "./chunk-XXAEN5KU.mjs";
@@ -26,4 +26,4 @@ init_check_provider_registry();
26
26
  export {
27
27
  CheckProviderRegistry
28
28
  };
29
- //# sourceMappingURL=check-provider-registry-GJ4EZAIO.mjs.map
29
+ //# sourceMappingURL=check-provider-registry-2GTN7M37.mjs.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  CheckProviderRegistry,
3
3
  init_check_provider_registry
4
- } from "./chunk-ADYVRVDK.mjs";
4
+ } from "./chunk-QRTO7XNW.mjs";
5
5
  import "./chunk-KFKHU6CM.mjs";
6
- import "./chunk-M3BYMES6.mjs";
6
+ import "./chunk-AVMMKGLQ.mjs";
7
7
  import "./chunk-LG4AUKHB.mjs";
8
8
  import "./chunk-B7BVQM5K.mjs";
9
9
  import "./chunk-XXAEN5KU.mjs";
@@ -11,9 +11,9 @@ import "./chunk-GEW6LS32.mjs";
11
11
  import "./chunk-NZADFXHE.mjs";
12
12
  import "./chunk-AS6LIEO4.mjs";
13
13
  import "./chunk-NCWIZVOT.mjs";
14
- import "./chunk-BAHN2OFA.mjs";
15
- import "./chunk-RR6AHRAI.mjs";
16
- import "./chunk-74V66BDH.mjs";
14
+ import "./chunk-FRVHW725.mjs";
15
+ import "./chunk-IJGA5TFA.mjs";
16
+ import "./chunk-TLXAIQLH.mjs";
17
17
  import "./chunk-JL7JXCET.mjs";
18
18
  import "./chunk-ZUEQNCKB.mjs";
19
19
  import "./chunk-25IC7KXZ.mjs";
@@ -26,4 +26,4 @@ init_check_provider_registry();
26
26
  export {
27
27
  CheckProviderRegistry
28
28
  };
29
- //# sourceMappingURL=check-provider-registry-46N5DY3V.mjs.map
29
+ //# sourceMappingURL=check-provider-registry-IRHRMYUJ.mjs.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  CheckProviderRegistry,
3
3
  init_check_provider_registry
4
- } from "./chunk-PLMM6W3K.mjs";
4
+ } from "./chunk-FRTHLKIG.mjs";
5
5
  import "./chunk-KFKHU6CM.mjs";
6
- import "./chunk-M3BYMES6.mjs";
6
+ import "./chunk-AVMMKGLQ.mjs";
7
7
  import "./chunk-LG4AUKHB.mjs";
8
8
  import "./chunk-B7BVQM5K.mjs";
9
9
  import "./chunk-XXAEN5KU.mjs";
@@ -26,4 +26,4 @@ init_check_provider_registry();
26
26
  export {
27
27
  CheckProviderRegistry
28
28
  };
29
- //# sourceMappingURL=check-provider-registry-3O2PAJPF.mjs.map
29
+ //# sourceMappingURL=check-provider-registry-LVXLROAJ.mjs.map
@@ -7,20 +7,6 @@ import { spawn } from "child_process";
7
7
  import * as fs from "fs";
8
8
  import * as path from "path";
9
9
  import * as os from "os";
10
- function extractMermaidDiagrams(text) {
11
- const diagrams = [];
12
- const regex = /```mermaid\s*\n([\s\S]*?)```/g;
13
- let match;
14
- while ((match = regex.exec(text)) !== null) {
15
- diagrams.push({
16
- fullMatch: match[0],
17
- code: match[1].trim(),
18
- startIndex: match.index,
19
- endIndex: match.index + match[0].length
20
- });
21
- }
22
- return diagrams;
23
- }
24
10
  async function renderMermaidToPng(mermaidCode) {
25
11
  const tmpDir = os.tmpdir();
26
12
  const inputFile = path.join(
@@ -217,7 +203,6 @@ var init_markdown = __esm({
217
203
  });
218
204
 
219
205
  export {
220
- extractMermaidDiagrams,
221
206
  renderMermaidToPng,
222
207
  replaceMermaidBlocks,
223
208
  extractFileSections,
@@ -225,4 +210,4 @@ export {
225
210
  formatSlackText,
226
211
  init_markdown
227
212
  };
228
- //# sourceMappingURL=chunk-M3BYMES6.mjs.map
213
+ //# sourceMappingURL=chunk-AVMMKGLQ.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/slack/markdown.ts"],"sourcesContent":["// Lightweight Markdown → Slack mrkdwn formatter.\n// The goal is to make common Markdown output from AI steps look natural in Slack\n// without pulling in a full Markdown parser.\n//\n// Supported conversions:\n// - # Header / ## Header → *Header* (bold with visual separation)\n// - **bold** / __bold__ → *bold*\n// - [label](url) → <url|label>\n// - ![alt](url) → <url|alt>\n// - *italic* (inline) → _italic_\n// - ```mermaid blocks → rendered to PNG and uploaded to Slack\n//\n// Everything else is passed through unchanged; Slack will still render many\n// Markdown-like constructs (lists, code fences, etc.) natively.\n\nimport { spawn } from 'child_process';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as os from 'os';\n\n/**\n * Represents an extracted mermaid diagram\n */\nexport interface MermaidDiagram {\n /** The full match including ```mermaid and ``` */\n fullMatch: string;\n /** The mermaid code content */\n code: string;\n /** Start index in the original text */\n startIndex: number;\n /** End index in the original text */\n endIndex: number;\n}\n\n/**\n * Extract all mermaid code blocks from text\n */\nexport function extractMermaidDiagrams(text: string): MermaidDiagram[] {\n const diagrams: MermaidDiagram[] = [];\n // Match ```mermaid followed by newline, content, and closing ```\n const regex = /```mermaid\\s*\\n([\\s\\S]*?)```/g;\n let match;\n while ((match = regex.exec(text)) !== null) {\n diagrams.push({\n fullMatch: match[0],\n code: match[1].trim(),\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n return diagrams;\n}\n\n/**\n * Render a mermaid diagram to PNG using mmdc CLI (@mermaid-js/mermaid-cli).\n *\n * Requirements:\n * - Node.js and npx must be available in PATH\n * - Network access on first run (npx downloads the package)\n * - Puppeteer/Chromium dependencies (mermaid-cli uses headless browser)\n *\n * On Linux, you may need to install chromium dependencies:\n * apt-get install -y chromium-browser libatk-bridge2.0-0 libgtk-3-0\n *\n * On Docker/CI, consider using a base image with puppeteer support or\n * pre-installing @mermaid-js/mermaid-cli globally.\n *\n * @param mermaidCode The mermaid diagram code\n * @returns Buffer containing PNG data, or null if rendering failed\n */\nexport async function renderMermaidToPng(mermaidCode: string): Promise<Buffer | null> {\n // Create temp files for input and output\n const tmpDir = os.tmpdir();\n const inputFile = path.join(\n tmpDir,\n `mermaid-${Date.now()}-${Math.random().toString(36).slice(2)}.mmd`\n );\n const outputFile = path.join(\n tmpDir,\n `mermaid-${Date.now()}-${Math.random().toString(36).slice(2)}.png`\n );\n\n try {\n // Write mermaid code to temp file\n fs.writeFileSync(inputFile, mermaidCode, 'utf-8');\n\n // Detect system chromium for puppeteer (mermaid-cli dependency)\n // Without this, puppeteer may hang trying to download its own chromium\n const chromiumPaths = [\n '/usr/bin/chromium',\n '/usr/bin/chromium-browser',\n '/usr/bin/google-chrome',\n '/usr/bin/chrome',\n ];\n let chromiumPath: string | undefined;\n for (const p of chromiumPaths) {\n if (fs.existsSync(p)) {\n chromiumPath = p;\n break;\n }\n }\n\n // Build environment with chromium path if found\n const env = { ...process.env };\n if (chromiumPath) {\n env.PUPPETEER_EXECUTABLE_PATH = chromiumPath;\n }\n\n // Run mmdc to render PNG\n const result = await new Promise<{ success: boolean; error?: string }>(resolve => {\n const proc = spawn(\n 'npx',\n [\n '--yes',\n '@mermaid-js/mermaid-cli',\n '-i',\n inputFile,\n '-o',\n outputFile,\n '-e',\n 'png',\n '-b',\n 'white',\n '-w',\n '1200',\n ],\n {\n timeout: 60000, // 60 second timeout (first run may download packages)\n stdio: ['pipe', 'pipe', 'pipe'],\n env,\n }\n );\n\n let stderr = '';\n proc.stderr?.on('data', data => {\n stderr += data.toString();\n });\n\n proc.on('close', code => {\n if (code === 0) {\n resolve({ success: true });\n } else {\n resolve({ success: false, error: stderr || `Exit code ${code}` });\n }\n });\n\n proc.on('error', err => {\n resolve({ success: false, error: err.message });\n });\n });\n\n if (!result.success) {\n console.warn(`Mermaid rendering failed: ${result.error}`);\n return null;\n }\n\n // Read the output PNG\n if (!fs.existsSync(outputFile)) {\n console.warn('Mermaid output file not created');\n return null;\n }\n\n const pngBuffer = fs.readFileSync(outputFile);\n return pngBuffer;\n } catch (e) {\n console.warn(`Mermaid rendering error: ${e instanceof Error ? e.message : String(e)}`);\n return null;\n } finally {\n // Cleanup temp files\n try {\n if (fs.existsSync(inputFile)) fs.unlinkSync(inputFile);\n if (fs.existsSync(outputFile)) fs.unlinkSync(outputFile);\n } catch {\n // Ignore cleanup errors\n }\n }\n}\n\n/**\n * Replace mermaid blocks in text with a placeholder message\n * @param text Original text\n * @param diagrams Extracted diagrams\n * @param replacement Text to replace each diagram with (or a function that returns replacement for each index)\n */\nexport function replaceMermaidBlocks(\n text: string,\n diagrams: MermaidDiagram[],\n replacement: string | ((index: number) => string) = '_(See diagram above)_'\n): string {\n if (diagrams.length === 0) return text;\n\n // Sort by start index descending to replace from end to start (preserves indices)\n const sorted = [...diagrams].sort((a, b) => b.startIndex - a.startIndex);\n\n let result = text;\n sorted.forEach((diagram, sortedIndex) => {\n // Calculate original index (since we sorted in reverse)\n const originalIndex = diagrams.length - 1 - sortedIndex;\n const rep = typeof replacement === 'function' ? replacement(originalIndex) : replacement;\n result = result.slice(0, diagram.startIndex) + rep + result.slice(diagram.endIndex);\n });\n\n return result;\n}\n\nexport function markdownToSlack(text: string): string {\n if (!text || typeof text !== 'string') return '';\n\n let out = text;\n\n // Images: ![alt](url) → <url|alt>\n // We intentionally keep only the URL + alt text; Slack will usually unfurl.\n out = out.replace(\n /!\\[([^\\]]*)\\]\\(([^)\\s]+)(?:\\s+\"[^\"]*\")?\\)/g,\n (_m, alt: string, url: string) => `<${url}|${alt || 'image'}>`\n );\n\n // Links: [label](url) → <url|label>\n out = out.replace(\n /\\[([^\\]]+)\\]\\(([^)\\s]+)(?:\\s+\"[^\"]*\")?\\)/g,\n (_m, label: string, url: string) => `<${url}|${label}>`\n );\n\n // Bold: **text** or __text__ → *text*\n out = out.replace(/\\*\\*([^*]+)\\*\\*/g, (_m, inner: string) => `*${inner}*`);\n out = out.replace(/__([^_]+)__/g, (_m, inner: string) => `*${inner}*`);\n\n // Process lines for headers and bullet lists.\n // Slack's mrkdwn handles \"•\" bullets more naturally than raw \"-\" Markdown.\n const lines = out.split(/\\r?\\n/);\n let inCodeBlock = false;\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const trimmed = line.trimStart();\n // Track fenced code blocks and avoid rewriting inside them\n if (/^```/.test(trimmed)) {\n inCodeBlock = !inCodeBlock;\n continue;\n }\n if (inCodeBlock) continue;\n\n // Headers: # Header → *Header* (Slack doesn't have native headers)\n // Match 1-6 # at start of line, followed by space and text\n const headerMatch = /^(#{1,6})\\s+(.+)$/.exec(trimmed);\n if (headerMatch) {\n const [, hashes, headerText] = headerMatch;\n // For h1/h2, add extra emphasis with newline before (if not first line\n // and previous line is not empty/header/code-fence)\n const prevLine = i > 0 ? lines[i - 1].trim() : '';\n const prevIsHeaderOrFence =\n /^#{1,6}\\s+/.test(prevLine) || /^\\*[^*]+\\*$/.test(prevLine) || /^```/.test(prevLine);\n if (hashes.length <= 2 && i > 0 && prevLine !== '' && !prevIsHeaderOrFence) {\n lines[i] = `\\n*${headerText.trim()}*`;\n } else {\n lines[i] = `*${headerText.trim()}*`;\n }\n continue;\n }\n\n // Bullet lists: \"- item\" or \"* item\" → \"• item\" (preserve indentation)\n const bulletMatch = /^(\\s*)([-*])\\s+(.+)$/.exec(line);\n if (bulletMatch) {\n const [, indent, , rest] = bulletMatch;\n lines[i] = `${indent}• ${rest}`;\n }\n }\n out = lines.join('\\n');\n\n return out;\n}\n\n/**\n * Represents an extracted file section delimited by --- filename.ext ---\n */\nexport interface FileSection {\n /** Full match including delimiter(s) and content */\n fullMatch: string;\n /** Extracted filename (e.g., \"report.csv\") */\n filename: string;\n /** Content after the opening delimiter (trimmed) */\n content: string;\n /** Start index in the original text */\n startIndex: number;\n /** End index in the original text */\n endIndex: number;\n}\n\n/**\n * Extract all file sections delimited by --- filename.ext --- from text.\n *\n * A section starts at a `--- filename.ext ---` line. It ends at:\n * 1. A closing delimiter with the same filename (optional, backward-compatible)\n * 2. The next `--- other.ext ---` delimiter (starts a new section)\n * 3. End of text\n */\nexport function extractFileSections(text: string): FileSection[] {\n const sections: FileSection[] = [];\n\n // Find all --- filename.ext --- delimiter lines\n const delimRegex = /^--- ([\\w][\\w.\\-]*\\.\\w+) ---$/gm;\n const delimiters: { filename: string; start: number; end: number }[] = [];\n let m;\n while ((m = delimRegex.exec(text)) !== null) {\n delimiters.push({\n filename: m[1],\n start: m.index,\n end: m.index + m[0].length,\n });\n }\n\n if (delimiters.length === 0) return sections;\n\n for (let i = 0; i < delimiters.length; i++) {\n const open = delimiters[i];\n\n // Content starts after the newline following the opening delimiter\n const contentStart =\n open.end < text.length && text[open.end] === '\\n' ? open.end + 1 : open.end;\n\n // Section extends to the next delimiter or end of text\n const sectionEnd = i + 1 < delimiters.length ? delimiters[i + 1].start : text.length;\n const content = text.substring(contentStart, sectionEnd).trim();\n if (content.length > 0) {\n sections.push({\n fullMatch: text.substring(open.start, sectionEnd),\n filename: open.filename,\n content,\n startIndex: open.start,\n endIndex: sectionEnd,\n });\n }\n }\n\n return sections;\n}\n\n/**\n * Replace file sections in text with placeholder messages.\n * Uses back-to-front replacement to preserve indices (same as replaceMermaidBlocks).\n */\nexport function replaceFileSections(\n text: string,\n sections: FileSection[],\n replacement: string | ((index: number) => string) = idx =>\n `_(See file: ${sections[idx].filename} above)_`\n): string {\n if (sections.length === 0) return text;\n\n const sorted = [...sections].sort((a, b) => b.startIndex - a.startIndex);\n\n let result = text;\n sorted.forEach((section, sortedIndex) => {\n const originalIndex = sections.length - 1 - sortedIndex;\n const rep = typeof replacement === 'function' ? replacement(originalIndex) : replacement;\n result = result.slice(0, section.startIndex) + rep + result.slice(section.endIndex);\n });\n\n return result;\n}\n\nexport function formatSlackText(text: string): string {\n return markdownToSlack(text);\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/slack/markdown.ts"],"sourcesContent":["// Lightweight Markdown → Slack mrkdwn formatter.\n// The goal is to make common Markdown output from AI steps look natural in Slack\n// without pulling in a full Markdown parser.\n//\n// Supported conversions:\n// - # Header / ## Header → *Header* (bold with visual separation)\n// - **bold** / __bold__ → *bold*\n// - [label](url) → <url|label>\n// - ![alt](url) → <url|alt>\n// - *italic* (inline) → _italic_\n// - ```mermaid blocks → rendered to PNG and uploaded to Slack\n//\n// Everything else is passed through unchanged; Slack will still render many\n// Markdown-like constructs (lists, code fences, etc.) natively.\n\nimport { spawn } from 'child_process';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as os from 'os';\n\n/**\n * Represents an extracted mermaid diagram\n */\nexport interface MermaidDiagram {\n /** The full match including ```mermaid and ``` */\n fullMatch: string;\n /** The mermaid code content */\n code: string;\n /** Start index in the original text */\n startIndex: number;\n /** End index in the original text */\n endIndex: number;\n}\n\n/**\n * Extract all mermaid code blocks from text\n */\nexport function extractMermaidDiagrams(text: string): MermaidDiagram[] {\n const diagrams: MermaidDiagram[] = [];\n // Match ```mermaid followed by newline, content, and closing ```\n const regex = /```mermaid\\s*\\n([\\s\\S]*?)```/g;\n let match;\n while ((match = regex.exec(text)) !== null) {\n diagrams.push({\n fullMatch: match[0],\n code: match[1].trim(),\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n return diagrams;\n}\n\n/**\n * Render a mermaid diagram to PNG using mmdc CLI (@mermaid-js/mermaid-cli).\n *\n * Requirements:\n * - Node.js and npx must be available in PATH\n * - Network access on first run (npx downloads the package)\n * - Puppeteer/Chromium dependencies (mermaid-cli uses headless browser)\n *\n * On Linux, you may need to install chromium dependencies:\n * apt-get install -y chromium-browser libatk-bridge2.0-0 libgtk-3-0\n *\n * On Docker/CI, consider using a base image with puppeteer support or\n * pre-installing @mermaid-js/mermaid-cli globally.\n *\n * @param mermaidCode The mermaid diagram code\n * @returns Buffer containing PNG data, or null if rendering failed\n */\nexport async function renderMermaidToPng(mermaidCode: string): Promise<Buffer | null> {\n // Create temp files for input and output\n const tmpDir = os.tmpdir();\n const inputFile = path.join(\n tmpDir,\n `mermaid-${Date.now()}-${Math.random().toString(36).slice(2)}.mmd`\n );\n const outputFile = path.join(\n tmpDir,\n `mermaid-${Date.now()}-${Math.random().toString(36).slice(2)}.png`\n );\n\n try {\n // Write mermaid code to temp file\n fs.writeFileSync(inputFile, mermaidCode, 'utf-8');\n\n // Detect system chromium for puppeteer (mermaid-cli dependency)\n // Without this, puppeteer may hang trying to download its own chromium\n const chromiumPaths = [\n '/usr/bin/chromium',\n '/usr/bin/chromium-browser',\n '/usr/bin/google-chrome',\n '/usr/bin/chrome',\n ];\n let chromiumPath: string | undefined;\n for (const p of chromiumPaths) {\n if (fs.existsSync(p)) {\n chromiumPath = p;\n break;\n }\n }\n\n // Build environment with chromium path if found\n const env = { ...process.env };\n if (chromiumPath) {\n env.PUPPETEER_EXECUTABLE_PATH = chromiumPath;\n }\n\n // Run mmdc to render PNG\n const result = await new Promise<{ success: boolean; error?: string }>(resolve => {\n const proc = spawn(\n 'npx',\n [\n '--yes',\n '@mermaid-js/mermaid-cli',\n '-i',\n inputFile,\n '-o',\n outputFile,\n '-e',\n 'png',\n '-b',\n 'white',\n '-w',\n '1200',\n ],\n {\n timeout: 60000, // 60 second timeout (first run may download packages)\n stdio: ['pipe', 'pipe', 'pipe'],\n env,\n }\n );\n\n let stderr = '';\n proc.stderr?.on('data', data => {\n stderr += data.toString();\n });\n\n proc.on('close', code => {\n if (code === 0) {\n resolve({ success: true });\n } else {\n resolve({ success: false, error: stderr || `Exit code ${code}` });\n }\n });\n\n proc.on('error', err => {\n resolve({ success: false, error: err.message });\n });\n });\n\n if (!result.success) {\n console.warn(`Mermaid rendering failed: ${result.error}`);\n return null;\n }\n\n // Read the output PNG\n if (!fs.existsSync(outputFile)) {\n console.warn('Mermaid output file not created');\n return null;\n }\n\n const pngBuffer = fs.readFileSync(outputFile);\n return pngBuffer;\n } catch (e) {\n console.warn(`Mermaid rendering error: ${e instanceof Error ? e.message : String(e)}`);\n return null;\n } finally {\n // Cleanup temp files\n try {\n if (fs.existsSync(inputFile)) fs.unlinkSync(inputFile);\n if (fs.existsSync(outputFile)) fs.unlinkSync(outputFile);\n } catch {\n // Ignore cleanup errors\n }\n }\n}\n\n/**\n * Replace mermaid blocks in text with a placeholder message\n * @param text Original text\n * @param diagrams Extracted diagrams\n * @param replacement Text to replace each diagram with (or a function that returns replacement for each index)\n */\nexport function replaceMermaidBlocks(\n text: string,\n diagrams: MermaidDiagram[],\n replacement: string | ((index: number) => string) = '_(See diagram above)_'\n): string {\n if (diagrams.length === 0) return text;\n\n // Sort by start index descending to replace from end to start (preserves indices)\n const sorted = [...diagrams].sort((a, b) => b.startIndex - a.startIndex);\n\n let result = text;\n sorted.forEach((diagram, sortedIndex) => {\n // Calculate original index (since we sorted in reverse)\n const originalIndex = diagrams.length - 1 - sortedIndex;\n const rep = typeof replacement === 'function' ? replacement(originalIndex) : replacement;\n result = result.slice(0, diagram.startIndex) + rep + result.slice(diagram.endIndex);\n });\n\n return result;\n}\n\nexport function markdownToSlack(text: string): string {\n if (!text || typeof text !== 'string') return '';\n\n let out = text;\n\n // Images: ![alt](url) → <url|alt>\n // We intentionally keep only the URL + alt text; Slack will usually unfurl.\n out = out.replace(\n /!\\[([^\\]]*)\\]\\(([^)\\s]+)(?:\\s+\"[^\"]*\")?\\)/g,\n (_m, alt: string, url: string) => `<${url}|${alt || 'image'}>`\n );\n\n // Links: [label](url) → <url|label>\n out = out.replace(\n /\\[([^\\]]+)\\]\\(([^)\\s]+)(?:\\s+\"[^\"]*\")?\\)/g,\n (_m, label: string, url: string) => `<${url}|${label}>`\n );\n\n // Bold: **text** or __text__ → *text*\n out = out.replace(/\\*\\*([^*]+)\\*\\*/g, (_m, inner: string) => `*${inner}*`);\n out = out.replace(/__([^_]+)__/g, (_m, inner: string) => `*${inner}*`);\n\n // Process lines for headers and bullet lists.\n // Slack's mrkdwn handles \"•\" bullets more naturally than raw \"-\" Markdown.\n const lines = out.split(/\\r?\\n/);\n let inCodeBlock = false;\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const trimmed = line.trimStart();\n // Track fenced code blocks and avoid rewriting inside them\n if (/^```/.test(trimmed)) {\n inCodeBlock = !inCodeBlock;\n continue;\n }\n if (inCodeBlock) continue;\n\n // Headers: # Header → *Header* (Slack doesn't have native headers)\n // Match 1-6 # at start of line, followed by space and text\n const headerMatch = /^(#{1,6})\\s+(.+)$/.exec(trimmed);\n if (headerMatch) {\n const [, hashes, headerText] = headerMatch;\n // For h1/h2, add extra emphasis with newline before (if not first line\n // and previous line is not empty/header/code-fence)\n const prevLine = i > 0 ? lines[i - 1].trim() : '';\n const prevIsHeaderOrFence =\n /^#{1,6}\\s+/.test(prevLine) || /^\\*[^*]+\\*$/.test(prevLine) || /^```/.test(prevLine);\n if (hashes.length <= 2 && i > 0 && prevLine !== '' && !prevIsHeaderOrFence) {\n lines[i] = `\\n*${headerText.trim()}*`;\n } else {\n lines[i] = `*${headerText.trim()}*`;\n }\n continue;\n }\n\n // Bullet lists: \"- item\" or \"* item\" → \"• item\" (preserve indentation)\n const bulletMatch = /^(\\s*)([-*])\\s+(.+)$/.exec(line);\n if (bulletMatch) {\n const [, indent, , rest] = bulletMatch;\n lines[i] = `${indent}• ${rest}`;\n }\n }\n out = lines.join('\\n');\n\n return out;\n}\n\n/**\n * Represents an extracted file section delimited by --- filename.ext ---\n */\nexport interface FileSection {\n /** Full match including delimiter(s) and content */\n fullMatch: string;\n /** Extracted filename (e.g., \"report.csv\") */\n filename: string;\n /** Content after the opening delimiter (trimmed) */\n content: string;\n /** Start index in the original text */\n startIndex: number;\n /** End index in the original text */\n endIndex: number;\n}\n\n/**\n * Extract all file sections delimited by --- filename.ext --- from text.\n *\n * A section starts at a `--- filename.ext ---` line. It ends at:\n * 1. A closing delimiter with the same filename (optional, backward-compatible)\n * 2. The next `--- other.ext ---` delimiter (starts a new section)\n * 3. End of text\n */\nexport function extractFileSections(text: string): FileSection[] {\n const sections: FileSection[] = [];\n\n // Find all --- filename.ext --- delimiter lines\n const delimRegex = /^--- ([\\w][\\w.\\-]*\\.\\w+) ---$/gm;\n const delimiters: { filename: string; start: number; end: number }[] = [];\n let m;\n while ((m = delimRegex.exec(text)) !== null) {\n delimiters.push({\n filename: m[1],\n start: m.index,\n end: m.index + m[0].length,\n });\n }\n\n if (delimiters.length === 0) return sections;\n\n for (let i = 0; i < delimiters.length; i++) {\n const open = delimiters[i];\n\n // Content starts after the newline following the opening delimiter\n const contentStart =\n open.end < text.length && text[open.end] === '\\n' ? open.end + 1 : open.end;\n\n // Section extends to the next delimiter or end of text\n const sectionEnd = i + 1 < delimiters.length ? delimiters[i + 1].start : text.length;\n const content = text.substring(contentStart, sectionEnd).trim();\n if (content.length > 0) {\n sections.push({\n fullMatch: text.substring(open.start, sectionEnd),\n filename: open.filename,\n content,\n startIndex: open.start,\n endIndex: sectionEnd,\n });\n }\n }\n\n return sections;\n}\n\n/**\n * Replace file sections in text with placeholder messages.\n * Uses back-to-front replacement to preserve indices (same as replaceMermaidBlocks).\n */\nexport function replaceFileSections(\n text: string,\n sections: FileSection[],\n replacement: string | ((index: number) => string) = idx =>\n `_(See file: ${sections[idx].filename} above)_`\n): string {\n if (sections.length === 0) return text;\n\n const sorted = [...sections].sort((a, b) => b.startIndex - a.startIndex);\n\n let result = text;\n sorted.forEach((section, sortedIndex) => {\n const originalIndex = sections.length - 1 - sortedIndex;\n const rep = typeof replacement === 'function' ? replacement(originalIndex) : replacement;\n result = result.slice(0, section.startIndex) + rep + result.slice(section.endIndex);\n });\n\n return result;\n}\n\nexport function formatSlackText(text: string): string {\n return markdownToSlack(text);\n}\n"],"mappings":"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","names":[]}
@@ -6,7 +6,7 @@ import {
6
6
  extractFileSections,
7
7
  init_markdown,
8
8
  replaceFileSections
9
- } from "./chunk-M3BYMES6.mjs";
9
+ } from "./chunk-AVMMKGLQ.mjs";
10
10
  import {
11
11
  getPromptStateManager,
12
12
  init_prompt_state
@@ -3959,7 +3959,7 @@ async function executeWorkflowAsTool(workflowId, args, context2, argsOverrides)
3959
3959
  ...args,
3960
3960
  ...argsOverrides
3961
3961
  };
3962
- const { WorkflowCheckProvider: WorkflowCheckProvider2 } = await import("./workflow-check-provider-4DC4KOHI.mjs");
3962
+ const { WorkflowCheckProvider: WorkflowCheckProvider2 } = await import("./workflow-check-provider-5G6BGZEX.mjs");
3963
3963
  const provider = new WorkflowCheckProvider2();
3964
3964
  const checkConfig = {
3965
3965
  type: "workflow",
@@ -13027,7 +13027,7 @@ var init_state_machine_execution_engine = __esm({
13027
13027
  try {
13028
13028
  const map = options?.webhookContext?.webhookData;
13029
13029
  if (map) {
13030
- const { CheckProviderRegistry: CheckProviderRegistry2 } = await import("./check-provider-registry-3O2PAJPF.mjs");
13030
+ const { CheckProviderRegistry: CheckProviderRegistry2 } = await import("./check-provider-registry-LVXLROAJ.mjs");
13031
13031
  const reg = CheckProviderRegistry2.getInstance();
13032
13032
  const p = reg.getProvider("http_input");
13033
13033
  if (p && typeof p.setWebhookContext === "function") p.setWebhookContext(map);
@@ -13150,7 +13150,7 @@ var init_state_machine_execution_engine = __esm({
13150
13150
  tag_filter: tagFilter
13151
13151
  } : config;
13152
13152
  try {
13153
- const { CheckProviderRegistry: CheckProviderRegistry2 } = await import("./check-provider-registry-3O2PAJPF.mjs");
13153
+ const { CheckProviderRegistry: CheckProviderRegistry2 } = await import("./check-provider-registry-LVXLROAJ.mjs");
13154
13154
  const registry = CheckProviderRegistry2.getInstance();
13155
13155
  registry.setCustomTools(configWithTagFilter.tools || {});
13156
13156
  } catch (error) {
@@ -13214,7 +13214,7 @@ var init_state_machine_execution_engine = __esm({
13214
13214
  try {
13215
13215
  const webhookData = this.executionContext?.webhookContext?.webhookData;
13216
13216
  if (webhookData instanceof Map) {
13217
- const { extractSlackContext: extractSlackContext2 } = await import("./schedule-tool-handler-O7T66M3I.mjs");
13217
+ const { extractSlackContext: extractSlackContext2 } = await import("./schedule-tool-handler-Z5VWUB76.mjs");
13218
13218
  const slackCtx = extractSlackContext2(webhookData);
13219
13219
  if (slackCtx) {
13220
13220
  const payload = Array.from(webhookData.values())[0];
@@ -13243,7 +13243,7 @@ var init_state_machine_execution_engine = __esm({
13243
13243
  if (Array.isArray(configWithTagFilter.frontends) && configWithTagFilter.frontends.length > 0) {
13244
13244
  try {
13245
13245
  const { EventBus } = await import("./event-bus-5K3Y2FCS.mjs");
13246
- const { FrontendsHost } = await import("./host-4ONWAJ6Q.mjs");
13246
+ const { FrontendsHost } = await import("./host-YKTAWW33.mjs");
13247
13247
  const bus = new EventBus();
13248
13248
  context2.eventBus = bus;
13249
13249
  frontendsHost = new FrontendsHost(bus, logger);
@@ -13991,9 +13991,11 @@ var init_scheduler = __esm({
13991
13991
  if (!cron.validate(job.schedule)) {
13992
13992
  throw new Error(`Invalid cron expression: ${job.schedule}`);
13993
13993
  }
13994
- const allChecks = Object.keys(this.visorConfig.checks || {});
13995
- if (!allChecks.includes(job.workflow)) {
13996
- throw new Error(`Workflow "${job.workflow}" not found in configuration`);
13994
+ if (job.workflow !== "default") {
13995
+ const allChecks = Object.keys(this.visorConfig.checks || {});
13996
+ if (!allChecks.includes(job.workflow)) {
13997
+ throw new Error(`Workflow "${job.workflow}" not found in configuration`);
13998
+ }
13997
13999
  }
13998
14000
  const internalId = `__static_cron__:${jobId}`;
13999
14001
  const cronJob = cron.schedule(
@@ -14379,7 +14381,11 @@ var init_scheduler = __esm({
14379
14381
  return { message: "No execution engine configured" };
14380
14382
  }
14381
14383
  const allChecks = Object.keys(this.visorConfig.checks || {});
14382
- if (!allChecks.includes(schedule.workflow)) {
14384
+ const checksToRun = schedule.workflow === "default" ? allChecks : [schedule.workflow];
14385
+ if (checksToRun.length === 0) {
14386
+ throw new Error("No checks configured");
14387
+ }
14388
+ if (schedule.workflow !== "default" && !allChecks.includes(schedule.workflow)) {
14383
14389
  throw new Error(`Workflow "${schedule.workflow}" not found in configuration`);
14384
14390
  }
14385
14391
  const syntheticPayload = {
@@ -14409,7 +14415,7 @@ var init_scheduler = __esm({
14409
14415
  }
14410
14416
  const { engine: runEngine, config: cfgForRun } = this.prepareExecution(schedule);
14411
14417
  await runEngine.executeChecks({
14412
- checks: [schedule.workflow],
14418
+ checks: checksToRun,
14413
14419
  showDetails: true,
14414
14420
  outputFormat: "json",
14415
14421
  config: cfgForRun,
@@ -40722,8 +40728,8 @@ function buildBuiltinGlobals(opts) {
40722
40728
  const asyncFunctionNames = /* @__PURE__ */ new Set();
40723
40729
  const scheduleFn = async (args = {}) => {
40724
40730
  try {
40725
- const { handleScheduleAction: handleScheduleAction2, buildScheduleToolContext: buildScheduleToolContext2 } = await import("./schedule-tool-EZVQOF55.mjs");
40726
- const { extractSlackContext: extractSlackContext2 } = await import("./schedule-tool-handler-O7T66M3I.mjs");
40731
+ const { handleScheduleAction: handleScheduleAction2, buildScheduleToolContext: buildScheduleToolContext2 } = await import("./schedule-tool-526VUPMF.mjs");
40732
+ const { extractSlackContext: extractSlackContext2 } = await import("./schedule-tool-handler-Z5VWUB76.mjs");
40727
40733
  const parentCtx = opts.sessionInfo?._parentContext;
40728
40734
  const webhookData = parentCtx?.prInfo?.eventContext?.webhookData;
40729
40735
  const visorCfg = parentCtx?.config;
@@ -43771,4 +43777,4 @@ undici/lib/fetch/body.js:
43771
43777
  undici/lib/websocket/frame.js:
43772
43778
  (*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> *)
43773
43779
  */
43774
- //# sourceMappingURL=chunk-PLMM6W3K.mjs.map
43780
+ //# sourceMappingURL=chunk-FRTHLKIG.mjs.map