@agentsean/launch 1.0.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.
Files changed (50) hide show
  1. package/LICENSE +661 -0
  2. package/dist/doctor.d.ts +30 -0
  3. package/dist/doctor.d.ts.map +1 -0
  4. package/dist/doctor.js +170 -0
  5. package/dist/doctor.js.map +1 -0
  6. package/dist/index.d.ts +12 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +12 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/install.d.ts +22 -0
  11. package/dist/install.d.ts.map +1 -0
  12. package/dist/install.js +42 -0
  13. package/dist/install.js.map +1 -0
  14. package/dist/onboard.d.ts +21 -0
  15. package/dist/onboard.d.ts.map +1 -0
  16. package/dist/onboard.js +59 -0
  17. package/dist/onboard.js.map +1 -0
  18. package/dist/provision.d.ts +13 -0
  19. package/dist/provision.d.ts.map +1 -0
  20. package/dist/provision.js +52 -0
  21. package/dist/provision.js.map +1 -0
  22. package/dist/recipes.d.ts +11 -0
  23. package/dist/recipes.d.ts.map +1 -0
  24. package/dist/recipes.js +225 -0
  25. package/dist/recipes.js.map +1 -0
  26. package/dist/service.d.ts +22 -0
  27. package/dist/service.d.ts.map +1 -0
  28. package/dist/service.js +127 -0
  29. package/dist/service.js.map +1 -0
  30. package/dist/site.d.ts +9 -0
  31. package/dist/site.d.ts.map +1 -0
  32. package/dist/site.js +72 -0
  33. package/dist/site.js.map +1 -0
  34. package/dist/telemetry.d.ts +38 -0
  35. package/dist/telemetry.d.ts.map +1 -0
  36. package/dist/telemetry.js +146 -0
  37. package/dist/telemetry.js.map +1 -0
  38. package/dist/token-strength.d.ts +9 -0
  39. package/dist/token-strength.d.ts.map +1 -0
  40. package/dist/token-strength.js +22 -0
  41. package/dist/token-strength.js.map +1 -0
  42. package/dist/update.d.ts +15 -0
  43. package/dist/update.d.ts.map +1 -0
  44. package/dist/update.js +31 -0
  45. package/dist/update.js.map +1 -0
  46. package/dist/version.d.ts +8 -0
  47. package/dist/version.d.ts.map +1 -0
  48. package/dist/version.js +15 -0
  49. package/dist/version.js.map +1 -0
  50. package/package.json +47 -0
