remodex-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/LICENSE +12 -0
  2. package/README.md +105 -0
  3. package/dist/archive-store.d.ts +28 -0
  4. package/dist/archive-store.js +68 -0
  5. package/dist/archive-store.js.map +1 -0
  6. package/dist/cli.d.ts +2 -0
  7. package/dist/cli.js +88 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/codex-process.d.ts +186 -0
  10. package/dist/codex-process.js +2111 -0
  11. package/dist/codex-process.js.map +1 -0
  12. package/dist/debug-trace-store.d.ts +15 -0
  13. package/dist/debug-trace-store.js +78 -0
  14. package/dist/debug-trace-store.js.map +1 -0
  15. package/dist/doctor.d.ts +58 -0
  16. package/dist/doctor.js +670 -0
  17. package/dist/doctor.js.map +1 -0
  18. package/dist/firebase-auth.d.ts +35 -0
  19. package/dist/firebase-auth.js +132 -0
  20. package/dist/firebase-auth.js.map +1 -0
  21. package/dist/gallery-store.d.ts +67 -0
  22. package/dist/gallery-store.js +333 -0
  23. package/dist/gallery-store.js.map +1 -0
  24. package/dist/git-assist.d.ts +7 -0
  25. package/dist/git-assist.js +51 -0
  26. package/dist/git-assist.js.map +1 -0
  27. package/dist/git-operations.d.ts +63 -0
  28. package/dist/git-operations.js +292 -0
  29. package/dist/git-operations.js.map +1 -0
  30. package/dist/image-store.d.ts +23 -0
  31. package/dist/image-store.js +142 -0
  32. package/dist/image-store.js.map +1 -0
  33. package/dist/index.d.ts +1 -0
  34. package/dist/index.js +198 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/mdns.d.ts +7 -0
  37. package/dist/mdns.js +49 -0
  38. package/dist/mdns.js.map +1 -0
  39. package/dist/parser.d.ts +620 -0
  40. package/dist/parser.js +423 -0
  41. package/dist/parser.js.map +1 -0
  42. package/dist/path-utils.d.ts +4 -0
  43. package/dist/path-utils.js +34 -0
  44. package/dist/path-utils.js.map +1 -0
  45. package/dist/project-history.d.ts +10 -0
  46. package/dist/project-history.js +73 -0
  47. package/dist/project-history.js.map +1 -0
  48. package/dist/prompt-history-backup.d.ts +15 -0
  49. package/dist/prompt-history-backup.js +46 -0
  50. package/dist/prompt-history-backup.js.map +1 -0
  51. package/dist/proxy.d.ts +15 -0
  52. package/dist/proxy.js +95 -0
  53. package/dist/proxy.js.map +1 -0
  54. package/dist/push-i18n.d.ts +7 -0
  55. package/dist/push-i18n.js +75 -0
  56. package/dist/push-i18n.js.map +1 -0
  57. package/dist/push-relay.d.ts +29 -0
  58. package/dist/push-relay.js +70 -0
  59. package/dist/push-relay.js.map +1 -0
  60. package/dist/recording-store.d.ts +51 -0
  61. package/dist/recording-store.js +158 -0
  62. package/dist/recording-store.js.map +1 -0
  63. package/dist/screenshot.d.ts +28 -0
  64. package/dist/screenshot.js +98 -0
  65. package/dist/screenshot.js.map +1 -0
  66. package/dist/sdk-process.d.ts +180 -0
  67. package/dist/sdk-process.js +960 -0
  68. package/dist/sdk-process.js.map +1 -0
  69. package/dist/session.d.ts +144 -0
  70. package/dist/session.js +687 -0
  71. package/dist/session.js.map +1 -0
  72. package/dist/sessions-index.d.ts +130 -0
  73. package/dist/sessions-index.js +1817 -0
  74. package/dist/sessions-index.js.map +1 -0
  75. package/dist/setup-launchd.d.ts +9 -0
  76. package/dist/setup-launchd.js +115 -0
  77. package/dist/setup-launchd.js.map +1 -0
  78. package/dist/setup-systemd.d.ts +9 -0
  79. package/dist/setup-systemd.js +122 -0
  80. package/dist/setup-systemd.js.map +1 -0
  81. package/dist/startup-info.d.ts +9 -0
  82. package/dist/startup-info.js +116 -0
  83. package/dist/startup-info.js.map +1 -0
  84. package/dist/usage.d.ts +69 -0
  85. package/dist/usage.js +545 -0
  86. package/dist/usage.js.map +1 -0
  87. package/dist/version.d.ts +13 -0
  88. package/dist/version.js +43 -0
  89. package/dist/version.js.map +1 -0
  90. package/dist/websocket.d.ts +132 -0
  91. package/dist/websocket.js +3551 -0
  92. package/dist/websocket.js.map +1 -0
  93. package/dist/worktree-store.d.ts +26 -0
  94. package/dist/worktree-store.js +61 -0
  95. package/dist/worktree-store.js.map +1 -0
  96. package/dist/worktree.d.ts +47 -0
  97. package/dist/worktree.js +330 -0
  98. package/dist/worktree.js.map +1 -0
  99. package/package.json +62 -0
