@tilt-launcher/sdk 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +105 -0
- package/dist/bridge.d.ts +43 -0
- package/dist/bridge.js +0 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +771 -0
- package/dist/tiltManagerSDK.d.ts +102 -0
- package/dist/tiltManagerSDK.js +771 -0
- package/dist/types.d.ts +159 -0
- package/dist/types.js +0 -0
- package/package.json +42 -0
- package/src/bridge.ts +45 -0
- package/src/index.ts +3 -0
- package/src/tiltManagerSDK.ts +924 -0
- package/src/types.ts +171 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
export type ResourceKind = 'serve' | 'cmd' | 'unknown';
|
|
2
|
+
export interface CachedResource {
|
|
3
|
+
name: string;
|
|
4
|
+
label: string;
|
|
5
|
+
category?: string | undefined;
|
|
6
|
+
type?: string | undefined;
|
|
7
|
+
endpoint?: string | undefined;
|
|
8
|
+
port?: number | undefined;
|
|
9
|
+
path?: string | undefined;
|
|
10
|
+
runtimeStatus?: string | undefined;
|
|
11
|
+
isDisabled?: boolean | undefined;
|
|
12
|
+
resourceKind?: ResourceKind | undefined;
|
|
13
|
+
updateStatus?: string | undefined;
|
|
14
|
+
waitingReason?: string | undefined;
|
|
15
|
+
waitingOn?: string[] | undefined;
|
|
16
|
+
lastDeployTime?: string | undefined;
|
|
17
|
+
lastBuildDuration?: number | undefined;
|
|
18
|
+
lastBuildError?: string | undefined;
|
|
19
|
+
hasPendingChanges?: boolean | undefined;
|
|
20
|
+
triggerMode?: number | undefined;
|
|
21
|
+
queued?: boolean | undefined;
|
|
22
|
+
order?: number | undefined;
|
|
23
|
+
pid?: number | undefined;
|
|
24
|
+
conditions?: Array<{
|
|
25
|
+
type: string;
|
|
26
|
+
status: string;
|
|
27
|
+
lastTransitionTime?: string;
|
|
28
|
+
}> | undefined;
|
|
29
|
+
}
|
|
30
|
+
export interface ServiceGroup {
|
|
31
|
+
id: string;
|
|
32
|
+
label: string;
|
|
33
|
+
resourceNames: string[];
|
|
34
|
+
}
|
|
35
|
+
export interface SubServiceMapping {
|
|
36
|
+
parentName: string;
|
|
37
|
+
childName: string;
|
|
38
|
+
}
|
|
39
|
+
export interface ServiceMapping {
|
|
40
|
+
groups: ServiceGroup[];
|
|
41
|
+
subServices: SubServiceMapping[];
|
|
42
|
+
labelOverrides: Record<string, string>;
|
|
43
|
+
resourceOrder: string[];
|
|
44
|
+
hiddenResources: string[];
|
|
45
|
+
}
|
|
46
|
+
export interface Environment {
|
|
47
|
+
id: string;
|
|
48
|
+
name: string;
|
|
49
|
+
/** True when this environment is an externally-managed Tilt process (port-only). */
|
|
50
|
+
external?: boolean | undefined;
|
|
51
|
+
repoDir: string;
|
|
52
|
+
tiltfile: string;
|
|
53
|
+
tiltPort: number;
|
|
54
|
+
description?: string | undefined;
|
|
55
|
+
isSymlink?: boolean | undefined;
|
|
56
|
+
selectedResources?: string[] | undefined;
|
|
57
|
+
cachedResources?: CachedResource[] | undefined;
|
|
58
|
+
serviceMapping?: ServiceMapping | undefined;
|
|
59
|
+
}
|
|
60
|
+
export interface PickedTiltfile {
|
|
61
|
+
path: string;
|
|
62
|
+
isSymlink: boolean;
|
|
63
|
+
/** Resolved real path (absolute) when isSymlink is true */
|
|
64
|
+
realPath?: string | undefined;
|
|
65
|
+
}
|
|
66
|
+
export interface Config {
|
|
67
|
+
themeMode?: 'dark' | 'light' | 'system' | undefined;
|
|
68
|
+
environments: Environment[];
|
|
69
|
+
}
|
|
70
|
+
export interface EnvStatus {
|
|
71
|
+
status: 'stopped' | 'starting' | 'running';
|
|
72
|
+
logs: string[];
|
|
73
|
+
resourceLogs?: Record<string, string[]> | undefined;
|
|
74
|
+
tiltPort: number;
|
|
75
|
+
uptime: number | null;
|
|
76
|
+
newResources?: number | undefined;
|
|
77
|
+
resources?: ResourceRow[] | undefined;
|
|
78
|
+
}
|
|
79
|
+
export type HealthStatus = 'up' | 'down' | 'unknown' | 'missing';
|
|
80
|
+
export interface ResourceRow {
|
|
81
|
+
key: string;
|
|
82
|
+
name: string;
|
|
83
|
+
label: string;
|
|
84
|
+
category: string;
|
|
85
|
+
endpoint?: string | undefined;
|
|
86
|
+
port?: number | undefined;
|
|
87
|
+
path?: string | undefined;
|
|
88
|
+
runtimeStatus: string;
|
|
89
|
+
isDisabled: boolean;
|
|
90
|
+
health: HealthStatus;
|
|
91
|
+
exists: boolean;
|
|
92
|
+
error?: string | undefined;
|
|
93
|
+
resourceKind: ResourceKind;
|
|
94
|
+
updateStatus?: string | undefined;
|
|
95
|
+
waitingReason?: string | undefined;
|
|
96
|
+
waitingOn?: string[] | undefined;
|
|
97
|
+
lastDeployTime?: string | undefined;
|
|
98
|
+
lastBuildDuration?: number | undefined;
|
|
99
|
+
lastBuildError?: string | undefined;
|
|
100
|
+
hasPendingChanges?: boolean | undefined;
|
|
101
|
+
triggerMode?: number | undefined;
|
|
102
|
+
queued?: boolean | undefined;
|
|
103
|
+
order?: number | undefined;
|
|
104
|
+
pid?: number | undefined;
|
|
105
|
+
conditions?: Array<{
|
|
106
|
+
type: string;
|
|
107
|
+
status: string;
|
|
108
|
+
lastTransitionTime?: string;
|
|
109
|
+
}> | undefined;
|
|
110
|
+
}
|
|
111
|
+
/** Log-free status for a single environment (used in delta IPC) */
|
|
112
|
+
export interface EnvStatusUpdate {
|
|
113
|
+
status: 'stopped' | 'starting' | 'running';
|
|
114
|
+
tiltPort: number;
|
|
115
|
+
uptime: number | null;
|
|
116
|
+
newResources?: number | undefined;
|
|
117
|
+
resources?: ResourceRow[] | undefined;
|
|
118
|
+
}
|
|
119
|
+
/** Status push — resources + env state, NO logs */
|
|
120
|
+
export interface StatusUpdate {
|
|
121
|
+
envs: Record<string, EnvStatusUpdate>;
|
|
122
|
+
}
|
|
123
|
+
/** Incremental log append — only new lines since last push */
|
|
124
|
+
export interface LogDelta {
|
|
125
|
+
/** New launcher log lines per env (envId → lines) */
|
|
126
|
+
envLogs: Record<string, string[]>;
|
|
127
|
+
/** New resource log lines ("envId:resourceName" → lines) */
|
|
128
|
+
resourceLogs: Record<string, string[]>;
|
|
129
|
+
}
|
|
130
|
+
/** @deprecated Use StatusUpdate for push updates. Kept for initial full-fetch. */
|
|
131
|
+
export interface StatusResponse {
|
|
132
|
+
envs: Record<string, EnvStatus>;
|
|
133
|
+
health?: Record<string, HealthStatus>;
|
|
134
|
+
}
|
|
135
|
+
export interface DiscoverResult {
|
|
136
|
+
ok: boolean;
|
|
137
|
+
resources: CachedResource[];
|
|
138
|
+
logs: string[];
|
|
139
|
+
error?: string;
|
|
140
|
+
}
|
|
141
|
+
export interface LoginItemSettings {
|
|
142
|
+
openAtLogin: boolean;
|
|
143
|
+
}
|
|
144
|
+
export interface DirEntry {
|
|
145
|
+
name: string;
|
|
146
|
+
isDirectory: boolean;
|
|
147
|
+
isFile: boolean;
|
|
148
|
+
isSymlink: boolean;
|
|
149
|
+
/** Raw link target as returned by readlink (may be relative) */
|
|
150
|
+
symlinkTarget?: string | undefined;
|
|
151
|
+
/** Absolute resolved path when isSymlink is true */
|
|
152
|
+
realPath?: string | undefined;
|
|
153
|
+
}
|
|
154
|
+
export interface ReadDirResult {
|
|
155
|
+
ok: boolean;
|
|
156
|
+
path: string;
|
|
157
|
+
entries: DirEntry[];
|
|
158
|
+
error?: string | undefined;
|
|
159
|
+
}
|
package/dist/types.js
ADDED
|
File without changes
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tilt-launcher/sdk",
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"description": "SDK for managing Tilt dev environments — start, stop, monitor, and control resources",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"bun": "./src/index.ts",
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"src",
|
|
17
|
+
"dist",
|
|
18
|
+
"LICENSE",
|
|
19
|
+
"README.md"
|
|
20
|
+
],
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "bun build src/index.ts src/types.ts src/bridge.ts src/tiltManagerSDK.ts --outdir dist --target node && tsc -p tsconfig.build.json",
|
|
23
|
+
"check": "tsc --noEmit -p tsconfig.json",
|
|
24
|
+
"prepublishOnly": "bun run check && bun run build"
|
|
25
|
+
},
|
|
26
|
+
"keywords": [
|
|
27
|
+
"tilt",
|
|
28
|
+
"tiltfile",
|
|
29
|
+
"devtools",
|
|
30
|
+
"sdk",
|
|
31
|
+
"launcher"
|
|
32
|
+
],
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "https://github.com/m4ttheweric/tilt-launcher",
|
|
37
|
+
"directory": "packages/sdk"
|
|
38
|
+
},
|
|
39
|
+
"engines": {
|
|
40
|
+
"node": ">=18"
|
|
41
|
+
}
|
|
42
|
+
}
|
package/src/bridge.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
Config,
|
|
3
|
+
DiscoverResult,
|
|
4
|
+
LoginItemSettings,
|
|
5
|
+
LogDelta,
|
|
6
|
+
PickedTiltfile,
|
|
7
|
+
ReadDirResult,
|
|
8
|
+
StatusUpdate,
|
|
9
|
+
} from './types.ts';
|
|
10
|
+
|
|
11
|
+
type Result = { ok: boolean; error?: string };
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Abstract bridge interface between the UI and the host shell.
|
|
15
|
+
*
|
|
16
|
+
* Each shell (Electron, Tauri, etc.) provides its own implementation.
|
|
17
|
+
* The UI layer consumes this interface exclusively — it never imports
|
|
18
|
+
* from Electron, Tauri, or any other shell-specific API directly.
|
|
19
|
+
*/
|
|
20
|
+
export interface LauncherBridge {
|
|
21
|
+
// ── Request / Response commands ─────────────────────────────────────
|
|
22
|
+
getConfig(): Promise<Config>;
|
|
23
|
+
getStatus(): Promise<StatusUpdate>;
|
|
24
|
+
getLogs(envId: string): Promise<{ envLogs: string[]; resourceLogs: Record<string, string[]> }>;
|
|
25
|
+
startEnv(envId: string): Promise<Result>;
|
|
26
|
+
stopEnv(envId: string): Promise<Result>;
|
|
27
|
+
restartEnv(envId: string): Promise<Result>;
|
|
28
|
+
triggerResource(envId: string, resourceName: string): Promise<Result>;
|
|
29
|
+
enableResource(envId: string, resourceName: string): Promise<Result>;
|
|
30
|
+
disableResource(envId: string, resourceName: string): Promise<Result>;
|
|
31
|
+
saveConfig(config: Config): Promise<Result>;
|
|
32
|
+
pickTiltfile(): Promise<PickedTiltfile | null>;
|
|
33
|
+
classifyTiltfilePath(filePath: string): Promise<PickedTiltfile>;
|
|
34
|
+
openExternal(url: string): Promise<void>;
|
|
35
|
+
getHomeDir(): Promise<string>;
|
|
36
|
+
readDir(dirPath: string): Promise<ReadDirResult>;
|
|
37
|
+
discoverResources(input: { tiltfilePath: string; tiltPort: number; timeoutMs?: number }): Promise<DiscoverResult>;
|
|
38
|
+
getLoginItemSettings(): Promise<LoginItemSettings>;
|
|
39
|
+
setLoginItemSettings(openAtLogin: boolean): Promise<Result>;
|
|
40
|
+
|
|
41
|
+
// ── Event subscriptions ─────────────────────────────────────────────
|
|
42
|
+
onStatusUpdate(listener: (update: StatusUpdate) => void): () => void;
|
|
43
|
+
onLogDelta(listener: (delta: LogDelta) => void): () => void;
|
|
44
|
+
onConfigUpdated(listener: (config: Config) => void): () => void;
|
|
45
|
+
}
|
package/src/index.ts
ADDED