agent-orcha 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +86 -28
- package/dist/lib/agents/agent-executor.d.ts.map +1 -1
- package/dist/lib/agents/agent-executor.js +23 -7
- package/dist/lib/agents/agent-executor.js.map +1 -1
- package/dist/lib/agents/react-loop.d.ts.map +1 -1
- package/dist/lib/agents/react-loop.js +27 -0
- package/dist/lib/agents/react-loop.js.map +1 -1
- package/dist/lib/functions/simple-function-wrapper.js +3 -3
- package/dist/lib/functions/simple-function-wrapper.js.map +1 -1
- package/dist/lib/knowledge/knowledge-store.d.ts +1 -1
- package/dist/lib/knowledge/knowledge-store.d.ts.map +1 -1
- package/dist/lib/knowledge/knowledge-store.js +25 -4
- package/dist/lib/knowledge/knowledge-store.js.map +1 -1
- package/dist/lib/knowledge/loaders/file-loaders.d.ts +0 -1
- package/dist/lib/knowledge/loaders/file-loaders.d.ts.map +1 -1
- package/dist/lib/knowledge/loaders/file-loaders.js +7 -15
- package/dist/lib/knowledge/loaders/file-loaders.js.map +1 -1
- package/dist/lib/knowledge/sqlite-store.d.ts.map +1 -1
- package/dist/lib/knowledge/sqlite-store.js +19 -10
- package/dist/lib/knowledge/sqlite-store.js.map +1 -1
- package/dist/lib/knowledge/types.d.ts +13 -13
- package/dist/lib/llm/index.d.ts +1 -1
- package/dist/lib/llm/index.d.ts.map +1 -1
- package/dist/lib/llm/index.js +1 -1
- package/dist/lib/llm/index.js.map +1 -1
- package/dist/lib/llm/llm-config.d.ts +51 -8
- package/dist/lib/llm/llm-config.d.ts.map +1 -1
- package/dist/lib/llm/llm-config.js +161 -17
- package/dist/lib/llm/llm-config.js.map +1 -1
- package/dist/lib/llm/llm-factory.d.ts +1 -2
- package/dist/lib/llm/llm-factory.d.ts.map +1 -1
- package/dist/lib/llm/llm-factory.js +41 -8
- package/dist/lib/llm/llm-factory.js.map +1 -1
- package/dist/lib/llm/providers/openai-chat-model.d.ts +10 -0
- package/dist/lib/llm/providers/openai-chat-model.d.ts.map +1 -1
- package/dist/lib/llm/providers/openai-chat-model.js +37 -5
- package/dist/lib/llm/providers/openai-chat-model.js.map +1 -1
- package/dist/lib/llm/providers/openai-embeddings.d.ts.map +1 -1
- package/dist/lib/llm/providers/openai-embeddings.js +41 -10
- package/dist/lib/llm/providers/openai-embeddings.js.map +1 -1
- package/dist/lib/local-llm/binary-manager.d.ts +66 -0
- package/dist/lib/local-llm/binary-manager.d.ts.map +1 -0
- package/dist/lib/local-llm/binary-manager.js +441 -0
- package/dist/lib/local-llm/binary-manager.js.map +1 -0
- package/dist/lib/local-llm/engine-interface.d.ts +47 -0
- package/dist/lib/local-llm/engine-interface.d.ts.map +1 -0
- package/dist/lib/local-llm/engine-interface.js +2 -0
- package/dist/lib/local-llm/engine-interface.js.map +1 -0
- package/dist/lib/local-llm/engine-registry.d.ts +20 -0
- package/dist/lib/local-llm/engine-registry.d.ts.map +1 -0
- package/dist/lib/local-llm/engine-registry.js +56 -0
- package/dist/lib/local-llm/engine-registry.js.map +1 -0
- package/dist/lib/local-llm/engines/llama-cpp-engine.d.ts +31 -0
- package/dist/lib/local-llm/engines/llama-cpp-engine.d.ts.map +1 -0
- package/dist/lib/local-llm/engines/llama-cpp-engine.js +164 -0
- package/dist/lib/local-llm/engines/llama-cpp-engine.js.map +1 -0
- package/dist/lib/local-llm/engines/mlx-serve-engine.d.ts +31 -0
- package/dist/lib/local-llm/engines/mlx-serve-engine.d.ts.map +1 -0
- package/dist/lib/local-llm/engines/mlx-serve-engine.js +161 -0
- package/dist/lib/local-llm/engines/mlx-serve-engine.js.map +1 -0
- package/dist/lib/local-llm/gguf-reader.d.ts +20 -0
- package/dist/lib/local-llm/gguf-reader.d.ts.map +1 -0
- package/dist/lib/local-llm/gguf-reader.js +190 -0
- package/dist/lib/local-llm/gguf-reader.js.map +1 -0
- package/dist/lib/local-llm/index.d.ts +9 -0
- package/dist/lib/local-llm/index.d.ts.map +1 -0
- package/dist/lib/local-llm/index.js +6 -0
- package/dist/lib/local-llm/index.js.map +1 -0
- package/dist/lib/local-llm/llama-server-process.d.ts +42 -0
- package/dist/lib/local-llm/llama-server-process.d.ts.map +1 -0
- package/dist/lib/local-llm/llama-server-process.js +237 -0
- package/dist/lib/local-llm/llama-server-process.js.map +1 -0
- package/dist/lib/local-llm/mlx-binary-manager.d.ts +33 -0
- package/dist/lib/local-llm/mlx-binary-manager.d.ts.map +1 -0
- package/dist/lib/local-llm/mlx-binary-manager.js +211 -0
- package/dist/lib/local-llm/mlx-binary-manager.js.map +1 -0
- package/dist/lib/local-llm/mlx-server-process.d.ts +26 -0
- package/dist/lib/local-llm/mlx-server-process.d.ts.map +1 -0
- package/dist/lib/local-llm/mlx-server-process.js +210 -0
- package/dist/lib/local-llm/mlx-server-process.js.map +1 -0
- package/dist/lib/local-llm/model-manager.d.ts +33 -0
- package/dist/lib/local-llm/model-manager.d.ts.map +1 -0
- package/dist/lib/local-llm/model-manager.js +591 -0
- package/dist/lib/local-llm/model-manager.js.map +1 -0
- package/dist/lib/local-llm/types.d.ts +51 -0
- package/dist/lib/local-llm/types.d.ts.map +1 -0
- package/dist/lib/local-llm/types.js +2 -0
- package/dist/lib/local-llm/types.js.map +1 -0
- package/dist/lib/logger.d.ts +2 -0
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +68 -5
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/orchestrator.d.ts +9 -0
- package/dist/lib/orchestrator.d.ts.map +1 -1
- package/dist/lib/orchestrator.js +151 -3
- package/dist/lib/orchestrator.js.map +1 -1
- package/dist/lib/sandbox/cdp-client.d.ts +2 -1
- package/dist/lib/sandbox/cdp-client.d.ts.map +1 -1
- package/dist/lib/sandbox/cdp-client.js +33 -7
- package/dist/lib/sandbox/cdp-client.js.map +1 -1
- package/dist/lib/sandbox/index.d.ts +1 -0
- package/dist/lib/sandbox/index.d.ts.map +1 -1
- package/dist/lib/sandbox/index.js +1 -0
- package/dist/lib/sandbox/index.js.map +1 -1
- package/dist/lib/sandbox/page-readiness.d.ts.map +1 -1
- package/dist/lib/sandbox/page-readiness.js +33 -0
- package/dist/lib/sandbox/page-readiness.js.map +1 -1
- package/dist/lib/sandbox/sandbox-browser.d.ts.map +1 -1
- package/dist/lib/sandbox/sandbox-browser.js +14 -1
- package/dist/lib/sandbox/sandbox-browser.js.map +1 -1
- package/dist/lib/sandbox/sandbox-container.d.ts +39 -0
- package/dist/lib/sandbox/sandbox-container.d.ts.map +1 -0
- package/dist/lib/sandbox/sandbox-container.js +176 -0
- package/dist/lib/sandbox/sandbox-container.js.map +1 -0
- package/dist/lib/sandbox/sandbox-file.d.ts.map +1 -1
- package/dist/lib/sandbox/sandbox-file.js +5 -4
- package/dist/lib/sandbox/sandbox-file.js.map +1 -1
- package/dist/lib/sandbox/sandbox-shell.d.ts +2 -1
- package/dist/lib/sandbox/sandbox-shell.d.ts.map +1 -1
- package/dist/lib/sandbox/sandbox-shell.js +42 -24
- package/dist/lib/sandbox/sandbox-shell.js.map +1 -1
- package/dist/lib/sandbox/sandbox-web.d.ts.map +1 -1
- package/dist/lib/sandbox/sandbox-web.js +27 -2
- package/dist/lib/sandbox/sandbox-web.js.map +1 -1
- package/dist/lib/sandbox/vision-browser.d.ts.map +1 -1
- package/dist/lib/sandbox/vision-browser.js +9 -0
- package/dist/lib/sandbox/vision-browser.js.map +1 -1
- package/dist/lib/sea/app-window.d.ts +7 -0
- package/dist/lib/sea/app-window.d.ts.map +1 -0
- package/dist/lib/sea/app-window.js +95 -0
- package/dist/lib/sea/app-window.js.map +1 -0
- package/dist/lib/sea/bootstrap.d.ts +18 -0
- package/dist/lib/sea/bootstrap.d.ts.map +1 -0
- package/dist/lib/sea/bootstrap.js +103 -0
- package/dist/lib/sea/bootstrap.js.map +1 -0
- package/dist/lib/sea/sqlite-vec-shim.d.ts +3 -0
- package/dist/lib/sea/sqlite-vec-shim.d.ts.map +1 -0
- package/dist/lib/sea/sqlite-vec-shim.js +10 -0
- package/dist/lib/sea/sqlite-vec-shim.js.map +1 -0
- package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.d.ts +1 -2
- package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.d.ts.map +1 -1
- package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js +7 -13
- package/dist/lib/tools/built-in/knowledge-entity-lookup.tool.js.map +1 -1
- package/dist/lib/tools/built-in/knowledge-graph-schema.tool.d.ts.map +1 -1
- package/dist/lib/tools/built-in/knowledge-graph-schema.tool.js +2 -4
- package/dist/lib/tools/built-in/knowledge-graph-schema.tool.js.map +1 -1
- package/dist/lib/tools/built-in/knowledge-search.tool.js +4 -4
- package/dist/lib/tools/built-in/knowledge-search.tool.js.map +1 -1
- package/dist/lib/tools/built-in/knowledge-sql.tool.d.ts.map +1 -1
- package/dist/lib/tools/built-in/knowledge-sql.tool.js +70 -37
- package/dist/lib/tools/built-in/knowledge-sql.tool.js.map +1 -1
- package/dist/lib/tools/built-in/knowledge-tools-factory.js +2 -2
- package/dist/lib/tools/built-in/knowledge-tools-factory.js.map +1 -1
- package/dist/lib/tools/built-in/knowledge-traverse.tool.d.ts +1 -2
- package/dist/lib/tools/built-in/knowledge-traverse.tool.d.ts.map +1 -1
- package/dist/lib/tools/built-in/knowledge-traverse.tool.js +5 -11
- package/dist/lib/tools/built-in/knowledge-traverse.tool.js.map +1 -1
- package/dist/lib/tools/workspace/workspace-tools.d.ts.map +1 -1
- package/dist/lib/tools/workspace/workspace-tools.js +5 -4
- package/dist/lib/tools/workspace/workspace-tools.js.map +1 -1
- package/dist/lib/types/tool-factory.d.ts.map +1 -1
- package/dist/lib/types/tool-factory.js +9 -2
- package/dist/lib/types/tool-factory.js.map +1 -1
- package/dist/lib/utils/document-extract.d.ts +10 -0
- package/dist/lib/utils/document-extract.d.ts.map +1 -0
- package/dist/lib/utils/document-extract.js +149 -0
- package/dist/lib/utils/document-extract.js.map +1 -0
- package/dist/lib/workflows/react-workflow-executor.d.ts.map +1 -1
- package/dist/lib/workflows/react-workflow-executor.js +20 -14
- package/dist/lib/workflows/react-workflow-executor.js.map +1 -1
- package/dist/lib/workflows/types.d.ts +71 -45
- package/dist/lib/workflows/types.d.ts.map +1 -1
- package/dist/lib/workflows/types.js +10 -0
- package/dist/lib/workflows/types.js.map +1 -1
- package/dist/public/assets/logo.png +0 -0
- package/dist/public/chat.html +3 -78
- package/dist/public/index.html +3 -330
- package/dist/public/src/components/AgentComposer.js +132 -132
- package/dist/public/src/components/AgentsView.js +1231 -350
- package/dist/public/src/components/AppRoot.js +101 -39
- package/dist/public/src/components/GraphView.js +11 -13
- package/dist/public/src/components/IdeView.js +133 -98
- package/dist/public/src/components/KnowledgeView.js +94 -130
- package/dist/public/src/components/LlmView.js +15 -19
- package/dist/public/src/components/LocalLlmView.js +2440 -0
- package/dist/public/src/components/LogViewer.js +155 -0
- package/dist/public/src/components/McpView.js +41 -49
- package/dist/public/src/components/MonitorView.js +79 -126
- package/dist/public/src/components/NavBar.js +16 -26
- package/dist/public/src/components/StandaloneChat.js +136 -150
- package/dist/public/src/services/ApiService.js +196 -2
- package/dist/public/src/services/SessionStore.js +6 -3
- package/dist/public/src/services/StreamManager.js +183 -0
- package/dist/public/src/store.js +1 -1
- package/dist/public/src/utils/card.js +21 -0
- package/dist/public/src/utils/markdown.js +1 -7
- package/dist/public/styles.css +2777 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +7 -1
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/start.d.ts.map +1 -1
- package/dist/src/cli/commands/start.js +28 -5
- package/dist/src/cli/commands/start.js.map +1 -1
- package/dist/src/cli/index.js +13 -2
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/index.js +7 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/routes/agents.route.d.ts.map +1 -1
- package/dist/src/routes/agents.route.js +2 -0
- package/dist/src/routes/agents.route.js.map +1 -1
- package/dist/src/routes/chat.route.d.ts.map +1 -1
- package/dist/src/routes/chat.route.js +3 -2
- package/dist/src/routes/chat.route.js.map +1 -1
- package/dist/src/routes/llm.route.d.ts.map +1 -1
- package/dist/src/routes/llm.route.js +227 -7
- package/dist/src/routes/llm.route.js.map +1 -1
- package/dist/src/routes/local-llm.route.d.ts +3 -0
- package/dist/src/routes/local-llm.route.d.ts.map +1 -0
- package/dist/src/routes/local-llm.route.js +688 -0
- package/dist/src/routes/local-llm.route.js.map +1 -0
- package/dist/src/routes/logs.route.d.ts +3 -0
- package/dist/src/routes/logs.route.d.ts.map +1 -0
- package/dist/src/routes/logs.route.js +24 -0
- package/dist/src/routes/logs.route.js.map +1 -0
- package/dist/src/routes/vnc.route.d.ts +10 -1
- package/dist/src/routes/vnc.route.d.ts.map +1 -1
- package/dist/src/routes/vnc.route.js +37 -12
- package/dist/src/routes/vnc.route.js.map +1 -1
- package/dist/src/routes/workflows.route.d.ts.map +1 -1
- package/dist/src/routes/workflows.route.js +24 -0
- package/dist/src/routes/workflows.route.js.map +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +24 -2
- package/dist/src/server.js.map +1 -1
- package/dist/templates/agents/actor.agent.yaml +34 -0
- package/dist/templates/agents/architect.agent.yaml +0 -1
- package/dist/templates/agents/chatbot.agent.yaml +0 -1
- package/dist/templates/agents/corporate.agent.yaml +0 -1
- package/dist/templates/agents/functions.agent.yaml +29 -0
- package/dist/templates/agents/investment-analyst.agent.yaml +0 -1
- package/dist/templates/agents/music-librarian.agent.yaml +3 -27
- package/dist/templates/agents/network-security.agent.yaml +0 -1
- package/dist/templates/agents/transport-security.agent.yaml +0 -1
- package/dist/templates/agents/web-engineer.agent.yaml +3 -4
- package/dist/templates/agents/web-pilot.agent.yaml +0 -1
- package/dist/templates/knowledge/patient-records.knowledge.yaml +20 -0
- package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_0.pdf +0 -0
- package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_1.pdf +0 -0
- package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_10.pdf +0 -0
- package/dist/templates/knowledge/pdf-patients/PDF_Deid_Deidentification_11.pdf +0 -0
- package/dist/templates/knowledge/web-docs.knowledge.yaml +1 -1
- package/dist/templates/llm.json +73 -10
- package/dist/templates/skills/orcha-builder/SKILL.md +56 -3
- package/dist/templates/workflows/example.workflow.yaml +27 -35
- package/dist/templates/workflows/react-example.workflow.yaml +14 -19
- package/dist/templates/workflows/team-chat.workflow.yaml +47 -0
- package/package.json +14 -6
- package/dist/public/src/components/SkillsView.js +0 -137
- package/dist/public/src/components/WorkflowsView.js +0 -568
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export interface LocalModel {
|
|
2
|
+
id: string;
|
|
3
|
+
fileName: string;
|
|
4
|
+
filePath: string;
|
|
5
|
+
sizeBytes: number;
|
|
6
|
+
repo?: string;
|
|
7
|
+
downloadedAt: string;
|
|
8
|
+
type: 'gguf' | 'mlx';
|
|
9
|
+
}
|
|
10
|
+
export interface LocalLlmStatus {
|
|
11
|
+
running: boolean;
|
|
12
|
+
port?: number;
|
|
13
|
+
activeModel: string | null;
|
|
14
|
+
available: boolean;
|
|
15
|
+
contextSize?: number | null;
|
|
16
|
+
}
|
|
17
|
+
export interface HuggingFaceGgufFile {
|
|
18
|
+
fileName: string;
|
|
19
|
+
sizeBytes: number;
|
|
20
|
+
}
|
|
21
|
+
export interface HuggingFaceModelResult {
|
|
22
|
+
repoId: string;
|
|
23
|
+
author: string;
|
|
24
|
+
modelName: string;
|
|
25
|
+
likes: number;
|
|
26
|
+
downloads: number;
|
|
27
|
+
tags: string[];
|
|
28
|
+
pipelineTag: string;
|
|
29
|
+
ggufFiles: HuggingFaceGgufFile[];
|
|
30
|
+
}
|
|
31
|
+
export interface DownloadProgress {
|
|
32
|
+
fileName: string;
|
|
33
|
+
downloadedBytes: number;
|
|
34
|
+
totalBytes: number;
|
|
35
|
+
percent: number;
|
|
36
|
+
}
|
|
37
|
+
export interface ActiveDownload {
|
|
38
|
+
repo: string;
|
|
39
|
+
fileName: string;
|
|
40
|
+
progress: DownloadProgress;
|
|
41
|
+
}
|
|
42
|
+
export interface InterruptedDownload {
|
|
43
|
+
fileName: string;
|
|
44
|
+
repo?: string;
|
|
45
|
+
downloadedBytes: number;
|
|
46
|
+
}
|
|
47
|
+
export interface LocalLlmState {
|
|
48
|
+
lastActiveModel: string | null;
|
|
49
|
+
port?: number;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../lib/local-llm/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,mBAAmB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../lib/local-llm/types.ts"],"names":[],"mappings":""}
|
package/dist/lib/logger.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export interface LogEntry {
|
|
|
6
6
|
component?: string;
|
|
7
7
|
}
|
|
8
8
|
export declare function getRecentLogs(limit?: number): LogEntry[];
|
|
9
|
+
export declare function subscribeToLogs(cb: (entry: LogEntry) => void): void;
|
|
10
|
+
export declare function unsubscribeFromLogs(cb: (entry: LogEntry) => void): void;
|
|
9
11
|
/**
|
|
10
12
|
* Shared Pino configuration that can be used by both the standalone logger and Fastify
|
|
11
13
|
*/
|
package/dist/lib/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../lib/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../lib/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAyCD,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CAExD;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI,CAEnE;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI,CAEvE;AAuCD;;GAEG;AACH,wBAAgB,aAAa;;;;;;;;;;;EAmB5B;AAeD,eAAO,MAAM,UAAU,6BAAqB,CAAC;AA+E7C,eAAO,MAAM,MAAM;oBA9DC,MAAM,WAAW,OAAO,EAAE;oBAQ1B,MAAM,WAAW,OAAO,EAAE;qBAQzB,MAAM,WAAW,OAAO,EAAE;qBAa1B,MAAM,WAAW,OAAO,EAAE;qBAQ1B,MAAM,WAAW,OAAO,EAAE;qBAQ1B,MAAM,WAAW,OAAO,EAAE;CAiBM,CAAC;AAEtD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM;oBAzE1B,MAAM,WAAW,OAAO,EAAE;oBAQ1B,MAAM,WAAW,OAAO,EAAE;qBAQzB,MAAM,WAAW,OAAO,EAAE;qBAa1B,MAAM,WAAW,OAAO,EAAE;qBAQ1B,MAAM,WAAW,OAAO,EAAE;qBAQ1B,MAAM,WAAW,OAAO,EAAE;EA+B9C"}
|
package/dist/lib/logger.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import pino from 'pino';
|
|
2
|
+
import { Writable } from 'stream';
|
|
3
|
+
import { isSea } from "./sea/bootstrap.js";
|
|
2
4
|
class LogBuffer {
|
|
3
5
|
buffer;
|
|
4
6
|
maxSize;
|
|
5
7
|
index = 0;
|
|
6
8
|
full = false;
|
|
7
|
-
|
|
9
|
+
subscribers = new Set();
|
|
10
|
+
constructor(maxSize = 500) {
|
|
8
11
|
this.maxSize = maxSize;
|
|
9
12
|
this.buffer = new Array(maxSize);
|
|
10
13
|
}
|
|
@@ -13,6 +16,8 @@ class LogBuffer {
|
|
|
13
16
|
this.index = (this.index + 1) % this.maxSize;
|
|
14
17
|
if (this.index === 0)
|
|
15
18
|
this.full = true;
|
|
19
|
+
for (const cb of this.subscribers)
|
|
20
|
+
cb(entry);
|
|
16
21
|
}
|
|
17
22
|
getEntries(limit) {
|
|
18
23
|
const entries = this.full
|
|
@@ -20,20 +25,70 @@ class LogBuffer {
|
|
|
20
25
|
: this.buffer.slice(0, this.index);
|
|
21
26
|
return limit ? entries.slice(-limit) : entries;
|
|
22
27
|
}
|
|
28
|
+
subscribe(cb) {
|
|
29
|
+
this.subscribers.add(cb);
|
|
30
|
+
}
|
|
31
|
+
unsubscribe(cb) {
|
|
32
|
+
this.subscribers.delete(cb);
|
|
33
|
+
}
|
|
23
34
|
}
|
|
24
|
-
const logBuffer = new LogBuffer(
|
|
35
|
+
const logBuffer = new LogBuffer(500);
|
|
25
36
|
export function getRecentLogs(limit) {
|
|
26
37
|
return logBuffer.getEntries(limit);
|
|
27
38
|
}
|
|
39
|
+
export function subscribeToLogs(cb) {
|
|
40
|
+
logBuffer.subscribe(cb);
|
|
41
|
+
}
|
|
42
|
+
export function unsubscribeFromLogs(cb) {
|
|
43
|
+
logBuffer.unsubscribe(cb);
|
|
44
|
+
}
|
|
45
|
+
// ANSI color codes for log levels
|
|
46
|
+
const LEVEL_COLORS = {
|
|
47
|
+
10: '\x1b[90m', // trace — gray
|
|
48
|
+
20: '\x1b[36m', // debug — cyan
|
|
49
|
+
30: '\x1b[32m', // info — green
|
|
50
|
+
40: '\x1b[33m', // warn — yellow
|
|
51
|
+
50: '\x1b[31m', // error — red
|
|
52
|
+
60: '\x1b[35m', // fatal — magenta
|
|
53
|
+
};
|
|
54
|
+
const LEVEL_LABELS = {
|
|
55
|
+
10: 'TRACE', 20: 'DEBUG', 30: 'INFO', 40: 'WARN', 50: 'ERROR', 60: 'FATAL',
|
|
56
|
+
};
|
|
57
|
+
const RESET = '\x1b[0m';
|
|
58
|
+
/**
|
|
59
|
+
* Lightweight pino destination that formats JSON log lines with colors.
|
|
60
|
+
* Runs in-process (no worker threads) so it works inside SEA binaries.
|
|
61
|
+
*/
|
|
62
|
+
function createPrettyDestination() {
|
|
63
|
+
return new Writable({
|
|
64
|
+
write(chunk, _encoding, callback) {
|
|
65
|
+
try {
|
|
66
|
+
const obj = JSON.parse(chunk.toString());
|
|
67
|
+
const color = LEVEL_COLORS[obj.level] || '';
|
|
68
|
+
const label = LEVEL_LABELS[obj.level] || 'LOG';
|
|
69
|
+
const time = obj.time ? new Date(obj.time).toLocaleTimeString('en-GB', { hour12: false }) : '';
|
|
70
|
+
const comp = obj.component ? `${obj.component} ` : '';
|
|
71
|
+
const msg = obj.msg || '';
|
|
72
|
+
process.stdout.write(`${color}${time} ${label.padEnd(5)}${RESET} ${comp}${msg}\n`);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
process.stdout.write(chunk);
|
|
76
|
+
}
|
|
77
|
+
callback();
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
}
|
|
28
81
|
/**
|
|
29
82
|
* Shared Pino configuration that can be used by both the standalone logger and Fastify
|
|
30
83
|
*/
|
|
31
84
|
export function getPinoConfig() {
|
|
32
85
|
const logLevel = process.env.LOG_LEVEL || 'debug';
|
|
33
86
|
const isDevelopment = process.env.NODE_ENV !== 'production';
|
|
87
|
+
// pino-pretty uses worker threads with dynamic require() — not available in SEA binaries
|
|
88
|
+
const usePretty = isDevelopment && !isSea();
|
|
34
89
|
return {
|
|
35
90
|
level: logLevel,
|
|
36
|
-
transport:
|
|
91
|
+
transport: usePretty
|
|
37
92
|
? {
|
|
38
93
|
target: 'pino-pretty',
|
|
39
94
|
options: {
|
|
@@ -47,16 +102,21 @@ export function getPinoConfig() {
|
|
|
47
102
|
};
|
|
48
103
|
}
|
|
49
104
|
/**
|
|
50
|
-
* Create a pino logger instance
|
|
105
|
+
* Create a pino logger instance.
|
|
106
|
+
* In SEA mode, uses an in-process pretty formatter instead of raw JSON.
|
|
51
107
|
*/
|
|
52
108
|
function createPinoLogger() {
|
|
109
|
+
if (isSea()) {
|
|
110
|
+
const logLevel = process.env.LOG_LEVEL || 'debug';
|
|
111
|
+
return pino({ level: logLevel }, createPrettyDestination());
|
|
112
|
+
}
|
|
53
113
|
return pino(getPinoConfig());
|
|
54
114
|
}
|
|
55
115
|
// Export the raw pino instance for use in the application
|
|
56
116
|
export const pinoLogger = createPinoLogger();
|
|
57
117
|
/**
|
|
58
118
|
* Create a wrapper that accepts console-like API and converts to pino API.
|
|
59
|
-
*
|
|
119
|
+
* All levels are captured in the in-memory ring buffer for the log viewer.
|
|
60
120
|
*/
|
|
61
121
|
function createLoggerWrapper(pinoInstance, component) {
|
|
62
122
|
const capture = (level, message) => {
|
|
@@ -69,6 +129,7 @@ function createLoggerWrapper(pinoInstance, component) {
|
|
|
69
129
|
};
|
|
70
130
|
return {
|
|
71
131
|
info: (message, ...args) => {
|
|
132
|
+
capture('info', message);
|
|
72
133
|
if (args.length > 0) {
|
|
73
134
|
pinoInstance.info({ data: args }, message);
|
|
74
135
|
}
|
|
@@ -101,6 +162,7 @@ function createLoggerWrapper(pinoInstance, component) {
|
|
|
101
162
|
}
|
|
102
163
|
},
|
|
103
164
|
debug: (message, ...args) => {
|
|
165
|
+
capture('debug', message);
|
|
104
166
|
if (args.length > 0) {
|
|
105
167
|
pinoInstance.debug({ data: args }, message);
|
|
106
168
|
}
|
|
@@ -109,6 +171,7 @@ function createLoggerWrapper(pinoInstance, component) {
|
|
|
109
171
|
}
|
|
110
172
|
},
|
|
111
173
|
trace: (message, ...args) => {
|
|
174
|
+
capture('trace', message);
|
|
112
175
|
if (args.length > 0) {
|
|
113
176
|
pinoInstance.trace({ data: args }, message);
|
|
114
177
|
}
|
package/dist/lib/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../lib/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../lib/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAW3C,MAAM,SAAS;IACL,MAAM,CAAa;IACnB,OAAO,CAAS;IAChB,KAAK,GAAG,CAAC,CAAC;IACV,IAAI,GAAG,KAAK,CAAC;IACb,WAAW,GAAuB,IAAI,GAAG,EAAE,CAAC;IAEpD,YAAY,OAAO,GAAG,GAAG;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,CAAC,KAAe;QAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7C,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACvC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,WAAW;YAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,UAAU,CAAC,KAAc;QACvB,MAAM,OAAO,GAAe,IAAI,CAAC,IAAI;YACnC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACzE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACjD,CAAC;IAED,SAAS,CAAC,EAAiB;QACzB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,WAAW,CAAC,EAAiB;QAC3B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;AAErC,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAA6B;IAC3D,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAA6B;IAC/D,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED,kCAAkC;AAClC,MAAM,YAAY,GAA2B;IAC3C,EAAE,EAAE,UAAU,EAAI,eAAe;IACjC,EAAE,EAAE,UAAU,EAAI,eAAe;IACjC,EAAE,EAAE,UAAU,EAAI,gBAAgB;IAClC,EAAE,EAAE,UAAU,EAAI,iBAAiB;IACnC,EAAE,EAAE,UAAU,EAAI,cAAc;IAChC,EAAE,EAAE,UAAU,EAAI,kBAAkB;CACrC,CAAC;AACF,MAAM,YAAY,GAA2B;IAC3C,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO;CAC3E,CAAC;AACF,MAAM,KAAK,GAAG,SAAS,CAAC;AAExB;;;GAGG;AACH,SAAS,uBAAuB;IAC9B,OAAO,IAAI,QAAQ,CAAC;QAClB,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ;YAC9B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACzC,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;gBAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/F,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;gBAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC;YACrF,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;YACD,QAAQ,EAAE,CAAC;QACb,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC;IAClD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;IAC5D,yFAAyF;IACzF,MAAM,SAAS,GAAG,aAAa,IAAI,CAAC,KAAK,EAAE,CAAC;IAC5C,OAAO;QACL,KAAK,EAAE,QAAQ;QACf,SAAS,EAAE,SAAS;YAClB,CAAC,CAAC;gBACE,MAAM,EAAE,aAAa;gBACrB,OAAO,EAAE;oBACP,QAAQ,EAAE,IAAI;oBACd,aAAa,EAAE,UAAU;oBACzB,MAAM,EAAE,wBAAwB;oBAChC,aAAa,EAAE,mBAAmB;iBACnC;aACF;YACH,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB;IACvB,IAAI,KAAK,EAAE,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC;QAClD,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;AAE7C;;;GAGG;AACH,SAAS,mBAAmB,CAAC,YAAyB,EAAE,SAAkB;IACxE,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,OAAe,EAAE,EAAE;QACjD,SAAS,CAAC,IAAI,CAAC;YACb,KAAK;YACL,OAAO;YACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;YAC5C,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACzB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;YAC5C,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACzB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;YAC7C,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,QAAQ,YAAY,KAAK,EAAE,CAAC;oBAC9B,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;gBACtE,CAAC;qBAAM,CAAC;oBACN,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;YAC7C,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;YAC7C,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;YAC7C,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,QAAQ,YAAY,KAAK,EAAE,CAAC;oBAC9B,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;gBACtE,CAAC;qBAAM,CAAC;oBACN,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,yCAAyC;AACzC,MAAM,CAAC,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;AAEtD;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC5C,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,SAAS,GAAG,EAAE,CAAC,CAAC;IACtE,OAAO,mBAAmB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -45,11 +45,15 @@ export declare class Orchestrator {
|
|
|
45
45
|
private memoryManager;
|
|
46
46
|
private integrationManager;
|
|
47
47
|
private triggerManager;
|
|
48
|
+
private sandboxContainer;
|
|
48
49
|
private initialized;
|
|
49
50
|
constructor(config: OrchestratorConfig);
|
|
50
51
|
initialize(): Promise<void>;
|
|
52
|
+
private checkLlmReadiness;
|
|
51
53
|
private loadMCPConfig;
|
|
52
54
|
private loadSandboxConfig;
|
|
55
|
+
private isRunningInContainer;
|
|
56
|
+
private launchSandboxContainer;
|
|
53
57
|
private buildSandboxTools;
|
|
54
58
|
private buildWorkspaceToolsMap;
|
|
55
59
|
private buildDiagnosticsReport;
|
|
@@ -64,6 +68,7 @@ export declare class Orchestrator {
|
|
|
64
68
|
get integrations(): IntegrationAccessor;
|
|
65
69
|
get triggers(): TriggerAccessor;
|
|
66
70
|
get workspaceRoot(): string;
|
|
71
|
+
get llmConfigPath(): string;
|
|
67
72
|
get memory(): MemoryAccessor;
|
|
68
73
|
get longTermMemory(): LongTermMemoryAccessor;
|
|
69
74
|
unloadFile(relativePath: string): Promise<string>;
|
|
@@ -85,6 +90,10 @@ export declare class Orchestrator {
|
|
|
85
90
|
* Resumes a ReAct workflow with the user's answer to an interrupt.
|
|
86
91
|
*/
|
|
87
92
|
resumeReactWorkflow(name: string, threadId: string, answer: string): Promise<WorkflowResult>;
|
|
93
|
+
streamResumeReactWorkflow(name: string, threadId: string, answer: string): AsyncGenerator<{
|
|
94
|
+
type: 'status' | 'result';
|
|
95
|
+
data: unknown;
|
|
96
|
+
}, void, unknown>;
|
|
88
97
|
/**
|
|
89
98
|
* Gets all active interrupts for a workflow.
|
|
90
99
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../lib/orchestrator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../lib/orchestrator.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/orchestrator.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as fs from 'fs/promises';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
2
3
|
import * as path from 'path';
|
|
3
4
|
import { AgentLoader } from "./agents/agent-loader.js";
|
|
4
5
|
import { AgentExecutor } from "./agents/agent-executor.js";
|
|
@@ -13,7 +14,8 @@ import { SkillLoader } from "./skills/index.js";
|
|
|
13
14
|
import { ToolRegistry } from "./tools/tool-registry.js";
|
|
14
15
|
import { ToolDiscovery } from "./tools/tool-discovery.js";
|
|
15
16
|
import { MCPConfigSchema } from "./mcp/types.js";
|
|
16
|
-
import { loadLLMConfig, listModelConfigs } from "./llm/llm-config.js";
|
|
17
|
+
import { loadLLMConfig, getLLMConfig, listModelConfigs, getModelConfig, getEmbeddingConfig, resolveApiKey } from "./llm/llm-config.js";
|
|
18
|
+
import { detectProvider } from "./llm/provider-detector.js";
|
|
17
19
|
import { LLMFactory } from "./llm/llm-factory.js";
|
|
18
20
|
import { resolveAgentLLMRef } from "./llm/types.js";
|
|
19
21
|
import { ConversationStore } from "./memory/conversation-store.js";
|
|
@@ -23,11 +25,14 @@ import { VmExecutor } from "./sandbox/vm-executor.js";
|
|
|
23
25
|
import { createSandboxExecTool } from "./sandbox/sandbox-exec.js";
|
|
24
26
|
import { createSandboxWebFetchTool, createSandboxWebSearchTool } from "./sandbox/sandbox-web.js";
|
|
25
27
|
import { createSandboxShellTool } from "./sandbox/sandbox-shell.js";
|
|
28
|
+
import { SandboxContainer } from "./sandbox/sandbox-container.js";
|
|
26
29
|
import { createFileTools } from "./sandbox/sandbox-file.js";
|
|
27
30
|
import { createBrowserTools } from "./sandbox/sandbox-browser.js";
|
|
28
31
|
import { createVisionBrowserTools } from "./sandbox/vision-browser.js";
|
|
29
32
|
import { SandboxConfigSchema } from "./sandbox/types.js";
|
|
30
33
|
import { substituteEnvVars } from "./utils/env-substitution.js";
|
|
34
|
+
import { engineRegistry } from "./local-llm/engine-registry.js";
|
|
35
|
+
import { ModelManager } from "./local-llm/model-manager.js";
|
|
31
36
|
import { buildWorkspaceTools } from "./tools/workspace/workspace-tools.js";
|
|
32
37
|
import { IntegrationManager } from "./integrations/integration-manager.js";
|
|
33
38
|
import { logger, getRecentLogs } from "./logger.js";
|
|
@@ -52,6 +57,7 @@ export class Orchestrator {
|
|
|
52
57
|
memoryManager;
|
|
53
58
|
integrationManager = null;
|
|
54
59
|
triggerManager = null;
|
|
60
|
+
sandboxContainer = null;
|
|
55
61
|
initialized = false;
|
|
56
62
|
constructor(config) {
|
|
57
63
|
this.config = {
|
|
@@ -82,6 +88,10 @@ export class Orchestrator {
|
|
|
82
88
|
// Load LLM config first - required for agents and embeddings
|
|
83
89
|
logger.info('[Orchestrator] Loading LLM config...');
|
|
84
90
|
await loadLLMConfig(this.config.llmConfigPath);
|
|
91
|
+
// Kill any orphaned llama-server / mlx-serve processes from a previous run, then set base dir
|
|
92
|
+
engineRegistry.killAllOrphans();
|
|
93
|
+
engineRegistry.setBaseDir(this.config.workspaceRoot);
|
|
94
|
+
await this.checkLlmReadiness();
|
|
85
95
|
await this.loadMCPConfig();
|
|
86
96
|
await this.mcpClient.initialize();
|
|
87
97
|
// Load function tools and skills
|
|
@@ -108,6 +118,38 @@ export class Orchestrator {
|
|
|
108
118
|
this.integrationManager = new IntegrationManager();
|
|
109
119
|
await this.integrationManager.start(this);
|
|
110
120
|
}
|
|
121
|
+
async checkLlmReadiness() {
|
|
122
|
+
const issues = [];
|
|
123
|
+
const manager = new ModelManager(this.config.workspaceRoot);
|
|
124
|
+
const llmConfig = getLLMConfig();
|
|
125
|
+
const hasDefaultModel = llmConfig?.models['default'] !== undefined;
|
|
126
|
+
const hasDefaultEmb = llmConfig?.embeddings['default'] !== undefined;
|
|
127
|
+
const checks = [
|
|
128
|
+
['Chat model', hasDefaultModel, () => getModelConfig('default')],
|
|
129
|
+
['Embedding', hasDefaultEmb, () => getEmbeddingConfig('default')],
|
|
130
|
+
];
|
|
131
|
+
for (const [label, hasDefault, getConfig] of checks) {
|
|
132
|
+
if (!hasDefault) {
|
|
133
|
+
issues.push(`${label}: no default configured`);
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
const config = getConfig();
|
|
137
|
+
const provider = detectProvider(config);
|
|
138
|
+
if (provider === 'local' && !config.baseUrl) {
|
|
139
|
+
const filePath = await manager.findModelFile(config.model);
|
|
140
|
+
if (!filePath)
|
|
141
|
+
issues.push(`${label}: model "${config.model}" not downloaded`);
|
|
142
|
+
}
|
|
143
|
+
else if (provider !== 'local') {
|
|
144
|
+
const key = resolveApiKey(provider, config.apiKey);
|
|
145
|
+
if (!key)
|
|
146
|
+
issues.push(`${label}: no API key for ${provider}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (issues.length > 0) {
|
|
150
|
+
logger.warn(`[Orchestrator] LLM not ready — ${issues.join('; ')}. Open the Studio and go to the LLM tab to set up your models.`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
111
153
|
async loadMCPConfig() {
|
|
112
154
|
try {
|
|
113
155
|
const content = await fs.readFile(this.config.mcpConfigPath, 'utf-8');
|
|
@@ -135,11 +177,48 @@ export class Orchestrator {
|
|
|
135
177
|
}
|
|
136
178
|
if (this.sandboxConfig.enabled) {
|
|
137
179
|
this.vmExecutor = new VmExecutor();
|
|
180
|
+
// When running locally (not in Docker), try to auto-launch the sandbox container
|
|
181
|
+
if (!this.isRunningInContainer()) {
|
|
182
|
+
await this.launchSandboxContainer();
|
|
183
|
+
}
|
|
138
184
|
}
|
|
139
185
|
else {
|
|
140
186
|
this.vmExecutor = null;
|
|
141
187
|
}
|
|
142
188
|
}
|
|
189
|
+
isRunningInContainer() {
|
|
190
|
+
if (existsSync('/.dockerenv'))
|
|
191
|
+
return true;
|
|
192
|
+
if (existsSync('/run/.containerenv'))
|
|
193
|
+
return true;
|
|
194
|
+
return process.env['BROWSER_SANDBOX'] === 'true';
|
|
195
|
+
}
|
|
196
|
+
async launchSandboxContainer() {
|
|
197
|
+
const container = new SandboxContainer();
|
|
198
|
+
if (!container.detectDocker()) {
|
|
199
|
+
logger.warn('');
|
|
200
|
+
logger.warn('╔════════════════════════════════════════════════════════════════╗');
|
|
201
|
+
logger.warn('║ SANDBOX: Docker not detected on this system ║');
|
|
202
|
+
logger.warn('║ ║');
|
|
203
|
+
logger.warn('║ The following sandbox tools are NOT available: ║');
|
|
204
|
+
logger.warn('║ - sandbox:shell (shell command execution) ║');
|
|
205
|
+
logger.warn('║ - sandbox:browser_* (web browser automation) ║');
|
|
206
|
+
logger.warn('║ - sandbox:vision_* (vision browser automation) ║');
|
|
207
|
+
logger.warn('║ ║');
|
|
208
|
+
logger.warn('║ To enable these features, install Docker Desktop: ║');
|
|
209
|
+
logger.warn('║ https://www.docker.com/products/docker-desktop ║');
|
|
210
|
+
logger.warn('║ ║');
|
|
211
|
+
logger.warn('║ Tools still available: sandbox:exec, sandbox:web_fetch, ║');
|
|
212
|
+
logger.warn('║ sandbox:web_search, sandbox:file_* ║');
|
|
213
|
+
logger.warn('╚════════════════════════════════════════════════════════════════╝');
|
|
214
|
+
logger.warn('');
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
const started = await container.start();
|
|
218
|
+
if (started) {
|
|
219
|
+
this.sandboxContainer = container;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
143
222
|
buildSandboxTools() {
|
|
144
223
|
const tools = new Map();
|
|
145
224
|
if (!this.sandboxConfig?.enabled || !this.vmExecutor) {
|
|
@@ -148,7 +227,7 @@ export class Orchestrator {
|
|
|
148
227
|
tools.set('exec', createSandboxExecTool(this.vmExecutor, this.sandboxConfig));
|
|
149
228
|
tools.set('web_fetch', createSandboxWebFetchTool(this.sandboxConfig));
|
|
150
229
|
tools.set('web_search', createSandboxWebSearchTool());
|
|
151
|
-
tools.set('shell', createSandboxShellTool(this.sandboxConfig));
|
|
230
|
+
tools.set('shell', createSandboxShellTool(this.sandboxConfig, this.sandboxContainer ?? undefined));
|
|
152
231
|
const fileTools = createFileTools(this.sandboxConfig);
|
|
153
232
|
for (const ft of fileTools) {
|
|
154
233
|
tools.set(ft.name.replace('sandbox_file_', 'file_'), ft);
|
|
@@ -199,7 +278,16 @@ export class Orchestrator {
|
|
|
199
278
|
skills.push({ name, exists: this.skillLoader.has(name) });
|
|
200
279
|
}
|
|
201
280
|
}
|
|
202
|
-
|
|
281
|
+
// Check if the LLM name resolves to a concrete config (handles both direct names and pointer names like 'default')
|
|
282
|
+
let llmExists = modelNames.includes(llmName);
|
|
283
|
+
if (!llmExists) {
|
|
284
|
+
try {
|
|
285
|
+
getModelConfig(llmName);
|
|
286
|
+
llmExists = true;
|
|
287
|
+
}
|
|
288
|
+
catch { /* not found */ }
|
|
289
|
+
}
|
|
290
|
+
return { name: agent.name, llm: { name: llmName, exists: llmExists }, tools, skills };
|
|
203
291
|
}));
|
|
204
292
|
// Knowledge diagnostics
|
|
205
293
|
const knowledgeStatuses = await this.knowledgeStoreManager.getAllStatuses();
|
|
@@ -314,6 +402,9 @@ export class Orchestrator {
|
|
|
314
402
|
get workspaceRoot() {
|
|
315
403
|
return this.config.workspaceRoot;
|
|
316
404
|
}
|
|
405
|
+
get llmConfigPath() {
|
|
406
|
+
return this.config.llmConfigPath;
|
|
407
|
+
}
|
|
317
408
|
get memory() {
|
|
318
409
|
return {
|
|
319
410
|
getStore: () => this.conversationStore,
|
|
@@ -597,6 +688,58 @@ export class Orchestrator {
|
|
|
597
688
|
}
|
|
598
689
|
return this.reactWorkflowExecutor.resumeWithAnswer(definition, threadId, answer);
|
|
599
690
|
}
|
|
691
|
+
async *streamResumeReactWorkflow(name, threadId, answer) {
|
|
692
|
+
this.ensureInitialized();
|
|
693
|
+
const definition = this.workflowLoader.get(name);
|
|
694
|
+
if (!definition) {
|
|
695
|
+
throw new Error(`Workflow not found: ${name}`);
|
|
696
|
+
}
|
|
697
|
+
if (definition.type !== 'react') {
|
|
698
|
+
throw new Error(`Workflow "${name}" is not a ReAct workflow`);
|
|
699
|
+
}
|
|
700
|
+
const statusQueue = [];
|
|
701
|
+
let resolveNext = null;
|
|
702
|
+
let isComplete = false;
|
|
703
|
+
const onStatus = (status) => {
|
|
704
|
+
statusQueue.push({ type: 'status', data: status });
|
|
705
|
+
if (resolveNext) {
|
|
706
|
+
resolveNext();
|
|
707
|
+
resolveNext = null;
|
|
708
|
+
}
|
|
709
|
+
};
|
|
710
|
+
const executionPromise = this.reactWorkflowExecutor
|
|
711
|
+
.resumeWithAnswer(definition, threadId, answer, onStatus)
|
|
712
|
+
.then((result) => {
|
|
713
|
+
isComplete = true;
|
|
714
|
+
statusQueue.push({ type: 'result', data: result });
|
|
715
|
+
if (resolveNext) {
|
|
716
|
+
resolveNext();
|
|
717
|
+
resolveNext = null;
|
|
718
|
+
}
|
|
719
|
+
})
|
|
720
|
+
.catch((error) => {
|
|
721
|
+
isComplete = true;
|
|
722
|
+
statusQueue.push({
|
|
723
|
+
type: 'result',
|
|
724
|
+
data: { error: error instanceof Error ? error.message : String(error) },
|
|
725
|
+
});
|
|
726
|
+
if (resolveNext) {
|
|
727
|
+
resolveNext();
|
|
728
|
+
resolveNext = null;
|
|
729
|
+
}
|
|
730
|
+
});
|
|
731
|
+
while (!isComplete || statusQueue.length > 0) {
|
|
732
|
+
if (statusQueue.length > 0) {
|
|
733
|
+
yield statusQueue.shift();
|
|
734
|
+
}
|
|
735
|
+
else {
|
|
736
|
+
await new Promise((resolve) => {
|
|
737
|
+
resolveNext = resolve;
|
|
738
|
+
});
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
await executionPromise;
|
|
742
|
+
}
|
|
600
743
|
/**
|
|
601
744
|
* Gets all active interrupts for a workflow.
|
|
602
745
|
*/
|
|
@@ -612,6 +755,8 @@ export class Orchestrator {
|
|
|
612
755
|
return this.interruptManager.getInterrupt(threadId);
|
|
613
756
|
}
|
|
614
757
|
async close() {
|
|
758
|
+
// Stop all local engine processes before anything else
|
|
759
|
+
await engineRegistry.unloadAll();
|
|
615
760
|
if (this.triggerManager) {
|
|
616
761
|
this.triggerManager.close();
|
|
617
762
|
}
|
|
@@ -633,6 +778,9 @@ export class Orchestrator {
|
|
|
633
778
|
if (this.knowledgeStoreManager) {
|
|
634
779
|
this.knowledgeStoreManager.close();
|
|
635
780
|
}
|
|
781
|
+
if (this.sandboxContainer) {
|
|
782
|
+
await this.sandboxContainer.stop();
|
|
783
|
+
}
|
|
636
784
|
}
|
|
637
785
|
ensureInitialized() {
|
|
638
786
|
if (!this.initialized) {
|