@@ -0,0 +1,146 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { VERSION } from "./version.js";
5
+ /**
6
+ * Event names. The only fields we ever send are in `TelemetryPayload`.
7
+ * Never: domain, URL, page content, GSC query, API key, IP, hostname.
8
+ */
9
+ export const TELEMETRY_EVENTS = [
10
+ "first_run",
11
+ "command_used",
12
+ "feature_used",
13
+ "error_class",
14
+ "cms_type",
15
+ "service_installed",
16
+ ];
17
+ const FORBIDDEN = [
18
+ "url",
19
+ "origin",
20
+ "domain",
21
+ "host",
22
+ "query",
23
+ "page",
24
+ "html",
25
+ "token",
26
+ "key",
27
+ "secret",
28
+ "ip",
29
+ "email",
30
+ "refresh",
31
+ ];
32
+ export function telemetryPath(home) {
33
+ return path.join(home, "telemetry.json");
34
+ }
35
+ export function telemetryLogPath(home) {
36
+ return path.join(home, "telemetry.log");
37
+ }
38
+ export function dntHonored(env = process.env) {
39
+ const dnt = env["DO_NOT_TRACK"]?.trim();
40
+ if (dnt === "1" || dnt?.toLowerCase() === "true")
41
+ return true;
42
+ const sean = env["SEAN_TELEMETRY"]?.trim();
43
+ if (sean === "0" || sean?.toLowerCase() === "false")
44
+ return true;
45
+ return false;
46
+ }
47
+ export function defaultConfig(installMethod = "npx") {
48
+ return { enabled: false, consentedAt: null, installMethod };
49
+ }
50
+ export function loadTelemetryConfig(home) {
51
+ const file = telemetryPath(home);
52
+ if (!fs.existsSync(file))
53
+ return defaultConfig();
54
+ try {
55
+ const parsed = JSON.parse(fs.readFileSync(file, "utf8"));
56
+ return {
57
+ enabled: Boolean(parsed.enabled),
58
+ consentedAt: parsed.consentedAt ?? null,
59
+ installMethod: parsed.installMethod || "npx",
60
+ };
61
+ }
62
+ catch {
63
+ return defaultConfig();
64
+ }
65
+ }
66
+ export function saveTelemetryConfig(home, config) {
67
+ fs.mkdirSync(home, { recursive: true, mode: 0o700 });
68
+ fs.writeFileSync(telemetryPath(home), JSON.stringify(config, null, 2) + "\n", {
69
+ mode: 0o600,
70
+ });
71
+ }
72
+ export function isTelemetryEnabled(home, env = process.env) {
73
+ if (dntHonored(env))
74
+ return false;
75
+ return loadTelemetryConfig(home).enabled;
76
+ }
77
+ export function previewPayload(partial = {}) {
78
+ const payload = {
79
+ event: partial.event ?? "first_run",
80
+ version: VERSION,
81
+ os: os.platform(),
82
+ arch: os.arch(),
83
+ node: process.versions.node,
84
+ installMethod: partial.installMethod ?? "npx",
85
+ cmsType: partial.cmsType ?? null,
86
+ command: partial.command ?? null,
87
+ feature: partial.feature ?? null,
88
+ errorClass: partial.errorClass ?? null,
89
+ };
90
+ assertSafePayload(payload);
91
+ return payload;
92
+ }
93
+ export function assertSafePayload(payload) {
94
+ const keys = new Set(Object.keys(payload).map((k) => k.toLowerCase()));
95
+ for (const f of FORBIDDEN) {
96
+ if (keys.has(f)) {
97
+ throw new Error(`telemetry payload must not include ${f}`);
98
+ }
99
+ }
100
+ const blob = JSON.stringify(payload).toLowerCase();
101
+ if (/https?:\/\//.test(blob)) {
102
+ throw new Error("telemetry payload must not include URLs");
103
+ }
104
+ }
105
+ export function recordEvent(home, partial, env = process.env) {
106
+ if (!isTelemetryEnabled(home, env))
107
+ return null;
108
+ const cfg = loadTelemetryConfig(home);
109
+ const payload = previewPayload({
110
+ ...partial,
111
+ installMethod: cfg.installMethod,
112
+ });
113
+ fs.mkdirSync(home, { recursive: true, mode: 0o700 });
114
+ fs.appendFileSync(telemetryLogPath(home), JSON.stringify(payload) + "\n", {
115
+ mode: 0o600,
116
+ });
117
+ const dest = env["SEAN_TELEMETRY_URL"]?.trim();
118
+ if (dest) {
119
+ void fetch(dest, {
120
+ method: "POST",
121
+ headers: { "content-type": "application/json" },
122
+ body: JSON.stringify(payload),
123
+ }).catch(() => undefined);
124
+ }
125
+ return payload;
126
+ }
127
+ export function readTelemetryLog(home) {
128
+ const file = telemetryLogPath(home);
129
+ if (!fs.existsSync(file))
130
+ return [];
131
+ return fs
132
+ .readFileSync(file, "utf8")
133
+ .split("\n")
134
+ .filter(Boolean)
135
+ .map((line) => JSON.parse(line));
136
+ }
137
+ export function consentTelemetry(home, enabled, installMethod) {
138
+ const config = {
139
+ enabled,
140
+ consentedAt: new Date().toISOString(),
141
+ installMethod,
142
+ };
143
+ saveTelemetryConfig(home, config);
144
+ return config;
145
+ }
146
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /** Bitsight 2026: OpenClaw accepted a 1-character gateway token. */
2
+ export declare const MIN_TOKEN_LENGTH = 32;
3
+ export declare const MIN_TOKEN_UNIQUE_CHARS = 8;
4
+ export declare class TokenStrengthError extends Error {
5
+ constructor(message: string);
6
+ }
7
+ export declare function assertTokenStrength(token: string): void;
8
+ export declare function envAuthToken(): string | undefined;
9
+ //# sourceMappingURL=token-strength.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-strength.d.ts","sourceRoot":"","sources":["../src/token-strength.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAWvD;AAED,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAGjD"}
@@ -0,0 +1,22 @@
1
+ /** Bitsight 2026: OpenClaw accepted a 1-character gateway token. */
2
+ export const MIN_TOKEN_LENGTH = 32;
3
+ export const MIN_TOKEN_UNIQUE_CHARS = 8;
4
+ export class TokenStrengthError extends Error {
5
+ constructor(message) {
6
+ super(message);
7
+ this.name = "TokenStrengthError";
8
+ }
9
+ }
10
+ export function assertTokenStrength(token) {
11
+ if (token.length < MIN_TOKEN_LENGTH) {
12
+ throw new TokenStrengthError(`Auth token must be at least ${MIN_TOKEN_LENGTH} characters. Short tokens are brute-forceable.`);
13
+ }
14
+ if (new Set(token).size < MIN_TOKEN_UNIQUE_CHARS) {
15
+ throw new TokenStrengthError(`Auth token must contain at least ${MIN_TOKEN_UNIQUE_CHARS} distinct characters.`);
16
+ }
17
+ }
18
+ export function envAuthToken() {
19
+ const raw = process.env["SEAN_AUTH_TOKEN"]?.trim();
20
+ return raw && raw.length > 0 ? raw : undefined;
21
+ }
22
+ //# sourceMappingURL=token-strength.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-strength.js","sourceRoot":"","sources":["../src/token-strength.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAExC,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,IAAI,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;QACpC,MAAM,IAAI,kBAAkB,CAC1B,+BAA+B,gBAAgB,gDAAgD,CAChG,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,sBAAsB,EAAE,CAAC;QACjD,MAAM,IAAI,kBAAkB,CAC1B,oCAAoC,sBAAsB,uBAAuB,CAClF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,CAAC;IACnD,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { CHANNELS, type Channel } from "./version.js";
2
+ export type UpdateCheck = {
3
+ current: string;
4
+ channel: Channel;
5
+ latest: string | null;
6
+ published: boolean;
7
+ behind: boolean;
8
+ };
9
+ export declare function checkUpdate(opts: {
10
+ channel?: Channel | undefined;
11
+ fetch?: typeof fetch | undefined;
12
+ current?: string | undefined;
13
+ }): Promise<UpdateCheck>;
14
+ export { CHANNELS };
15
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,OAAO,EAAW,MAAM,cAAc,CAAC;AAE/D,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAIF,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,KAAK,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,GAAG,OAAO,CAAC,WAAW,CAAC,CA4BvB;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
package/dist/update.js ADDED
@@ -0,0 +1,31 @@
1
+ import { CHANNELS, VERSION } from "./version.js";
2
+ const REGISTRY = "https://registry.npmjs.org/agentsean";
3
+ export async function checkUpdate(opts) {
4
+ const channel = opts.channel ?? "stable";
5
+ const current = opts.current ?? VERSION;
6
+ const fetchFn = opts.fetch ?? globalThis.fetch;
7
+ const tag = channel === "stable" ? "latest" : channel === "dev" ? "beta" : "extended-stable";
8
+ try {
9
+ const res = await fetchFn(REGISTRY);
10
+ if (res.status === 404) {
11
+ return { current, channel, latest: null, published: false, behind: false };
12
+ }
13
+ if (!res.ok) {
14
+ return { current, channel, latest: null, published: false, behind: false };
15
+ }
16
+ const body = (await res.json());
17
+ const latest = body["dist-tags"]?.[tag] ?? body["dist-tags"]?.["latest"] ?? null;
18
+ return {
19
+ current,
20
+ channel,
21
+ latest,
22
+ published: latest !== null,
23
+ behind: Boolean(latest && latest !== current),
24
+ };
25
+ }
26
+ catch {
27
+ return { current, channel, latest: null, published: false, behind: false };
28
+ }
29
+ }
30
+ export { CHANNELS };
31
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAgB,OAAO,EAAE,MAAM,cAAc,CAAC;AAU/D,MAAM,QAAQ,GAAG,sCAAsC,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAIjC;IACC,MAAM,OAAO,GAAY,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IAC/C,MAAM,GAAG,GACP,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC;IACnF,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAC7E,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAC7E,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAE7B,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;QACjF,OAAO;YACL,OAAO;YACP,OAAO;YACP,MAAM;YACN,SAAS,EAAE,MAAM,KAAK,IAAI;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM,KAAK,OAAO,CAAC;SAC9C,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ /** CalVer YYYY.M.PATCH. Dist-tags: latest / beta / extended-stable. */
2
+ export declare const VERSION = "2026.9.0";
3
+ export declare const CHANNELS: readonly ["stable", "extended-stable", "dev"];
4
+ export type Channel = (typeof CHANNELS)[number];
5
+ export declare function isChannel(value: string): value is Channel;
6
+ export declare const MIN_NODE = "22.19.0";
7
+ export declare function nodeMeetsMin(version?: string): boolean;
8
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,eAAO,MAAM,OAAO,aAAa,CAAC;AAElC,eAAO,MAAM,QAAQ,+CAAgD,CAAC;AACtE,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,OAAO,CAEzD;AAED,eAAO,MAAM,QAAQ,YAAY,CAAC;AAElC,wBAAgB,YAAY,CAAC,OAAO,SAAwB,GAAG,OAAO,CAKrE"}
@@ -0,0 +1,15 @@
1
+ /** CalVer YYYY.M.PATCH. Dist-tags: latest / beta / extended-stable. */
2
+ export const VERSION = "2026.9.0";
3
+ export const CHANNELS = ["stable", "extended-stable", "dev"];
4
+ export function isChannel(value) {
5
+ return CHANNELS.includes(value);
6
+ }
7
+ export const MIN_NODE = "22.19.0";
8
+ export function nodeMeetsMin(version = process.versions.node) {
9
+ const [a, b] = version.split(".").map((n) => Number(n));
10
+ const [ma, mb] = MIN_NODE.split(".").map((n) => Number(n));
11
+ if ((a ?? 0) !== (ma ?? 0))
12
+ return (a ?? 0) > (ma ?? 0);
13
+ return (b ?? 0) >= (mb ?? 0);
14
+ }
15
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAAC;AAElC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,iBAAiB,EAAE,KAAK,CAAU,CAAC;AAGtE,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAQ,QAA8B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,SAAS,CAAC;AAElC,MAAM,UAAU,YAAY,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI;IAC1D,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@agentsean/launch",
3
+ "version": "1.0.0",
4
+ "license": "AGPL-3.0-only",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "types": "./dist/index.d.ts",
9
+ "import": "./dist/index.js"
10
+ }
11
+ },
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "engines": {
16
+ "node": ">=22.19.0"
17
+ },
18
+ "devDependencies": {
19
+ "typescript": "~5.9.3",
20
+ "vitest": "^4.1.11"
21
+ },
22
+ "publishConfig": {
23
+ "access": "public"
24
+ },
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "git+https://github.com/seziro-team/agentsean.git",
28
+ "directory": "packages/launch"
29
+ },
30
+ "homepage": "https://github.com/seziro-team/agentsean#readme",
31
+ "bugs": {
32
+ "url": "https://github.com/seziro-team/agentsean/issues"
33
+ },
34
+ "author": "Seziro (https://seziro.com)",
35
+ "description": "Agent Sean — launch module",
36
+ "keywords": [
37
+ "seo",
38
+ "agent",
39
+ "agentsean",
40
+ "seo-automation"
41
+ ],
42
+ "scripts": {
43
+ "build": "tsc -p tsconfig.json",
44
+ "typecheck": "tsc -p tsconfig.json --noEmit",
45
+ "test": "vitest run --config ../../vitest.config.ts"
46
+ }
47
+ }