create-opentray 0.19.0 → 0.20.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 (49) hide show
  1. package/README.md +136 -133
  2. package/assets/create-opentray-logo.png +0 -0
  3. package/dist/bin-sZB5nWq0.mjs +2142 -0
  4. package/dist/bin-sZB5nWq0.mjs.map +1 -0
  5. package/dist/bin.d.mts +15 -2
  6. package/dist/bin.d.mts.map +1 -0
  7. package/dist/bin.mjs +1 -1
  8. package/dist/index.d.mts +62 -351
  9. package/dist/index.d.mts.map +1 -1
  10. package/dist/index.mjs +2 -1
  11. package/dist/shell/assets/browse.js +1 -1
  12. package/dist/shell/assets/index.css +1 -1
  13. package/dist/shell/assets/index.js +7 -7
  14. package/dist/shell/assets/input.js +1 -1
  15. package/dist/shell/assets/main.js +21 -43
  16. package/dist/shell/assets/terminal-pane.js +1 -1
  17. package/dist/shell/browse.html +3 -0
  18. package/dist/shell/favicon-16.png +0 -0
  19. package/dist/shell/favicon-32.png +0 -0
  20. package/dist/shell/favicon-64.png +0 -0
  21. package/dist/shell/index.html +3 -0
  22. package/dist/shell/logo.png +0 -0
  23. package/dist/shell/terminal.html +3 -0
  24. package/dist/skill/SKILL.md +156 -0
  25. package/dist/skill/references/cli-reference.md +77 -0
  26. package/dist/skill/references/how-it-works.md +49 -0
  27. package/dist/webui/assets/browse.js +1 -1
  28. package/dist/webui/assets/index.css +1 -1
  29. package/dist/webui/assets/index.js +7 -7
  30. package/dist/webui/assets/input.js +1 -1
  31. package/dist/webui/assets/main.js +21 -43
  32. package/dist/webui/assets/terminal-pane.js +1 -1
  33. package/dist/webui/browse.html +3 -0
  34. package/dist/webui/favicon-16.png +0 -0
  35. package/dist/webui/favicon-32.png +0 -0
  36. package/dist/webui/favicon-64.png +0 -0
  37. package/dist/webui/index.html +3 -0
  38. package/dist/webui/logo.png +0 -0
  39. package/dist/webui/terminal.html +3 -0
  40. package/package.json +12 -6
  41. package/skill/SKILL.md +156 -0
  42. package/skill/references/cli-reference.md +77 -0
  43. package/skill/references/how-it-works.md +49 -0
  44. package/dist/bin-BT_kcLuP.mjs +0 -3823
  45. package/dist/bin-BT_kcLuP.mjs.map +0 -1
  46. package/dist/bin-CeFW1wxR.d.mts +0 -15
  47. package/dist/bin-CeFW1wxR.d.mts.map +0 -1
  48. package/dist/icon-codec-BQ3cGV1n.mjs +0 -13
  49. package/dist/icon-codec-BQ3cGV1n.mjs.map +0 -1
package/dist/index.d.mts CHANGED
@@ -1,308 +1,7 @@
1
- import { i as parseWizardCli, n as main, t as WizardCliOptions } from "./bin-CeFW1wxR.mjs";
2
- import { generateOpenTrayAppIcon } from "@opentray/vite-plugin";
1
+ import { WizardCliOptions, main, parseWizardCli } from "./bin.mjs";
2
+ import { DiscoveredService, DiscoveredService as DiscoveredService$1, FaviconCandidate, LaunchVector, MaterializeContext, MaterializeContext as MaterializeContext$1, MaterializeInput, MaterializeLogEvent, MaterializeResult, MaterializeResult as MaterializeResult$1, ScaffoldAppConfig, ScaffoldOptions, ScaffoldResult, ScrapeResult, ScrapedIcon, TokenizeResult, createPortDiscovery, deriveDefaultAppId, deriveDefaultAppName, detectPackageManager, expectedDarwinBundlePath, extractFaviconCandidates, extractTitle, faviconCandidateSize, isDirectoryOccupied, isValidAppId, materialize, openMaterializedApp, parseLsofPorts, parseNetstatPorts, parsePowerShellPorts, parseShebangInterpreter, pinningHint, rankFaviconCandidates, resolveFaviconUrl, resolveLaunchVector, resolveLaunchVector as resolveLaunchVector$1, resolveOnPath, scrapeService, scrapeService as scrapeService$1, serviceUrl, startCommandRun, toProjectDirectoryName, tokenizeCommandLine, verifyHttpService, waitForTcpPort, writeScaffold } from "@create-opentray/core";
3
3
  import { IncomingMessage } from "node:http";
4
4
 
