@yagr/agent 0.2.9 → 0.2.10
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/dist/cli.js +206 -9
- package/dist/cli.js.map +1 -1
- package/dist/config/yagr-config-service.d.ts +1 -1
- package/dist/config/yagr-config-service.d.ts.map +1 -1
- package/dist/config/yagr-home.d.ts +7 -0
- package/dist/config/yagr-home.d.ts.map +1 -1
- package/dist/config/yagr-home.js +19 -0
- package/dist/config/yagr-home.js.map +1 -1
- package/dist/gateway/format-message.d.ts +3 -0
- package/dist/gateway/format-message.d.ts.map +1 -1
- package/dist/gateway/format-message.js +63 -10
- package/dist/gateway/format-message.js.map +1 -1
- package/dist/gateway/interactive-ui.d.ts.map +1 -1
- package/dist/gateway/interactive-ui.js +49 -4
- package/dist/gateway/interactive-ui.js.map +1 -1
- package/dist/gateway/local-open-bridge.d.ts +3 -0
- package/dist/gateway/local-open-bridge.d.ts.map +1 -0
- package/dist/gateway/local-open-bridge.js +54 -0
- package/dist/gateway/local-open-bridge.js.map +1 -0
- package/dist/gateway/webui.d.ts.map +1 -1
- package/dist/gateway/webui.js +50 -53
- package/dist/gateway/webui.js.map +1 -1
- package/dist/gateway/workflow-links.d.ts +12 -0
- package/dist/gateway/workflow-links.d.ts.map +1 -0
- package/dist/gateway/workflow-links.js +53 -0
- package/dist/gateway/workflow-links.js.map +1 -0
- package/dist/llm/anthropic-account.d.ts +20 -0
- package/dist/llm/anthropic-account.d.ts.map +1 -0
- package/dist/llm/anthropic-account.js +111 -0
- package/dist/llm/anthropic-account.js.map +1 -0
- package/dist/llm/copilot-account.d.ts +36 -0
- package/dist/llm/copilot-account.d.ts.map +1 -0
- package/dist/llm/copilot-account.js +573 -0
- package/dist/llm/copilot-account.js.map +1 -0
- package/dist/llm/create-language-model.d.ts +2 -2
- package/dist/llm/create-language-model.d.ts.map +1 -1
- package/dist/llm/create-language-model.js +187 -38
- package/dist/llm/create-language-model.js.map +1 -1
- package/dist/llm/google-account.d.ts +31 -0
- package/dist/llm/google-account.d.ts.map +1 -0
- package/dist/llm/google-account.js +851 -0
- package/dist/llm/google-account.js.map +1 -0
- package/dist/llm/model-catalog-cache.d.ts +4 -0
- package/dist/llm/model-catalog-cache.d.ts.map +1 -0
- package/dist/llm/model-catalog-cache.js +46 -0
- package/dist/llm/model-catalog-cache.js.map +1 -0
- package/dist/llm/openai-account.d.ts +33 -0
- package/dist/llm/openai-account.d.ts.map +1 -0
- package/dist/llm/openai-account.js +430 -0
- package/dist/llm/openai-account.js.map +1 -0
- package/dist/llm/provider-discovery.d.ts +3 -0
- package/dist/llm/provider-discovery.d.ts.map +1 -0
- package/dist/llm/provider-discovery.js +40 -0
- package/dist/llm/provider-discovery.js.map +1 -0
- package/dist/llm/provider-registry.d.ts +37 -0
- package/dist/llm/provider-registry.d.ts.map +1 -0
- package/dist/llm/provider-registry.js +186 -0
- package/dist/llm/provider-registry.js.map +1 -0
- package/dist/llm/proxy-runtime.d.ts +37 -0
- package/dist/llm/proxy-runtime.d.ts.map +1 -0
- package/dist/llm/proxy-runtime.js +462 -0
- package/dist/llm/proxy-runtime.js.map +1 -0
- package/dist/llm/test-model-policy.d.ts +3 -0
- package/dist/llm/test-model-policy.d.ts.map +1 -0
- package/dist/llm/test-model-policy.js +16 -0
- package/dist/llm/test-model-policy.js.map +1 -0
- package/dist/n8n-local/bootstrap.d.ts +12 -0
- package/dist/n8n-local/bootstrap.d.ts.map +1 -0
- package/dist/n8n-local/bootstrap.js +281 -0
- package/dist/n8n-local/bootstrap.js.map +1 -0
- package/dist/n8n-local/browser-auth.d.ts +12 -0
- package/dist/n8n-local/browser-auth.d.ts.map +1 -0
- package/dist/n8n-local/browser-auth.js +159 -0
- package/dist/n8n-local/browser-auth.js.map +1 -0
- package/dist/n8n-local/detect.d.ts +50 -0
- package/dist/n8n-local/detect.d.ts.map +1 -0
- package/dist/n8n-local/detect.js +202 -0
- package/dist/n8n-local/detect.js.map +1 -0
- package/dist/n8n-local/direct-manager.d.ts +15 -0
- package/dist/n8n-local/direct-manager.d.ts.map +1 -0
- package/dist/n8n-local/direct-manager.js +231 -0
- package/dist/n8n-local/direct-manager.js.map +1 -0
- package/dist/n8n-local/docker-manager.d.ts +18 -0
- package/dist/n8n-local/docker-manager.d.ts.map +1 -0
- package/dist/n8n-local/docker-manager.js +216 -0
- package/dist/n8n-local/docker-manager.js.map +1 -0
- package/dist/n8n-local/owner-credentials.d.ts +15 -0
- package/dist/n8n-local/owner-credentials.d.ts.map +1 -0
- package/dist/n8n-local/owner-credentials.js +50 -0
- package/dist/n8n-local/owner-credentials.js.map +1 -0
- package/dist/n8n-local/plan.d.ts +16 -0
- package/dist/n8n-local/plan.d.ts.map +1 -0
- package/dist/n8n-local/plan.js +48 -0
- package/dist/n8n-local/plan.js.map +1 -0
- package/dist/n8n-local/state.d.ts +41 -0
- package/dist/n8n-local/state.d.ts.map +1 -0
- package/dist/n8n-local/state.js +80 -0
- package/dist/n8n-local/state.js.map +1 -0
- package/dist/n8n-local/workflow-open.d.ts +21 -0
- package/dist/n8n-local/workflow-open.d.ts.map +1 -0
- package/dist/n8n-local/workflow-open.js +50 -0
- package/dist/n8n-local/workflow-open.js.map +1 -0
- package/dist/runtime/context-compaction.d.ts.map +1 -1
- package/dist/runtime/context-compaction.js +7 -0
- package/dist/runtime/context-compaction.js.map +1 -1
- package/dist/runtime/run-engine.d.ts.map +1 -1
- package/dist/runtime/run-engine.js +52 -1
- package/dist/runtime/run-engine.js.map +1 -1
- package/dist/setup/setup-wizard.d.ts +35 -3
- package/dist/setup/setup-wizard.d.ts.map +1 -1
- package/dist/setup/setup-wizard.js +461 -53
- package/dist/setup/setup-wizard.js.map +1 -1
- package/dist/setup.d.ts +2 -1
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +201 -87
- package/dist/setup.js.map +1 -1
- package/dist/system/open-external.d.ts +2 -0
- package/dist/system/open-external.d.ts.map +1 -0
- package/dist/system/open-external.js +25 -0
- package/dist/system/open-external.js.map +1 -0
- package/dist/system/package-manager.d.ts +6 -0
- package/dist/system/package-manager.d.ts.map +1 -0
- package/dist/system/package-manager.js +13 -0
- package/dist/system/package-manager.js.map +1 -0
- package/dist/tools/build-tools.d.ts +110 -65
- package/dist/tools/build-tools.d.ts.map +1 -1
- package/dist/tools/deploy.d.ts +14 -14
- package/dist/tools/generate-workflow.d.ts +5 -5
- package/dist/tools/n8nac.d.ts +96 -53
- package/dist/tools/n8nac.d.ts.map +1 -1
- package/dist/tools/n8nac.js +52 -20
- package/dist/tools/n8nac.js.map +1 -1
- package/dist/tools/observer.d.ts +1 -0
- package/dist/tools/observer.d.ts.map +1 -1
- package/dist/tools/observer.js.map +1 -1
- package/dist/tools/present-workflow-result.d.ts +2 -0
- package/dist/tools/present-workflow-result.d.ts.map +1 -1
- package/dist/tools/present-workflow-result.js +11 -2
- package/dist/tools/present-workflow-result.js.map +1 -1
- package/dist/tools/request-required-action.d.ts +7 -7
- package/dist/tools/request-required-action.js +4 -4
- package/dist/tools/request-required-action.js.map +1 -1
- package/dist/tools/validate.d.ts +14 -14
- package/dist/tools/write-workspace-file.d.ts +5 -5
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/webui/app.js +14 -1
- package/dist/webui/app.js.map +2 -2
- package/package.json +14 -2
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import crypto from 'node:crypto';
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import { promisify } from 'node:util';
|
|
5
|
+
import { DEFAULT_N8N_PORT, inspectLocalN8nBootstrap } from './detect.js';
|
|
6
|
+
import { buildManagedN8nState, ensureManagedN8nDirs, readManagedN8nState, updateManagedN8nState, } from './state.js';
|
|
7
|
+
const execFileAsync = promisify(execFile);
|
|
8
|
+
const DEFAULT_N8N_IMAGE = 'docker.n8n.io/n8nio/n8n:stable';
|
|
9
|
+
const CONTAINER_N8N_PORT = 5678;
|
|
10
|
+
const DEFAULT_HEALTH_TIMEOUT_MS = 180_000;
|
|
11
|
+
const DEFAULT_EDITOR_TIMEOUT_MS = 90_000;
|
|
12
|
+
export async function installManagedDockerN8n(options = {}) {
|
|
13
|
+
const assessment = await inspectLocalN8nBootstrap();
|
|
14
|
+
if (!assessment.docker.available) {
|
|
15
|
+
throw new Error('Docker is not running. Choose the local managed n8n option without Docker, or install/run Docker.');
|
|
16
|
+
}
|
|
17
|
+
if (assessment.docker.reachable === false) {
|
|
18
|
+
throw new Error('Docker is not running. Choose the local managed n8n option without Docker, or install/run Docker.');
|
|
19
|
+
}
|
|
20
|
+
const paths = ensureManagedN8nDirs();
|
|
21
|
+
const existingState = readManagedN8nState();
|
|
22
|
+
const port = options.port ?? existingState?.port ?? assessment.preferredPort ?? DEFAULT_N8N_PORT;
|
|
23
|
+
const image = options.image ?? existingState?.image ?? DEFAULT_N8N_IMAGE;
|
|
24
|
+
writeDockerComposeFiles({ image, port });
|
|
25
|
+
updateManagedN8nState(() => buildManagedN8nState({
|
|
26
|
+
image,
|
|
27
|
+
port,
|
|
28
|
+
status: 'starting',
|
|
29
|
+
bootstrapStage: 'owner-pending',
|
|
30
|
+
}));
|
|
31
|
+
await runDockerCompose(['up', '-d', '--pull', 'missing']);
|
|
32
|
+
await waitForManagedN8nHealth(`http://127.0.0.1:${port}`);
|
|
33
|
+
await waitForManagedN8nEditorReadyBestEffort(`http://127.0.0.1:${port}`);
|
|
34
|
+
return updateManagedN8nState((current) => ({
|
|
35
|
+
...(current ?? buildManagedN8nState({ image, port })),
|
|
36
|
+
status: 'ready',
|
|
37
|
+
bootstrapStage: 'owner-pending',
|
|
38
|
+
lastError: undefined,
|
|
39
|
+
}));
|
|
40
|
+
function writeDockerComposeFiles(input) {
|
|
41
|
+
fs.writeFileSync(paths.envFile, buildEnvFile(input));
|
|
42
|
+
fs.writeFileSync(paths.composeFile, buildComposeFile());
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export async function startManagedDockerN8n() {
|
|
46
|
+
const state = readManagedN8nState();
|
|
47
|
+
if (!state) {
|
|
48
|
+
throw new Error('No Yagr-managed local n8n instance is installed yet. Run `yagr n8n local install` first.');
|
|
49
|
+
}
|
|
50
|
+
updateManagedN8nState((current) => ({
|
|
51
|
+
...(current ?? state),
|
|
52
|
+
status: 'starting',
|
|
53
|
+
lastError: undefined,
|
|
54
|
+
}));
|
|
55
|
+
await runDockerCompose(['up', '-d']);
|
|
56
|
+
await waitForManagedN8nHealth(state.url);
|
|
57
|
+
await waitForManagedN8nEditorReadyBestEffort(state.url);
|
|
58
|
+
return updateManagedN8nState((current) => ({
|
|
59
|
+
...(current ?? state),
|
|
60
|
+
status: 'ready',
|
|
61
|
+
lastError: undefined,
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
export async function getManagedDockerN8nStatus() {
|
|
65
|
+
const state = readManagedN8nState();
|
|
66
|
+
if (!state) {
|
|
67
|
+
return { installed: false, running: false, healthy: false };
|
|
68
|
+
}
|
|
69
|
+
const running = await isComposeServiceRunning();
|
|
70
|
+
const healthy = running ? await isManagedN8nHealthy(state.url) : false;
|
|
71
|
+
return {
|
|
72
|
+
installed: true,
|
|
73
|
+
running,
|
|
74
|
+
healthy,
|
|
75
|
+
url: state.url,
|
|
76
|
+
state,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
export async function stopManagedDockerN8n() {
|
|
80
|
+
const state = readManagedN8nState();
|
|
81
|
+
if (!state) {
|
|
82
|
+
throw new Error('No Yagr-managed local n8n instance is installed yet.');
|
|
83
|
+
}
|
|
84
|
+
await runDockerCompose(['down']);
|
|
85
|
+
return updateManagedN8nState((current) => ({
|
|
86
|
+
...(current ?? state),
|
|
87
|
+
status: 'stopped',
|
|
88
|
+
lastError: undefined,
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
91
|
+
export async function getManagedDockerN8nLogs(tail = 100) {
|
|
92
|
+
const state = readManagedN8nState();
|
|
93
|
+
if (!state) {
|
|
94
|
+
throw new Error('No Yagr-managed local n8n instance is installed yet.');
|
|
95
|
+
}
|
|
96
|
+
const { stdout, stderr } = await runDockerCompose(['logs', '--tail', String(tail)]);
|
|
97
|
+
return [stdout, stderr].filter(Boolean).join('\n').trim();
|
|
98
|
+
}
|
|
99
|
+
function buildEnvFile(input) {
|
|
100
|
+
return [
|
|
101
|
+
`N8N_IMAGE=${input.image}`,
|
|
102
|
+
`YAGR_N8N_HOST_PORT=${input.port}`,
|
|
103
|
+
'GENERIC_TIMEZONE=UTC',
|
|
104
|
+
'TZ=UTC',
|
|
105
|
+
'N8N_HOST=127.0.0.1',
|
|
106
|
+
'N8N_LISTEN_ADDRESS=0.0.0.0',
|
|
107
|
+
'N8N_PROTOCOL=http',
|
|
108
|
+
`N8N_EDITOR_BASE_URL=http://127.0.0.1:${input.port}`,
|
|
109
|
+
'N8N_SECURE_COOKIE=false',
|
|
110
|
+
'N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true',
|
|
111
|
+
'QUEUE_HEALTH_CHECK_ACTIVE=true',
|
|
112
|
+
'',
|
|
113
|
+
].join('\n');
|
|
114
|
+
}
|
|
115
|
+
function buildComposeFile() {
|
|
116
|
+
return [
|
|
117
|
+
'services:',
|
|
118
|
+
' n8n:',
|
|
119
|
+
' image: ${N8N_IMAGE}',
|
|
120
|
+
' restart: unless-stopped',
|
|
121
|
+
' ports:',
|
|
122
|
+
` - "127.0.0.1:\${YAGR_N8N_HOST_PORT}:${CONTAINER_N8N_PORT}"`,
|
|
123
|
+
' env_file:',
|
|
124
|
+
' - .env',
|
|
125
|
+
' volumes:',
|
|
126
|
+
' - ./data:/home/node/.n8n',
|
|
127
|
+
'',
|
|
128
|
+
].join('\n');
|
|
129
|
+
}
|
|
130
|
+
async function runDockerCompose(args) {
|
|
131
|
+
const { rootDir, composeFile } = ensureManagedN8nDirs();
|
|
132
|
+
return execFileAsync('docker', ['compose', '-f', composeFile, ...args], {
|
|
133
|
+
cwd: rootDir,
|
|
134
|
+
timeout: 120_000,
|
|
135
|
+
env: {
|
|
136
|
+
...process.env,
|
|
137
|
+
COMPOSE_PROJECT_NAME: getComposeProjectName(rootDir),
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
function getComposeProjectName(rootDir) {
|
|
142
|
+
const digest = crypto.createHash('sha1').update(rootDir).digest('hex').slice(0, 10);
|
|
143
|
+
return `yagr-n8n-${digest}`;
|
|
144
|
+
}
|
|
145
|
+
async function isComposeServiceRunning() {
|
|
146
|
+
try {
|
|
147
|
+
const { stdout } = await runDockerCompose(['ps', '--status', 'running', '--services']);
|
|
148
|
+
return stdout.split(/\r?\n/).map((line) => line.trim()).includes('n8n');
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
async function isManagedN8nHealthy(url) {
|
|
155
|
+
try {
|
|
156
|
+
const response = await fetch(`${url}/healthz`);
|
|
157
|
+
return response.ok;
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async function isManagedN8nEditorReady(url) {
|
|
164
|
+
try {
|
|
165
|
+
const response = await fetch(url);
|
|
166
|
+
if (!response.ok) {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
const body = await response.text();
|
|
170
|
+
if (!body.trim()) {
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
return !body.toLowerCase().includes('n8n is starting up');
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
async function waitForManagedN8nHealth(url, timeoutMs = DEFAULT_HEALTH_TIMEOUT_MS) {
|
|
180
|
+
const deadline = Date.now() + timeoutMs;
|
|
181
|
+
while (Date.now() < deadline) {
|
|
182
|
+
if (await isManagedN8nHealthy(url)) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
await new Promise((resolve) => setTimeout(resolve, 1500));
|
|
186
|
+
}
|
|
187
|
+
updateManagedN8nState((current) => ({
|
|
188
|
+
...(current ?? buildManagedN8nState({ image: DEFAULT_N8N_IMAGE, port: DEFAULT_N8N_PORT })),
|
|
189
|
+
status: 'error',
|
|
190
|
+
lastError: `Timed out waiting for ${url} to become healthy.`,
|
|
191
|
+
}));
|
|
192
|
+
throw new Error(`Timed out waiting for ${url} to become healthy.`);
|
|
193
|
+
}
|
|
194
|
+
async function waitForManagedN8nEditorReady(url, timeoutMs = DEFAULT_EDITOR_TIMEOUT_MS) {
|
|
195
|
+
const deadline = Date.now() + timeoutMs;
|
|
196
|
+
while (Date.now() < deadline) {
|
|
197
|
+
if (await isManagedN8nEditorReady(url)) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
await new Promise((resolve) => setTimeout(resolve, 1500));
|
|
201
|
+
}
|
|
202
|
+
updateManagedN8nState((current) => ({
|
|
203
|
+
...(current ?? buildManagedN8nState({ image: DEFAULT_N8N_IMAGE, port: DEFAULT_N8N_PORT })),
|
|
204
|
+
lastError: `Timed out waiting for the n8n editor at ${url} to become ready.`,
|
|
205
|
+
}));
|
|
206
|
+
throw new Error(`Timed out waiting for the n8n editor at ${url} to become ready.`);
|
|
207
|
+
}
|
|
208
|
+
async function waitForManagedN8nEditorReadyBestEffort(url) {
|
|
209
|
+
try {
|
|
210
|
+
await waitForManagedN8nEditorReady(url);
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
// Do not fail installation on editor warmup only.
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=docker-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-manager.js","sourceRoot":"","sources":["../../src/n8n-local/docker-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface ManagedN8nOwnerCredentials {
|
|
2
|
+
url: string;
|
|
3
|
+
email: string;
|
|
4
|
+
password: string;
|
|
5
|
+
firstName: string;
|
|
6
|
+
lastName: string;
|
|
7
|
+
createdAt: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class ManagedN8nOwnerCredentialService {
|
|
10
|
+
private readonly store;
|
|
11
|
+
constructor();
|
|
12
|
+
get(url: string): ManagedN8nOwnerCredentials | undefined;
|
|
13
|
+
save(credentials: ManagedN8nOwnerCredentials): ManagedN8nOwnerCredentials;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=owner-credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-credentials.d.ts","sourceRoot":"","sources":["../../src/n8n-local/owner-credentials.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,qBAAa,gCAAgC;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuC;;IAW7D,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,0BAA0B,GAAG,SAAS;IAcxD,IAAI,CAAC,WAAW,EAAE,0BAA0B,GAAG,0BAA0B;CAgB1E"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import Conf from 'conf';
|
|
2
|
+
import { ensureYagrHomeDir, getYagrPaths } from '../config/yagr-home.js';
|
|
3
|
+
export class ManagedN8nOwnerCredentialService {
|
|
4
|
+
store;
|
|
5
|
+
constructor() {
|
|
6
|
+
const paths = getYagrPaths();
|
|
7
|
+
ensureYagrHomeDir();
|
|
8
|
+
this.store = new Conf({
|
|
9
|
+
cwd: paths.homeDir,
|
|
10
|
+
configName: 'n8n-local-owner-credentials',
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
get(url) {
|
|
14
|
+
const instances = this.store.get('instances') ?? {};
|
|
15
|
+
const normalizedUrl = normalizeUrl(url);
|
|
16
|
+
const entry = instances[normalizedUrl];
|
|
17
|
+
if (!entry) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
url: normalizedUrl,
|
|
22
|
+
...entry,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
save(credentials) {
|
|
26
|
+
const normalizedUrl = normalizeUrl(credentials.url);
|
|
27
|
+
const instances = this.store.get('instances') ?? {};
|
|
28
|
+
instances[normalizedUrl] = {
|
|
29
|
+
email: credentials.email,
|
|
30
|
+
password: credentials.password,
|
|
31
|
+
firstName: credentials.firstName,
|
|
32
|
+
lastName: credentials.lastName,
|
|
33
|
+
createdAt: credentials.createdAt,
|
|
34
|
+
};
|
|
35
|
+
this.store.set('instances', instances);
|
|
36
|
+
return {
|
|
37
|
+
...credentials,
|
|
38
|
+
url: normalizedUrl,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function normalizeUrl(url) {
|
|
43
|
+
try {
|
|
44
|
+
return new URL(url).origin;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return url.replace(/\/$/, '');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=owner-credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-credentials.js","sourceRoot":"","sources":["../../src/n8n-local/owner-credentials.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAezE,MAAM,OAAO,gCAAgC;IAC1B,KAAK,CAAuC;IAE7D;QACE,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;QAC7B,iBAAiB,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAiC;YACpD,GAAG,EAAE,KAAK,CAAC,OAAO;YAClB,UAAU,EAAE,6BAA6B;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,GAAG,CAAC,GAAW;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACpD,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO;YACL,GAAG,EAAE,aAAa;YAClB,GAAG,KAAK;SACT,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,WAAuC;QAC1C,MAAM,aAAa,GAAG,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACpD,SAAS,CAAC,aAAa,CAAC,GAAG;YACzB,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,SAAS,EAAE,WAAW,CAAC,SAAS;SACjC,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACvC,OAAO;YACL,GAAG,WAAW;YACd,GAAG,EAAE,aAAa;SACnB,CAAC;IACJ,CAAC;CACF;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { LocalN8nBootstrapAssessment, LocalN8nBootstrapStrategy } from './detect.js';
|
|
2
|
+
export type N8nBootstrapTarget = 'local-managed' | 'existing-instance';
|
|
3
|
+
export type N8nBootstrapAutomationLevel = 'silent' | 'assisted' | 'guided';
|
|
4
|
+
export interface N8nBootstrapPlan {
|
|
5
|
+
target: N8nBootstrapTarget;
|
|
6
|
+
runtimeStrategy?: LocalN8nBootstrapStrategy;
|
|
7
|
+
automationLevel: N8nBootstrapAutomationLevel;
|
|
8
|
+
canProceed: boolean;
|
|
9
|
+
preferredUrl?: string;
|
|
10
|
+
reasons: string[];
|
|
11
|
+
}
|
|
12
|
+
export declare function createN8nBootstrapPlan(input: {
|
|
13
|
+
target: N8nBootstrapTarget;
|
|
14
|
+
assessment?: LocalN8nBootstrapAssessment;
|
|
15
|
+
}): N8nBootstrapPlan;
|
|
16
|
+
//# sourceMappingURL=plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/n8n-local/plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE1F,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG,mBAAmB,CAAC;AACvE,MAAM,MAAM,2BAA2B,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE3E,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,eAAe,CAAC,EAAE,yBAAyB,CAAC;IAC5C,eAAe,EAAE,2BAA2B,CAAC;IAC7C,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,CAAC,EAAE,2BAA2B,CAAC;CAC1C,GAAG,gBAAgB,CAkDnB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export function createN8nBootstrapPlan(input) {
|
|
2
|
+
if (input.target === 'existing-instance') {
|
|
3
|
+
return {
|
|
4
|
+
target: input.target,
|
|
5
|
+
automationLevel: 'guided',
|
|
6
|
+
canProceed: true,
|
|
7
|
+
reasons: [
|
|
8
|
+
'Existing n8n instances stay available as a guided integration path.',
|
|
9
|
+
],
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
if (!input.assessment) {
|
|
13
|
+
return {
|
|
14
|
+
target: input.target,
|
|
15
|
+
automationLevel: 'assisted',
|
|
16
|
+
canProceed: false,
|
|
17
|
+
reasons: [
|
|
18
|
+
'Local bootstrap requires a machine assessment before Yagr can choose a runtime strategy.',
|
|
19
|
+
],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const { assessment } = input;
|
|
23
|
+
if (assessment.recommendedStrategy === 'docker' || assessment.recommendedStrategy === 'direct') {
|
|
24
|
+
return {
|
|
25
|
+
target: input.target,
|
|
26
|
+
runtimeStrategy: assessment.recommendedStrategy,
|
|
27
|
+
automationLevel: 'silent',
|
|
28
|
+
canProceed: true,
|
|
29
|
+
preferredUrl: assessment.preferredUrl,
|
|
30
|
+
reasons: [
|
|
31
|
+
`A ${assessment.recommendedStrategy} runtime is available for a Yagr-managed local n8n instance.`,
|
|
32
|
+
'Silent local bootstrap is the primary target for Yagr-managed instances.',
|
|
33
|
+
],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
target: input.target,
|
|
38
|
+
runtimeStrategy: assessment.recommendedStrategy,
|
|
39
|
+
automationLevel: 'assisted',
|
|
40
|
+
canProceed: false,
|
|
41
|
+
preferredUrl: assessment.preferredUrl,
|
|
42
|
+
reasons: [
|
|
43
|
+
...assessment.blockers,
|
|
44
|
+
'Yagr should fall back to an assisted local bootstrap path until the missing prerequisite is installed.',
|
|
45
|
+
],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/n8n-local/plan.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,sBAAsB,CAAC,KAGtC;IACC,IAAI,KAAK,CAAC,MAAM,KAAK,mBAAmB,EAAE,CAAC;QACzC,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,eAAe,EAAE,QAAQ;YACzB,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE;gBACP,qEAAqE;aACtE;SACF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,eAAe,EAAE,UAAU;YAC3B,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE;gBACP,0FAA0F;aAC3F;SACF,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAE7B,IAAI,UAAU,CAAC,mBAAmB,KAAK,QAAQ,IAAI,UAAU,CAAC,mBAAmB,KAAK,QAAQ,EAAE,CAAC;QAC/F,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,eAAe,EAAE,UAAU,CAAC,mBAAmB;YAC/C,eAAe,EAAE,QAAQ;YACzB,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,OAAO,EAAE;gBACP,KAAK,UAAU,CAAC,mBAAmB,8DAA8D;gBACjG,0EAA0E;aAC3E;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,eAAe,EAAE,UAAU,CAAC,mBAAmB;QAC/C,eAAe,EAAE,UAAU;QAC3B,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,UAAU,CAAC,YAAY;QACrC,OAAO,EAAE;YACP,GAAG,UAAU,CAAC,QAAQ;YACtB,wGAAwG;SACzG;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export interface ManagedN8nInstanceState {
|
|
2
|
+
strategy: 'docker' | 'direct';
|
|
3
|
+
image?: string;
|
|
4
|
+
port: number;
|
|
5
|
+
url: string;
|
|
6
|
+
composeFile?: string;
|
|
7
|
+
envFile?: string;
|
|
8
|
+
dataDir: string;
|
|
9
|
+
logFile?: string;
|
|
10
|
+
pid?: number;
|
|
11
|
+
status: 'created' | 'starting' | 'ready' | 'stopped' | 'error';
|
|
12
|
+
bootstrapStage: 'runtime-only' | 'owner-pending' | 'api-key-pending' | 'connected';
|
|
13
|
+
createdAt: string;
|
|
14
|
+
updatedAt: string;
|
|
15
|
+
lastError?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface ManagedN8nPaths {
|
|
18
|
+
rootDir: string;
|
|
19
|
+
stateFile: string;
|
|
20
|
+
composeFile: string;
|
|
21
|
+
envFile: string;
|
|
22
|
+
dataDir: string;
|
|
23
|
+
logFile: string;
|
|
24
|
+
}
|
|
25
|
+
export declare function getManagedN8nPaths(): ManagedN8nPaths;
|
|
26
|
+
export declare function ensureManagedN8nDirs(): ManagedN8nPaths;
|
|
27
|
+
export declare function readManagedN8nState(): ManagedN8nInstanceState | undefined;
|
|
28
|
+
export declare function writeManagedN8nState(state: ManagedN8nInstanceState): ManagedN8nInstanceState;
|
|
29
|
+
export declare function buildManagedN8nState(input: {
|
|
30
|
+
strategy?: ManagedN8nInstanceState['strategy'];
|
|
31
|
+
image: string;
|
|
32
|
+
port: number;
|
|
33
|
+
status?: ManagedN8nInstanceState['status'];
|
|
34
|
+
bootstrapStage?: ManagedN8nInstanceState['bootstrapStage'];
|
|
35
|
+
lastError?: string;
|
|
36
|
+
pid?: number;
|
|
37
|
+
logFile?: string;
|
|
38
|
+
}): ManagedN8nInstanceState;
|
|
39
|
+
export declare function updateManagedN8nState(updater: (current: ManagedN8nInstanceState | undefined) => ManagedN8nInstanceState): ManagedN8nInstanceState;
|
|
40
|
+
export declare function markManagedN8nBootstrapStage(url: string, bootstrapStage: ManagedN8nInstanceState['bootstrapStage']): ManagedN8nInstanceState | undefined;
|
|
41
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/n8n-local/state.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IAC/D,cAAc,EAAE,cAAc,GAAG,eAAe,GAAG,iBAAiB,GAAG,WAAW,CAAC;IACnF,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAUpD;AAED,wBAAgB,oBAAoB,IAAI,eAAe,CAMtD;AAED,wBAAgB,mBAAmB,IAAI,uBAAuB,GAAG,SAAS,CAWzE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,uBAAuB,GAAG,uBAAuB,CAI5F;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,EAAE,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC3C,cAAc,CAAC,EAAE,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,uBAAuB,CAoB1B;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,CAAC,OAAO,EAAE,uBAAuB,GAAG,SAAS,KAAK,uBAAuB,GACjF,uBAAuB,CAQzB;AAED,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,uBAAuB,CAAC,gBAAgB,CAAC,GACxD,uBAAuB,GAAG,SAAS,CAYrC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { ensureYagrHomeDir, getYagrPaths } from '../config/yagr-home.js';
|
|
4
|
+
export function getManagedN8nPaths() {
|
|
5
|
+
const { managedN8nDir } = getYagrPaths();
|
|
6
|
+
return {
|
|
7
|
+
rootDir: managedN8nDir,
|
|
8
|
+
stateFile: path.join(managedN8nDir, 'instance.json'),
|
|
9
|
+
composeFile: path.join(managedN8nDir, 'compose.yaml'),
|
|
10
|
+
envFile: path.join(managedN8nDir, '.env'),
|
|
11
|
+
dataDir: path.join(managedN8nDir, 'data'),
|
|
12
|
+
logFile: path.join(managedN8nDir, 'runtime.log'),
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export function ensureManagedN8nDirs() {
|
|
16
|
+
ensureYagrHomeDir();
|
|
17
|
+
const paths = getManagedN8nPaths();
|
|
18
|
+
fs.mkdirSync(paths.rootDir, { recursive: true });
|
|
19
|
+
fs.mkdirSync(paths.dataDir, { recursive: true });
|
|
20
|
+
return paths;
|
|
21
|
+
}
|
|
22
|
+
export function readManagedN8nState() {
|
|
23
|
+
const { stateFile } = getManagedN8nPaths();
|
|
24
|
+
if (!fs.existsSync(stateFile)) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
return JSON.parse(fs.readFileSync(stateFile, 'utf-8'));
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export function writeManagedN8nState(state) {
|
|
35
|
+
const paths = ensureManagedN8nDirs();
|
|
36
|
+
fs.writeFileSync(paths.stateFile, `${JSON.stringify(state, null, 2)}\n`);
|
|
37
|
+
return state;
|
|
38
|
+
}
|
|
39
|
+
export function buildManagedN8nState(input) {
|
|
40
|
+
const paths = ensureManagedN8nDirs();
|
|
41
|
+
const now = new Date().toISOString();
|
|
42
|
+
return {
|
|
43
|
+
strategy: input.strategy ?? 'docker',
|
|
44
|
+
image: input.image || undefined,
|
|
45
|
+
port: input.port,
|
|
46
|
+
url: `http://127.0.0.1:${input.port}`,
|
|
47
|
+
composeFile: input.strategy === 'direct' ? undefined : paths.composeFile,
|
|
48
|
+
envFile: input.strategy === 'direct' ? undefined : paths.envFile,
|
|
49
|
+
dataDir: paths.dataDir,
|
|
50
|
+
logFile: input.logFile ?? paths.logFile,
|
|
51
|
+
pid: input.pid,
|
|
52
|
+
status: input.status ?? 'created',
|
|
53
|
+
bootstrapStage: input.bootstrapStage ?? 'runtime-only',
|
|
54
|
+
createdAt: now,
|
|
55
|
+
updatedAt: now,
|
|
56
|
+
lastError: input.lastError,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export function updateManagedN8nState(updater) {
|
|
60
|
+
const current = readManagedN8nState();
|
|
61
|
+
const next = updater(current);
|
|
62
|
+
next.updatedAt = new Date().toISOString();
|
|
63
|
+
if (!next.createdAt) {
|
|
64
|
+
next.createdAt = next.updatedAt;
|
|
65
|
+
}
|
|
66
|
+
return writeManagedN8nState(next);
|
|
67
|
+
}
|
|
68
|
+
export function markManagedN8nBootstrapStage(url, bootstrapStage) {
|
|
69
|
+
const current = readManagedN8nState();
|
|
70
|
+
if (!current || current.url !== url) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
return updateManagedN8nState((state) => ({
|
|
74
|
+
...(state ?? current),
|
|
75
|
+
bootstrapStage,
|
|
76
|
+
status: bootstrapStage === 'connected' ? 'ready' : (state ?? current).status,
|
|
77
|
+
lastError: undefined,
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/n8n-local/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AA4BzE,MAAM,UAAU,kBAAkB;IAChC,MAAM,EAAE,aAAa,EAAE,GAAG,YAAY,EAAE,CAAC;IACzC,OAAO;QACL,OAAO,EAAE,aAAa;QACtB,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC;QACpD,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC;QACrD,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;QACzC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;QACzC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,iBAAiB,EAAE,CAAC;IACpB,MAAM,KAAK,GAAG,kBAAkB,EAAE,CAAC;IACnC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,MAAM,EAAE,SAAS,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAA4B,CAAC;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAA8B;IACjE,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;IACrC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACzE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KASpC;IACC,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,QAAQ;QACpC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,SAAS;QAC/B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG,EAAE,oBAAoB,KAAK,CAAC,IAAI,EAAE;QACrC,WAAW,EAAE,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW;QACxE,OAAO,EAAE,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO;QAChE,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;QACvC,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;QACjC,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,cAAc;QACtD,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,OAAkF;IAElF,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAClC,CAAC;IACD,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,GAAW,EACX,cAAyD;IAEzD,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,qBAAqB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACvC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC;QACrB,cAAc;QACd,MAAM,EAAE,cAAc,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,MAAM;QAC5E,SAAS,EAAE,SAAS;KACrB,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type ManagedN8nOwnerCredentials } from './owner-credentials.js';
|
|
2
|
+
export type ManagedWorkflowOpenPayload = {
|
|
3
|
+
mode: 'direct';
|
|
4
|
+
targetUrl: string;
|
|
5
|
+
} | {
|
|
6
|
+
mode: 'managed';
|
|
7
|
+
targetUrl: string;
|
|
8
|
+
loginUrl: string;
|
|
9
|
+
credentials: ManagedN8nOwnerCredentials;
|
|
10
|
+
fallbackPage: string;
|
|
11
|
+
};
|
|
12
|
+
export type ManagedWorkflowOpenResolution = {
|
|
13
|
+
ok: true;
|
|
14
|
+
payload: ManagedWorkflowOpenPayload;
|
|
15
|
+
} | {
|
|
16
|
+
ok: false;
|
|
17
|
+
statusCode: number;
|
|
18
|
+
error: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function resolveManagedN8nWorkflowOpen(target: string): ManagedWorkflowOpenResolution;
|
|
21
|
+
//# sourceMappingURL=workflow-open.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-open.d.ts","sourceRoot":"","sources":["../../src/n8n-local/workflow-open.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoC,KAAK,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAE3G,MAAM,MAAM,0BAA0B,GAClC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACrC;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,0BAA0B,CAAC;IACxC,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN,MAAM,MAAM,6BAA6B,GACrC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,0BAA0B,CAAA;CAAE,GACjD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,6BAA6B,CAiD3F"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { YagrN8nConfigService } from '../config/n8n-config-service.js';
|
|
2
|
+
import { buildManagedN8nWorkflowOpenPage } from './browser-auth.js';
|
|
3
|
+
import { ManagedN8nOwnerCredentialService } from './owner-credentials.js';
|
|
4
|
+
export function resolveManagedN8nWorkflowOpen(target) {
|
|
5
|
+
if (!target) {
|
|
6
|
+
return { ok: false, statusCode: 400, error: 'Workflow target URL is required.' };
|
|
7
|
+
}
|
|
8
|
+
const n8nConfig = new YagrN8nConfigService().getLocalConfig();
|
|
9
|
+
if (!n8nConfig.host) {
|
|
10
|
+
return { ok: false, statusCode: 400, error: 'n8n is not configured yet.' };
|
|
11
|
+
}
|
|
12
|
+
let targetUrl;
|
|
13
|
+
let configuredHost;
|
|
14
|
+
try {
|
|
15
|
+
targetUrl = new URL(target);
|
|
16
|
+
configuredHost = new URL(n8nConfig.host);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return { ok: false, statusCode: 400, error: 'Workflow target URL is invalid.' };
|
|
20
|
+
}
|
|
21
|
+
if (targetUrl.origin !== configuredHost.origin) {
|
|
22
|
+
return { ok: false, statusCode: 400, error: 'Workflow target URL does not match the configured n8n host.' };
|
|
23
|
+
}
|
|
24
|
+
const ownerCredentials = new ManagedN8nOwnerCredentialService().get(configuredHost.origin);
|
|
25
|
+
if (!ownerCredentials) {
|
|
26
|
+
return {
|
|
27
|
+
ok: true,
|
|
28
|
+
payload: {
|
|
29
|
+
mode: 'direct',
|
|
30
|
+
targetUrl: targetUrl.toString(),
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const loginUrl = new URL('/rest/login', configuredHost.origin).toString();
|
|
35
|
+
return {
|
|
36
|
+
ok: true,
|
|
37
|
+
payload: {
|
|
38
|
+
mode: 'managed',
|
|
39
|
+
targetUrl: targetUrl.toString(),
|
|
40
|
+
loginUrl,
|
|
41
|
+
credentials: ownerCredentials,
|
|
42
|
+
fallbackPage: buildManagedN8nWorkflowOpenPage({
|
|
43
|
+
targetUrl: targetUrl.toString(),
|
|
44
|
+
loginUrl,
|
|
45
|
+
credentials: ownerCredentials,
|
|
46
|
+
}),
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=workflow-open.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-open.js","sourceRoot":"","sources":["../../src/n8n-local/workflow-open.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,gCAAgC,EAAmC,MAAM,wBAAwB,CAAC;AAgB3G,MAAM,UAAU,6BAA6B,CAAC,MAAc;IAC1D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;IACnF,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC,cAAc,EAAE,CAAC;IAC9D,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;IAC7E,CAAC;IAED,IAAI,SAAc,CAAC;IACnB,IAAI,cAAmB,CAAC;IACxB,IAAI,CAAC;QACH,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,cAAc,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;IAClF,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM,EAAE,CAAC;QAC/C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,6DAA6D,EAAE,CAAC;IAC9G,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI,gCAAgC,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC3F,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO;YACL,EAAE,EAAE,IAAI;YACR,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE;aAChC;SACF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,aAAa,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC1E,OAAO;QACL,EAAE,EAAE,IAAI;QACR,OAAO,EAAE;YACP,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE;YAC/B,QAAQ;YACR,WAAW,EAAE,gBAAgB;YAC7B,YAAY,EAAE,+BAA+B,CAAC;gBAC5C,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE;gBAC/B,QAAQ;gBACR,WAAW,EAAE,gBAAgB;aAC9B,CAAC;SACH;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-compaction.d.ts","sourceRoot":"","sources":["../../src/runtime/context-compaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,IAAI,CAAC;AACpD,OAAO,KAAK,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"context-compaction.d.ts","sourceRoot":"","sources":["../../src/runtime/context-compaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,IAAI,CAAC;AACpD,OAAO,KAAK,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAkB5G,MAAM,WAAW,aAAa;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,0BAA0B,CAAC;CACpC;AA+LD,wBAAsB,0BAA0B,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CA2CpH"}
|
|
@@ -7,6 +7,12 @@ const DEFAULT_CHARS_PER_TOKEN = 4;
|
|
|
7
7
|
const DEFAULT_THRESHOLD_PERCENT = 70;
|
|
8
8
|
const DEFAULT_PRESERVE_RECENT_MESSAGES = 6;
|
|
9
9
|
const MAX_TRANSCRIPT_CHARS = 24_000;
|
|
10
|
+
function providerOptionsForCompaction(provider) {
|
|
11
|
+
if (provider === 'openai' || provider === 'groq') {
|
|
12
|
+
return { openai: { strictSchemas: false } };
|
|
13
|
+
}
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
10
16
|
function contentToText(content) {
|
|
11
17
|
if (typeof content === 'string') {
|
|
12
18
|
return content;
|
|
@@ -136,6 +142,7 @@ async function generateCheckpointSummary(prompt, journal, compactedMessages, abo
|
|
|
136
142
|
},
|
|
137
143
|
],
|
|
138
144
|
maxSteps: 1,
|
|
145
|
+
providerOptions: providerOptionsForCompaction(llmConfig?.provider),
|
|
139
146
|
})).text.trim();
|
|
140
147
|
if (summary.length > 0) {
|
|
141
148
|
return { summary, source: 'llm' };
|