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
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* LinguClaw Advanced Architecture
|
|
4
|
+
* Multi-language code analysis platform with plugin system
|
|
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.LinguClawEngine = void 0;
|
|
11
|
+
const events_1 = require("events");
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
// ============================================
|
|
14
|
+
// MAIN ENGINE
|
|
15
|
+
// ============================================
|
|
16
|
+
class LinguClawEngine extends events_1.EventEmitter {
|
|
17
|
+
languages = new Map();
|
|
18
|
+
plugins = new Map();
|
|
19
|
+
sessions = new Map();
|
|
20
|
+
aiContext;
|
|
21
|
+
storage;
|
|
22
|
+
constructor(config) {
|
|
23
|
+
super();
|
|
24
|
+
this.storage = config.storage;
|
|
25
|
+
this.aiContext = this.initializeAIContext();
|
|
26
|
+
}
|
|
27
|
+
async registerLanguage(language) {
|
|
28
|
+
this.languages.set(language.id, language);
|
|
29
|
+
this.emit('language:registered', language);
|
|
30
|
+
}
|
|
31
|
+
async loadPlugin(plugin) {
|
|
32
|
+
const context = {
|
|
33
|
+
logger: console,
|
|
34
|
+
config: {},
|
|
35
|
+
storage: this.storage,
|
|
36
|
+
events: this,
|
|
37
|
+
registerLanguage: (lang) => this.registerLanguage(lang),
|
|
38
|
+
registerCommand: (cmd) => this.registerCommand(cmd),
|
|
39
|
+
};
|
|
40
|
+
await plugin.initialize(context);
|
|
41
|
+
this.plugins.set(plugin.id, plugin);
|
|
42
|
+
this.emit('plugin:loaded', plugin);
|
|
43
|
+
}
|
|
44
|
+
async analyzeFile(filePath, source) {
|
|
45
|
+
const ext = path_1.default.extname(filePath).slice(1).toLowerCase();
|
|
46
|
+
if (!ext) {
|
|
47
|
+
throw new Error(`Cannot determine file extension for: ${filePath}`);
|
|
48
|
+
}
|
|
49
|
+
const language = this.findLanguageByExtension(ext);
|
|
50
|
+
if (!language) {
|
|
51
|
+
throw new Error(`No language support for extension: .${ext}`);
|
|
52
|
+
}
|
|
53
|
+
// Run pre-parse hooks
|
|
54
|
+
let processedSource = source;
|
|
55
|
+
for (const plugin of this.plugins.values()) {
|
|
56
|
+
if (plugin.hooks.beforeParse) {
|
|
57
|
+
processedSource = await plugin.hooks.beforeParse(processedSource, language.id) || processedSource;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Parse
|
|
61
|
+
const parseResult = language.parser.parse(processedSource, filePath);
|
|
62
|
+
// Run post-parse hooks
|
|
63
|
+
let finalParse = parseResult;
|
|
64
|
+
for (const plugin of this.plugins.values()) {
|
|
65
|
+
if (plugin.hooks.afterParse) {
|
|
66
|
+
finalParse = await plugin.hooks.afterParse(finalParse) || finalParse;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Analyze
|
|
70
|
+
const context = {
|
|
71
|
+
filePath,
|
|
72
|
+
language: language.id,
|
|
73
|
+
engine: this,
|
|
74
|
+
};
|
|
75
|
+
for (const plugin of this.plugins.values()) {
|
|
76
|
+
if (plugin.hooks.beforeAnalyze) {
|
|
77
|
+
await plugin.hooks.beforeAnalyze(finalParse.ast);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const analysis = language.analyzer.analyze(finalParse.ast, context);
|
|
81
|
+
// Run post-analyze hooks
|
|
82
|
+
let finalAnalysis = analysis;
|
|
83
|
+
for (const plugin of this.plugins.values()) {
|
|
84
|
+
if (plugin.hooks.afterAnalyze) {
|
|
85
|
+
finalAnalysis = await plugin.hooks.afterAnalyze(finalAnalysis) || finalAnalysis;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
this.emit('file:analyzed', { filePath, result: finalAnalysis });
|
|
89
|
+
return finalAnalysis;
|
|
90
|
+
}
|
|
91
|
+
findLanguageByExtension(ext) {
|
|
92
|
+
for (const lang of this.languages.values()) {
|
|
93
|
+
if (lang.extensions.includes(`.${ext}`)) {
|
|
94
|
+
return lang;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
initializeAIContext() {
|
|
100
|
+
return {
|
|
101
|
+
conversation: {
|
|
102
|
+
id: 'default',
|
|
103
|
+
messages: [],
|
|
104
|
+
context: {},
|
|
105
|
+
streaming: false,
|
|
106
|
+
},
|
|
107
|
+
codebase: {
|
|
108
|
+
files: new Map(),
|
|
109
|
+
dependencies: { nodes: [], edges: [] },
|
|
110
|
+
architecture: { layers: [], modules: [], services: [] },
|
|
111
|
+
recentChanges: [],
|
|
112
|
+
},
|
|
113
|
+
memory: {
|
|
114
|
+
shortTerm: [],
|
|
115
|
+
longTerm: new Map(),
|
|
116
|
+
episodic: [],
|
|
117
|
+
semantic: { concepts: [], relations: [] },
|
|
118
|
+
},
|
|
119
|
+
tools: [],
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
registerCommand(cmd) {
|
|
123
|
+
// Implementation
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.LinguClawEngine = LinguClawEngine;
|
|
127
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/core/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 24/7 Daemon mode for continuous operation
|
|
3
|
+
* TypeScript equivalent of Python daemon.py
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
import { DaemonStatus } from './types';
|
|
7
|
+
export declare class LinguClawDaemon extends EventEmitter {
|
|
8
|
+
pidFile: string;
|
|
9
|
+
statusFile: string;
|
|
10
|
+
status: DaemonStatus;
|
|
11
|
+
private running;
|
|
12
|
+
private services;
|
|
13
|
+
private intervals;
|
|
14
|
+
constructor(pidFile?: string, statusFile?: string);
|
|
15
|
+
registerService(name: string, handler: Function, interval?: number): void;
|
|
16
|
+
private writePid;
|
|
17
|
+
private removePid;
|
|
18
|
+
private writeStatus;
|
|
19
|
+
start(): Promise<boolean>;
|
|
20
|
+
stop(): void;
|
|
21
|
+
isRunning(): boolean;
|
|
22
|
+
getStatus(): DaemonStatus;
|
|
23
|
+
}
|
|
24
|
+
export declare function getDaemon(): LinguClawDaemon;
|
|
25
|
+
export declare function startDaemon(services?: string[]): Promise<boolean>;
|
|
26
|
+
export declare function stopDaemon(): Promise<boolean>;
|
|
27
|
+
export declare function daemonStatus(): DaemonStatus;
|
|
28
|
+
export declare function restartDaemon(): Promise<boolean>;
|
|
29
|
+
//# sourceMappingURL=daemon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAKvC,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,QAAQ,CAAwE;IACxF,OAAO,CAAC,SAAS,CAAmB;gBAExB,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAiBjD,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAKzE,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,WAAW;IAQb,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAsD/B,IAAI,IAAI,IAAI;IAgBZ,SAAS,IAAI,OAAO;IAyBpB,SAAS,IAAI,YAAY;CAmB1B;AAKD,wBAAgB,SAAS,IAAI,eAAe,CAK3C;AAED,wBAAsB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBvE;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAInD;AAED,wBAAgB,YAAY,IAAI,YAAY,CAG3C;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAItD"}
|
package/dist/daemon.js
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 24/7 Daemon mode for continuous operation
|
|
4
|
+
* TypeScript equivalent of Python daemon.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.LinguClawDaemon = void 0;
|
|
11
|
+
exports.getDaemon = getDaemon;
|
|
12
|
+
exports.startDaemon = startDaemon;
|
|
13
|
+
exports.stopDaemon = stopDaemon;
|
|
14
|
+
exports.daemonStatus = daemonStatus;
|
|
15
|
+
exports.restartDaemon = restartDaemon;
|
|
16
|
+
const events_1 = require("events");
|
|
17
|
+
const path_1 = __importDefault(require("path"));
|
|
18
|
+
const fs_1 = __importDefault(require("fs"));
|
|
19
|
+
const logger_1 = require("./logger");
|
|
20
|
+
const logger = (0, logger_1.getLogger)();
|
|
21
|
+
class LinguClawDaemon extends events_1.EventEmitter {
|
|
22
|
+
pidFile;
|
|
23
|
+
statusFile;
|
|
24
|
+
status;
|
|
25
|
+
running;
|
|
26
|
+
services;
|
|
27
|
+
intervals;
|
|
28
|
+
constructor(pidFile, statusFile) {
|
|
29
|
+
super();
|
|
30
|
+
this.pidFile = pidFile || path_1.default.join(process.env.HOME || '~', '.linguclaw', 'daemon.pid');
|
|
31
|
+
this.statusFile = statusFile || path_1.default.join(process.env.HOME || '~', '.linguclaw', 'daemon.status');
|
|
32
|
+
this.status = {
|
|
33
|
+
running: false,
|
|
34
|
+
started_at: null,
|
|
35
|
+
uptime_seconds: 0,
|
|
36
|
+
tasks_processed: 0,
|
|
37
|
+
errors_count: 0,
|
|
38
|
+
active_services: [],
|
|
39
|
+
};
|
|
40
|
+
this.running = false;
|
|
41
|
+
this.services = new Map();
|
|
42
|
+
this.intervals = [];
|
|
43
|
+
}
|
|
44
|
+
registerService(name, handler, interval) {
|
|
45
|
+
this.services.set(name, { handler, interval });
|
|
46
|
+
logger.info(`Registered service: ${name}`);
|
|
47
|
+
}
|
|
48
|
+
writePid() {
|
|
49
|
+
fs_1.default.writeFileSync(this.pidFile, process.pid.toString());
|
|
50
|
+
}
|
|
51
|
+
removePid() {
|
|
52
|
+
if (fs_1.default.existsSync(this.pidFile)) {
|
|
53
|
+
fs_1.default.unlinkSync(this.pidFile);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
writeStatus() {
|
|
57
|
+
const statusData = {
|
|
58
|
+
...this.status,
|
|
59
|
+
timestamp: new Date().toISOString(),
|
|
60
|
+
};
|
|
61
|
+
fs_1.default.writeFileSync(this.statusFile, JSON.stringify(statusData, null, 2));
|
|
62
|
+
}
|
|
63
|
+
async start() {
|
|
64
|
+
if (this.isRunning()) {
|
|
65
|
+
logger.error('Daemon already running');
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
logger.info('Starting LinguClaw Daemon...');
|
|
69
|
+
this.writePid();
|
|
70
|
+
this.status.running = true;
|
|
71
|
+
this.status.started_at = new Date();
|
|
72
|
+
this.status.active_services = Array.from(this.services.keys());
|
|
73
|
+
this.writeStatus();
|
|
74
|
+
// Start services
|
|
75
|
+
for (const [name, service] of this.services) {
|
|
76
|
+
if (service.interval) {
|
|
77
|
+
// Periodic service
|
|
78
|
+
const interval = setInterval(async () => {
|
|
79
|
+
try {
|
|
80
|
+
await service.handler();
|
|
81
|
+
this.status.tasks_processed++;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
this.status.errors_count++;
|
|
85
|
+
logger.error(`Service ${name} error: ${error}`);
|
|
86
|
+
}
|
|
87
|
+
}, service.interval * 1000);
|
|
88
|
+
this.intervals.push(interval);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// One-shot service
|
|
92
|
+
try {
|
|
93
|
+
await service.handler();
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
logger.error(`Service ${name} error: ${error}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Status updater
|
|
101
|
+
const statusInterval = setInterval(() => {
|
|
102
|
+
if (this.status.started_at) {
|
|
103
|
+
this.status.uptime_seconds = Math.floor((Date.now() - this.status.started_at.getTime()) / 1000);
|
|
104
|
+
}
|
|
105
|
+
this.writeStatus();
|
|
106
|
+
}, 10000);
|
|
107
|
+
this.intervals.push(statusInterval);
|
|
108
|
+
this.running = true;
|
|
109
|
+
logger.info(`Daemon started with ${this.services.size} services`);
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
stop() {
|
|
113
|
+
logger.info('Stopping daemon...');
|
|
114
|
+
this.running = false;
|
|
115
|
+
this.status.running = false;
|
|
116
|
+
// Clear all intervals
|
|
117
|
+
for (const interval of this.intervals) {
|
|
118
|
+
clearInterval(interval);
|
|
119
|
+
}
|
|
120
|
+
this.intervals = [];
|
|
121
|
+
this.removePid();
|
|
122
|
+
this.writeStatus();
|
|
123
|
+
logger.info('Daemon stopped');
|
|
124
|
+
}
|
|
125
|
+
isRunning() {
|
|
126
|
+
if (fs_1.default.existsSync(this.pidFile)) {
|
|
127
|
+
try {
|
|
128
|
+
const pid = parseInt(fs_1.default.readFileSync(this.pidFile, 'utf-8').trim());
|
|
129
|
+
if (isNaN(pid)) {
|
|
130
|
+
this.removePid();
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
// Check if process actually exists
|
|
134
|
+
try {
|
|
135
|
+
process.kill(pid, 0); // signal 0 = check existence
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// Process doesn't exist, stale PID file
|
|
140
|
+
this.removePid();
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
logger.debug(`PID check failed: ${err.message}`);
|
|
146
|
+
this.removePid();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
getStatus() {
|
|
152
|
+
if (fs_1.default.existsSync(this.statusFile)) {
|
|
153
|
+
try {
|
|
154
|
+
const data = JSON.parse(fs_1.default.readFileSync(this.statusFile, 'utf-8'));
|
|
155
|
+
return {
|
|
156
|
+
running: data.running || false,
|
|
157
|
+
started_at: data.started_at ? new Date(data.started_at) : null,
|
|
158
|
+
uptime_seconds: data.uptime_seconds || 0,
|
|
159
|
+
tasks_processed: data.tasks_processed || 0,
|
|
160
|
+
errors_count: data.errors_count || 0,
|
|
161
|
+
active_services: data.active_services || [],
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
logger.debug(`Status read failed: ${err.message}`);
|
|
166
|
+
return this.status;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return this.status;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
exports.LinguClawDaemon = LinguClawDaemon;
|
|
173
|
+
// Global daemon instance
|
|
174
|
+
let daemonInstance = null;
|
|
175
|
+
function getDaemon() {
|
|
176
|
+
if (!daemonInstance) {
|
|
177
|
+
daemonInstance = new LinguClawDaemon();
|
|
178
|
+
}
|
|
179
|
+
return daemonInstance;
|
|
180
|
+
}
|
|
181
|
+
async function startDaemon(services) {
|
|
182
|
+
const daemon = getDaemon();
|
|
183
|
+
// Register default services if not specified
|
|
184
|
+
if (!services || services.includes('health')) {
|
|
185
|
+
daemon.registerService('health', async () => {
|
|
186
|
+
// Health check service
|
|
187
|
+
logger.debug('Health check running');
|
|
188
|
+
}, 60); // Every 60 seconds
|
|
189
|
+
}
|
|
190
|
+
if (!services || services.includes('proactive')) {
|
|
191
|
+
daemon.registerService('proactive', async () => {
|
|
192
|
+
// Proactive tasks service
|
|
193
|
+
logger.debug('Proactive tasks running');
|
|
194
|
+
}, 300); // Every 5 minutes
|
|
195
|
+
}
|
|
196
|
+
return await daemon.start();
|
|
197
|
+
}
|
|
198
|
+
async function stopDaemon() {
|
|
199
|
+
const daemon = getDaemon();
|
|
200
|
+
daemon.stop();
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
function daemonStatus() {
|
|
204
|
+
const daemon = getDaemon();
|
|
205
|
+
return daemon.getStatus();
|
|
206
|
+
}
|
|
207
|
+
async function restartDaemon() {
|
|
208
|
+
await stopDaemon();
|
|
209
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
210
|
+
return await startDaemon();
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IMAP Email Receiver - Polls for incoming emails and adds to Inbox
|
|
3
|
+
*/
|
|
4
|
+
import { InboxManager } from './inbox';
|
|
5
|
+
export interface IMAPConfig {
|
|
6
|
+
host: string;
|
|
7
|
+
port: number;
|
|
8
|
+
username: string;
|
|
9
|
+
password: string;
|
|
10
|
+
tls?: boolean;
|
|
11
|
+
pollInterval?: number;
|
|
12
|
+
folders?: string[];
|
|
13
|
+
useIdle?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare class IMAPReceiver {
|
|
16
|
+
private inbox;
|
|
17
|
+
private config;
|
|
18
|
+
private pollTimer;
|
|
19
|
+
private idleConnections;
|
|
20
|
+
private isRunning;
|
|
21
|
+
private lastCheck;
|
|
22
|
+
constructor(inbox: InboxManager);
|
|
23
|
+
configure(config: IMAPConfig): void;
|
|
24
|
+
start(): void;
|
|
25
|
+
stop(): void;
|
|
26
|
+
private pollAllFolders;
|
|
27
|
+
private startIdleForFolder;
|
|
28
|
+
private resolveFolderName;
|
|
29
|
+
private checkFolderWithImap;
|
|
30
|
+
private extractEmail;
|
|
31
|
+
private cleanEmailBody;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Gmail API Receiver - Uses Gmail API for push notifications
|
|
35
|
+
*/
|
|
36
|
+
export declare class GmailReceiver {
|
|
37
|
+
private inbox;
|
|
38
|
+
private config;
|
|
39
|
+
constructor(inbox: InboxManager);
|
|
40
|
+
configure(config: {
|
|
41
|
+
clientId: string;
|
|
42
|
+
clientSecret: string;
|
|
43
|
+
refreshToken: string;
|
|
44
|
+
}): void;
|
|
45
|
+
check(): Promise<void>;
|
|
46
|
+
private extractEmail;
|
|
47
|
+
private cleanBody;
|
|
48
|
+
private cleanEmailBody;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Unified Email Receiver - Manages both IMAP and Gmail
|
|
52
|
+
*/
|
|
53
|
+
export declare class EmailReceiver {
|
|
54
|
+
private imap;
|
|
55
|
+
private gmail;
|
|
56
|
+
private inbox;
|
|
57
|
+
private gmailTimer;
|
|
58
|
+
constructor(inbox: InboxManager);
|
|
59
|
+
startIMAP(config: IMAPConfig): void;
|
|
60
|
+
startGmail(config: any): void;
|
|
61
|
+
stop(): void;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=email-receiver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-receiver.d.ts","sourceRoot":"","sources":["../src/email-receiver.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAgB,MAAM,SAAS,CAAC;AAMrD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAgC;gBAErC,KAAK,EAAE,YAAY;IAI/B,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAOnC,KAAK,IAAI,IAAI;IAwBb,IAAI,IAAI,IAAI;YAiBE,cAAc;YAUd,kBAAkB;IAgFhC,OAAO,CAAC,iBAAiB;YAkBX,mBAAmB;IAuKjC,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,cAAc;CAqEvB;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAa;gBAEf,KAAK,EAAE,YAAY;IAI/B,SAAS,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAInF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA4E5B,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,cAAc;CAqEvB;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,UAAU,CAA+B;gBAErC,KAAK,EAAE,YAAY;IAM/B,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAKnC,UAAU,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI;IAO7B,IAAI,IAAI,IAAI;CAOb"}
|