buildless-cli 0.1.6

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 (42) hide show
  1. package/README.md +49 -0
  2. package/dist/app.d.ts +9 -0
  3. package/dist/app.d.ts.map +1 -0
  4. package/dist/app.js +67 -0
  5. package/dist/app.js.map +1 -0
  6. package/dist/auth.d.ts +14 -0
  7. package/dist/auth.d.ts.map +1 -0
  8. package/dist/auth.js +100 -0
  9. package/dist/auth.js.map +1 -0
  10. package/dist/config.d.ts +14 -0
  11. package/dist/config.d.ts.map +1 -0
  12. package/dist/config.js +45 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/firestore.d.ts +28 -0
  15. package/dist/firestore.d.ts.map +1 -0
  16. package/dist/firestore.js +340 -0
  17. package/dist/firestore.js.map +1 -0
  18. package/dist/index.d.ts +3 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +94 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/log.d.ts +3 -0
  23. package/dist/log.d.ts.map +1 -0
  24. package/dist/log.js +10 -0
  25. package/dist/log.js.map +1 -0
  26. package/dist/ui/app-search.d.ts +11 -0
  27. package/dist/ui/app-search.d.ts.map +1 -0
  28. package/dist/ui/app-search.js +83 -0
  29. package/dist/ui/app-search.js.map +1 -0
  30. package/dist/ui/runner.d.ts +12 -0
  31. package/dist/ui/runner.d.ts.map +1 -0
  32. package/dist/ui/runner.js +419 -0
  33. package/dist/ui/runner.js.map +1 -0
  34. package/dist/ui/useRunnerRenderSource.d.ts +53 -0
  35. package/dist/ui/useRunnerRenderSource.d.ts.map +1 -0
  36. package/dist/ui/useRunnerRenderSource.js +69 -0
  37. package/dist/ui/useRunnerRenderSource.js.map +1 -0
  38. package/dist/ui/useRunnerSession.d.ts +16 -0
  39. package/dist/ui/useRunnerSession.d.ts.map +1 -0
  40. package/dist/ui/useRunnerSession.js +188 -0
  41. package/dist/ui/useRunnerSession.js.map +1 -0
  42. package/package.json +41 -0
