mstro-app 0.1.47
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 +21 -0
- package/README.md +177 -0
- package/bin/commands/config.js +145 -0
- package/bin/commands/login.js +313 -0
- package/bin/commands/logout.js +75 -0
- package/bin/commands/status.js +197 -0
- package/bin/commands/whoami.js +161 -0
- package/bin/configure-claude.js +298 -0
- package/bin/mstro.js +581 -0
- package/bin/postinstall.js +45 -0
- package/bin/release.sh +110 -0
- package/dist/server/cli/headless/claude-invoker.d.ts +17 -0
- package/dist/server/cli/headless/claude-invoker.d.ts.map +1 -0
- package/dist/server/cli/headless/claude-invoker.js +311 -0
- package/dist/server/cli/headless/claude-invoker.js.map +1 -0
- package/dist/server/cli/headless/index.d.ts +13 -0
- package/dist/server/cli/headless/index.d.ts.map +1 -0
- package/dist/server/cli/headless/index.js +10 -0
- package/dist/server/cli/headless/index.js.map +1 -0
- package/dist/server/cli/headless/mcp-config.d.ts +11 -0
- package/dist/server/cli/headless/mcp-config.d.ts.map +1 -0
- package/dist/server/cli/headless/mcp-config.js +76 -0
- package/dist/server/cli/headless/mcp-config.js.map +1 -0
- package/dist/server/cli/headless/output-utils.d.ts +33 -0
- package/dist/server/cli/headless/output-utils.d.ts.map +1 -0
- package/dist/server/cli/headless/output-utils.js +101 -0
- package/dist/server/cli/headless/output-utils.js.map +1 -0
- package/dist/server/cli/headless/prompt-utils.d.ts +21 -0
- package/dist/server/cli/headless/prompt-utils.d.ts.map +1 -0
- package/dist/server/cli/headless/prompt-utils.js +84 -0
- package/dist/server/cli/headless/prompt-utils.js.map +1 -0
- package/dist/server/cli/headless/runner.d.ts +24 -0
- package/dist/server/cli/headless/runner.d.ts.map +1 -0
- package/dist/server/cli/headless/runner.js +99 -0
- package/dist/server/cli/headless/runner.js.map +1 -0
- package/dist/server/cli/headless/types.d.ts +106 -0
- package/dist/server/cli/headless/types.d.ts.map +1 -0
- package/dist/server/cli/headless/types.js +4 -0
- package/dist/server/cli/headless/types.js.map +1 -0
- package/dist/server/cli/improvisation-session-manager.d.ts +155 -0
- package/dist/server/cli/improvisation-session-manager.d.ts.map +1 -0
- package/dist/server/cli/improvisation-session-manager.js +415 -0
- package/dist/server/cli/improvisation-session-manager.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +386 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/mcp/bouncer-cli.d.ts +3 -0
- package/dist/server/mcp/bouncer-cli.d.ts.map +1 -0
- package/dist/server/mcp/bouncer-cli.js +99 -0
- package/dist/server/mcp/bouncer-cli.js.map +1 -0
- package/dist/server/mcp/bouncer-integration.d.ts +36 -0
- package/dist/server/mcp/bouncer-integration.d.ts.map +1 -0
- package/dist/server/mcp/bouncer-integration.js +301 -0
- package/dist/server/mcp/bouncer-integration.js.map +1 -0
- package/dist/server/mcp/security-audit.d.ts +52 -0
- package/dist/server/mcp/security-audit.d.ts.map +1 -0
- package/dist/server/mcp/security-audit.js +118 -0
- package/dist/server/mcp/security-audit.js.map +1 -0
- package/dist/server/mcp/security-patterns.d.ts +73 -0
- package/dist/server/mcp/security-patterns.d.ts.map +1 -0
- package/dist/server/mcp/security-patterns.js +247 -0
- package/dist/server/mcp/security-patterns.js.map +1 -0
- package/dist/server/mcp/server.d.ts +3 -0
- package/dist/server/mcp/server.d.ts.map +1 -0
- package/dist/server/mcp/server.js +146 -0
- package/dist/server/mcp/server.js.map +1 -0
- package/dist/server/routes/files.d.ts +9 -0
- package/dist/server/routes/files.d.ts.map +1 -0
- package/dist/server/routes/files.js +24 -0
- package/dist/server/routes/files.js.map +1 -0
- package/dist/server/routes/improvise.d.ts +3 -0
- package/dist/server/routes/improvise.d.ts.map +1 -0
- package/dist/server/routes/improvise.js +72 -0
- package/dist/server/routes/improvise.js.map +1 -0
- package/dist/server/routes/index.d.ts +10 -0
- package/dist/server/routes/index.d.ts.map +1 -0
- package/dist/server/routes/index.js +12 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/instances.d.ts +10 -0
- package/dist/server/routes/instances.d.ts.map +1 -0
- package/dist/server/routes/instances.js +47 -0
- package/dist/server/routes/instances.js.map +1 -0
- package/dist/server/routes/notifications.d.ts +3 -0
- package/dist/server/routes/notifications.d.ts.map +1 -0
- package/dist/server/routes/notifications.js +136 -0
- package/dist/server/routes/notifications.js.map +1 -0
- package/dist/server/services/analytics.d.ts +56 -0
- package/dist/server/services/analytics.d.ts.map +1 -0
- package/dist/server/services/analytics.js +240 -0
- package/dist/server/services/analytics.js.map +1 -0
- package/dist/server/services/auth.d.ts +26 -0
- package/dist/server/services/auth.d.ts.map +1 -0
- package/dist/server/services/auth.js +71 -0
- package/dist/server/services/auth.js.map +1 -0
- package/dist/server/services/client-id.d.ts +10 -0
- package/dist/server/services/client-id.d.ts.map +1 -0
- package/dist/server/services/client-id.js +61 -0
- package/dist/server/services/client-id.js.map +1 -0
- package/dist/server/services/credentials.d.ts +39 -0
- package/dist/server/services/credentials.d.ts.map +1 -0
- package/dist/server/services/credentials.js +110 -0
- package/dist/server/services/credentials.js.map +1 -0
- package/dist/server/services/files.d.ts +119 -0
- package/dist/server/services/files.d.ts.map +1 -0
- package/dist/server/services/files.js +560 -0
- package/dist/server/services/files.js.map +1 -0
- package/dist/server/services/instances.d.ts +52 -0
- package/dist/server/services/instances.d.ts.map +1 -0
- package/dist/server/services/instances.js +241 -0
- package/dist/server/services/instances.js.map +1 -0
- package/dist/server/services/pathUtils.d.ts +47 -0
- package/dist/server/services/pathUtils.d.ts.map +1 -0
- package/dist/server/services/pathUtils.js +124 -0
- package/dist/server/services/pathUtils.js.map +1 -0
- package/dist/server/services/platform.d.ts +72 -0
- package/dist/server/services/platform.d.ts.map +1 -0
- package/dist/server/services/platform.js +368 -0
- package/dist/server/services/platform.js.map +1 -0
- package/dist/server/services/sentry.d.ts +5 -0
- package/dist/server/services/sentry.d.ts.map +1 -0
- package/dist/server/services/sentry.js +71 -0
- package/dist/server/services/sentry.js.map +1 -0
- package/dist/server/services/terminal/pty-manager.d.ts +149 -0
- package/dist/server/services/terminal/pty-manager.d.ts.map +1 -0
- package/dist/server/services/terminal/pty-manager.js +377 -0
- package/dist/server/services/terminal/pty-manager.js.map +1 -0
- package/dist/server/services/terminal/tmux-manager.d.ts +82 -0
- package/dist/server/services/terminal/tmux-manager.d.ts.map +1 -0
- package/dist/server/services/terminal/tmux-manager.js +352 -0
- package/dist/server/services/terminal/tmux-manager.js.map +1 -0
- package/dist/server/services/websocket/autocomplete.d.ts +50 -0
- package/dist/server/services/websocket/autocomplete.d.ts.map +1 -0
- package/dist/server/services/websocket/autocomplete.js +361 -0
- package/dist/server/services/websocket/autocomplete.js.map +1 -0
- package/dist/server/services/websocket/file-utils.d.ts +44 -0
- package/dist/server/services/websocket/file-utils.d.ts.map +1 -0
- package/dist/server/services/websocket/file-utils.js +272 -0
- package/dist/server/services/websocket/file-utils.js.map +1 -0
- package/dist/server/services/websocket/handler.d.ts +246 -0
- package/dist/server/services/websocket/handler.d.ts.map +1 -0
- package/dist/server/services/websocket/handler.js +1771 -0
- package/dist/server/services/websocket/handler.js.map +1 -0
- package/dist/server/services/websocket/index.d.ts +11 -0
- package/dist/server/services/websocket/index.d.ts.map +1 -0
- package/dist/server/services/websocket/index.js +14 -0
- package/dist/server/services/websocket/index.js.map +1 -0
- package/dist/server/services/websocket/types.d.ts +214 -0
- package/dist/server/services/websocket/types.d.ts.map +1 -0
- package/dist/server/services/websocket/types.js +4 -0
- package/dist/server/services/websocket/types.js.map +1 -0
- package/dist/server/utils/agent-manager.d.ts +69 -0
- package/dist/server/utils/agent-manager.d.ts.map +1 -0
- package/dist/server/utils/agent-manager.js +269 -0
- package/dist/server/utils/agent-manager.js.map +1 -0
- package/dist/server/utils/paths.d.ts +25 -0
- package/dist/server/utils/paths.d.ts.map +1 -0
- package/dist/server/utils/paths.js +38 -0
- package/dist/server/utils/paths.js.map +1 -0
- package/dist/server/utils/port-manager.d.ts +10 -0
- package/dist/server/utils/port-manager.d.ts.map +1 -0
- package/dist/server/utils/port-manager.js +60 -0
- package/dist/server/utils/port-manager.js.map +1 -0
- package/dist/server/utils/port.d.ts +26 -0
- package/dist/server/utils/port.d.ts.map +1 -0
- package/dist/server/utils/port.js +83 -0
- package/dist/server/utils/port.js.map +1 -0
- package/hooks/bouncer.sh +138 -0
- package/package.json +74 -0
- package/server/README.md +191 -0
- package/server/cli/headless/claude-invoker.ts +415 -0
- package/server/cli/headless/index.ts +39 -0
- package/server/cli/headless/mcp-config.ts +87 -0
- package/server/cli/headless/output-utils.ts +109 -0
- package/server/cli/headless/prompt-utils.ts +108 -0
- package/server/cli/headless/runner.ts +133 -0
- package/server/cli/headless/types.ts +118 -0
- package/server/cli/improvisation-session-manager.ts +531 -0
- package/server/index.ts +456 -0
- package/server/mcp/README.md +122 -0
- package/server/mcp/bouncer-cli.ts +127 -0
- package/server/mcp/bouncer-integration.ts +430 -0
- package/server/mcp/security-audit.ts +180 -0
- package/server/mcp/security-patterns.ts +290 -0
- package/server/mcp/server.ts +174 -0
- package/server/routes/files.ts +29 -0
- package/server/routes/improvise.ts +82 -0
- package/server/routes/index.ts +13 -0
- package/server/routes/instances.ts +54 -0
- package/server/routes/notifications.ts +158 -0
- package/server/services/analytics.ts +277 -0
- package/server/services/auth.ts +80 -0
- package/server/services/client-id.ts +68 -0
- package/server/services/credentials.ts +134 -0
- package/server/services/files.ts +710 -0
- package/server/services/instances.ts +275 -0
- package/server/services/pathUtils.ts +158 -0
- package/server/services/platform.test.ts +1314 -0
- package/server/services/platform.ts +435 -0
- package/server/services/sentry.ts +81 -0
- package/server/services/terminal/pty-manager.ts +464 -0
- package/server/services/terminal/tmux-manager.ts +426 -0
- package/server/services/websocket/autocomplete.ts +438 -0
- package/server/services/websocket/file-utils.ts +305 -0
- package/server/services/websocket/handler.test.ts +20 -0
- package/server/services/websocket/handler.ts +2047 -0
- package/server/services/websocket/index.ts +40 -0
- package/server/services/websocket/types.ts +339 -0
- package/server/tsconfig.json +19 -0
- package/server/utils/agent-manager.ts +323 -0
- package/server/utils/paths.ts +45 -0
- package/server/utils/port-manager.ts +70 -0
- package/server/utils/port.ts +102 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface Credentials {
|
|
2
|
+
token: string;
|
|
3
|
+
userId: string;
|
|
4
|
+
email: string;
|
|
5
|
+
name?: string;
|
|
6
|
+
deviceId?: string;
|
|
7
|
+
clientId: string;
|
|
8
|
+
createdAt: string;
|
|
9
|
+
lastRefreshedAt?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Get stored credentials, or null if not logged in
|
|
13
|
+
*/
|
|
14
|
+
export declare function getCredentials(): Credentials | null;
|
|
15
|
+
/**
|
|
16
|
+
* Save credentials after successful login
|
|
17
|
+
*/
|
|
18
|
+
export declare function saveCredentials(credentials: Credentials): void;
|
|
19
|
+
/**
|
|
20
|
+
* Update the token (used during refresh)
|
|
21
|
+
*/
|
|
22
|
+
export declare function updateToken(newToken: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* Delete credentials (logout)
|
|
25
|
+
*/
|
|
26
|
+
export declare function deleteCredentials(): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Check if user is logged in
|
|
29
|
+
*/
|
|
30
|
+
export declare function isLoggedIn(): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Get the credentials file path (for display)
|
|
33
|
+
*/
|
|
34
|
+
export declare function getCredentialsPath(): string;
|
|
35
|
+
/**
|
|
36
|
+
* Get the mstro directory path
|
|
37
|
+
*/
|
|
38
|
+
export declare function getMstroDir(): string;
|
|
39
|
+
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../server/services/credentials.ts"],"names":[],"mappings":"AA4BA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAWD;;GAEG;AACH,wBAAgB,cAAc,IAAI,WAAW,GAAG,IAAI,CAoBnD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAK9D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CASlD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAY3C;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAEpC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// Copyright (c) 2025-present Mstro, Inc. All rights reserved.
|
|
2
|
+
// Licensed under the MIT License. See LICENSE file for details.
|
|
3
|
+
/**
|
|
4
|
+
* Credentials Service
|
|
5
|
+
*
|
|
6
|
+
* Manages persistent authentication credentials stored in ~/.mstro/credentials.json
|
|
7
|
+
*
|
|
8
|
+
* Structure:
|
|
9
|
+
* {
|
|
10
|
+
* "token": "device-token-here",
|
|
11
|
+
* "userId": "user-uuid",
|
|
12
|
+
* "email": "user@example.com",
|
|
13
|
+
* "name": "User Name",
|
|
14
|
+
* "deviceId": "device-uuid",
|
|
15
|
+
* "clientId": "client-uuid",
|
|
16
|
+
* "createdAt": "2024-01-01T00:00:00.000Z",
|
|
17
|
+
* "lastRefreshedAt": "2024-01-01T00:00:00.000Z"
|
|
18
|
+
* }
|
|
19
|
+
*/
|
|
20
|
+
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
21
|
+
import { homedir } from 'node:os';
|
|
22
|
+
import { join } from 'node:path';
|
|
23
|
+
const MSTRO_DIR = join(homedir(), '.mstro');
|
|
24
|
+
const CREDENTIALS_FILE = join(MSTRO_DIR, 'credentials.json');
|
|
25
|
+
/**
|
|
26
|
+
* Ensure the ~/.mstro directory exists
|
|
27
|
+
*/
|
|
28
|
+
function ensureMstroDir() {
|
|
29
|
+
if (!existsSync(MSTRO_DIR)) {
|
|
30
|
+
mkdirSync(MSTRO_DIR, { recursive: true, mode: 0o700 });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get stored credentials, or null if not logged in
|
|
35
|
+
*/
|
|
36
|
+
export function getCredentials() {
|
|
37
|
+
if (!existsSync(CREDENTIALS_FILE)) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const content = readFileSync(CREDENTIALS_FILE, 'utf-8');
|
|
42
|
+
const credentials = JSON.parse(content);
|
|
43
|
+
// Validate required fields
|
|
44
|
+
if (!credentials.token || !credentials.userId || !credentials.email || !credentials.clientId) {
|
|
45
|
+
console.warn('Invalid credentials file, missing required fields');
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
return credentials;
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
console.warn('Failed to read credentials file:', err);
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Save credentials after successful login
|
|
57
|
+
*/
|
|
58
|
+
export function saveCredentials(credentials) {
|
|
59
|
+
ensureMstroDir();
|
|
60
|
+
writeFileSync(CREDENTIALS_FILE, JSON.stringify(credentials, null, 2), {
|
|
61
|
+
mode: 0o600 // Read/write for owner only
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Update the token (used during refresh)
|
|
66
|
+
*/
|
|
67
|
+
export function updateToken(newToken) {
|
|
68
|
+
const credentials = getCredentials();
|
|
69
|
+
if (!credentials) {
|
|
70
|
+
throw new Error('No credentials to update');
|
|
71
|
+
}
|
|
72
|
+
credentials.token = newToken;
|
|
73
|
+
credentials.lastRefreshedAt = new Date().toISOString();
|
|
74
|
+
saveCredentials(credentials);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Delete credentials (logout)
|
|
78
|
+
*/
|
|
79
|
+
export function deleteCredentials() {
|
|
80
|
+
if (!existsSync(CREDENTIALS_FILE)) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
unlinkSync(CREDENTIALS_FILE);
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
console.error('Failed to delete credentials:', err);
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Check if user is logged in
|
|
94
|
+
*/
|
|
95
|
+
export function isLoggedIn() {
|
|
96
|
+
return getCredentials() !== null;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get the credentials file path (for display)
|
|
100
|
+
*/
|
|
101
|
+
export function getCredentialsPath() {
|
|
102
|
+
return CREDENTIALS_FILE;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get the mstro directory path
|
|
106
|
+
*/
|
|
107
|
+
export function getMstroDir() {
|
|
108
|
+
return MSTRO_DIR;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../server/services/credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
export interface FileItem {
|
|
2
|
+
name: string;
|
|
3
|
+
path: string;
|
|
4
|
+
isDirectory: boolean;
|
|
5
|
+
score?: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Directory entry with metadata for file explorer
|
|
9
|
+
*/
|
|
10
|
+
export interface DirectoryEntry {
|
|
11
|
+
name: string;
|
|
12
|
+
path: string;
|
|
13
|
+
type: 'file' | 'directory';
|
|
14
|
+
size?: number;
|
|
15
|
+
modifiedAt?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Result type for file operations
|
|
19
|
+
*/
|
|
20
|
+
export interface FileOperationResult {
|
|
21
|
+
success: boolean;
|
|
22
|
+
path?: string;
|
|
23
|
+
error?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Result type for list directory operation
|
|
27
|
+
*/
|
|
28
|
+
export interface ListDirectoryResult {
|
|
29
|
+
success: boolean;
|
|
30
|
+
entries?: DirectoryEntry[];
|
|
31
|
+
error?: string;
|
|
32
|
+
}
|
|
33
|
+
export declare class FileService {
|
|
34
|
+
private workingDirectory;
|
|
35
|
+
private skipDirs;
|
|
36
|
+
constructor(workingDirectory: string);
|
|
37
|
+
/**
|
|
38
|
+
* Get all files recursively with optional filtering
|
|
39
|
+
*/
|
|
40
|
+
getAllFiles(_baseDir?: 'working' | 'scores', filter?: string, limit?: number): FileItem[];
|
|
41
|
+
/**
|
|
42
|
+
* Recursively scan directory
|
|
43
|
+
*/
|
|
44
|
+
private scanDirectory;
|
|
45
|
+
/**
|
|
46
|
+
* Filter files and assign relevance scores
|
|
47
|
+
*/
|
|
48
|
+
private filterAndScore;
|
|
49
|
+
/**
|
|
50
|
+
* Get file statistics
|
|
51
|
+
*/
|
|
52
|
+
getFileStats(path: string, _baseDir?: 'working' | 'scores'): {
|
|
53
|
+
size: number;
|
|
54
|
+
created: Date;
|
|
55
|
+
modified: Date;
|
|
56
|
+
isDirectory: boolean;
|
|
57
|
+
isFile: boolean;
|
|
58
|
+
} | null;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* List immediate children of a directory.
|
|
62
|
+
* Returns entries sorted: directories first, then files, alphabetically.
|
|
63
|
+
*
|
|
64
|
+
* @param dirPath - Directory path (relative to workingDir or absolute)
|
|
65
|
+
* @param workingDir - Working directory boundary
|
|
66
|
+
* @param showHidden - Whether to show hidden files (starting with .)
|
|
67
|
+
* @returns ListDirectoryResult with entries array or error
|
|
68
|
+
*/
|
|
69
|
+
export declare function listDirectory(dirPath: string, workingDir: string, showHidden?: boolean): ListDirectoryResult;
|
|
70
|
+
/**
|
|
71
|
+
* Write content to a file.
|
|
72
|
+
* Creates parent directories if needed.
|
|
73
|
+
*
|
|
74
|
+
* @param filePath - File path (relative to workingDir or absolute)
|
|
75
|
+
* @param content - Content to write
|
|
76
|
+
* @param workingDir - Working directory boundary
|
|
77
|
+
* @returns FileOperationResult
|
|
78
|
+
*/
|
|
79
|
+
export declare function writeFile(filePath: string, content: string, workingDir: string): FileOperationResult;
|
|
80
|
+
/**
|
|
81
|
+
* Create an empty file.
|
|
82
|
+
* Returns error if file already exists.
|
|
83
|
+
*
|
|
84
|
+
* @param filePath - File path (relative to workingDir or absolute)
|
|
85
|
+
* @param workingDir - Working directory boundary
|
|
86
|
+
* @returns FileOperationResult
|
|
87
|
+
*/
|
|
88
|
+
export declare function createFile(filePath: string, workingDir: string): FileOperationResult;
|
|
89
|
+
/**
|
|
90
|
+
* Create a directory (recursively if needed).
|
|
91
|
+
* Returns error if directory already exists.
|
|
92
|
+
*
|
|
93
|
+
* @param dirPath - Directory path (relative to workingDir or absolute)
|
|
94
|
+
* @param workingDir - Working directory boundary
|
|
95
|
+
* @returns FileOperationResult
|
|
96
|
+
*/
|
|
97
|
+
export declare function createDirectory(dirPath: string, workingDir: string): FileOperationResult;
|
|
98
|
+
/**
|
|
99
|
+
* Delete a file or EMPTY directory.
|
|
100
|
+
* For safety, only deletes empty directories.
|
|
101
|
+
*
|
|
102
|
+
* CRITICAL: Validates path is within workingDir to prevent path traversal.
|
|
103
|
+
*
|
|
104
|
+
* @param targetPath - Path to delete (relative to workingDir or absolute)
|
|
105
|
+
* @param workingDir - Working directory boundary
|
|
106
|
+
* @returns FileOperationResult
|
|
107
|
+
*/
|
|
108
|
+
export declare function deleteFile(targetPath: string, workingDir: string): FileOperationResult;
|
|
109
|
+
/**
|
|
110
|
+
* Rename or move a file/directory.
|
|
111
|
+
* Both source and destination must be within workingDir.
|
|
112
|
+
*
|
|
113
|
+
* @param oldPath - Current path (relative to workingDir or absolute)
|
|
114
|
+
* @param newPath - New path (relative to workingDir or absolute)
|
|
115
|
+
* @param workingDir - Working directory boundary
|
|
116
|
+
* @returns FileOperationResult
|
|
117
|
+
*/
|
|
118
|
+
export declare function renameFile(oldPath: string, newPath: string, workingDir: string): FileOperationResult;
|
|
119
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../server/services/files.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAYD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,cAAc,EAAE,CAAA;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAA+F;gBAEnG,gBAAgB,EAAE,MAAM;IAIpC;;OAEG;IACH,WAAW,CACT,QAAQ,GAAE,SAAS,GAAG,QAAoB,EAC1C,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,GAAE,MAAW,GACjB,QAAQ,EAAE;IAyBb;;OAEG;IACH,OAAO,CAAC,aAAa;IAyCrB;;OAEG;IACH,OAAO,CAAC,cAAc;IA6CtB;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,SAAS,GAAG,QAAoB;;;;;;;CAiBtE;AAMD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,UAAU,GAAE,OAAe,GAC1B,mBAAmB,CA0GrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,mBAAmB,CAqDrB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,mBAAmB,CAkDrB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,mBAAmB,CAoDrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CACxB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,mBAAmB,CAmErB;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,mBAAmB,CAmErB"}
|