@deckflow/deckuse 1.2.1 → 1.3.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.
- package/README.es.md +342 -0
- package/README.fr.md +342 -0
- package/README.ja.md +342 -0
- package/README.ko.md +342 -0
- package/README.md +46 -8
- package/README.pt-BR.md +342 -0
- package/README.ru.md +342 -0
- package/README.zh-CN.md +367 -0
- package/assets/default.docx +0 -0
- package/assets/default.pptx +0 -0
- package/dist/bin.js +183 -19
- package/dist/bin.js.map +1 -1
- package/dist/core/adapter.d.ts +24 -0
- package/dist/core/adapter.d.ts.map +1 -0
- package/dist/core/adapter.js +20 -0
- package/dist/core/adapter.js.map +1 -0
- package/dist/core/executor.d.ts +24 -0
- package/dist/core/executor.d.ts.map +1 -0
- package/dist/core/executor.js +65 -0
- package/dist/core/executor.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/length.d.ts +27 -0
- package/dist/core/length.d.ts.map +1 -0
- package/dist/core/length.js +63 -0
- package/dist/core/length.js.map +1 -0
- package/dist/core/measure.d.ts +24 -0
- package/dist/core/measure.d.ts.map +1 -0
- package/dist/core/measure.js +79 -0
- package/dist/core/measure.js.map +1 -0
- package/dist/core/not-implemented.d.ts +3 -0
- package/dist/core/not-implemented.d.ts.map +1 -0
- package/dist/core/not-implemented.js +12 -0
- package/dist/core/not-implemented.js.map +1 -0
- package/dist/core/schema.d.ts +3035 -0
- package/dist/core/schema.d.ts.map +1 -0
- package/dist/core/schema.js +798 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/default-template.d.ts +8 -0
- package/dist/default-template.d.ts.map +1 -0
- package/dist/default-template.js +29 -0
- package/dist/default-template.js.map +1 -0
- package/dist/docx/adapter.d.ts +29 -0
- package/dist/docx/adapter.d.ts.map +1 -0
- package/dist/docx/adapter.js +442 -0
- package/dist/docx/adapter.js.map +1 -0
- package/dist/docx/addressing.d.ts +18 -0
- package/dist/docx/addressing.d.ts.map +1 -0
- package/dist/docx/addressing.js +111 -0
- package/dist/docx/addressing.js.map +1 -0
- package/dist/docx/blank.d.ts +4 -0
- package/dist/docx/blank.d.ts.map +1 -0
- package/dist/docx/blank.js +75 -0
- package/dist/docx/blank.js.map +1 -0
- package/dist/docx/index-sync.d.ts +7 -0
- package/dist/docx/index-sync.d.ts.map +1 -0
- package/dist/docx/index-sync.js +24 -0
- package/dist/docx/index-sync.js.map +1 -0
- package/dist/docx/index.d.ts +5 -0
- package/dist/docx/index.d.ts.map +1 -0
- package/dist/docx/index.js +4 -0
- package/dist/docx/index.js.map +1 -0
- package/dist/docx/indexer.d.ts +41 -0
- package/dist/docx/indexer.d.ts.map +1 -0
- package/dist/docx/indexer.js +353 -0
- package/dist/docx/indexer.js.map +1 -0
- package/dist/docx/mutations.d.ts +5 -0
- package/dist/docx/mutations.d.ts.map +1 -0
- package/dist/docx/mutations.js +311 -0
- package/dist/docx/mutations.js.map +1 -0
- package/dist/docx/paragraphs.d.ts +26 -0
- package/dist/docx/paragraphs.d.ts.map +1 -0
- package/dist/docx/paragraphs.js +314 -0
- package/dist/docx/paragraphs.js.map +1 -0
- package/dist/docx/properties.d.ts +23 -0
- package/dist/docx/properties.d.ts.map +1 -0
- package/dist/docx/properties.js +414 -0
- package/dist/docx/properties.js.map +1 -0
- package/dist/docx/tables.d.ts +4 -0
- package/dist/docx/tables.d.ts.map +1 -0
- package/dist/docx/tables.js +64 -0
- package/dist/docx/tables.js.map +1 -0
- package/dist/docx/text-spans.d.ts +25 -0
- package/dist/docx/text-spans.d.ts.map +1 -0
- package/dist/docx/text-spans.js +142 -0
- package/dist/docx/text-spans.js.map +1 -0
- package/dist/docx/types.d.ts +27 -0
- package/dist/docx/types.d.ts.map +1 -0
- package/dist/docx/types.js +2 -0
- package/dist/docx/types.js.map +1 -0
- package/dist/docx/workspace.d.ts +20 -0
- package/dist/docx/workspace.d.ts.map +1 -0
- package/dist/docx/workspace.js +145 -0
- package/dist/docx/workspace.js.map +1 -0
- package/dist/docx/xml.d.ts +18 -0
- package/dist/docx/xml.d.ts.map +1 -0
- package/dist/docx/xml.js +87 -0
- package/dist/docx/xml.js.map +1 -0
- package/dist/edition-config/index.d.ts +25 -0
- package/dist/edition-config/index.d.ts.map +1 -0
- package/dist/edition-config/index.js +22 -0
- package/dist/edition-config/index.js.map +1 -0
- package/dist/edition.d.ts +2 -2
- package/dist/edition.d.ts.map +1 -1
- package/dist/edition.js +1 -1
- package/dist/edition.js.map +1 -1
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +124 -32
- package/dist/help.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/key/index.d.ts +2 -0
- package/dist/key/index.d.ts.map +1 -0
- package/dist/key/index.js +3 -0
- package/dist/key/index.js.map +1 -0
- package/dist/monitor-daemon.d.ts +21 -8
- package/dist/monitor-daemon.d.ts.map +1 -1
- package/dist/monitor-daemon.js +189 -51
- package/dist/monitor-daemon.js.map +1 -1
- package/dist/monitor-registry.d.ts +34 -0
- package/dist/monitor-registry.d.ts.map +1 -0
- package/dist/monitor-registry.js +191 -0
- package/dist/monitor-registry.js.map +1 -0
- package/dist/monitor.js +1 -1
- package/dist/monitor.js.map +1 -1
- package/dist/numbers/index.d.ts +2 -0
- package/dist/numbers/index.d.ts.map +1 -0
- package/dist/numbers/index.js +3 -0
- package/dist/numbers/index.js.map +1 -0
- package/dist/opc/index.d.ts +90 -0
- package/dist/opc/index.d.ts.map +1 -0
- package/dist/opc/index.js +569 -0
- package/dist/opc/index.js.map +1 -0
- package/dist/pptx/adapter.d.ts +167 -0
- package/dist/pptx/adapter.d.ts.map +1 -0
- package/dist/pptx/adapter.js +807 -0
- package/dist/pptx/adapter.js.map +1 -0
- package/dist/pptx/addressing.d.ts +45 -0
- package/dist/pptx/addressing.d.ts.map +1 -0
- package/dist/pptx/addressing.js +428 -0
- package/dist/pptx/addressing.js.map +1 -0
- package/dist/pptx/align.d.ts +24 -0
- package/dist/pptx/align.d.ts.map +1 -0
- package/dist/pptx/align.js +112 -0
- package/dist/pptx/align.js.map +1 -0
- package/dist/pptx/chart-classify.d.ts +10 -0
- package/dist/pptx/chart-classify.d.ts.map +1 -0
- package/dist/pptx/chart-classify.js +58 -0
- package/dist/pptx/chart-classify.js.map +1 -0
- package/dist/pptx/chart.d.ts +42 -0
- package/dist/pptx/chart.d.ts.map +1 -0
- package/dist/pptx/chart.js +614 -0
- package/dist/pptx/chart.js.map +1 -0
- package/dist/pptx/edition-extension.d.ts +25 -0
- package/dist/pptx/edition-extension.d.ts.map +1 -0
- package/dist/pptx/edition-extension.js +10 -0
- package/dist/pptx/edition-extension.js.map +1 -0
- package/dist/pptx/edition.d.ts +20 -0
- package/dist/pptx/edition.d.ts.map +1 -0
- package/dist/pptx/edition.js +69 -0
- package/dist/pptx/edition.js.map +1 -0
- package/dist/pptx/elements.d.ts +12 -0
- package/dist/pptx/elements.d.ts.map +1 -0
- package/dist/pptx/elements.js +224 -0
- package/dist/pptx/elements.js.map +1 -0
- package/dist/pptx/hyperlink.d.ts +7 -0
- package/dist/pptx/hyperlink.d.ts.map +1 -0
- package/dist/pptx/hyperlink.js +81 -0
- package/dist/pptx/hyperlink.js.map +1 -0
- package/dist/pptx/index-sync.d.ts +7 -0
- package/dist/pptx/index-sync.d.ts.map +1 -0
- package/dist/pptx/index-sync.js +24 -0
- package/dist/pptx/index-sync.js.map +1 -0
- package/dist/pptx/index.d.ts +10 -0
- package/dist/pptx/index.d.ts.map +1 -0
- package/dist/pptx/index.js +7 -0
- package/dist/pptx/index.js.map +1 -0
- package/dist/pptx/indexer.d.ts +19 -0
- package/dist/pptx/indexer.d.ts.map +1 -0
- package/dist/pptx/indexer.js +319 -0
- package/dist/pptx/indexer.js.map +1 -0
- package/dist/pptx/layout-ref.d.ts +41 -0
- package/dist/pptx/layout-ref.d.ts.map +1 -0
- package/dist/pptx/layout-ref.js +145 -0
- package/dist/pptx/layout-ref.js.map +1 -0
- package/dist/pptx/media.d.ts +15 -0
- package/dist/pptx/media.d.ts.map +1 -0
- package/dist/pptx/media.js +145 -0
- package/dist/pptx/media.js.map +1 -0
- package/dist/pptx/mutations.d.ts +11 -0
- package/dist/pptx/mutations.d.ts.map +1 -0
- package/dist/pptx/mutations.js +1111 -0
- package/dist/pptx/mutations.js.map +1 -0
- package/dist/pptx/picture.d.ts +25 -0
- package/dist/pptx/picture.d.ts.map +1 -0
- package/dist/pptx/picture.js +118 -0
- package/dist/pptx/picture.js.map +1 -0
- package/dist/pptx/placeholder-role.d.ts +19 -0
- package/dist/pptx/placeholder-role.d.ts.map +1 -0
- package/dist/pptx/placeholder-role.js +71 -0
- package/dist/pptx/placeholder-role.js.map +1 -0
- package/dist/pptx/properties.d.ts +13 -0
- package/dist/pptx/properties.d.ts.map +1 -0
- package/dist/pptx/properties.js +587 -0
- package/dist/pptx/properties.js.map +1 -0
- package/dist/pptx/resolve-properties.d.ts +17 -0
- package/dist/pptx/resolve-properties.d.ts.map +1 -0
- package/dist/pptx/resolve-properties.js +571 -0
- package/dist/pptx/resolve-properties.js.map +1 -0
- package/dist/pptx/slide-size.d.ts +9 -0
- package/dist/pptx/slide-size.d.ts.map +1 -0
- package/dist/pptx/slide-size.js +29 -0
- package/dist/pptx/slide-size.js.map +1 -0
- package/dist/pptx/slides.d.ts +15 -0
- package/dist/pptx/slides.d.ts.map +1 -0
- package/dist/pptx/slides.js +236 -0
- package/dist/pptx/slides.js.map +1 -0
- package/dist/pptx/table-measure.d.ts +43 -0
- package/dist/pptx/table-measure.d.ts.map +1 -0
- package/dist/pptx/table-measure.js +70 -0
- package/dist/pptx/table-measure.js.map +1 -0
- package/dist/pptx/table.d.ts +23 -0
- package/dist/pptx/table.d.ts.map +1 -0
- package/dist/pptx/table.js +529 -0
- package/dist/pptx/table.js.map +1 -0
- package/dist/pptx/types.d.ts +27 -0
- package/dist/pptx/types.d.ts.map +1 -0
- package/dist/pptx/types.js +2 -0
- package/dist/pptx/types.js.map +1 -0
- package/dist/pptx/workspace.d.ts +23 -0
- package/dist/pptx/workspace.d.ts.map +1 -0
- package/dist/pptx/workspace.js +148 -0
- package/dist/pptx/workspace.js.map +1 -0
- package/dist/pptx/xml.d.ts +67 -0
- package/dist/pptx/xml.d.ts.map +1 -0
- package/dist/pptx/xml.js +355 -0
- package/dist/pptx/xml.js.map +1 -0
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +14 -2
- package/dist/render.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/workspace/git.d.ts +7 -0
- package/dist/workspace/git.d.ts.map +1 -0
- package/dist/workspace/git.js +82 -0
- package/dist/workspace/git.js.map +1 -0
- package/dist/workspace/index.d.ts +7 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +7 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/lock.d.ts +3 -0
- package/dist/workspace/lock.d.ts.map +1 -0
- package/dist/workspace/lock.js +35 -0
- package/dist/workspace/lock.js.map +1 -0
- package/dist/workspace/metadata.d.ts +4 -0
- package/dist/workspace/metadata.d.ts.map +1 -0
- package/dist/workspace/metadata.js +21 -0
- package/dist/workspace/metadata.js.map +1 -0
- package/dist/workspace/operations.d.ts +14 -0
- package/dist/workspace/operations.d.ts.map +1 -0
- package/dist/workspace/operations.js +35 -0
- package/dist/workspace/operations.js.map +1 -0
- package/dist/workspace/paths.d.ts +11 -0
- package/dist/workspace/paths.d.ts.map +1 -0
- package/dist/workspace/paths.js +12 -0
- package/dist/workspace/paths.js.map +1 -0
- package/dist/workspace/revision.d.ts +6 -0
- package/dist/workspace/revision.d.ts.map +1 -0
- package/dist/workspace/revision.js +15 -0
- package/dist/workspace/revision.js.map +1 -0
- package/dist/xlsx/index.d.ts +2 -0
- package/dist/xlsx/index.d.ts.map +1 -0
- package/dist/xlsx/index.js +3 -0
- package/dist/xlsx/index.js.map +1 -0
- package/package.json +48 -27
- package/schema/command.schema.json +2399 -0
- package/dist/.tsbuildinfo +0 -1
package/dist/monitor-daemon.js
CHANGED
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
2
|
import { mkdir, readFile, rm, writeFile } from 'node:fs/promises';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
import { monitorDir } from '
|
|
3
|
+
import { join, resolve } from 'node:path';
|
|
4
|
+
import { monitorDir } from './workspace/index.js';
|
|
5
5
|
import { startMonitor } from './monitor.js';
|
|
6
|
+
import { discoverMonitorsFromProcessTable, isProcessAlive, listMonitorRegistrations, processLooksLikeMonitorDaemon, removeMonitorRegistration, upsertMonitorRegistration, } from './monitor-registry.js';
|
|
6
7
|
export const daemonMetaPath = (workspace) => join(monitorDir(workspace), 'daemon.json');
|
|
7
|
-
|
|
8
|
-
try {
|
|
9
|
-
process.kill(pid, 0);
|
|
10
|
-
return true;
|
|
11
|
-
}
|
|
12
|
-
catch {
|
|
13
|
-
return false;
|
|
14
|
-
}
|
|
15
|
-
};
|
|
8
|
+
export { isProcessAlive as isAlive };
|
|
16
9
|
export async function readDaemonMeta(workspace) {
|
|
17
10
|
try {
|
|
18
11
|
const raw = await readFile(daemonMetaPath(workspace), 'utf8');
|
|
@@ -22,9 +15,27 @@ export async function readDaemonMeta(workspace) {
|
|
|
22
15
|
return null;
|
|
23
16
|
}
|
|
24
17
|
}
|
|
18
|
+
async function syncGlobalUpsert(meta) {
|
|
19
|
+
try {
|
|
20
|
+
await upsertMonitorRegistration(meta);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// best-effort; local meta remains authoritative for single-workspace ops
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async function syncGlobalRemove(workspace) {
|
|
27
|
+
try {
|
|
28
|
+
await removeMonitorRegistration(workspace);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// ignore
|
|
32
|
+
}
|
|
33
|
+
}
|
|
25
34
|
export async function writeDaemonMeta(workspace, meta) {
|
|
26
35
|
await mkdir(monitorDir(workspace), { recursive: true });
|
|
27
|
-
|
|
36
|
+
const normalized = { ...meta, workspace: resolve(workspace) };
|
|
37
|
+
await writeFile(daemonMetaPath(workspace), `${JSON.stringify(normalized, null, 2)}\n`, 'utf8');
|
|
38
|
+
await syncGlobalUpsert(normalized);
|
|
28
39
|
}
|
|
29
40
|
export async function clearDaemonMeta(workspace) {
|
|
30
41
|
try {
|
|
@@ -33,6 +44,7 @@ export async function clearDaemonMeta(workspace) {
|
|
|
33
44
|
catch {
|
|
34
45
|
// ignore
|
|
35
46
|
}
|
|
47
|
+
await syncGlobalRemove(workspace);
|
|
36
48
|
}
|
|
37
49
|
export async function probeMonitor(url) {
|
|
38
50
|
try {
|
|
@@ -43,71 +55,196 @@ export async function probeMonitor(url) {
|
|
|
43
55
|
return false;
|
|
44
56
|
}
|
|
45
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* If pid is alive but does not look like our daemon, refuse to signal it.
|
|
60
|
+
* Returns true when it is safe to send SIGTERM/SIGKILL.
|
|
61
|
+
*/
|
|
62
|
+
async function maySignalMonitorPid(pid, workspace) {
|
|
63
|
+
if (!isProcessAlive(pid))
|
|
64
|
+
return false;
|
|
65
|
+
const looks = await processLooksLikeMonitorDaemon(pid, workspace);
|
|
66
|
+
// Inconclusive (e.g. Windows / ps failed): allow signal if alive — legacy behavior.
|
|
67
|
+
if (looks === null)
|
|
68
|
+
return true;
|
|
69
|
+
return looks;
|
|
70
|
+
}
|
|
46
71
|
export async function monitorStatus(workspace) {
|
|
47
|
-
const
|
|
72
|
+
const abs = resolve(workspace);
|
|
73
|
+
const meta = await readDaemonMeta(abs);
|
|
48
74
|
if (!meta)
|
|
49
75
|
return { running: false, meta: null, reachable: false };
|
|
50
|
-
const running =
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
76
|
+
const running = isProcessAlive(meta.pid);
|
|
77
|
+
if (!running) {
|
|
78
|
+
await clearDaemonMeta(abs);
|
|
79
|
+
return { running: false, meta: null, reachable: false };
|
|
80
|
+
}
|
|
81
|
+
const looks = await processLooksLikeMonitorDaemon(meta.pid, abs);
|
|
82
|
+
if (looks === false) {
|
|
83
|
+
// PID reused by an unrelated process — prune registration without killing.
|
|
84
|
+
await clearDaemonMeta(abs);
|
|
85
|
+
return { running: false, meta: null, reachable: false };
|
|
86
|
+
}
|
|
87
|
+
const reachable = await probeMonitor(meta.url);
|
|
88
|
+
// Heal global registry if local is authoritative and running.
|
|
89
|
+
await syncGlobalUpsert({ ...meta, workspace: abs });
|
|
90
|
+
return { running: true, meta: { ...meta, workspace: abs }, reachable };
|
|
91
|
+
}
|
|
92
|
+
function displayUrl(host, port) {
|
|
93
|
+
const displayHost = host === '0.0.0.0' || host === '::' ? 'localhost' : host;
|
|
94
|
+
return `http://${displayHost}:${String(port)}/`;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Merge registry files with live process-table discovery, reconcile, return running monitors.
|
|
98
|
+
*/
|
|
99
|
+
export async function monitorStatusAll() {
|
|
100
|
+
const byWorkspace = new Map();
|
|
101
|
+
for (const reg of await listMonitorRegistrations()) {
|
|
102
|
+
byWorkspace.set(resolve(reg.workspace), {
|
|
103
|
+
...reg,
|
|
104
|
+
workspace: resolve(reg.workspace),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
for (const disc of await discoverMonitorsFromProcessTable()) {
|
|
108
|
+
const ws = resolve(disc.workspace);
|
|
109
|
+
const existing = byWorkspace.get(ws);
|
|
110
|
+
if (existing && existing.pid === disc.pid)
|
|
111
|
+
continue;
|
|
112
|
+
const host = disc.host ?? existing?.host ?? '0.0.0.0';
|
|
113
|
+
const port = disc.port ?? existing?.port ?? 4173;
|
|
114
|
+
byWorkspace.set(ws, {
|
|
115
|
+
pid: disc.pid,
|
|
116
|
+
host,
|
|
117
|
+
port,
|
|
118
|
+
url: existing?.url ?? displayUrl(host, port),
|
|
119
|
+
workspace: ws,
|
|
120
|
+
startedAt: existing?.startedAt ?? new Date().toISOString(),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
const monitors = [];
|
|
124
|
+
for (const [ws, meta] of byWorkspace) {
|
|
125
|
+
const running = isProcessAlive(meta.pid);
|
|
126
|
+
if (!running) {
|
|
127
|
+
await removeMonitorRegistration(ws);
|
|
128
|
+
const local = await readDaemonMeta(ws);
|
|
129
|
+
if (local?.pid === meta.pid) {
|
|
130
|
+
try {
|
|
131
|
+
await rm(daemonMetaPath(ws), { force: true });
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
// ignore
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
const looks = await processLooksLikeMonitorDaemon(meta.pid, ws);
|
|
140
|
+
if (looks === false) {
|
|
141
|
+
await removeMonitorRegistration(ws);
|
|
142
|
+
const local = await readDaemonMeta(ws);
|
|
143
|
+
if (local?.pid === meta.pid) {
|
|
144
|
+
try {
|
|
145
|
+
await rm(daemonMetaPath(ws), { force: true });
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
// ignore
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
const reachable = await probeMonitor(meta.url);
|
|
154
|
+
// Do not persist process-table-only discoveries here (plan: read-only until heal path).
|
|
155
|
+
// Heal only when local daemon.json already exists.
|
|
156
|
+
const local = await readDaemonMeta(ws);
|
|
157
|
+
if (local && isProcessAlive(local.pid)) {
|
|
158
|
+
await syncGlobalUpsert({ ...meta, workspace: ws });
|
|
159
|
+
}
|
|
160
|
+
monitors.push({
|
|
161
|
+
...meta,
|
|
162
|
+
workspace: ws,
|
|
163
|
+
running: true,
|
|
164
|
+
reachable,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
monitors.sort((a, b) => a.workspace.localeCompare(b.workspace));
|
|
168
|
+
return { monitors };
|
|
55
169
|
}
|
|
56
170
|
export async function monitorStop(workspace) {
|
|
57
|
-
const
|
|
58
|
-
|
|
171
|
+
const abs = resolve(workspace);
|
|
172
|
+
const meta = await readDaemonMeta(abs);
|
|
173
|
+
// Also try global registration if local missing (desync).
|
|
174
|
+
let target = meta;
|
|
175
|
+
if (!target) {
|
|
176
|
+
const regs = await listMonitorRegistrations();
|
|
177
|
+
target = regs.find((r) => resolve(r.workspace) === abs) ?? null;
|
|
178
|
+
}
|
|
179
|
+
if (!target) {
|
|
180
|
+
// Process-table fallback
|
|
181
|
+
const disc = (await discoverMonitorsFromProcessTable()).find((d) => resolve(d.workspace) === abs);
|
|
182
|
+
if (disc) {
|
|
183
|
+
const host = disc.host ?? '0.0.0.0';
|
|
184
|
+
const port = disc.port ?? 4173;
|
|
185
|
+
target = {
|
|
186
|
+
pid: disc.pid,
|
|
187
|
+
host,
|
|
188
|
+
port,
|
|
189
|
+
url: displayUrl(host, port),
|
|
190
|
+
workspace: abs,
|
|
191
|
+
startedAt: new Date().toISOString(),
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (!target)
|
|
59
196
|
return { stopped: false, meta: null };
|
|
60
|
-
if (
|
|
197
|
+
if (await maySignalMonitorPid(target.pid, abs)) {
|
|
61
198
|
try {
|
|
62
|
-
process.kill(
|
|
199
|
+
process.kill(target.pid, 'SIGTERM');
|
|
63
200
|
}
|
|
64
201
|
catch {
|
|
65
202
|
// ignore
|
|
66
203
|
}
|
|
67
204
|
for (let i = 0; i < 20; i++) {
|
|
68
|
-
if (!
|
|
205
|
+
if (!isProcessAlive(target.pid))
|
|
69
206
|
break;
|
|
70
207
|
await new Promise((r) => setTimeout(r, 100));
|
|
71
208
|
}
|
|
72
|
-
if (
|
|
209
|
+
if (isProcessAlive(target.pid) && (await maySignalMonitorPid(target.pid, abs))) {
|
|
73
210
|
try {
|
|
74
|
-
process.kill(
|
|
211
|
+
process.kill(target.pid, 'SIGKILL');
|
|
75
212
|
}
|
|
76
213
|
catch {
|
|
77
214
|
// ignore
|
|
78
215
|
}
|
|
79
216
|
}
|
|
80
217
|
}
|
|
81
|
-
await clearDaemonMeta(
|
|
82
|
-
return { stopped: true, meta };
|
|
218
|
+
await clearDaemonMeta(abs);
|
|
219
|
+
return { stopped: true, meta: target };
|
|
220
|
+
}
|
|
221
|
+
export async function monitorStopAll() {
|
|
222
|
+
const { monitors } = await monitorStatusAll();
|
|
223
|
+
const results = [];
|
|
224
|
+
for (const entry of monitors) {
|
|
225
|
+
const result = await monitorStop(entry.workspace);
|
|
226
|
+
results.push({ workspace: entry.workspace, ...result });
|
|
227
|
+
}
|
|
228
|
+
return { stopped: results.filter((r) => r.stopped).length, results };
|
|
83
229
|
}
|
|
84
230
|
/**
|
|
85
231
|
* Spawn a detached deckuse monitor worker and persist daemon.json.
|
|
86
232
|
* The child runs `deckuse monitor --daemon-worker` in the foreground of that process.
|
|
87
233
|
*/
|
|
88
234
|
export async function monitorStart(workspace, options = {}) {
|
|
89
|
-
const
|
|
235
|
+
const abs = resolve(workspace);
|
|
236
|
+
const existing = await monitorStatus(abs);
|
|
90
237
|
if (existing.running && existing.meta) {
|
|
91
238
|
if (existing.reachable)
|
|
92
239
|
return existing.meta;
|
|
93
|
-
await monitorStop(
|
|
240
|
+
await monitorStop(abs);
|
|
94
241
|
}
|
|
95
242
|
const host = options.host ?? '0.0.0.0';
|
|
96
243
|
const port = options.port ?? 4173;
|
|
97
244
|
const bin = process.argv[1];
|
|
98
245
|
if (!bin)
|
|
99
246
|
throw new Error('Cannot resolve deckuse binary path for daemon start');
|
|
100
|
-
const child = spawn(process.execPath, [
|
|
101
|
-
bin,
|
|
102
|
-
'monitor',
|
|
103
|
-
'--daemon-worker',
|
|
104
|
-
'--workspace',
|
|
105
|
-
workspace,
|
|
106
|
-
'--host',
|
|
107
|
-
host,
|
|
108
|
-
'--port',
|
|
109
|
-
String(port),
|
|
110
|
-
], {
|
|
247
|
+
const child = spawn(process.execPath, [bin, 'monitor', '--daemon-worker', '--workspace', abs, '--host', host, '--port', String(port)], {
|
|
111
248
|
detached: true,
|
|
112
249
|
stdio: 'ignore',
|
|
113
250
|
env: process.env,
|
|
@@ -123,55 +260,56 @@ export async function monitorStart(workspace, options = {}) {
|
|
|
123
260
|
host,
|
|
124
261
|
port,
|
|
125
262
|
url: urlGuess,
|
|
126
|
-
workspace,
|
|
263
|
+
workspace: abs,
|
|
127
264
|
startedAt: new Date().toISOString(),
|
|
128
265
|
};
|
|
129
|
-
await writeDaemonMeta(
|
|
266
|
+
await writeDaemonMeta(abs, meta);
|
|
130
267
|
let reachable = false;
|
|
131
268
|
for (let i = 0; i < 40; i++) {
|
|
132
|
-
const disk = await readDaemonMeta(
|
|
269
|
+
const disk = await readDaemonMeta(abs);
|
|
133
270
|
if (disk?.url)
|
|
134
271
|
meta = disk;
|
|
135
272
|
if (await probeMonitor(meta.url)) {
|
|
136
273
|
reachable = true;
|
|
137
274
|
break;
|
|
138
275
|
}
|
|
139
|
-
if (!
|
|
276
|
+
if (!isProcessAlive(child.pid))
|
|
140
277
|
break;
|
|
141
278
|
await new Promise((r) => setTimeout(r, 100));
|
|
142
279
|
}
|
|
143
280
|
if (!reachable) {
|
|
144
281
|
try {
|
|
145
|
-
if (
|
|
282
|
+
if (isProcessAlive(child.pid))
|
|
146
283
|
process.kill(child.pid, 'SIGTERM');
|
|
147
284
|
}
|
|
148
285
|
catch {
|
|
149
286
|
// ignore
|
|
150
287
|
}
|
|
151
|
-
await clearDaemonMeta(
|
|
288
|
+
await clearDaemonMeta(abs);
|
|
152
289
|
throw new Error(`Monitor failed to start on ${host}:${String(port)} (EADDRINUSE or bind failure). ` +
|
|
153
|
-
`Try --port 0 for an ephemeral port, or run deckuse monitor status
|
|
290
|
+
`Try --port 0 for an ephemeral port, or run deckuse monitor status.`);
|
|
154
291
|
}
|
|
155
292
|
return meta;
|
|
156
293
|
}
|
|
157
294
|
/** Foreground monitor used by CLI and by `--daemon-worker`. */
|
|
158
295
|
export async function runMonitorForeground(workspace, options = {}) {
|
|
159
|
-
const
|
|
296
|
+
const abs = resolve(workspace);
|
|
297
|
+
const monitor = await startMonitor(abs, {
|
|
160
298
|
host: options.host ?? '0.0.0.0',
|
|
161
299
|
port: options.port ?? 4173,
|
|
162
300
|
});
|
|
163
301
|
if (options.asDaemonWorker) {
|
|
164
302
|
const port = Number(new URL(monitor.url).port || (options.port ?? 4173));
|
|
165
|
-
await writeDaemonMeta(
|
|
303
|
+
await writeDaemonMeta(abs, {
|
|
166
304
|
pid: process.pid,
|
|
167
305
|
host: options.host ?? '0.0.0.0',
|
|
168
306
|
port,
|
|
169
307
|
url: monitor.url,
|
|
170
|
-
workspace,
|
|
308
|
+
workspace: abs,
|
|
171
309
|
startedAt: new Date().toISOString(),
|
|
172
310
|
});
|
|
173
311
|
const cleanup = async () => {
|
|
174
|
-
await clearDaemonMeta(
|
|
312
|
+
await clearDaemonMeta(abs);
|
|
175
313
|
await monitor.close();
|
|
176
314
|
};
|
|
177
315
|
process.once('SIGINT', () => void cleanup().then(() => process.exit(0)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor-daemon.js","sourceRoot":"","sources":["../src/monitor-daemon.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"monitor-daemon.js","sourceRoot":"","sources":["../src/monitor-daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface DaemonMeta {
|
|
2
|
+
readonly pid: number;
|
|
3
|
+
readonly host: string;
|
|
4
|
+
readonly port: number;
|
|
5
|
+
readonly url: string;
|
|
6
|
+
readonly workspace: string;
|
|
7
|
+
readonly startedAt: string;
|
|
8
|
+
}
|
|
9
|
+
/** Override with DECKUSE_HOME for tests; default ~/.deckflow/deckuse */
|
|
10
|
+
export declare function deckuseHome(): string;
|
|
11
|
+
export declare function monitorsRegistryDir(): string;
|
|
12
|
+
export declare function monitorRegistrationId(workspace: string): string;
|
|
13
|
+
export declare function monitorRegistrationPath(workspace: string): string;
|
|
14
|
+
/** Best-effort upsert; failures are swallowed by callers when desired. */
|
|
15
|
+
export declare function upsertMonitorRegistration(meta: DaemonMeta): Promise<void>;
|
|
16
|
+
export declare function removeMonitorRegistration(workspace: string): Promise<void>;
|
|
17
|
+
export declare function listMonitorRegistrations(): Promise<DaemonMeta[]>;
|
|
18
|
+
export declare function isProcessAlive(pid: number): boolean;
|
|
19
|
+
/** Read process command line when possible (darwin/linux). */
|
|
20
|
+
export declare function readProcessCommandLine(pid: number): Promise<string | null>;
|
|
21
|
+
/**
|
|
22
|
+
* True when the PID looks like a deckuse monitor daemon-worker.
|
|
23
|
+
* If cmdline cannot be read, returns null (inconclusive).
|
|
24
|
+
*/
|
|
25
|
+
export declare function processLooksLikeMonitorDaemon(pid: number, workspace?: string): Promise<boolean | null>;
|
|
26
|
+
export interface DiscoveredMonitor {
|
|
27
|
+
readonly pid: number;
|
|
28
|
+
readonly workspace: string;
|
|
29
|
+
readonly host?: string;
|
|
30
|
+
readonly port?: number;
|
|
31
|
+
}
|
|
32
|
+
/** Parse `ps` output for detached monitor workers (darwin/linux). */
|
|
33
|
+
export declare function discoverMonitorsFromProcessTable(): Promise<DiscoveredMonitor[]>;
|
|
34
|
+
//# sourceMappingURL=monitor-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor-registry.d.ts","sourceRoot":"","sources":["../src/monitor-registry.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,wEAAwE;AACxE,wBAAgB,WAAW,IAAI,MAAM,CAIpC;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjE;AA4BD,0EAA0E;AAC1E,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAM/E;AAED,wBAAsB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMhF;AAED,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAsBtE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQnD;AAED,8DAA8D;AAC9D,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAYhF;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAkBzB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qEAAqE;AACrE,wBAAsB,gCAAgC,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAyCrF"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
2
|
+
import { execFile } from 'node:child_process';
|
|
3
|
+
import { mkdir, readdir, readFile, rename, rm, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { dirname, join, resolve } from 'node:path';
|
|
6
|
+
import { promisify } from 'node:util';
|
|
7
|
+
const execFileAsync = promisify(execFile);
|
|
8
|
+
/** Override with DECKUSE_HOME for tests; default ~/.deckflow/deckuse */
|
|
9
|
+
export function deckuseHome() {
|
|
10
|
+
const override = process.env['DECKUSE_HOME']?.trim();
|
|
11
|
+
if (override)
|
|
12
|
+
return resolve(override);
|
|
13
|
+
return join(homedir(), '.deckflow', 'deckuse');
|
|
14
|
+
}
|
|
15
|
+
export function monitorsRegistryDir() {
|
|
16
|
+
return join(deckuseHome(), 'monitors');
|
|
17
|
+
}
|
|
18
|
+
export function monitorRegistrationId(workspace) {
|
|
19
|
+
return createHash('sha256').update(resolve(workspace)).digest('hex').slice(0, 16);
|
|
20
|
+
}
|
|
21
|
+
export function monitorRegistrationPath(workspace) {
|
|
22
|
+
return join(monitorsRegistryDir(), `${monitorRegistrationId(workspace)}.json`);
|
|
23
|
+
}
|
|
24
|
+
const isDaemonMeta = (value) => {
|
|
25
|
+
if (!value || typeof value !== 'object')
|
|
26
|
+
return false;
|
|
27
|
+
const v = value;
|
|
28
|
+
return (typeof v['pid'] === 'number' &&
|
|
29
|
+
typeof v['host'] === 'string' &&
|
|
30
|
+
typeof v['port'] === 'number' &&
|
|
31
|
+
typeof v['url'] === 'string' &&
|
|
32
|
+
typeof v['workspace'] === 'string' &&
|
|
33
|
+
typeof v['startedAt'] === 'string');
|
|
34
|
+
};
|
|
35
|
+
async function writeJsonAtomic(path, value) {
|
|
36
|
+
await mkdir(dirname(path), { recursive: true });
|
|
37
|
+
const nonce = randomUUID();
|
|
38
|
+
const tmp = `${path}.${nonce}.tmp`;
|
|
39
|
+
try {
|
|
40
|
+
await writeFile(tmp, `${JSON.stringify(value, null, 2)}\n`, { flag: 'wx' });
|
|
41
|
+
await rename(tmp, path);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
await rm(tmp, { force: true }).catch(() => undefined);
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** Best-effort upsert; failures are swallowed by callers when desired. */
|
|
49
|
+
export async function upsertMonitorRegistration(meta) {
|
|
50
|
+
const normalized = {
|
|
51
|
+
...meta,
|
|
52
|
+
workspace: resolve(meta.workspace),
|
|
53
|
+
};
|
|
54
|
+
await writeJsonAtomic(monitorRegistrationPath(normalized.workspace), normalized);
|
|
55
|
+
}
|
|
56
|
+
export async function removeMonitorRegistration(workspace) {
|
|
57
|
+
try {
|
|
58
|
+
await rm(monitorRegistrationPath(workspace), { force: true });
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// ignore
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export async function listMonitorRegistrations() {
|
|
65
|
+
const dir = monitorsRegistryDir();
|
|
66
|
+
let names;
|
|
67
|
+
try {
|
|
68
|
+
names = await readdir(dir);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
const out = [];
|
|
74
|
+
for (const name of names) {
|
|
75
|
+
if (!name.endsWith('.json'))
|
|
76
|
+
continue;
|
|
77
|
+
try {
|
|
78
|
+
const raw = await readFile(join(dir, name), 'utf8');
|
|
79
|
+
const parsed = JSON.parse(raw);
|
|
80
|
+
if (isDaemonMeta(parsed)) {
|
|
81
|
+
out.push({ ...parsed, workspace: resolve(parsed.workspace) });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
// skip corrupt entries
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
export function isProcessAlive(pid) {
|
|
91
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
92
|
+
return false;
|
|
93
|
+
try {
|
|
94
|
+
process.kill(pid, 0);
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/** Read process command line when possible (darwin/linux). */
|
|
102
|
+
export async function readProcessCommandLine(pid) {
|
|
103
|
+
if (process.platform === 'win32')
|
|
104
|
+
return null;
|
|
105
|
+
try {
|
|
106
|
+
const { stdout } = await execFileAsync('ps', ['-p', String(pid), '-o', 'args='], {
|
|
107
|
+
encoding: 'utf8',
|
|
108
|
+
timeout: 2000,
|
|
109
|
+
});
|
|
110
|
+
const line = stdout.trim();
|
|
111
|
+
return line.length > 0 ? line : null;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* True when the PID looks like a deckuse monitor daemon-worker.
|
|
119
|
+
* If cmdline cannot be read, returns null (inconclusive).
|
|
120
|
+
*/
|
|
121
|
+
export async function processLooksLikeMonitorDaemon(pid, workspace) {
|
|
122
|
+
const cmdline = await readProcessCommandLine(pid);
|
|
123
|
+
if (cmdline == null)
|
|
124
|
+
return null;
|
|
125
|
+
const hasMonitor = /\bmonitor\b/.test(cmdline);
|
|
126
|
+
const hasWorker = cmdline.includes('--daemon-worker');
|
|
127
|
+
if (!hasMonitor || !hasWorker)
|
|
128
|
+
return false;
|
|
129
|
+
if (workspace) {
|
|
130
|
+
const abs = resolve(workspace);
|
|
131
|
+
// Require workspace path somewhere in argv when we know it.
|
|
132
|
+
if (!cmdline.includes(abs) && !cmdline.includes(workspace)) {
|
|
133
|
+
// Still accept if --workspace flag present but path differs only by trailing slash noise;
|
|
134
|
+
// otherwise treat as not our monitor (PID reuse / wrong process).
|
|
135
|
+
const wsMatch = cmdline.match(/--workspace\s+(\S+)/);
|
|
136
|
+
if (!wsMatch?.[1])
|
|
137
|
+
return false;
|
|
138
|
+
if (resolve(wsMatch[1]) !== abs)
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
/** Parse `ps` output for detached monitor workers (darwin/linux). */
|
|
145
|
+
export async function discoverMonitorsFromProcessTable() {
|
|
146
|
+
if (process.platform === 'win32')
|
|
147
|
+
return [];
|
|
148
|
+
let stdout;
|
|
149
|
+
try {
|
|
150
|
+
const result = await execFileAsync('ps', ['-ax', '-o', 'pid=', '-o', 'command='], {
|
|
151
|
+
encoding: 'utf8',
|
|
152
|
+
timeout: 5000,
|
|
153
|
+
maxBuffer: 8 * 1024 * 1024,
|
|
154
|
+
});
|
|
155
|
+
stdout = result.stdout;
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return [];
|
|
159
|
+
}
|
|
160
|
+
const found = [];
|
|
161
|
+
for (const rawLine of stdout.split('\n')) {
|
|
162
|
+
const line = rawLine.trim();
|
|
163
|
+
if (!line)
|
|
164
|
+
continue;
|
|
165
|
+
if (!line.includes('--daemon-worker'))
|
|
166
|
+
continue;
|
|
167
|
+
if (!/\bmonitor\b/.test(line))
|
|
168
|
+
continue;
|
|
169
|
+
const pidMatch = line.match(/^(\d+)\s+(.*)$/);
|
|
170
|
+
if (!pidMatch)
|
|
171
|
+
continue;
|
|
172
|
+
const pid = Number(pidMatch[1]);
|
|
173
|
+
const cmd = pidMatch[2] ?? '';
|
|
174
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
175
|
+
continue;
|
|
176
|
+
const wsMatch = cmd.match(/--workspace(?:\s+|=)(\S+)/);
|
|
177
|
+
if (!wsMatch?.[1])
|
|
178
|
+
continue;
|
|
179
|
+
const workspace = resolve(wsMatch[1]);
|
|
180
|
+
const hostMatch = cmd.match(/--host(?:\s+|=)(\S+)/);
|
|
181
|
+
const portMatch = cmd.match(/--port(?:\s+|=)(\d+)/);
|
|
182
|
+
found.push({
|
|
183
|
+
pid,
|
|
184
|
+
workspace,
|
|
185
|
+
...(hostMatch?.[1] ? { host: hostMatch[1] } : {}),
|
|
186
|
+
...(portMatch?.[1] ? { port: Number(portMatch[1]) } : {}),
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
return found;
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=monitor-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor-registry.js","sourceRoot":"","sources":["../src/monitor-registry.ts"],"names":[],"mappings":"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"}
|
package/dist/monitor.js
CHANGED
|
@@ -4,7 +4,7 @@ import { watch } from 'node:fs';
|
|
|
4
4
|
import { createServer } from 'node:http';
|
|
5
5
|
import { basename, dirname, extname, relative, resolve, sep } from 'node:path';
|
|
6
6
|
import office2html from '@deckflow/office2html';
|
|
7
|
-
import { ensureGitignore, indexPath, lockPath, monitorDir, operationsPath, previewDir, } from '
|
|
7
|
+
import { ensureGitignore, indexPath, lockPath, monitorDir, operationsPath, previewDir, } from './workspace/index.js';
|
|
8
8
|
import { ensureOffice2HtmlExecutable } from './office2html-exec.js';
|
|
9
9
|
const KEEPALIVE_MS = 15_000;
|
|
10
10
|
const DEBOUNCE_MS = 80;
|