@loom-framework/core 0.1.0-alpha.154 → 0.1.0-alpha.156
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.
- package/builtin-skills/app-skill/references/process-builder.md +229 -1
- package/builtin-skills/app-skill/references/process.md +76 -4
- package/dist/backend/ai/engine.d.ts.map +1 -1
- package/dist/backend/ai/engine.js +3 -0
- package/dist/backend/ai/engine.js.map +1 -1
- package/dist/backend/index.d.ts.map +1 -1
- package/dist/backend/index.js +1 -0
- package/dist/backend/index.js.map +1 -1
- package/dist/backend/process/engine.d.ts +18 -0
- package/dist/backend/process/engine.d.ts.map +1 -1
- package/dist/backend/process/engine.js +76 -0
- package/dist/backend/process/engine.js.map +1 -1
- package/dist/backend/process/metrics-store.d.ts +30 -0
- package/dist/backend/process/metrics-store.d.ts.map +1 -0
- package/dist/backend/process/metrics-store.js +106 -0
- package/dist/backend/process/metrics-store.js.map +1 -0
- package/dist/backend/process/queue.d.ts +2 -0
- package/dist/backend/process/queue.d.ts.map +1 -1
- package/dist/backend/process/queue.js +14 -0
- package/dist/backend/process/queue.js.map +1 -1
- package/dist/backend/routes/process-routes.d.ts.map +1 -1
- package/dist/backend/routes/process-routes.js +67 -1
- package/dist/backend/routes/process-routes.js.map +1 -1
- package/dist/cli/commands/process.d.ts.map +1 -1
- package/dist/cli/commands/process.js +88 -0
- package/dist/cli/commands/process.js.map +1 -1
- package/dist/cli/templates/process-management-page.d.ts.map +1 -1
- package/dist/cli/templates/process-management-page.js +182 -104
- package/dist/cli/templates/process-management-page.js.map +1 -1
- package/dist/types/ai.d.ts +6 -0
- package/dist/types/ai.d.ts.map +1 -1
- package/dist/types/process.d.ts +43 -1
- package/dist/types/process.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* theme tokens, showLine/blockNode tree, i18n, Card wrapper.
|
|
6
6
|
*/
|
|
7
7
|
export function processManagementPageTemplate() {
|
|
8
|
-
return `import React, { useState, useEffect, useCallback, useMemo, useContext } from 'react';
|
|
8
|
+
return `import React, { useState, useEffect, useCallback, useMemo, useContext, useRef } from 'react';
|
|
9
9
|
import {
|
|
10
10
|
Card,
|
|
11
11
|
Tree,
|
|
@@ -51,13 +51,15 @@ import {
|
|
|
51
51
|
SkillFileViewer,
|
|
52
52
|
fetchProcesses, fetchProcess,
|
|
53
53
|
fetchProcessLogs, fetchProcessMetrics, fetchProcessMetricsConfig,
|
|
54
|
+
fetchProcessMetricsSnapshots, fetchProcessMetricsViewConfig,
|
|
54
55
|
fetchProcessFiles, fetchProcessFileContent,
|
|
55
56
|
runProcess, pauseProcess, resumeProcess, deleteProcess,
|
|
56
57
|
getFileIcon,
|
|
57
58
|
AIContext,
|
|
58
59
|
} from '@loom-framework/frontend-antd';
|
|
59
60
|
import type {
|
|
60
|
-
ProcessInfo, ProcessLogEntry, ProcessMetricsAggregate,
|
|
61
|
+
ProcessInfo, ProcessLogEntry, ProcessMetricsAggregate, FileContent,
|
|
62
|
+
ProcessMetricSnapshot, ProcessMetricsViewConfig,
|
|
61
63
|
} from '@loom-framework/frontend-antd';
|
|
62
64
|
import { DashboardChart } from '@loom-framework/frontend-antd';
|
|
63
65
|
|
|
@@ -85,7 +87,6 @@ registerMessages('zh-CN', {
|
|
|
85
87
|
'process.pause': '暂停',
|
|
86
88
|
'process.resume': '恢复',
|
|
87
89
|
'process.overview': '概览',
|
|
88
|
-
'process.files': '文件',
|
|
89
90
|
'process.logs': '日志',
|
|
90
91
|
'process.metrics': '指标',
|
|
91
92
|
'process.name': '名称',
|
|
@@ -97,10 +98,10 @@ registerMessages('zh-CN', {
|
|
|
97
98
|
'process.modeFull': '完整',
|
|
98
99
|
'process.statusIdle': '空闲',
|
|
99
100
|
'process.statusRunning': '运行中',
|
|
101
|
+
'process.statusBusy': '繁忙',
|
|
100
102
|
'process.statusPaused': '已暂停',
|
|
101
103
|
'process.statusError': '错误',
|
|
102
104
|
'process.noProcesses': '暂无过程',
|
|
103
|
-
'process.noFiles': '轻量过程没有文件',
|
|
104
105
|
'process.noMetrics': '未配置指标',
|
|
105
106
|
'process.noLogs': '暂无执行日志',
|
|
106
107
|
'process.queue': '执行队列',
|
|
@@ -131,10 +132,6 @@ registerMessages('zh-CN', {
|
|
|
131
132
|
'process.selectToView': '选择左侧过程或文件以查看详情',
|
|
132
133
|
'process.preview': '预览',
|
|
133
134
|
'process.source': '源码',
|
|
134
|
-
'process.view': '查看',
|
|
135
|
-
'process.colName': '名称',
|
|
136
|
-
'process.colSize': '大小',
|
|
137
|
-
'process.colAction': '操作',
|
|
138
135
|
'process.colDate': '日期',
|
|
139
136
|
'process.colTotal': '总执行',
|
|
140
137
|
'process.colCompleted': '成功',
|
|
@@ -146,6 +143,12 @@ registerMessages('zh-CN', {
|
|
|
146
143
|
'process.colResult': '结果',
|
|
147
144
|
'process.colTime': '时间',
|
|
148
145
|
'process.viewSession': '查看 AI 会话',
|
|
146
|
+
'process.businessMetrics': '业务指标',
|
|
147
|
+
'process.operationalMetrics': '运行统计',
|
|
148
|
+
'process.noBusinessMetrics': '暂无业务指标数据',
|
|
149
|
+
'process.metricValue': '指标值',
|
|
150
|
+
'process.metricTarget': '目标',
|
|
151
|
+
'process.metricTrend': '趋势',
|
|
149
152
|
});
|
|
150
153
|
|
|
151
154
|
registerMessages('en-US', {
|
|
@@ -157,7 +160,6 @@ registerMessages('en-US', {
|
|
|
157
160
|
'process.pause': 'Pause',
|
|
158
161
|
'process.resume': 'Resume',
|
|
159
162
|
'process.overview': 'Overview',
|
|
160
|
-
'process.files': 'Files',
|
|
161
163
|
'process.logs': 'Logs',
|
|
162
164
|
'process.metrics': 'Metrics',
|
|
163
165
|
'process.name': 'Name',
|
|
@@ -169,10 +171,10 @@ registerMessages('en-US', {
|
|
|
169
171
|
'process.modeFull': 'Full',
|
|
170
172
|
'process.statusIdle': 'Idle',
|
|
171
173
|
'process.statusRunning': 'Running',
|
|
174
|
+
'process.statusBusy': 'Busy',
|
|
172
175
|
'process.statusPaused': 'Paused',
|
|
173
176
|
'process.statusError': 'Error',
|
|
174
177
|
'process.noProcesses': 'No processes',
|
|
175
|
-
'process.noFiles': 'Lightweight process has no files',
|
|
176
178
|
'process.noMetrics': 'No metrics configured',
|
|
177
179
|
'process.noLogs': 'No execution logs',
|
|
178
180
|
'process.queue': 'Execution Queue',
|
|
@@ -203,10 +205,6 @@ registerMessages('en-US', {
|
|
|
203
205
|
'process.selectToView': 'Select a process or file to view details',
|
|
204
206
|
'process.preview': 'Preview',
|
|
205
207
|
'process.source': 'Source',
|
|
206
|
-
'process.view': 'View',
|
|
207
|
-
'process.colName': 'Name',
|
|
208
|
-
'process.colSize': 'Size',
|
|
209
|
-
'process.colAction': 'Action',
|
|
210
208
|
'process.colDate': 'Date',
|
|
211
209
|
'process.colTotal': 'Total',
|
|
212
210
|
'process.colCompleted': 'Completed',
|
|
@@ -218,11 +216,18 @@ registerMessages('en-US', {
|
|
|
218
216
|
'process.colResult': 'Result',
|
|
219
217
|
'process.colTime': 'Time',
|
|
220
218
|
'process.viewSession': 'View AI Session',
|
|
219
|
+
'process.businessMetrics': 'Business Metrics',
|
|
220
|
+
'process.operationalMetrics': 'Operational Metrics',
|
|
221
|
+
'process.noBusinessMetrics': 'No business metrics data',
|
|
222
|
+
'process.metricValue': 'Value',
|
|
223
|
+
'process.metricTarget': 'Target',
|
|
224
|
+
'process.metricTrend': 'Trend',
|
|
221
225
|
});
|
|
222
226
|
|
|
223
227
|
const STATUS_COLORS: Record<string, string> = {
|
|
224
228
|
idle: 'default',
|
|
225
229
|
running: 'processing',
|
|
230
|
+
busy: 'orange',
|
|
226
231
|
paused: 'warning',
|
|
227
232
|
error: 'error',
|
|
228
233
|
};
|
|
@@ -230,6 +235,7 @@ const STATUS_COLORS: Record<string, string> = {
|
|
|
230
235
|
const STATUS_ICONS: Record<string, React.ReactNode> = {
|
|
231
236
|
idle: <ClockCircleOutlined />,
|
|
232
237
|
running: <PlayCircleOutlined />,
|
|
238
|
+
busy: <ThunderboltOutlined />,
|
|
233
239
|
paused: <PauseCircleOutlined />,
|
|
234
240
|
error: <ExclamationCircleOutlined />,
|
|
235
241
|
};
|
|
@@ -253,13 +259,15 @@ export default function ProcessManagementPage(): React.ReactElement {
|
|
|
253
259
|
const [expandedKeys, setExpandedKeys] = useState<React.Key[]>([]);
|
|
254
260
|
const [selectedProcess, setSelectedProcess] = useState<(ProcessInfo & { status?: string }) | null>(null);
|
|
255
261
|
const [fileContent, setFileContent] = useState<FileContent | null>(null);
|
|
262
|
+
const [processMdContent, setProcessMdContent] = useState<FileContent | null>(null);
|
|
256
263
|
const [loading, setLoading] = useState(false);
|
|
257
264
|
const [viewMode, setViewMode] = useState<'preview' | 'source'>('preview');
|
|
258
265
|
const [activeTab, setActiveTab] = useState('overview');
|
|
259
266
|
const [logs, setLogs] = useState<ProcessLogEntry[]>([]);
|
|
260
267
|
const [metrics, setMetrics] = useState<ProcessMetricsAggregate[]>([]);
|
|
261
268
|
const [metricsConfig, setMetricsConfig] = useState<Record<string, unknown>[]>([]);
|
|
262
|
-
const [
|
|
269
|
+
const [metricSnapshots, setMetricSnapshots] = useState<ProcessMetricSnapshot[]>([]);
|
|
270
|
+
const [metricsViewConfig, setMetricsViewConfig] = useState<ProcessMetricsViewConfig | null>(null);
|
|
263
271
|
const [executing, setExecuting] = useState(false);
|
|
264
272
|
|
|
265
273
|
const buildTreeData = useCallback((processList: ProcessInfo[]): ProcessTreeNode[] => {
|
|
@@ -319,6 +327,27 @@ export default function ProcessManagementPage(): React.ReactElement {
|
|
|
319
327
|
|
|
320
328
|
useEffect(() => { loadProcesses(); }, [loadProcesses]);
|
|
321
329
|
|
|
330
|
+
// Auto-refresh every 5 seconds, pause when tab is hidden
|
|
331
|
+
const pollRef = useRef<ReturnType<typeof setInterval> | null>(null);
|
|
332
|
+
useEffect(() => {
|
|
333
|
+
const poll = () => {
|
|
334
|
+
if (document.visibilityState === 'visible') {
|
|
335
|
+
loadProcesses();
|
|
336
|
+
}
|
|
337
|
+
};
|
|
338
|
+
pollRef.current = setInterval(poll, 5000);
|
|
339
|
+
const handleVisibility = () => {
|
|
340
|
+
if (document.visibilityState === 'visible') {
|
|
341
|
+
poll(); // Immediate refresh when tab becomes visible
|
|
342
|
+
}
|
|
343
|
+
};
|
|
344
|
+
document.addEventListener('visibilitychange', handleVisibility);
|
|
345
|
+
return () => {
|
|
346
|
+
if (pollRef.current) clearInterval(pollRef.current);
|
|
347
|
+
document.removeEventListener('visibilitychange', handleVisibility);
|
|
348
|
+
};
|
|
349
|
+
}, [loadProcesses]);
|
|
350
|
+
|
|
322
351
|
const loadDirChildren = useCallback(async (processName: string, dirName: string): Promise<ProcessTreeNode[]> => {
|
|
323
352
|
const data = await fetchProcessFiles(processName);
|
|
324
353
|
const dirFiles = data.filter((f) => f.path.startsWith(\`\${dirName}/\`) && !f.isDirectory);
|
|
@@ -399,11 +428,19 @@ export default function ProcessManagementPage(): React.ReactElement {
|
|
|
399
428
|
const data = await fetchProcess(name);
|
|
400
429
|
setSelectedProcess(data);
|
|
401
430
|
setFileContent(null);
|
|
431
|
+
setProcessMdContent(null);
|
|
402
432
|
setLogs([]);
|
|
403
433
|
setMetrics([]);
|
|
404
434
|
setMetricsConfig([]);
|
|
405
|
-
|
|
435
|
+
setMetricSnapshots([]);
|
|
436
|
+
setMetricsViewConfig(null);
|
|
406
437
|
setActiveTab('overview');
|
|
438
|
+
if (data.hasProcessFile) {
|
|
439
|
+
try {
|
|
440
|
+
const mdContent = await fetchProcessFileContent(name, 'PROCESS.md');
|
|
441
|
+
setProcessMdContent({ content: mdContent, path: 'PROCESS.md' });
|
|
442
|
+
} catch { /* ignore */ }
|
|
443
|
+
}
|
|
407
444
|
} catch {
|
|
408
445
|
// error handled silently
|
|
409
446
|
}
|
|
@@ -423,14 +460,12 @@ export default function ProcessManagementPage(): React.ReactElement {
|
|
|
423
460
|
setLoading(true);
|
|
424
461
|
try {
|
|
425
462
|
if (node.filePath === 'PROCESS.md') {
|
|
426
|
-
|
|
427
|
-
setSelectedProcess(data);
|
|
428
|
-
setFileContent(null);
|
|
429
|
-
setActiveTab('overview');
|
|
463
|
+
await selectProcess(node.processName);
|
|
430
464
|
} else {
|
|
431
465
|
const content = await fetchProcessFileContent(node.processName, node.filePath);
|
|
432
466
|
setFileContent({ content, path: node.filePath });
|
|
433
467
|
setSelectedProcess(null);
|
|
468
|
+
setProcessMdContent(null);
|
|
434
469
|
}
|
|
435
470
|
} catch {
|
|
436
471
|
// error handled silently
|
|
@@ -450,12 +485,15 @@ export default function ProcessManagementPage(): React.ReactElement {
|
|
|
450
485
|
try {
|
|
451
486
|
const result = await runProcess(selectedProcess.name);
|
|
452
487
|
message.success(t('process.runTriggered', { runId: result.runId }));
|
|
488
|
+
// Immediate refresh to show Running status
|
|
489
|
+
await loadProcesses();
|
|
490
|
+
selectProcess(selectedProcess.name);
|
|
453
491
|
} catch {
|
|
454
492
|
message.error(t('process.runFailed'));
|
|
455
493
|
} finally {
|
|
456
494
|
setExecuting(false);
|
|
457
495
|
}
|
|
458
|
-
}, [selectedProcess, t]);
|
|
496
|
+
}, [selectedProcess, loadProcesses, selectProcess, t]);
|
|
459
497
|
|
|
460
498
|
const handlePause = useCallback(async () => {
|
|
461
499
|
if (!selectedProcess) return;
|
|
@@ -505,20 +543,16 @@ export default function ProcessManagementPage(): React.ReactElement {
|
|
|
505
543
|
const loadMetrics = useCallback(async () => {
|
|
506
544
|
if (!selectedProcess) return;
|
|
507
545
|
try {
|
|
508
|
-
const [m, c] = await Promise.all([
|
|
546
|
+
const [m, c, snapshots, viewConfig] = await Promise.all([
|
|
509
547
|
fetchProcessMetrics(selectedProcess.name),
|
|
510
548
|
fetchProcessMetricsConfig(selectedProcess.name),
|
|
549
|
+
fetchProcessMetricsSnapshots(selectedProcess.name),
|
|
550
|
+
fetchProcessMetricsViewConfig(selectedProcess.name),
|
|
511
551
|
]);
|
|
512
552
|
setMetrics(m);
|
|
513
553
|
setMetricsConfig(c);
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
const loadFiles = useCallback(async () => {
|
|
518
|
-
if (!selectedProcess) return;
|
|
519
|
-
try {
|
|
520
|
-
const data = await fetchProcessFiles(selectedProcess.name);
|
|
521
|
-
setFiles(data);
|
|
554
|
+
setMetricSnapshots(snapshots);
|
|
555
|
+
setMetricsViewConfig(viewConfig);
|
|
522
556
|
} catch { /* ignore */ }
|
|
523
557
|
}, [selectedProcess]);
|
|
524
558
|
|
|
@@ -526,8 +560,7 @@ export default function ProcessManagementPage(): React.ReactElement {
|
|
|
526
560
|
setActiveTab(key);
|
|
527
561
|
if (key === 'logs') loadLogs();
|
|
528
562
|
if (key === 'metrics') loadMetrics();
|
|
529
|
-
|
|
530
|
-
}, [loadLogs, loadMetrics, loadFiles]);
|
|
563
|
+
}, [loadLogs, loadMetrics]);
|
|
531
564
|
|
|
532
565
|
const rightTitle = useMemo(() => {
|
|
533
566
|
if (selectedProcess) return \`\${selectedProcess.name}\`;
|
|
@@ -537,8 +570,8 @@ export default function ProcessManagementPage(): React.ReactElement {
|
|
|
537
570
|
|
|
538
571
|
// Build status tag for tree node
|
|
539
572
|
const getStatusColor = useCallback((proc: ProcessInfo) => {
|
|
540
|
-
|
|
541
|
-
return 'default';
|
|
573
|
+
const status = proc.status ?? 'idle';
|
|
574
|
+
return STATUS_COLORS[status] ?? 'default';
|
|
542
575
|
}, []);
|
|
543
576
|
|
|
544
577
|
return (
|
|
@@ -602,9 +635,15 @@ export default function ProcessManagementPage(): React.ReactElement {
|
|
|
602
635
|
{node.isProcess && (() => {
|
|
603
636
|
const proc = processes.find(p => p.name === node.processName);
|
|
604
637
|
if (!proc) return null;
|
|
638
|
+
const status = proc.status ?? 'idle';
|
|
639
|
+
const statusLabel = status === 'running' ? t('process.statusRunning')
|
|
640
|
+
: status === 'busy' ? t('process.statusBusy')
|
|
641
|
+
: status === 'paused' ? t('process.statusPaused')
|
|
642
|
+
: status === 'error' ? t('process.statusError')
|
|
643
|
+
: t('process.statusIdle');
|
|
605
644
|
return (
|
|
606
|
-
<Tag color={
|
|
607
|
-
{
|
|
645
|
+
<Tag color={STATUS_COLORS[status]} icon={STATUS_ICONS[status]} style={{ fontSize: 11, lineHeight: '16px', padding: '0 4px', marginRight: 0 }}>
|
|
646
|
+
{statusLabel}
|
|
608
647
|
</Tag>
|
|
609
648
|
);
|
|
610
649
|
})()}
|
|
@@ -621,7 +660,7 @@ export default function ProcessManagementPage(): React.ReactElement {
|
|
|
621
660
|
title={
|
|
622
661
|
<Flex align="center" gap="small">
|
|
623
662
|
<span>{rightTitle}</span>
|
|
624
|
-
{(
|
|
663
|
+
{((fileContent && !selectedProcess) || (selectedProcess && processMdContent)) && (
|
|
625
664
|
<Segmented
|
|
626
665
|
size="small"
|
|
627
666
|
options={[
|
|
@@ -648,7 +687,14 @@ export default function ProcessManagementPage(): React.ReactElement {
|
|
|
648
687
|
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
|
|
649
688
|
<Space>
|
|
650
689
|
<Tag color={STATUS_COLORS[selectedProcess.status ?? 'idle']} icon={STATUS_ICONS[selectedProcess.status ?? 'idle']}>
|
|
651
|
-
{
|
|
690
|
+
{(() => {
|
|
691
|
+
const s = selectedProcess.status ?? 'idle';
|
|
692
|
+
return s === 'running' ? t('process.statusRunning')
|
|
693
|
+
: s === 'busy' ? t('process.statusBusy')
|
|
694
|
+
: s === 'paused' ? t('process.statusPaused')
|
|
695
|
+
: s === 'error' ? t('process.statusError')
|
|
696
|
+
: t('process.statusIdle');
|
|
697
|
+
})()}
|
|
652
698
|
</Tag>
|
|
653
699
|
<Tag>{selectedProcess.hasProcessFile ? t('process.modeFull') : t('process.modeLightweight')}</Tag>
|
|
654
700
|
</Space>
|
|
@@ -678,51 +724,21 @@ export default function ProcessManagementPage(): React.ReactElement {
|
|
|
678
724
|
...(selectedProcess.prompt ? [{ key: 'prompt', label: t('process.prompt'), children: <Text code style={{ whiteSpace: 'pre-wrap', fontSize: 12, maxWidth: 400, display: 'inline-block' }}>{selectedProcess.prompt}</Text> }] : []),
|
|
679
725
|
]}
|
|
680
726
|
/>
|
|
727
|
+
|
|
728
|
+
{selectedProcess.hasProcessFile && processMdContent && (
|
|
729
|
+
<SkillFileViewer
|
|
730
|
+
skillDetail={null}
|
|
731
|
+
fileContent={processMdContent}
|
|
732
|
+
viewMode={viewMode}
|
|
733
|
+
onViewModeChange={setViewMode}
|
|
734
|
+
mode={mode}
|
|
735
|
+
token={token}
|
|
736
|
+
t={t}
|
|
737
|
+
/>
|
|
738
|
+
)}
|
|
681
739
|
</Space>
|
|
682
740
|
),
|
|
683
741
|
},
|
|
684
|
-
...(selectedProcess.hasProcessFile ? [{
|
|
685
|
-
key: 'files',
|
|
686
|
-
label: t('process.files'),
|
|
687
|
-
children: fileContent ? (
|
|
688
|
-
<SkillFileViewer
|
|
689
|
-
skillDetail={null}
|
|
690
|
-
fileContent={fileContent}
|
|
691
|
-
viewMode={viewMode}
|
|
692
|
-
onViewModeChange={setViewMode}
|
|
693
|
-
mode={mode}
|
|
694
|
-
token={token}
|
|
695
|
-
t={t}
|
|
696
|
-
/>
|
|
697
|
-
) : (
|
|
698
|
-
<Table
|
|
699
|
-
dataSource={files}
|
|
700
|
-
rowKey="path"
|
|
701
|
-
size="small"
|
|
702
|
-
pagination={false}
|
|
703
|
-
columns={[
|
|
704
|
-
{ title: t('process.colName'), dataIndex: 'name', key: 'name' },
|
|
705
|
-
{ title: t('process.colSize'), dataIndex: 'size', key: 'size', render: (s: number) => s > 0 ? \`\${(s / 1024).toFixed(1)} KB\` : '-' },
|
|
706
|
-
{
|
|
707
|
-
title: t('process.colAction'), key: 'action', width: 80,
|
|
708
|
-
render: (_: unknown, record: ProcessFileInfo) => !record.isDirectory && (
|
|
709
|
-
<Button type="link" size="small" onClick={async () => {
|
|
710
|
-
if (!selectedProcess) return;
|
|
711
|
-
try {
|
|
712
|
-
const c = await fetchProcessFileContent(selectedProcess.name, record.path);
|
|
713
|
-
setFileContent({ content: c, path: record.path });
|
|
714
|
-
} catch { /* ignore */ }
|
|
715
|
-
}}>{t('process.view')}</Button>
|
|
716
|
-
),
|
|
717
|
-
},
|
|
718
|
-
]}
|
|
719
|
-
/>
|
|
720
|
-
),
|
|
721
|
-
}] : [{
|
|
722
|
-
key: 'files',
|
|
723
|
-
label: t('process.files'),
|
|
724
|
-
children: <Empty description={t('process.noFiles')} />,
|
|
725
|
-
}]),
|
|
726
742
|
{
|
|
727
743
|
key: 'logs',
|
|
728
744
|
label: t('process.logs'),
|
|
@@ -764,35 +780,97 @@ export default function ProcessManagementPage(): React.ReactElement {
|
|
|
764
780
|
</Space>
|
|
765
781
|
),
|
|
766
782
|
},
|
|
767
|
-
{
|
|
783
|
+
...(selectedProcess.hasProcessFile ? [{
|
|
768
784
|
key: 'metrics',
|
|
769
785
|
label: t('process.metrics'),
|
|
770
|
-
children:
|
|
771
|
-
<
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
786
|
+
children: (
|
|
787
|
+
<Space direction="vertical" style={{ width: '100%' }} size="large">
|
|
788
|
+
{/* Business Metrics — agent-reported */}
|
|
789
|
+
{metricsViewConfig && metricsViewConfig.metrics.length > 0 && (
|
|
790
|
+
<div>
|
|
791
|
+
<Text strong style={{ fontSize: 14, marginBottom: 8, display: 'block' }}>{t('process.businessMetrics')}</Text>
|
|
792
|
+
<div style={{ display: 'grid', gridTemplateColumns: \`repeat(auto-fill, minmax(200px, 1fr))\`, gap: 12, marginBottom: 16 }}>
|
|
793
|
+
{metricsViewConfig.metrics.map((m) => {
|
|
794
|
+
const latestSnapshot = [...metricSnapshots].filter(s => s.metricName === m.metricName).sort((a, b) => b.timestamp.localeCompare(a.timestamp))[0];
|
|
795
|
+
const trend = (() => {
|
|
796
|
+
const ms = metricSnapshots.filter(s => s.metricName === m.metricName).sort((a, b) => a.timestamp.localeCompare(b.timestamp));
|
|
797
|
+
if (ms.length < 2) return null;
|
|
798
|
+
const diff = ms[ms.length - 1]!.value - ms[0]!.value;
|
|
799
|
+
if (diff === 0) return { color: 'default', label: '→' };
|
|
800
|
+
const good = m.direction === 'decreasing' ? diff < 0 : m.direction === 'increasing' ? diff > 0 : true;
|
|
801
|
+
return { color: good ? 'success' : 'error', label: diff > 0 ? '↑' : '↓' };
|
|
802
|
+
})();
|
|
803
|
+
return (
|
|
804
|
+
<Card key={m.metricName} size="small">
|
|
805
|
+
<div style={{ fontSize: 12, color: token.colorTextSecondary }}>{m.title}</div>
|
|
806
|
+
<div style={{ fontSize: 24, fontWeight: 600, marginTop: 4 }}>
|
|
807
|
+
{latestSnapshot ? \`\${latestSnapshot.value}\${latestSnapshot.unit ?? m.unit ?? ''}\` : '-'}
|
|
808
|
+
{trend && <Tag color={trend.color} style={{ marginLeft: 6, fontSize: 12 }}>{trend.label}</Tag>}
|
|
809
|
+
</div>
|
|
810
|
+
{m.target !== undefined && <div style={{ fontSize: 11, color: token.colorTextTertiary }}>Target: {m.target}{m.unit ?? ''}</div>}
|
|
811
|
+
</Card>
|
|
812
|
+
);
|
|
813
|
+
})}
|
|
814
|
+
</div>
|
|
815
|
+
{metricsViewConfig.charts.length > 0 && metricSnapshots.length > 0 && (
|
|
816
|
+
<div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>
|
|
817
|
+
{metricsViewConfig.charts.map((chart, i) => {
|
|
818
|
+
const chartMetricName = (chart as Record<string, unknown>).metricName as string | undefined;
|
|
819
|
+
const chartTitle = (chart as Record<string, unknown>).title as string | undefined;
|
|
820
|
+
const filteredSnapshots = chartMetricName
|
|
821
|
+
? metricSnapshots
|
|
822
|
+
.filter(s => s.metricName === chartMetricName)
|
|
823
|
+
.sort((a, b) => a.timestamp.localeCompare(b.timestamp))
|
|
824
|
+
: metricSnapshots;
|
|
825
|
+
const { metricName: _mn, title: _t, ...chartSpec } = chart as Record<string, unknown>;
|
|
826
|
+
return (
|
|
827
|
+
<Card key={i} size="small" {...(chartTitle ? { title: chartTitle } : {})}>
|
|
828
|
+
<DashboardChart spec={{ ...chartSpec, data: filteredSnapshots }} />
|
|
829
|
+
</Card>
|
|
830
|
+
);
|
|
831
|
+
})}
|
|
832
|
+
</div>
|
|
833
|
+
)}
|
|
834
|
+
</div>
|
|
792
835
|
)}
|
|
836
|
+
{!metricsViewConfig && metricSnapshots.length > 0 && (
|
|
837
|
+
<div>
|
|
838
|
+
<Text strong style={{ fontSize: 14, marginBottom: 8, display: 'block' }}>{t('process.businessMetrics')}</Text>
|
|
839
|
+
<Text type="secondary">{t('process.noBusinessMetrics')}</Text>
|
|
840
|
+
</div>
|
|
841
|
+
)}
|
|
842
|
+
{/* Operational Metrics — system aggregates */}
|
|
843
|
+
<div>
|
|
844
|
+
<Text strong style={{ fontSize: 14, marginBottom: 8, display: 'block' }}>{t('process.operationalMetrics')}</Text>
|
|
845
|
+
{metricsConfig.length === 0 && metrics.length === 0 ? (
|
|
846
|
+
<Empty description={t('process.noMetrics')} />
|
|
847
|
+
) : (
|
|
848
|
+
<>
|
|
849
|
+
{metricsConfig.map((widget, i) => (
|
|
850
|
+
<DashboardChart key={\`op-\${i}\`} spec={{ ...widget, data: metrics }} />
|
|
851
|
+
))}
|
|
852
|
+
{metrics.length > 0 && (
|
|
853
|
+
<Table
|
|
854
|
+
dataSource={metrics}
|
|
855
|
+
rowKey="date"
|
|
856
|
+
size="small"
|
|
857
|
+
pagination={{ pageSize: 7 }}
|
|
858
|
+
columns={[
|
|
859
|
+
{ title: t('process.colDate'), dataIndex: 'date', key: 'date' },
|
|
860
|
+
{ title: t('process.colTotal'), dataIndex: 'totalRuns', key: 'totalRuns' },
|
|
861
|
+
{ title: t('process.colCompleted'), dataIndex: 'completedRuns', key: 'completedRuns' },
|
|
862
|
+
{ title: t('process.colFailed'), dataIndex: 'failedRuns', key: 'failedRuns' },
|
|
863
|
+
{ title: t('process.colTimeout'), dataIndex: 'timeoutRuns', key: 'timeoutRuns' },
|
|
864
|
+
{ title: t('process.colAvgDuration'), dataIndex: 'avgDurationMs', key: 'avgDurationMs', render: (ms: number) => \`\${(ms / 1000).toFixed(1)}s\` },
|
|
865
|
+
]}
|
|
866
|
+
/>
|
|
867
|
+
)}
|
|
868
|
+
</>
|
|
869
|
+
)}
|
|
870
|
+
</div>
|
|
793
871
|
</Space>
|
|
794
872
|
),
|
|
795
|
-
},
|
|
873
|
+
}] : []),
|
|
796
874
|
]}
|
|
797
875
|
/>
|
|
798
876
|
) : fileContent ? (
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-management-page.js","sourceRoot":"","sources":["../../../src/cli/templates/process-management-page.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,UAAU,6BAA6B;IAC3C,OAAO
|
|
1
|
+
{"version":3,"file":"process-management-page.js","sourceRoot":"","sources":["../../../src/cli/templates/process-management-page.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,UAAU,6BAA6B;IAC3C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA43BR,CAAC;AACF,CAAC"}
|
package/dist/types/ai.d.ts
CHANGED
|
@@ -44,6 +44,12 @@ export interface AICallOptions {
|
|
|
44
44
|
model?: string;
|
|
45
45
|
/** JWT token for the authenticated user, passed as LOOM_TOKEN env to child process */
|
|
46
46
|
userToken?: string;
|
|
47
|
+
/** Server URL for process agent CLI commands, passed as LOOM_SERVER env */
|
|
48
|
+
serverUrl?: string;
|
|
49
|
+
/** Process name, passed as LOOM_PROCESS_NAME env */
|
|
50
|
+
processName?: string;
|
|
51
|
+
/** Run ID, passed as LOOM_RUN_ID env */
|
|
52
|
+
runId?: string;
|
|
47
53
|
}
|
|
48
54
|
export interface AIUsage {
|
|
49
55
|
inputTokens: number;
|
package/dist/types/ai.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/types/ai.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iGAAiG;IACjG,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,uCAAuC;IACvC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/types/ai.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iGAAiG;IACjG,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,uCAAuC;IACvC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC;IAC/F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;CACvE"}
|
package/dist/types/process.d.ts
CHANGED
|
@@ -46,7 +46,7 @@ export interface ProcessDefinition {
|
|
|
46
46
|
updatedAt: string;
|
|
47
47
|
}
|
|
48
48
|
/** Runtime status of a process (computed, not stored) */
|
|
49
|
-
export type ProcessStatus = 'idle' | 'running' | 'paused' | 'error';
|
|
49
|
+
export type ProcessStatus = 'idle' | 'running' | 'busy' | 'paused' | 'error';
|
|
50
50
|
/** Queue entry for a triggered execution */
|
|
51
51
|
export interface ProcessQueueEntry {
|
|
52
52
|
/** Unique run ID */
|
|
@@ -103,4 +103,46 @@ export interface ProcessMetricsAggregate {
|
|
|
103
103
|
lastRunAt: string | null;
|
|
104
104
|
lastStatus: string | null;
|
|
105
105
|
}
|
|
106
|
+
/** Agent-reported metric snapshot — one data point per metric per run */
|
|
107
|
+
export interface ProcessMetricSnapshot {
|
|
108
|
+
/** ISO timestamp when the metric was collected */
|
|
109
|
+
timestamp: string;
|
|
110
|
+
/** Human-readable metric name, e.g. "错题 review 率" */
|
|
111
|
+
metricName: string;
|
|
112
|
+
/** Numeric value */
|
|
113
|
+
value: number;
|
|
114
|
+
/** Optional dimension labels, e.g. { subject: "数学" } */
|
|
115
|
+
dimensions?: Record<string, string>;
|
|
116
|
+
/** Which execution run this snapshot belongs to */
|
|
117
|
+
runId: string;
|
|
118
|
+
/** Optional target value for goal-line display */
|
|
119
|
+
target?: number;
|
|
120
|
+
/** Optional unit label, e.g. "%", "条", "次" */
|
|
121
|
+
unit?: string;
|
|
122
|
+
}
|
|
123
|
+
/** View metadata for a single metric */
|
|
124
|
+
export interface ProcessMetricView {
|
|
125
|
+
metricName: string;
|
|
126
|
+
/** Display title */
|
|
127
|
+
title: string;
|
|
128
|
+
/** Description */
|
|
129
|
+
description?: string;
|
|
130
|
+
/** Chart type hint: line, bar, gauge, number, pie, ring, etc. */
|
|
131
|
+
chartType: string;
|
|
132
|
+
/** Goal direction: decreasing=better when lower, increasing=better when higher, target=approach target */
|
|
133
|
+
direction?: 'decreasing' | 'increasing' | 'target';
|
|
134
|
+
/** Target value */
|
|
135
|
+
target?: number;
|
|
136
|
+
/** Unit label */
|
|
137
|
+
unit?: string;
|
|
138
|
+
}
|
|
139
|
+
/** Agent-generated view config describing how to visualize process metrics */
|
|
140
|
+
export interface ProcessMetricsViewConfig {
|
|
141
|
+
/** Config version for format evolution */
|
|
142
|
+
version: 1;
|
|
143
|
+
/** Metric definitions */
|
|
144
|
+
metrics: ProcessMetricView[];
|
|
145
|
+
/** G2 v5 chart specs (each references metricName for data binding) */
|
|
146
|
+
charts: Record<string, unknown>[];
|
|
147
|
+
}
|
|
106
148
|
//# sourceMappingURL=process.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/types/process.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iCAAiC;AACjC,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE7D,gDAAgD;AAChD,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,aAAa,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,YAAY,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,0DAA0D;AAC1D,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,+DAA+D;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,cAAc,CAAC,EAAE,OAAO,CAAC;IAGzB,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAC;IACd,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAG1C,+CAA+C;IAC/C,MAAM,EAAE,OAAO,CAAC;IAChB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,yDAAyD;
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/types/process.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED