ticbuild 1.0.12 → 1.0.13
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/dist/backend/tic80Controller/discovery.d.ts +19 -0
- package/dist/backend/tic80Controller/discovery.d.ts.map +1 -0
- package/dist/backend/tic80Controller/discovery.js +181 -0
- package/dist/backend/tic80Controller/discovery.js.map +1 -0
- package/dist/backend/tic80Controller/discovery.test.d.ts +2 -0
- package/dist/backend/tic80Controller/discovery.test.d.ts.map +1 -0
- package/dist/backend/tic80Controller/discovery.test.js +132 -0
- package/dist/backend/tic80Controller/discovery.test.js.map +1 -0
- package/dist/buildInfo.d.ts +4 -4
- package/dist/buildInfo.js +4 -4
- package/dist/frontend/terminal.d.ts +10 -0
- package/dist/frontend/terminal.d.ts.map +1 -0
- package/dist/frontend/terminal.js +321 -0
- package/dist/frontend/terminal.js.map +1 -0
- package/dist/frontend/terminal.test.d.ts +2 -0
- package/dist/frontend/terminal.test.d.ts.map +1 -0
- package/dist/frontend/terminal.test.js +15 -0
- package/dist/frontend/terminal.test.js.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -1
- package/dist/obj/build.log +5 -5
- package/dist/utils/help.d.ts +3 -0
- package/dist/utils/help.d.ts.map +1 -1
- package/dist/utils/help.js +15 -0
- package/dist/utils/help.js.map +1 -1
- package/dist/utils/utils.d.ts +1 -0
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +4 -0
- package/dist/utils/utils.js.map +1 -1
- package/package.json +1 -1
- package/templates/TIC-80-ticbuild/tic80.exe +0 -0
- package/templates/help/disco.txt +11 -0
- package/templates/help/main.txt +3 -0
- package/templates/help/terminal.txt +18 -0
- package/templates/help/tic80.txt +5 -1
- package/templates/help/tt.txt +17 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface DiscoveredTic80Session {
|
|
2
|
+
pid: number;
|
|
3
|
+
host: string;
|
|
4
|
+
port: number;
|
|
5
|
+
startedAt: string;
|
|
6
|
+
remotingVersion: string;
|
|
7
|
+
source: "global" | "project";
|
|
8
|
+
filePath: string;
|
|
9
|
+
fileModifiedAtMs: number;
|
|
10
|
+
key: string;
|
|
11
|
+
}
|
|
12
|
+
export interface DiscoveryOptions {
|
|
13
|
+
projectDir?: string;
|
|
14
|
+
localAppData?: string;
|
|
15
|
+
isPidRunning?: (pid: number) => boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function readDiscoveredSessions(options?: DiscoveryOptions): Promise<DiscoveredTic80Session[]>;
|
|
18
|
+
export declare function listRunningDiscoveredSessions(options?: DiscoveryOptions): Promise<DiscoveredTic80Session[]>;
|
|
19
|
+
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/backend/tic80Controller/discovery.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,sBAAsB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CAC3C;AA0GD,wBAAsB,sBAAsB,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAuD1G;AAED,wBAAsB,6BAA6B,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAIjH"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.readDiscoveredSessions = readDiscoveredSessions;
|
|
37
|
+
exports.listRunningDiscoveredSessions = listRunningDiscoveredSessions;
|
|
38
|
+
const fs = __importStar(require("node:fs"));
|
|
39
|
+
const path = __importStar(require("node:path"));
|
|
40
|
+
const SESSION_FILE_PATTERN = /^tic80-remote\.(\d+)\.json$/i;
|
|
41
|
+
function getSourceDirectories(options) {
|
|
42
|
+
const localAppData = options?.localAppData ?? process.env.LOCALAPPDATA;
|
|
43
|
+
const directories = [];
|
|
44
|
+
if (localAppData) {
|
|
45
|
+
directories.push({
|
|
46
|
+
source: "global",
|
|
47
|
+
directoryPath: path.join(localAppData, "TIC-80", "remoting", "sessions"),
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
if (options?.projectDir) {
|
|
51
|
+
directories.push({
|
|
52
|
+
source: "project",
|
|
53
|
+
directoryPath: path.join(options.projectDir, ".ticbuild", "remoting", "sessions"),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return directories;
|
|
57
|
+
}
|
|
58
|
+
function parseSessionJson(content) {
|
|
59
|
+
let parsed;
|
|
60
|
+
try {
|
|
61
|
+
parsed = JSON.parse(content);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
if (!parsed || typeof parsed !== "object") {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
const record = parsed;
|
|
70
|
+
const pid = Number(record.pid);
|
|
71
|
+
const host = typeof record.host === "string" ? record.host.trim() : "";
|
|
72
|
+
const port = Number(record.port);
|
|
73
|
+
const startedAt = typeof record.startedAt === "string" ? record.startedAt : "";
|
|
74
|
+
const remotingVersion = typeof record.remotingVersion === "string" ? record.remotingVersion : "";
|
|
75
|
+
if (!Number.isInteger(pid) || pid <= 0) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
if (!host) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
if (!Number.isInteger(port) || port <= 0 || port >= 65536) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
if (!startedAt) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
if (!remotingVersion) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
pid,
|
|
92
|
+
host,
|
|
93
|
+
port,
|
|
94
|
+
startedAt,
|
|
95
|
+
remotingVersion,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function parseStartedAtMs(session) {
|
|
99
|
+
const startedAtMs = Date.parse(session.startedAt);
|
|
100
|
+
return Number.isFinite(startedAtMs) ? startedAtMs : 0;
|
|
101
|
+
}
|
|
102
|
+
function compareSessionsMostRecentFirst(a, b) {
|
|
103
|
+
const startedAtDelta = parseStartedAtMs(b) - parseStartedAtMs(a);
|
|
104
|
+
if (startedAtDelta !== 0) {
|
|
105
|
+
return startedAtDelta;
|
|
106
|
+
}
|
|
107
|
+
const modifiedDelta = b.fileModifiedAtMs - a.fileModifiedAtMs;
|
|
108
|
+
if (modifiedDelta !== 0) {
|
|
109
|
+
return modifiedDelta;
|
|
110
|
+
}
|
|
111
|
+
return b.pid - a.pid;
|
|
112
|
+
}
|
|
113
|
+
function defaultIsPidRunning(pid) {
|
|
114
|
+
try {
|
|
115
|
+
process.kill(pid, 0);
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
const code = err?.code;
|
|
120
|
+
if (code === "EPERM") {
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async function readDiscoveredSessions(options) {
|
|
127
|
+
const directories = getSourceDirectories(options);
|
|
128
|
+
const sessionsByKey = new Map();
|
|
129
|
+
for (const descriptor of directories) {
|
|
130
|
+
let entries;
|
|
131
|
+
try {
|
|
132
|
+
entries = await fs.promises.readdir(descriptor.directoryPath, { withFileTypes: true });
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
for (const entry of entries) {
|
|
138
|
+
if (!entry.isFile()) {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (!SESSION_FILE_PATTERN.test(entry.name)) {
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
const filePath = path.join(descriptor.directoryPath, entry.name);
|
|
145
|
+
let content;
|
|
146
|
+
let stats;
|
|
147
|
+
try {
|
|
148
|
+
[content, stats] = await Promise.all([
|
|
149
|
+
fs.promises.readFile(filePath, "utf-8"),
|
|
150
|
+
fs.promises.stat(filePath),
|
|
151
|
+
]);
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
const parsed = parseSessionJson(content);
|
|
157
|
+
if (!parsed) {
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
const key = `${parsed.pid}|${parsed.host}|${parsed.port}`;
|
|
161
|
+
const discovered = {
|
|
162
|
+
...parsed,
|
|
163
|
+
source: descriptor.source,
|
|
164
|
+
filePath,
|
|
165
|
+
fileModifiedAtMs: stats.mtimeMs,
|
|
166
|
+
key,
|
|
167
|
+
};
|
|
168
|
+
const existing = sessionsByKey.get(key);
|
|
169
|
+
if (!existing || compareSessionsMostRecentFirst(discovered, existing) < 0) {
|
|
170
|
+
sessionsByKey.set(key, discovered);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return Array.from(sessionsByKey.values()).sort(compareSessionsMostRecentFirst);
|
|
175
|
+
}
|
|
176
|
+
async function listRunningDiscoveredSessions(options) {
|
|
177
|
+
const sessions = await readDiscoveredSessions(options);
|
|
178
|
+
const isPidRunning = options?.isPidRunning ?? defaultIsPidRunning;
|
|
179
|
+
return sessions.filter((session) => isPidRunning(session.pid));
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/backend/tic80Controller/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.test.d.ts","sourceRoot":"","sources":["../../../src/backend/tic80Controller/discovery.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const fs = __importStar(require("node:fs"));
|
|
37
|
+
const os = __importStar(require("node:os"));
|
|
38
|
+
const path = __importStar(require("node:path"));
|
|
39
|
+
const discovery_1 = require("./discovery");
|
|
40
|
+
function writeJson(filePath, value) {
|
|
41
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
42
|
+
fs.writeFileSync(filePath, JSON.stringify(value), "utf-8");
|
|
43
|
+
}
|
|
44
|
+
describe("discovery", () => {
|
|
45
|
+
it("reads and merges sessions from global and project sources ordered by recent startedAt", async () => {
|
|
46
|
+
const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), "ticbuild-discovery-"));
|
|
47
|
+
const localAppData = path.join(tempRoot, "localappdata");
|
|
48
|
+
const projectDir = path.join(tempRoot, "project");
|
|
49
|
+
try {
|
|
50
|
+
writeJson(path.join(localAppData, "TIC-80", "remoting", "sessions", "tic80-remote.100.json"), {
|
|
51
|
+
pid: 100,
|
|
52
|
+
host: "127.0.0.1",
|
|
53
|
+
port: 55100,
|
|
54
|
+
startedAt: "2026-01-01T10:00:00.000Z",
|
|
55
|
+
remotingVersion: "v1",
|
|
56
|
+
});
|
|
57
|
+
writeJson(path.join(projectDir, ".ticbuild", "remoting", "sessions", "tic80-remote.200.json"), {
|
|
58
|
+
pid: 200,
|
|
59
|
+
host: "127.0.0.1",
|
|
60
|
+
port: 55200,
|
|
61
|
+
startedAt: "2026-01-01T12:00:00.000Z",
|
|
62
|
+
remotingVersion: "v1",
|
|
63
|
+
});
|
|
64
|
+
const sessions = await (0, discovery_1.readDiscoveredSessions)({ localAppData, projectDir });
|
|
65
|
+
expect(sessions).toHaveLength(2);
|
|
66
|
+
expect(sessions[0].pid).toBe(200);
|
|
67
|
+
expect(sessions[1].pid).toBe(100);
|
|
68
|
+
expect(sessions[0].source).toBe("project");
|
|
69
|
+
expect(sessions[1].source).toBe("global");
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
fs.rmSync(tempRoot, { recursive: true, force: true });
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
it("ignores malformed discovery json files", async () => {
|
|
76
|
+
const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), "ticbuild-discovery-"));
|
|
77
|
+
const localAppData = path.join(tempRoot, "localappdata");
|
|
78
|
+
try {
|
|
79
|
+
writeJson(path.join(localAppData, "TIC-80", "remoting", "sessions", "tic80-remote.100.json"), {
|
|
80
|
+
pid: 100,
|
|
81
|
+
host: "127.0.0.1",
|
|
82
|
+
port: 55100,
|
|
83
|
+
startedAt: "2026-01-01T10:00:00.000Z",
|
|
84
|
+
remotingVersion: "v1",
|
|
85
|
+
});
|
|
86
|
+
writeJson(path.join(localAppData, "TIC-80", "remoting", "sessions", "tic80-remote.101.json"), {
|
|
87
|
+
pid: "not-a-number",
|
|
88
|
+
host: "127.0.0.1",
|
|
89
|
+
port: 55101,
|
|
90
|
+
startedAt: "2026-01-01T11:00:00.000Z",
|
|
91
|
+
remotingVersion: "v1",
|
|
92
|
+
});
|
|
93
|
+
fs.writeFileSync(path.join(localAppData, "TIC-80", "remoting", "sessions", "tic80-remote.102.json"), "{ broken json", "utf-8");
|
|
94
|
+
const sessions = await (0, discovery_1.readDiscoveredSessions)({ localAppData });
|
|
95
|
+
expect(sessions).toHaveLength(1);
|
|
96
|
+
expect(sessions[0].pid).toBe(100);
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
fs.rmSync(tempRoot, { recursive: true, force: true });
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
it("filters to running sessions when requested", async () => {
|
|
103
|
+
const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), "ticbuild-discovery-"));
|
|
104
|
+
const localAppData = path.join(tempRoot, "localappdata");
|
|
105
|
+
try {
|
|
106
|
+
writeJson(path.join(localAppData, "TIC-80", "remoting", "sessions", "tic80-remote.301.json"), {
|
|
107
|
+
pid: 301,
|
|
108
|
+
host: "127.0.0.1",
|
|
109
|
+
port: 55301,
|
|
110
|
+
startedAt: "2026-01-01T11:00:00.000Z",
|
|
111
|
+
remotingVersion: "v1",
|
|
112
|
+
});
|
|
113
|
+
writeJson(path.join(localAppData, "TIC-80", "remoting", "sessions", "tic80-remote.302.json"), {
|
|
114
|
+
pid: 302,
|
|
115
|
+
host: "127.0.0.1",
|
|
116
|
+
port: 55302,
|
|
117
|
+
startedAt: "2026-01-01T11:30:00.000Z",
|
|
118
|
+
remotingVersion: "v1",
|
|
119
|
+
});
|
|
120
|
+
const sessions = await (0, discovery_1.listRunningDiscoveredSessions)({
|
|
121
|
+
localAppData,
|
|
122
|
+
isPidRunning: (pid) => pid === 302,
|
|
123
|
+
});
|
|
124
|
+
expect(sessions).toHaveLength(1);
|
|
125
|
+
expect(sessions[0].pid).toBe(302);
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
fs.rmSync(tempRoot, { recursive: true, force: true });
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
//# sourceMappingURL=discovery.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.test.js","sourceRoot":"","sources":["../../../src/backend/tic80Controller/discovery.test.ts"],"names":[],"mappings":"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"}
|
package/dist/buildInfo.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export declare const buildInfo: {
|
|
2
|
-
readonly version: "1.0.
|
|
2
|
+
readonly version: "1.0.13";
|
|
3
3
|
readonly dirty: true;
|
|
4
|
-
readonly buildDate: "2026-02-
|
|
5
|
-
readonly lastCommitDate: "2026-02-
|
|
6
|
-
readonly commitHash: "
|
|
4
|
+
readonly buildDate: "2026-02-13T16:05:31.862Z";
|
|
5
|
+
readonly lastCommitDate: "2026-02-13T17:05:05+01:00";
|
|
6
|
+
readonly commitHash: "55bab37";
|
|
7
7
|
};
|
|
8
8
|
//# sourceMappingURL=buildInfo.d.ts.map
|
package/dist/buildInfo.js
CHANGED
|
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.buildInfo = void 0;
|
|
4
4
|
// Auto-generated by scripts/gen-build-info.js. Do not edit.
|
|
5
5
|
exports.buildInfo = {
|
|
6
|
-
"version": "1.0.
|
|
6
|
+
"version": "1.0.13",
|
|
7
7
|
"dirty": true,
|
|
8
|
-
"buildDate": "2026-02-
|
|
9
|
-
"lastCommitDate": "2026-02-
|
|
10
|
-
"commitHash": "
|
|
8
|
+
"buildDate": "2026-02-13T16:05:31.862Z",
|
|
9
|
+
"lastCommitDate": "2026-02-13T17:05:05+01:00",
|
|
10
|
+
"commitHash": "55bab37"
|
|
11
11
|
};
|
|
12
12
|
//# sourceMappingURL=buildInfo.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface TerminalTarget {
|
|
2
|
+
host: string;
|
|
3
|
+
port: number;
|
|
4
|
+
}
|
|
5
|
+
export declare function parseHostPort(hostPortValue: string): TerminalTarget;
|
|
6
|
+
export declare function runTerminalClient(target: TerminalTarget): Promise<void>;
|
|
7
|
+
export declare function discoCommand(): Promise<void>;
|
|
8
|
+
export declare function terminalCommand(hostPort?: string): Promise<void>;
|
|
9
|
+
export declare function attachTerminalToLaunchedTic80(preLaunchSessionKeys: Set<string>, launchArgs: string[], timeoutMs?: number): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=terminal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/frontend/terminal.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AAoGD,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,cAAc,CAuBnE;AAsGD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C7E;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAWlD;AAED,wBAAsB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMtE;AAED,wBAAsB,6BAA6B,CAC/C,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,EACjC,UAAU,EAAE,MAAM,EAAE,EACpB,SAAS,GAAE,MAAc,GAC1B,OAAO,CAAC,IAAI,CAAC,CAoBf"}
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.parseHostPort = parseHostPort;
|
|
40
|
+
exports.runTerminalClient = runTerminalClient;
|
|
41
|
+
exports.discoCommand = discoCommand;
|
|
42
|
+
exports.terminalCommand = terminalCommand;
|
|
43
|
+
exports.attachTerminalToLaunchedTic80 = attachTerminalToLaunchedTic80;
|
|
44
|
+
const node_net_1 = __importDefault(require("node:net"));
|
|
45
|
+
const readline = __importStar(require("node:readline"));
|
|
46
|
+
const discovery_1 = require("../backend/tic80Controller/discovery");
|
|
47
|
+
const cons = __importStar(require("../utils/console"));
|
|
48
|
+
const args_1 = require("../utils/tic80/args");
|
|
49
|
+
const utils_1 = require("../utils/utils");
|
|
50
|
+
function readLine(rl, prompt) {
|
|
51
|
+
return new Promise((resolve) => {
|
|
52
|
+
const onLine = (input) => {
|
|
53
|
+
cleanup();
|
|
54
|
+
resolve(input);
|
|
55
|
+
};
|
|
56
|
+
const onClose = () => {
|
|
57
|
+
cleanup();
|
|
58
|
+
resolve(null);
|
|
59
|
+
};
|
|
60
|
+
const cleanup = () => {
|
|
61
|
+
rl.removeListener("line", onLine);
|
|
62
|
+
rl.removeListener("close", onClose);
|
|
63
|
+
};
|
|
64
|
+
rl.once("line", onLine);
|
|
65
|
+
rl.once("close", onClose);
|
|
66
|
+
rl.setPrompt(prompt);
|
|
67
|
+
rl.prompt();
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function formatSessionSummary(session, index) {
|
|
71
|
+
const started = session.startedAt || "(unknown)";
|
|
72
|
+
const prefix = index === undefined ? "" : `${index + 1}. `;
|
|
73
|
+
return `${prefix}${session.host}:${session.port} pid=${session.pid} started=${started} version=${session.remotingVersion} source=${session.source}`;
|
|
74
|
+
}
|
|
75
|
+
function createSocketLineReader(socket) {
|
|
76
|
+
let buffer = "";
|
|
77
|
+
let closed = false;
|
|
78
|
+
const pending = [];
|
|
79
|
+
const queued = [];
|
|
80
|
+
const flushLine = (value) => {
|
|
81
|
+
if (pending.length > 0) {
|
|
82
|
+
const resolver = pending.shift();
|
|
83
|
+
resolver(value);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
queued.push(value);
|
|
87
|
+
};
|
|
88
|
+
const resolveClosed = () => {
|
|
89
|
+
if (closed) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
closed = true;
|
|
93
|
+
while (pending.length > 0) {
|
|
94
|
+
const resolver = pending.shift();
|
|
95
|
+
resolver(null);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
const onData = (chunk) => {
|
|
99
|
+
buffer += chunk.toString("ascii");
|
|
100
|
+
let lineBreak = buffer.indexOf("\n");
|
|
101
|
+
while (lineBreak !== -1) {
|
|
102
|
+
const line = buffer.slice(0, lineBreak).replace(/\r$/, "");
|
|
103
|
+
buffer = buffer.slice(lineBreak + 1);
|
|
104
|
+
flushLine(line);
|
|
105
|
+
lineBreak = buffer.indexOf("\n");
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const onClose = () => {
|
|
109
|
+
if (buffer.length > 0) {
|
|
110
|
+
flushLine(buffer);
|
|
111
|
+
buffer = "";
|
|
112
|
+
}
|
|
113
|
+
resolveClosed();
|
|
114
|
+
};
|
|
115
|
+
socket.on("data", onData);
|
|
116
|
+
socket.once("close", onClose);
|
|
117
|
+
socket.once("error", onClose);
|
|
118
|
+
return {
|
|
119
|
+
readNextLine: async () => {
|
|
120
|
+
if (queued.length > 0) {
|
|
121
|
+
return queued.shift();
|
|
122
|
+
}
|
|
123
|
+
if (closed) {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
return new Promise((resolve) => {
|
|
127
|
+
pending.push(resolve);
|
|
128
|
+
});
|
|
129
|
+
},
|
|
130
|
+
close: () => {
|
|
131
|
+
socket.removeListener("data", onData);
|
|
132
|
+
socket.removeListener("close", onClose);
|
|
133
|
+
socket.removeListener("error", onClose);
|
|
134
|
+
resolveClosed();
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
function parseHostPort(hostPortValue) {
|
|
139
|
+
const value = hostPortValue.trim();
|
|
140
|
+
if (!value) {
|
|
141
|
+
throw new Error("Host/port cannot be empty");
|
|
142
|
+
}
|
|
143
|
+
const separator = value.lastIndexOf(":");
|
|
144
|
+
if (separator <= 0 || separator === value.length - 1) {
|
|
145
|
+
throw new Error(`Invalid host:port value '${hostPortValue}'`);
|
|
146
|
+
}
|
|
147
|
+
const host = value.slice(0, separator).trim();
|
|
148
|
+
const portValue = value.slice(separator + 1).trim();
|
|
149
|
+
const port = Number(portValue);
|
|
150
|
+
if (!host) {
|
|
151
|
+
throw new Error(`Invalid host in '${hostPortValue}'`);
|
|
152
|
+
}
|
|
153
|
+
if (!Number.isInteger(port) || port <= 0 || port >= 65536) {
|
|
154
|
+
throw new Error(`Invalid port in '${hostPortValue}'`);
|
|
155
|
+
}
|
|
156
|
+
return { host, port };
|
|
157
|
+
}
|
|
158
|
+
async function chooseDiscoveredSession(sessions) {
|
|
159
|
+
cons.info("Multiple TIC-80 remoting sessions discovered:");
|
|
160
|
+
for (let i = 0; i < sessions.length; i += 1) {
|
|
161
|
+
cons.info(` ${formatSessionSummary(sessions[i], i)}`);
|
|
162
|
+
}
|
|
163
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
164
|
+
throw new Error("Multiple sessions found but terminal is not interactive; specify host:port explicitly");
|
|
165
|
+
}
|
|
166
|
+
const rl = readline.createInterface({
|
|
167
|
+
input: process.stdin,
|
|
168
|
+
output: process.stdout,
|
|
169
|
+
terminal: true,
|
|
170
|
+
});
|
|
171
|
+
try {
|
|
172
|
+
while (true) {
|
|
173
|
+
const response = await readLine(rl, "Select session number (blank to cancel): ");
|
|
174
|
+
if (response === null) {
|
|
175
|
+
return undefined;
|
|
176
|
+
}
|
|
177
|
+
const trimmed = response.trim();
|
|
178
|
+
if (trimmed.length === 0) {
|
|
179
|
+
return undefined;
|
|
180
|
+
}
|
|
181
|
+
const selected = Number(trimmed);
|
|
182
|
+
if (!Number.isInteger(selected) || selected < 1 || selected > sessions.length) {
|
|
183
|
+
cons.warning(`Invalid selection: ${trimmed}`);
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
return sessions[selected - 1];
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
finally {
|
|
190
|
+
rl.close();
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
async function resolveTerminalTarget(hostPort) {
|
|
194
|
+
if (hostPort) {
|
|
195
|
+
return parseHostPort(hostPort);
|
|
196
|
+
}
|
|
197
|
+
const sessions = await (0, discovery_1.listRunningDiscoveredSessions)({ projectDir: process.cwd() });
|
|
198
|
+
if (sessions.length === 0) {
|
|
199
|
+
cons.info("No discovered TIC-80 remoting sessions found.");
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
if (sessions.length === 1) {
|
|
203
|
+
const only = sessions[0];
|
|
204
|
+
cons.info(`Auto-connecting to ${only.host}:${only.port} (pid=${only.pid})`);
|
|
205
|
+
return { host: only.host, port: only.port };
|
|
206
|
+
}
|
|
207
|
+
const selected = await chooseDiscoveredSession(sessions);
|
|
208
|
+
if (!selected) {
|
|
209
|
+
return undefined;
|
|
210
|
+
}
|
|
211
|
+
return { host: selected.host, port: selected.port };
|
|
212
|
+
}
|
|
213
|
+
function connectSocket(host, port, timeoutMs) {
|
|
214
|
+
return new Promise((resolve, reject) => {
|
|
215
|
+
const socket = new node_net_1.default.Socket();
|
|
216
|
+
let settled = false;
|
|
217
|
+
const settle = (callback) => {
|
|
218
|
+
if (settled) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
settled = true;
|
|
222
|
+
callback();
|
|
223
|
+
};
|
|
224
|
+
const timeout = setTimeout(() => {
|
|
225
|
+
settle(() => {
|
|
226
|
+
socket.destroy();
|
|
227
|
+
reject(new Error(`Timed out connecting to ${host}:${port}`));
|
|
228
|
+
});
|
|
229
|
+
}, timeoutMs);
|
|
230
|
+
socket.once("connect", () => {
|
|
231
|
+
settle(() => {
|
|
232
|
+
clearTimeout(timeout);
|
|
233
|
+
resolve(socket);
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
socket.once("error", (err) => {
|
|
237
|
+
settle(() => {
|
|
238
|
+
clearTimeout(timeout);
|
|
239
|
+
reject(err instanceof Error ? err : new Error(String(err)));
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
socket.connect(port, host);
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
async function runTerminalClient(target) {
|
|
246
|
+
const { host, port } = target;
|
|
247
|
+
const socket = await connectSocket(host, port, 5000);
|
|
248
|
+
const socketReader = createSocketLineReader(socket);
|
|
249
|
+
cons.info(`Connected to ${host}:${port}. Type lines like: 1 ping (Ctrl+C to quit)`);
|
|
250
|
+
const rl = readline.createInterface({
|
|
251
|
+
input: process.stdin,
|
|
252
|
+
output: process.stdout,
|
|
253
|
+
terminal: true,
|
|
254
|
+
});
|
|
255
|
+
rl.on("SIGINT", () => {
|
|
256
|
+
rl.close();
|
|
257
|
+
});
|
|
258
|
+
try {
|
|
259
|
+
while (true) {
|
|
260
|
+
const line = await readLine(rl, "> ");
|
|
261
|
+
if (line === null) {
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
264
|
+
if (line.trim().length === 0) {
|
|
265
|
+
continue;
|
|
266
|
+
}
|
|
267
|
+
socket.write(`${line}\n`, "ascii");
|
|
268
|
+
const response = await socketReader.readNextLine();
|
|
269
|
+
if (response === null) {
|
|
270
|
+
throw new Error("Disconnected from TIC-80 remoting server");
|
|
271
|
+
}
|
|
272
|
+
process.stdout.write(`${response}\n`);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
finally {
|
|
276
|
+
rl.close();
|
|
277
|
+
socketReader.close();
|
|
278
|
+
if (!socket.destroyed) {
|
|
279
|
+
socket.end();
|
|
280
|
+
socket.destroy();
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
async function discoCommand() {
|
|
285
|
+
const sessions = await (0, discovery_1.listRunningDiscoveredSessions)({ projectDir: process.cwd() });
|
|
286
|
+
if (sessions.length === 0) {
|
|
287
|
+
cons.info("No discovered TIC-80 remoting sessions found.");
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
cons.info(`Discovered ${sessions.length} TIC-80 remoting session(s):`);
|
|
291
|
+
for (let i = 0; i < sessions.length; i += 1) {
|
|
292
|
+
cons.info(` ${formatSessionSummary(sessions[i], i)}`);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
async function terminalCommand(hostPort) {
|
|
296
|
+
const target = await resolveTerminalTarget(hostPort);
|
|
297
|
+
if (!target) {
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
await runTerminalClient(target);
|
|
301
|
+
}
|
|
302
|
+
async function attachTerminalToLaunchedTic80(preLaunchSessionKeys, launchArgs, timeoutMs = 10000) {
|
|
303
|
+
const explicitPort = (0, args_1.findOptionValue)(launchArgs, "--remoting-port");
|
|
304
|
+
if (explicitPort) {
|
|
305
|
+
const target = parseHostPort(`127.0.0.1:${explicitPort}`);
|
|
306
|
+
await runTerminalClient(target);
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
const start = Date.now();
|
|
310
|
+
while (Date.now() - start < timeoutMs) {
|
|
311
|
+
const sessions = await (0, discovery_1.listRunningDiscoveredSessions)({ projectDir: process.cwd() });
|
|
312
|
+
const launchedSession = sessions.find((session) => !preLaunchSessionKeys.has(session.key));
|
|
313
|
+
if (launchedSession) {
|
|
314
|
+
await runTerminalClient({ host: launchedSession.host, port: launchedSession.port });
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
await (0, utils_1.sleep)(250);
|
|
318
|
+
}
|
|
319
|
+
throw new Error("Timed out waiting for launched TIC-80 remoting session discovery");
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=terminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/frontend/terminal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.test.d.ts","sourceRoot":"","sources":["../../src/frontend/terminal.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const terminal_1 = require("./terminal");
|
|
4
|
+
describe("terminal host:port parsing", () => {
|
|
5
|
+
it("parses valid host:port", () => {
|
|
6
|
+
expect((0, terminal_1.parseHostPort)("127.0.0.1:55000")).toEqual({ host: "127.0.0.1", port: 55000 });
|
|
7
|
+
});
|
|
8
|
+
it("throws for missing separator", () => {
|
|
9
|
+
expect(() => (0, terminal_1.parseHostPort)("127.0.0.1")).toThrow("Invalid host:port");
|
|
10
|
+
});
|
|
11
|
+
it("throws for invalid port", () => {
|
|
12
|
+
expect(() => (0, terminal_1.parseHostPort)("127.0.0.1:nope")).toThrow("Invalid port");
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=terminal.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.test.js","sourceRoot":"","sources":["../../src/frontend/terminal.test.ts"],"names":[],"mappings":";;AAAA,yCAA2C;AAE3C,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,IAAA,wBAAa,EAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,wBAAa,EAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,wBAAa,EAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -36,11 +36,13 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
36
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
37
|
const commander_1 = require("commander");
|
|
38
38
|
const tic80Resolver_1 = require("./backend/tic80Resolver");
|
|
39
|
+
const discovery_1 = require("./backend/tic80Controller/discovery");
|
|
39
40
|
const buildInfo_1 = require("./buildInfo");
|
|
40
41
|
const build_1 = require("./frontend/build");
|
|
41
42
|
const init_1 = require("./frontend/init");
|
|
42
43
|
const repl_1 = require("./frontend/repl");
|
|
43
44
|
const run_1 = require("./frontend/run");
|
|
45
|
+
const terminal_1 = require("./frontend/terminal");
|
|
44
46
|
const templateList_1 = require("./frontend/templateList");
|
|
45
47
|
const watch_1 = require("./frontend/watch");
|
|
46
48
|
const console = __importStar(require("./utils/console"));
|
|
@@ -104,6 +106,15 @@ async function main() {
|
|
|
104
106
|
case "t":
|
|
105
107
|
(0, help_1.printTic80Help)();
|
|
106
108
|
return;
|
|
109
|
+
case "tt":
|
|
110
|
+
(0, help_1.printTic80TerminalHelp)();
|
|
111
|
+
return;
|
|
112
|
+
case "terminal":
|
|
113
|
+
(0, help_1.printTerminalHelp)();
|
|
114
|
+
return;
|
|
115
|
+
case "disco":
|
|
116
|
+
(0, help_1.printDiscoHelp)();
|
|
117
|
+
return;
|
|
107
118
|
case "help":
|
|
108
119
|
// Let help command handle it naturally
|
|
109
120
|
break;
|
|
@@ -185,8 +196,37 @@ async function main() {
|
|
|
185
196
|
.command("tic80")
|
|
186
197
|
.alias("t")
|
|
187
198
|
.description("Launch TIC-80 directly")
|
|
199
|
+
.option("--terminal", "Launch TIC-80 and attach terminal mode")
|
|
200
|
+
.action(async (options) => {
|
|
201
|
+
if (!options?.terminal) {
|
|
202
|
+
await launchTic80(forwardedArgs);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
const preLaunchSessions = await (0, discovery_1.readDiscoveredSessions)({ projectDir: process.cwd() });
|
|
206
|
+
const preLaunchSessionKeys = new Set(preLaunchSessions.map((session) => session.key));
|
|
207
|
+
await launchTic80(forwardedArgs);
|
|
208
|
+
await (0, terminal_1.attachTerminalToLaunchedTic80)(preLaunchSessionKeys, forwardedArgs);
|
|
209
|
+
});
|
|
210
|
+
program
|
|
211
|
+
.command("tt")
|
|
212
|
+
.description("Launch TIC-80 and attach terminal mode")
|
|
188
213
|
.action(async () => {
|
|
214
|
+
const preLaunchSessions = await (0, discovery_1.readDiscoveredSessions)({ projectDir: process.cwd() });
|
|
215
|
+
const preLaunchSessionKeys = new Set(preLaunchSessions.map((session) => session.key));
|
|
189
216
|
await launchTic80(forwardedArgs);
|
|
217
|
+
await (0, terminal_1.attachTerminalToLaunchedTic80)(preLaunchSessionKeys, forwardedArgs);
|
|
218
|
+
});
|
|
219
|
+
program
|
|
220
|
+
.command("terminal [hostPort]")
|
|
221
|
+
.description("Connect terminal client to TIC-80 remoting")
|
|
222
|
+
.action(async (hostPort) => {
|
|
223
|
+
await (0, terminal_1.terminalCommand)(hostPort);
|
|
224
|
+
});
|
|
225
|
+
program
|
|
226
|
+
.command("disco")
|
|
227
|
+
.description("List discovered TIC-80 remoting sessions")
|
|
228
|
+
.action(async () => {
|
|
229
|
+
await (0, terminal_1.discoCommand)();
|
|
190
230
|
});
|
|
191
231
|
program
|
|
192
232
|
.command("help [command]")
|
|
@@ -221,6 +261,15 @@ async function main() {
|
|
|
221
261
|
case "t":
|
|
222
262
|
(0, help_1.printTic80Help)();
|
|
223
263
|
break;
|
|
264
|
+
case "tt":
|
|
265
|
+
(0, help_1.printTic80TerminalHelp)();
|
|
266
|
+
break;
|
|
267
|
+
case "terminal":
|
|
268
|
+
(0, help_1.printTerminalHelp)();
|
|
269
|
+
break;
|
|
270
|
+
case "disco":
|
|
271
|
+
(0, help_1.printDiscoHelp)();
|
|
272
|
+
break;
|
|
224
273
|
default:
|
|
225
274
|
console.error(`Unknown command: ${command}`);
|
|
226
275
|
process.stdout.write("\n");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,2DAAgE;AAChE,2CAAwC;AACxC,4CAAgD;AAChD,0CAA2D;AAE3D,0CAA8C;AAC9C,wCAA4C;AAC5C,0DAA8D;AAC9D,4CAAgD;AAChD,yDAA2C;AAC3C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/obj/build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
[2026-
|
|
2
|
-
[2026-
|
|
3
|
-
[2026-
|
|
4
|
-
[2026-
|
|
5
|
-
[2026-
|
|
1
|
+
[2026-02-13T11:20:43.152Z] [INFO] Project loaded from:
|
|
2
|
+
[2026-02-13T11:20:43.153Z] [INFO] C:\root\git\thenfour\ticbuild\example.ticbuild.jsonc
|
|
3
|
+
[2026-02-13T11:20:43.154Z] [INFO] Outputting resolved manifest to
|
|
4
|
+
[2026-02-13T11:20:43.155Z] [INFO] C:\root\git\thenfour\ticbuild\dist\obj\resolvedManifest.ticbuild.jsonc
|
|
5
|
+
[2026-02-13T11:20:43.155Z] [INFO] Loading imported resources...
|
package/dist/utils/help.d.ts
CHANGED
|
@@ -6,4 +6,7 @@ export declare function printInitHelp(): void;
|
|
|
6
6
|
export declare function printReplHelp(): void;
|
|
7
7
|
export declare function printTemplateListHelp(): void;
|
|
8
8
|
export declare function printTic80Help(): void;
|
|
9
|
+
export declare function printTic80TerminalHelp(): void;
|
|
10
|
+
export declare function printTerminalHelp(): void;
|
|
11
|
+
export declare function printDiscoHelp(): void;
|
|
9
12
|
//# sourceMappingURL=help.d.ts.map
|
package/dist/utils/help.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/utils/help.ts"],"names":[],"mappings":"AAwBA,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAGnC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC"}
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/utils/help.ts"],"names":[],"mappings":"AAwBA,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAGnC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAGxC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC"}
|
package/dist/utils/help.js
CHANGED
|
@@ -41,6 +41,9 @@ exports.printInitHelp = printInitHelp;
|
|
|
41
41
|
exports.printReplHelp = printReplHelp;
|
|
42
42
|
exports.printTemplateListHelp = printTemplateListHelp;
|
|
43
43
|
exports.printTic80Help = printTic80Help;
|
|
44
|
+
exports.printTic80TerminalHelp = printTic80TerminalHelp;
|
|
45
|
+
exports.printTerminalHelp = printTerminalHelp;
|
|
46
|
+
exports.printDiscoHelp = printDiscoHelp;
|
|
44
47
|
const fs = __importStar(require("node:fs"));
|
|
45
48
|
const path = __importStar(require("node:path"));
|
|
46
49
|
const buildInfo_1 = require("../buildInfo");
|
|
@@ -94,4 +97,16 @@ function printTic80Help() {
|
|
|
94
97
|
const help = renderHelpTemplate("tic80");
|
|
95
98
|
console.log(help);
|
|
96
99
|
}
|
|
100
|
+
function printTic80TerminalHelp() {
|
|
101
|
+
const help = renderHelpTemplate("tt");
|
|
102
|
+
console.log(help);
|
|
103
|
+
}
|
|
104
|
+
function printTerminalHelp() {
|
|
105
|
+
const help = renderHelpTemplate("terminal");
|
|
106
|
+
console.log(help);
|
|
107
|
+
}
|
|
108
|
+
function printDiscoHelp() {
|
|
109
|
+
const help = renderHelpTemplate("disco");
|
|
110
|
+
console.log(help);
|
|
111
|
+
}
|
|
97
112
|
//# sourceMappingURL=help.js.map
|
package/dist/utils/help.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/utils/help.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,sCAGC;AAED,wCAGC;AAED,oCAGC;AAED,wCAGC;AAED,sCAGC;AAED,sCAGC;AAED,sDAGC;AAED,wCAGC;
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/utils/help.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/utils.d.ts
CHANGED
|
@@ -12,4 +12,5 @@ export declare function deserializeMap<K, V>(obj: object): Map<K, V>;
|
|
|
12
12
|
export declare function CoalesceBool(value: boolean | null | undefined, defaultValue: boolean): boolean;
|
|
13
13
|
export declare function trimTrailingZeros(data: Uint8Array): Uint8Array;
|
|
14
14
|
export declare function hashTextSha1(text: string): string;
|
|
15
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
15
16
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,aAAa,CAAC;AAEnC,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAWrD;AAED,eAAO,MAAM,WAAW,GAAI,GAAG,MAAM,GAAG,IAAI,WAK3C,CAAC;AAIF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,MAAM,MAAM,OAAO,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC;AAI7C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAyBvE;AAiCD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAE5E;AAGD,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAEhE;AACD,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAE3D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAK9F;AAGD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAM9D;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjD"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,aAAa,CAAC;AAEnC,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAWrD;AAED,eAAO,MAAM,WAAW,GAAI,GAAG,MAAM,GAAG,IAAI,WAK3C,CAAC;AAIF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,MAAM,MAAM,OAAO,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC;AAI7C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAyBvE;AAiCD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAE5E;AAGD,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAEhE;AACD,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAE3D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAK9F;AAGD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAM9D;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjD;AAGD,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C"}
|
package/dist/utils/utils.js
CHANGED
|
@@ -10,6 +10,7 @@ exports.deserializeMap = deserializeMap;
|
|
|
10
10
|
exports.CoalesceBool = CoalesceBool;
|
|
11
11
|
exports.trimTrailingZeros = trimTrailingZeros;
|
|
12
12
|
exports.hashTextSha1 = hashTextSha1;
|
|
13
|
+
exports.sleep = sleep;
|
|
13
14
|
const node_crypto_1 = require("node:crypto");
|
|
14
15
|
exports.kNullKey = "__NULL__";
|
|
15
16
|
function TryParseInt(value) {
|
|
@@ -120,4 +121,7 @@ function hashTextSha1(text) {
|
|
|
120
121
|
const hash = (0, node_crypto_1.createHash)("sha1").update(text, "utf-8").digest("hex");
|
|
121
122
|
return `sha1:${hash}`;
|
|
122
123
|
}
|
|
124
|
+
function sleep(ms) {
|
|
125
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
126
|
+
}
|
|
123
127
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":";;;AAIA,kCAWC;AAWD,wCAEC;AAMD,4CAyBC;AAiCD,gEAEC;AAGD,kDAEC;AACD,wCAEC;AAED,oCAKC;AAGD,8CAMC;AAGD,oCAGC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
Binary file
|
package/templates/help/main.txt
CHANGED
|
@@ -19,6 +19,9 @@ Common commands:
|
|
|
19
19
|
Other commands:
|
|
20
20
|
|
|
21
21
|
tic80, t Launch TIC-80 directly
|
|
22
|
+
tt Launch TIC-80 and attach terminal mode
|
|
23
|
+
terminal [host:port] Connect terminal client to TIC-80 remoting
|
|
24
|
+
disco List discovered TIC-80 remoting sessions
|
|
22
25
|
help [command] Show help for a specific command
|
|
23
26
|
|
|
24
27
|
Use 'ticbuild help <command>' or 'ticbuild <command> --help' for detailed help.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
|
|
2
|
+
ticbuild terminal
|
|
3
|
+
|
|
4
|
+
usage: ticbuild terminal [host:port]
|
|
5
|
+
|
|
6
|
+
Connect to the TIC-80 remoting terminal server.
|
|
7
|
+
|
|
8
|
+
If host:port is omitted:
|
|
9
|
+
|
|
10
|
+
- with 0 discovered running sessions, exits immediately
|
|
11
|
+
- with 1 discovered running session, connects automatically
|
|
12
|
+
- with multiple sessions, shows a list and prompts for selection
|
|
13
|
+
|
|
14
|
+
In terminal mode, you type commands one line at a time. Each line should begin with
|
|
15
|
+
the request ID. Example:
|
|
16
|
+
|
|
17
|
+
> 1 hello
|
|
18
|
+
1 OK "TIC-80 remoting v1"
|
package/templates/help/tic80.txt
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
|
|
2
2
|
ticbuild tic80
|
|
3
3
|
|
|
4
|
-
usage: ticbuild tic80
|
|
4
|
+
usage: ticbuild tic80 [--terminal]
|
|
5
5
|
|
|
6
6
|
Launch TIC-80 directly without building a cart
|
|
7
7
|
|
|
8
8
|
This is a convenience command to quickly open TIC-80.
|
|
9
9
|
|
|
10
|
+
Options:
|
|
11
|
+
|
|
12
|
+
--terminal Launch TIC-80, discover launched remoting session, and enter terminal mode
|
|
13
|
+
|
|
10
14
|
Forwarding to TIC-80:
|
|
11
15
|
|
|
12
16
|
Use "--" to pass arguments through to TIC-80.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
|
|
2
|
+
ticbuild tt
|
|
3
|
+
|
|
4
|
+
usage: ticbuild tt
|
|
5
|
+
|
|
6
|
+
Launch TIC-80 and automatically attach terminal mode.
|
|
7
|
+
|
|
8
|
+
This is a shortcut for:
|
|
9
|
+
|
|
10
|
+
ticbuild tic80 --terminal
|
|
11
|
+
|
|
12
|
+
Forwarding to TIC-80:
|
|
13
|
+
|
|
14
|
+
Use "--" to pass arguments through to TIC-80.
|
|
15
|
+
|
|
16
|
+
Example:
|
|
17
|
+
ticbuild tt -- --remoting-port=55111
|