tauri-agent-tools 0.7.1 → 0.9.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/.agents/skills/tauri-agent-tools/SKILL.md +59 -14
- package/.agents/skills/tauri-bridge-setup/SKILL.md +10 -4
- package/.agents/skills/tauri-debug-quickstart/SKILL.md +10 -6
- package/AGENTS.md +13 -3
- package/README.md +33 -5
- package/dist/bridge/client.d.ts +21 -0
- package/dist/bridge/client.js +38 -2
- package/dist/bridge/client.js.map +1 -1
- package/dist/bridge/tokenDiscovery.js +5 -2
- package/dist/bridge/tokenDiscovery.js.map +1 -1
- package/dist/cli.js +5 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/bundle.d.ts +2 -0
- package/dist/commands/bundle.js +212 -0
- package/dist/commands/bundle.js.map +1 -0
- package/dist/commands/capabilitiesAudit.js +14 -1
- package/dist/commands/capabilitiesAudit.js.map +1 -1
- package/dist/commands/capture.d.ts +11 -0
- package/dist/commands/capture.js +161 -156
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/check.js +2 -2
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/consoleMonitor.js +3 -3
- package/dist/commands/consoleMonitor.js.map +1 -1
- package/dist/commands/dom.js +2 -2
- package/dist/commands/dom.js.map +1 -1
- package/dist/commands/health.js +19 -1
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/interact/click.js +2 -2
- package/dist/commands/interact/click.js.map +1 -1
- package/dist/commands/interact/scroll.js +3 -3
- package/dist/commands/interact/scroll.js.map +1 -1
- package/dist/commands/ipcMonitor.js +41 -7
- package/dist/commands/ipcMonitor.js.map +1 -1
- package/dist/commands/logs.d.ts +30 -0
- package/dist/commands/logs.js +279 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/mutations.js +3 -3
- package/dist/commands/mutations.js.map +1 -1
- package/dist/commands/probe.js +49 -9
- package/dist/commands/probe.js.map +1 -1
- package/dist/commands/processTree.js +116 -4
- package/dist/commands/processTree.js.map +1 -1
- package/dist/commands/rustLogs.js +3 -3
- package/dist/commands/rustLogs.js.map +1 -1
- package/dist/commands/screenshot.js +2 -2
- package/dist/commands/screenshot.js.map +1 -1
- package/dist/commands/shared.d.ts +37 -0
- package/dist/commands/shared.js +62 -3
- package/dist/commands/shared.js.map +1 -1
- package/dist/commands/sidecarReplay.js +46 -1
- package/dist/commands/sidecarReplay.js.map +1 -1
- package/dist/commands/sidecarTap.js +23 -8
- package/dist/commands/sidecarTap.js.map +1 -1
- package/dist/commands/snapshot.js +2 -2
- package/dist/commands/snapshot.js.map +1 -1
- package/dist/commands/storeInspect.js +2 -2
- package/dist/commands/storeInspect.js.map +1 -1
- package/dist/commands/wait.js +3 -3
- package/dist/commands/wait.js.map +1 -1
- package/dist/commands/webviewAttach.js +17 -1
- package/dist/commands/webviewAttach.js.map +1 -1
- package/dist/platform/macos.js +35 -15
- package/dist/platform/macos.js.map +1 -1
- package/dist/schemas/bridge.d.ts +14 -0
- package/dist/schemas/bridge.js +3 -0
- package/dist/schemas/bridge.js.map +1 -1
- package/dist/util/logMerge.d.ts +42 -0
- package/dist/util/logMerge.js +133 -0
- package/dist/util/logMerge.js.map +1 -0
- package/dist/util/mergeByTimestamp.d.ts +18 -0
- package/dist/util/mergeByTimestamp.js +30 -0
- package/dist/util/mergeByTimestamp.js.map +1 -0
- package/dist/util/psTree.d.ts +28 -0
- package/dist/util/psTree.js +76 -0
- package/dist/util/psTree.js.map +1 -0
- package/dist/util/redactText.d.ts +23 -0
- package/dist/util/redactText.js +377 -0
- package/dist/util/redactText.js.map +1 -0
- package/examples/tauri-bridge/src/dev_bridge.rs +199 -12
- package/package.json +3 -2
- package/rust-bridge/README.md +2 -2
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { readFile, readdir } from 'node:fs/promises';
|
|
3
|
+
import { basename, join, resolve } from 'node:path';
|
|
4
|
+
import { addBridgeOptions, tryResolveBridgeConfig, parseIntArg } from './shared.js';
|
|
5
|
+
import { BridgeClient } from '../bridge/client.js';
|
|
6
|
+
import { resolveTauriProject, resolveTauriPaths, currentPlatform } from '../util/tauriConfig.js';
|
|
7
|
+
import { mergeByTimestamp } from '../util/mergeByTimestamp.js';
|
|
8
|
+
import { parseLogLine, normalizeRustLog, inferCorrelation, LEVEL_RANK, } from '../util/logMerge.js';
|
|
9
|
+
export const LOG_CURSOR_UNAVAILABLE_NOTE = 'bridge <0.8 has no log cursor; using drain polling (entries may be lost between polls)';
|
|
10
|
+
function collect(value, prev) {
|
|
11
|
+
return [...prev, value];
|
|
12
|
+
}
|
|
13
|
+
export function registerLogs(program) {
|
|
14
|
+
const cmd = new Command('logs')
|
|
15
|
+
.description("Merge a Tauri app's scattered logs (on-disk log files + bridge ring buffer) into one timestamp-ordered stream")
|
|
16
|
+
.option('--config <path>', 'Path to tauri.conf.json (or its dir). Auto-detected if omitted.')
|
|
17
|
+
.option('--identifier <id>', 'Bundle identifier override (locates the OS log dir without a config)')
|
|
18
|
+
.option('--log-dir <path>', 'Override the directory scanned for *.log files')
|
|
19
|
+
.option('--log-file <path>', 'Add an explicit log file (repeatable)', collect, [])
|
|
20
|
+
.option('--no-bridge', 'Skip the live bridge /logs source')
|
|
21
|
+
.option('--no-files', 'Skip on-disk log file sources')
|
|
22
|
+
.option('--level <level>', 'Minimum level: debug | info | warn | error')
|
|
23
|
+
.option('--source <regex>', 'Filter by normalized source (regex), e.g. "sidecar:" or "file:"')
|
|
24
|
+
.option('--filter <regex>', 'Filter messages by regex')
|
|
25
|
+
.option('--correlate', 'Infer correlation ids (run_id, requestId, …) into a correlation field')
|
|
26
|
+
.option('--follow', 'Follow live bridge logs until interrupted')
|
|
27
|
+
.option('--interval <ms>', 'Drain fallback polling interval for --follow', parseIntArg, 2000)
|
|
28
|
+
.option('--raw', 'Include the raw source payload/line in NDJSON output')
|
|
29
|
+
.option('--json', 'Emit NDJSON, one object per line (this is the default; accepted for consistency)')
|
|
30
|
+
.option('--pretty', 'Human-readable output (overrides --json)');
|
|
31
|
+
addBridgeOptions(cmd);
|
|
32
|
+
cmd.action(async (opts) => {
|
|
33
|
+
const minLevel = opts.level ? validateLevel(opts.level) : null;
|
|
34
|
+
const sourceRe = opts.source ? compileRegex(opts.source, 'source') : null;
|
|
35
|
+
const filterRe = opts.filter ? compileRegex(opts.filter, 'filter') : null;
|
|
36
|
+
if (opts.follow) {
|
|
37
|
+
await followBridgeLogs(opts, minLevel, sourceRe, filterRe);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const notes = [];
|
|
41
|
+
// ── On-disk file sources ────────────────────────────────────────────────
|
|
42
|
+
let fileEntries = [];
|
|
43
|
+
if (opts.files !== false) {
|
|
44
|
+
const files = await resolveFiles(opts, notes);
|
|
45
|
+
const perFile = await Promise.all(files.map((f) => readLogFile(f)));
|
|
46
|
+
fileEntries = perFile.flat();
|
|
47
|
+
notes.push(`files: ${fileEntries.length} line(s) from ${files.length} file(s)`);
|
|
48
|
+
}
|
|
49
|
+
// ── Live bridge ring buffer ─────────────────────────────────────────────
|
|
50
|
+
let bridgeEntries = [];
|
|
51
|
+
if (opts.bridge !== false) {
|
|
52
|
+
const cfg = await tryResolveBridgeConfig(opts);
|
|
53
|
+
if (!cfg) {
|
|
54
|
+
notes.push('bridge: no live bridge discovered (skipped)');
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
try {
|
|
58
|
+
const client = new BridgeClient(cfg, opts.windowLabel);
|
|
59
|
+
const logs = await client.fetchLogs();
|
|
60
|
+
bridgeEntries = logs.map(normalizeRustLog);
|
|
61
|
+
notes.push(`bridge: ${bridgeEntries.length} entry(ies) from /logs`);
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
notes.push(`bridge: ${e instanceof Error ? e.message : String(e)} (skipped)`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (fileEntries.length === 0 && bridgeEntries.length === 0) {
|
|
69
|
+
console.error(`note: no log entries available. ${notes.join('; ')}`);
|
|
70
|
+
console.error('Hint: pass --log-file <path>, --log-dir <dir>, --config <path>, or start the app with the dev bridge.');
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
// ── Merge + filter ──────────────────────────────────────────────────────
|
|
74
|
+
let merged = mergeByTimestamp([fileEntries, bridgeEntries]);
|
|
75
|
+
merged = prepareEntries(merged, { minLevel, sourceRe, filterRe, correlate: opts.correlate });
|
|
76
|
+
// ── Emit ────────────────────────────────────────────────────────────────
|
|
77
|
+
console.error(`# ${notes.join(' | ')} → ${merged.length} entries`);
|
|
78
|
+
emitRows(merged, opts);
|
|
79
|
+
});
|
|
80
|
+
program.addCommand(cmd);
|
|
81
|
+
}
|
|
82
|
+
export async function readFollowBridgeBatch(client, state, options = {}) {
|
|
83
|
+
const warn = options.warn ?? console.error;
|
|
84
|
+
if (state.drainFallback) {
|
|
85
|
+
// The poll cadence may be sub-second; don't let it shrink the HTTP timeout.
|
|
86
|
+
const entries = await client.fetchLogs(Math.max(options.intervalMs ?? 2000, 2000));
|
|
87
|
+
return asEntries(entries).map(normalizeRustLog);
|
|
88
|
+
}
|
|
89
|
+
const response = await client.fetchLogs({
|
|
90
|
+
cursor: state.cursor,
|
|
91
|
+
waitMs: options.waitMs ?? 10_000,
|
|
92
|
+
limit: options.limit ?? 1000,
|
|
93
|
+
timeoutMs: (options.waitMs ?? 10_000) + 1000,
|
|
94
|
+
});
|
|
95
|
+
const envelope = asEnvelope(response);
|
|
96
|
+
if (envelope.cursor === undefined) {
|
|
97
|
+
state.drainFallback = true;
|
|
98
|
+
if (!state.warnedDrainFallback) {
|
|
99
|
+
state.warnedDrainFallback = true;
|
|
100
|
+
warn(`note: ${LOG_CURSOR_UNAVAILABLE_NOTE}`);
|
|
101
|
+
}
|
|
102
|
+
return envelope.entries.map(normalizeRustLog);
|
|
103
|
+
}
|
|
104
|
+
state.cursor = envelope.cursor;
|
|
105
|
+
if ((envelope.dropped ?? 0) > 0) {
|
|
106
|
+
warn(`warning: bridge log cursor dropped ${envelope.dropped} evicted entrie(s)`);
|
|
107
|
+
}
|
|
108
|
+
return envelope.entries.map(normalizeRustLog);
|
|
109
|
+
}
|
|
110
|
+
async function followBridgeLogs(opts, minLevel, sourceRe, filterRe) {
|
|
111
|
+
const cfg = await tryResolveBridgeConfig(opts);
|
|
112
|
+
if (!cfg) {
|
|
113
|
+
throw new Error('logs --follow needs a live bridge. Pass --port/--token or start the app with the dev bridge.');
|
|
114
|
+
}
|
|
115
|
+
const client = new BridgeClient(cfg, opts.windowLabel);
|
|
116
|
+
const state = {
|
|
117
|
+
cursor: 0,
|
|
118
|
+
drainFallback: false,
|
|
119
|
+
warnedDrainFallback: false,
|
|
120
|
+
};
|
|
121
|
+
let stopped = false;
|
|
122
|
+
const stop = () => {
|
|
123
|
+
stopped = true;
|
|
124
|
+
};
|
|
125
|
+
process.once('SIGINT', stop);
|
|
126
|
+
try {
|
|
127
|
+
while (!stopped) {
|
|
128
|
+
const batch = await readFollowBridgeBatch(client, state, {
|
|
129
|
+
intervalMs: normalizeInterval(opts.interval),
|
|
130
|
+
});
|
|
131
|
+
const rows = prepareEntries(batch, { minLevel, sourceRe, filterRe, correlate: opts.correlate });
|
|
132
|
+
emitRows(rows, opts);
|
|
133
|
+
if (state.drainFallback)
|
|
134
|
+
await delay(normalizeInterval(opts.interval));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
finally {
|
|
138
|
+
process.off('SIGINT', stop);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function prepareEntries(entries, options) {
|
|
142
|
+
let merged = entries.filter((e) => {
|
|
143
|
+
if (options.minLevel && LEVEL_RANK[e.level] < LEVEL_RANK[options.minLevel])
|
|
144
|
+
return false;
|
|
145
|
+
if (options.sourceRe && !options.sourceRe.test(e.source))
|
|
146
|
+
return false;
|
|
147
|
+
if (options.filterRe && !options.filterRe.test(e.message))
|
|
148
|
+
return false;
|
|
149
|
+
return true;
|
|
150
|
+
});
|
|
151
|
+
if (options.correlate) {
|
|
152
|
+
merged = merged.map((e) => {
|
|
153
|
+
const correlation = inferCorrelation(e.message);
|
|
154
|
+
return correlation ? { ...e, correlation } : e;
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
return merged;
|
|
158
|
+
}
|
|
159
|
+
function emitRows(entries, opts) {
|
|
160
|
+
if (opts.pretty) {
|
|
161
|
+
for (const e of entries)
|
|
162
|
+
console.log(formatPretty(e));
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
for (const e of entries) {
|
|
166
|
+
if (opts.raw) {
|
|
167
|
+
console.log(JSON.stringify(e));
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
const rest = { ...e };
|
|
171
|
+
delete rest.raw;
|
|
172
|
+
console.log(JSON.stringify(rest));
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
function asEnvelope(response) {
|
|
177
|
+
return Array.isArray(response) ? { entries: response } : response;
|
|
178
|
+
}
|
|
179
|
+
function asEntries(response) {
|
|
180
|
+
return Array.isArray(response) ? response : response.entries;
|
|
181
|
+
}
|
|
182
|
+
function normalizeInterval(value) {
|
|
183
|
+
if (!Number.isFinite(value))
|
|
184
|
+
return 2000;
|
|
185
|
+
return Math.max(100, Math.trunc(value));
|
|
186
|
+
}
|
|
187
|
+
function delay(ms) {
|
|
188
|
+
return new Promise((resolveDelay) => setTimeout(resolveDelay, ms));
|
|
189
|
+
}
|
|
190
|
+
async function resolveFiles(opts, notes) {
|
|
191
|
+
const set = new Set();
|
|
192
|
+
for (const f of opts.logFile ?? [])
|
|
193
|
+
set.add(resolve(f));
|
|
194
|
+
const dir = await resolveLogDir(opts, notes);
|
|
195
|
+
if (dir) {
|
|
196
|
+
for (const name of await listLogFiles(dir))
|
|
197
|
+
set.add(join(dir, name));
|
|
198
|
+
}
|
|
199
|
+
return [...set];
|
|
200
|
+
}
|
|
201
|
+
async function resolveLogDir(opts, notes) {
|
|
202
|
+
if (opts.logDir)
|
|
203
|
+
return resolve(opts.logDir);
|
|
204
|
+
try {
|
|
205
|
+
let identifier;
|
|
206
|
+
if (opts.identifier && !opts.config) {
|
|
207
|
+
identifier = opts.identifier;
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
const r = await resolveTauriProject({ configPath: opts.config, identifierOverride: opts.identifier });
|
|
211
|
+
identifier = r.identifier;
|
|
212
|
+
}
|
|
213
|
+
return resolveTauriPaths(identifier)[currentPlatform()].appLogDir;
|
|
214
|
+
}
|
|
215
|
+
catch (e) {
|
|
216
|
+
notes.push(`log-dir: unresolved (${e instanceof Error ? e.message : String(e)})`);
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
async function listLogFiles(dir) {
|
|
221
|
+
try {
|
|
222
|
+
const entries = await readdir(dir);
|
|
223
|
+
return entries.filter((f) => /\.log(\.\d+|\.prev)?$/i.test(f));
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
return [];
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
async function readLogFile(path) {
|
|
230
|
+
let content;
|
|
231
|
+
try {
|
|
232
|
+
content = await readFile(path, 'utf-8');
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
return [];
|
|
236
|
+
}
|
|
237
|
+
const base = basename(path);
|
|
238
|
+
const out = [];
|
|
239
|
+
let lastTs = '';
|
|
240
|
+
for (const rawLine of content.split('\n')) {
|
|
241
|
+
const line = rawLine.endsWith('\r') ? rawLine.slice(0, -1) : rawLine;
|
|
242
|
+
if (line.trim() === '')
|
|
243
|
+
continue;
|
|
244
|
+
const p = parseLogLine(line);
|
|
245
|
+
if (p.ts)
|
|
246
|
+
lastTs = p.ts;
|
|
247
|
+
out.push({
|
|
248
|
+
ts: p.ts || lastTs,
|
|
249
|
+
level: p.level,
|
|
250
|
+
source: `file:${base}`,
|
|
251
|
+
subsystem: p.subsystem,
|
|
252
|
+
message: p.message,
|
|
253
|
+
origin: 'file',
|
|
254
|
+
raw: line,
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
return out;
|
|
258
|
+
}
|
|
259
|
+
function formatPretty(e) {
|
|
260
|
+
const time = e.ts ? new Date(e.ts).toISOString().slice(11, 23) : '--:--:--.---';
|
|
261
|
+
const lvl = e.level.toUpperCase().padEnd(5);
|
|
262
|
+
const sub = e.subsystem ? ` ${e.subsystem}:` : '';
|
|
263
|
+
const corr = e.correlation ? ` ${JSON.stringify(e.correlation)}` : '';
|
|
264
|
+
return `[${time}] ${lvl} [${e.source}]${sub} ${e.message}${corr}`;
|
|
265
|
+
}
|
|
266
|
+
function validateLevel(input) {
|
|
267
|
+
if (input === 'debug' || input === 'info' || input === 'warn' || input === 'error')
|
|
268
|
+
return input;
|
|
269
|
+
throw new Error(`Invalid --level: ${input}. Expected one of: debug, info, warn, error.`);
|
|
270
|
+
}
|
|
271
|
+
function compileRegex(pattern, label) {
|
|
272
|
+
try {
|
|
273
|
+
return new RegExp(pattern);
|
|
274
|
+
}
|
|
275
|
+
catch {
|
|
276
|
+
throw new Error(`Invalid ${label} regex: ${pattern}`);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import { addBridgeOptions, resolveBridge } from './shared.js';
|
|
3
|
+
import { addBridgeOptions, resolveBridge, parseIntArg } from './shared.js';
|
|
4
4
|
import { MutationEntrySchema } from '../schemas/commands.js';
|
|
5
5
|
function buildPatchScript(selector, watchAttributes) {
|
|
6
6
|
const escaped = selector.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
|
|
@@ -88,8 +88,8 @@ export function registerMutations(program) {
|
|
|
88
88
|
.description('Watch DOM mutations on a CSS selector (read-only)')
|
|
89
89
|
.argument('<selector>', 'CSS selector of the element to observe')
|
|
90
90
|
.option('--attributes', 'Also watch attribute changes')
|
|
91
|
-
.option('--interval <ms>', 'Poll interval in milliseconds',
|
|
92
|
-
.option('--duration <ms>', 'Auto-stop after N milliseconds',
|
|
91
|
+
.option('--interval <ms>', 'Poll interval in milliseconds', parseIntArg, 500)
|
|
92
|
+
.option('--duration <ms>', 'Auto-stop after N milliseconds', parseIntArg)
|
|
93
93
|
.option('--json', 'Output one JSON object per line');
|
|
94
94
|
addBridgeOptions(cmd);
|
|
95
95
|
cmd.action(async (selector, opts) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutations.js","sourceRoot":"","sources":["../../src/commands/mutations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"mutations.js","sourceRoot":"","sources":["../../src/commands/mutations.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/probe.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import { detectDisplayServer } from '../platform/detect.js';
|
|
3
|
-
import {
|
|
3
|
+
import { BridgeClient } from '../bridge/client.js';
|
|
4
|
+
import { addBridgeOptions, resolveBridge, tryResolveBridgeConfig } from './shared.js';
|
|
4
5
|
import { discoverBridgesByPid, discoverBridge } from '../bridge/tokenDiscovery.js';
|
|
5
6
|
export function registerProbe(program) {
|
|
6
7
|
const cmd = new Command('probe')
|
|
@@ -14,15 +15,56 @@ export function registerProbe(program) {
|
|
|
14
15
|
pid,
|
|
15
16
|
port: cfg.port,
|
|
16
17
|
}));
|
|
17
|
-
// 2.
|
|
18
|
-
const
|
|
19
|
-
|
|
18
|
+
// 2. Detect platform early so the no-bridge path can still emit a full result.
|
|
19
|
+
const platform = detectDisplayServer();
|
|
20
|
+
const hasExplicitTarget = opts.port !== undefined || opts.token !== undefined || opts.pid !== undefined;
|
|
21
|
+
// 3. Resolve specific bridge (may throw if none found)
|
|
22
|
+
let bridge;
|
|
23
|
+
if (!hasExplicitTarget && allBridges.length === 0) {
|
|
24
|
+
const config = await tryResolveBridgeConfig(opts);
|
|
25
|
+
if (config === null) {
|
|
26
|
+
const note = 'Start the Tauri dev app with the dev bridge enabled, or pass --port and --token.';
|
|
27
|
+
const result = {
|
|
28
|
+
bridges: allBridges,
|
|
29
|
+
target: {
|
|
30
|
+
alive: false,
|
|
31
|
+
version: null,
|
|
32
|
+
describe: null,
|
|
33
|
+
page: { url: null, title: null, viewport: null },
|
|
34
|
+
note,
|
|
35
|
+
},
|
|
36
|
+
platform,
|
|
37
|
+
};
|
|
38
|
+
if (opts.json) {
|
|
39
|
+
console.log(JSON.stringify(result, null, 2));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
console.log('=== Tauri Bridge Probe ===');
|
|
43
|
+
console.log('');
|
|
44
|
+
console.log('Running bridges: none');
|
|
45
|
+
console.log('');
|
|
46
|
+
console.log(`Platform: ${platform}`);
|
|
47
|
+
console.log('Bridge alive: no');
|
|
48
|
+
console.log(`Note: ${note}`);
|
|
49
|
+
console.log('');
|
|
50
|
+
console.log('Page:');
|
|
51
|
+
console.log(' URL: (unavailable)');
|
|
52
|
+
console.log(' Title: (unavailable)');
|
|
53
|
+
console.log(' Viewport: (unavailable)');
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
bridge = new BridgeClient(config, opts.windowLabel);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
bridge = await resolveBridge(opts);
|
|
60
|
+
}
|
|
61
|
+
// 4. Ping
|
|
20
62
|
const alive = await bridge.ping();
|
|
21
|
-
//
|
|
63
|
+
// 5. Get version (graceful null on 404)
|
|
22
64
|
const versionInfo = await bridge.version();
|
|
23
|
-
//
|
|
65
|
+
// 6. Get describe (graceful null on 404)
|
|
24
66
|
const describeInfo = await bridge.describe();
|
|
25
|
-
//
|
|
67
|
+
// 7. Get page info via eval (try/catch each independently)
|
|
26
68
|
let url = null;
|
|
27
69
|
let title = null;
|
|
28
70
|
let viewport = null;
|
|
@@ -44,8 +86,6 @@ export function registerProbe(program) {
|
|
|
44
86
|
catch {
|
|
45
87
|
// ignore
|
|
46
88
|
}
|
|
47
|
-
// 7. Detect platform
|
|
48
|
-
const platform = detectDisplayServer();
|
|
49
89
|
// Determine the port for the target by checking opts or discovered bridge
|
|
50
90
|
let targetPort = opts.port;
|
|
51
91
|
if (targetPort === undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../../src/commands/probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../../src/commands/probe.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,44 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
-
import { addBridgeOptions, resolveBridge } from './shared.js';
|
|
2
|
+
import { addBridgeOptions, resolveBridge, endpointAvailable, endpointUnavailableNote, } from './shared.js';
|
|
3
|
+
import { discoverBridge, discoverBridgesByPid } from '../bridge/tokenDiscovery.js';
|
|
4
|
+
import { snapshotProcesses, buildDescendantTree, countDescendants } from '../util/psTree.js';
|
|
3
5
|
export function registerProcessTree(program) {
|
|
4
6
|
const cmd = new Command('process-tree')
|
|
5
|
-
.description('Show the Tauri PID and its
|
|
7
|
+
.description('Show the Tauri PID and its sidecars. Uses bridge /process (v0.7+); ' +
|
|
8
|
+
'--deep walks the real OS descendant tree (sidecar grandchildren, workers) without the bridge.')
|
|
9
|
+
.option('--deep', 'Walk the full OS process descendant tree via `ps` (includes unregistered grandchildren); works without bridge /process')
|
|
6
10
|
.option('--json', 'Output as JSON');
|
|
7
11
|
addBridgeOptions(cmd);
|
|
8
12
|
cmd.action(async (opts) => {
|
|
13
|
+
// --deep: OS-level descendant walk, independent of the bridge entirely.
|
|
14
|
+
// With an explicit --pid it needs no bridge at all; otherwise it resolves
|
|
15
|
+
// the app PID from a discoverable bridge token file.
|
|
16
|
+
if (opts.deep) {
|
|
17
|
+
const appPid = await resolveAppPid(opts);
|
|
18
|
+
if (appPid === null) {
|
|
19
|
+
throw new Error('process-tree --deep needs the app PID. Pass --pid <n>, or run it where a bridge token file is discoverable.');
|
|
20
|
+
}
|
|
21
|
+
await renderDeep(appPid, opts);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
9
24
|
const bridge = await resolveBridge(opts);
|
|
25
|
+
// Default path: bridge /process. On older bridges this endpoint is absent.
|
|
26
|
+
if (!(await endpointAvailable(bridge, '/process', opts))) {
|
|
27
|
+
// Degrade where we can: fall back to the OS walk if the app PID is
|
|
28
|
+
// resolvable; otherwise re-raise the actionable "needs v0.7" error so the
|
|
29
|
+
// upgrade hint is preserved.
|
|
30
|
+
const appPid = await resolveAppPid(opts);
|
|
31
|
+
if (appPid === null) {
|
|
32
|
+
await bridge.process(); // throws requireEndpoint('/process') with upgrade hint
|
|
33
|
+
return; // unreachable
|
|
34
|
+
}
|
|
35
|
+
if (!opts.json) {
|
|
36
|
+
const v = (await bridge.version())?.version;
|
|
37
|
+
console.error(`note: ${endpointUnavailableNote('/process', v)} Falling back to the OS process walk (as --deep).`);
|
|
38
|
+
}
|
|
39
|
+
await renderDeep(appPid, opts);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
10
42
|
const proc = await bridge.process();
|
|
11
43
|
if (opts.json) {
|
|
12
44
|
console.log(JSON.stringify(proc, null, 2));
|
|
@@ -16,6 +48,86 @@ export function registerProcessTree(program) {
|
|
|
16
48
|
});
|
|
17
49
|
program.addCommand(cmd);
|
|
18
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Resolve the target app PID for the OS-level walk:
|
|
53
|
+
* - explicit `--pid` wins;
|
|
54
|
+
* - explicit `--port` matches a discovered bridge token by port (strictly — no
|
|
55
|
+
* silent first-bridge fallback, so an unknown port resolves to null);
|
|
56
|
+
* - otherwise the first/only discoverable bridge.
|
|
57
|
+
*/
|
|
58
|
+
async function resolveAppPid(opts) {
|
|
59
|
+
if (opts.pid !== undefined)
|
|
60
|
+
return opts.pid;
|
|
61
|
+
const byPid = await discoverBridgesByPid();
|
|
62
|
+
if (opts.port !== undefined) {
|
|
63
|
+
for (const [pid, cfg] of byPid) {
|
|
64
|
+
if (cfg.port === opts.port)
|
|
65
|
+
return pid;
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
const first = await discoverBridge();
|
|
70
|
+
if (first) {
|
|
71
|
+
for (const [pid, cfg] of byPid) {
|
|
72
|
+
if (cfg.port === first.port)
|
|
73
|
+
return pid;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Single unambiguous bridge: use it even if the port match above missed.
|
|
77
|
+
if (byPid.size === 1)
|
|
78
|
+
return [...byPid.keys()][0];
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
function toJson(n) {
|
|
82
|
+
return { pid: n.pid, ppid: n.ppid, command: n.command, children: n.children.map(toJson) };
|
|
83
|
+
}
|
|
84
|
+
async function renderDeep(appPid, opts) {
|
|
85
|
+
if (process.platform === 'win32') {
|
|
86
|
+
const msg = 'process-tree --deep is Unix-only (macOS/Linux) in this release.';
|
|
87
|
+
if (opts.json) {
|
|
88
|
+
console.log(JSON.stringify({ pid: appPid, found: false, source: 'os', error: msg }, null, 2));
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
console.error(`note: ${msg}`);
|
|
92
|
+
}
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const procs = await snapshotProcesses();
|
|
96
|
+
const tree = buildDescendantTree(procs, appPid);
|
|
97
|
+
if (opts.json) {
|
|
98
|
+
const payload = {
|
|
99
|
+
pid: appPid,
|
|
100
|
+
found: tree !== null,
|
|
101
|
+
source: 'os',
|
|
102
|
+
descendants: tree ? countDescendants(tree) : 0,
|
|
103
|
+
tree: tree ? toJson(tree) : null,
|
|
104
|
+
};
|
|
105
|
+
console.log(JSON.stringify(payload, null, 2));
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (!tree) {
|
|
109
|
+
console.log(`No process found with pid=${appPid} (it may have exited).`);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
console.log(`app pid=${tree.pid} ${shortCommand(tree.command)}`);
|
|
113
|
+
renderChildren(tree.children, '');
|
|
114
|
+
console.log(`\n${countDescendants(tree)} descendant process(es) [source: os]`);
|
|
115
|
+
}
|
|
116
|
+
function renderChildren(nodes, indent) {
|
|
117
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
118
|
+
const node = nodes[i];
|
|
119
|
+
const last = i === nodes.length - 1;
|
|
120
|
+
const connector = last ? '└──' : '├──';
|
|
121
|
+
console.log(`${indent}${connector} pid=${node.pid} ${shortCommand(node.command)}`);
|
|
122
|
+
const childIndent = indent + (last ? ' ' : '│ ');
|
|
123
|
+
renderChildren(node.children, childIndent);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/** Trim a full command line to a readable single-line label. */
|
|
127
|
+
function shortCommand(command) {
|
|
128
|
+
const trimmed = command.length > 100 ? command.slice(0, 97) + '…' : command;
|
|
129
|
+
return trimmed || '(unknown)';
|
|
130
|
+
}
|
|
19
131
|
function renderHuman(p) {
|
|
20
132
|
const uptimeSec = Math.floor(p.tauri.uptime_ms / 1000);
|
|
21
133
|
console.log(`tauri pid=${p.tauri.pid} uptime=${uptimeSec}s`);
|
|
@@ -25,8 +137,8 @@ function renderHuman(p) {
|
|
|
25
137
|
console.log(` args=[${p.tauri.args.join(', ')}]`);
|
|
26
138
|
if (p.sidecars.length === 0) {
|
|
27
139
|
console.log(`└── (no sidecars registered)`);
|
|
28
|
-
console.log(` Tip:
|
|
29
|
-
console.log(` or
|
|
140
|
+
console.log(` Tip: re-run with \`--deep\` to walk the real OS process tree (unregistered children included),`);
|
|
141
|
+
console.log(` or register sidecars via \`dev_bridge::spawn_sidecar_monitored(.., Some(®istry))\`.`);
|
|
30
142
|
return;
|
|
31
143
|
}
|
|
32
144
|
for (let i = 0; i < p.sidecars.length; i++) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processTree.js","sourceRoot":"","sources":["../../src/commands/processTree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,
|
|
1
|
+
{"version":3,"file":"processTree.js","sourceRoot":"","sources":["../../src/commands/processTree.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
-
import { addBridgeOptions, resolveBridge, parseEnum } from './shared.js';
|
|
2
|
+
import { addBridgeOptions, resolveBridge, parseEnum, parseIntArg } from './shared.js';
|
|
3
3
|
import { RustLogLevelSchema } from '../schemas/bridge.js';
|
|
4
4
|
function matchesLevel(entry, level) {
|
|
5
5
|
if (!level)
|
|
@@ -43,8 +43,8 @@ export function registerRustLogs(program) {
|
|
|
43
43
|
.option('--target <regex>', 'Filter by Rust module path (regex)')
|
|
44
44
|
.option('--source <source>', 'Filter by source: rust, sidecar, all, or sidecar:<name>', 'all')
|
|
45
45
|
.option('--filter <regex>', 'Filter messages by regex pattern')
|
|
46
|
-
.option('--interval <ms>', 'Poll interval in milliseconds',
|
|
47
|
-
.option('--duration <ms>', 'Auto-stop after N milliseconds',
|
|
46
|
+
.option('--interval <ms>', 'Poll interval in milliseconds', parseIntArg, 500)
|
|
47
|
+
.option('--duration <ms>', 'Auto-stop after N milliseconds', parseIntArg)
|
|
48
48
|
.option('--json', 'Output one JSON object per line');
|
|
49
49
|
addBridgeOptions(cmd);
|
|
50
50
|
cmd.action(async (opts) => {
|