@wenathlan/saddle 1.8.9 → 1.8.11
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.md +6 -2
- package/dist/apps/registry.d.ts +1 -1
- package/dist/extension/permissions.d.ts +2 -2
- package/dist/memory/engine.d.ts +1 -1
- package/dist/packager/manifest.d.ts +2 -0
- package/dist/packager/manifest.d.ts.map +1 -1
- package/dist/packager/manifest.js +10 -1
- package/dist/packager/manifest.js.map +1 -1
- package/dist/packager/targetcli.js +2 -2
- package/dist/packager/targetcli.js.map +1 -1
- package/dist/release/assets.d.ts +1 -0
- package/dist/release/assets.d.ts.map +1 -1
- package/dist/release/assets.js +30 -5
- package/dist/release/assets.js.map +1 -1
- package/dist/scrape/robots.d.ts.map +1 -1
- package/dist/scrape/robots.js +1 -1
- package/dist/scrape/robots.js.map +1 -1
- package/dist/surfaces/targets.d.ts.map +1 -1
- package/dist/surfaces/targets.js +5 -5
- package/dist/surfaces/targets.js.map +1 -1
- package/dist/workflow/triggers.d.ts +2 -2
- package/docs/artifactavailability.md +65 -0
- package/docs/artifactresearch-1.8.9.md +42 -0
- package/docs/flatbuildresearch-1.8.11.md +29 -0
- package/docs/mobileconversionresearch-1.8.10.md +59 -0
- package/docs/releaseassets.md +4 -3
- package/extension/manifest.json +1 -1
- package/package.json +15 -1
package/README.md
CHANGED
|
@@ -181,6 +181,10 @@ scrape/ robots, cache, extraction, schema, normalization and grouped craw
|
|
|
181
181
|
queue/ queue, idempotency, saga and recovery
|
|
182
182
|
browser/ fingerprint, session, agent and Playwright adapter contracts
|
|
183
183
|
extension/ Manifest V3 reference surface and packager
|
|
184
|
+
desktop/ Tauri browser application for Windows, Linux and macOS
|
|
185
|
+
android/ Capacitor Android conversion target and optimized Gradle release
|
|
186
|
+
ios/ Capacitor iOS conversion target and caller-owned Xcode signing
|
|
187
|
+
capacitor.config.ts shared web-to-native configuration for Android and iOS
|
|
184
188
|
protocol/ JSON, NDJSON, SSE and block serializers
|
|
185
189
|
workflow/ manifests, templates and registry contracts
|
|
186
190
|
release/ checksums, SBOM and provenance metadata
|
|
@@ -191,7 +195,7 @@ tests/ deterministic engine and extension coverage
|
|
|
191
195
|
docs/ architecture, API, security, release and registry notes
|
|
192
196
|
```
|
|
193
197
|
|
|
194
|
-
The engine is TypeScript-first ESM with English JSDoc comments and a generated JavaScript `dist/` publication surface. The web surface is TypeScript/React
|
|
198
|
+
The engine is TypeScript-first ESM with English JSDoc comments and a generated JavaScript `dist/` publication surface. The web surface is TypeScript/React. Desktop is the browser application and uses Tauri; Android and iOS convert the same web output through Capacitor. No source or generated artifact hardcodes a host, port or credential.
|
|
195
199
|
|
|
196
200
|
## Historical documentation
|
|
197
201
|
|
|
@@ -199,7 +203,7 @@ Earlier README snapshots remain in `docs/plans/README.md`, `docs/talks9/README.m
|
|
|
199
203
|
|
|
200
204
|
## Current scope
|
|
201
205
|
|
|
202
|
-
Version 1.8.
|
|
206
|
+
Version 1.8.11 extends the TypeScript-first engine with flat project-owned desktop, Android and iOS build surfaces, explicit Capacitor staging boundaries, dotted release asset naming and helper-binary rejection. Browser binaries, provider credentials, n8n host registration, persistent databases, captcha solvers and production deployment remain caller-selected adapters. Future work should extend contracts without coupling the core to one forge, registry, browser or storage vendor.
|
|
203
207
|
|
|
204
208
|
## License
|
|
205
209
|
|
package/dist/apps/registry.d.ts
CHANGED
|
@@ -22,10 +22,10 @@ export declare function appregistry(options?: {}): {
|
|
|
22
22
|
missing?: undefined;
|
|
23
23
|
appid?: undefined;
|
|
24
24
|
} | {
|
|
25
|
-
reason?: undefined;
|
|
26
25
|
allowed: boolean;
|
|
27
26
|
missing: any[];
|
|
28
27
|
appid: any;
|
|
28
|
+
reason?: undefined;
|
|
29
29
|
};
|
|
30
30
|
get: (id: any) => any;
|
|
31
31
|
list: () => any[];
|
|
@@ -13,10 +13,10 @@ export declare function permissionpolicy(options?: {}): {
|
|
|
13
13
|
};
|
|
14
14
|
/** Requests an optional capability through an injected browser permission function. */
|
|
15
15
|
export declare function requestpermission(policy: any, permission: any, request: any): Promise<{
|
|
16
|
-
code?: undefined;
|
|
17
|
-
message?: undefined;
|
|
18
16
|
permission: string;
|
|
19
17
|
granted: boolean;
|
|
18
|
+
code?: undefined;
|
|
19
|
+
message?: undefined;
|
|
20
20
|
} | {
|
|
21
21
|
permission: string;
|
|
22
22
|
granted: boolean;
|
package/dist/memory/engine.d.ts
CHANGED
|
@@ -15,9 +15,9 @@ export declare function memoryengine(options?: {}): {
|
|
|
15
15
|
data: any;
|
|
16
16
|
error?: undefined;
|
|
17
17
|
} | {
|
|
18
|
+
data?: undefined;
|
|
18
19
|
success: boolean;
|
|
19
20
|
error: any;
|
|
20
|
-
data?: undefined;
|
|
21
21
|
}>;
|
|
22
22
|
sync: (key: any, options?: {}) => Promise<any[]>;
|
|
23
23
|
capabilities: () => any;
|
|
@@ -9,6 +9,8 @@ export declare const artifactformats: Readonly<{
|
|
|
9
9
|
web: readonly string[];
|
|
10
10
|
package: readonly string[];
|
|
11
11
|
}>;
|
|
12
|
+
/** Creates the public dotted artifact stem for a target and version. */
|
|
13
|
+
export declare function artifactname(target: any, version: any, format: any): string;
|
|
12
14
|
/** Creates a distribution manifest for caller-owned build and publication steps. */
|
|
13
15
|
export declare function distributionmanifest(options?: {}): {
|
|
14
16
|
name: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../packager/manifest.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,eAAe;;;;;;EAM1B,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../packager/manifest.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,eAAe;;;;;;EAM1B,CAAC;AAIH,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,MAAM,KAAA,EAAE,OAAO,KAAA,EAAE,MAAM,KAAA,UAKnD;AAED,oFAAoF;AACpF,wBAAgB,oBAAoB,CAAC,OAAO,KAAK;IAG7C,IAAI;IACJ,OAAO;IACP,KAAK;IACL,KAAK;IACL,OAAO;IACP,KAAK;IACL,QAAQ;EAEX;AAED,kFAAkF;AAClF,wBAAgB,UAAU,CAAC,QAAQ,KAAA,EAAE,MAAM,KAAA,EAAE,OAAO,KAAK;;;;;;;;;;;EAKxD;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,QAAQ,KAAA,EAAE,OAAO,KAAK;IACtC,IAAI;IAA0B,OAAO;IAA8F,KAAK;IAAkB,OAAO;EAC3K;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,QAAQ,KAAA,EAAE,OAAO,KAAK;;;;;EAOnD"}
|
|
@@ -9,6 +9,15 @@ export const artifactformats = Object.freeze({
|
|
|
9
9
|
web: Object.freeze(["html", "pwa", "ssg", "ssr", "wasm"]),
|
|
10
10
|
package: Object.freeze(["npm", "github", "maven", "nuget", "rubygems", "oci", "vsix", "oxt"])
|
|
11
11
|
});
|
|
12
|
+
const publicsurfaces = Object.freeze({ desktopapp: "browser", mobileapp: "mobile" });
|
|
13
|
+
/** Creates the public dotted artifact stem for a target and version. */
|
|
14
|
+
export function artifactname(target, version, format) {
|
|
15
|
+
const surface = publicsurfaces[target] ?? target;
|
|
16
|
+
const normalized = `${surface}.${version}.${format}`.toLowerCase();
|
|
17
|
+
if (!/^[a-z0-9]+(?:\.[a-z0-9]+)+$/.test(normalized))
|
|
18
|
+
throw new TypeError("artifact name contains unsupported characters");
|
|
19
|
+
return normalized;
|
|
20
|
+
}
|
|
12
21
|
/** Creates a distribution manifest for caller-owned build and publication steps. */
|
|
13
22
|
export function distributionmanifest(options = {}) {
|
|
14
23
|
if (!options.name || !options.version || !options.entry)
|
|
@@ -30,7 +39,7 @@ export function targetplan(manifest, target, options = {}) {
|
|
|
30
39
|
if (!target)
|
|
31
40
|
throw new TypeError("target plan requires a target");
|
|
32
41
|
const format = options.format ?? target;
|
|
33
|
-
return { name: manifest.name, version: manifest.version, target, format, entry: manifest.entry, output: options.output ?? `build/artifacts/${target
|
|
42
|
+
return { name: manifest.name, version: manifest.version, target, format, entry: manifest.entry, output: options.output ?? `build/artifacts/${artifactname(target, manifest.version, format)}`, command: options.command ?? `caller-build ${target} ${format}`, generated: true, credentials: "caller-managed", metadata: options.metadata ?? {} };
|
|
34
43
|
}
|
|
35
44
|
/** Creates a declarative Node SEA or caller-selected binary build plan. */
|
|
36
45
|
export function binaryplan(manifest, options = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../packager/manifest.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACzG,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC5C,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IACpD,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACzD,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;CAC9F,CAAC,CAAC;AAEH,oFAAoF;AACpF,MAAM,UAAU,oBAAoB,CAAC,OAAO,GAAG,EAAE;IAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;QAAE,MAAM,IAAI,SAAS,CAAC,uDAAuD,CAAC,CAAC;IACtI,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC;QACnI,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC;QAChG,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE;KACjC,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAG,EAAE;IACvD,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;QAAE,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;IAC/G,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;IACxC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,mBAAmB,MAAM,
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../packager/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
6
6
|
import { resolve } from "node:path";
|
|
7
|
-
import { targetplan } from "./manifest.js";
|
|
7
|
+
import { artifactname, targetplan } from "./manifest.js";
|
|
8
8
|
/** Reads the distribution manifest and writes one target plan. */
|
|
9
9
|
export async function writeTargetPlan(target, format = target, output = "build/targets") {
|
|
10
10
|
const packagejson = JSON.parse(await readFile(resolve("package.json"), "utf8"));
|
|
11
11
|
const manifest = { name: packagejson.name, version: packagejson.version, entry: "dist/index.js" };
|
|
12
12
|
const plan = targetplan(manifest, target, { format });
|
|
13
13
|
await mkdir(resolve(output), { recursive: true });
|
|
14
|
-
const filename = resolve(output,
|
|
14
|
+
const filename = resolve(output, `manifest.${artifactname(target, manifest.version, format)}.json`);
|
|
15
15
|
await writeFile(filename, `${JSON.stringify(plan, null, 2)}\n`);
|
|
16
16
|
return filename;
|
|
17
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"targetcli.js","sourceRoot":"","sources":["../../packager/targetcli.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"targetcli.js","sourceRoot":"","sources":["../../packager/targetcli.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEzD,kEAAkE;AAClE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAc,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,eAAe;IAC7F,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAChF,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IAClG,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACtD,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,YAAY,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACpG,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAChE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;IAC3F,MAAM,CAAC,EAAE,AAAD,EAAG,MAAM,GAAG,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,eAAe,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IACzF,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChL,CAAC"}
|
package/dist/release/assets.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../release/assets.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../release/assets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,iFAAiF;AACjF,wBAAsB,YAAY,CAAC,OAAO,KAAK;;;;;;;;;;;;;;;;;;YA0CsH,SAAS;gBAAI,IAAI;gBAAiB,IAAI;gBAA4B,OAAO;;;;;;;;;;;;;;;;;gBAKtJ,MAAM;;;;;YAC0C,eAAe;gBAAI,SAAS;gBAAiD,kBAAkB;oBAAI,OAAO;oBAA4B,OAAO;;gBAAoD,kBAAkB;;YAAQ,UAAU;gBAAI,OAAO;oBAAI,EAAE;;gBAAiD,QAAQ;oBAAI,YAAY;;;;;GAjBtc;AAED,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,WAAW,KAAA,EAAE,QAAQ,KAAK;;;;;;QAQgH,SAAS;YAAI,IAAI;YAAiB,IAAI;YAA4B,OAAO;;;;;;;;;;;EAC7O;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,WAAW,KAAA,EAAE,QAAQ,QAAK,EAAE,OAAO,KAAK;IAE9D,KAAK;IAAqC,OAAO;;;YAD4B,MAAM;;;IACpB,aAAa;IAAoC,SAAS;QAAI,eAAe;YAAI,SAAS;YAAiD,kBAAkB;gBAAI,OAAO;gBAA4B,OAAO;;YAAoD,kBAAkB;;QAAQ,UAAU;YAAI,OAAO;gBAAI,EAAE;;YAAiD,QAAQ;gBAAI,YAAY;;;;EACtc"}
|
package/dist/release/assets.js
CHANGED
|
@@ -4,9 +4,11 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { createHash } from "node:crypto";
|
|
6
6
|
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
7
|
-
import { dirname, join, relative, resolve } from "node:path";
|
|
7
|
+
import { basename, dirname, join, relative, resolve, sep } from "node:path";
|
|
8
8
|
import { fileURLToPath } from "node:url";
|
|
9
|
-
const
|
|
9
|
+
const modulepath = dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
const moduleparts = modulepath.split(sep);
|
|
11
|
+
const rootpath = moduleparts.at(-1) === "release" && moduleparts.at(-2) === "dist" ? resolve(modulepath, "..", "..") : resolve(modulepath, "..");
|
|
10
12
|
/** Builds deterministic release metadata files for caller-selected artifacts. */
|
|
11
13
|
export async function createassets(options = {}) {
|
|
12
14
|
const packagefile = resolve(options.packagefile ?? join(rootpath, "package.json"));
|
|
@@ -16,13 +18,26 @@ export async function createassets(options = {}) {
|
|
|
16
18
|
const packagejson = JSON.parse(await readFile(packagefile, "utf8"));
|
|
17
19
|
const lockjson = JSON.parse(await readFile(lockfile, "utf8"));
|
|
18
20
|
const artifacts = [...new Set((options.artifacts ?? []).map((artifact) => resolve(String(artifact))))].sort();
|
|
19
|
-
const
|
|
21
|
+
const version = String(options.version ?? packagejson.version);
|
|
22
|
+
const surface = normalizeSurface(options.surface ?? "library");
|
|
23
|
+
const subjects = await Promise.all(artifacts.map(async (artifact) => {
|
|
24
|
+
const name = relative(artifactroot, artifact).replaceAll("\\", "/");
|
|
25
|
+
validateArtifactName(basename(name));
|
|
26
|
+
return { name, digest: await sha256(artifact) };
|
|
27
|
+
}));
|
|
20
28
|
await mkdir(output, { recursive: true });
|
|
21
29
|
const checksums = `${subjects.map((subject) => `${subject.digest} ${subject.name}`).join("\n")}${subjects.length ? "\n" : ""}`;
|
|
22
30
|
const sbom = createsbom(packagejson, lockjson);
|
|
23
|
-
const provenance = createprovenance(packagejson, subjects, options);
|
|
24
|
-
const
|
|
31
|
+
const provenance = createprovenance(packagejson, subjects, { ...options, version });
|
|
32
|
+
const manifest = { name: String(packagejson.name), version, surface, files: subjects.map((subject) => basename(subject.name)), signing: String(options.signing ?? "caller-owned") };
|
|
33
|
+
const files = {
|
|
34
|
+
checksums: join(output, `sha256.${surface}.${version}`),
|
|
35
|
+
manifest: join(output, `manifest.${surface}.${version}.json`),
|
|
36
|
+
sbom: join(output, `sbom.${surface}.${version}.cdx.json`),
|
|
37
|
+
provenance: join(output, `provenance.${surface}.${version}.intoto.jsonl`)
|
|
38
|
+
};
|
|
25
39
|
await writeFile(files.checksums, checksums);
|
|
40
|
+
await writeFile(files.manifest, `${JSON.stringify(manifest, null, 2)}\n`);
|
|
26
41
|
await writeFile(files.sbom, `${JSON.stringify(sbom, null, 2)}\n`);
|
|
27
42
|
await writeFile(files.provenance, `${JSON.stringify(provenance)}\n`);
|
|
28
43
|
return { output, files, subjects, sbom, provenance };
|
|
@@ -45,6 +60,12 @@ export function createprovenance(packagejson, subjects = [], options = {}) {
|
|
|
45
60
|
}
|
|
46
61
|
async function sha256(path) { const hash = createHash("sha256"); hash.update(await readFile(path)); return hash.digest("hex"); }
|
|
47
62
|
function stableuuid(value) { const hex = createHash("sha256").update(String(value)).digest("hex").slice(0, 32); return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-4${hex.slice(13, 16)}-${(8 + (Number.parseInt(hex.slice(16, 17), 16) % 4).toString(16))}${hex.slice(17, 20)}-${hex.slice(20)}`; }
|
|
63
|
+
/** Normalizes the public release surface used in metadata filenames. */
|
|
64
|
+
function normalizeSurface(value) { const normalized = String(value).trim().toLowerCase(); if (!/^[a-z0-9]+(?:[.-][a-z0-9]+)*$/.test(normalized))
|
|
65
|
+
throw new TypeError(`invalid release surface: ${value}`); return normalized; }
|
|
66
|
+
/** Rejects helper binaries and ambiguous public filenames before metadata generation. */
|
|
67
|
+
function validateArtifactName(value) { if (value.includes("_") || /build[-_]script[-_]build|saddle[-_]desktop/i.test(value))
|
|
68
|
+
throw new TypeError(`forbidden release artifact filename: ${value}`); }
|
|
48
69
|
function parsearguments(argumentslist) {
|
|
49
70
|
const options = { artifacts: [] };
|
|
50
71
|
for (let index = 0; index < argumentslist.length; index += 1) {
|
|
@@ -53,6 +74,10 @@ function parsearguments(argumentslist) {
|
|
|
53
74
|
options.output = argumentslist[++index];
|
|
54
75
|
else if (argument === "--version")
|
|
55
76
|
options.version = argumentslist[++index];
|
|
77
|
+
else if (argument === "--surface")
|
|
78
|
+
options.surface = argumentslist[++index];
|
|
79
|
+
else if (argument === "--signing")
|
|
80
|
+
options.signing = argumentslist[++index];
|
|
56
81
|
else if (argument === "--artifact")
|
|
57
82
|
options.artifacts.push(argumentslist[++index]);
|
|
58
83
|
else if (argument === "--build-type")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../release/assets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../release/assets.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"robots.d.ts","sourceRoot":"","sources":["../../scrape/robots.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,eAAe;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAAE;AACjH,MAAM,WAAW,WAAW;IAAG,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;CAAE;AAC3H,MAAM,WAAW,SAAS;IAAG,UAAU,EAAE,eAAe,EAAE,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAAE;AAK7H,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,IAAI,SAAK,GAAG,SAAS,CAA+wC;AAEh0C,qFAAqF;AACrF,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"robots.d.ts","sourceRoot":"","sources":["../../scrape/robots.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,eAAe;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAAE;AACjH,MAAM,WAAW,WAAW;IAAG,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;CAAE;AAC3H,MAAM,WAAW,SAAS;IAAG,UAAU,EAAE,eAAe,EAAE,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAAE;AAK7H,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,IAAI,SAAK,GAAG,SAAS,CAA+wC;AAEh0C,qFAAqF;AACrF,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAA6nB;AAE9vB,4DAA4D;AAC5D,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,SAAM,GAAG,OAAO,CAAwW;AAE3b,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,SAAM,GAAG,MAAM,GAAG,SAAS,CAAuH;AAC5M,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,EAAE,CAAiC;AACzF,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,OAAO,CAA4C;AACjI,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,SAAM,GAAG,MAAM,CAA6C"}
|
package/dist/scrape/robots.js
CHANGED
|
@@ -43,7 +43,7 @@ export function robotsrules(text = "") { const directives = []; const groups = [
|
|
|
43
43
|
/** Fetches and caches a site's robots policy without failing the caller's scrape. */
|
|
44
44
|
export async function fetchRobotsTxt(siteUrl, options = {}) { const base = siteUrl.replace(/\/$/, ""); const robotsUrl = `${base}/robots.txt`; const cached = cache.get(robotsUrl); if (cached && Date.now() - cached.fetchedAt < cachettl)
|
|
45
45
|
return cached.robots; try {
|
|
46
|
-
const response = await fetch(robotsUrl, { headers: { "User-Agent": options.userAgent ?? "Saddle/1.8.
|
|
46
|
+
const response = await fetch(robotsUrl, { headers: { "User-Agent": options.userAgent ?? "Saddle/1.8.11" }, signal: AbortSignal.timeout(options.timeout ?? 5000) });
|
|
47
47
|
const robots = response.ok ? robotsrules(await response.text()) : robotsrules();
|
|
48
48
|
cache.set(robotsUrl, { robots, fetchedAt: Date.now() });
|
|
49
49
|
return robots;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"robots.js","sourceRoot":"","sources":["../../scrape/robots.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"robots.js","sourceRoot":"","sources":["../../scrape/robots.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../surfaces/targets.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,cAAc;;QACV,OAAO;QAAY,KAAK;QAAmB,YAAY;QAAoC,OAAO;;;QACrG,OAAO;QAAU,KAAK;QAAmB,YAAY;QAAmC,OAAO;;;QAC7F,OAAO;
|
|
1
|
+
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../surfaces/targets.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,cAAc;;QACV,OAAO;QAAY,KAAK;QAAmB,YAAY;QAAoC,OAAO;;;QACrG,OAAO;QAAU,KAAK;QAAmB,YAAY;QAAmC,OAAO;;;QAC7F,OAAO;QAAW,KAAK;QAAuB,YAAY;QAAiC,OAAO;;;QACnG,OAAO;QAAe,KAAK;QAAgC,YAAY;QAAoC,OAAO;;;QACpH,OAAO;QAAe,KAAK;QAAa,YAAY;QAAoC,OAAO;;;QACnG,OAAO;QAAe,KAAK;QAAS,YAAY;QAAoC,OAAO;;;QAC3F,OAAO;QAAU,KAAK;QAAsB,YAAY;QAAoC,OAAO;;;QAChG,OAAO;QAAY,KAAK;QAAsB,YAAY;QAAmC,OAAO;;;QACnG,OAAO;QAAW,KAAK;QAAuB,YAAY;QAAoC,OAAO;;;QACnG,OAAO;QAAa,KAAK;QAA6B,YAAY;QAAqC,OAAO;;;QAC/G,OAAO;QAAY,KAAK;QAAmB,YAAY;QAAiC,OAAO;;;QACpG,OAAO;QAAa,KAAK;QAAgC,YAAY;QAA0B,OAAO;;;QAC9F,OAAO;QAAY,KAAK;QAAmB,YAAY;QAAuB,OAAO;;;QAC7F,OAAO;QAAY,KAAK;QAAwB,YAAY;QAAsB,OAAO;;;QACxF,OAAO;QAAY,KAAK;QAAmB,YAAY;QAA0B,OAAO;;;QACnF,OAAO;QAAU,KAAK;QAAmB,YAAY;QAAoC,OAAO;;EAC7G,CAAC;AAEH,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,MAAM,KAAA,EAAE,OAAO,KAAK;;;;;;;;EAAqZ;AAExc,2EAA2E;AAC3E,wBAAgB,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAmJ"}
|
package/dist/surfaces/targets.js
CHANGED
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
export const targetprofiles = Object.freeze({
|
|
5
5
|
application: { runtime: "caller", entry: "dist/index.js", capabilities: ["memory", "storage", "network"], formats: ["zip", "tarball"] },
|
|
6
6
|
computer: { runtime: "node", entry: "dist/index.js", capabilities: ["memory", "storage", "runner"], formats: ["node", "bun", "deno", "singlefile"] },
|
|
7
|
-
desktopapp: { runtime: "
|
|
8
|
-
mobileapp: { runtime: "
|
|
9
|
-
android: { runtime: "
|
|
10
|
-
ios: { runtime: "
|
|
7
|
+
desktopapp: { runtime: "tauri", entry: "desktop/src-tauri", capabilities: ["memory", "file", "visible"], formats: ["appimage", "deb", "rpm", "snap", "flatpak", "dmg", "pkg", "exe", "msi", "msix"] },
|
|
8
|
+
mobileapp: { runtime: "capacitor", entry: "web/dist/public/index.html", capabilities: ["memory", "network", "visible"], formats: ["apk", "aab", "ipa"] },
|
|
9
|
+
android: { runtime: "capacitor", entry: "android", capabilities: ["memory", "network", "visible"], formats: ["apk", "aab"] },
|
|
10
|
+
ios: { runtime: "capacitor", entry: "ios", capabilities: ["memory", "network", "visible"], formats: ["ipa"] },
|
|
11
11
|
cli: { runtime: "node", entry: "dist/cli/main.js", capabilities: ["memory", "storage", "network"], formats: ["node", "bun", "deno", "singlefile", "exe", "deb", "rpm"] },
|
|
12
12
|
binary: { runtime: "caller", entry: "dist/cli/main.js", capabilities: ["memory", "storage", "runner"], formats: ["sea", "singlefile", "wasm"] },
|
|
13
|
-
browser: { runtime: "
|
|
13
|
+
browser: { runtime: "tauri", entry: "desktop/src-tauri", capabilities: ["memory", "network", "visible"], formats: ["html", "pwa", "wasm", "appimage", "deb", "rpm", "dmg", "exe", "msi"] },
|
|
14
14
|
extension: { runtime: "browser", entry: "dist/extension/index.js", capabilities: ["browser", "network", "visible"], formats: ["crx", "xpi", "safariextz"] },
|
|
15
15
|
internet: { runtime: "caller", entry: "dist/index.js", capabilities: ["network", "webhook", "api"], formats: ["http", "websocket", "grpc", "rest"] },
|
|
16
16
|
web: { runtime: "browser", entry: "web/dist/public/index.html", capabilities: ["network", "visible"], formats: ["html", "pwa", "ssg", "ssr", "wasm"] },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"targets.js","sourceRoot":"","sources":["../../surfaces/targets.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1C,WAAW,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;IACvI,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE;IACpJ,UAAU,EAAE,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"targets.js","sourceRoot":"","sources":["../../surfaces/targets.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,10 +11,10 @@ export declare function triggermatch(manifest: any, event?: {}): {
|
|
|
11
11
|
reason: string;
|
|
12
12
|
requestid?: undefined;
|
|
13
13
|
} | {
|
|
14
|
-
reason?: undefined;
|
|
15
14
|
matched: boolean;
|
|
16
15
|
type: string;
|
|
17
16
|
requestid: any;
|
|
17
|
+
reason?: undefined;
|
|
18
18
|
};
|
|
19
19
|
/** Keeps trigger declarations and produces deterministic matching results. */
|
|
20
20
|
export declare function triggerregistry(): {
|
|
@@ -26,10 +26,10 @@ export declare function triggerregistry(): {
|
|
|
26
26
|
reason: string;
|
|
27
27
|
requestid?: undefined;
|
|
28
28
|
} | {
|
|
29
|
-
reason?: undefined;
|
|
30
29
|
matched: boolean;
|
|
31
30
|
type: string;
|
|
32
31
|
requestid: any;
|
|
32
|
+
reason?: undefined;
|
|
33
33
|
};
|
|
34
34
|
list: () => any[];
|
|
35
35
|
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Saddle 1.8.9 artifact availability
|
|
2
|
+
|
|
3
|
+
Saddle 1.8.9 is a TypeScript-first engine release with native packaging generated from the shared Tauri 2 desktop boundary. The workflows derive the release version from the release tag and attach only the files produced by the corresponding runner. Tauri documents `android build` and `ios build` as separate platform commands, while the desktop `build` command generates platform installers from the resolved frontend distribution [1].
|
|
4
|
+
|
|
5
|
+
## Verified release assets
|
|
6
|
+
|
|
7
|
+
The following artifacts are attached to the [v1.8.9 GitHub release][3]. The desktop assets are unsigned build artifacts; code signing, notarization and store submission remain caller-owned. The Android files are debug-signed test artifacts and are not production store releases.
|
|
8
|
+
|
|
9
|
+
| Surface | Generated asset | Release status | Distribution note |
|
|
10
|
+
| ----------------- | --------------------------------------------------------------------------------------------------------------------------------- | -------------- | ------------------------------------------------------------------------------------- |
|
|
11
|
+
| Windows | [Saddle Browser 1.8.9 setup EXE](https://github.com/wenathlan/saddle/releases/download/v1.8.9/Saddle.Browser_1.8.9_x64-setup.exe) | Generated | Unsigned installer; caller-owned signing and update policy. |
|
|
12
|
+
| Windows | [Saddle Browser 1.8.9 MSI](https://github.com/wenathlan/saddle/releases/download/v1.8.9/Saddle.Browser_1.8.9_x64_en-US.msi) | Generated | Unsigned installer; caller-owned signing and enterprise deployment. |
|
|
13
|
+
| Linux | [Debian package](https://github.com/wenathlan/saddle/releases/download/v1.8.9/Saddle.Browser_1.8.9_amd64.deb) | Generated | Unsigned package; Snap and Flatpak are not part of this release. |
|
|
14
|
+
| Linux | [RPM package](https://github.com/wenathlan/saddle/releases/download/v1.8.9/Saddle.Browser-1.8.9-1.x86_64.rpm) | Generated | Unsigned package; repository publication remains caller-owned. |
|
|
15
|
+
| Linux | [AppImage](https://github.com/wenathlan/saddle/releases/download/v1.8.9/Saddle.Browser_1.8.9_amd64.AppImage) | Generated | Portable unsigned image. |
|
|
16
|
+
| macOS | [DMG](https://github.com/wenathlan/saddle/releases/download/v1.8.9/Saddle.Browser_1.8.9_aarch64.dmg) | Generated | Unsigned and not notarized; PKG is deferred. |
|
|
17
|
+
| Android | [Debug APK](https://github.com/wenathlan/saddle/releases/download/v1.8.9/app-universal-debug.apk) | Generated | Debug key for test installation; production signing is caller-owned. |
|
|
18
|
+
| Android | [Debug AAB](https://github.com/wenathlan/saddle/releases/download/v1.8.9/app-universal-debug.aab) | Generated | Debug key for test packaging; production signing is caller-owned. |
|
|
19
|
+
| Container | [Saddle container tarball](https://github.com/wenathlan/saddle/releases/download/v1.8.9/saddle-container-1.8.9.tar.gz) | Generated | OCI image exported as a tarball; deployment runtime and registry remain caller-owned. |
|
|
20
|
+
| Browser extension | [Saddle extension ZIP](https://github.com/wenathlan/saddle/releases/download/v1.8.9/saddle-extension-1.8.9.zip) | Generated | Deterministic extension package. |
|
|
21
|
+
|
|
22
|
+
The platform manifests and checksums are also attached. They are named `artifact-manifest-linux.json`, `artifact-manifest-windows.json`, `artifact-manifest-macos.json`, `artifact-manifest-android.json`, `container-artifact-manifest.json`, `SHA256SUMS-linux`, `SHA256SUMS-windows`, `SHA256SUMS-macos`, `SHA256SUMS-android` and `SHA256SUMS-container`.
|
|
23
|
+
|
|
24
|
+
## Unavailable or caller-owned targets
|
|
25
|
+
|
|
26
|
+
The iOS workflow exists but is gated by `SADDLE_IOS_ENABLED` or an explicit manual dispatch input. No IPA is claimed for v1.8.9 because the release was not run with Apple Developer certificates, provisioning profiles and export credentials. The same ownership rule applies to PKG, MSIX, Snap, Flatpak, production Android signing, Windows signing, macOS signing and notarization. The package targets for npm, GitHub Packages, GHCR, Maven, NuGet and RubyGems remain separate registry workflows and are not duplicated as release binaries.
|
|
27
|
+
|
|
28
|
+
Tauri configuration is resolved from `tauri.conf.json` and can be extended with platform-specific configuration files, which keeps the core application boundary reusable without embedding signing material or infrastructure endpoints [2].
|
|
29
|
+
|
|
30
|
+
## References
|
|
31
|
+
|
|
32
|
+
[1]: https://v2.tauri.app/reference/cli/ "Tauri Command Line Interface"
|
|
33
|
+
[2]: https://v2.tauri.app/develop/configuration-files/ "Tauri Configuration Files"
|
|
34
|
+
[3]: https://github.com/wenathlan/saddle/releases/tag/v1.8.9 "Saddle v1.8.9 GitHub Release"
|
|
35
|
+
|
|
36
|
+
## 1.8.10 conversion contract
|
|
37
|
+
|
|
38
|
+
Version 1.8.10 keeps the Tauri desktop browser and adds explicit Capacitor Android and iOS conversion targets. The shared source is the TypeScript library plus the compiled `web/dist/public` output; the native folders do not fork engine logic. The Android release build enables R8 and resource shrinking, and the workflow creates an ephemeral CI test key when caller production signing secrets are absent.
|
|
39
|
+
|
|
40
|
+
The 1.8.10 workflow names the public outputs `saddle.browser.1.8.10.<format>`, `saddle.apk.1.8.10.apk`, `saddle.aab.1.8.10.aab`, `saddle.ipa.1.8.10.ipa`, `saddle.container.1.8.10.tar.gz` and `saddle.extension.1.8.10.zip`. Surface manifests and checksums use the corresponding `manifest.<surface>.1.8.10.json` and `sha256.<surface>.1.8.10` forms. The release is not considered complete until the live GitHub asset list matches these generated names.
|
|
41
|
+
|
|
42
|
+
## Verified 1.8.10 primary assets
|
|
43
|
+
|
|
44
|
+
The v1.8.10 release contains the following primary assets. Sizes are bytes and exclude the separate manifest and checksum files.
|
|
45
|
+
|
|
46
|
+
| Surface | Asset | Size |
|
|
47
|
+
| --------------- | ----------------------------------------------------------------------------------------------------------- | ---------: |
|
|
48
|
+
| Desktop browser | [AppImage](https://github.com/wenathlan/saddle/releases/download/v1.8.10/saddle.browser.1.8.10.appimage) | 79,870,456 |
|
|
49
|
+
| Desktop browser | [Debian](https://github.com/wenathlan/saddle/releases/download/v1.8.10/saddle.browser.1.8.10.deb) | 5,294,388 |
|
|
50
|
+
| Desktop browser | [RPM](https://github.com/wenathlan/saddle/releases/download/v1.8.10/saddle.browser.1.8.10.rpm) | 5,297,815 |
|
|
51
|
+
| Desktop browser | [Windows EXE](https://github.com/wenathlan/saddle/releases/download/v1.8.10/saddle.browser.1.8.10.exe) | 4,341,818 |
|
|
52
|
+
| Desktop browser | [Windows MSI](https://github.com/wenathlan/saddle/releases/download/v1.8.10/saddle.browser.1.8.10.msi) | 5,246,976 |
|
|
53
|
+
| Desktop browser | [macOS DMG](https://github.com/wenathlan/saddle/releases/download/v1.8.10/saddle.browser.1.8.10.dmg) | 5,222,365 |
|
|
54
|
+
| Android | [APK](https://github.com/wenathlan/saddle/releases/download/v1.8.10/saddle.apk.1.8.10.apk) | 3,498,594 |
|
|
55
|
+
| Android | [AAB](https://github.com/wenathlan/saddle/releases/download/v1.8.10/saddle.aab.1.8.10.aab) | 3,893,352 |
|
|
56
|
+
| Container | [OCI tarball](https://github.com/wenathlan/saddle/releases/download/v1.8.10/saddle.container.1.8.10.tar.gz) | 81,718,314 |
|
|
57
|
+
| Extension | [ZIP](https://github.com/wenathlan/saddle/releases/download/v1.8.10/saddle.extension.1.8.10.zip) | 10,759 |
|
|
58
|
+
|
|
59
|
+
## 1.8.11 flat source contract
|
|
60
|
+
|
|
61
|
+
Version 1.8.11 keeps the Tauri browser build flat at `desktop/`, with `Cargo.toml`, `tauri.conf.json`, `build.rs`, `lib.rs` and `main.rs` directly in that surface root. The frontend remains the generated `web/dist/public` output and `dist/` is not committed.
|
|
62
|
+
|
|
63
|
+
The Android project maps Saddle-owned `AndroidManifest.xml`, `main/`, `res/`, `test/` and `androidtest/` directly from the `android/` root through Gradle `sourceSets`. Capacitor staging under `android/app`, `android/assets` and plugin internals is generated during synchronization, removed or ignored before build, and is not project-owned source. The iOS surface keeps its generated Xcode and Swift Package internals because Capacitor owns those paths; Saddle-owned configuration remains at the `ios/` root and no project-owned `ios/src` directory is added.
|
|
64
|
+
|
|
65
|
+
The v1.8.11 workflows derive the version from the release tag, run flat-surface validation, reject helper binaries and attach only outputs matching the dotted lowercase contract. The live release asset list must be verified before this section is changed from a source contract to a generated asset inventory.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Artifact research 1.8.9
|
|
2
|
+
|
|
3
|
+
## Decision summary
|
|
4
|
+
|
|
5
|
+
The missing release artifacts require a shared desktop browser shell plus platform-specific CI jobs. The source boundary should remain one TypeScript application and one compiled Saddle library; platform jobs should package that boundary rather than create independent application logic.
|
|
6
|
+
|
|
7
|
+
| Surface | Recommended build boundary | Required runner or toolchain | Release status |
|
|
8
|
+
| --- | --- | --- | --- |
|
|
9
|
+
| Desktop browser shell | Tauri 2 or an equivalent caller-selected shell around the existing web build | Rust, platform WebView and platform packaging tools | Can generate platform bundles in CI; signing remains caller-owned |
|
|
10
|
+
| Windows | Tauri Windows bundle or Electron Forge maker when an Electron shell is explicitly selected | Windows runner; EXE/MSI/MSIX maker and optional signing certificate | Unsigned installers can be generated by configured CI; store distribution requires signing |
|
|
11
|
+
| Linux | Tauri Debian, RPM, AppImage, Snap or Flatpak bundle | Linux runner and format-specific tools | Debian and AppImage are practical first artifacts; Snap/Flatpak require their own validation and publishing channels |
|
|
12
|
+
| macOS | Tauri app/DMG/PKG bundle | macOS runner with Xcode toolchain | App, DMG and PKG need signing; outside the App Store also needs notarization |
|
|
13
|
+
| Android | Shared web application through Tauri Android or a native Gradle wrapper | Linux runner with Android SDK/Gradle | Debug APK can be produced without the owner's release key; release APK/AAB requires private signing material |
|
|
14
|
+
| iOS | Shared web application through Tauri iOS or a native Xcode project | macOS runner with Xcode | IPA/archive requires Xcode, provisioning and signing inputs; no unsigned App Store artifact is a valid release product |
|
|
15
|
+
|
|
16
|
+
## Primary findings
|
|
17
|
+
|
|
18
|
+
Tauri 2 exposes `build`, `android build` and `ios build` commands and automatically bundles configured platform formats. Its distribution documentation lists Debian, Snap, AppImage, Flatpak and RPM for Linux, DMG and app bundles for macOS, Windows installers, and Android/iOS distribution surfaces. The same documentation states that most platforms require code signing, so an artifact workflow must distinguish generated unsigned output from store-ready signed output [1].
|
|
19
|
+
|
|
20
|
+
Tauri's development documentation confirms that the web UI is displayed inside the platform WebView and that the mobile commands use Android Studio or Xcode when the caller needs an IDE. It also warns that mobile iOS physical-device development requires the `TAURI_DEV_HOST` address and an Xcode-connected device, which is why the repository should expose that value as workflow configuration rather than hardcoding a host [2].
|
|
21
|
+
|
|
22
|
+
Electron Forge is a viable alternative when the project explicitly chooses Electron. Its makers are configured per platform and can produce formats such as DMG, AppX and Flatpak [3]. The Debian maker requires Linux or macOS plus `fakeroot` and `dpkg`, so Debian packaging belongs on a Linux CI job with those packages available [4]. The project should not add Electron merely to produce installers if a lighter Tauri shell satisfies the browser requirement.
|
|
23
|
+
|
|
24
|
+
Android's official command-line guidance distinguishes debug and release output. `assembleDebug` creates a debug APK signed by the SDK's debug key for testing, while release APKs and bundles require the owner's private signing key. The same documentation describes Gradle `bundle<Variant>` tasks for AAB output and explains that an AAB is not directly installable on a device [5]. Consequently, the workflow may publish a debug APK as a clearly labeled test artifact, but must require a repository secret or environment-provided keystore before claiming a release APK or AAB.
|
|
25
|
+
|
|
26
|
+
Apple's Xcode command-line guidance identifies `xcodebuild` as the tool for building, testing, archiving and exporting Xcode projects. iOS packaging therefore belongs on a macOS runner and must receive a scheme, archive path, export options, provisioning profile and certificate from the caller or repository secrets [6]. The workflow can prepare an archive contract when those inputs are absent, but it must not fabricate an IPA or signing identity.
|
|
27
|
+
|
|
28
|
+
GitHub-hosted runners provide standard Linux, Windows and macOS labels. The runner reference documents `ubuntu-latest`, `windows-latest` and `macos-latest` families and notes Android SDK acceleration on Linux runners [7]. The release workflow should use those labels for platform jobs and derive every version from the release tag; it should not assume that a Linux sandbox can cross-build a signed Windows, Android or iOS artifact.
|
|
29
|
+
|
|
30
|
+
## Implementation consequence
|
|
31
|
+
|
|
32
|
+
The first implementation should add a shared desktop application manifest and a Tauri-oriented workflow contract, then add Windows and Linux jobs that can generate unsigned installers when their native tools are present. Android and iOS jobs should be caller-configured and should report `unavailable` rather than emitting a misleading artifact when SDKs, certificates or provisioning inputs are missing. Every generated file must be checksumed, uploaded to the existing GitHub release and listed in a machine-readable release asset manifest.
|
|
33
|
+
|
|
34
|
+
## References
|
|
35
|
+
|
|
36
|
+
[1]: https://v2.tauri.app/distribute/ "Tauri 2 distribution and signing guidance"
|
|
37
|
+
[2]: https://v2.tauri.app/develop/ "Tauri 2 desktop and mobile development guidance"
|
|
38
|
+
[3]: https://www.electronforge.io/config/makers "Electron Forge makers"
|
|
39
|
+
[4]: https://www.electronforge.io/config/makers/deb "Electron Forge Debian maker requirements"
|
|
40
|
+
[5]: https://developer.android.com/build/building-cmdline "Android command-line build, APK, AAB and signing guidance"
|
|
41
|
+
[6]: https://developer.apple.com/library/archive/technotes/tn2339/_index.html "Apple Xcode command-line build and archive guidance"
|
|
42
|
+
[7]: https://docs.github.com/en/actions/reference/runners/github-hosted-runners "GitHub-hosted runner platforms and capabilities"
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Flat native build research for Saddle 1.8.11
|
|
2
|
+
|
|
3
|
+
The 1.8.11 migration follows the repository rule that project-owned code stays at the surface root and that generated `dist/` output is excluded from version control. The migration does not delete toolchain-owned files blindly: it separates Saddle-owned entrypoints from generated platform staging and verifies each build after the path change.
|
|
4
|
+
|
|
5
|
+
## Tauri desktop
|
|
6
|
+
|
|
7
|
+
The official Tauri project structure normally places the Rust project under `src-tauri/`, and the configuration file acts as a marker for the CLI to locate the Rust project [1]. Tauri also supports configuration extension through `--config`, but that feature merges configuration and does not itself guarantee a different Rust project directory [2]. The 1.8.11 implementation therefore tests the more direct layout: `desktop/tauri.conf.json`, `desktop/Cargo.toml`, `desktop/build.rs`, `desktop/lib.rs` and `desktop/main.rs`. The workflow invokes the CLI from `desktop/` so the configuration and Cargo manifest share one flat surface root.
|
|
8
|
+
|
|
9
|
+
The frontend remains outside the native surface at `web/dist/public`. The path is relative to `desktop/tauri.conf.json`, and the generated `dist/` directory stays ignored. Desktop `target/`, icon outputs and bundle staging also remain generated and are never release inputs unless they match the explicit artifact collector patterns.
|
|
10
|
+
|
|
11
|
+
## Android Capacitor
|
|
12
|
+
|
|
13
|
+
Android Gradle supports custom source directories through the module-level `sourceSets` block. The official Android guidance allows `java.srcDirs`, `res.srcDirs` and `manifest.srcFile` to point to project-defined paths outside the conventional `src/main` tree [3]. The 1.8.11 layout uses this capability for Saddle-owned files: `android/main/` for the activity host, `android/res/` for resources, `android/AndroidManifest.xml` for the manifest and root-level test directories where practical.
|
|
14
|
+
|
|
15
|
+
Capacitor 8 still generates its web staging, plugin metadata and Cordova bridge under its conventional Android project paths during `cap sync`. Those generated paths are toolchain-owned, ignored by Git and not treated as Saddle source. A validation step rejects tracked `android/app/src` project files while allowing the transient CI staging created by Capacitor. This keeps the repository flat without breaking the generator contract.
|
|
16
|
+
|
|
17
|
+
## iOS Capacitor
|
|
18
|
+
|
|
19
|
+
Capacitor generates an Xcode project, Swift Package Manager bridge and copied web resources. The generated `CapApp-SPM` package explicitly identifies itself as CLI-managed. The 1.8.11 migration therefore keeps the Xcode project and Capacitor-managed package paths as generated platform internals while ensuring Saddle-owned metadata, workflow configuration and documentation live at the `ios/` root. Flattening the internal Xcode group hierarchy would require abandoning the generated Capacitor project and would reduce reproducibility rather than improve it.
|
|
20
|
+
|
|
21
|
+
## Decision
|
|
22
|
+
|
|
23
|
+
The flat rule applies strictly to project-owned files. Desktop becomes fully flat at `desktop/`. Android moves the Saddle-owned activity, manifest, resources and tests to root-level paths and maps them through Gradle `sourceSets`; transient Capacitor files remain ignored. iOS keeps generator-owned Xcode internals but exposes a flat root contract and does not add a project-owned `src` directory. All workflows use release-tag version derivation and contain no credentials or fixed infrastructure endpoints.
|
|
24
|
+
|
|
25
|
+
## References
|
|
26
|
+
|
|
27
|
+
[1]: https://v2.tauri.app/start/project-structure/ "Tauri project structure"
|
|
28
|
+
[2]: https://v2.tauri.app/develop/configuration-files/ "Tauri configuration files"
|
|
29
|
+
[3]: https://developer.android.com/build/gradle-tips "Android Gradle tips and source set configuration"
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Mobile conversion research for Saddle 1.8.10
|
|
2
|
+
|
|
3
|
+
## Scope and date
|
|
4
|
+
|
|
5
|
+
This research was reviewed on 13 August 2026 for the 1.8.10 planning cycle. The objective is to preserve one TypeScript-first library core, reuse the compiled web surface, create explicit Android and iOS boundaries, keep the Tauri desktop browser, reduce Android release size and make release filenames predictable.
|
|
6
|
+
|
|
7
|
+
## Framework comparison
|
|
8
|
+
|
|
9
|
+
| Approach | Strengths | Tradeoffs | Setup complexity | Decision |
|
|
10
|
+
| --- | --- | --- | --- | --- |
|
|
11
|
+
| Tauri 2 for desktop and mobile | Reuses any HTML, CSS and JavaScript frontend; uses the system webview; already builds Saddle desktop; Rust boundary remains available for native capabilities. Tauri documents a small native footprint because the webview is not bundled with every application [1]. | Android and iOS projects are generated through Tauri’s mobile commands; native signing and store configuration remain platform-specific. The current Android debug build is not a valid production-size benchmark. | Medium for desktop, medium-high for mobile | Keep for the desktop browser and retain as a supported mobile alternative. |
|
|
12
|
+
| Capacitor 8.5.0 for Android and iOS | Designed to drop into an existing web project. The documented requirements are a package manifest, a built web directory and a root `index.html`; `npx cap add android`, `npx cap add ios` and `npx cap sync` create and synchronize the native projects [2]. Android uses the system WebView and exposes a JavaScript bridge to Java or Kotlin [3]. | Adds native Android and iOS project trees and a separate plugin boundary. It does not automatically make a web bundle small; release shrinking, asset selection and ABI strategy still control the final size. | Medium | Select as the primary 1.8.10 conversion path for explicit `android/` and `ios/` folders. |
|
|
13
|
+
| Ionic Framework 7.2.1 with Capacitor | Provides a mobile UI component system and navigation conventions on top of the web stack. It can be adopted where mobile-specific controls are required. | It is optional for Capacitor. Adding Ionic to Saddle’s existing React/Tailwind surface would duplicate or replace UI primitives and would not, by itself, solve the 119 MiB debug APK problem. | Medium-high | Do not migrate the current design to Ionic in 1.8.10. Evaluate Ionic components later only for a clearly identified mobile interaction gap. |
|
|
14
|
+
|
|
15
|
+
## Chosen architecture
|
|
16
|
+
|
|
17
|
+
The library remains the source of truth. The existing `desktop/` Tauri shell remains the browser and desktop application surface. The existing root `browser/` directory remains the transport-neutral browser-agent logic and must not be duplicated as a second browser implementation.
|
|
18
|
+
|
|
19
|
+
The 1.8.10 work introduces explicit `android/` and `ios/` surface boundaries using Capacitor configuration and native project inputs. Both surfaces consume the same compiled web distribution and import the same library contracts. They do not fork the engine, reimplement browser actions or store credentials in source control. The generated native projects are conversion targets; the TypeScript and TSX source remains authoritative.
|
|
20
|
+
|
|
21
|
+
The browser naming is normalized at the release boundary rather than by renaming the transport-neutral `browser/` logic into a second application. The desktop browser bundle is named from the Saddle product identity, while the internal browser modules keep their API-compatible names.
|
|
22
|
+
|
|
23
|
+
## Why the 1.8.9 debug APK is large
|
|
24
|
+
|
|
25
|
+
The v1.8.9 APK is `125,242,132` bytes, approximately 119.5 MiB. It was generated by the workflow with Tauri’s `--debug --apk --aab` path, so it is a debug test artifact rather than a production-size release benchmark. The release AAB is `35,494,095` bytes, approximately 33.8 MiB, but it is also debug-signed.
|
|
26
|
+
|
|
27
|
+
The primary optimization path is therefore to generate a release build, enable R8 code shrinking and resource shrinking, and measure the result with Android’s APK Analyzer. Android documents that R8 removes unreachable code, optimizes and obfuscates the remaining code, while resource shrinking removes unused resources [4]. Android also documents that App Bundles allow Google Play to generate device-specific APKs and that `--split-per-abi` is useful for testing or distribution outside Google Play [5]. APK Analyzer reports raw size, estimated download size and side-by-side differences between builds [6].
|
|
28
|
+
|
|
29
|
+
The 1.8.10 workflow will keep a debug artifact only as an explicitly named test output. The release path will produce a release AAB and an architecture-specific APK when signing inputs are available. It will not claim that a debug universal APK is store-ready.
|
|
30
|
+
|
|
31
|
+
### Measured 1.8.9 APK composition
|
|
32
|
+
|
|
33
|
+
The downloaded `app-universal-debug.apk` is 120 MiB on disk and contains 925 archive entries with 133,213,007 bytes of uncompressed content. The dominant entry is `lib/arm64-v8a/libsaddle_desktop.so` at 118,076,216 bytes. The web distribution is approximately 3.3 MiB, so the web assets are not the primary cause of the APK size. The first optimization target is the debug Rust shared library: release compilation, symbol stripping, native profile selection and inspection of the generated `.so` are required before evaluating a framework change.
|
|
34
|
+
|
|
35
|
+
## Release naming policy
|
|
36
|
+
|
|
37
|
+
Public artifact names use lowercase product identity, dots as separators and the release version. The policy avoids underscores, build-helper names and ambiguous generic files.
|
|
38
|
+
|
|
39
|
+
| Surface | 1.8.10 naming pattern |
|
|
40
|
+
| --- | --- |
|
|
41
|
+
| Desktop browser | `saddle.browser.1.8.10.<format>` |
|
|
42
|
+
| Android APK | `saddle.apk.1.8.10.<abi>.apk` |
|
|
43
|
+
| Android AAB | `saddle.aab.1.8.10.aab` |
|
|
44
|
+
| iOS IPA | `saddle.ipa.1.8.10.ipa` |
|
|
45
|
+
| Container | `saddle.container.1.8.10.tar.gz` |
|
|
46
|
+
| Extension | `saddle.extension.1.8.10.zip` |
|
|
47
|
+
| Checksums | `sha256.<surface>.1.8.10` |
|
|
48
|
+
| Manifest | `manifest.<surface>.1.8.10.json` |
|
|
49
|
+
|
|
50
|
+
The workflow must reject `build_script_build*.exe`, `build-script-build.exe`, `saddle_desktop.exe`, generic `artifact-manifest.json`, generic `SHA256SUMS` and any public filename containing an underscore. Rust build-script executables are intermediate compilation outputs and are never release assets.
|
|
51
|
+
|
|
52
|
+
## References
|
|
53
|
+
|
|
54
|
+
[1]: https://v2.tauri.app/start/ "Tauri: What is Tauri?"
|
|
55
|
+
[2]: https://capacitorjs.com/docs/getting-started "Capacitor: Installing Capacitor"
|
|
56
|
+
[3]: https://capacitorjs.com/docs/android "Capacitor Android Documentation"
|
|
57
|
+
[4]: https://developer.android.com/topic/performance/app-optimization/enable-app-optimization "Android Developers: Enable app optimization with R8"
|
|
58
|
+
[5]: https://v2.tauri.app/distribute/google-play/ "Tauri: Google Play distribution"
|
|
59
|
+
[6]: https://developer.android.com/studio/debug/apk-analyzer "Android Developers: Analyze your build with the APK Analyzer"
|
package/docs/releaseassets.md
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
# Release assets
|
|
2
2
|
|
|
3
|
-
The Node-only release adapter creates deterministic metadata for caller-selected artifacts.
|
|
3
|
+
The Node-only release adapter creates deterministic metadata for caller-selected artifacts. For version `1.8.11`, it writes dotted surface-specific names such as `sha256.desktop.1.8.11`, `manifest.desktop.1.8.11.json`, `sbom.desktop.1.8.11.cdx.json` and `provenance.desktop.1.8.11.intoto.jsonl`. The adapter rejects underscore-based public names and Rust build-helper executables. It never publishes, authenticates or selects a registry.
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
npm run release:assets -- \
|
|
7
|
-
--version 1.8.
|
|
7
|
+
--version 1.8.11 \
|
|
8
|
+
--surface desktop \
|
|
8
9
|
--output build/release \
|
|
9
10
|
--artifact build/saddle.tgz \
|
|
10
11
|
--build-type caller-build \
|
|
11
12
|
--builder caller-ci
|
|
12
13
|
```
|
|
13
14
|
|
|
14
|
-
The artifact paths are supplied by the caller and are sorted before the checksum and provenance files are written. Package dependencies are read from the root lockfile to build a compact component list. The output can be attached to a release or checked by a registry-specific workflow without adding credentials to the library.
|
|
15
|
+
The artifact paths are supplied by the caller and are sorted before the checksum, manifest, SBOM and provenance files are written. Package dependencies are read from the root lockfile to build a compact component list. The output can be attached to a release or checked by a registry-specific workflow without adding credentials to the library.
|
|
15
16
|
|
|
16
17
|
The package also exports the adapter as `@wenathlan/saddle/release-assets`. It is intentionally Node-only because release metadata reads files and uses the Node crypto implementation; the transport-neutral root remains free of Node imports.
|
package/extension/manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest_version": 3,
|
|
3
3
|
"name": "Saddle browser bridge",
|
|
4
|
-
"version": "1.8.
|
|
4
|
+
"version": "1.8.11",
|
|
5
5
|
"description": "User initiated page snapshots through the Saddle browser contract.",
|
|
6
6
|
"minimum_chrome_version": "110",
|
|
7
7
|
"permissions": ["activeTab", "scripting", "storage"],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wenathlan/saddle",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.11",
|
|
4
4
|
"description": "binary computing engine that turns distributed storage into a publishable working set",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
@@ -15,6 +15,11 @@
|
|
|
15
15
|
"publishConfig": {
|
|
16
16
|
"access": "public"
|
|
17
17
|
},
|
|
18
|
+
"overrides": {
|
|
19
|
+
"xcode": {
|
|
20
|
+
"uuid": "11.1.1"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
18
23
|
"repository": {
|
|
19
24
|
"type": "git",
|
|
20
25
|
"url": "https://github.com/wenathlan/saddle.git"
|
|
@@ -90,12 +95,21 @@
|
|
|
90
95
|
"target:manifest": "npm run build:engine && node dist/packager/targetcli.js",
|
|
91
96
|
"pack:check": "npm run check && npm run formatcheck && npm test && npm pack --dry-run",
|
|
92
97
|
"prepublishOnly": "npm run pack:check",
|
|
98
|
+
"tauri": "npx --yes @tauri-apps/cli@2.11.4",
|
|
99
|
+
"capacitor:sync:android": "npm run web:build:pages && cap sync android",
|
|
100
|
+
"capacitor:flatten:android": "node tests/scripts/flattenandroid.mjs",
|
|
101
|
+
"capacitor:sync:ios": "npm run web:build:pages && cap sync ios",
|
|
102
|
+
"native:check:flat": "node tests/scripts/validateflatnative.mjs",
|
|
93
103
|
"web:dev": "vite --config web/vite.config.ts --host",
|
|
94
104
|
"web:check": "tsc --project web/tsconfig.json --noEmit",
|
|
95
105
|
"web:build": "vite build --config web/vite.config.ts",
|
|
96
106
|
"web:build:pages": "vite build --config web/vite.config.ts"
|
|
97
107
|
},
|
|
98
108
|
"devDependencies": {
|
|
109
|
+
"@capacitor/android": "^8.5.0",
|
|
110
|
+
"@capacitor/cli": "^8.5.0",
|
|
111
|
+
"@capacitor/core": "^8.5.0",
|
|
112
|
+
"@capacitor/ios": "^8.5.0",
|
|
99
113
|
"@hookform/resolvers": "^5.2.2",
|
|
100
114
|
"@radix-ui/react-accordion": "^1.2.12",
|
|
101
115
|
"@radix-ui/react-alert-dialog": "^1.1.15",
|