linguclaw 0.4.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 +21 -0
- package/README.md +161 -0
- package/dist/agent-system.d.ts +196 -0
- package/dist/agent-system.d.ts.map +1 -0
- package/dist/agent-system.js +738 -0
- package/dist/agent-system.js.map +1 -0
- package/dist/alphabeta.d.ts +54 -0
- package/dist/alphabeta.d.ts.map +1 -0
- package/dist/alphabeta.js +193 -0
- package/dist/alphabeta.js.map +1 -0
- package/dist/browser.d.ts +62 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +224 -0
- package/dist/browser.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +565 -0
- package/dist/cli.js.map +1 -0
- package/dist/code-parser.d.ts +39 -0
- package/dist/code-parser.d.ts.map +1 -0
- package/dist/code-parser.js +385 -0
- package/dist/code-parser.js.map +1 -0
- package/dist/config.d.ts +66 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +232 -0
- package/dist/config.js.map +1 -0
- package/dist/core/engine.d.ts +359 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +127 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/daemon.d.ts +29 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +212 -0
- package/dist/daemon.js.map +1 -0
- package/dist/email-receiver.d.ts +63 -0
- package/dist/email-receiver.d.ts.map +1 -0
- package/dist/email-receiver.js +553 -0
- package/dist/email-receiver.js.map +1 -0
- package/dist/git-integration.d.ts +180 -0
- package/dist/git-integration.d.ts.map +1 -0
- package/dist/git-integration.js +850 -0
- package/dist/git-integration.js.map +1 -0
- package/dist/inbox.d.ts +84 -0
- package/dist/inbox.d.ts.map +1 -0
- package/dist/inbox.js +198 -0
- package/dist/inbox.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/languages/cpp.d.ts +51 -0
- package/dist/languages/cpp.d.ts.map +1 -0
- package/dist/languages/cpp.js +930 -0
- package/dist/languages/cpp.js.map +1 -0
- package/dist/languages/csharp.d.ts +79 -0
- package/dist/languages/csharp.d.ts.map +1 -0
- package/dist/languages/csharp.js +1776 -0
- package/dist/languages/csharp.js.map +1 -0
- package/dist/languages/go.d.ts +50 -0
- package/dist/languages/go.d.ts.map +1 -0
- package/dist/languages/go.js +882 -0
- package/dist/languages/go.js.map +1 -0
- package/dist/languages/java.d.ts +47 -0
- package/dist/languages/java.d.ts.map +1 -0
- package/dist/languages/java.js +649 -0
- package/dist/languages/java.js.map +1 -0
- package/dist/languages/python.d.ts +47 -0
- package/dist/languages/python.d.ts.map +1 -0
- package/dist/languages/python.js +655 -0
- package/dist/languages/python.js.map +1 -0
- package/dist/languages/rust.d.ts +61 -0
- package/dist/languages/rust.d.ts.map +1 -0
- package/dist/languages/rust.js +1064 -0
- package/dist/languages/rust.js.map +1 -0
- package/dist/logger.d.ts +20 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +133 -0
- package/dist/logger.js.map +1 -0
- package/dist/longterm-memory.d.ts +47 -0
- package/dist/longterm-memory.d.ts.map +1 -0
- package/dist/longterm-memory.js +300 -0
- package/dist/longterm-memory.js.map +1 -0
- package/dist/memory.d.ts +42 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +274 -0
- package/dist/memory.js.map +1 -0
- package/dist/messaging.d.ts +103 -0
- package/dist/messaging.d.ts.map +1 -0
- package/dist/messaging.js +645 -0
- package/dist/messaging.js.map +1 -0
- package/dist/multi-provider.d.ts +69 -0
- package/dist/multi-provider.d.ts.map +1 -0
- package/dist/multi-provider.js +484 -0
- package/dist/multi-provider.js.map +1 -0
- package/dist/orchestrator.d.ts +65 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +441 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/plugins.d.ts +52 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +215 -0
- package/dist/plugins.js.map +1 -0
- package/dist/prism-orchestrator.d.ts +26 -0
- package/dist/prism-orchestrator.d.ts.map +1 -0
- package/dist/prism-orchestrator.js +191 -0
- package/dist/prism-orchestrator.js.map +1 -0
- package/dist/prism.d.ts +46 -0
- package/dist/prism.d.ts.map +1 -0
- package/dist/prism.js +188 -0
- package/dist/prism.js.map +1 -0
- package/dist/privacy.d.ts +23 -0
- package/dist/privacy.d.ts.map +1 -0
- package/dist/privacy.js +220 -0
- package/dist/privacy.js.map +1 -0
- package/dist/proactive.d.ts +30 -0
- package/dist/proactive.d.ts.map +1 -0
- package/dist/proactive.js +260 -0
- package/dist/proactive.js.map +1 -0
- package/dist/refactoring-engine.d.ts +100 -0
- package/dist/refactoring-engine.d.ts.map +1 -0
- package/dist/refactoring-engine.js +717 -0
- package/dist/refactoring-engine.js.map +1 -0
- package/dist/resilience.d.ts +43 -0
- package/dist/resilience.d.ts.map +1 -0
- package/dist/resilience.js +200 -0
- package/dist/resilience.js.map +1 -0
- package/dist/safety.d.ts +40 -0
- package/dist/safety.d.ts.map +1 -0
- package/dist/safety.js +133 -0
- package/dist/safety.js.map +1 -0
- package/dist/sandbox.d.ts +33 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +173 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/scheduler.d.ts +72 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +374 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/semantic-memory.d.ts +70 -0
- package/dist/semantic-memory.d.ts.map +1 -0
- package/dist/semantic-memory.js +430 -0
- package/dist/semantic-memory.js.map +1 -0
- package/dist/skills.d.ts +97 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +575 -0
- package/dist/skills.js.map +1 -0
- package/dist/static/dashboard.html +853 -0
- package/dist/static/hub.html +772 -0
- package/dist/static/index.html +818 -0
- package/dist/static/logo.svg +24 -0
- package/dist/static/workflow-editor.html +913 -0
- package/dist/tools.d.ts +67 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +303 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +295 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +90 -0
- package/dist/types.js.map +1 -0
- package/dist/web.d.ts +76 -0
- package/dist/web.d.ts.map +1 -0
- package/dist/web.js +2139 -0
- package/dist/web.js.map +1 -0
- package/dist/workflow-engine.d.ts +114 -0
- package/dist/workflow-engine.d.ts.map +1 -0
- package/dist/workflow-engine.js +855 -0
- package/dist/workflow-engine.js.map +1 -0
- package/package.json +77 -0
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Containerized tools with Docker sandboxing
|
|
3
|
+
* TypeScript equivalent of Python tools.py
|
|
4
|
+
*/
|
|
5
|
+
import { DockerSandbox } from './sandbox';
|
|
6
|
+
import { SafetyMiddleware, FallbackSafetyMode } from './safety';
|
|
7
|
+
import { CommandResult, FileResult } from './types';
|
|
8
|
+
export declare class ShellTool {
|
|
9
|
+
projectRoot: string;
|
|
10
|
+
safety: SafetyMiddleware;
|
|
11
|
+
sandbox: DockerSandbox | null;
|
|
12
|
+
fallback: FallbackSafetyMode | null;
|
|
13
|
+
private usingDocker;
|
|
14
|
+
constructor(projectRoot: string, useDocker?: boolean, safety?: SafetyMiddleware, fallbackConfirmed?: boolean);
|
|
15
|
+
/**
|
|
16
|
+
* Initialize Docker sandbox
|
|
17
|
+
*/
|
|
18
|
+
init(): Promise<boolean>;
|
|
19
|
+
private initFallback;
|
|
20
|
+
/**
|
|
21
|
+
* Check if running in sandbox
|
|
22
|
+
*/
|
|
23
|
+
get isSandboxed(): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Execute command in sandbox or fallback
|
|
26
|
+
*/
|
|
27
|
+
run(command: string, timeout?: number): Promise<CommandResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Cleanup sandbox resources
|
|
30
|
+
*/
|
|
31
|
+
stop(): Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* RAG-based semantic search over codebase memory
|
|
35
|
+
*/
|
|
36
|
+
export declare class SearchMemoryTool {
|
|
37
|
+
private memory;
|
|
38
|
+
constructor(memory: any);
|
|
39
|
+
searchCodebase(query: string, k?: number): string;
|
|
40
|
+
getStats(): Record<string, any>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Sandboxed filesystem operations
|
|
44
|
+
*/
|
|
45
|
+
export declare class FileSystemTool {
|
|
46
|
+
root: string;
|
|
47
|
+
constructor(root: string);
|
|
48
|
+
/**
|
|
49
|
+
* Validate path is within root (prevents path traversal)
|
|
50
|
+
*/
|
|
51
|
+
private validate;
|
|
52
|
+
private static readonly MAX_FILE_SIZE;
|
|
53
|
+
private static readonly MAX_DIR_ENTRIES;
|
|
54
|
+
/**
|
|
55
|
+
* Read file contents
|
|
56
|
+
*/
|
|
57
|
+
read(filePath: string, limit?: number): FileResult;
|
|
58
|
+
/**
|
|
59
|
+
* Write file contents
|
|
60
|
+
*/
|
|
61
|
+
write(filePath: string, content: string): FileResult;
|
|
62
|
+
/**
|
|
63
|
+
* List directory contents
|
|
64
|
+
*/
|
|
65
|
+
listDir(dirPath?: string): FileResult;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAiB,MAAM,SAAS,CAAC;AAMnE,qBAAa,SAAS;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,WAAW,CAAU;gBAG3B,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,OAAc,EACzB,MAAM,CAAC,EAAE,gBAAgB,EACzB,iBAAiB,GAAE,OAAe;IAyBpC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAkB9B,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;OAEG;IACG,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW,GAAG,OAAO,CAAC,aAAa,CAAC;IAmExE;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAK5B;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAM;gBAER,MAAM,EAAE,GAAG;IAIvB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,GAAE,MAAU,GAAG,MAAM;IAOpD,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAGhC;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,IAAI,EAAE,MAAM,CAAC;gBAED,IAAI,EAAE,MAAM;IAOxB;;OAEG;IACH,OAAO,CAAC,QAAQ;IA6BhB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAoB;IACzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAQ;IAE/C;;OAEG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU;IA2BlD;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU;IAiBpD;;OAEG;IACH,OAAO,CAAC,OAAO,GAAE,MAAY,GAAG,UAAU;CA4B3C"}
|
package/dist/tools.js
ADDED
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Containerized tools with Docker sandboxing
|
|
4
|
+
* TypeScript equivalent of Python tools.py
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.FileSystemTool = exports.SearchMemoryTool = exports.ShellTool = void 0;
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const fs_1 = __importDefault(require("fs"));
|
|
13
|
+
const util_1 = require("util");
|
|
14
|
+
const child_process_1 = require("child_process");
|
|
15
|
+
const sandbox_1 = require("./sandbox");
|
|
16
|
+
const safety_1 = require("./safety");
|
|
17
|
+
const logger_1 = require("./logger");
|
|
18
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
19
|
+
const logger = (0, logger_1.getLogger)();
|
|
20
|
+
class ShellTool {
|
|
21
|
+
projectRoot;
|
|
22
|
+
safety;
|
|
23
|
+
sandbox;
|
|
24
|
+
fallback;
|
|
25
|
+
usingDocker;
|
|
26
|
+
constructor(projectRoot, useDocker = true, safety, fallbackConfirmed = false) {
|
|
27
|
+
this.projectRoot = path_1.default.resolve(projectRoot);
|
|
28
|
+
this.safety = safety || new safety_1.SafetyMiddleware();
|
|
29
|
+
this.sandbox = null;
|
|
30
|
+
this.fallback = null;
|
|
31
|
+
this.usingDocker = false;
|
|
32
|
+
// Ensure project directory exists
|
|
33
|
+
if (!fs_1.default.existsSync(this.projectRoot)) {
|
|
34
|
+
fs_1.default.mkdirSync(this.projectRoot, { recursive: true });
|
|
35
|
+
}
|
|
36
|
+
if (useDocker) {
|
|
37
|
+
this.sandbox = new sandbox_1.DockerSandbox({
|
|
38
|
+
image: 'alpine:latest',
|
|
39
|
+
memory_limit: '512m',
|
|
40
|
+
cpu_limit: 0.5,
|
|
41
|
+
auto_remove: true,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
this.initFallback(fallbackConfirmed);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Initialize Docker sandbox
|
|
50
|
+
*/
|
|
51
|
+
async init() {
|
|
52
|
+
if (this.sandbox) {
|
|
53
|
+
const available = await this.sandbox.checkAvailability();
|
|
54
|
+
if (available) {
|
|
55
|
+
const started = await this.sandbox.start(this.projectRoot);
|
|
56
|
+
if (started) {
|
|
57
|
+
this.usingDocker = true;
|
|
58
|
+
logger.info('Using Docker sandbox');
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
logger.warn('Docker available but sandbox start failed');
|
|
63
|
+
}
|
|
64
|
+
this.initFallback(false);
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
initFallback(confirmed) {
|
|
68
|
+
this.fallback = new safety_1.FallbackSafetyMode(this.safety, confirmed);
|
|
69
|
+
logger.warn('Docker unavailable - using strict safety fallback');
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Check if running in sandbox
|
|
73
|
+
*/
|
|
74
|
+
get isSandboxed() {
|
|
75
|
+
return this.usingDocker && this.sandbox !== null;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Execute command in sandbox or fallback
|
|
79
|
+
*/
|
|
80
|
+
async run(command, timeout = 60) {
|
|
81
|
+
if (this.isSandboxed && this.sandbox) {
|
|
82
|
+
// Docker sandboxed execution
|
|
83
|
+
try {
|
|
84
|
+
const result = await this.sandbox.exec(command);
|
|
85
|
+
return {
|
|
86
|
+
stdout: result.stdout,
|
|
87
|
+
stderr: result.stderr,
|
|
88
|
+
returncode: result.exit_code,
|
|
89
|
+
sandboxed: true,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
return {
|
|
94
|
+
stdout: '',
|
|
95
|
+
stderr: `Sandbox error: ${error.message}`,
|
|
96
|
+
returncode: -1,
|
|
97
|
+
sandboxed: true,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else if (this.fallback) {
|
|
102
|
+
// Strict safety fallback
|
|
103
|
+
const allowed = this.fallback.check(command);
|
|
104
|
+
if (!allowed.allowed) {
|
|
105
|
+
// Try to get explicit confirmation
|
|
106
|
+
if (this.fallback.promptConfirmation(command)) {
|
|
107
|
+
// Proceed with execution
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
return {
|
|
111
|
+
stdout: '',
|
|
112
|
+
stderr: `STRICT SAFETY BLOCKED: ${allowed.reason}`,
|
|
113
|
+
returncode: -1,
|
|
114
|
+
sandboxed: false,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Execute with basic subprocess
|
|
119
|
+
try {
|
|
120
|
+
const { stdout, stderr } = await execAsync(command, {
|
|
121
|
+
cwd: this.projectRoot,
|
|
122
|
+
timeout: timeout * 1000,
|
|
123
|
+
});
|
|
124
|
+
return {
|
|
125
|
+
stdout: stdout || '',
|
|
126
|
+
stderr: stderr || '',
|
|
127
|
+
returncode: 0,
|
|
128
|
+
sandboxed: false,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
return {
|
|
133
|
+
stdout: '',
|
|
134
|
+
stderr: error.stderr || error.message,
|
|
135
|
+
returncode: error.code || -1,
|
|
136
|
+
sandboxed: false,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
stdout: '',
|
|
142
|
+
stderr: 'No execution method available',
|
|
143
|
+
returncode: -1,
|
|
144
|
+
sandboxed: false,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Cleanup sandbox resources
|
|
149
|
+
*/
|
|
150
|
+
async stop() {
|
|
151
|
+
if (this.sandbox) {
|
|
152
|
+
await this.sandbox.stop();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.ShellTool = ShellTool;
|
|
157
|
+
/**
|
|
158
|
+
* RAG-based semantic search over codebase memory
|
|
159
|
+
*/
|
|
160
|
+
class SearchMemoryTool {
|
|
161
|
+
memory; // RAGMemory type would be imported
|
|
162
|
+
constructor(memory) {
|
|
163
|
+
this.memory = memory;
|
|
164
|
+
}
|
|
165
|
+
searchCodebase(query, k = 5) {
|
|
166
|
+
if (!this.memory.available) {
|
|
167
|
+
return '[Memory unavailable - RAG system offline]';
|
|
168
|
+
}
|
|
169
|
+
return this.memory.search(query, k);
|
|
170
|
+
}
|
|
171
|
+
getStats() {
|
|
172
|
+
return this.memory.getStats();
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
exports.SearchMemoryTool = SearchMemoryTool;
|
|
176
|
+
/**
|
|
177
|
+
* Sandboxed filesystem operations
|
|
178
|
+
*/
|
|
179
|
+
class FileSystemTool {
|
|
180
|
+
root;
|
|
181
|
+
constructor(root) {
|
|
182
|
+
this.root = path_1.default.resolve(root);
|
|
183
|
+
if (!fs_1.default.existsSync(this.root)) {
|
|
184
|
+
fs_1.default.mkdirSync(this.root, { recursive: true });
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Validate path is within root (prevents path traversal)
|
|
189
|
+
*/
|
|
190
|
+
validate(targetPath) {
|
|
191
|
+
const target = path_1.default.resolve(this.root, targetPath);
|
|
192
|
+
const realRoot = fs_1.default.realpathSync(this.root);
|
|
193
|
+
// Resolve symlinks to prevent traversal via symlinks
|
|
194
|
+
let realTarget;
|
|
195
|
+
try {
|
|
196
|
+
realTarget = fs_1.default.realpathSync(target);
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
// File may not exist yet (for write), check parent
|
|
200
|
+
const parent = path_1.default.dirname(target);
|
|
201
|
+
try {
|
|
202
|
+
const realParent = fs_1.default.realpathSync(parent);
|
|
203
|
+
if (!realParent.startsWith(realRoot)) {
|
|
204
|
+
throw new Error(`Access denied: ${targetPath} outside project root`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
// Parent doesn't exist either, just check resolved path
|
|
209
|
+
if (!target.startsWith(realRoot)) {
|
|
210
|
+
throw new Error(`Access denied: ${targetPath} outside project root`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return target;
|
|
214
|
+
}
|
|
215
|
+
if (!realTarget.startsWith(realRoot)) {
|
|
216
|
+
throw new Error(`Access denied: ${targetPath} outside project root`);
|
|
217
|
+
}
|
|
218
|
+
return realTarget;
|
|
219
|
+
}
|
|
220
|
+
static MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB
|
|
221
|
+
static MAX_DIR_ENTRIES = 5000;
|
|
222
|
+
/**
|
|
223
|
+
* Read file contents
|
|
224
|
+
*/
|
|
225
|
+
read(filePath, limit) {
|
|
226
|
+
try {
|
|
227
|
+
const target = this.validate(filePath);
|
|
228
|
+
if (!fs_1.default.existsSync(target)) {
|
|
229
|
+
return { success: false, error: `Not found: ${filePath}` };
|
|
230
|
+
}
|
|
231
|
+
const stat = fs_1.default.statSync(target);
|
|
232
|
+
if (!stat.isFile()) {
|
|
233
|
+
return { success: false, error: `Not a file: ${filePath}` };
|
|
234
|
+
}
|
|
235
|
+
if (stat.size > FileSystemTool.MAX_FILE_SIZE) {
|
|
236
|
+
return { success: false, error: `File too large (${Math.round(stat.size / 1024 / 1024)}MB > 10MB limit)` };
|
|
237
|
+
}
|
|
238
|
+
let content = fs_1.default.readFileSync(target, 'utf-8');
|
|
239
|
+
if (limit && content.length > limit) {
|
|
240
|
+
content = content.slice(0, limit) + `\n... (${content.length - limit} more)`;
|
|
241
|
+
}
|
|
242
|
+
return { success: true, content };
|
|
243
|
+
}
|
|
244
|
+
catch (error) {
|
|
245
|
+
if (error.message.includes('Access denied')) {
|
|
246
|
+
return { success: false, error: error.message };
|
|
247
|
+
}
|
|
248
|
+
return { success: false, error: `Read error: ${error.message}` };
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Write file contents
|
|
253
|
+
*/
|
|
254
|
+
write(filePath, content) {
|
|
255
|
+
try {
|
|
256
|
+
const target = this.validate(filePath);
|
|
257
|
+
const dir = path_1.default.dirname(target);
|
|
258
|
+
if (!fs_1.default.existsSync(dir)) {
|
|
259
|
+
fs_1.default.mkdirSync(dir, { recursive: true });
|
|
260
|
+
}
|
|
261
|
+
fs_1.default.writeFileSync(target, content, 'utf-8');
|
|
262
|
+
return { success: true };
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
if (error.message.includes('Access denied')) {
|
|
266
|
+
return { success: false, error: error.message };
|
|
267
|
+
}
|
|
268
|
+
return { success: false, error: `Write error: ${error.message}` };
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* List directory contents
|
|
273
|
+
*/
|
|
274
|
+
listDir(dirPath = '.') {
|
|
275
|
+
try {
|
|
276
|
+
const target = this.validate(dirPath);
|
|
277
|
+
if (!fs_1.default.existsSync(target)) {
|
|
278
|
+
return { success: false, error: `Not found: ${dirPath}` };
|
|
279
|
+
}
|
|
280
|
+
if (!fs_1.default.statSync(target).isDirectory()) {
|
|
281
|
+
return { success: false, error: `Not a directory: ${dirPath}` };
|
|
282
|
+
}
|
|
283
|
+
const entries = fs_1.default.readdirSync(target);
|
|
284
|
+
if (entries.length > FileSystemTool.MAX_DIR_ENTRIES) {
|
|
285
|
+
return { success: false, error: `Directory has ${entries.length} entries (limit: ${FileSystemTool.MAX_DIR_ENTRIES})` };
|
|
286
|
+
}
|
|
287
|
+
const formatted = entries.map(e => {
|
|
288
|
+
const fullPath = path_1.default.join(target, e);
|
|
289
|
+
const isDir = fs_1.default.statSync(fullPath).isDirectory();
|
|
290
|
+
return `${isDir ? '[dir]' : '[file]'} ${e}`;
|
|
291
|
+
});
|
|
292
|
+
return { success: true, content: formatted.sort().join('\n') };
|
|
293
|
+
}
|
|
294
|
+
catch (error) {
|
|
295
|
+
if (error.message.includes('Access denied')) {
|
|
296
|
+
return { success: false, error: error.message };
|
|
297
|
+
}
|
|
298
|
+
return { success: false, error: `List error: ${error.message}` };
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
exports.FileSystemTool = FileSystemTool;
|
|
303
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core types and interfaces for LinguClaw
|
|
3
|
+
* Equivalent to Python dataclasses and type definitions
|
|
4
|
+
*/
|
|
5
|
+
export interface Message {
|
|
6
|
+
role: 'system' | 'user' | 'assistant';
|
|
7
|
+
content: string;
|
|
8
|
+
}
|
|
9
|
+
export interface LLMResponse {
|
|
10
|
+
content: string;
|
|
11
|
+
usage?: {
|
|
12
|
+
prompt_tokens?: number;
|
|
13
|
+
completion_tokens?: number;
|
|
14
|
+
total_tokens?: number;
|
|
15
|
+
};
|
|
16
|
+
model: string;
|
|
17
|
+
finish_reason?: string | null;
|
|
18
|
+
error?: string | null;
|
|
19
|
+
}
|
|
20
|
+
export interface TokenBudget {
|
|
21
|
+
max_total: number;
|
|
22
|
+
used: number;
|
|
23
|
+
reserved: number;
|
|
24
|
+
threshold: number;
|
|
25
|
+
}
|
|
26
|
+
export declare enum ProviderType {
|
|
27
|
+
OPENROUTER = "openrouter",
|
|
28
|
+
OPENAI = "openai",
|
|
29
|
+
ANTHROPIC = "anthropic",
|
|
30
|
+
OLLAMA = "ollama",
|
|
31
|
+
LMSTUDIO = "lmstudio",
|
|
32
|
+
CUSTOM = "custom"
|
|
33
|
+
}
|
|
34
|
+
export declare enum AgentRole {
|
|
35
|
+
PLANNER = "planner",
|
|
36
|
+
EXECUTOR = "executor",
|
|
37
|
+
REVIEWER = "reviewer"
|
|
38
|
+
}
|
|
39
|
+
export declare enum StepStatus {
|
|
40
|
+
PENDING = "pending",
|
|
41
|
+
IN_PROGRESS = "in_progress",
|
|
42
|
+
COMPLETED = "completed",
|
|
43
|
+
FAILED = "failed",
|
|
44
|
+
RETRYING = "retrying"
|
|
45
|
+
}
|
|
46
|
+
export interface PlanStep {
|
|
47
|
+
id: string;
|
|
48
|
+
description: string;
|
|
49
|
+
agent: AgentRole;
|
|
50
|
+
status: StepStatus;
|
|
51
|
+
dependencies: string[];
|
|
52
|
+
result?: any;
|
|
53
|
+
error?: string | null;
|
|
54
|
+
retry_count: number;
|
|
55
|
+
max_retries: number;
|
|
56
|
+
}
|
|
57
|
+
export interface SharedState {
|
|
58
|
+
task: string;
|
|
59
|
+
plan: PlanStep[];
|
|
60
|
+
current_step_idx: number;
|
|
61
|
+
execution_log: ExecutionRecord[];
|
|
62
|
+
files_modified: string[];
|
|
63
|
+
context: Map<string, any>;
|
|
64
|
+
iteration: number;
|
|
65
|
+
max_iterations: number;
|
|
66
|
+
aborted: boolean;
|
|
67
|
+
}
|
|
68
|
+
export interface ExecutionRecord {
|
|
69
|
+
iteration: number;
|
|
70
|
+
timestamp: Date;
|
|
71
|
+
role: AgentRole;
|
|
72
|
+
content: string;
|
|
73
|
+
action: string;
|
|
74
|
+
result: string;
|
|
75
|
+
status: 'success' | 'error' | 'blocked';
|
|
76
|
+
}
|
|
77
|
+
export interface CommandResult {
|
|
78
|
+
stdout: string;
|
|
79
|
+
stderr: string;
|
|
80
|
+
returncode: number;
|
|
81
|
+
sandboxed: boolean;
|
|
82
|
+
}
|
|
83
|
+
export interface FileResult {
|
|
84
|
+
success: boolean;
|
|
85
|
+
content?: string | null;
|
|
86
|
+
error?: string | null;
|
|
87
|
+
}
|
|
88
|
+
export interface SafetyResult {
|
|
89
|
+
allowed: boolean;
|
|
90
|
+
risk_score: number;
|
|
91
|
+
reason: string;
|
|
92
|
+
}
|
|
93
|
+
export declare enum RiskLevel {
|
|
94
|
+
CRITICAL = 100,
|
|
95
|
+
HIGH = 90,
|
|
96
|
+
ELEVATED = 70,
|
|
97
|
+
MODERATE = 50,
|
|
98
|
+
LOW = 35,
|
|
99
|
+
MINIMAL = 10
|
|
100
|
+
}
|
|
101
|
+
export interface MemoryEntry {
|
|
102
|
+
key: string;
|
|
103
|
+
value: any;
|
|
104
|
+
category: string;
|
|
105
|
+
timestamp: Date;
|
|
106
|
+
access_count: number;
|
|
107
|
+
last_accessed: Date;
|
|
108
|
+
tags: string[];
|
|
109
|
+
expires_at?: Date | null;
|
|
110
|
+
}
|
|
111
|
+
export interface CodeChunk {
|
|
112
|
+
id: string;
|
|
113
|
+
file_path: string;
|
|
114
|
+
chunk_type: 'function' | 'class' | 'module' | 'other';
|
|
115
|
+
name: string;
|
|
116
|
+
content: string;
|
|
117
|
+
embedding?: number[];
|
|
118
|
+
line_start: number;
|
|
119
|
+
line_end: number;
|
|
120
|
+
}
|
|
121
|
+
export interface PluginConfig {
|
|
122
|
+
enabled: boolean;
|
|
123
|
+
settings: Record<string, any>;
|
|
124
|
+
}
|
|
125
|
+
export interface PluginContext {
|
|
126
|
+
config: PluginConfig;
|
|
127
|
+
logger: Logger;
|
|
128
|
+
memory_dir: string;
|
|
129
|
+
}
|
|
130
|
+
export interface PluginInfo {
|
|
131
|
+
name: string;
|
|
132
|
+
version: string;
|
|
133
|
+
description: string;
|
|
134
|
+
author: string;
|
|
135
|
+
dependencies: string[];
|
|
136
|
+
}
|
|
137
|
+
export declare enum MessagingPlatform {
|
|
138
|
+
WHATSAPP = "whatsapp",
|
|
139
|
+
TELEGRAM = "telegram",
|
|
140
|
+
DISCORD = "discord",
|
|
141
|
+
SLACK = "slack"
|
|
142
|
+
}
|
|
143
|
+
export interface ChatMessage {
|
|
144
|
+
platform: MessagingPlatform;
|
|
145
|
+
user_id: string;
|
|
146
|
+
username: string;
|
|
147
|
+
content: string;
|
|
148
|
+
timestamp: Date;
|
|
149
|
+
chat_id?: string;
|
|
150
|
+
reply_to?: string | null;
|
|
151
|
+
metadata: Record<string, any>;
|
|
152
|
+
}
|
|
153
|
+
export interface ChatResponse {
|
|
154
|
+
content: string;
|
|
155
|
+
platform: MessagingPlatform;
|
|
156
|
+
chat_id: string;
|
|
157
|
+
user_id?: string | null;
|
|
158
|
+
thread_id?: string | null;
|
|
159
|
+
actions: Record<string, any>[];
|
|
160
|
+
}
|
|
161
|
+
export declare enum SkillType {
|
|
162
|
+
PYTHON = "python",
|
|
163
|
+
JAVASCRIPT = "javascript",
|
|
164
|
+
SHELL = "shell",
|
|
165
|
+
API = "api"
|
|
166
|
+
}
|
|
167
|
+
export interface SkillResult {
|
|
168
|
+
success: boolean;
|
|
169
|
+
output?: any;
|
|
170
|
+
error?: string | null;
|
|
171
|
+
metadata?: Record<string, any>;
|
|
172
|
+
}
|
|
173
|
+
export interface SkillSchema {
|
|
174
|
+
name: string;
|
|
175
|
+
description: string;
|
|
176
|
+
version: string;
|
|
177
|
+
type: SkillType;
|
|
178
|
+
parameters: Record<string, any>;
|
|
179
|
+
}
|
|
180
|
+
export declare enum TriggerType {
|
|
181
|
+
TIME = "time",
|
|
182
|
+
INTERVAL = "interval",
|
|
183
|
+
EVENT = "event",
|
|
184
|
+
CONDITION = "condition"
|
|
185
|
+
}
|
|
186
|
+
export declare enum ActionType {
|
|
187
|
+
REMINDER = "reminder",
|
|
188
|
+
ALERT = "alert",
|
|
189
|
+
BRIEFING = "briefing",
|
|
190
|
+
TASK = "task",
|
|
191
|
+
NOTIFICATION = "notification",
|
|
192
|
+
MESSAGE = "message"
|
|
193
|
+
}
|
|
194
|
+
export interface ProactiveTask {
|
|
195
|
+
id: string;
|
|
196
|
+
name: string;
|
|
197
|
+
description: string;
|
|
198
|
+
trigger_type: TriggerType;
|
|
199
|
+
trigger_config: Record<string, any>;
|
|
200
|
+
action_type: ActionType;
|
|
201
|
+
action_config: Record<string, any>;
|
|
202
|
+
enabled: boolean;
|
|
203
|
+
last_run?: Date | null;
|
|
204
|
+
run_count: number;
|
|
205
|
+
created_at: Date;
|
|
206
|
+
tags: string[];
|
|
207
|
+
}
|
|
208
|
+
export declare enum DataRetention {
|
|
209
|
+
FOREVER = "forever",
|
|
210
|
+
THIRTY_DAYS = "30d",
|
|
211
|
+
SEVEN_DAYS = "7d",
|
|
212
|
+
SESSION = "session",
|
|
213
|
+
NONE = "none"
|
|
214
|
+
}
|
|
215
|
+
export declare enum LogLevel {
|
|
216
|
+
NONE = "none",
|
|
217
|
+
ERRORS_ONLY = "errors",
|
|
218
|
+
MINIMAL = "minimal",
|
|
219
|
+
FULL = "full"
|
|
220
|
+
}
|
|
221
|
+
export interface PrivacySettings {
|
|
222
|
+
conversation_retention: DataRetention;
|
|
223
|
+
memory_retention: DataRetention;
|
|
224
|
+
log_retention: DataRetention;
|
|
225
|
+
log_level: LogLevel;
|
|
226
|
+
log_to_cloud: boolean;
|
|
227
|
+
share_analytics: boolean;
|
|
228
|
+
share_crashes: boolean;
|
|
229
|
+
allow_remote_commands: boolean;
|
|
230
|
+
prefer_local_models: boolean;
|
|
231
|
+
offline_mode: boolean;
|
|
232
|
+
encrypt_memory: boolean;
|
|
233
|
+
encrypt_logs: boolean;
|
|
234
|
+
secure_delete: boolean;
|
|
235
|
+
require_auth: boolean;
|
|
236
|
+
allowed_users: string[];
|
|
237
|
+
admin_users: string[];
|
|
238
|
+
data_dir: string;
|
|
239
|
+
}
|
|
240
|
+
export interface Logger {
|
|
241
|
+
debug: (message: string, ...meta: any[]) => void;
|
|
242
|
+
info: (message: string, ...meta: any[]) => void;
|
|
243
|
+
warn: (message: string, ...meta: any[]) => void;
|
|
244
|
+
error: (message: string, ...meta: any[]) => void;
|
|
245
|
+
}
|
|
246
|
+
export interface SandboxConfig {
|
|
247
|
+
image: string;
|
|
248
|
+
memory_limit: string;
|
|
249
|
+
cpu_limit: number;
|
|
250
|
+
auto_remove: boolean;
|
|
251
|
+
network_disabled?: boolean;
|
|
252
|
+
}
|
|
253
|
+
export interface SandboxExecResult {
|
|
254
|
+
exit_code: number;
|
|
255
|
+
stdout: string;
|
|
256
|
+
stderr: string;
|
|
257
|
+
}
|
|
258
|
+
export interface FacetResult {
|
|
259
|
+
output: string;
|
|
260
|
+
confidence: number;
|
|
261
|
+
next_facet?: string | null;
|
|
262
|
+
complete: boolean;
|
|
263
|
+
}
|
|
264
|
+
export interface Branch {
|
|
265
|
+
id: string;
|
|
266
|
+
name: string;
|
|
267
|
+
strategy: 'conservative' | 'experimental' | 'custom';
|
|
268
|
+
risk_threshold: number;
|
|
269
|
+
result?: any;
|
|
270
|
+
fitness: number;
|
|
271
|
+
}
|
|
272
|
+
export interface DaemonStatus {
|
|
273
|
+
running: boolean;
|
|
274
|
+
started_at?: Date | null;
|
|
275
|
+
uptime_seconds: number;
|
|
276
|
+
tasks_processed: number;
|
|
277
|
+
errors_count: number;
|
|
278
|
+
active_services: string[];
|
|
279
|
+
}
|
|
280
|
+
export interface DashboardState {
|
|
281
|
+
current_task: string;
|
|
282
|
+
steps: PlanStep[];
|
|
283
|
+
logs: ExecutionRecord[];
|
|
284
|
+
stats: {
|
|
285
|
+
tokens_used: number;
|
|
286
|
+
commands_run: number;
|
|
287
|
+
iterations: number;
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
export interface WebSocketMessage {
|
|
291
|
+
type: 'state_update' | 'log' | 'thought' | 'error' | 'complete';
|
|
292
|
+
payload: any;
|
|
293
|
+
timestamp: Date;
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=types.d.ts.map
|