chad-bridge 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,64 @@
1
+ # Chad Bridge
2
+
3
+ Connect your local machine to [Chad AI](https://disclosedcapitol.com/chad) — give Chad access to your filesystem, terminal, and git.
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ npx chad-bridge --key dc_your_api_key
9
+ ```
10
+
11
+ Or install globally:
12
+
13
+ ```bash
14
+ npm install -g chad-bridge
15
+ chad-bridge --key dc_your_api_key --dir /path/to/project
16
+ ```
17
+
18
+ ## What it does
19
+
20
+ Chad Bridge creates a secure WebSocket connection between your local machine and Chad AI. This lets Chad:
21
+
22
+ - **Read your code** — understand your project structure and file contents
23
+ - **Write files** — create and edit code directly on your machine
24
+ - **Run commands** — execute terminal commands (with your approval)
25
+ - **Git operations** — status, diff, commit, push (writes require approval)
26
+
27
+ ## Approval Model
28
+
29
+ | Action | Auto-Approved |
30
+ |--------|:---:|
31
+ | Read files | ✅ |
32
+ | List directories | ✅ |
33
+ | Search files | ✅ |
34
+ | Git status/diff/log | ✅ |
35
+ | Write/edit files | ❌ |
36
+ | Delete files | ❌ |
37
+ | Run commands | ❌ |
38
+ | Git commit/push | ❌ |
39
+ | Install dependencies | ❌ |
40
+
41
+ Write operations show a prompt in your browser and terminal. You must approve before they execute.
42
+
43
+ ## Options
44
+
45
+ ```
46
+ -k, --key <key> API key from disclosedcapitol.com/account (required)
47
+ -d, --dir <directory> Working directory (default: current directory)
48
+ --auto-approve Auto-approve all commands (use with caution)
49
+ -v, --verbose Verbose logging
50
+ ```
51
+
52
+ ## Get your API key
53
+
54
+ 1. Go to [disclosedcapitol.com/account](https://disclosedcapitol.com/account?tab=api-keys)
55
+ 2. Create an API key
56
+ 3. Use it with `--key`
57
+
58
+ ## Security
59
+
60
+ - All communication is encrypted (WSS)
61
+ - Write operations require explicit approval
62
+ - Bridge only accesses the directory you specify
63
+ - No data is stored on our servers — commands execute on your machine
64
+ - You can disconnect at any time with Ctrl+C
@@ -0,0 +1,19 @@
1
+ export interface CommandParams {
2
+ path?: string;
3
+ content?: string;
4
+ command?: string;
5
+ cwd?: string;
6
+ pattern?: string;
7
+ glob?: string;
8
+ message?: string;
9
+ branch?: string;
10
+ [key: string]: unknown;
11
+ }
12
+ export interface CommandResult {
13
+ status: "success" | "error" | "stream";
14
+ data?: Record<string, unknown>;
15
+ error?: string;
16
+ }
17
+ export declare const AUTO_APPROVE_ACTIONS: Set<string>;
18
+ export declare function executeAction(action: string, params: CommandParams, workingDir: string): CommandResult;
19
+ //# sourceMappingURL=actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,eAAO,MAAM,oBAAoB,aAQ/B,CAAC;AAOH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,GACjB,aAAa,CAgMf"}
@@ -0,0 +1,240 @@
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.AUTO_APPROVE_ACTIONS = void 0;
37
+ exports.executeAction = executeAction;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const child_process_1 = require("child_process");
41
+ // Actions that don't need user approval
42
+ exports.AUTO_APPROVE_ACTIONS = new Set([
43
+ "read_file",
44
+ "list_dir",
45
+ "file_info",
46
+ "search_files",
47
+ "git_status",
48
+ "git_diff",
49
+ "git_log",
50
+ ]);
51
+ function resolvePath(filePath, workingDir) {
52
+ if (path.isAbsolute(filePath))
53
+ return filePath;
54
+ return path.resolve(workingDir, filePath);
55
+ }
56
+ function executeAction(action, params, workingDir) {
57
+ try {
58
+ switch (action) {
59
+ case "read_file": {
60
+ const p = resolvePath(params.path || "", workingDir);
61
+ if (!fs.existsSync(p))
62
+ return { status: "error", error: `File not found: ${p}` };
63
+ const content = fs.readFileSync(p, "utf-8");
64
+ const stat = fs.statSync(p);
65
+ return {
66
+ status: "success",
67
+ data: {
68
+ content,
69
+ size: stat.size,
70
+ modified: stat.mtime.toISOString(),
71
+ },
72
+ };
73
+ }
74
+ case "write_file": {
75
+ const p = resolvePath(params.path || "", workingDir);
76
+ const dir = path.dirname(p);
77
+ if (!fs.existsSync(dir))
78
+ fs.mkdirSync(dir, { recursive: true });
79
+ fs.writeFileSync(p, params.content || "", "utf-8");
80
+ return {
81
+ status: "success",
82
+ data: { path: p, size: Buffer.byteLength(params.content || "", "utf-8") },
83
+ };
84
+ }
85
+ case "edit_file": {
86
+ const p = resolvePath(params.path || "", workingDir);
87
+ if (!fs.existsSync(p))
88
+ return { status: "error", error: `File not found: ${p}` };
89
+ // For now, full replacement. Diff-based patching can come later.
90
+ fs.writeFileSync(p, params.content || "", "utf-8");
91
+ return { status: "success", data: { path: p } };
92
+ }
93
+ case "delete_file": {
94
+ const p = resolvePath(params.path || "", workingDir);
95
+ if (!fs.existsSync(p))
96
+ return { status: "error", error: `File not found: ${p}` };
97
+ fs.unlinkSync(p);
98
+ return { status: "success", data: { deleted: p } };
99
+ }
100
+ case "list_dir": {
101
+ const p = resolvePath(params.path || ".", workingDir);
102
+ if (!fs.existsSync(p))
103
+ return { status: "error", error: `Directory not found: ${p}` };
104
+ const entries = fs.readdirSync(p, { withFileTypes: true });
105
+ const items = entries.map((e) => ({
106
+ name: e.name,
107
+ type: e.isDirectory() ? "directory" : "file",
108
+ size: e.isFile() ? fs.statSync(path.join(p, e.name)).size : undefined,
109
+ }));
110
+ return { status: "success", data: { path: p, entries: items } };
111
+ }
112
+ case "search_files": {
113
+ const searchPath = resolvePath(params.path || ".", workingDir);
114
+ const pattern = params.pattern || "";
115
+ try {
116
+ const result = (0, child_process_1.execSync)(`grep -rn --include="*" -l "${pattern.replace(/"/g, '\\"')}" "${searchPath}"`, { timeout: 10000, maxBuffer: 1024 * 1024 }).toString().trim();
117
+ const files = result ? result.split("\n").slice(0, 50) : [];
118
+ return { status: "success", data: { pattern, files, count: files.length } };
119
+ }
120
+ catch {
121
+ return { status: "success", data: { pattern, files: [], count: 0 } };
122
+ }
123
+ }
124
+ case "file_info": {
125
+ const p = resolvePath(params.path || "", workingDir);
126
+ if (!fs.existsSync(p))
127
+ return { status: "error", error: `File not found: ${p}` };
128
+ const stat = fs.statSync(p);
129
+ return {
130
+ status: "success",
131
+ data: {
132
+ path: p,
133
+ size: stat.size,
134
+ isDirectory: stat.isDirectory(),
135
+ modified: stat.mtime.toISOString(),
136
+ created: stat.birthtime.toISOString(),
137
+ },
138
+ };
139
+ }
140
+ case "run_command": {
141
+ const cwd = params.cwd ? resolvePath(params.cwd, workingDir) : workingDir;
142
+ const cmd = params.command || "";
143
+ try {
144
+ const output = (0, child_process_1.execSync)(cmd, {
145
+ cwd,
146
+ timeout: 60000,
147
+ maxBuffer: 5 * 1024 * 1024,
148
+ encoding: "utf-8",
149
+ });
150
+ return { status: "success", data: { output, exitCode: 0 } };
151
+ }
152
+ catch (err) {
153
+ const e = err;
154
+ return {
155
+ status: "success",
156
+ data: {
157
+ output: (e.stdout || "") + (e.stderr || ""),
158
+ exitCode: e.status || 1,
159
+ error: e.message,
160
+ },
161
+ };
162
+ }
163
+ }
164
+ case "run_script": {
165
+ const p = resolvePath(params.path || "", workingDir);
166
+ if (!fs.existsSync(p))
167
+ return { status: "error", error: `Script not found: ${p}` };
168
+ const cwd = params.cwd ? resolvePath(params.cwd, workingDir) : workingDir;
169
+ try {
170
+ const output = (0, child_process_1.execSync)(`python3 "${p}"`, {
171
+ cwd,
172
+ timeout: 120000,
173
+ maxBuffer: 5 * 1024 * 1024,
174
+ encoding: "utf-8",
175
+ });
176
+ return { status: "success", data: { output, exitCode: 0 } };
177
+ }
178
+ catch (err) {
179
+ const e = err;
180
+ return {
181
+ status: "success",
182
+ data: { output: (e.stdout || "") + (e.stderr || ""), exitCode: e.status || 1 },
183
+ };
184
+ }
185
+ }
186
+ case "git_status": {
187
+ const cwd = params.cwd ? resolvePath(params.cwd, workingDir) : workingDir;
188
+ const output = (0, child_process_1.execSync)("git status --porcelain", { cwd, encoding: "utf-8" });
189
+ const branch = (0, child_process_1.execSync)("git branch --show-current", { cwd, encoding: "utf-8" }).trim();
190
+ return { status: "success", data: { branch, status: output.trim(), clean: !output.trim() } };
191
+ }
192
+ case "git_diff": {
193
+ const cwd = params.cwd ? resolvePath(params.cwd, workingDir) : workingDir;
194
+ const output = (0, child_process_1.execSync)("git diff", { cwd, encoding: "utf-8", maxBuffer: 5 * 1024 * 1024 });
195
+ return { status: "success", data: { diff: output } };
196
+ }
197
+ case "git_log": {
198
+ const cwd = params.cwd ? resolvePath(params.cwd, workingDir) : workingDir;
199
+ const output = (0, child_process_1.execSync)('git log --oneline -20', { cwd, encoding: "utf-8" });
200
+ return { status: "success", data: { log: output.trim() } };
201
+ }
202
+ case "git_commit": {
203
+ const cwd = params.cwd ? resolvePath(params.cwd, workingDir) : workingDir;
204
+ const msg = params.message || "Update via Chad Bridge";
205
+ (0, child_process_1.execSync)("git add -A", { cwd });
206
+ const output = (0, child_process_1.execSync)(`git commit -m "${msg.replace(/"/g, '\\"')}"`, { cwd, encoding: "utf-8" });
207
+ return { status: "success", data: { output: output.trim() } };
208
+ }
209
+ case "git_push": {
210
+ const cwd = params.cwd ? resolvePath(params.cwd, workingDir) : workingDir;
211
+ const output = (0, child_process_1.execSync)("git push", { cwd, encoding: "utf-8", timeout: 30000 });
212
+ return { status: "success", data: { output: output.trim() } };
213
+ }
214
+ case "git_pull": {
215
+ const cwd = params.cwd ? resolvePath(params.cwd, workingDir) : workingDir;
216
+ const output = (0, child_process_1.execSync)("git pull", { cwd, encoding: "utf-8", timeout: 30000 });
217
+ return { status: "success", data: { output: output.trim() } };
218
+ }
219
+ case "git_branch": {
220
+ const cwd = params.cwd ? resolvePath(params.cwd, workingDir) : workingDir;
221
+ const branch = params.branch || "main";
222
+ const output = (0, child_process_1.execSync)(`git checkout -b "${branch}"`, { cwd, encoding: "utf-8" });
223
+ return { status: "success", data: { output: output.trim(), branch } };
224
+ }
225
+ case "install_deps": {
226
+ const cwd = params.cwd ? resolvePath(params.cwd, workingDir) : workingDir;
227
+ const cmd = params.command || "pip install -r requirements.txt";
228
+ const output = (0, child_process_1.execSync)(cmd, { cwd, encoding: "utf-8", timeout: 120000, maxBuffer: 10 * 1024 * 1024 });
229
+ return { status: "success", data: { output: output.trim() } };
230
+ }
231
+ default:
232
+ return { status: "error", error: `Unknown action: ${action}` };
233
+ }
234
+ }
235
+ catch (err) {
236
+ const e = err;
237
+ return { status: "error", error: e.message || String(err) };
238
+ }
239
+ }
240
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ interface BridgeOptions {
2
+ apiKey: string;
3
+ workingDir: string;
4
+ autoApproveAll?: boolean;
5
+ verbose?: boolean;
6
+ }
7
+ export declare class ChadBridge {
8
+ private ws;
9
+ private options;
10
+ private rl;
11
+ private reconnectAttempts;
12
+ private maxReconnects;
13
+ private pendingApprovals;
14
+ private log;
15
+ constructor(options: BridgeOptions);
16
+ connect(): Promise<void>;
17
+ private handleMessage;
18
+ private requestApproval;
19
+ private describeAction;
20
+ private send;
21
+ disconnect(): void;
22
+ }
23
+ export {};
24
+ //# sourceMappingURL=bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAMA,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAeD,qBAAa,UAAU;IACrB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,EAAE,CAAqB;IAC/B,OAAO,CAAC,iBAAiB,CAAK;IAI9B,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,gBAAgB,CAAuD;IAC/E,OAAO,CAAC,GAAG,CAAwB;gBAEvB,OAAO,EAAE,aAAa;IAQ5B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YA6ChB,aAAa;YAqDb,eAAe;IAsC7B,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,IAAI;IAMZ,UAAU;CAIX"}
package/dist/bridge.js ADDED
@@ -0,0 +1,219 @@
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.ChadBridge = void 0;
40
+ const ws_1 = __importDefault(require("ws"));
41
+ const readline = __importStar(require("readline"));
42
+ const actions_1 = require("./actions");
43
+ const API_URL = process.env.CHAD_API_URL || "wss://api.disclosedcapitol.com";
44
+ class ChadBridge {
45
+ ws = null;
46
+ options;
47
+ rl;
48
+ reconnectAttempts = 0;
49
+ // Infinite reconnect — a Fly deploy can take 30-60s to come back, and a
50
+ // capped retry loop leaves the bridge silently stranded. Better to keep
51
+ // trying forever with an exponential backoff that caps at 30s.
52
+ maxReconnects = Number.POSITIVE_INFINITY;
53
+ pendingApprovals = new Map();
54
+ log;
55
+ constructor(options) {
56
+ this.options = options;
57
+ this.rl = readline.createInterface({ input: process.stdin, output: process.stdout });
58
+ this.log = options.verbose
59
+ ? (msg) => console.log(` [${new Date().toLocaleTimeString()}] ${msg}`)
60
+ : () => { };
61
+ }
62
+ async connect() {
63
+ const url = `${API_URL}/bridge/ws?key=${this.options.apiKey}&dir=${encodeURIComponent(this.options.workingDir)}`;
64
+ return new Promise((resolve, reject) => {
65
+ this.ws = new ws_1.default(url);
66
+ this.ws.on("open", () => {
67
+ this.reconnectAttempts = 0;
68
+ console.log(" Status: \x1b[32m● Online\x1b[0m");
69
+ console.log("");
70
+ console.log(" Waiting for commands from Chad...");
71
+ console.log(" Auto-approve: file reads, directory listings, git status/diff/log");
72
+ console.log(" Require approval: file writes, terminal commands, git push/commit");
73
+ console.log("");
74
+ resolve();
75
+ });
76
+ this.ws.on("message", (data) => {
77
+ try {
78
+ const msg = JSON.parse(data.toString());
79
+ this.handleMessage(msg);
80
+ }
81
+ catch (err) {
82
+ this.log(`Parse error: ${err}`);
83
+ }
84
+ });
85
+ this.ws.on("close", (code) => {
86
+ console.log(` \x1b[33m● Disconnected\x1b[0m (code: ${code})`);
87
+ if (this.reconnectAttempts < this.maxReconnects) {
88
+ const delay = Math.min(1000 * Math.pow(2, this.reconnectAttempts), 30000);
89
+ this.reconnectAttempts++;
90
+ console.log(` Reconnecting in ${delay / 1000}s... (attempt ${this.reconnectAttempts}/${this.maxReconnects})`);
91
+ setTimeout(() => this.connect(), delay);
92
+ }
93
+ });
94
+ this.ws.on("error", (err) => {
95
+ if (this.reconnectAttempts === 0) {
96
+ reject(err);
97
+ }
98
+ this.log(`WebSocket error: ${err.message}`);
99
+ });
100
+ });
101
+ }
102
+ async handleMessage(msg) {
103
+ // Surface server-side errors (auth, etc.) so the user sees WHY the
104
+ // connection dropped instead of just "Disconnected (code: 1000)".
105
+ if (msg.type === "error") {
106
+ const m = msg.message || "(no message)";
107
+ console.log(` \x1b[31m✗ Server error: ${m}\x1b[0m`);
108
+ return;
109
+ }
110
+ if (msg.type === "connected") {
111
+ // Confirms the server accepted our auth. Server already sent this on
112
+ // every successful connect; we just log it for visibility.
113
+ return;
114
+ }
115
+ if (msg.type === "heartbeat_ack") {
116
+ return;
117
+ }
118
+ if (msg.type === "approval_response") {
119
+ // Web-side approval came through
120
+ const resolver = this.pendingApprovals.get(msg.id);
121
+ if (resolver) {
122
+ resolver(msg.approved);
123
+ this.pendingApprovals.delete(msg.id);
124
+ }
125
+ return;
126
+ }
127
+ if (msg.type !== "command")
128
+ return;
129
+ const cmd = msg;
130
+ const { id, action, params } = cmd;
131
+ const needsApproval = !actions_1.AUTO_APPROVE_ACTIONS.has(action) && !this.options.autoApproveAll;
132
+ if (needsApproval) {
133
+ const approved = await this.requestApproval(id, action, params);
134
+ if (!approved) {
135
+ this.send({ type: "result", id, status: "rejected", error: "User rejected the command" });
136
+ console.log(` \x1b[31m✗\x1b[0m ${action}: rejected by user`);
137
+ return;
138
+ }
139
+ }
140
+ // Execute the action
141
+ const result = (0, actions_1.executeAction)(action, params, this.options.workingDir);
142
+ if (result.status === "success") {
143
+ console.log(` \x1b[32m✓\x1b[0m ${action}${params.path ? `: ${params.path}` : ""}${params.command ? `: ${params.command}` : ""}`);
144
+ }
145
+ else {
146
+ console.log(` \x1b[31m✗\x1b[0m ${action}: ${result.error}`);
147
+ }
148
+ this.send({ type: "result", id, ...result });
149
+ }
150
+ async requestApproval(id, action, params) {
151
+ // Send approval request to server (web UI will show popup)
152
+ this.send({
153
+ type: "approval_required",
154
+ id,
155
+ action,
156
+ params,
157
+ description: this.describeAction(action, params),
158
+ });
159
+ // Also prompt locally as fallback
160
+ const desc = this.describeAction(action, params);
161
+ console.log(` \x1b[33m⚠\x1b[0m APPROVAL NEEDED: ${desc}`);
162
+ return new Promise((resolve) => {
163
+ // Store resolver for web-side approval
164
+ this.pendingApprovals.set(id, resolve);
165
+ // CLI fallback with 30s timeout
166
+ const timeout = setTimeout(() => {
167
+ if (this.pendingApprovals.has(id)) {
168
+ this.pendingApprovals.delete(id);
169
+ resolve(false);
170
+ console.log(" Timed out — rejected");
171
+ }
172
+ }, 30000);
173
+ this.rl.question(" Allow? [y/n]: ", (answer) => {
174
+ clearTimeout(timeout);
175
+ if (this.pendingApprovals.has(id)) {
176
+ this.pendingApprovals.delete(id);
177
+ const approved = answer.toLowerCase().startsWith("y");
178
+ resolve(approved);
179
+ }
180
+ });
181
+ });
182
+ }
183
+ describeAction(action, params) {
184
+ switch (action) {
185
+ case "write_file":
186
+ case "edit_file":
187
+ return `${action} "${params.path}"`;
188
+ case "delete_file":
189
+ return `delete "${params.path}"`;
190
+ case "run_command":
191
+ return `run: ${params.command}`;
192
+ case "run_script":
193
+ return `run script: ${params.path}`;
194
+ case "git_commit":
195
+ return `git commit -m "${params.message}"`;
196
+ case "git_push":
197
+ return "git push";
198
+ case "git_pull":
199
+ return "git pull";
200
+ case "git_branch":
201
+ return `git checkout -b ${params.branch}`;
202
+ case "install_deps":
203
+ return `install: ${params.command}`;
204
+ default:
205
+ return `${action} ${JSON.stringify(params)}`;
206
+ }
207
+ }
208
+ send(data) {
209
+ if (this.ws?.readyState === ws_1.default.OPEN) {
210
+ this.ws.send(JSON.stringify(data));
211
+ }
212
+ }
213
+ disconnect() {
214
+ this.ws?.close();
215
+ this.rl.close();
216
+ }
217
+ }
218
+ exports.ChadBridge = ChadBridge;
219
+ //# sourceMappingURL=bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}