tauri-agent-tools 0.6.0 → 0.7.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 +94 -5
- package/.agents/skills/tauri-bridge-setup/SKILL.md +45 -13
- package/.agents/skills/tauri-debug-quickstart/SKILL.md +80 -0
- package/README.md +71 -3
- package/dist/bridge/client.d.ts +17 -1
- package/dist/bridge/client.js +82 -1
- package/dist/bridge/client.js.map +1 -1
- package/dist/cli.js +25 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/appPaths.d.ts +2 -0
- package/dist/commands/appPaths.js +97 -0
- package/dist/commands/appPaths.js.map +1 -0
- package/dist/commands/capabilitiesAudit.d.ts +2 -0
- package/dist/commands/capabilitiesAudit.js +105 -0
- package/dist/commands/capabilitiesAudit.js.map +1 -0
- package/dist/commands/configInspect.d.ts +2 -0
- package/dist/commands/configInspect.js +223 -0
- package/dist/commands/configInspect.js.map +1 -0
- package/dist/commands/diagnose.d.ts +2 -0
- package/dist/commands/diagnose.js +311 -0
- package/dist/commands/diagnose.js.map +1 -0
- package/dist/commands/forensics.d.ts +2 -0
- package/dist/commands/forensics.js +331 -0
- package/dist/commands/forensics.js.map +1 -0
- package/dist/commands/health.d.ts +2 -0
- package/dist/commands/health.js +39 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/osLogs.d.ts +2 -0
- package/dist/commands/osLogs.js +130 -0
- package/dist/commands/osLogs.js.map +1 -0
- package/dist/commands/processTree.d.ts +2 -0
- package/dist/commands/processTree.js +45 -0
- package/dist/commands/processTree.js.map +1 -0
- package/dist/commands/sidecarReplay.d.ts +7 -0
- package/dist/commands/sidecarReplay.js +93 -0
- package/dist/commands/sidecarReplay.js.map +1 -0
- package/dist/commands/sidecarTap.d.ts +2 -0
- package/dist/commands/sidecarTap.js +118 -0
- package/dist/commands/sidecarTap.js.map +1 -0
- package/dist/commands/webviewAttach.d.ts +2 -0
- package/dist/commands/webviewAttach.js +64 -0
- package/dist/commands/webviewAttach.js.map +1 -0
- package/dist/platform/oslog/darwin.d.ts +21 -0
- package/dist/platform/oslog/darwin.js +72 -0
- package/dist/platform/oslog/darwin.js.map +1 -0
- package/dist/platform/oslog/linux.d.ts +16 -0
- package/dist/platform/oslog/linux.js +47 -0
- package/dist/platform/oslog/linux.js.map +1 -0
- package/dist/platform/oslog/windows.d.ts +15 -0
- package/dist/platform/oslog/windows.js +16 -0
- package/dist/platform/oslog/windows.js.map +1 -0
- package/dist/schemas/bridge.d.ts +222 -0
- package/dist/schemas/bridge.js +44 -0
- package/dist/schemas/bridge.js.map +1 -1
- package/dist/schemas/osLog.d.ts +34 -0
- package/dist/schemas/osLog.js +18 -0
- package/dist/schemas/osLog.js.map +1 -0
- package/dist/schemas/sidecar.d.ts +33 -0
- package/dist/schemas/sidecar.js +17 -0
- package/dist/schemas/sidecar.js.map +1 -0
- package/dist/schemas/tauriConfig.d.ts +825 -0
- package/dist/schemas/tauriConfig.js +102 -0
- package/dist/schemas/tauriConfig.js.map +1 -0
- package/dist/util/ndjson.d.ts +37 -0
- package/dist/util/ndjson.js +82 -0
- package/dist/util/ndjson.js.map +1 -0
- package/dist/util/tauriConfig.d.ts +63 -0
- package/dist/util/tauriConfig.js +235 -0
- package/dist/util/tauriConfig.js.map +1 -0
- package/examples/frontend-stub/index.html +1 -0
- package/examples/tauri-bridge/Cargo.toml +6 -0
- package/examples/tauri-bridge/build.rs +3 -0
- package/examples/tauri-bridge/icons/icon.png +0 -0
- package/examples/tauri-bridge/src/dev_bridge.rs +424 -11
- package/examples/tauri-bridge/tauri.conf.json +25 -0
- package/package.json +3 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
// === tauri.conf.json (v1 + v2, partial — passthrough preserves unknown fields) ===
|
|
3
|
+
export const TauriBundleConfigSchema = z
|
|
4
|
+
.object({
|
|
5
|
+
identifier: z.string().optional(),
|
|
6
|
+
externalBin: z.array(z.string()).optional(),
|
|
7
|
+
targets: z.union([z.string(), z.array(z.string())]).optional(),
|
|
8
|
+
})
|
|
9
|
+
.passthrough();
|
|
10
|
+
export const TauriBuildConfigSchema = z
|
|
11
|
+
.object({
|
|
12
|
+
devUrl: z.string().optional(),
|
|
13
|
+
devPath: z.string().optional(),
|
|
14
|
+
frontendDist: z.string().optional(),
|
|
15
|
+
distDir: z.string().optional(),
|
|
16
|
+
beforeDevCommand: z.string().optional(),
|
|
17
|
+
})
|
|
18
|
+
.passthrough();
|
|
19
|
+
export const TauriWindowConfigSchema = z
|
|
20
|
+
.object({
|
|
21
|
+
label: z.string().optional(),
|
|
22
|
+
title: z.string().optional(),
|
|
23
|
+
url: z.string().optional(),
|
|
24
|
+
width: z.number().optional(),
|
|
25
|
+
height: z.number().optional(),
|
|
26
|
+
})
|
|
27
|
+
.passthrough();
|
|
28
|
+
export const TauriAppConfigSchema = z
|
|
29
|
+
.object({
|
|
30
|
+
windows: z.array(TauriWindowConfigSchema).optional(),
|
|
31
|
+
security: z
|
|
32
|
+
.object({
|
|
33
|
+
capabilities: z.array(z.union([z.string(), z.record(z.string(), z.unknown())])).optional(),
|
|
34
|
+
csp: z.string().nullable().optional(),
|
|
35
|
+
})
|
|
36
|
+
.passthrough()
|
|
37
|
+
.optional(),
|
|
38
|
+
})
|
|
39
|
+
.passthrough();
|
|
40
|
+
export const TauriConfigSchema = z
|
|
41
|
+
.object({
|
|
42
|
+
identifier: z.string().optional(),
|
|
43
|
+
productName: z.string().optional(),
|
|
44
|
+
version: z.string().optional(),
|
|
45
|
+
mainBinaryName: z.string().optional(),
|
|
46
|
+
build: TauriBuildConfigSchema.optional(),
|
|
47
|
+
bundle: TauriBundleConfigSchema.optional(),
|
|
48
|
+
app: TauriAppConfigSchema.optional(),
|
|
49
|
+
tauri: z.record(z.string(), z.unknown()).optional(),
|
|
50
|
+
})
|
|
51
|
+
.passthrough();
|
|
52
|
+
// === Tauri capability files (capabilities/*.json) ===
|
|
53
|
+
export const CapabilityPermissionSchema = z.union([
|
|
54
|
+
z.string(),
|
|
55
|
+
z
|
|
56
|
+
.object({
|
|
57
|
+
identifier: z.string(),
|
|
58
|
+
allow: z.array(z.unknown()).optional(),
|
|
59
|
+
deny: z.array(z.unknown()).optional(),
|
|
60
|
+
})
|
|
61
|
+
.passthrough(),
|
|
62
|
+
]);
|
|
63
|
+
export const CapabilitySchema = z
|
|
64
|
+
.object({
|
|
65
|
+
identifier: z.string(),
|
|
66
|
+
description: z.string().optional(),
|
|
67
|
+
windows: z.array(z.string()).optional(),
|
|
68
|
+
webviews: z.array(z.string()).optional(),
|
|
69
|
+
platforms: z.array(z.string()).optional(),
|
|
70
|
+
permissions: z.array(CapabilityPermissionSchema).default([]),
|
|
71
|
+
local: z.boolean().optional(),
|
|
72
|
+
remote: z.unknown().optional(),
|
|
73
|
+
})
|
|
74
|
+
.passthrough();
|
|
75
|
+
// === Resolved per-platform Tauri OS dirs ===
|
|
76
|
+
export const TauriPathSetSchema = z.object({
|
|
77
|
+
appConfigDir: z.string(),
|
|
78
|
+
appDataDir: z.string(),
|
|
79
|
+
appLocalDataDir: z.string(),
|
|
80
|
+
appCacheDir: z.string(),
|
|
81
|
+
appLogDir: z.string(),
|
|
82
|
+
});
|
|
83
|
+
export const ResolvedTauriConfigSchema = z.object({
|
|
84
|
+
configPath: z.string(),
|
|
85
|
+
identifier: z.string(),
|
|
86
|
+
productName: z.string(),
|
|
87
|
+
version: z.string().nullable(),
|
|
88
|
+
mainBinaryName: z.string().nullable(),
|
|
89
|
+
devUrl: z.string().nullable(),
|
|
90
|
+
devPort: z.number().nullable(),
|
|
91
|
+
frontendDist: z.string().nullable(),
|
|
92
|
+
sidecars: z.array(z.string()),
|
|
93
|
+
windows: z.array(z.string()),
|
|
94
|
+
capabilityFiles: z.array(z.string()),
|
|
95
|
+
paths: z.object({
|
|
96
|
+
darwin: TauriPathSetSchema,
|
|
97
|
+
linux: TauriPathSetSchema,
|
|
98
|
+
win32: TauriPathSetSchema,
|
|
99
|
+
}),
|
|
100
|
+
platform: z.enum(['darwin', 'linux', 'win32']),
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=tauriConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tauriConfig.js","sourceRoot":"","sources":["../../src/schemas/tauriConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ErrorObject } from 'ajv';
|
|
2
|
+
/**
|
|
3
|
+
* Frame a stream of (potentially chunked) byte input into discrete lines,
|
|
4
|
+
* tolerating both `\n` and `\r\n` separators. Splits on `\n`, strips a trailing
|
|
5
|
+
* `\r`, holds incomplete trailing data until the next chunk or `flush()`.
|
|
6
|
+
*
|
|
7
|
+
* Lines are yielded individually (including blank ones; the caller decides
|
|
8
|
+
* whether to skip them) so a downstream NDJSON parser sees exactly one envelope
|
|
9
|
+
* per call.
|
|
10
|
+
*/
|
|
11
|
+
export declare class LineFramer {
|
|
12
|
+
private buffer;
|
|
13
|
+
push(chunk: string | Buffer): string[];
|
|
14
|
+
/** Drain any unterminated trailing data (e.g., final line without newline). */
|
|
15
|
+
flush(): string | null;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Result of attempting to parse one NDJSON line. Distinguishes parse failures
|
|
19
|
+
* (malformed JSON) from validation failures (schema mismatch) so consumers can
|
|
20
|
+
* report each differently.
|
|
21
|
+
*/
|
|
22
|
+
export type NdjsonParseResult = {
|
|
23
|
+
ok: true;
|
|
24
|
+
value: unknown;
|
|
25
|
+
valid: boolean;
|
|
26
|
+
errors: ErrorObject[];
|
|
27
|
+
} | {
|
|
28
|
+
ok: false;
|
|
29
|
+
error: string;
|
|
30
|
+
};
|
|
31
|
+
export declare class NdjsonValidator {
|
|
32
|
+
private validate;
|
|
33
|
+
constructor(jsonSchema?: unknown);
|
|
34
|
+
/** Parse one line of JSON. If a schema was provided, validate against it. */
|
|
35
|
+
parse(line: string): NdjsonParseResult;
|
|
36
|
+
hasSchema(): boolean;
|
|
37
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
// Ajv v8 + ajv-formats are CJS packages; their constructor/function lives on `.default`
|
|
3
|
+
// under Node's strict ESM resolution. Using createRequire gives a clean CJS import
|
|
4
|
+
// without fighting TypeScript's namespace-import semantics.
|
|
5
|
+
const require_ = createRequire(import.meta.url);
|
|
6
|
+
const ajvLoaded = require_('ajv');
|
|
7
|
+
const Ajv = typeof ajvLoaded === 'function'
|
|
8
|
+
? ajvLoaded
|
|
9
|
+
: ajvLoaded.default;
|
|
10
|
+
const addFormatsLoaded = require_('ajv-formats');
|
|
11
|
+
const addFormats = typeof addFormatsLoaded === 'function' ? addFormatsLoaded : addFormatsLoaded.default;
|
|
12
|
+
/**
|
|
13
|
+
* Frame a stream of (potentially chunked) byte input into discrete lines,
|
|
14
|
+
* tolerating both `\n` and `\r\n` separators. Splits on `\n`, strips a trailing
|
|
15
|
+
* `\r`, holds incomplete trailing data until the next chunk or `flush()`.
|
|
16
|
+
*
|
|
17
|
+
* Lines are yielded individually (including blank ones; the caller decides
|
|
18
|
+
* whether to skip them) so a downstream NDJSON parser sees exactly one envelope
|
|
19
|
+
* per call.
|
|
20
|
+
*/
|
|
21
|
+
export class LineFramer {
|
|
22
|
+
buffer = '';
|
|
23
|
+
push(chunk) {
|
|
24
|
+
this.buffer += typeof chunk === 'string' ? chunk : chunk.toString('utf-8');
|
|
25
|
+
const out = [];
|
|
26
|
+
let idx;
|
|
27
|
+
while ((idx = this.buffer.indexOf('\n')) >= 0) {
|
|
28
|
+
let line = this.buffer.slice(0, idx);
|
|
29
|
+
if (line.endsWith('\r'))
|
|
30
|
+
line = line.slice(0, -1);
|
|
31
|
+
out.push(line);
|
|
32
|
+
this.buffer = this.buffer.slice(idx + 1);
|
|
33
|
+
}
|
|
34
|
+
return out;
|
|
35
|
+
}
|
|
36
|
+
/** Drain any unterminated trailing data (e.g., final line without newline). */
|
|
37
|
+
flush() {
|
|
38
|
+
if (this.buffer.length === 0)
|
|
39
|
+
return null;
|
|
40
|
+
const remainder = this.buffer.endsWith('\r')
|
|
41
|
+
? this.buffer.slice(0, -1)
|
|
42
|
+
: this.buffer;
|
|
43
|
+
this.buffer = '';
|
|
44
|
+
return remainder;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export class NdjsonValidator {
|
|
48
|
+
validate;
|
|
49
|
+
constructor(jsonSchema) {
|
|
50
|
+
if (jsonSchema === undefined || jsonSchema === null) {
|
|
51
|
+
this.validate = null;
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const ajv = new Ajv({ allErrors: true, strict: false });
|
|
55
|
+
addFormats(ajv);
|
|
56
|
+
this.validate = ajv.compile(jsonSchema);
|
|
57
|
+
}
|
|
58
|
+
/** Parse one line of JSON. If a schema was provided, validate against it. */
|
|
59
|
+
parse(line) {
|
|
60
|
+
let value;
|
|
61
|
+
try {
|
|
62
|
+
value = JSON.parse(line);
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
return { ok: false, error: err instanceof Error ? err.message : String(err) };
|
|
66
|
+
}
|
|
67
|
+
if (!this.validate) {
|
|
68
|
+
return { ok: true, value, valid: true, errors: [] };
|
|
69
|
+
}
|
|
70
|
+
const valid = this.validate(value);
|
|
71
|
+
return {
|
|
72
|
+
ok: true,
|
|
73
|
+
value,
|
|
74
|
+
valid: !!valid,
|
|
75
|
+
errors: this.validate.errors ?? [],
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
hasSchema() {
|
|
79
|
+
return this.validate !== null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=ndjson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ndjson.js","sourceRoot":"","sources":["../../src/util/ndjson.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type Capability, type ResolvedTauriConfig, type TauriConfig, type TauriPathSet } from '../schemas/tauriConfig.js';
|
|
2
|
+
export interface ConfigLoadOptions {
|
|
3
|
+
/** Explicit path to tauri.conf.json. If a directory, searches for the config file inside. */
|
|
4
|
+
configPath?: string;
|
|
5
|
+
/** Search ceiling for upward traversal (default: filesystem root). */
|
|
6
|
+
startDir?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface LoadedTauriConfig {
|
|
9
|
+
configPath: string;
|
|
10
|
+
projectDir: string;
|
|
11
|
+
raw: TauriConfig;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Walk up from `startDir` looking for a Tauri config file. Returns the absolute
|
|
15
|
+
* path of the first match, or null if none is found before the filesystem root.
|
|
16
|
+
*/
|
|
17
|
+
export declare function findTauriConfig(startDir?: string): string | null;
|
|
18
|
+
export declare function loadTauriConfig(opts?: ConfigLoadOptions): Promise<LoadedTauriConfig>;
|
|
19
|
+
/**
|
|
20
|
+
* Resolve the bundle identifier from a Tauri config (handling v1 + v2 layouts).
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveIdentifier(raw: TauriConfig): string;
|
|
23
|
+
export declare function resolveProductName(raw: TauriConfig, fallback: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Compute the dev server port from build.devUrl or build.devPath. Returns null
|
|
26
|
+
* if neither is a parseable URL with a port.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveDevPort(raw: TauriConfig): number | null;
|
|
29
|
+
/**
|
|
30
|
+
* Resolve Tauri 2's app_* directories for every supported platform. The semantics
|
|
31
|
+
* follow Tauri's PathResolver:
|
|
32
|
+
* - macOS: data/local/config all → ~/Library/Application Support/<id>;
|
|
33
|
+
* cache → ~/Library/Caches/<id>; log → ~/Library/Logs/<id>
|
|
34
|
+
* - Linux: data/local-data → $XDG_DATA_HOME/<id>; cache → $XDG_CACHE_HOME/<id>;
|
|
35
|
+
* config → $XDG_CONFIG_HOME/<id>; log → $XDG_DATA_HOME/<id>/logs
|
|
36
|
+
* - Win32: data/config → %APPDATA%\<id> (Roaming);
|
|
37
|
+
* local-data/cache → %LOCALAPPDATA%\<id>; log → %LOCALAPPDATA%\<id>\logs
|
|
38
|
+
*
|
|
39
|
+
* Uses the *current* process's env where appropriate (HOME/XDG_* on Linux/macOS,
|
|
40
|
+
* APPDATA/LOCALAPPDATA on Windows). Cross-platform paths still resolve to plausible
|
|
41
|
+
* defaults on the host platform so callers can inspect another OS's expected layout.
|
|
42
|
+
*/
|
|
43
|
+
export declare function resolveTauriPaths(identifier: string): {
|
|
44
|
+
darwin: TauriPathSet;
|
|
45
|
+
linux: TauriPathSet;
|
|
46
|
+
win32: TauriPathSet;
|
|
47
|
+
};
|
|
48
|
+
export declare function currentPlatform(): 'darwin' | 'linux' | 'win32';
|
|
49
|
+
/**
|
|
50
|
+
* Discover capability JSON files under `<projectDir>/src-tauri/capabilities/` (or
|
|
51
|
+
* `<projectDir>/capabilities/` when the user pointed --config at src-tauri itself).
|
|
52
|
+
*/
|
|
53
|
+
export declare function findCapabilityFiles(projectDir: string, override?: string): Promise<string[]>;
|
|
54
|
+
export declare function loadCapability(filePath: string): Promise<Capability>;
|
|
55
|
+
/**
|
|
56
|
+
* Compose loadTauriConfig + identifier/product/path resolution + capability discovery
|
|
57
|
+
* into a single structured snapshot. Used by app-paths, config inspect, os-logs,
|
|
58
|
+
* and forensics — each picks the fields it needs.
|
|
59
|
+
*/
|
|
60
|
+
export declare function resolveTauriProject(opts?: ConfigLoadOptions & {
|
|
61
|
+
identifierOverride?: string;
|
|
62
|
+
capabilitiesDir?: string;
|
|
63
|
+
}): Promise<ResolvedTauriConfig>;
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { readFile, readdir, stat } from 'node:fs/promises';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { dirname, isAbsolute, join, resolve } from 'node:path';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { CapabilitySchema, TauriConfigSchema, } from '../schemas/tauriConfig.js';
|
|
6
|
+
const TAURI_CONFIG_FILENAMES = ['tauri.conf.json', 'tauri.conf.json5', 'Tauri.toml'];
|
|
7
|
+
/**
|
|
8
|
+
* Walk up from `startDir` looking for a Tauri config file. Returns the absolute
|
|
9
|
+
* path of the first match, or null if none is found before the filesystem root.
|
|
10
|
+
*/
|
|
11
|
+
export function findTauriConfig(startDir = process.cwd()) {
|
|
12
|
+
let dir = resolve(startDir);
|
|
13
|
+
while (true) {
|
|
14
|
+
for (const name of TAURI_CONFIG_FILENAMES) {
|
|
15
|
+
const candidate = join(dir, name);
|
|
16
|
+
if (existsSync(candidate))
|
|
17
|
+
return candidate;
|
|
18
|
+
// Also look inside src-tauri/ — Tauri 2 scaffold layout
|
|
19
|
+
const inSrcTauri = join(dir, 'src-tauri', name);
|
|
20
|
+
if (existsSync(inSrcTauri))
|
|
21
|
+
return inSrcTauri;
|
|
22
|
+
}
|
|
23
|
+
const parent = dirname(dir);
|
|
24
|
+
if (parent === dir)
|
|
25
|
+
return null;
|
|
26
|
+
dir = parent;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export async function loadTauriConfig(opts = {}) {
|
|
30
|
+
let configPath;
|
|
31
|
+
if (opts.configPath) {
|
|
32
|
+
const explicit = resolve(opts.configPath);
|
|
33
|
+
const st = await stat(explicit).catch(() => null);
|
|
34
|
+
if (st?.isDirectory()) {
|
|
35
|
+
const found = findTauriConfig(explicit);
|
|
36
|
+
if (!found)
|
|
37
|
+
throw new Error(`No tauri.conf.json found under ${explicit}`);
|
|
38
|
+
configPath = found;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
configPath = explicit;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
configPath = findTauriConfig(opts.startDir);
|
|
46
|
+
}
|
|
47
|
+
if (!configPath) {
|
|
48
|
+
throw new Error('No tauri.conf.json found. Specify --config <path> or run inside a Tauri project.');
|
|
49
|
+
}
|
|
50
|
+
if (configPath.endsWith('.toml')) {
|
|
51
|
+
throw new Error(`Tauri.toml configs are not yet supported (found ${configPath}). Use tauri.conf.json or pass --identifier explicitly.`);
|
|
52
|
+
}
|
|
53
|
+
const text = await readFile(configPath, 'utf-8');
|
|
54
|
+
const parsed = parseJsonWithComments(text);
|
|
55
|
+
const raw = TauriConfigSchema.parse(parsed);
|
|
56
|
+
return {
|
|
57
|
+
configPath,
|
|
58
|
+
projectDir: dirname(configPath),
|
|
59
|
+
raw,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Permissive JSON parser that strips line comments and trailing commas, since
|
|
64
|
+
* tauri.conf.json files are sometimes authored as JSON5/JSONC in the wild.
|
|
65
|
+
*/
|
|
66
|
+
function parseJsonWithComments(text) {
|
|
67
|
+
try {
|
|
68
|
+
return JSON.parse(text);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
const stripped = text
|
|
72
|
+
.replace(/\/\/[^\n]*/g, '')
|
|
73
|
+
.replace(/\/\*[\s\S]*?\*\//g, '')
|
|
74
|
+
.replace(/,(\s*[}\]])/g, '$1');
|
|
75
|
+
return JSON.parse(stripped);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Resolve the bundle identifier from a Tauri config (handling v1 + v2 layouts).
|
|
80
|
+
*/
|
|
81
|
+
export function resolveIdentifier(raw) {
|
|
82
|
+
if (raw.identifier && raw.identifier.length > 0)
|
|
83
|
+
return raw.identifier;
|
|
84
|
+
if (raw.bundle?.identifier && raw.bundle.identifier.length > 0)
|
|
85
|
+
return raw.bundle.identifier;
|
|
86
|
+
const v1 = raw.tauri;
|
|
87
|
+
if (v1?.bundle?.identifier)
|
|
88
|
+
return v1.bundle.identifier;
|
|
89
|
+
throw new Error('tauri.conf.json is missing a bundle identifier (top-level "identifier" or "bundle.identifier").');
|
|
90
|
+
}
|
|
91
|
+
export function resolveProductName(raw, fallback) {
|
|
92
|
+
if (raw.productName && raw.productName.length > 0)
|
|
93
|
+
return raw.productName;
|
|
94
|
+
const v1 = raw.tauri;
|
|
95
|
+
if (v1?.productName)
|
|
96
|
+
return v1.productName;
|
|
97
|
+
return fallback;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Compute the dev server port from build.devUrl or build.devPath. Returns null
|
|
101
|
+
* if neither is a parseable URL with a port.
|
|
102
|
+
*/
|
|
103
|
+
export function resolveDevPort(raw) {
|
|
104
|
+
const candidate = raw.build?.devUrl ?? raw.build?.devPath;
|
|
105
|
+
if (!candidate)
|
|
106
|
+
return null;
|
|
107
|
+
try {
|
|
108
|
+
const parsed = new URL(candidate);
|
|
109
|
+
if (parsed.port)
|
|
110
|
+
return parseInt(parsed.port, 10);
|
|
111
|
+
if (parsed.protocol === 'https:')
|
|
112
|
+
return 443;
|
|
113
|
+
if (parsed.protocol === 'http:')
|
|
114
|
+
return 80;
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Resolve Tauri 2's app_* directories for every supported platform. The semantics
|
|
123
|
+
* follow Tauri's PathResolver:
|
|
124
|
+
* - macOS: data/local/config all → ~/Library/Application Support/<id>;
|
|
125
|
+
* cache → ~/Library/Caches/<id>; log → ~/Library/Logs/<id>
|
|
126
|
+
* - Linux: data/local-data → $XDG_DATA_HOME/<id>; cache → $XDG_CACHE_HOME/<id>;
|
|
127
|
+
* config → $XDG_CONFIG_HOME/<id>; log → $XDG_DATA_HOME/<id>/logs
|
|
128
|
+
* - Win32: data/config → %APPDATA%\<id> (Roaming);
|
|
129
|
+
* local-data/cache → %LOCALAPPDATA%\<id>; log → %LOCALAPPDATA%\<id>\logs
|
|
130
|
+
*
|
|
131
|
+
* Uses the *current* process's env where appropriate (HOME/XDG_* on Linux/macOS,
|
|
132
|
+
* APPDATA/LOCALAPPDATA on Windows). Cross-platform paths still resolve to plausible
|
|
133
|
+
* defaults on the host platform so callers can inspect another OS's expected layout.
|
|
134
|
+
*/
|
|
135
|
+
export function resolveTauriPaths(identifier) {
|
|
136
|
+
const home = homedir();
|
|
137
|
+
// ── macOS ────────────────────────────────────────────────
|
|
138
|
+
const darwinHome = process.platform === 'darwin' ? home : `/Users/<user>`;
|
|
139
|
+
const darwinAppSupport = `${darwinHome}/Library/Application Support/${identifier}`;
|
|
140
|
+
const darwin = {
|
|
141
|
+
appConfigDir: darwinAppSupport,
|
|
142
|
+
appDataDir: darwinAppSupport,
|
|
143
|
+
appLocalDataDir: darwinAppSupport,
|
|
144
|
+
appCacheDir: `${darwinHome}/Library/Caches/${identifier}`,
|
|
145
|
+
appLogDir: `${darwinHome}/Library/Logs/${identifier}`,
|
|
146
|
+
};
|
|
147
|
+
// ── Linux ────────────────────────────────────────────────
|
|
148
|
+
const linuxHome = process.platform === 'linux' ? home : '/home/<user>';
|
|
149
|
+
const xdgData = (process.platform === 'linux' ? process.env['XDG_DATA_HOME'] : null) ||
|
|
150
|
+
`${linuxHome}/.local/share`;
|
|
151
|
+
const xdgConfig = (process.platform === 'linux' ? process.env['XDG_CONFIG_HOME'] : null) ||
|
|
152
|
+
`${linuxHome}/.config`;
|
|
153
|
+
const xdgCache = (process.platform === 'linux' ? process.env['XDG_CACHE_HOME'] : null) ||
|
|
154
|
+
`${linuxHome}/.cache`;
|
|
155
|
+
const linux = {
|
|
156
|
+
appConfigDir: `${xdgConfig}/${identifier}`,
|
|
157
|
+
appDataDir: `${xdgData}/${identifier}`,
|
|
158
|
+
appLocalDataDir: `${xdgData}/${identifier}`,
|
|
159
|
+
appCacheDir: `${xdgCache}/${identifier}`,
|
|
160
|
+
appLogDir: `${xdgData}/${identifier}/logs`,
|
|
161
|
+
};
|
|
162
|
+
// ── Windows ──────────────────────────────────────────────
|
|
163
|
+
const winAppData = (process.platform === 'win32' ? process.env['APPDATA'] : null) ??
|
|
164
|
+
'C:\\Users\\<user>\\AppData\\Roaming';
|
|
165
|
+
const winLocalAppData = (process.platform === 'win32' ? process.env['LOCALAPPDATA'] : null) ??
|
|
166
|
+
'C:\\Users\\<user>\\AppData\\Local';
|
|
167
|
+
const win32 = {
|
|
168
|
+
appConfigDir: `${winAppData}\\${identifier}`,
|
|
169
|
+
appDataDir: `${winAppData}\\${identifier}`,
|
|
170
|
+
appLocalDataDir: `${winLocalAppData}\\${identifier}`,
|
|
171
|
+
appCacheDir: `${winLocalAppData}\\${identifier}`,
|
|
172
|
+
appLogDir: `${winLocalAppData}\\${identifier}\\logs`,
|
|
173
|
+
};
|
|
174
|
+
return { darwin, linux, win32 };
|
|
175
|
+
}
|
|
176
|
+
export function currentPlatform() {
|
|
177
|
+
if (process.platform === 'darwin')
|
|
178
|
+
return 'darwin';
|
|
179
|
+
if (process.platform === 'win32')
|
|
180
|
+
return 'win32';
|
|
181
|
+
return 'linux';
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Discover capability JSON files under `<projectDir>/src-tauri/capabilities/` (or
|
|
185
|
+
* `<projectDir>/capabilities/` when the user pointed --config at src-tauri itself).
|
|
186
|
+
*/
|
|
187
|
+
export async function findCapabilityFiles(projectDir, override) {
|
|
188
|
+
const candidates = override
|
|
189
|
+
? [isAbsolute(override) ? override : join(projectDir, override)]
|
|
190
|
+
: [join(projectDir, 'capabilities'), join(projectDir, 'src-tauri', 'capabilities')];
|
|
191
|
+
for (const dir of candidates) {
|
|
192
|
+
if (!existsSync(dir))
|
|
193
|
+
continue;
|
|
194
|
+
const entries = await readdir(dir);
|
|
195
|
+
return entries.filter((f) => f.endsWith('.json')).map((f) => join(dir, f));
|
|
196
|
+
}
|
|
197
|
+
return [];
|
|
198
|
+
}
|
|
199
|
+
export async function loadCapability(filePath) {
|
|
200
|
+
const text = await readFile(filePath, 'utf-8');
|
|
201
|
+
const parsed = parseJsonWithComments(text);
|
|
202
|
+
return CapabilitySchema.parse(parsed);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Compose loadTauriConfig + identifier/product/path resolution + capability discovery
|
|
206
|
+
* into a single structured snapshot. Used by app-paths, config inspect, os-logs,
|
|
207
|
+
* and forensics — each picks the fields it needs.
|
|
208
|
+
*/
|
|
209
|
+
export async function resolveTauriProject(opts = {}) {
|
|
210
|
+
const loaded = await loadTauriConfig(opts);
|
|
211
|
+
const fallbackName = loaded.projectDir.split(/[\\/]/).pop() ?? 'app';
|
|
212
|
+
const identifier = opts.identifierOverride ?? resolveIdentifier(loaded.raw);
|
|
213
|
+
const productName = resolveProductName(loaded.raw, fallbackName);
|
|
214
|
+
const paths = resolveTauriPaths(identifier);
|
|
215
|
+
const capabilityFiles = await findCapabilityFiles(loaded.projectDir, opts.capabilitiesDir);
|
|
216
|
+
const windows = (loaded.raw.app?.windows ?? [])
|
|
217
|
+
.map((w) => w.label)
|
|
218
|
+
.filter((l) => typeof l === 'string' && l.length > 0);
|
|
219
|
+
return {
|
|
220
|
+
configPath: loaded.configPath,
|
|
221
|
+
identifier,
|
|
222
|
+
productName,
|
|
223
|
+
version: loaded.raw.version ?? null,
|
|
224
|
+
mainBinaryName: loaded.raw.mainBinaryName ?? null,
|
|
225
|
+
devUrl: loaded.raw.build?.devUrl ?? loaded.raw.build?.devPath ?? null,
|
|
226
|
+
devPort: resolveDevPort(loaded.raw),
|
|
227
|
+
frontendDist: loaded.raw.build?.frontendDist ?? loaded.raw.build?.distDir ?? null,
|
|
228
|
+
sidecars: loaded.raw.bundle?.externalBin ?? [],
|
|
229
|
+
windows,
|
|
230
|
+
capabilityFiles,
|
|
231
|
+
paths,
|
|
232
|
+
platform: currentPlatform(),
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=tauriConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tauriConfig.js","sourceRoot":"","sources":["../../src/util/tauriConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<!doctype html><html><body>bridge example</body></html>
|
|
@@ -4,6 +4,9 @@ version = "0.1.0"
|
|
|
4
4
|
edition = "2021"
|
|
5
5
|
description = "Example Tauri app with dev bridge for tauri-agent-tools"
|
|
6
6
|
|
|
7
|
+
[build-dependencies]
|
|
8
|
+
tauri-build = "2"
|
|
9
|
+
|
|
7
10
|
[dependencies]
|
|
8
11
|
tauri = { version = "2", features = ["devtools"] }
|
|
9
12
|
tiny_http = "0.12"
|
|
@@ -14,3 +17,6 @@ rand = "0.8"
|
|
|
14
17
|
uuid = { version = "1", features = ["v4"] }
|
|
15
18
|
tracing = "0.1"
|
|
16
19
|
tracing-subscriber = { version = "0.3", features = ["registry"] }
|
|
20
|
+
|
|
21
|
+
[target.'cfg(unix)'.dependencies]
|
|
22
|
+
libc = "0.2"
|
|
Binary file
|