@@ -0,0 +1,188 @@
1
+ import { useEffect, useRef, useState } from "react";
2
+ import WebSocket from "ws";
3
+ import { log } from "../log.js";
4
+ const toWsBaseUrl = (httpBase) => {
5
+ if (httpBase.startsWith("https://"))
6
+ return `wss://${httpBase.slice("https://".length)}`;
7
+ if (httpBase.startsWith("http://"))
8
+ return `ws://${httpBase.slice("http://".length)}`;
9
+ return httpBase;
10
+ };
11
+ const getTerminalSize = () => {
12
+ const cols = Math.max(3, Math.min(300, Number(process.stdout.columns || 80)));
13
+ const rows = Math.max(3, Math.min(200, Number(process.stdout.rows || 24)));
14
+ return { rows, cols };
15
+ };
16
+ export const useRunnerSession = ({ projectId, versionId, terminalUrl, idToken }) => {
17
+ const [screen, setScreen] = useState(null);
18
+ const [error, setError] = useState(null);
19
+ const [connecting, setConnecting] = useState(true);
20
+ const [sessionId, setSessionId] = useState(null);
21
+ const wsRef = useRef(null);
22
+ const lastSentSizeRef = useRef("");
23
+ useEffect(() => {
24
+ let cancelled = false;
25
+ const run = async () => {
26
+ try {
27
+ setConnecting(true);
28
+ setError(null);
29
+ const sessionUrl = `${terminalUrl.replace(/\/+$/, "")}/api/sessions`;
30
+ log(`Creating session: POST ${sessionUrl}`);
31
+ log(` projectId=${projectId}, versionId=${versionId || "(latest)"}`);
32
+ const response = await fetch(sessionUrl, {
33
+ method: "POST",
34
+ headers: {
35
+ "Content-Type": "application/json",
36
+ Authorization: `Bearer ${idToken}`,
37
+ },
38
+ body: JSON.stringify({
39
+ projectId,
40
+ versionId,
41
+ runnerVersion: "cli-dev",
42
+ }),
43
+ });
44
+ if (!response.ok) {
45
+ const text = await response.text();
46
+ log(`Session create failed: ${response.status} ${text}`);
47
+ if (response.status === 401) {
48
+ throw new Error("Authentication failed. Try 'blo login' to re-authenticate.");
49
+ }
50
+ if (response.status === 403) {
51
+ throw new Error(`Access denied for project ${projectId}: ${text}`);
52
+ }
53
+ if (response.status === 429) {
54
+ throw new Error("Rate limited. Please wait a moment and try again.");
55
+ }
56
+ throw new Error(`Session create failed (${response.status}): ${text}`);
57
+ }
58
+ const body = (await response.json());
59
+ if (cancelled)
60
+ return;
61
+ // POST /api/sessions returns { bootstrap, screen }
62
+ const screenPayload = "screen" in body && body.screen && typeof body.screen === "object" && "sessionId" in body.screen
63
+ ? body.screen
64
+ : body;
65
+ const sid = screenPayload.sessionId
66
+ || ("bootstrap" in body ? body.bootstrap?.sessionId : undefined)
67
+ || "";
68
+ if (!sid) {
69
+ log(`WARNING: No sessionId in response. Response keys: ${Object.keys(body).join(", ")}`);
70
+ throw new Error("Server returned no session ID. The server may be running an incompatible version.");
71
+ }
72
+ log(`Session created: sessionId=${sid}`);
73
+ log(` screen=${screenPayload.screen}, lines=${screenPayload.lines?.length || 0}`);
74
+ setScreen(screenPayload);
75
+ setSessionId(sid);
76
+ const wsBase = toWsBaseUrl(terminalUrl.replace(/\/+$/, ""));
77
+ const wsUrl = `${wsBase}/ws?sessionId=${encodeURIComponent(sid)}`;
78
+ log(`Connecting WebSocket: ${wsUrl}`);
79
+ const ws = new WebSocket(wsUrl);
80
+ wsRef.current = ws;
81
+ ws.onopen = () => {
82
+ log("WebSocket connected");
83
+ ws.send(JSON.stringify({ type: "init" }));
84
+ const size = getTerminalSize();
85
+ const sizeKey = `${size.rows}x${size.cols}`;
86
+ lastSentSizeRef.current = sizeKey;
87
+ log(`Sending resize: ${size.cols}x${size.rows}`);
88
+ ws.send(JSON.stringify({
89
+ type: "resize",
90
+ rows: size.rows,
91
+ cols: size.cols,
92
+ }));
93
+ setConnecting(false);
94
+ };
95
+ ws.onmessage = (event) => {
96
+ try {
97
+ const data = JSON.parse(String(event.data));
98
+ if (data.type === "screen") {
99
+ log(`Screen update: screen=${data.screen}, lines=${data.lines?.length || 0}`);
100
+ setScreen(data);
101
+ return;
102
+ }
103
+ if (data.type === "error") {
104
+ log(`Server error: ${data.message}`);
105
+ setError(data.message);
106
+ }
107
+ }
108
+ catch (err) {
109
+ log(`Failed to parse server message: ${err}`);
110
+ setError(err instanceof Error ? err.message : String(err));
111
+ }
112
+ };
113
+ ws.onclose = (event) => {
114
+ const code = event.code;
115
+ const reason = event.reason || "(no reason)";
116
+ log(`WebSocket closed: code=${code}, reason=${reason}`);
117
+ if (!cancelled) {
118
+ if (code === 1008) {
119
+ setError(`Session rejected by server: ${reason}`);
120
+ }
121
+ else if (code === 1006) {
122
+ setError("Lost connection to server. Check if the terminal server is running.");
123
+ }
124
+ else {
125
+ setError(`Connection closed (code ${code}).`);
126
+ }
127
+ }
128
+ };
129
+ ws.onerror = (event) => {
130
+ log(`WebSocket error: ${event.message || "unknown"}`);
131
+ if (!cancelled) {
132
+ setError(`Connection error: ${event.message || "Failed to connect to terminal server."}`);
133
+ }
134
+ };
135
+ }
136
+ catch (err) {
137
+ if (!cancelled) {
138
+ log(`Runner error: ${err}`);
139
+ setError(err instanceof Error ? err.message : String(err));
140
+ }
141
+ }
142
+ };
143
+ void run();
144
+ return () => {
145
+ cancelled = true;
146
+ wsRef.current?.close();
147
+ wsRef.current = null;
148
+ };
149
+ }, [projectId, versionId, terminalUrl, idToken]);
150
+ useEffect(() => {
151
+ if (!sessionId || !process.stdout.isTTY)
152
+ return;
153
+ const onTerminalResize = () => {
154
+ const ws = wsRef.current;
155
+ if (!ws || ws.readyState !== WebSocket.OPEN)
156
+ return;
157
+ const size = getTerminalSize();
158
+ const sizeKey = `${size.rows}x${size.cols}`;
159
+ if (lastSentSizeRef.current === sizeKey)
160
+ return;
161
+ lastSentSizeRef.current = sizeKey;
162
+ log(`Terminal resized: ${size.cols}x${size.rows}`);
163
+ ws.send(JSON.stringify({
164
+ type: "resize",
165
+ rows: size.rows,
166
+ cols: size.cols,
167
+ }));
168
+ };
169
+ process.stdout.on("resize", onTerminalResize);
170
+ return () => {
171
+ process.stdout.off("resize", onTerminalResize);
172
+ };
173
+ }, [sessionId]);
174
+ const sendMessage = (message) => {
175
+ const ws = wsRef.current;
176
+ if (!ws || ws.readyState !== WebSocket.OPEN) {
177
+ log(`Cannot send message (ws ${ws ? `state=${ws.readyState}` : "null"}): ${JSON.stringify(message)}`);
178
+ if (ws && ws.readyState >= WebSocket.CLOSING) {
179
+ setError("Connection lost. Press x to return to apps.");
180
+ }
181
+ return;
182
+ }
183
+ log(`Sending: ${JSON.stringify(message)}`);
184
+ ws.send(JSON.stringify(message));
185
+ };
186
+ return { screen, error, connecting, sessionId, sendMessage };
187
+ };
188
+ //# sourceMappingURL=useRunnerSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRunnerSession.js","sourceRoot":"","sources":["../../src/ui/useRunnerSession.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "buildless-cli",
3
+ "version": "0.1.6",
4
+ "private": false,
5
+ "type": "module",
6
+ "bin": {
7
+ "buildless": "dist/index.js",
8
+ "blo": "dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "dev": "tsx src/index.tsx",
12
+ "build": "tsc",
13
+ "start": "node dist/index.js",
14
+ "typecheck": "tsc --noEmit"
15
+ },
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "files": [
20
+ "dist",
21
+ "README.md"
22
+ ],
23
+ "dependencies": {
24
+ "@blo/shared": "workspace:*",
25
+ "commander": "^12.1.0",
26
+ "ink": "^5.0.1",
27
+ "open": "^10.1.0",
28
+ "react": "18.2.0",
29
+ "ws": "^8.18.0"
30
+ },
31
+ "devDependencies": {
32
+ "@types/node": "^22.13.4",
33
+ "@types/react": "18.2.79",
34
+ "@types/ws": "^8.5.14",
35
+ "tsx": "^4.20.5",
36
+ "typescript": "^5.7.3"
37
+ },
38
+ "engines": {
39
+ "node": ">=20.0.0"
40
+ }
41
+ }