@@ -0,0 +1,330 @@
1
+ import { execFileSync, execSync } from "node:child_process";
2
+ import { existsSync, readFileSync, mkdirSync, cpSync, readdirSync, realpathSync } from "node:fs";
3
+ import { join, dirname, relative, resolve, posix, win32 } from "node:path";
4
+ // ---- .gtrconfig Parser ----
5
+ /** Parse a .gtrconfig file (gitconfig format) from the given directory. */
6
+ export function parseGtrConfig(projectPath) {
7
+ const config = {
8
+ copy: { include: [], exclude: [], includeDirs: [], excludeDirs: [] },
9
+ hook: { postCreate: [], preRemove: [] },
10
+ };
11
+ const configPath = join(projectPath, ".gtrconfig");
12
+ if (!existsSync(configPath))
13
+ return config;
14
+ const content = readFileSync(configPath, "utf-8");
15
+ let currentSection = "";
16
+ for (const rawLine of content.split("\n")) {
17
+ const line = rawLine.trim();
18
+ if (line === "" || line.startsWith("#") || line.startsWith(";"))
19
+ continue;
20
+ // Section header: [copy], [hook], etc.
21
+ const sectionMatch = line.match(/^\[(\w+)\]$/);
22
+ if (sectionMatch) {
23
+ currentSection = sectionMatch[1].toLowerCase();
24
+ continue;
25
+ }
26
+ // Key = value
27
+ const kvMatch = line.match(/^(\w+)\s*=\s*(.+)$/);
28
+ if (!kvMatch)
29
+ continue;
30
+ const key = kvMatch[1].toLowerCase();
31
+ const value = kvMatch[2].trim();
32
+ if (currentSection === "copy") {
33
+ switch (key) {
34
+ case "include":
35
+ config.copy.include.push(value);
36
+ break;
37
+ case "exclude":
38
+ config.copy.exclude.push(value);
39
+ break;
40
+ case "includedirs":
41
+ config.copy.includeDirs.push(value);
42
+ break;
43
+ case "excludedirs":
44
+ config.copy.excludeDirs.push(value);
45
+ break;
46
+ }
47
+ }
48
+ else if (currentSection === "hook" || currentSection === "hooks") {
49
+ switch (key) {
50
+ case "postcreate":
51
+ config.hook.postCreate.push(value);
52
+ break;
53
+ case "preremove":
54
+ config.hook.preRemove.push(value);
55
+ break;
56
+ }
57
+ }
58
+ }
59
+ return config;
60
+ }
61
+ // ---- Glob Matching ----
62
+ const REGEX_SPECIAL = /[\\.+^$()|[\]]/g;
63
+ const WINDOWS_PATH_PREFIX = /^(?:[A-Za-z]:[\\/]|\\\\)/;
64
+ function getPathApiFor(pathValue) {
65
+ return WINDOWS_PATH_PREFIX.test(pathValue) || pathValue.includes("\\")
66
+ ? win32
67
+ : posix;
68
+ }
69
+ function normalizePathForMatching(pathValue) {
70
+ return pathValue.replaceAll("\\", "/");
71
+ }
72
+ function isSamePathOrChild(pathValue, rootPath) {
73
+ const normalizedPath = normalizePathForMatching(pathValue);
74
+ const normalizedRoot = normalizePathForMatching(rootPath).replace(/\/+$/, "");
75
+ return (normalizedPath === normalizedRoot
76
+ || normalizedPath.startsWith(`${normalizedRoot}/`));
77
+ }
78
+ /**
79
+ * Simple glob pattern matcher supporting:
80
+ * - `*` matches any characters except `/`
81
+ * - `**` or `*` followed by `*` matches any path segments (including none)
82
+ * - `?` matches a single character except `/`
83
+ */
84
+ export function matchGlob(pattern, filePath) {
85
+ let regex = "";
86
+ let i = 0;
87
+ while (i < pattern.length) {
88
+ if (pattern[i] === "*" && pattern[i + 1] === "*") {
89
+ if (pattern[i + 2] === "/") {
90
+ // zero or more directory segments
91
+ regex += "(.*/)?";
92
+ i += 3;
93
+ }
94
+ else {
95
+ // match everything
96
+ regex += ".*";
97
+ i += 2;
98
+ }
99
+ }
100
+ else if (pattern[i] === "*") {
101
+ regex += "[^/]*";
102
+ i++;
103
+ }
104
+ else if (pattern[i] === "?") {
105
+ regex += "[^/]";
106
+ i++;
107
+ }
108
+ else {
109
+ regex += pattern[i].replace(REGEX_SPECIAL, "\\$&");
110
+ i++;
111
+ }
112
+ }
113
+ return new RegExp("^" + regex + "$").test(filePath);
114
+ }
115
+ // ---- Worktree Path Computation ----
116
+ /** Compute the worktrees root directory for a project. */
117
+ export function worktreesRoot(projectPath) {
118
+ const pathApi = getPathApiFor(projectPath);
119
+ return pathApi.join(pathApi.dirname(projectPath), `${pathApi.basename(projectPath)}-worktrees`);
120
+ }
121
+ /** Compute the full worktree path for a branch. Slashes in branch names are converted to dashes for the directory name. */
122
+ export function worktreePath(projectPath, branch) {
123
+ const dirName = branch.replace(/\//g, "-");
124
+ const pathApi = getPathApiFor(projectPath);
125
+ return pathApi.join(worktreesRoot(projectPath), dirName);
126
+ }
127
+ /** Generate a default branch name for a session. */
128
+ export function defaultBranch(sessionId) {
129
+ return "remodex/" + sessionId;
130
+ }
131
+ // ---- File Copy ----
132
+ /** Walk a directory recursively and return relative file paths. */
133
+ function walkFiles(dir, baseDir) {
134
+ const base = baseDir ?? dir;
135
+ const results = [];
136
+ try {
137
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
138
+ const fullPath = join(dir, entry.name);
139
+ if (entry.isDirectory()) {
140
+ results.push(...walkFiles(fullPath, base));
141
+ }
142
+ else {
143
+ results.push(normalizePathForMatching(relative(base, fullPath)));
144
+ }
145
+ }
146
+ }
147
+ catch { /* skip unreadable directories */ }
148
+ return results;
149
+ }
150
+ /** Copy files from source to destination based on .gtrconfig patterns. */
151
+ export function copyConfiguredFiles(projectPath, destPath, config) {
152
+ const { include, exclude, includeDirs, excludeDirs } = config.copy;
153
+ // Copy individual files matching include/exclude patterns
154
+ if (include.length > 0) {
155
+ const allFiles = walkFiles(projectPath);
156
+ for (const file of allFiles) {
157
+ const included = include.some((pat) => matchGlob(pat, file));
158
+ const excluded = exclude.some((pat) => matchGlob(pat, file));
159
+ if (included && !excluded) {
160
+ const srcFile = join(projectPath, file);
161
+ const destFile = join(destPath, file);
162
+ mkdirSync(dirname(destFile), { recursive: true });
163
+ cpSync(srcFile, destFile, { force: true });
164
+ }
165
+ }
166
+ }
167
+ // Copy entire directories matching includeDirs/excludeDirs
168
+ if (includeDirs.length > 0) {
169
+ try {
170
+ const entries = readdirSync(projectPath, { withFileTypes: true });
171
+ for (const entry of entries) {
172
+ if (!entry.isDirectory())
173
+ continue;
174
+ const included = includeDirs.some((pat) => matchGlob(pat, entry.name));
175
+ const excluded = excludeDirs.some((pat) => matchGlob(pat, entry.name));
176
+ if (included && !excluded) {
177
+ const srcDir = join(projectPath, entry.name);
178
+ const destDir = join(destPath, entry.name);
179
+ cpSync(srcDir, destDir, { recursive: true, force: true });
180
+ }
181
+ }
182
+ }
183
+ catch { /* skip if project directory can't be listed */ }
184
+ }
185
+ }
186
+ // ---- Config Resolution ----
187
+ /** Resolve worktree configuration from .gtrconfig. */
188
+ export function getWorktreeConfig(projectPath) {
189
+ return parseGtrConfig(projectPath);
190
+ }
191
+ // ---- Core Worktree Operations ----
192
+ /** Resolve a project path, following symlinks to get the real path. */
193
+ function resolveProject(projectPath) {
194
+ return realpathSync(resolve(projectPath));
195
+ }
196
+ /** Create a git worktree for a session. */
197
+ export function createWorktree(projectPath, sessionId, branch) {
198
+ const resolvedProject = resolveProject(projectPath);
199
+ const branchName = branch || defaultBranch(sessionId);
200
+ const wtPath = worktreePath(resolvedProject, branchName);
201
+ // Ensure the worktrees root directory exists
202
+ mkdirSync(worktreesRoot(resolvedProject), { recursive: true });
203
+ // Check if the branch already exists
204
+ let branchExists = false;
205
+ try {
206
+ execFileSync("git", ["rev-parse", "--verify", branchName], {
207
+ cwd: resolvedProject,
208
+ stdio: "ignore",
209
+ });
210
+ branchExists = true;
211
+ }
212
+ catch { /* branch does not exist */ }
213
+ // Create worktree
214
+ if (branchExists) {
215
+ execFileSync("git", ["worktree", "add", wtPath, branchName], {
216
+ cwd: resolvedProject,
217
+ encoding: "utf-8",
218
+ });
219
+ }
220
+ else {
221
+ execFileSync("git", ["worktree", "add", "-b", branchName, wtPath], {
222
+ cwd: resolvedProject,
223
+ encoding: "utf-8",
224
+ });
225
+ }
226
+ // Parse .gtrconfig and apply copy/hooks
227
+ const config = getWorktreeConfig(resolvedProject);
228
+ copyConfiguredFiles(resolvedProject, wtPath, config);
229
+ // Run postCreate hooks
230
+ for (const cmd of config.hook.postCreate) {
231
+ try {
232
+ execSync(cmd, { cwd: wtPath, encoding: "utf-8", stdio: "pipe" });
233
+ }
234
+ catch (err) {
235
+ console.error("[worktree] postCreate hook failed: " + cmd, err);
236
+ }
237
+ }
238
+ // Get HEAD commit
239
+ let head;
240
+ try {
241
+ head = execFileSync("git", ["rev-parse", "HEAD"], {
242
+ cwd: wtPath,
243
+ encoding: "utf-8",
244
+ }).trim();
245
+ }
246
+ catch { /* ignore */ }
247
+ return { worktreePath: wtPath, branch: branchName, projectPath: resolvedProject, head };
248
+ }
249
+ /** Remove a git worktree. */
250
+ export function removeWorktree(projectPath, wtPath) {
251
+ const resolvedProject = resolveProject(projectPath);
252
+ // Run preRemove hooks
253
+ const config = getWorktreeConfig(resolvedProject);
254
+ for (const cmd of config.hook.preRemove) {
255
+ try {
256
+ execSync(cmd, { cwd: wtPath, encoding: "utf-8", stdio: "pipe" });
257
+ }
258
+ catch (err) {
259
+ console.error("[worktree] preRemove hook failed: " + cmd, err);
260
+ }
261
+ }
262
+ execFileSync("git", ["worktree", "remove", wtPath, "--force"], {
263
+ cwd: resolvedProject,
264
+ encoding: "utf-8",
265
+ });
266
+ }
267
+ /** List worktrees for a project (only those under <project>-worktrees/). */
268
+ export function listWorktrees(projectPath) {
269
+ const resolvedProject = resolveProject(projectPath);
270
+ const wtRoot = worktreesRoot(resolvedProject);
271
+ let output;
272
+ try {
273
+ output = execFileSync("git", ["worktree", "list", "--porcelain"], {
274
+ cwd: resolvedProject,
275
+ encoding: "utf-8",
276
+ });
277
+ }
278
+ catch {
279
+ return [];
280
+ }
281
+ const worktrees = [];
282
+ let currentPath = "";
283
+ let currentHead = "";
284
+ let currentBranch = "";
285
+ for (const line of output.split("\n")) {
286
+ if (line.startsWith("worktree ")) {
287
+ currentPath = line.slice("worktree ".length);
288
+ }
289
+ else if (line.startsWith("HEAD ")) {
290
+ currentHead = line.slice("HEAD ".length);
291
+ }
292
+ else if (line.startsWith("branch ")) {
293
+ // branch refs/heads/feature/x -> feature/x
294
+ currentBranch = line.slice("branch ".length).replace(/^refs\/heads\//, "");
295
+ }
296
+ else if (line === "") {
297
+ // End of entry
298
+ if (currentPath && isSamePathOrChild(currentPath, wtRoot)) {
299
+ worktrees.push({
300
+ worktreePath: currentPath,
301
+ branch: currentBranch,
302
+ projectPath: resolvedProject,
303
+ head: currentHead || undefined,
304
+ });
305
+ }
306
+ currentPath = "";
307
+ currentHead = "";
308
+ currentBranch = "";
309
+ }
310
+ }
311
+ return worktrees;
312
+ }
313
+ /** Get the current branch of the main repo. */
314
+ export function getMainBranch(projectPath) {
315
+ const resolvedProject = resolveProject(projectPath);
316
+ try {
317
+ return execFileSync("git", ["branch", "--show-current"], {
318
+ cwd: resolvedProject,
319
+ encoding: "utf-8",
320
+ }).trim();
321
+ }
322
+ catch {
323
+ return "";
324
+ }
325
+ }
326
+ /** Check if a worktree path exists on disk. */
327
+ export function worktreeExists(wtPath) {
328
+ return existsSync(wtPath);
329
+ }
330
+ //# sourceMappingURL=worktree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree.js","sourceRoot":"","sources":["../src/worktree.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "remodex-cli",
3
+ "version": "1.0.0",
4
+ "description": "Bridge server that connects Claude Code and Codex CLI to mobile devices via WebSocket",
5
+ "private": false,
6
+ "type": "module",
7
+ "license": "SEE LICENSE IN LICENSE",
8
+ "author": "ESCANOR-001",
9
+ "bugs": {
10
+ "url": "https://github.com/ESCANOR-001/ccpocket/issues"
11
+ },
12
+ "keywords": [
13
+ "claude-code",
14
+ "codex",
15
+ "bridge",
16
+ "websocket",
17
+ "mobile",
18
+ "cli",
19
+ "remote",
20
+ "coding-agent"
21
+ ],
22
+ "bin": "./dist/cli.js",
23
+ "main": "dist/index.js",
24
+ "files": [
25
+ "dist",
26
+ "LICENSE"
27
+ ],
28
+ "engines": {
29
+ "node": ">=18.0.0"
30
+ },
31
+ "publishConfig": {
32
+ "access": "public"
33
+ },
34
+ "scripts": {
35
+ "dev": "env -u CLAUDECODE tsx src/index.ts",
36
+ "build": "tsc",
37
+ "start": "node dist/index.js",
38
+ "prepublishOnly": "tsc",
39
+ "test": "vitest run",
40
+ "test:windows-smoke": "vitest run src/path-utils.test.ts src/websocket.test.ts src/codex-process.test.ts",
41
+ "test:watch": "vitest",
42
+ "test:coverage": "vitest run --coverage",
43
+ "doctor": "tsx src/cli.ts doctor"
44
+ },
45
+ "dependencies": {
46
+ "@anthropic-ai/claude-agent-sdk": "^0.2.92",
47
+ "bonjour-service": "^1.3.0",
48
+ "qrcode": "^1.5.4",
49
+ "socks": "^2.8.7",
50
+ "undici": "^7.24.4",
51
+ "ws": "^8.18.0"
52
+ },
53
+ "devDependencies": {
54
+ "@types/node": "^22.0.0",
55
+ "@types/qrcode": "^1.5.6",
56
+ "@types/ws": "^8.5.0",
57
+ "@vitest/coverage-v8": "^4.0.18",
58
+ "tsx": "^4.19.0",
59
+ "typescript": "^5.7.0",
60
+ "vitest": "^4.0.18"
61
+ }
62
+ }