botmux 2.93.0 → 2.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  2. package/dist/adapters/cli/claude-code.js +6 -1
  3. package/dist/adapters/cli/claude-code.js.map +1 -1
  4. package/dist/bot-registry.d.ts +10 -1
  5. package/dist/bot-registry.d.ts.map +1 -1
  6. package/dist/bot-registry.js +2 -0
  7. package/dist/bot-registry.js.map +1 -1
  8. package/dist/cli/dashboard-endpoint.d.ts +1 -1
  9. package/dist/cli/dashboard-endpoint.d.ts.map +1 -1
  10. package/dist/cli/dashboard-endpoint.js +3 -0
  11. package/dist/cli/dashboard-endpoint.js.map +1 -1
  12. package/dist/cli/workflow.d.ts.map +1 -1
  13. package/dist/cli/workflow.js +11 -4
  14. package/dist/cli/workflow.js.map +1 -1
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +133 -1
  17. package/dist/cli.js.map +1 -1
  18. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  19. package/dist/core/dashboard-ipc-server.js +3 -0
  20. package/dist/core/dashboard-ipc-server.js.map +1 -1
  21. package/dist/core/inherit-peer.d.ts +5 -0
  22. package/dist/core/inherit-peer.d.ts.map +1 -1
  23. package/dist/core/inherit-peer.js +3 -0
  24. package/dist/core/inherit-peer.js.map +1 -1
  25. package/dist/core/trigger-session.d.ts +10 -0
  26. package/dist/core/trigger-session.d.ts.map +1 -1
  27. package/dist/core/trigger-session.js +22 -2
  28. package/dist/core/trigger-session.js.map +1 -1
  29. package/dist/core/worker-pool.d.ts +6 -0
  30. package/dist/core/worker-pool.d.ts.map +1 -1
  31. package/dist/core/worker-pool.js +49 -6
  32. package/dist/core/worker-pool.js.map +1 -1
  33. package/dist/daemon.d.ts.map +1 -1
  34. package/dist/daemon.js +297 -13
  35. package/dist/daemon.js.map +1 -1
  36. package/dist/dashboard/auth.d.ts.map +1 -1
  37. package/dist/dashboard/auth.js +7 -1
  38. package/dist/dashboard/auth.js.map +1 -1
  39. package/dist/dashboard/bot-payload.d.ts +1 -0
  40. package/dist/dashboard/bot-payload.d.ts.map +1 -1
  41. package/dist/dashboard/bot-payload.js +1 -0
  42. package/dist/dashboard/bot-payload.js.map +1 -1
  43. package/dist/dashboard/federation-spoke-api.d.ts +31 -0
  44. package/dist/dashboard/federation-spoke-api.d.ts.map +1 -1
  45. package/dist/dashboard/federation-spoke-api.js +36 -14
  46. package/dist/dashboard/federation-spoke-api.js.map +1 -1
  47. package/dist/dashboard/v3-runs-api.d.ts +26 -0
  48. package/dist/dashboard/v3-runs-api.d.ts.map +1 -0
  49. package/dist/dashboard/v3-runs-api.js +67 -0
  50. package/dist/dashboard/v3-runs-api.js.map +1 -0
  51. package/dist/dashboard/web/app.js +21 -9
  52. package/dist/dashboard/web/app.js.map +1 -1
  53. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  54. package/dist/dashboard/web/bot-defaults.js +24 -1
  55. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  56. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  57. package/dist/dashboard/web/i18n.js +12 -4
  58. package/dist/dashboard/web/i18n.js.map +1 -1
  59. package/dist/dashboard/web/legacy-workflow-link.d.ts +2 -0
  60. package/dist/dashboard/web/legacy-workflow-link.d.ts.map +1 -0
  61. package/dist/dashboard/web/legacy-workflow-link.js +12 -0
  62. package/dist/dashboard/web/legacy-workflow-link.js.map +1 -0
  63. package/dist/dashboard/web/v3-terminal.d.ts +11 -0
  64. package/dist/dashboard/web/v3-terminal.d.ts.map +1 -0
  65. package/dist/dashboard/web/v3-terminal.js +143 -0
  66. package/dist/dashboard/web/v3-terminal.js.map +1 -0
  67. package/dist/dashboard/web/v3.d.ts +2 -0
  68. package/dist/dashboard/web/v3.d.ts.map +1 -0
  69. package/dist/dashboard/web/v3.js +564 -0
  70. package/dist/dashboard/web/v3.js.map +1 -0
  71. package/dist/dashboard/web/workflows.d.ts.map +1 -1
  72. package/dist/dashboard/web/workflows.js +12 -8
  73. package/dist/dashboard/web/workflows.js.map +1 -1
  74. package/dist/dashboard-web/app.js +787 -699
  75. package/dist/dashboard-web/index.html +1 -1
  76. package/dist/dashboard-web/style.css +223 -0
  77. package/dist/dashboard.js +61 -40
  78. package/dist/dashboard.js.map +1 -1
  79. package/dist/i18n/en.d.ts.map +1 -1
  80. package/dist/i18n/en.js +6 -3
  81. package/dist/i18n/en.js.map +1 -1
  82. package/dist/i18n/zh.d.ts.map +1 -1
  83. package/dist/i18n/zh.js +6 -3
  84. package/dist/i18n/zh.js.map +1 -1
  85. package/dist/im/lark/card-handler.d.ts +12 -0
  86. package/dist/im/lark/card-handler.d.ts.map +1 -1
  87. package/dist/im/lark/card-handler.js +52 -2
  88. package/dist/im/lark/card-handler.js.map +1 -1
  89. package/dist/im/lark/doc-comment.d.ts +20 -0
  90. package/dist/im/lark/doc-comment.d.ts.map +1 -1
  91. package/dist/im/lark/doc-comment.js +23 -0
  92. package/dist/im/lark/doc-comment.js.map +1 -1
  93. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  94. package/dist/im/lark/event-dispatcher.js +13 -9
  95. package/dist/im/lark/event-dispatcher.js.map +1 -1
  96. package/dist/im/lark/v3-blocked-card-handler.d.ts +28 -0
  97. package/dist/im/lark/v3-blocked-card-handler.d.ts.map +1 -0
  98. package/dist/im/lark/v3-blocked-card-handler.js +134 -0
  99. package/dist/im/lark/v3-blocked-card-handler.js.map +1 -0
  100. package/dist/im/lark/v3-blocked-card.d.ts +75 -0
  101. package/dist/im/lark/v3-blocked-card.d.ts.map +1 -0
  102. package/dist/im/lark/v3-blocked-card.js +206 -0
  103. package/dist/im/lark/v3-blocked-card.js.map +1 -0
  104. package/dist/im/lark/v3-gate-card-handler.d.ts +31 -0
  105. package/dist/im/lark/v3-gate-card-handler.d.ts.map +1 -0
  106. package/dist/im/lark/v3-gate-card-handler.js +110 -0
  107. package/dist/im/lark/v3-gate-card-handler.js.map +1 -0
  108. package/dist/im/lark/v3-gate-card.d.ts +47 -0
  109. package/dist/im/lark/v3-gate-card.d.ts.map +1 -0
  110. package/dist/im/lark/v3-gate-card.js +119 -0
  111. package/dist/im/lark/v3-gate-card.js.map +1 -0
  112. package/dist/im/lark/v3-loop-grant-card-handler.d.ts +28 -0
  113. package/dist/im/lark/v3-loop-grant-card-handler.d.ts.map +1 -0
  114. package/dist/im/lark/v3-loop-grant-card-handler.js +90 -0
  115. package/dist/im/lark/v3-loop-grant-card-handler.js.map +1 -0
  116. package/dist/im/lark/v3-loop-grant-card.d.ts +46 -0
  117. package/dist/im/lark/v3-loop-grant-card.d.ts.map +1 -0
  118. package/dist/im/lark/v3-loop-grant-card.js +119 -0
  119. package/dist/im/lark/v3-loop-grant-card.js.map +1 -0
  120. package/dist/im/lark/v3-revisit-grant-card-handler.d.ts +29 -0
  121. package/dist/im/lark/v3-revisit-grant-card-handler.d.ts.map +1 -0
  122. package/dist/im/lark/v3-revisit-grant-card-handler.js +96 -0
  123. package/dist/im/lark/v3-revisit-grant-card-handler.js.map +1 -0
  124. package/dist/im/lark/v3-revisit-grant-card.d.ts +52 -0
  125. package/dist/im/lark/v3-revisit-grant-card.d.ts.map +1 -0
  126. package/dist/im/lark/v3-revisit-grant-card.js +123 -0
  127. package/dist/im/lark/v3-revisit-grant-card.js.map +1 -0
  128. package/dist/im/lark/workflow-cards.d.ts.map +1 -1
  129. package/dist/im/lark/workflow-cards.js +5 -1
  130. package/dist/im/lark/workflow-cards.js.map +1 -1
  131. package/dist/im/lark/workflow-progress-card.d.ts +1 -1
  132. package/dist/im/lark/workflow-progress-card.js +1 -1
  133. package/dist/im/lark/workflow-slash-command.d.ts +28 -0
  134. package/dist/im/lark/workflow-slash-command.d.ts.map +1 -1
  135. package/dist/im/lark/workflow-slash-command.js +61 -5
  136. package/dist/im/lark/workflow-slash-command.js.map +1 -1
  137. package/dist/platform/bind.d.ts.map +1 -1
  138. package/dist/platform/bind.js +17 -3
  139. package/dist/platform/bind.js.map +1 -1
  140. package/dist/services/card-prefs-store.d.ts +4 -0
  141. package/dist/services/card-prefs-store.d.ts.map +1 -1
  142. package/dist/services/card-prefs-store.js +19 -0
  143. package/dist/services/card-prefs-store.js.map +1 -1
  144. package/dist/services/group-creator.d.ts.map +1 -1
  145. package/dist/services/group-creator.js +18 -2
  146. package/dist/services/group-creator.js.map +1 -1
  147. package/dist/skills/definitions.d.ts.map +1 -1
  148. package/dist/skills/definitions.js +208 -4
  149. package/dist/skills/definitions.js.map +1 -1
  150. package/dist/worker.js +79 -13
  151. package/dist/worker.js.map +1 -1
  152. package/dist/workflows/definition.d.ts +80 -80
  153. package/dist/workflows/events/payloads.d.ts +4 -4
  154. package/dist/workflows/events/schema.d.ts +16 -16
  155. package/dist/workflows/v3/architect.d.ts +37 -0
  156. package/dist/workflows/v3/architect.d.ts.map +1 -0
  157. package/dist/workflows/v3/architect.js +226 -0
  158. package/dist/workflows/v3/architect.js.map +1 -0
  159. package/dist/workflows/v3/bot-resolve.d.ts +21 -0
  160. package/dist/workflows/v3/bot-resolve.d.ts.map +1 -0
  161. package/dist/workflows/v3/bot-resolve.js +47 -0
  162. package/dist/workflows/v3/bot-resolve.js.map +1 -0
  163. package/dist/workflows/v3/cli-run.d.ts +24 -0
  164. package/dist/workflows/v3/cli-run.d.ts.map +1 -0
  165. package/dist/workflows/v3/cli-run.js +265 -0
  166. package/dist/workflows/v3/cli-run.js.map +1 -0
  167. package/dist/workflows/v3/contract.d.ts +302 -0
  168. package/dist/workflows/v3/contract.d.ts.map +1 -0
  169. package/dist/workflows/v3/contract.js +91 -0
  170. package/dist/workflows/v3/contract.js.map +1 -0
  171. package/dist/workflows/v3/daemon-run.d.ts +311 -0
  172. package/dist/workflows/v3/daemon-run.d.ts.map +1 -0
  173. package/dist/workflows/v3/daemon-run.js +775 -0
  174. package/dist/workflows/v3/daemon-run.js.map +1 -0
  175. package/dist/workflows/v3/dag.d.ts +332 -0
  176. package/dist/workflows/v3/dag.d.ts.map +1 -0
  177. package/dist/workflows/v3/dag.js +1040 -0
  178. package/dist/workflows/v3/dag.js.map +1 -0
  179. package/dist/workflows/v3/ephemeral-pool.d.ts +29 -0
  180. package/dist/workflows/v3/ephemeral-pool.d.ts.map +1 -0
  181. package/dist/workflows/v3/ephemeral-pool.js +331 -0
  182. package/dist/workflows/v3/ephemeral-pool.js.map +1 -0
  183. package/dist/workflows/v3/grill-state.d.ts +92 -0
  184. package/dist/workflows/v3/grill-state.d.ts.map +1 -0
  185. package/dist/workflows/v3/grill-state.js +151 -0
  186. package/dist/workflows/v3/grill-state.js.map +1 -0
  187. package/dist/workflows/v3/host.d.ts +88 -0
  188. package/dist/workflows/v3/host.d.ts.map +1 -0
  189. package/dist/workflows/v3/host.js +349 -0
  190. package/dist/workflows/v3/host.js.map +1 -0
  191. package/dist/workflows/v3/human-gate.d.ts +85 -0
  192. package/dist/workflows/v3/human-gate.d.ts.map +1 -0
  193. package/dist/workflows/v3/human-gate.js +153 -0
  194. package/dist/workflows/v3/human-gate.js.map +1 -0
  195. package/dist/workflows/v3/journal.d.ts +207 -0
  196. package/dist/workflows/v3/journal.d.ts.map +1 -0
  197. package/dist/workflows/v3/journal.js +74 -0
  198. package/dist/workflows/v3/journal.js.map +1 -0
  199. package/dist/workflows/v3/manifest.d.ts +17 -0
  200. package/dist/workflows/v3/manifest.d.ts.map +1 -0
  201. package/dist/workflows/v3/manifest.js +266 -0
  202. package/dist/workflows/v3/manifest.js.map +1 -0
  203. package/dist/workflows/v3/ops-projection.d.ts +110 -0
  204. package/dist/workflows/v3/ops-projection.d.ts.map +1 -0
  205. package/dist/workflows/v3/ops-projection.js +0 -0
  206. package/dist/workflows/v3/ops-projection.js.map +1 -0
  207. package/dist/workflows/v3/orchestrator.d.ts +168 -0
  208. package/dist/workflows/v3/orchestrator.d.ts.map +1 -0
  209. package/dist/workflows/v3/orchestrator.js +417 -0
  210. package/dist/workflows/v3/orchestrator.js.map +1 -0
  211. package/dist/workflows/v3/runtime.d.ts +193 -0
  212. package/dist/workflows/v3/runtime.d.ts.map +1 -0
  213. package/dist/workflows/v3/runtime.js +1284 -0
  214. package/dist/workflows/v3/runtime.js.map +1 -0
  215. package/dist/workflows/v3/spec.d.ts +32 -0
  216. package/dist/workflows/v3/spec.d.ts.map +1 -0
  217. package/dist/workflows/v3/spec.js +173 -0
  218. package/dist/workflows/v3/spec.js.map +1 -0
  219. package/dist/workflows/v3/state.d.ts +74 -0
  220. package/dist/workflows/v3/state.d.ts.map +1 -0
  221. package/dist/workflows/v3/state.js +353 -0
  222. package/dist/workflows/v3/state.js.map +1 -0
  223. package/package.json +1 -1
  224. package/dist/dashboard/web/workflow-catalog.d.ts +0 -2
  225. package/dist/dashboard/web/workflow-catalog.d.ts.map +0 -1
  226. package/dist/dashboard/web/workflow-catalog.js +0 -323
  227. package/dist/dashboard/web/workflow-catalog.js.map +0 -1
