@kcisoul/remotecode 0.9.1

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 (86) hide show
  1. package/README.md +358 -0
  2. package/dist/__tests__/config.test.d.ts +2 -0
  3. package/dist/__tests__/config.test.d.ts.map +1 -0
  4. package/dist/__tests__/config.test.js +84 -0
  5. package/dist/__tests__/config.test.js.map +1 -0
  6. package/dist/__tests__/format.test.d.ts +2 -0
  7. package/dist/__tests__/format.test.d.ts.map +1 -0
  8. package/dist/__tests__/format.test.js +62 -0
  9. package/dist/__tests__/format.test.js.map +1 -0
  10. package/dist/__tests__/sessions.test.d.ts +2 -0
  11. package/dist/__tests__/sessions.test.d.ts.map +1 -0
  12. package/dist/__tests__/sessions.test.js +51 -0
  13. package/dist/__tests__/sessions.test.js.map +1 -0
  14. package/dist/banner.d.ts +4 -0
  15. package/dist/banner.d.ts.map +1 -0
  16. package/dist/banner.js +154 -0
  17. package/dist/banner.js.map +1 -0
  18. package/dist/callbacks.d.ts +10 -0
  19. package/dist/callbacks.d.ts.map +1 -0
  20. package/dist/callbacks.js +184 -0
  21. package/dist/callbacks.js.map +1 -0
  22. package/dist/claude.d.ts +9 -0
  23. package/dist/claude.d.ts.map +1 -0
  24. package/dist/claude.js +117 -0
  25. package/dist/claude.js.map +1 -0
  26. package/dist/cli.d.ts +14 -0
  27. package/dist/cli.d.ts.map +1 -0
  28. package/dist/cli.js +296 -0
  29. package/dist/cli.js.map +1 -0
  30. package/dist/commands.d.ts +3 -0
  31. package/dist/commands.d.ts.map +1 -0
  32. package/dist/commands.js +107 -0
  33. package/dist/commands.js.map +1 -0
  34. package/dist/config.d.ts +24 -0
  35. package/dist/config.d.ts.map +1 -0
  36. package/dist/config.js +153 -0
  37. package/dist/config.js.map +1 -0
  38. package/dist/context.d.ts +12 -0
  39. package/dist/context.d.ts.map +1 -0
  40. package/dist/context.js +22 -0
  41. package/dist/context.js.map +1 -0
  42. package/dist/daemon.d.ts +11 -0
  43. package/dist/daemon.d.ts.map +1 -0
  44. package/dist/daemon.js +316 -0
  45. package/dist/daemon.js.map +1 -0
  46. package/dist/format.d.ts +8 -0
  47. package/dist/format.d.ts.map +1 -0
  48. package/dist/format.js +57 -0
  49. package/dist/format.js.map +1 -0
  50. package/dist/handler.d.ts +4 -0
  51. package/dist/handler.d.ts.map +1 -0
  52. package/dist/handler.js +292 -0
  53. package/dist/handler.js.map +1 -0
  54. package/dist/index.d.ts +3 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +142 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/logger.d.ts +10 -0
  59. package/dist/logger.d.ts.map +1 -0
  60. package/dist/logger.js +42 -0
  61. package/dist/logger.js.map +1 -0
  62. package/dist/session-ui.d.ts +17 -0
  63. package/dist/session-ui.d.ts.map +1 -0
  64. package/dist/session-ui.js +237 -0
  65. package/dist/session-ui.js.map +1 -0
  66. package/dist/sessions.d.ts +33 -0
  67. package/dist/sessions.d.ts.map +1 -0
  68. package/dist/sessions.js +341 -0
  69. package/dist/sessions.js.map +1 -0
  70. package/dist/setup.d.ts +3 -0
  71. package/dist/setup.d.ts.map +1 -0
  72. package/dist/setup.js +144 -0
  73. package/dist/setup.js.map +1 -0
  74. package/dist/stt.d.ts +11 -0
  75. package/dist/stt.d.ts.map +1 -0
  76. package/dist/stt.js +192 -0
  77. package/dist/stt.js.map +1 -0
  78. package/dist/telegram.d.ts +85 -0
  79. package/dist/telegram.d.ts.map +1 -0
  80. package/dist/telegram.js +97 -0
  81. package/dist/telegram.js.map +1 -0
  82. package/dist/watcher.d.ts +6 -0
  83. package/dist/watcher.d.ts.map +1 -0
  84. package/dist/watcher.js +230 -0
  85. package/dist/watcher.js.map +1 -0
  86. package/package.json +45 -0