5
- //#region src/port-scan.d.ts
6
- interface DiscoveredService {
7
- readonly port: number;
8
- readonly url: string;
9
- readonly firstSeenAt: number;
10
- title?: string;
11
- }
12
- type ListenersRunner = (platform: NodeJS.Platform) => Promise<ReadonlySet<number>>;
13
- /** Listener snapshot with process ownership: port -> owning PIDs. */
14
- type ListenerOwners = ReadonlyMap<number, ReadonlySet<number>>;
15
- /** Loopback service URL for a discovered port. */
16
- declare const serviceUrl: (port: number) => string;
17
- declare const parseLsofPorts: (stdout: string) => ReadonlySet<number>;
18
- /** Parses `netstat -ano -p tcp` output; keeps LISTENING rows. */
19
- declare const parseNetstatPorts: (stdout: string) => ReadonlySet<number>;
20
- declare const parsePowerShellPorts: (stdout: string) => ReadonlySet<number>;
21
- /** TCP-connect probe used by the generated app and discovery verification. */
22
- declare const waitForTcpPort: (port: number, timeoutMs: number, intervalMs?: number, host?: string) => Promise<boolean>;
23
- /** Verify a port answers with an HTTP response (any status counts). */
24
- declare const verifyHttpService: (port: number, timeoutMs?: number) => Promise<boolean>;
25
- interface PortDiscoveryOptions {
26
- readonly platform?: NodeJS.Platform;
27
- readonly baseline: ReadonlySet<number>;
28
- readonly listListeners?: ListenersRunner;
29
- readonly verifyHttp?: (port: number) => Promise<boolean>;
30
- /** Resolves the PIDs whose listeners count as services (preview process tree). */
31
- readonly resolveOwnerPids?: () => Promise<ReadonlySet<number>>;
32
- readonly listOwners?: () => Promise<ListenerOwners>;
33
- readonly intervalMs?: number;
34
- }
35
- interface PortDiscoverySession {
36
- /** Known new services, first-seen order. */
37
- services(): readonly DiscoveredService[];
38
- /** One polling pass; resolves to services discovered during this pass. */
39
- poll(): Promise<readonly DiscoveredService[]>;
40
- stop(): void;
41
- }
42
- /**
43
- * Diff-based port discovery. Each poll re-enumerates listeners, keeps ports
44
- * absent from the baseline, and adds HTTP-verified ones in first-seen order.
45
- */
46
- declare const createPortDiscovery: (options: PortDiscoveryOptions) => PortDiscoverySession;
47
- //#endregion
48
- //#region src/command-run.d.ts
49
- interface CommandRunEvent {
50
- readonly type: "stdout" | "stderr" | "exit" | "spawn-error" | "pty-ready" | "pty-unavailable";
51
- /** The PTY binding's output chunk, verbatim; rendering is the frontend's job. */
52
- readonly chunk?: string;
53
- readonly code?: number | null;
54
- readonly message?: string;
55
- }
56
- interface CommandRunTerminalSize {
57
- readonly cols: number;
58
- readonly rows: number;
59
- }
60
- interface CommandRunOptions {
61
- readonly tokens: readonly string[];
62
- readonly cwd?: string;
63
- readonly env?: NodeJS.ProcessEnv;
64
- readonly ringLimit?: number;
65
- /** Attach through a PTY when available; defaults to true. */
66
- readonly pty?: boolean;
67
- readonly terminalSize?: CommandRunTerminalSize;
68
- readonly onEvent: (event: CommandRunEvent) => void;
69
- }
70
- interface CommandRun {
71
- readonly pid: number | undefined;
72
- readonly pty: boolean;
73
- readonly exited: Promise<{
74
- code: number | null;
75
- spawnError?: string;
76
- }>;
77
- readonly output: readonly string[];
78
- /** Write terminal input bytes to the command's stdin (PTY mode only). */
79
- write(data: string): void;
80
- /** Resize the pseudo-terminal (PTY mode only). */
81
- resize(size: CommandRunTerminalSize): void;
82
- kill(): Promise<void>;
83
- }
84
- declare const startCommandRun: (options: CommandRunOptions) => Promise<CommandRun>;
85
- //#endregion
86
- //#region src/scrape.d.ts
87
- /** Variant tag: the original art, or a solid-color silhouette derived from it. */
88
- type IconVariant = "original" | "solid-black" | "solid-white";
89
- /** One scraped icon candidate, ranked and deduplicated. */
90
- interface ScrapedIcon {
91
- /** Index within the candidate list (stable for /api/icon-data/:port/:index). */
92
- readonly index: number;
93
- /** Absolute URL the bytes came from (variants inherit their source URL). */
94
- readonly url: string;
95
- /** Absolute temp file holding the icon bytes. */
96
- readonly path: string;
97
- /** True pixel clarity (largest dimension; SVG uses intrinsic or 512). */
98
- readonly width: number;
99
- readonly height: number;
100
- /** png | svg | jpeg | webp | gif | ico (ico payloads are extracted to png). */
101
- readonly format: string;
102
- /** Which art this entry carries (originals feed the app-icon picker; the
103
- * advanced tray picker also shows solid variants). */
104
- readonly variant: IconVariant;
105
- /** Index of the original candidate a variant was derived from. */
106
- readonly variantOf?: number;
107
- }
108
- interface ScrapeResult {
109
- readonly ok: boolean;
110
- readonly title: string | undefined;
111
- /** Absolute temp file holding the chosen (clearest) favicon bytes, when found. */
112
- readonly iconPath: string | undefined;
113
- readonly iconUrl?: string;
114
- /** All viable candidates ranked by clarity, near-duplicates removed. */
115
- readonly icons: readonly ScrapedIcon[];
116
- }
117
- interface FaviconCandidate {
118
- readonly href: string;
119
- readonly rel: string;
120
- readonly sizes?: string;
121
- }
122
- /** Extract `<title>` text from HTML. */
123
- declare const extractTitle: (html: string) => string | undefined;
124
- /** Extract `<link rel=... href=...>` favicon candidates from HTML head. */
125
- declare const extractFaviconCandidates: (html: string) => readonly FaviconCandidate[];
126
- /** Largest dimension of a `sizes` attribute value such as `32x32` or `any`. */
127
- declare const faviconCandidateSize: (candidate: FaviconCandidate) => number;
128
- /** Resolve a favicon href against the service origin. */
129
- declare const resolveFaviconUrl: (href: string, origin: string) => string | undefined;
130
- /** Order candidates: declared-size icons descending, then apple-touch-icon, then others. */
131
- declare const rankFaviconCandidates: (candidates: readonly FaviconCandidate[]) => readonly FaviconCandidate[];
132
- interface ScrapePage {
133
- readonly ok: boolean;
134
- readonly status: number;
135
- readonly body: string;
136
- readonly headers: Record<string, string>;
137
- }
138
- interface ScrapeBytes {
139
- readonly ok: boolean;
140
- readonly status: number;
141
- readonly bytes: Buffer;
142
- readonly contentType: string;
143
- }
144
- interface ScrapeFetch {
145
- page(url: string, timeoutMs?: number): Promise<ScrapePage>;
146
- bytes(url: string, timeoutMs?: number): Promise<ScrapeBytes>;
147
- }
148
- /**
149
- * Scrape title and ALL icon candidates from a service port. Never throws:
150
- * failures return `ok: false` with whatever partial identity was found.
151
- */
152
- declare const scrapeService: (port: number, options?: {
153
- fetch?: ScrapeFetch;
154
- tempDir?: string;
155
- }) => Promise<ScrapeResult>;
156
- //#endregion
157
- //#region src/icon-compose.d.ts
158
- type IconBackground = "black" | "white" | "transparent";
159
- //#endregion
160
- //#region src/launch-vector.d.ts
161
- interface LaunchVector {
162
- readonly command: string;
163
- readonly args: readonly string[];
164
- readonly cwd: string;
165
- /** Optional explicit env overlay merged over the runtime environment. */
166
- readonly env?: Readonly<Record<string, string>>;
167
- }
168
- interface ResolveLaunchVectorOptions {
169
- readonly tokens: readonly string[];
170
- readonly cwd: string;
171
- readonly platform?: NodeJS.Platform;
172
- readonly pathEnv?: string;
173
- readonly accessFile?: (path: string) => Promise<void>;
174
- readonly firstLine?: (path: string) => Promise<string | undefined>;
175
- }
176
- /** Resolve a bare command name against PATH; returns undefined when absent. */
177
- declare const resolveOnPath: (command: string, options: Pick<ResolveLaunchVectorOptions, "platform" | "pathEnv" | "accessFile">) => Promise<string | undefined>;
178
- /** Read a `#!/usr/bin/env <interpreter>` shebang; undefined for other files. */
179
- declare const parseShebangInterpreter: (firstLine: string | undefined) => {
180
- interpreter: string;
181
- args: readonly string[];
182
- } | undefined;
183
- /**
184
- * Resolve the user's command tokens to a PATH-independent vector:
185
- * - absolute-ize bare executables through PATH lookup;
186
- * - resolve relative script paths against cwd;
187
- * - when the executable is an `env <interpreter>` shebang script, run the
188
- * interpreter directly with the script as its first argument.
189
- * The persisted descriptor never includes an environment map.
190
- */
191
- declare const resolveLaunchVector: (options: ResolveLaunchVectorOptions) => Promise<LaunchVector>;
192
- //#endregion
193
- //#region src/scaffold.d.ts
194
- interface ScaffoldAppConfig {
195
- readonly schemaVersion: 1;
196
- readonly appId: string;
197
- readonly appName: string;
198
- readonly command: LaunchVector;
199
- readonly service: {
200
- readonly port: number;
201
- };
202
- readonly window: {
203
- readonly width: number;
204
- readonly height: number;
205
- };
206
- /** Tray icon asset (written by materialize); omitted → text-only tray. */
207
- readonly trayIcon?: {
208
- readonly path: string;
209
- readonly template: boolean;
210
- };
211
- /** Generated-app shell (startup terminal / address-bar tabs). */
212
- readonly shell?: {
213
- readonly showTerminal: boolean;
214
- readonly showAddressBar: boolean;
215
- };
216
- }
217
- interface ScaffoldOptions {
218
- readonly config: ScaffoldAppConfig;
219
- readonly targetDir: string;
220
- /** opentray/@opentray/ext-webview version range written into package.json. */
221
- readonly dependencyRange: string;
222
- /** Whether install will be skipped; only affects README guidance text. */
223
- readonly skipInstall?: boolean;
224
- /** Directory holding the prebuilt shell UI (copied to app-shell/ when the
225
- * shell is enabled). */
226
- readonly shellAssetsDir?: string;
227
- }
228
- interface ScaffoldResult {
229
- readonly projectDir: string;
230
- readonly entryPath: string;
231
- readonly configPath: string;
232
- readonly appIconDir: string;
233
- readonly writtenFiles: readonly string[];
234
- }
235
- declare const writeScaffold: (options: ScaffoldOptions) => Promise<ScaffoldResult>;
236
- //#endregion
237
- //#region src/materialize.d.ts
238
- type MaterializeLogEvent = {
239
- readonly type: "step";
240
- readonly step: string;
241
- readonly message: string;
242
- } | {
243
- readonly type: "log";
244
- readonly message: string;
245
- };
246
- interface MaterializeInput {
247
- readonly config: ScaffoldAppConfig;
248
- readonly targetDir: string;
249
- readonly dependencyRange: string;
250
- readonly iconSourcePath: string | undefined;
251
- /** True when the tray source is a solid silhouette (darwin template). */
252
- readonly trayIconIsSolid?: boolean;
253
- /** Icon composition (owner round-12): background + foreground scale. */
254
- readonly iconBackground?: IconBackground;
255
- readonly iconScale?: number;
256
- /** Tray icon source; defaults to the app icon source when omitted. */
257
- readonly trayIconSourcePath?: string;
258
- /** Generated-app shell options (startup terminal / address bar). */
259
- readonly shell?: {
260
- showTerminal: boolean;
261
- showAddressBar: boolean;
262
- };
263
- readonly packageManager: "npm" | "pnpm" | "bun";
264
- readonly skipInstall: boolean;
265
- readonly force: boolean;
266
- }
267
- interface MaterializeResult {
268
- readonly scaffold: ScaffoldResult;
269
- readonly projectDir: string;
270
- readonly bundlePath: string | undefined;
271
- /** Absent under --skip-install (no node_modules → no first launch). */
272
- readonly firstLaunch?: {
273
- readonly pid: number;
274
- };
275
- }
276
- interface MaterializeContext {
277
- readonly log: (event: MaterializeLogEvent) => void;
278
- readonly generateIcon?: typeof generateOpenTrayAppIcon;
279
- readonly runInstall?: (options: RunInstallOptions) => Promise<void>;
280
- readonly firstLaunchEntry?: (projectDir: string) => Promise<FirstLaunchHandle> | FirstLaunchHandle;
281
- readonly platform?: NodeJS.Platform;
282
- readonly waitMs?: (ms: number) => Promise<void>;
283
- readonly bundleTimeoutMs?: number;
284
- }
285
- interface RunInstallOptions {
286
- readonly projectDir: string;
287
- readonly packageManager: "npm" | "pnpm" | "bun";
288
- readonly log: (message: string) => void;
289
- }
290
- interface FirstLaunchHandle {
291
- readonly pid: number;
292
- /** Resolves when the entry prints its ready marker; rejects on early exit. */
293
- readonly ready: Promise<void>;
294
- }
295
- /** True when the directory exists and contains anything beyond ignorable files. */
296
- declare const isDirectoryOccupied: (dir: string) => Promise<boolean>;
297
- /** Detect package manager from lockfiles then npm_config_user_agent. */
298
- declare const detectPackageManager: (files: readonly string[], userAgent: string | undefined) => "npm" | "pnpm" | "bun";
299
- /** Expected stable Darwin bundle path for the generated project's identity. */
300
- declare const expectedDarwinBundlePath: (config: {
301
- appName: string;
302
- appId: string;
303
- }) => string;
304
- declare const materialize: (input: MaterializeInput, context: MaterializeContext) => Promise<MaterializeResult>;
305
- //#endregion
306
5
  //#region src/wizard.d.ts