@@ -1,323 +0,0 @@
1
- import { t } from './ui.js';
2
- function escapeHtml(s) {
3
- return s.replace(/[&<>"']/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' }[c]));
4
- }
5
- function short(value) {
6
- if (!value)
7
- return '-';
8
- return value.length > 18 ? value.slice(0, 10) + '...' + value.slice(-6) : value;
9
- }
10
- export function renderWorkflowCatalogPage(root) {
11
- // Catalog lives at `#/workflows/catalog[/<workflowId>]` since the nav
12
- // refactor. Legacy `#/workflows-catalog[/<workflowId>]` is honored so
13
- // pasted URLs keep working.
14
- const detailMatch = location.hash.match(/^#\/(?:workflows\/catalog|workflows-catalog)\/([^/?#]+)$/);
15
- if (detailMatch) {
16
- return renderCatalogDetailPage(root, decodeURIComponent(detailMatch[1]));
17
- }
18
- return renderCatalogListPage(root);
19
- }
20
- function renderCatalogListPage(root) {
21
- root.innerHTML = `
22
- <nav class="wf-subnav">
23
- <a href="#/workflows" data-i18n="workflow.subnav.runs">${escapeHtml(t('workflow.subnav.runs'))}</a>
24
- <a href="#/workflows/catalog" class="active" data-i18n="workflow.subnav.catalog">${escapeHtml(t('workflow.subnav.catalog'))}</a>
25
- </nav>
26
- <section class="catalog-head">
27
- <div>
28
- <h2>${escapeHtml(t('catalog.title'))}</h2>
29
- <p class="muted">${escapeHtml(t('catalog.subtitle'))}</p>
30
- </div>
31
- <button id="catalog-refresh" type="button">${escapeHtml(t('catalog.refresh'))}</button>
32
- </section>
33
- <form id="catalog-filters" class="filters">
34
- <input type="search" name="q" placeholder="${escapeHtml(t('catalog.searchPlaceholder'))}" />
35
- <span id="catalog-status" class="muted"></span>
36
- </form>
37
- <div class="wf-table-scroll">
38
- <table>
39
- <thead><tr>
40
- <th>${escapeHtml(t('catalog.table.workflow'))}</th>
41
- <th>${escapeHtml(t('catalog.table.version'))}</th>
42
- <th>${escapeHtml(t('catalog.table.params'))}</th>
43
- <th>${escapeHtml(t('catalog.table.nodes'))}</th>
44
- <th>${escapeHtml(t('catalog.table.revision'))}</th>
45
- <th>${escapeHtml(t('catalog.table.path'))}</th>
46
- </tr></thead>
47
- <tbody id="catalog-tbody"></tbody>
48
- </table>
49
- </div>
50
- `;
51
- const tbody = root.querySelector('#catalog-tbody');
52
- const status = root.querySelector('#catalog-status');
53
- const form = root.querySelector('#catalog-filters');
54
- const refresh = root.querySelector('#catalog-refresh');
55
- let entries = [];
56
- let error = null;
57
- let disposed = false;
58
- function filtered() {
59
- const q = (new FormData(form).get('q') ?? '').trim().toLowerCase();
60
- if (!q)
61
- return entries;
62
- return entries.filter((entry) => entry.workflowId.toLowerCase().includes(q) ||
63
- entry.path.toLowerCase().includes(q));
64
- }
65
- function render() {
66
- if (error) {
67
- status.textContent = t('catalog.loadFailed', { error });
68
- status.classList.add('error');
69
- }
70
- else {
71
- status.textContent = `${entries.length}`;
72
- status.classList.remove('error');
73
- }
74
- const rows = filtered();
75
- if (rows.length === 0) {
76
- tbody.innerHTML = `<tr><td colspan="6" class="empty">${entries.length === 0
77
- ? escapeHtml(t('catalog.noDefinitions'))
78
- : escapeHtml(t('catalog.noFilterMatch'))}</td></tr>`;
79
- return;
80
- }
81
- tbody.innerHTML = rows.map((entry) => `
82
- <tr>
83
- <td><a href="#/workflows/catalog/${encodeURIComponent(entry.workflowId)}"><code>${escapeHtml(entry.workflowId)}</code></a></td>
84
- <td>${entry.version}</td>
85
- <td>${escapeHtml(t('catalog.paramSummary', {
86
- required: entry.requiredParamCount,
87
- total: entry.paramCount,
88
- }))}</td>
89
- <td>${entry.nodeCount}</td>
90
- <td><code>${escapeHtml(short(entry.revisionId))}</code></td>
91
- <td><code>${escapeHtml(entry.path)}</code></td>
92
- </tr>
93
- `).join('');
94
- }
95
- async function load() {
96
- refresh.disabled = true;
97
- status.textContent = t('catalog.loading');
98
- try {
99
- const res = await fetch('/api/workflows/definitions');
100
- if (!res.ok)
101
- throw new Error(`HTTP ${res.status}`);
102
- const body = (await res.json());
103
- entries = body.definitions ?? [];
104
- error = null;
105
- }
106
- catch (err) {
107
- error = err?.message ?? String(err);
108
- entries = [];
109
- }
110
- finally {
111
- refresh.disabled = false;
112
- if (!disposed)
113
- render();
114
- }
115
- }
116
- form.addEventListener('input', render);
117
- refresh.addEventListener('click', () => void load());
118
- void load();
119
- return () => {
120
- disposed = true;
121
- };
122
- }
123
- function renderCatalogDetailPage(root, workflowId) {
124
- root.innerHTML = `
125
- <div class="catalog-detail-head">
126
- <a class="btn-link" href="#/workflows/catalog">${escapeHtml(t('catalog.back'))}</a>
127
- <div>
128
- <h2><code>${escapeHtml(workflowId)}</code></h2>
129
- <div id="catalog-detail-subtitle" class="muted">${escapeHtml(t('workflow.detail.loading'))}</div>
130
- </div>
131
- </div>
132
- <section id="catalog-error" class="hint-warn" hidden></section>
133
- <section id="catalog-run-status" class="hint-ok" hidden></section>
134
- <div id="catalog-detail-body"></div>
135
- `;
136
- const subtitle = root.querySelector('#catalog-detail-subtitle');
137
- const errorEl = root.querySelector('#catalog-error');
138
- const runStatusEl = root.querySelector('#catalog-run-status');
139
- const bodyEl = root.querySelector('#catalog-detail-body');
140
- let detail = null;
141
- let disposed = false;
142
- let running = false;
143
- function setError(message) {
144
- errorEl.hidden = !message;
145
- errorEl.textContent = message ?? '';
146
- }
147
- function setRunStatus(message) {
148
- runStatusEl.hidden = !message;
149
- runStatusEl.textContent = message ?? '';
150
- }
151
- function defaultParams(params) {
152
- const out = {};
153
- for (const [key, def] of Object.entries(params ?? {})) {
154
- if ('default' in def)
155
- out[key] = def.default;
156
- }
157
- return out;
158
- }
159
- function render() {
160
- if (!detail)
161
- return;
162
- const def = detail.definition;
163
- subtitle.textContent = `${t('catalog.revision')} ${short(detail.revisionId)} · ${detail.path}`;
164
- const paramsJson = JSON.stringify(defaultParams(def.params), null, 2);
165
- bodyEl.innerHTML = `
166
- <section class="wf-panel">
167
- <div class="wf-panel-title"><h3>${escapeHtml(t('catalog.summary'))}</h3></div>
168
- <div class="wf-summary-grid">
169
- <div class="wf-summary-item"><span>${escapeHtml(t('catalog.table.workflow'))}</span><strong><code>${escapeHtml(def.workflowId)}</code></strong></div>
170
- <div class="wf-summary-item"><span>${escapeHtml(t('catalog.table.version'))}</span><strong>${def.version}</strong></div>
171
- <div class="wf-summary-item"><span>${escapeHtml(t('catalog.nodeCount'))}</span><strong>${Object.keys(def.nodes).length}</strong></div>
172
- <div class="wf-summary-item"><span>${escapeHtml(t('catalog.path'))}</span><strong><code>${escapeHtml(detail.path)}</code></strong></div>
173
- </div>
174
- </section>
175
-
176
- <section class="wf-panel">
177
- <div class="wf-panel-title"><h3>${escapeHtml(t('catalog.runPanel'))}</h3></div>
178
- <form id="catalog-run-form" class="catalog-run-form">
179
- <label>
180
- <span>${escapeHtml(t('catalog.paramsJson'))}</span>
181
- <textarea id="catalog-params" rows="8" spellcheck="false" placeholder="${escapeHtml(t('catalog.paramsPlaceholder'))}">${escapeHtml(paramsJson)}</textarea>
182
- </label>
183
- <div class="catalog-chat-grid">
184
- <label>
185
- <span>${escapeHtml(t('catalog.chatId'))}</span>
186
- <input id="catalog-chat-id" type="text" autocomplete="off" />
187
- </label>
188
- <label>
189
- <span>${escapeHtml(t('catalog.larkAppId'))}</span>
190
- <input id="catalog-lark-app-id" type="text" autocomplete="off" />
191
- </label>
192
- </div>
193
- <div class="muted">${escapeHtml(t('catalog.chatBindingHint'))}</div>
194
- <div id="catalog-param-errors" class="catalog-param-errors" hidden></div>
195
- <button id="catalog-run-btn" type="submit" class="primary">${escapeHtml(t('catalog.run'))}</button>
196
- </form>
197
- </section>
198
-
199
- <section class="wf-panel">
200
- <div class="wf-panel-title"><h3>${escapeHtml(t('catalog.paramsSchema'))}</h3></div>
201
- ${renderParams(def.params)}
202
- </section>
203
-
204
- <section class="wf-panel">
205
- <div class="wf-panel-title"><h3>${escapeHtml(t('catalog.definitionJson'))}</h3></div>
206
- <pre class="wf-io-pre">${escapeHtml(JSON.stringify(def, null, 2))}</pre>
207
- </section>
208
- `;
209
- attachRunForm();
210
- }
211
- async function runWorkflow() {
212
- if (!detail || running)
213
- return;
214
- const paramsEl = bodyEl.querySelector('#catalog-params');
215
- const chatIdEl = bodyEl.querySelector('#catalog-chat-id');
216
- const appIdEl = bodyEl.querySelector('#catalog-lark-app-id');
217
- const submit = bodyEl.querySelector('#catalog-run-btn');
218
- const issueEl = bodyEl.querySelector('#catalog-param-errors');
219
- let params;
220
- try {
221
- params = JSON.parse(paramsEl.value || '{}');
222
- if (!params || typeof params !== 'object' || Array.isArray(params)) {
223
- throw new Error(t('catalog.badParamsJson'));
224
- }
225
- }
226
- catch (err) {
227
- issueEl.hidden = false;
228
- issueEl.innerHTML = `<div class="muted error">${escapeHtml(err?.message ?? String(err))}</div>`;
229
- return;
230
- }
231
- running = true;
232
- submit.disabled = true;
233
- submit.textContent = t('catalog.running');
234
- issueEl.hidden = true;
235
- setError(null);
236
- setRunStatus(null);
237
- try {
238
- const res = await fetch(`/api/workflows/definitions/${encodeURIComponent(detail.definition.workflowId)}/run`, {
239
- method: 'POST',
240
- headers: { 'content-type': 'application/json' },
241
- body: JSON.stringify({
242
- params,
243
- chatBinding: {
244
- chatId: chatIdEl.value.trim(),
245
- larkAppId: appIdEl.value.trim(),
246
- },
247
- }),
248
- });
249
- if (res.status === 401)
250
- throw new Error(t('catalog.writeAccess'));
251
- const result = (await res.json().catch(() => ({})));
252
- if (!res.ok || !result.ok) {
253
- if (result.issues?.length) {
254
- issueEl.hidden = false;
255
- issueEl.innerHTML = `<strong>${escapeHtml(t('catalog.invalidParams'))}</strong><ul>${result.issues.map((issue) => `<li>${escapeHtml(t('catalog.issue', {
256
- path: issue.path.length ? issue.path.join('.') : '(root)',
257
- message: issue.message,
258
- }))}</li>`).join('')}</ul>`;
259
- }
260
- throw new Error(result.hint ?? result.message ?? result.error ?? t('catalog.runHttp', { status: res.status }));
261
- }
262
- setRunStatus(t('catalog.runStarted'));
263
- if (result.runId)
264
- location.hash = `#/workflows/${encodeURIComponent(result.runId)}`;
265
- }
266
- catch (err) {
267
- setError(err?.message ?? String(err));
268
- }
269
- finally {
270
- running = false;
271
- submit.disabled = false;
272
- submit.textContent = t('catalog.run');
273
- }
274
- }
275
- function attachRunForm() {
276
- const form = bodyEl.querySelector('#catalog-run-form');
277
- form?.addEventListener('submit', (ev) => {
278
- ev.preventDefault();
279
- void runWorkflow();
280
- });
281
- }
282
- async function load() {
283
- try {
284
- const res = await fetch(`/api/workflows/definitions/${encodeURIComponent(workflowId)}`);
285
- if (res.status === 404)
286
- throw new Error('unknown_workflow');
287
- if (!res.ok)
288
- throw new Error(`HTTP ${res.status}`);
289
- detail = (await res.json());
290
- setError(null);
291
- render();
292
- }
293
- catch (err) {
294
- setError(t('catalog.definitionLoadFailed', { error: err?.message ?? String(err) }));
295
- subtitle.textContent = t('workflow.detail.loadFailed');
296
- }
297
- }
298
- void load().then(() => {
299
- if (disposed)
300
- return;
301
- });
302
- return () => {
303
- disposed = true;
304
- };
305
- }
306
- function renderParams(params) {
307
- const entries = Object.entries(params ?? {});
308
- if (entries.length === 0) {
309
- return `<div class="muted">${escapeHtml(t('catalog.noParams'))}</div>`;
310
- }
311
- return `<div class="catalog-param-list">${entries.map(([name, def]) => `
312
- <article class="catalog-param">
313
- <header>
314
- <code>${escapeHtml(name)}</code>
315
- <span class="wf-status">${escapeHtml(def.required ? t('catalog.required') : t('catalog.optional'))}</span>
316
- <span class="muted">${escapeHtml(def.type)}${def.format ? ` · ${escapeHtml(def.format)}` : ''}</span>
317
- </header>
318
- ${def.description ? `<div class="muted">${escapeHtml(t('catalog.description'))}: ${escapeHtml(def.description)}</div>` : ''}
319
- ${'default' in def ? `<pre class="wf-io-pre">${escapeHtml(`${t('catalog.default')}: ${JSON.stringify(def.default, null, 2)}`)}</pre>` : ''}
320
- </article>
321
- `).join('')}</div>`;
322
- }
323
- //# sourceMappingURL=workflow-catalog.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow-catalog.js","sourceRoot":"","sources":["../../../src/dashboard/web/workflow-catalog.ts"],"names":[],"mappings":"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"}