package/dist/banner.js ADDED
@@ -0,0 +1,154 @@
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.stopBannerResize = stopBannerResize;
37
+ exports.printBanner = printBanner;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ function getVersion() {
41
+ try {
42
+ const pkgPath = path.join(__dirname, "..", "package.json");
43
+ return JSON.parse(fs.readFileSync(pkgPath, "utf-8")).version || "0.0.0";
44
+ }
45
+ catch {
46
+ return "0.0.0";
47
+ }
48
+ }
49
+ let _bannerCleanup = null;
50
+ /** Stop listening for terminal resize (call before prompts / further output). */
51
+ function stopBannerResize() {
52
+ if (_bannerCleanup) {
53
+ _bannerCleanup();
54
+ _bannerCleanup = null;
55
+ }
56
+ }
57
+ function printBanner(contentLines) {
58
+ stopBannerResize();
59
+ const version = getVersion();
60
+ const tty = process.stdout.isTTY;
61
+ const c = tty ? "\x1b[36m" : "";
62
+ const r = tty ? "\x1b[0m" : "";
63
+ const d = tty ? "\x1b[2m" : "";
64
+ const bo = tty ? "\x1b[1m" : "";
65
+ function render(cols) {
66
+ const inner = cols - 2;
67
+ const dw = (s) => {
68
+ let n = 0;
69
+ for (const ch of s) {
70
+ const cp = ch.codePointAt(0) || 0;
71
+ n += (cp >= 0x1100 && cp <= 0x115F) || (cp >= 0x2E80 && cp <= 0x33BF) ||
72
+ (cp >= 0x3400 && cp <= 0x4DBF) || (cp >= 0x4E00 && cp <= 0xA4CF) ||
73
+ (cp >= 0xAC00 && cp <= 0xD7FF) || (cp >= 0xF900 && cp <= 0xFAFF) ||
74
+ (cp >= 0xFE30 && cp <= 0xFE6F) || (cp >= 0xFF01 && cp <= 0xFF60) ||
75
+ (cp >= 0x20000 && cp <= 0x2FA1F) ? 2 : 1;
76
+ }
77
+ return n;
78
+ };
79
+ const fit = (s, w) => {
80
+ const sw = dw(s);
81
+ if (sw <= w)
82
+ return s + " ".repeat(w - sw);
83
+ let out = "", ow = 0;
84
+ for (const ch of s) {
85
+ const cw = dw(ch);
86
+ if (ow + cw > w - 1)
87
+ break;
88
+ out += ch;
89
+ ow += cw;
90
+ }
91
+ return out + "\u2026" + " ".repeat(Math.max(0, w - ow - 1));
92
+ };
93
+ const row = (content) => c + "\u2502" + r + content + c + "\u2502" + r;
94
+ const empty = () => c + "\u2502" + " ".repeat(inner) + "\u2502" + r;
95
+ const titlePlain = `RemoteCode v${version}`;
96
+ const topFill = Math.max(0, inner - titlePlain.length - 3);
97
+ const out = [
98
+ "",
99
+ c + "\u256D\u2500 " + bo + "RemoteCode" + r + c + " v" + version + " " + "\u2500".repeat(topFill) + "\u256E" + r,
100
+ empty(),
101
+ ];
102
+ if (contentLines && contentLines.length > 0) {
103
+ for (const cl of contentLines) {
104
+ if (cl.startsWith("---")) {
105
+ const label = cl.slice(3).trim();
106
+ out.push(empty());
107
+ if (label) {
108
+ const text = "-- " + label + " ---";
109
+ const pad = Math.max(0, inner - text.length - 2);
110
+ out.push(c + "\u2502" + r + d + " " + text + r + " ".repeat(pad) + c + "\u2502" + r);
111
+ }
112
+ }
113
+ else {
114
+ out.push(row(fit(" " + cl, inner)));
115
+ }
116
+ }
117
+ out.push(empty());
118
+ }
119
+ out.push(c + "\u2570" + "\u2500".repeat(inner) + "\u256F" + r);
120
+ out.push("");
121
+ return out;
122
+ }
123
+ // Track visible width of each line from previous render
124
+ // so we can calculate how many visual rows they occupy after wrapping
125
+ let prevWidths = [];
126
+ function draw() {
127
+ const cols = Math.max(24, process.stdout.columns || 80);
128
+ // Erase previous render, accounting for line wrapping
129
+ if (prevWidths.length > 0 && tty) {
130
+ let up = 0;
131
+ for (const w of prevWidths) {
132
+ up += w === 0 ? 1 : Math.ceil(w / cols);
133
+ }
134
+ process.stdout.write(`\x1b[${up}A\x1b[0J`);
135
+ }
136
+ const lines = render(cols);
137
+ // Store visible widths (ANSI stripped) for next redraw
138
+ prevWidths = lines.map((l) => l.replace(/\x1b\[[0-9;]*m/g, "").length);
139
+ process.stdout.write(lines.join("\n") + "\n");
140
+ }
141
+ draw();
142
+ // Listen for terminal resize and redraw
143
+ if (tty) {
144
+ let active = true;
145
+ const onResize = () => { if (active)
146
+ draw(); };
147
+ process.stdout.on("resize", onResize);
148
+ _bannerCleanup = () => {
149
+ active = false;
150
+ process.stdout.removeListener("resize", onResize);
151
+ };
152
+ }
153
+ }
154
+ //# sourceMappingURL=banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.js","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { CallbackQuery } from "./telegram";
2
+ import { HandlerContext } from "./context";
3
+ export declare function buildProjectListMarkup(): {
4
+ inline_keyboard: Array<Array<{
5
+ text: string;
6
+ callback_data: string;
7
+ }>>;
8
+ };
9
+ export declare function handleCallbackQuery(callback: CallbackQuery, ctx: HandlerContext): Promise<void>;
10
+ //# sourceMappingURL=callbacks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callbacks.d.ts","sourceRoot":"","sources":["../src/callbacks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAKd,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAiB,MAAM,WAAW,CAAC;AAsB1D,wBAAgB,sBAAsB,IAAI;IAAE,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAA;CAAE,CAoBnH;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BrG"}
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildProjectListMarkup = buildProjectListMarkup;
4
+ exports.handleCallbackQuery = handleCallbackQuery;
5
+ const telegram_1 = require("./telegram");
6
+ const logger_1 = require("./logger");
7
+ const context_1 = require("./context");
8
+ const sessions_1 = require("./sessions");
9
+ const session_ui_1 = require("./session-ui");
10
+ function buildProjectListMarkup() {
11
+ const projects = (0, sessions_1.discoverProjects)();
12
+ const buttons = [];
13
+ if (projects.length > 0) {
14
+ for (const p of projects) {
15
+ let label = p.projectName;
16
+ if (label.length > 16)
17
+ label = label.slice(0, 13) + "..";
18
+ const timeAgo = (0, session_ui_1.formatTimeAgo)(p.lastModified);
19
+ const count = p.sessionCount > 5 ? "5+" : String(p.sessionCount);
20
+ buttons.push([
21
+ { text: `${label} [${count}] ${timeAgo}`, callback_data: `proj:${p.encodedDir}` },
22
+ ]);
23
+ }
24
+ }
25
+ else {
26
+ buttons.push([{ text: "No projects found", callback_data: "proj:noop" }]);
27
+ }
28
+ buttons.push([{ text: "Close", callback_data: "proj:close" }]);
29
+ return { inline_keyboard: buttons };
30
+ }
31
+ async function handleCallbackQuery(callback, ctx) {
32
+ const user = callback.from;
33
+ try {
34
+ await (0, telegram_1.answerCallbackQuery)(ctx.telegram, callback.id);
35
+ }
36
+ catch { /* ignore */ }
37
+ if (!(0, context_1.isUserAllowed)(user.id, user.username, ctx.allowedIds, ctx.allowedNames)) {
38
+ const chatId = callback.message?.chat.id;
39
+ const messageId = callback.message?.message_id;
40
+ if (chatId !== undefined && messageId !== undefined) {
41
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, "Not authorized.", { replyToMessageId: messageId });
42
+ }
43
+ return;
44
+ }
45
+ const data = (callback.data || "").trim();
46
+ const chatId = callback.message?.chat.id;
47
+ const messageId = callback.message?.message_id;
48
+ if (!data || chatId === undefined || messageId === undefined)
49
+ return;
50
+ try {
51
+ logger_1.logger.debug("callback", `chat_id=${chatId} message_id=${messageId} data=${data}`);
52
+ if (data.startsWith("proj:"))
53
+ return handleProjectCallback(data, chatId, messageId, ctx);
54
+ if (data.startsWith("sessdel:"))
55
+ return handleSessionDeleteCallback(data, chatId, messageId, ctx);
56
+ if (data.startsWith("sess:"))
57
+ return handleSessionCallback(data, chatId, messageId, ctx);
58
+ }
59
+ catch (err) {
60
+ logger_1.logger.error("callback", `Error in handleCallbackQuery: ${(0, logger_1.errorMessage)(err)}`, err);
61
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, `Error: ${(0, logger_1.errorMessage)(err)}`, { replyToMessageId: messageId });
62
+ }
63
+ }
64
+ async function handleProjectCallback(data, chatId, messageId, ctx) {
65
+ const action = data.slice("proj:".length);
66
+ if (action === "noop")
67
+ return;
68
+ if (action === "list" || action === "back") {
69
+ try {
70
+ await (0, telegram_1.editMessageText)(ctx.telegram, chatId, messageId, "Projects:", { replyMarkup: buildProjectListMarkup() });
71
+ }
72
+ catch { /* ignore */ }
73
+ return;
74
+ }
75
+ if (action === "close") {
76
+ try {
77
+ await (0, telegram_1.deleteMessage)(ctx.telegram, chatId, messageId);
78
+ }
79
+ catch { /* ignore */ }
80
+ return;
81
+ }
82
+ if (action.startsWith("new:")) {
83
+ const dir = action.slice("new:".length);
84
+ const projectPath = (0, sessions_1.decodeProjectPath)(dir);
85
+ (0, sessions_1.createNewSession)(ctx.sessionsFile, projectPath);
86
+ const name = projectPath.split("/").pop() || projectPath;
87
+ try {
88
+ await (0, telegram_1.deleteMessage)(ctx.telegram, chatId, messageId);
89
+ }
90
+ catch { /* ignore */ }
91
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, `New session in ${name}`, { replyMarkup: (0, session_ui_1.sessionsReplyKeyboard)(ctx.sessionsFile) });
92
+ return;
93
+ }
94
+ const encodedDir = action;
95
+ const sessions = (0, sessions_1.discoverProjectSessions)(encodedDir, 5);
96
+ const activeId = (0, sessions_1.loadActiveSessionId)(ctx.sessionsFile);
97
+ const buttons = (0, session_ui_1.buildSessionGrid)(sessions, activeId, { showDir: false });
98
+ if (sessions.length === 0) {
99
+ buttons.push([{ text: "No sessions", callback_data: "proj:noop" }]);
100
+ }
101
+ buttons.push([
102
+ { text: "\u2190 Back", callback_data: "proj:back" },
103
+ { text: "+ New", callback_data: `proj:new:${encodedDir}` },
104
+ { text: "Close", callback_data: "proj:close" },
105
+ ]);
106
+ const projectName = sessions.length > 0 ? sessions[0].projectName : encodedDir;
107
+ try {
108
+ await (0, telegram_1.editMessageText)(ctx.telegram, chatId, messageId, `${projectName} sessions:`, {
109
+ replyMarkup: { inline_keyboard: buttons },
110
+ });
111
+ }
112
+ catch { /* ignore */ }
113
+ }
114
+ async function handleSessionCallback(data, chatId, messageId, ctx) {
115
+ const action = data.slice("sess:".length);
116
+ if (action === "noop")
117
+ return;
118
+ if (action === "list") {
119
+ const sessions = (0, sessions_1.discoverSessions)(5);
120
+ const activeId = (0, sessions_1.loadActiveSessionId)(ctx.sessionsFile);
121
+ const display = (0, session_ui_1.buildSessionDisplay)(sessions, activeId);
122
+ try {
123
+ await (0, telegram_1.editMessageText)(ctx.telegram, chatId, messageId, display.text, {
124
+ parseMode: "HTML",
125
+ replyMarkup: { inline_keyboard: display.buttons },
126
+ });
127
+ }
128
+ catch { /* ignore */ }
129
+ return;
130
+ }
131
+ if (action === "close") {
132
+ try {
133
+ await (0, telegram_1.deleteMessage)(ctx.telegram, chatId, messageId);
134
+ }
135
+ catch { /* ignore */ }
136
+ return;
137
+ }
138
+ if (action === "new") {
139
+ (0, sessions_1.createNewSession)(ctx.sessionsFile);
140
+ try {
141
+ await (0, telegram_1.deleteMessage)(ctx.telegram, chatId, messageId);
142
+ }
143
+ catch { /* ignore */ }
144
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, "New session started.", { replyMarkup: (0, session_ui_1.sessionsReplyKeyboard)(ctx.sessionsFile) });
145
+ return;
146
+ }
147
+ const session = (0, sessions_1.findSession)(action);
148
+ if (!session) {
149
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, "Session not found.", { replyToMessageId: messageId });
150
+ return;
151
+ }
152
+ (0, sessions_1.saveActiveSessionId)(ctx.sessionsFile, session.sessionId);
153
+ (0, sessions_1.saveSessionCwd)(ctx.sessionsFile, session.project);
154
+ const label = (0, session_ui_1.formatSessionLabel)(session);
155
+ const pages = (0, session_ui_1.readLastTurns)(session.sessionId, 4);
156
+ const text = pages.length > 0 ? `Switched to: ${label}\n\n${pages[0]}` : `Switched to: ${label}`;
157
+ try {
158
+ await (0, telegram_1.deleteMessage)(ctx.telegram, chatId, messageId);
159
+ }
160
+ catch { /* ignore */ }
161
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, text, {
162
+ replyMarkup: (0, session_ui_1.sessionsReplyKeyboard)(ctx.sessionsFile),
163
+ parseMode: pages.length > 0 ? "HTML" : undefined,
164
+ });
165
+ }
166
+ async function handleSessionDeleteCallback(data, chatId, messageId, ctx) {
167
+ const sessionId = data.slice("sessdel:".length);
168
+ if ((0, sessions_1.loadActiveSessionId)(ctx.sessionsFile) === sessionId) {
169
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, "Cannot delete the active session.", { replyToMessageId: messageId });
170
+ return;
171
+ }
172
+ const session = (0, sessions_1.findSession)(sessionId);
173
+ const label = session ? (0, session_ui_1.formatSessionLabel)(session) : sessionId.slice(0, 8);
174
+ if (!(0, sessions_1.deleteSession)(sessionId)) {
175
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, "Session file not found.", { replyToMessageId: messageId });
176
+ return;
177
+ }
178
+ try {
179
+ await (0, telegram_1.deleteMessage)(ctx.telegram, chatId, messageId);
180
+ }
181
+ catch { /* ignore */ }
182
+ await (0, telegram_1.sendMessage)(ctx.telegram, chatId, `Deleted: ${label}`, { replyMarkup: (0, session_ui_1.sessionsReplyKeyboard)(ctx.sessionsFile) });
183
+ }
184
+ //# sourceMappingURL=callbacks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callbacks.js","sourceRoot":"","sources":["../src/callbacks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface ClaudeOptions {
2
+ timeoutMs?: number;
3
+ imagePaths?: string[];
4
+ cwd?: string;
5
+ yolo?: boolean;
6
+ onBusy?: () => Promise<void> | void;
7
+ }
8
+ export declare function askClaude(prompt: string, sessionId: string, options?: ClaudeOptions): Promise<string>;
9
+ //# sourceMappingURL=claude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACrC;AAuHD,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAEjB"}
package/dist/claude.js ADDED
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.askClaude = askClaude;
4
+ const child_process_1 = require("child_process");
5
+ const logger_1 = require("./logger");
6
+ // Track active child process for cleanup on exit
7
+ let activeChild = null;
8
+ function cleanup() {
9
+ if (activeChild) {
10
+ activeChild.kill("SIGKILL");
11
+ activeChild = null;
12
+ }
13
+ }
14
+ process.on("SIGINT", cleanup);
15
+ process.on("SIGTERM", cleanup);
16
+ process.on("exit", cleanup);
17
+ function buildCmd(args, prompt, yolo) {
18
+ const cmd = [...args, "--print"];
19
+ if (yolo) {
20
+ cmd.push("--dangerously-skip-permissions");
21
+ }
22
+ cmd.push(prompt);
23
+ return cmd;
24
+ }
25
+ const DEFAULT_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes
26
+ function runClaude(args, timeoutMs, cwd) {
27
+ const effectiveTimeout = timeoutMs || DEFAULT_TIMEOUT_MS;
28
+ return new Promise((resolve, reject) => {
29
+ logger_1.logger.debug("claude", `spawn: claude ${args.map(a => a.includes("\n") ? JSON.stringify(a) : a).join(" ")}`);
30
+ const child = (0, child_process_1.spawn)("claude", args, {
31
+ stdio: ["ignore", "pipe", "pipe"],
32
+ cwd,
33
+ });
34
+ activeChild = child;
35
+ const stdoutChunks = [];
36
+ const stderrChunks = [];
37
+ let settled = false;
38
+ child.stdout.on("data", (chunk) => stdoutChunks.push(chunk));
39
+ child.stderr.on("data", (chunk) => stderrChunks.push(chunk));
40
+ const timer = setTimeout(() => {
41
+ child.kill("SIGTERM");
42
+ // Force kill after 3s if still alive
43
+ setTimeout(() => {
44
+ if (!child.killed)
45
+ child.kill("SIGKILL");
46
+ }, 3000);
47
+ }, effectiveTimeout);
48
+ function finish() {
49
+ if (settled)
50
+ return;
51
+ settled = true;
52
+ clearTimeout(timer);
53
+ if (activeChild === child)
54
+ activeChild = null;
55
+ }
56
+ child.on("close", (code) => {
57
+ finish();
58
+ const stdout = Buffer.concat(stdoutChunks).toString("utf-8").trim();
59
+ const stderr = Buffer.concat(stderrChunks).toString("utf-8").trim();
60
+ logger_1.logger.debug("claude", `exited code=${code} stdout=${stdout.length} stderr=${stderr.slice(0, 200)}`);
61
+ if (code !== 0) {
62
+ const detail = stderr || stdout || `exit code ${code}`;
63
+ reject(new Error(`Claude failed: ${detail}`));
64
+ return;
65
+ }
66
+ if (!stdout) {
67
+ reject(new Error("Claude failed: empty response"));
68
+ return;
69
+ }
70
+ resolve(stdout);
71
+ });
72
+ child.on("error", (err) => {
73
+ finish();
74
+ reject(new Error(`Claude failed: ${err.message}`));
75
+ });
76
+ });
77
+ }
78
+ function sleep(ms) {
79
+ return new Promise((resolve) => setTimeout(resolve, ms));
80
+ }
81
+ async function runWithFallback(prompt, sessionId, options) {
82
+ const resumeArgs = buildCmd(["--resume", sessionId], prompt, options.yolo);
83
+ try {
84
+ return await runClaude(resumeArgs, options.timeoutMs, options.cwd);
85
+ }
86
+ catch (err) {
87
+ const message = (0, logger_1.errorMessage)(err);
88
+ logger_1.logger.debug("claude", `resume failed: ${message}`);
89
+ if (!message.includes("No conversation found") && !message.includes("already in use") && !message.includes("empty response")) {
90
+ throw err;
91
+ }
92
+ if (message.includes("No conversation found") || message.includes("empty response")) {
93
+ logger_1.logger.info("claude", `creating new session ${sessionId}`);
94
+ const newArgs = buildCmd(["--session-id", sessionId], prompt, options.yolo);
95
+ return await runClaude(newArgs, options.timeoutMs, options.cwd);
96
+ }
97
+ }
98
+ // "already in use" - notify and retry up to 5 times
99
+ await options.onBusy?.();
100
+ for (let i = 0; i < 5; i++) {
101
+ logger_1.logger.warn("claude", `Session ${sessionId.slice(0, 8)} in use, retrying (${i + 1}/5)...`);
102
+ await sleep(2000);
103
+ try {
104
+ return await runClaude(resumeArgs, options.timeoutMs, options.cwd);
105
+ }
106
+ catch (err) {
107
+ if (!(0, logger_1.errorMessage)(err).includes("already in use")) {
108
+ throw err;
109
+ }
110
+ }
111
+ }
112
+ throw new Error("Session is busy \u2014 Claude Code is active on host. Try again later.");
113
+ }
114
+ async function askClaude(prompt, sessionId, options = {}) {
115
+ return runWithFallback(prompt, sessionId, options);
116
+ }
117
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../src/claude.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ export declare function cmdStart(): Promise<void>;
2
+ export declare function cmdStop(): Promise<void>;
3
+ export declare function cmdRestart(): Promise<void>;
4
+ export declare function cmdStatus(): void;
5
+ interface LogsOptions {
6
+ lines: number;
7
+ follow: boolean;
8
+ level: string | null;
9
+ tag: string | null;
10
+ }
11
+ export declare function cmdLogs(opts: LogsOptions): void;
12
+ export declare function cmdConfig(): Promise<void>;
13
+ export {};
14
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAWA,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAiB9C;AAED,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAqB7C;AAWD,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAMhD;AAcD,wBAAgB,SAAS,IAAI,IAAI,CAsEhC;AAsBD,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAWD,wBAAgB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CA4C/C;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAW/C"}