307
6
  interface WizardEnvEntry {
308
7
  readonly key: string;
@@ -348,6 +47,10 @@ interface WizardFormValues {
348
47
  readonly showStartupTerminal: boolean;
349
48
  /** Advanced: address-bar service tabs in the generated app (default false). */
350
49
  readonly showAddressBar: boolean;
50
+ /** Advanced v1 sampling intent: false keeps pixel-art edges (default true). */
51
+ readonly imageSmoothingEnabled: boolean;
52
+ /** Advanced v1 developer mode: only WebView DevTools admission (default false). */
53
+ readonly developerMode: boolean;
351
54
  }
352
55
  /** Placeholder suggestions shown in the form; empty fields resolve to these. */
353
56
  interface WizardFormDefaults {
@@ -387,7 +90,7 @@ type WizardEvent = {
387
90
  readonly defaultCwd: string;
388
91
  } | {
389
92
  readonly type: "services";
390
- readonly services: readonly DiscoveredService[];
93
+ readonly services: readonly DiscoveredService$1[];
391
94
  readonly selectedPort: number | undefined;
392
95
  } | {
393
96
  readonly type: "scrape";
@@ -415,6 +118,20 @@ type WizardEvent = {
415
118
  readonly projectDir: string;
416
119
  readonly bundlePath?: string;
417
120
  readonly pinHint: string;
121
+ } /** Authoritative whole-session state; sent to every NEW SSE client first. */ | {
122
+ readonly type: "snapshot";
123
+ readonly state: WizardState;
124
+ readonly runAlive: boolean;
125
+ readonly command: string;
126
+ readonly commandOptions: WizardCommandOptions;
127
+ readonly form: WizardFormValues;
128
+ readonly defaults: WizardFormDefaults;
129
+ readonly targetDirExists: boolean;
130
+ readonly services: readonly DiscoveredService$1[];
131
+ readonly selectedPort?: number | undefined;
132
+ readonly iconCandidates: readonly ScrapedIcon[];
133
+ readonly iconsPort?: number | undefined;
134
+ readonly interactive: boolean;
418
135
  };
419
136
  interface WizardOptions {
420
137
  readonly cwd: string;
@@ -435,18 +152,18 @@ interface WizardOptions {
435
152
  readonly listListeners?: () => Promise<ReadonlySet<number>>;
436
153
  readonly verifyHttp?: (port: number) => Promise<boolean>;
437
154
  /** Test/embedding seam for listener ownership. */
438
- readonly listPortOwners?: () => Promise<ListenerOwners>;
439
- readonly scrape?: typeof scrapeService;
440
- readonly resolveVector?: typeof resolveLaunchVector;
155
+ readonly listPortOwners?: () => Promise<import("@create-opentray/core").ListenerOwners>;
156
+ readonly scrape?: typeof scrapeService$1;
157
+ readonly resolveVector?: typeof resolveLaunchVector$1;
441
158
  /** Test/embedding seam for the materialize pipeline. */
442
- readonly materializeContext?: Partial<MaterializeContext>;
159
+ readonly materializeContext?: Partial<MaterializeContext$1>;
443
160
  readonly platform?: NodeJS.Platform;
444
161
  readonly pollIntervalMs?: number;
445
162
  readonly scrapeIntervalMs?: number;
446
163
  }
447
164
  interface WizardSession {
448
165
  readonly state: WizardState;
449
- readonly services: readonly DiscoveredService[];
166
+ readonly services: readonly DiscoveredService$1[];
450
167
  readonly selectedPort: number | undefined;
451
168
  /** True while the preview process is alive (Run button shows Interrupt). */
452
169
  readonly runAlive: boolean;
@@ -477,7 +194,9 @@ interface WizardSession {
477
194
  /** Auto-suggestion for the foreground (background + reason). */
478
195
  analyzeIconForeground(foregroundPath: string): Promise<WizardIconAnalysis>;
479
196
  readonly form: WizardFormValues;
480
- readonly result: MaterializeResult | undefined;
197
+ readonly result: MaterializeResult$1 | undefined;
198
+ /** Whole-session state for reconnecting clients (page refresh recovery). */
199
+ snapshot(): WizardEvent;
481
200
  /** String form is tokenized; array form is taken as argv verbatim (array
482
201
  * input mode — no string splitting is ever applied to it). */
483
202
  submitCommand(command: string | readonly string[]): Promise<void>;
@@ -493,9 +212,42 @@ interface WizardSession {
493
212
  rows: number;
494
213
  }): void;
495
214
  confirm(): void;
215
+ /** Abort a frozen confirmation and return to the editable pre-freeze state. */
216
+ cancel(): void;
217
+ /**
218
+ * Share the FROZEN parameters (wizard-share-and-list-scan D3): build an
219
+ * export artifact from the confirmation state WITHOUT running the command
220
+ * or materializing anything. Works pre-create. Scraped web icons keep
221
+ * their http source URL plus the icon-generation flags by default;
222
+ * `inlineIcon` opts into embedding the bytes instead.
223
+ */
224
+ exportFrozen(options: {
225
+ readonly format: "command" | "sh" | "ps1";
226
+ readonly acknowledgeEnv?: boolean;
227
+ readonly forceCopy?: boolean; /** true=内嵌字节;false=按引用分享(URL/本地路径);缺省=按来源默认。 */
228
+ readonly inlineIcon?: boolean;
229
+ }): Promise<WizardExportResult>;
496
230
  create(): Promise<void>;
497
231
  stop(): Promise<void>;
498
232
  }
233
+ type WizardExportResult = {
234
+ readonly ok: true;
235
+ readonly kind: "command";
236
+ readonly command: string;
237
+ } | {
238
+ readonly ok: true;
239
+ readonly kind: "script";
240
+ readonly filename: string;
241
+ readonly content: string; /** 核心调用行(不含注释/脚手架),复制命令用。 */
242
+ readonly commandLine: string;
243
+ readonly requiresEnvAcknowledgement: boolean; /** How the app icon actually traveled in this artifact. */
244
+ readonly iconSharedAs: "url" | "embedded" | "local" | "none"; /** What the icon source CAN be shared as: url / local path / none. */
245
+ readonly iconReference: "url" | "local" | "none";
246
+ } | {
247
+ readonly ok: false;
248
+ readonly code: "state_error" | "resolve_failed" | "env_ack_required" | "export_unsafe";
249
+ readonly message: string;
250
+ };
499
251
  declare const createWizardSession: (options: WizardOptions) => WizardSession;
500
252
  //#endregion
501
253
  //#region src/server.d.ts
@@ -512,46 +264,5 @@ declare const createWizardServer: (createSession: (emit: (event: WizardEvent) =>
512
264
  declare const isAuthorized: (request: IncomingMessage, url: URL, token: string) => boolean;
513
265
  declare const isLoopbackHost: (request: IncomingMessage) => boolean;
514
266
  //#endregion
515
- //#region src/tokenize.d.ts
516
- interface TokenizeResult {
517
- readonly ok: boolean;
518
- readonly tokens: readonly string[];
519
- readonly error: string | undefined;
520
- }
521
- /**
522
- * Shell-style tokenizer for the wizard command input. Supports single quotes,
523
- * double quotes, and backslash escapes outside quotes. It never executes
524
- * anything; it only produces the argv that will be spawned.
525
- */
526
- declare const tokenizeCommandLine: (input: string) => TokenizeResult;
527
- //#endregion
528
- //#region src/app-id.d.ts
529
- /**
530
- * Default appId derivation. `npx somecommand start --xx` keeps the pre-option
531
- * tokens `["npx", "somecommand", "start"]`, reverses them, and dot-joins:
532
- * `start.somecommand.npx`.
533
- */
534
- declare const deriveDefaultAppId: (tokens: readonly string[]) => string;
535
- /** Human display name from the appId derivation: `Somecommand Start`. */
536
- declare const deriveDefaultAppName: (tokens: readonly string[]) => string;
537
- /** Directory-safe project name from an appId (mirrors packaging normalizeAppId semantics). */
538
- declare const toProjectDirectoryName: (appId: string) => string;
539
- /** True when the appId has the shape consumers expect for stable identity. */
540
- declare const isValidAppId: (appId: string) => boolean;
541
- //#endregion
542
- //#region src/open-app.d.ts
543
- interface OpenAppInput {
544
- readonly projectDir: string;
545
- readonly bundlePath: string | undefined;
546
- readonly platform?: NodeJS.Platform | undefined;
547
- }
548
- interface OpenAppResult {
549
- readonly ok: boolean;
550
- readonly detail: string;
551
- }
552
- declare const openMaterializedApp: (input: OpenAppInput) => Promise<OpenAppResult>;
553
- /** Platform-truthful pinning hint; makes no Windows persistence claim. */
554
- declare const pinningHint: (platform?: NodeJS.Platform) => string;
555
- //#endregion
556
267
  export { type DiscoveredService, type FaviconCandidate, type LaunchVector, type MaterializeContext, type MaterializeInput, type MaterializeLogEvent, type MaterializeResult, type ScaffoldAppConfig, type ScaffoldOptions, type ScaffoldResult, type ScrapeResult, type TokenizeResult, type WizardCliOptions, type WizardEvent, type WizardFormValues, type WizardServerHandle, type WizardSession, type WizardState, createPortDiscovery, createWizardServer, createWizardSession, deriveDefaultAppId, deriveDefaultAppName, detectPackageManager, expectedDarwinBundlePath, extractFaviconCandidates, extractTitle, faviconCandidateSize, isAuthorized, isDirectoryOccupied, isLoopbackHost, isValidAppId, materialize, openMaterializedApp, parseLsofPorts, parseNetstatPorts, parsePowerShellPorts, parseShebangInterpreter, parseWizardCli, pinningHint, rankFaviconCandidates, resolveFaviconUrl, resolveLaunchVector, resolveOnPath, main as runWizardMain, scrapeService, serviceUrl, toProjectDirectoryName, tokenizeCommandLine, verifyHttpService, waitForTcpPort, writeScaffold };
557
268
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/port-scan.ts","../src/command-run.ts","../src/scrape.ts","../src/icon-compose.ts","../src/launch-vector.ts","../src/scaffold.ts","../src/materialize.ts","../src/wizard.ts","../src/server.ts","../src/tokenize.ts","../src/app-id.ts","../src/open-app.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/wizard.ts","../src/server.ts"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,2 +1,3 @@
1
- import { A as verifyHttpService, C as resolveFaviconUrl, D as parseNetstatPorts, E as parseLsofPorts, F as toProjectDirectoryName, M as deriveDefaultAppId, N as deriveDefaultAppName, O as parsePowerShellPorts, P as isValidAppId, S as rankFaviconCandidates, T as createPortDiscovery, _ as writeScaffold, a as isAuthorized, b as extractTitle, c as openMaterializedApp, d as resolveLaunchVector, f as resolveOnPath, g as materialize, h as isDirectoryOccupied, i as createWizardServer, j as waitForTcpPort, k as serviceUrl, l as pinningHint, m as expectedDarwinBundlePath, o as isLoopbackHost, p as detectPackageManager, r as parseWizardCli, s as createWizardSession, t as main, u as parseShebangInterpreter, v as tokenizeCommandLine, w as scrapeService, x as faviconCandidateSize, y as extractFaviconCandidates } from "./bin-BT_kcLuP.mjs";
1
+ import { a as isAuthorized, i as createWizardServer, o as isLoopbackHost, r as parseWizardCli, s as createWizardSession, t as main } from "./bin-sZB5nWq0.mjs";
2
+ import { createPortDiscovery, deriveDefaultAppId, deriveDefaultAppName, detectPackageManager, expectedDarwinBundlePath, extractFaviconCandidates, extractTitle, faviconCandidateSize, isDirectoryOccupied, isValidAppId, materialize, openMaterializedApp, parseLsofPorts, parseNetstatPorts, parsePowerShellPorts, parseShebangInterpreter, pinningHint, rankFaviconCandidates, resolveFaviconUrl, resolveLaunchVector, resolveOnPath, scrapeService, serviceUrl, toProjectDirectoryName, tokenizeCommandLine, verifyHttpService, waitForTcpPort, writeScaffold } from "@create-opentray/core";
2
3
  export { createPortDiscovery, createWizardServer, createWizardSession, deriveDefaultAppId, deriveDefaultAppName, detectPackageManager, expectedDarwinBundlePath, extractFaviconCandidates, extractTitle, faviconCandidateSize, isAuthorized, isDirectoryOccupied, isLoopbackHost, isValidAppId, materialize, openMaterializedApp, parseLsofPorts, parseNetstatPorts, parsePowerShellPorts, parseShebangInterpreter, parseWizardCli, pinningHint, rankFaviconCandidates, resolveFaviconUrl, resolveLaunchVector, resolveOnPath, main as runWizardMain, scrapeService, serviceUrl, toProjectDirectoryName, tokenizeCommandLine, verifyHttpService, waitForTcpPort, writeScaffold };
@@ -1 +1 @@
1
- import{r as a,j as r,R as L,a as C}from"./index.js";import{B as m,A as N,a as U,R as z,G as B,I}from"./input.js";const A=()=>typeof window<"u"&&"navigation"in window?window.navigation:void 0,v=c=>{const s=c.trim();if(s.length!==0)try{return new URL(/^https?:\/\//iu.test(s)?s:`http://${s}`).href}catch{return}},T=c=>`${location.pathname}?url=${encodeURIComponent(c)}`,D=()=>{const c=new URLSearchParams(location.search).get("url");return v(c??"")??"about:blank"};function P(){const c=a.useRef(D()),[s,x]=a.useState(c.current),[g,b]=a.useState(c.current),o=a.useRef([c.current]),t=a.useRef(0),i=a.useRef(A()),h=a.useRef(null),[$,y]=a.useState(0),d=a.useCallback(e=>{b(e),x(e)},[]);a.useEffect(()=>{const e=i.current;if(e===void 0)return;const n=u=>{!u.canIntercept||u.hashChange||u.intercept({handler:()=>{const p=new URLSearchParams(new URL(u.destination.url).search).get("url");if(p===null)return;const w=v(p);w!==void 0&&d(w)}})},l=()=>y(u=>u+1);return e.addEventListener("navigate",n),e.addEventListener("currententrychange",l),()=>{e.removeEventListener("navigate",n),e.removeEventListener("currententrychange",l)}},[]);const R=e=>{const n=i.current;if(n!==void 0)try{n.navigate(T(e));return}catch{}o.current=[...o.current.slice(0,t.current+1),e],t.current=o.current.length-1,d(e)},j=()=>{const e=i.current;if(e!==void 0&&e.currentEntry!==null&&e.currentEntry.index>0){const n=e.entries()[e.currentEntry.index-1];if(n!==void 0)try{e.traverseTo(n.key);return}catch{}}t.current>0&&(t.current-=1,d(o.current[t.current]))},E=()=>{const e=i.current;if(e!==void 0&&e.currentEntry!==null){const l=e.entries()[e.currentEntry.index+1];if(l!==void 0)try{e.traverseTo(l.key);return}catch{}}t.current<o.current.length-1&&(t.current+=1,d(o.current[t.current]))},f=i.current?.currentEntry??null,k=f!==null?f.index>0:t.current>0,S=f!==null?f.index<(i.current?.entries().length??1)-1:t.current<o.current.length-1;return r.jsxs("div",{className:"flex h-screen flex-col overflow-hidden",children:[r.jsxs("div",{className:"flex h-11 shrink-0 items-center gap-2 border-b border-border bg-card px-3",children:[r.jsx(m,{variant:"ghost",size:"iconSm",disabled:!k,onClick:j,"aria-label":"后退",children:r.jsx(N,{})}),r.jsx(m,{variant:"ghost",size:"iconSm",disabled:!S,onClick:E,"aria-label":"前进",children:r.jsx(U,{})}),r.jsx(m,{variant:"ghost",size:"iconSm",onClick:()=>{h.current!==null&&(h.current.src=g)},"aria-label":"重新加载",children:r.jsx(z,{})}),r.jsx(B,{className:"size-4 shrink-0 text-muted-foreground"}),r.jsx(I,{className:"h-7 font-mono text-xs",value:s,placeholder:"输入 URL 跳转",onChange:e=>x(e.target.value),onKeyDown:e=>{if(e.key!=="Enter")return;const n=v(s);n!==void 0&&R(n)}})]}),r.jsx("iframe",{ref:h,title:"service",src:g,className:"min-h-0 flex-1 border-0 bg-white",sandbox:"allow-same-origin allow-scripts allow-forms"})]})}L.createRoot(document.getElementById("root")).render(r.jsx(C.StrictMode,{children:r.jsx(P,{})}));
1
+ import{r as a,j as r,R as C,a as S}from"./index.js";import{B as m,A as N,a as U,R as z,G as B,I}from"./input.js";const A=()=>typeof window<"u"&&"navigation"in window?window.navigation:void 0,v=s=>{const c=s.trim();if(c.length!==0)try{return new URL(/^https?:\/\//iu.test(c)?c:`http://${c}`).href}catch{return}},T=s=>`${location.pathname}?url=${encodeURIComponent(s)}`,D=()=>{const s=new URLSearchParams(location.search).get("url");return v(s??"")??"about:blank"};function P(){const s=a.useRef(D()),[c,x]=a.useState(s.current),[g,b]=a.useState(s.current),o=a.useRef([s.current]),t=a.useRef(0),i=a.useRef(A()),h=a.useRef(null),[$,y]=a.useState(0),d=a.useCallback(e=>{b(e),x(e)},[]);a.useEffect(()=>{const e=i.current;if(e===void 0)return;const n=u=>{!u.canIntercept||u.hashChange||u.intercept({handler:()=>{const p=new URLSearchParams(new URL(u.destination.url).search).get("url");if(p===null)return;const w=v(p);w!==void 0&&d(w)}})},l=()=>y(u=>u+1);return e.addEventListener("navigate",n),e.addEventListener("currententrychange",l),()=>{e.removeEventListener("navigate",n),e.removeEventListener("currententrychange",l)}},[]);const R=e=>{const n=i.current;if(n!==void 0)try{n.navigate(T(e));return}catch{}o.current=[...o.current.slice(0,t.current+1),e],t.current=o.current.length-1,d(e)},j=()=>{const e=i.current;if(e!==void 0&&e.currentEntry!==null&&e.currentEntry.index>0){const n=e.entries()[e.currentEntry.index-1];if(n!==void 0)try{e.traverseTo(n.key);return}catch{}}t.current>0&&(t.current-=1,d(o.current[t.current]))},E=()=>{const e=i.current;if(e!==void 0&&e.currentEntry!==null){const l=e.entries()[e.currentEntry.index+1];if(l!==void 0)try{e.traverseTo(l.key);return}catch{}}t.current<o.current.length-1&&(t.current+=1,d(o.current[t.current]))},f=i.current?.currentEntry??null,k=f!==null?f.index>0:t.current>0,L=f!==null?f.index<(i.current?.entries().length??1)-1:t.current<o.current.length-1;return r.jsxs("div",{className:"flex h-screen flex-col overflow-hidden",children:[r.jsxs("div",{className:"flex h-11 shrink-0 items-center gap-2 border-b border-border bg-card px-3",children:[r.jsx(m,{variant:"ghost",size:"icon-sm",disabled:!k,onClick:j,"aria-label":"后退",children:r.jsx(N,{})}),r.jsx(m,{variant:"ghost",size:"icon-sm",disabled:!L,onClick:E,"aria-label":"前进",children:r.jsx(U,{})}),r.jsx(m,{variant:"ghost",size:"icon-sm",onClick:()=>{h.current!==null&&(h.current.src=g)},"aria-label":"重新加载",children:r.jsx(z,{})}),r.jsx(B,{className:"size-4 shrink-0 text-muted-foreground"}),r.jsx(I,{className:"h-7 font-mono text-xs",value:c,placeholder:"输入 URL 跳转",onChange:e=>x(e.target.value),onKeyDown:e=>{if(e.key!=="Enter")return;const n=v(c);n!==void 0&&R(n)}})]}),r.jsx("iframe",{ref:h,title:"service",src:g,className:"min-h-0 flex-1 border-0 bg-white",sandbox:"allow-same-origin allow-scripts allow-forms"})]})}C.createRoot(document.getElementById("root")).render(r.jsx(S.StrictMode,{children:r.jsx(P,{})}));