@astroanywhere/agent 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/LICENSE +76 -0
- package/README.md +178 -0
- package/dist/cli.d.ts +15 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +401 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/index.d.ts +9 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +9 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/mcp.d.ts +16 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +19 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/setup.d.ts +20 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +585 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/start.d.ts +16 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +638 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +5 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +63 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +5 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +85 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/execution/direct-strategy.d.ts +18 -0
- package/dist/execution/direct-strategy.d.ts.map +1 -0
- package/dist/execution/direct-strategy.js +156 -0
- package/dist/execution/direct-strategy.js.map +1 -0
- package/dist/execution/docker-strategy.d.ts +26 -0
- package/dist/execution/docker-strategy.d.ts.map +1 -0
- package/dist/execution/docker-strategy.js +222 -0
- package/dist/execution/docker-strategy.js.map +1 -0
- package/dist/execution/index.d.ts +14 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +13 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/execution/kubernetes-exec-strategy.d.ts +23 -0
- package/dist/execution/kubernetes-exec-strategy.d.ts.map +1 -0
- package/dist/execution/kubernetes-exec-strategy.js +232 -0
- package/dist/execution/kubernetes-exec-strategy.js.map +1 -0
- package/dist/execution/registry.d.ts +41 -0
- package/dist/execution/registry.d.ts.map +1 -0
- package/dist/execution/registry.js +84 -0
- package/dist/execution/registry.js.map +1 -0
- package/dist/execution/slurm-strategy.d.ts +22 -0
- package/dist/execution/slurm-strategy.d.ts.map +1 -0
- package/dist/execution/slurm-strategy.js +219 -0
- package/dist/execution/slurm-strategy.js.map +1 -0
- package/dist/execution/types.d.ts +72 -0
- package/dist/execution/types.d.ts.map +1 -0
- package/dist/execution/types.js +10 -0
- package/dist/execution/types.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-client.d.ts +35 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +126 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/config.d.ts +174 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +399 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/copy-worktree.d.ts +73 -0
- package/dist/lib/copy-worktree.d.ts.map +1 -0
- package/dist/lib/copy-worktree.js +374 -0
- package/dist/lib/copy-worktree.js.map +1 -0
- package/dist/lib/git-pr.d.ts +63 -0
- package/dist/lib/git-pr.d.ts.map +1 -0
- package/dist/lib/git-pr.js +224 -0
- package/dist/lib/git-pr.js.map +1 -0
- package/dist/lib/hardware-id.d.ts +25 -0
- package/dist/lib/hardware-id.d.ts.map +1 -0
- package/dist/lib/hardware-id.js +186 -0
- package/dist/lib/hardware-id.js.map +1 -0
- package/dist/lib/hpc-context.d.ts +35 -0
- package/dist/lib/hpc-context.d.ts.map +1 -0
- package/dist/lib/hpc-context.js +167 -0
- package/dist/lib/hpc-context.js.map +1 -0
- package/dist/lib/prompt-templates.d.ts +195 -0
- package/dist/lib/prompt-templates.d.ts.map +1 -0
- package/dist/lib/prompt-templates.js +353 -0
- package/dist/lib/prompt-templates.js.map +1 -0
- package/dist/lib/providers.d.ts +27 -0
- package/dist/lib/providers.d.ts.map +1 -0
- package/dist/lib/providers.js +372 -0
- package/dist/lib/providers.js.map +1 -0
- package/dist/lib/repo-context.d.ts +18 -0
- package/dist/lib/repo-context.d.ts.map +1 -0
- package/dist/lib/repo-context.js +61 -0
- package/dist/lib/repo-context.js.map +1 -0
- package/dist/lib/repo-utils.d.ts +35 -0
- package/dist/lib/repo-utils.d.ts.map +1 -0
- package/dist/lib/repo-utils.js +222 -0
- package/dist/lib/repo-utils.js.map +1 -0
- package/dist/lib/resources.d.ts +17 -0
- package/dist/lib/resources.d.ts.map +1 -0
- package/dist/lib/resources.js +227 -0
- package/dist/lib/resources.js.map +1 -0
- package/dist/lib/slurm-detect.d.ts +15 -0
- package/dist/lib/slurm-detect.d.ts.map +1 -0
- package/dist/lib/slurm-detect.js +148 -0
- package/dist/lib/slurm-detect.js.map +1 -0
- package/dist/lib/slurm-executor.d.ts +70 -0
- package/dist/lib/slurm-executor.d.ts.map +1 -0
- package/dist/lib/slurm-executor.js +402 -0
- package/dist/lib/slurm-executor.js.map +1 -0
- package/dist/lib/slurm-job-monitor.d.ts +52 -0
- package/dist/lib/slurm-job-monitor.d.ts.map +1 -0
- package/dist/lib/slurm-job-monitor.js +212 -0
- package/dist/lib/slurm-job-monitor.js.map +1 -0
- package/dist/lib/ssh-discovery.d.ts +17 -0
- package/dist/lib/ssh-discovery.d.ts.map +1 -0
- package/dist/lib/ssh-discovery.js +287 -0
- package/dist/lib/ssh-discovery.js.map +1 -0
- package/dist/lib/ssh-installer.d.ts +69 -0
- package/dist/lib/ssh-installer.d.ts.map +1 -0
- package/dist/lib/ssh-installer.js +230 -0
- package/dist/lib/ssh-installer.js.map +1 -0
- package/dist/lib/streaming-prompt.d.ts +48 -0
- package/dist/lib/streaming-prompt.d.ts.map +1 -0
- package/dist/lib/streaming-prompt.js +91 -0
- package/dist/lib/streaming-prompt.js.map +1 -0
- package/dist/lib/task-executor.d.ts +114 -0
- package/dist/lib/task-executor.d.ts.map +1 -0
- package/dist/lib/task-executor.js +753 -0
- package/dist/lib/task-executor.js.map +1 -0
- package/dist/lib/websocket-client.d.ts +200 -0
- package/dist/lib/websocket-client.d.ts.map +1 -0
- package/dist/lib/websocket-client.js +781 -0
- package/dist/lib/websocket-client.js.map +1 -0
- package/dist/lib/workdir-safety.d.ts +63 -0
- package/dist/lib/workdir-safety.d.ts.map +1 -0
- package/dist/lib/workdir-safety.js +247 -0
- package/dist/lib/workdir-safety.js.map +1 -0
- package/dist/lib/worktree-include.d.ts +14 -0
- package/dist/lib/worktree-include.d.ts.map +1 -0
- package/dist/lib/worktree-include.js +68 -0
- package/dist/lib/worktree-include.js.map +1 -0
- package/dist/lib/worktree-setup.d.ts +18 -0
- package/dist/lib/worktree-setup.d.ts.map +1 -0
- package/dist/lib/worktree-setup.js +60 -0
- package/dist/lib/worktree-setup.js.map +1 -0
- package/dist/lib/worktree.d.ts +37 -0
- package/dist/lib/worktree.d.ts.map +1 -0
- package/dist/lib/worktree.js +411 -0
- package/dist/lib/worktree.js.map +1 -0
- package/dist/mcp/index.d.ts +8 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +8 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +45 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +153 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/session-bridge.d.ts +87 -0
- package/dist/mcp/session-bridge.d.ts.map +1 -0
- package/dist/mcp/session-bridge.js +317 -0
- package/dist/mcp/session-bridge.js.map +1 -0
- package/dist/mcp/tools.d.ts +70 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +234 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/types.d.ts +197 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +16 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/providers/base-adapter.d.ts +56 -0
- package/dist/providers/base-adapter.d.ts.map +1 -0
- package/dist/providers/base-adapter.js +5 -0
- package/dist/providers/base-adapter.js.map +1 -0
- package/dist/providers/claude-code-adapter.d.ts +27 -0
- package/dist/providers/claude-code-adapter.d.ts.map +1 -0
- package/dist/providers/claude-code-adapter.js +298 -0
- package/dist/providers/claude-code-adapter.js.map +1 -0
- package/dist/providers/claude-sdk-adapter.d.ts +60 -0
- package/dist/providers/claude-sdk-adapter.d.ts.map +1 -0
- package/dist/providers/claude-sdk-adapter.js +632 -0
- package/dist/providers/claude-sdk-adapter.js.map +1 -0
- package/dist/providers/codex-adapter.d.ts +21 -0
- package/dist/providers/codex-adapter.d.ts.map +1 -0
- package/dist/providers/codex-adapter.js +197 -0
- package/dist/providers/codex-adapter.js.map +1 -0
- package/dist/providers/index.d.ts +26 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +58 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/slurm-adapter.d.ts +26 -0
- package/dist/providers/slurm-adapter.d.ts.map +1 -0
- package/dist/providers/slurm-adapter.js +146 -0
- package/dist/providers/slurm-adapter.js.map +1 -0
- package/dist/types.d.ts +592 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration management using conf (electron-conf compatible)
|
|
3
|
+
*/
|
|
4
|
+
import Conf from 'conf';
|
|
5
|
+
import { randomUUID } from 'node:crypto';
|
|
6
|
+
import { getHardwareId } from './hardware-id.js';
|
|
7
|
+
// Production defaults (Fly.io backend)
|
|
8
|
+
const DEFAULT_API_URL = 'https://api.astroanywhere.com';
|
|
9
|
+
const DEFAULT_RELAY_URL = 'wss://relay.astroanywhere.com:3002';
|
|
10
|
+
/**
|
|
11
|
+
* Derive API and relay URLs from environment variables.
|
|
12
|
+
*
|
|
13
|
+
* Priority (highest first):
|
|
14
|
+
* 1. ASTRO_SERVER_URL / ASTRO_RELAY_URL — explicit agent-runner env vars
|
|
15
|
+
* 2. VITE_API_BASE_URL — set in .env.prod (points to Fly.io backend)
|
|
16
|
+
* 3. CLOUDFLARED_DOMAIN — dev mode with Cloudflare tunnel
|
|
17
|
+
* 4. Defaults — Fly.io production backend
|
|
18
|
+
*
|
|
19
|
+
* Relay URL derivation:
|
|
20
|
+
* - Fly.io backend exposes relay on port 3002 with TLS → wss://<fly-app>.fly.dev:3002
|
|
21
|
+
* - Cloudflare tunnel maps astro-relay.<domain> → wss://astro-relay.<domain>
|
|
22
|
+
* - Local dev → ws://localhost:3002
|
|
23
|
+
*/
|
|
24
|
+
function resolveApiUrlFromEnv() {
|
|
25
|
+
// Explicit override
|
|
26
|
+
if (process.env.ASTRO_SERVER_URL)
|
|
27
|
+
return process.env.ASTRO_SERVER_URL;
|
|
28
|
+
// Prod mode: VITE_API_BASE_URL points to the Fly.io backend
|
|
29
|
+
if (process.env.VITE_API_BASE_URL)
|
|
30
|
+
return process.env.VITE_API_BASE_URL;
|
|
31
|
+
// Dev mode with tunnel: derive from CLOUDFLARED_DOMAIN
|
|
32
|
+
if (process.env.CLOUDFLARED_DOMAIN) {
|
|
33
|
+
return `https://astro-api.${process.env.CLOUDFLARED_DOMAIN}`;
|
|
34
|
+
}
|
|
35
|
+
return DEFAULT_API_URL;
|
|
36
|
+
}
|
|
37
|
+
function resolveRelayUrlFromEnv() {
|
|
38
|
+
// Explicit override
|
|
39
|
+
if (process.env.ASTRO_RELAY_URL)
|
|
40
|
+
return process.env.ASTRO_RELAY_URL;
|
|
41
|
+
// Prod mode: derive WSS relay from VITE_API_BASE_URL (Fly.io exposes relay on :3002)
|
|
42
|
+
if (process.env.VITE_API_BASE_URL) {
|
|
43
|
+
const flyHost = process.env.VITE_API_BASE_URL
|
|
44
|
+
.replace(/^https?:\/\//, '')
|
|
45
|
+
.replace(/\/+$/, '');
|
|
46
|
+
return `wss://${flyHost}:3002`;
|
|
47
|
+
}
|
|
48
|
+
// Dev mode with tunnel: derive from CLOUDFLARED_DOMAIN
|
|
49
|
+
if (process.env.CLOUDFLARED_DOMAIN) {
|
|
50
|
+
return `wss://astro-relay.${process.env.CLOUDFLARED_DOMAIN}`;
|
|
51
|
+
}
|
|
52
|
+
return DEFAULT_RELAY_URL;
|
|
53
|
+
}
|
|
54
|
+
class ConfigManager {
|
|
55
|
+
conf;
|
|
56
|
+
constructor() {
|
|
57
|
+
this.conf = new Conf({
|
|
58
|
+
projectName: 'astro-agent',
|
|
59
|
+
projectVersion: '0.1.0',
|
|
60
|
+
defaults: {
|
|
61
|
+
runnerId: '',
|
|
62
|
+
machineId: '',
|
|
63
|
+
deviceToken: undefined,
|
|
64
|
+
apiUrl: DEFAULT_API_URL,
|
|
65
|
+
accessToken: undefined,
|
|
66
|
+
refreshToken: undefined,
|
|
67
|
+
wsToken: undefined,
|
|
68
|
+
claudeOauthToken: undefined,
|
|
69
|
+
relayUrl: DEFAULT_RELAY_URL,
|
|
70
|
+
providers: [],
|
|
71
|
+
autoStart: false,
|
|
72
|
+
logLevel: 'info',
|
|
73
|
+
lastConnected: undefined,
|
|
74
|
+
setupCompleted: false,
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Check if initial setup has been completed
|
|
80
|
+
*/
|
|
81
|
+
isSetupComplete() {
|
|
82
|
+
return this.conf.get('setupCompleted');
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get all stored configuration
|
|
86
|
+
*/
|
|
87
|
+
getConfig() {
|
|
88
|
+
return {
|
|
89
|
+
runnerId: this.conf.get('runnerId'),
|
|
90
|
+
machineId: this.conf.get('machineId'),
|
|
91
|
+
deviceToken: this.conf.get('deviceToken'),
|
|
92
|
+
apiUrl: this.conf.get('apiUrl'),
|
|
93
|
+
accessToken: this.conf.get('accessToken'),
|
|
94
|
+
refreshToken: this.conf.get('refreshToken'),
|
|
95
|
+
wsToken: this.conf.get('wsToken'),
|
|
96
|
+
relayUrl: this.conf.get('relayUrl'),
|
|
97
|
+
providers: this.conf.get('providers'),
|
|
98
|
+
autoStart: this.conf.get('autoStart'),
|
|
99
|
+
logLevel: this.conf.get('logLevel'),
|
|
100
|
+
mcpServers: this.conf.get('mcpServers'),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get runner ID, generating one if not set
|
|
105
|
+
*/
|
|
106
|
+
getRunnerId() {
|
|
107
|
+
let runnerId = this.conf.get('runnerId');
|
|
108
|
+
if (!runnerId) {
|
|
109
|
+
runnerId = `runner-${randomUUID().slice(0, 8)}`;
|
|
110
|
+
this.conf.set('runnerId', runnerId);
|
|
111
|
+
}
|
|
112
|
+
return runnerId;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Initialize machine ID using hardware-based identifier
|
|
116
|
+
* Should be called during setup - async operation
|
|
117
|
+
*/
|
|
118
|
+
async initializeMachineId() {
|
|
119
|
+
const existing = this.conf.get('machineId');
|
|
120
|
+
if (existing) {
|
|
121
|
+
// Already initialized - determine source from prefix
|
|
122
|
+
const source = existing.startsWith('mac-') ? 'mac' :
|
|
123
|
+
existing.startsWith('rand-') ? 'random' : 'uuid';
|
|
124
|
+
return { id: existing, source };
|
|
125
|
+
}
|
|
126
|
+
// Get hardware-based ID (network-agnostic)
|
|
127
|
+
const { id, source } = await getHardwareId();
|
|
128
|
+
this.conf.set('machineId', id);
|
|
129
|
+
return { id, source };
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get machine ID (synchronous)
|
|
133
|
+
* Returns existing ID or generates a temporary one if not initialized
|
|
134
|
+
* Call initializeMachineId() during setup for proper hardware-based ID
|
|
135
|
+
*/
|
|
136
|
+
getMachineId() {
|
|
137
|
+
let machineId = this.conf.get('machineId');
|
|
138
|
+
if (!machineId) {
|
|
139
|
+
// Fallback for legacy cases - use random UUID
|
|
140
|
+
// This should rarely happen if initializeMachineId() is called during setup
|
|
141
|
+
machineId = `rand-${randomUUID()}`;
|
|
142
|
+
this.conf.set('machineId', machineId);
|
|
143
|
+
}
|
|
144
|
+
return machineId;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get machine display name (e.g., SSH alias like "nebius-2")
|
|
148
|
+
*/
|
|
149
|
+
getMachineName() {
|
|
150
|
+
return this.conf.get('machineName');
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Set machine display name
|
|
154
|
+
*/
|
|
155
|
+
setMachineName(name) {
|
|
156
|
+
this.conf.set('machineName', name);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Get relay URL.
|
|
160
|
+
* Returns stored value unless it's the hardcoded default, in which case
|
|
161
|
+
* env-based resolution takes precedence (allows mode switching without re-setup).
|
|
162
|
+
*/
|
|
163
|
+
getRelayUrl() {
|
|
164
|
+
const stored = this.conf.get('relayUrl');
|
|
165
|
+
if (stored !== DEFAULT_RELAY_URL)
|
|
166
|
+
return stored;
|
|
167
|
+
return resolveRelayUrlFromEnv();
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Set relay URL
|
|
171
|
+
*/
|
|
172
|
+
setRelayUrl(url) {
|
|
173
|
+
this.conf.set('relayUrl', url);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Get API URL.
|
|
177
|
+
* Returns stored value unless it's the hardcoded default, in which case
|
|
178
|
+
* env-based resolution takes precedence (allows mode switching without re-setup).
|
|
179
|
+
*/
|
|
180
|
+
getApiUrl() {
|
|
181
|
+
const stored = this.conf.get('apiUrl');
|
|
182
|
+
if (stored !== DEFAULT_API_URL)
|
|
183
|
+
return stored;
|
|
184
|
+
return resolveApiUrlFromEnv();
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Set API URL
|
|
188
|
+
*/
|
|
189
|
+
setApiUrl(url) {
|
|
190
|
+
this.conf.set('apiUrl', url);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get access token
|
|
194
|
+
*/
|
|
195
|
+
getAccessToken() {
|
|
196
|
+
return this.conf.get('accessToken');
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Set access token
|
|
200
|
+
* Validates token format to prevent storing invalid values
|
|
201
|
+
*/
|
|
202
|
+
setAccessToken(token) {
|
|
203
|
+
// Reject null, "null" string, undefined, or empty values
|
|
204
|
+
if (!token || token === 'null' || token === 'undefined') {
|
|
205
|
+
console.warn('[config] Refusing to set invalid accessToken:', token);
|
|
206
|
+
this.conf.delete('accessToken');
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
// Validate JWT format
|
|
210
|
+
if (!token.match(/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/)) {
|
|
211
|
+
console.error('[config] accessToken does not appear to be a valid JWT format');
|
|
212
|
+
console.error('[config] Token preview:', token.substring(0, 50) + '...');
|
|
213
|
+
this.conf.delete('accessToken');
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
this.conf.set('accessToken', token);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Get refresh token
|
|
220
|
+
*/
|
|
221
|
+
getRefreshToken() {
|
|
222
|
+
return this.conf.get('refreshToken');
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Set refresh token
|
|
226
|
+
* Validates token format to prevent storing invalid values
|
|
227
|
+
*/
|
|
228
|
+
setRefreshToken(token) {
|
|
229
|
+
// Reject null, "null" string, undefined, or empty values
|
|
230
|
+
if (!token || token === 'null' || token === 'undefined') {
|
|
231
|
+
console.warn('[config] Refusing to set invalid refreshToken:', token);
|
|
232
|
+
this.conf.delete('refreshToken');
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
// Validate JWT format
|
|
236
|
+
if (!token.match(/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/)) {
|
|
237
|
+
console.error('[config] refreshToken does not appear to be a valid JWT format');
|
|
238
|
+
console.error('[config] Token preview:', token.substring(0, 50) + '...');
|
|
239
|
+
this.conf.delete('refreshToken');
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
this.conf.set('refreshToken', token);
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Get WebSocket token
|
|
246
|
+
*/
|
|
247
|
+
getWsToken() {
|
|
248
|
+
return this.conf.get('wsToken');
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Set WebSocket token
|
|
252
|
+
* Validates token format to prevent storing invalid values
|
|
253
|
+
*/
|
|
254
|
+
setWsToken(token) {
|
|
255
|
+
// Reject null, "null" string, undefined, or empty values
|
|
256
|
+
if (!token || token === 'null' || token === 'undefined') {
|
|
257
|
+
console.warn('[config] Refusing to set invalid wsToken:', token);
|
|
258
|
+
// Clear any existing invalid token
|
|
259
|
+
this.conf.delete('wsToken');
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
// Validate JWT format (should have 3 base64url-encoded parts separated by dots)
|
|
263
|
+
// Example: eyJhbGc...header.eyJzdWI...payload.signature...
|
|
264
|
+
if (!token.match(/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/)) {
|
|
265
|
+
console.error('[config] wsToken does not appear to be a valid JWT format');
|
|
266
|
+
console.error('[config] Token preview:', token.substring(0, 50) + '...');
|
|
267
|
+
this.conf.delete('wsToken');
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
this.conf.set('wsToken', token);
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Get Claude OAuth token (from `claude setup-token`)
|
|
274
|
+
*/
|
|
275
|
+
getClaudeOauthToken() {
|
|
276
|
+
return this.conf.get('claudeOauthToken');
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Set Claude OAuth token
|
|
280
|
+
*/
|
|
281
|
+
setClaudeOauthToken(token) {
|
|
282
|
+
this.conf.set('claudeOauthToken', token);
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Clear Claude OAuth token
|
|
286
|
+
*/
|
|
287
|
+
clearClaudeOauthToken() {
|
|
288
|
+
this.conf.delete('claudeOauthToken');
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Set machine ID (e.g., from backend registration response)
|
|
292
|
+
* Validates ID to prevent storing invalid values
|
|
293
|
+
*/
|
|
294
|
+
setMachineId(id) {
|
|
295
|
+
// Reject null, "null" string, undefined, or empty values
|
|
296
|
+
if (!id || id === 'null' || id === 'undefined') {
|
|
297
|
+
console.warn('[config] Refusing to set invalid machineId:', id);
|
|
298
|
+
// Don't auto-generate - let the setup process handle it
|
|
299
|
+
this.conf.delete('machineId');
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
this.conf.set('machineId', id);
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Get device token
|
|
306
|
+
*/
|
|
307
|
+
getDeviceToken() {
|
|
308
|
+
return this.conf.get('deviceToken');
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Set device token
|
|
312
|
+
*/
|
|
313
|
+
setDeviceToken(token) {
|
|
314
|
+
this.conf.set('deviceToken', token);
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Get configured providers
|
|
318
|
+
*/
|
|
319
|
+
getProviders() {
|
|
320
|
+
return this.conf.get('providers');
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Set configured providers
|
|
324
|
+
*/
|
|
325
|
+
setProviders(providers) {
|
|
326
|
+
this.conf.set('providers', providers);
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Get auto-start setting
|
|
330
|
+
*/
|
|
331
|
+
getAutoStart() {
|
|
332
|
+
return this.conf.get('autoStart');
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Set auto-start setting
|
|
336
|
+
*/
|
|
337
|
+
setAutoStart(autoStart) {
|
|
338
|
+
this.conf.set('autoStart', autoStart);
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Get log level
|
|
342
|
+
*/
|
|
343
|
+
getLogLevel() {
|
|
344
|
+
return this.conf.get('logLevel');
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Set log level
|
|
348
|
+
*/
|
|
349
|
+
setLogLevel(level) {
|
|
350
|
+
this.conf.set('logLevel', level);
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Update last connected timestamp
|
|
354
|
+
*/
|
|
355
|
+
updateLastConnected() {
|
|
356
|
+
this.conf.set('lastConnected', new Date().toISOString());
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Get last connected timestamp
|
|
360
|
+
*/
|
|
361
|
+
getLastConnected() {
|
|
362
|
+
return this.conf.get('lastConnected');
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Mark setup as complete
|
|
366
|
+
*/
|
|
367
|
+
completeSetup() {
|
|
368
|
+
this.conf.set('setupCompleted', true);
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Get stored remote hosts (from SSH discovery + install)
|
|
372
|
+
*/
|
|
373
|
+
getRemoteHosts() {
|
|
374
|
+
return this.conf.get('remoteHosts') ?? [];
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Set stored remote hosts
|
|
378
|
+
*/
|
|
379
|
+
setRemoteHosts(hosts) {
|
|
380
|
+
this.conf.set('remoteHosts', hosts);
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Reset all configuration
|
|
384
|
+
*/
|
|
385
|
+
reset() {
|
|
386
|
+
this.conf.clear();
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Get the configuration file path
|
|
390
|
+
*/
|
|
391
|
+
getConfigPath() {
|
|
392
|
+
return this.conf.path;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
// Export singleton instance
|
|
396
|
+
export const config = new ConfigManager();
|
|
397
|
+
// Also export class for testing
|
|
398
|
+
export { ConfigManager };
|
|
399
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export interface CopyWorktreeResult {
|
|
2
|
+
worktreePath: string;
|
|
3
|
+
cleanup: () => Promise<void>;
|
|
4
|
+
}
|
|
5
|
+
export interface ReferenceWorktreeResult {
|
|
6
|
+
worktreePath: string;
|
|
7
|
+
fileMap: FileMapEntry[];
|
|
8
|
+
cleanup: () => Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
export interface FileMapEntry {
|
|
11
|
+
relativePath: string;
|
|
12
|
+
sizeBytes: number;
|
|
13
|
+
classification: 'code' | 'data';
|
|
14
|
+
}
|
|
15
|
+
export interface ApplyChangesResult {
|
|
16
|
+
created: string[];
|
|
17
|
+
modified: string[];
|
|
18
|
+
deleted: string[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Load .gitignore patterns from a directory.
|
|
22
|
+
* Returns an empty array if no .gitignore exists.
|
|
23
|
+
*/
|
|
24
|
+
export declare function loadGitignorePatterns(sourceDir: string): Promise<string[]>;
|
|
25
|
+
/**
|
|
26
|
+
* Parse raw .gitignore content into an array of usable patterns.
|
|
27
|
+
* Strips comments, blank lines, and negation patterns (for simplicity).
|
|
28
|
+
*/
|
|
29
|
+
export declare function parseGitignoreContent(content: string): string[];
|
|
30
|
+
/**
|
|
31
|
+
* Check whether a relative path matches any gitignore pattern.
|
|
32
|
+
*
|
|
33
|
+
* Supported pattern features:
|
|
34
|
+
* - `*` matches any sequence of characters except `/`
|
|
35
|
+
* - `**` matches everything (including `/`)
|
|
36
|
+
* - Trailing `/` means the pattern only matches directories
|
|
37
|
+
* - Leading `/` anchors the pattern to the root
|
|
38
|
+
* - Bare name without `/` matches any basename in the tree
|
|
39
|
+
* - Patterns with an interior `/` (non-leading, non-trailing) are anchored
|
|
40
|
+
*/
|
|
41
|
+
export declare function isIgnoredByPattern(
|
|
42
|
+
/** Path relative to the project root, using `/` separators */
|
|
43
|
+
relativePath: string, patterns: string[],
|
|
44
|
+
/** Whether the path is a directory */
|
|
45
|
+
isDirectory: boolean): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Copy project directory to a worktree-like path for non-git execution.
|
|
48
|
+
* Excludes the agent directory and respects .gitignore patterns.
|
|
49
|
+
*/
|
|
50
|
+
export declare function createCopyWorktree(sourceDir: string, agentDirName: string, taskId: string): Promise<CopyWorktreeResult>;
|
|
51
|
+
/**
|
|
52
|
+
* Create a reference worktree (empty directory with file map).
|
|
53
|
+
* Used for large projects where copying would be too slow.
|
|
54
|
+
*/
|
|
55
|
+
export declare function createReferenceWorktree(sourceDir: string, agentDirName: string, taskId: string): Promise<ReferenceWorktreeResult>;
|
|
56
|
+
/**
|
|
57
|
+
* Generate a file listing with size classifications.
|
|
58
|
+
* Files < 1MB are classified as 'code', >= 1MB as 'data'.
|
|
59
|
+
*/
|
|
60
|
+
export declare function generateFileMap(sourceDir: string, agentDirName: string): Promise<FileMapEntry[]>;
|
|
61
|
+
/**
|
|
62
|
+
* Compare a worktree copy against the original directory and apply changes back.
|
|
63
|
+
*
|
|
64
|
+
* - New files (exist in worktree but not original): copied to original
|
|
65
|
+
* - Modified files (different content): copied to original
|
|
66
|
+
* - Deleted files (exist in original but not worktree): reported but NOT deleted
|
|
67
|
+
*
|
|
68
|
+
* Excludes the agent dir, .git, and node_modules from comparison.
|
|
69
|
+
*
|
|
70
|
+
* Returns lists of created, modified, and deleted (pending) relative paths.
|
|
71
|
+
*/
|
|
72
|
+
export declare function applyChangesFromCopy(worktreePath: string, originalDir: string, agentDirName: string): Promise<ApplyChangesResult>;
|
|
73
|
+
//# sourceMappingURL=copy-worktree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy-worktree.d.ts","sourceRoot":"","sources":["../../src/lib/copy-worktree.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAWD;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAWhF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAU/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB;AAChC,8DAA8D;AAC9D,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAAE;AAClB,sCAAsC;AACtC,WAAW,EAAE,OAAO,GACnB,OAAO,CAOT;AAiID;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,kBAAkB,CAAC,CAuB7B;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,uBAAuB,CAAC,CAkBlC;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,EAAE,CAAC,CAiCzB;AA+CD;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAmE7B"}
|