@elizaos/app-core 2.0.0-alpha.207 → 2.0.0-alpha.209
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/apps/app-lifeops/src/lifeops/schema.d.ts.map +1 -1
- package/apps/app-lifeops/src/lifeops/schema.js +6 -0
- package/apps/app-training/src/core/skill-scoring-cron.d.ts.map +1 -1
- package/apps/app-training/src/core/skill-scoring-cron.js +3 -2
- package/apps/app-training/src/core/trajectory-export-cron.d.ts.map +1 -1
- package/apps/app-training/src/core/trajectory-export-cron.js +3 -2
- package/apps/app-training/src/core/wait-for-service.d.ts +26 -0
- package/apps/app-training/src/core/wait-for-service.d.ts.map +1 -0
- package/apps/app-training/src/core/wait-for-service.js +29 -0
- package/package.json +5 -5
- package/packages/agent/src/api/plugin-routes.d.ts.map +1 -1
- package/packages/agent/src/api/plugin-routes.js +12 -0
- package/packages/agent/src/config/plugin-auto-enable.d.ts.map +1 -1
- package/packages/agent/src/config/plugin-auto-enable.js +12 -0
- package/packages/app-core/src/api/n8n-routes.d.ts +9 -0
- package/packages/app-core/src/api/n8n-routes.d.ts.map +1 -1
- package/packages/app-core/src/api/n8n-routes.js +7 -0
- package/packages/app-core/src/services/n8n-sidecar.d.ts +24 -1
- package/packages/app-core/src/services/n8n-sidecar.d.ts.map +1 -1
- package/packages/app-core/src/services/n8n-sidecar.js +73 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-lifeops/src/lifeops/schema.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAchB,CAAC"}
|
|
@@ -11,6 +11,12 @@ import { bigint, boolean, integer, jsonb, pgTable, text, unique, uuid, } from "d
|
|
|
11
11
|
// ---------------------------------------------------------------------------
|
|
12
12
|
// Wave 1+ additions — relationships, X read, screen time, scheduling,
|
|
13
13
|
// dossier. All life_* prefix, text IDs, ISO timestamps.
|
|
14
|
+
//
|
|
15
|
+
// TODO(schema-isolation): plugin-sql warns these tables sit in the `public`
|
|
16
|
+
// schema. Moving them to `pgSchema("app_lifeops")` requires a coordinated
|
|
17
|
+
// migration — the same tables are also created and queried via raw SQL in
|
|
18
|
+
// `repository.ts` (bootstrapSchema + 50+ queries). Do that in one atomic
|
|
19
|
+
// pass or the app will split-brain between `app_lifeops.*` and `public.*`.
|
|
14
20
|
// ---------------------------------------------------------------------------
|
|
15
21
|
export const lifeRelationships = pgTable("life_relationships", {
|
|
16
22
|
id: text("id").primaryKey(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-scoring-cron.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-training/src/core/skill-scoring-cron.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"skill-scoring-cron.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-training/src/core/skill-scoring-cron.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAaH,UAAU,aAAa;IACrB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AA2BD,UAAU,WAAW;IACnB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,aAAa,CAAC,EAAE,CACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,KACzC,IAAI,CAAC;CACX;AAgCD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAkDT;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GACrC,OAAO,CACR,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CACzE,CAwDA;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,OAAO,CAAC,IAAI,CAAC,CAkCf"}
|
|
@@ -13,6 +13,7 @@ import { existsSync, readdirSync, readFileSync, writeFileSync, } from "node:fs";
|
|
|
13
13
|
import { join } from "node:path";
|
|
14
14
|
import { resolveStateDir } from "@elizaos/core";
|
|
15
15
|
import { scoreSkill } from "./replay-validator.js";
|
|
16
|
+
import { waitForService } from "./wait-for-service.js";
|
|
16
17
|
const SCORE_EVENT_NAME = "TRACK_C_SKILL_SCORE";
|
|
17
18
|
const DEFAULT_TRAJECTORY_LIMIT = 200;
|
|
18
19
|
function curatedActiveDir() {
|
|
@@ -149,9 +150,9 @@ export async function registerSkillScoringCron(runtime, options) {
|
|
|
149
150
|
warn: () => { },
|
|
150
151
|
error: () => { },
|
|
151
152
|
};
|
|
152
|
-
const cronService = runtime
|
|
153
|
+
const cronService = await waitForService(runtime, "CRON");
|
|
153
154
|
if (!cronService || typeof cronService.createJob !== "function") {
|
|
154
|
-
log.warn("[SkillScoringCron] CRON service unavailable; skill-scoring cron not scheduled");
|
|
155
|
+
log.warn("[SkillScoringCron] CRON service unavailable after 10s; skill-scoring cron not scheduled");
|
|
155
156
|
return;
|
|
156
157
|
}
|
|
157
158
|
if (typeof runtime.registerEvent === "function") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trajectory-export-cron.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-training/src/core/trajectory-export-cron.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAEN,KAAK,2BAA2B,EAChC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEN,KAAK,gBAAgB,EAErB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"trajectory-export-cron.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-training/src/core/trajectory-export-cron.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAEN,KAAK,2BAA2B,EAChC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEN,KAAK,gBAAgB,EAErB,MAAM,qBAAqB,CAAC;AAM7B,UAAU,aAAa;IACtB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,UAAU,WAAW;IACpB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,aAAa,CAAC,EAAE,CACf,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,KACxC,IAAI,CAAC;CACV;AAgCD,MAAM,WAAW,uBAAuB;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,2BAA2B,CAAC,SAAS,CAAC,CAAC;IACtD,WAAW,EAAE,2BAA2B,CAAC,OAAO,CAAC,CAAC;CAClD;AAED,wBAAsB,0BAA0B,CAC/C,OAAO,EAAE,WAAW,EACpB,OAAO,GAAE,uBAA4B,GACnC,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAoErC;AAED;;;;GAIG;AACH,wBAAsB,4BAA4B,CACjD,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,gBAAgB,CAAA;CAAE,GACzE,OAAO,CAAC,IAAI,CAAC,CAoCf"}
|
|
@@ -13,6 +13,7 @@ import { join } from "node:path";
|
|
|
13
13
|
import { resolveStateDir } from "@elizaos/core";
|
|
14
14
|
import { exportTrajectoryTaskDatasets, } from "./trajectory-task-datasets.js";
|
|
15
15
|
import { applyPrivacyFilter, } from "./privacy-filter.js";
|
|
16
|
+
import { waitForService } from "./wait-for-service.js";
|
|
16
17
|
const EXPORT_EVENT_NAME = "TRACK_C_TRAJECTORY_EXPORT";
|
|
17
18
|
const DEFAULT_TRAJECTORY_LIMIT = 500;
|
|
18
19
|
function todaySegment() {
|
|
@@ -81,9 +82,9 @@ export async function registerTrajectoryExportCron(runtime, options) {
|
|
|
81
82
|
warn: () => { },
|
|
82
83
|
error: () => { },
|
|
83
84
|
};
|
|
84
|
-
const cronService = runtime
|
|
85
|
+
const cronService = await waitForService(runtime, "CRON");
|
|
85
86
|
if (!cronService || typeof cronService.createJob !== "function") {
|
|
86
|
-
log.warn("[TrajectoryExportCron] CRON service unavailable; export cron not scheduled");
|
|
87
|
+
log.warn("[TrajectoryExportCron] CRON service unavailable after 10s; export cron not scheduled");
|
|
87
88
|
return;
|
|
88
89
|
}
|
|
89
90
|
if (typeof runtime.registerEvent === "function") {
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Poll a runtime's service registry until a named service becomes available,
|
|
3
|
+
* or the timeout expires. Used by cron registrants that run at agent boot
|
|
4
|
+
* before the @elizaos/plugin-cron service has finished registering — without
|
|
5
|
+
* this, the cron job never gets scheduled.
|
|
6
|
+
*
|
|
7
|
+
* Keeps zero cross-package dependencies on the cron plugin itself so callers
|
|
8
|
+
* in app-training don't need to pull in @elizaos/plugin-cron typings.
|
|
9
|
+
*/
|
|
10
|
+
interface RuntimeLike {
|
|
11
|
+
getService: (name: string) => unknown;
|
|
12
|
+
}
|
|
13
|
+
export interface WaitForServiceOptions {
|
|
14
|
+
/** Total time to wait before giving up (default: 10_000). */
|
|
15
|
+
timeoutMs?: number;
|
|
16
|
+
/** Polling interval (default: 250). */
|
|
17
|
+
pollIntervalMs?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Resolves to the service instance once present, or `null` if the timeout
|
|
21
|
+
* expires. Never throws — callers that need hard guarantees should handle
|
|
22
|
+
* `null` explicitly.
|
|
23
|
+
*/
|
|
24
|
+
export declare function waitForService<TService>(runtime: RuntimeLike, serviceName: string, options?: WaitForServiceOptions): Promise<TService | null>;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=wait-for-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-for-service.d.ts","sourceRoot":"","sources":["../../../../../../../apps/app-training/src/core/wait-for-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,UAAU,WAAW;IACpB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IACrC,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAC5C,OAAO,EAAE,WAAW,EACpB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAiB1B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Poll a runtime's service registry until a named service becomes available,
|
|
3
|
+
* or the timeout expires. Used by cron registrants that run at agent boot
|
|
4
|
+
* before the @elizaos/plugin-cron service has finished registering — without
|
|
5
|
+
* this, the cron job never gets scheduled.
|
|
6
|
+
*
|
|
7
|
+
* Keeps zero cross-package dependencies on the cron plugin itself so callers
|
|
8
|
+
* in app-training don't need to pull in @elizaos/plugin-cron typings.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Resolves to the service instance once present, or `null` if the timeout
|
|
12
|
+
* expires. Never throws — callers that need hard guarantees should handle
|
|
13
|
+
* `null` explicitly.
|
|
14
|
+
*/
|
|
15
|
+
export async function waitForService(runtime, serviceName, options) {
|
|
16
|
+
const timeoutMs = options?.timeoutMs ?? 10_000;
|
|
17
|
+
const pollIntervalMs = options?.pollIntervalMs ?? 250;
|
|
18
|
+
const deadline = Date.now() + timeoutMs;
|
|
19
|
+
while (true) {
|
|
20
|
+
const service = runtime.getService(serviceName);
|
|
21
|
+
if (service) {
|
|
22
|
+
return service;
|
|
23
|
+
}
|
|
24
|
+
if (Date.now() >= deadline) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
|
|
28
|
+
}
|
|
29
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elizaos/app-core",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.209",
|
|
4
4
|
"description": "Shared application core for elizaOS white-label agent apps.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -477,7 +477,7 @@
|
|
|
477
477
|
"@capacitor/keyboard": "8.0.3",
|
|
478
478
|
"@capacitor/preferences": "^8.0.1",
|
|
479
479
|
"@clack/prompts": "^1.0.0",
|
|
480
|
-
"@elizaos/agent": "^2.0.0-alpha.
|
|
480
|
+
"@elizaos/agent": "^2.0.0-alpha.209",
|
|
481
481
|
"@elizaos/app-companion": "^0.0.0",
|
|
482
482
|
"@elizaos/app-elizamaker": "^0.0.0",
|
|
483
483
|
"@elizaos/app-lifeops": "^0.0.0",
|
|
@@ -486,9 +486,9 @@
|
|
|
486
486
|
"@elizaos/app-task-coordinator": "^0.0.0",
|
|
487
487
|
"@elizaos/app-training": "^0.0.1",
|
|
488
488
|
"@elizaos/app-vincent": "^0.0.0",
|
|
489
|
-
"@elizaos/core": "^2.0.0-alpha.
|
|
490
|
-
"@elizaos/shared": "^2.0.0-alpha.
|
|
491
|
-
"@elizaos/ui": "^2.0.0-alpha.
|
|
489
|
+
"@elizaos/core": "^2.0.0-alpha.209",
|
|
490
|
+
"@elizaos/shared": "^2.0.0-alpha.209",
|
|
491
|
+
"@elizaos/ui": "^2.0.0-alpha.209",
|
|
492
492
|
"@radix-ui/react-checkbox": "^1.3.3",
|
|
493
493
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
494
494
|
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-routes.d.ts","sourceRoot":"","sources":["../../../../../../agent/src/api/plugin-routes.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"plugin-routes.d.ts","sourceRoot":"","sources":["../../../../../../agent/src/api/plugin-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -387,6 +387,18 @@ export async function handlePluginRoutes(ctx) {
|
|
|
387
387
|
const entries = state.config.plugins
|
|
388
388
|
.entries;
|
|
389
389
|
entries[pluginId] = { enabled: body.enabled };
|
|
390
|
+
// Keep plugins.allow aligned with entries[pluginId].enabled so the
|
|
391
|
+
// enable-state drift check in buildCoreToggleDiagnostics() stays clean.
|
|
392
|
+
state.config.plugins.allow = state.config.plugins.allow ?? [];
|
|
393
|
+
const allow = state.config.plugins.allow;
|
|
394
|
+
if (body.enabled) {
|
|
395
|
+
if (!allow.includes(pluginId) && !allow.includes(packageName)) {
|
|
396
|
+
allow.push(pluginId);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
else {
|
|
400
|
+
state.config.plugins.allow = allow.filter((p) => p !== pluginId && p !== packageName);
|
|
401
|
+
}
|
|
390
402
|
logger.info(`[eliza-api] ${body.enabled ? "Enabled" : "Disabled"} plugin: ${packageName}`);
|
|
391
403
|
// Persist capability toggle state in config.features so the runtime
|
|
392
404
|
// can gate related behaviour (e.g. disabling image description when
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-auto-enable.d.ts","sourceRoot":"","sources":["../../../../../../agent/src/config/plugin-auto-enable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAsBpD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMpD,CAAC;AAsBF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyCxD,CAAC;AAoDF,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,OAAO,GACvB,OAAO,CA8ET;AAED,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,OAAO,GAClB,OAAO,CAmBT;AAoCD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,2BAA2B,GAClC,2BAA2B,
|
|
1
|
+
{"version":3,"file":"plugin-auto-enable.d.ts","sourceRoot":"","sources":["../../../../../../agent/src/config/plugin-auto-enable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAsBpD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMpD,CAAC;AAsBF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAyCxD,CAAC;AAoDF,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,OAAO,GACvB,OAAO,CA8ET;AAED,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,OAAO,GAClB,OAAO,CAmBT;AAoCD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,2BAA2B,GAClC,2BAA2B,CA+X7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iCAAiC,CAC/C,aAAa,EAAE,MAAM,EAAE,EACvB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,OAAO,EAAE,MAAM,EAAE,GAChB,IAAI,CAgFN"}
|
|
@@ -385,6 +385,18 @@ export function applyPluginAutoEnable(params) {
|
|
|
385
385
|
addToAllowlist(pluginsConfig.allow, pluginName, pluginId, changes, `feature: ${featureName}`);
|
|
386
386
|
}
|
|
387
387
|
}
|
|
388
|
+
// Heal entries→allow drift: anything user-enabled via plugins.entries should
|
|
389
|
+
// also appear in the allowlist. Covers plugins that were toggled on via the
|
|
390
|
+
// API before the entries↔allow sync existed, so the persisted config
|
|
391
|
+
// stabilises after one boot instead of warning forever.
|
|
392
|
+
for (const [entryId, entry] of Object.entries(pluginsConfig.entries)) {
|
|
393
|
+
if (!entry || entry.enabled !== true)
|
|
394
|
+
continue;
|
|
395
|
+
const connectorPackage = CONNECTOR_PLUGINS[entryId];
|
|
396
|
+
const featurePackage = FEATURE_PLUGINS[entryId];
|
|
397
|
+
const pluginName = connectorPackage ?? featurePackage ?? `@elizaos/plugin-${entryId}`;
|
|
398
|
+
addToAllowlist(pluginsConfig.allow, pluginName, entryId, changes, `entries: ${entryId}`);
|
|
399
|
+
}
|
|
388
400
|
// Hooks: webhooks + gmail
|
|
389
401
|
const hooksConfig = updatedConfig.hooks;
|
|
390
402
|
if (hooksConfig && hooksConfig.enabled !== false && hooksConfig.token) {
|
|
@@ -54,6 +54,15 @@ export interface N8nStatusResponse {
|
|
|
54
54
|
* "unknown". Cached for 30s to avoid hammering the cloud on status polls.
|
|
55
55
|
*/
|
|
56
56
|
cloudHealth: N8nCloudHealth;
|
|
57
|
+
/**
|
|
58
|
+
* Diagnostic fields from the local sidecar. Empty on cloud mode. Non-null
|
|
59
|
+
* only when a sidecar has attempted at least one boot — these let the UI
|
|
60
|
+
* show a real error panel instead of "not ready (starting)" forever.
|
|
61
|
+
*/
|
|
62
|
+
errorMessage?: string | null;
|
|
63
|
+
retries?: number;
|
|
64
|
+
/** Last ~40 lines of the n8n child's stdout+stderr. */
|
|
65
|
+
recentOutput?: string[];
|
|
57
66
|
}
|
|
58
67
|
export interface N8nWorkflowNodeLike {
|
|
59
68
|
id?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"n8n-routes.d.ts","sourceRoot":"","sources":["../../../../../src/api/n8n-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,OAAO,EAAE,KAAK,OAAO,EAAkB,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE5E,YAAY,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEnD;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,UAAU,GAAG,SAAS,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,gBAAgB,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,eAAe,CAAC;IAC1B;;;OAGG;IACH,WAAW,EAAE,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"n8n-routes.d.ts","sourceRoot":"","sources":["../../../../../src/api/n8n-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -414,6 +414,13 @@ async function handleStatus(ctx, sidecar, native) {
|
|
|
414
414
|
localEnabled,
|
|
415
415
|
platform: native ? "mobile" : "desktop",
|
|
416
416
|
cloudHealth,
|
|
417
|
+
...(sidecarState
|
|
418
|
+
? {
|
|
419
|
+
errorMessage: sidecarState.errorMessage,
|
|
420
|
+
retries: sidecarState.retries,
|
|
421
|
+
recentOutput: sidecarState.recentOutput,
|
|
422
|
+
}
|
|
423
|
+
: {}),
|
|
417
424
|
};
|
|
418
425
|
// Match previous behavior: 200 via ctx.json.
|
|
419
426
|
ctx.json(ctx.res, payload);
|
|
@@ -43,6 +43,15 @@ export interface N8nSidecarState {
|
|
|
43
43
|
errorMessage: string | null;
|
|
44
44
|
pid: number | null;
|
|
45
45
|
retries: number;
|
|
46
|
+
/**
|
|
47
|
+
* Last ~40 lines of the child's stdout+stderr, most recent last. Surfaced
|
|
48
|
+
* so the UI / `/api/n8n/status` can show the real n8n boot output when
|
|
49
|
+
* the supervisor is stuck in "starting" or has landed in "error". Without
|
|
50
|
+
* this, the sidecar was a black box: we'd see "not ready" forever with
|
|
51
|
+
* no way to tell whether bunx was downloading, n8n was migrating, or the
|
|
52
|
+
* process had crashed on a missing binary.
|
|
53
|
+
*/
|
|
54
|
+
recentOutput: string[];
|
|
46
55
|
}
|
|
47
56
|
export interface N8nSidecarConfig {
|
|
48
57
|
/** Enable local sidecar fallback. Default: true when no cloud session. */
|
|
@@ -57,7 +66,16 @@ export interface N8nSidecarConfig {
|
|
|
57
66
|
binary?: string;
|
|
58
67
|
/** State directory root; owner email/password + sqlite live here. */
|
|
59
68
|
stateDir?: string;
|
|
60
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* Readiness probe timeout in ms. Default 180000 (3 minutes).
|
|
71
|
+
*
|
|
72
|
+
* First-run `bunx n8n@<pinned>` has to download the full n8n tree
|
|
73
|
+
* (~300MB) before it can boot. On a typical home connection that's
|
|
74
|
+
* 30–90s of download plus 15–30s of n8n boot. 60s was not enough —
|
|
75
|
+
* bump to 3 minutes so cold starts land inside the probe window on
|
|
76
|
+
* every desktop platform. Subsequent boots hit the bunx cache and
|
|
77
|
+
* finish in <10s, well inside this budget.
|
|
78
|
+
*/
|
|
61
79
|
readinessTimeoutMs?: number;
|
|
62
80
|
/** Interval between readiness probes. Default 750ms. */
|
|
63
81
|
readinessIntervalMs?: number;
|
|
@@ -112,6 +130,9 @@ export declare class N8nSidecar {
|
|
|
112
130
|
private config;
|
|
113
131
|
private deps;
|
|
114
132
|
private state;
|
|
133
|
+
private static readonly RECENT_OUTPUT_CAP;
|
|
134
|
+
/** Ring buffer of the child's recent stdout/stderr lines (see state.recentOutput). */
|
|
135
|
+
private recentOutput;
|
|
115
136
|
private child;
|
|
116
137
|
/** Cached API key — secret, never logged, never serialized via getState(). */
|
|
117
138
|
private apiKey;
|
|
@@ -161,6 +182,8 @@ export declare class N8nSidecar {
|
|
|
161
182
|
*/
|
|
162
183
|
private runSupervisor;
|
|
163
184
|
private spawnChild;
|
|
185
|
+
/** Push a line into the bounded recent-output buffer and publish. */
|
|
186
|
+
private recordOutput;
|
|
164
187
|
/**
|
|
165
188
|
* Wait for the current child to exit. Returns early if the child is null.
|
|
166
189
|
* Capped at CHILD_EXIT_WAIT_TIMEOUT_MS — beyond that we assume the child
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"n8n-sidecar.d.ts","sourceRoot":"","sources":["../../../../../src/services/n8n-sidecar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAAqB,KAAK,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAY3E,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;AAE1E,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,gBAAgB,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"n8n-sidecar.d.ts","sourceRoot":"","sources":["../../../../../src/services/n8n-sidecar.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,12 +42,22 @@ import os from "node:os";
|
|
|
42
42
|
import path from "node:path";
|
|
43
43
|
import { logger } from "@elizaos/core";
|
|
44
44
|
// ── Implementation ───────────────────────────────────────────────────────────
|
|
45
|
-
//
|
|
46
|
-
|
|
45
|
+
// n8n@1.70.0 declared `engines.node: ">=18.17 <= 22"` — incompatible with
|
|
46
|
+
// Node 24.x which ships with current Homebrew and with the Electrobun runtime.
|
|
47
|
+
// 1.99.0+ widened to ">=20.19 <= 24.x". Pinning the last 1.x release so the
|
|
48
|
+
// DB schema stays on a supported migration path and Node 24 hosts can boot.
|
|
49
|
+
// Validated via `npm view n8n@<v> engines.node`. Bumping below 1.99 will break
|
|
50
|
+
// every desktop whose system Node is 23+.
|
|
51
|
+
const DEFAULT_N8N_VERSION = "1.108.0";
|
|
47
52
|
const DEFAULT_START_PORT = 5678;
|
|
48
53
|
const DEFAULT_HOST = "127.0.0.1";
|
|
49
54
|
const DEFAULT_BINARY = "bunx";
|
|
50
|
-
|
|
55
|
+
// First-run `bunx n8n@<pinned>` downloads ~300MB before n8n can boot. A 60s
|
|
56
|
+
// timeout was too aggressive — cold starts on typical home connections take
|
|
57
|
+
// 60–120s just for the download. Bump to 180s so the first-run path reliably
|
|
58
|
+
// lands inside the probe window on every desktop platform. Warm starts hit
|
|
59
|
+
// the bunx cache and finish well under this budget.
|
|
60
|
+
const DEFAULT_PROBE_TIMEOUT_MS = 180_000;
|
|
51
61
|
const DEFAULT_PROBE_INTERVAL_MS = 750;
|
|
52
62
|
const DEFAULT_MAX_RETRIES = 3;
|
|
53
63
|
const DEFAULT_BACKOFF_BASE_MS = 2_000;
|
|
@@ -218,7 +228,11 @@ export class N8nSidecar {
|
|
|
218
228
|
errorMessage: null,
|
|
219
229
|
pid: null,
|
|
220
230
|
retries: 0,
|
|
231
|
+
recentOutput: [],
|
|
221
232
|
};
|
|
233
|
+
static RECENT_OUTPUT_CAP = 40;
|
|
234
|
+
/** Ring buffer of the child's recent stdout/stderr lines (see state.recentOutput). */
|
|
235
|
+
recentOutput = [];
|
|
222
236
|
child = null;
|
|
223
237
|
/** Cached API key — secret, never logged, never serialized via getState(). */
|
|
224
238
|
apiKey = null;
|
|
@@ -488,31 +502,59 @@ export class N8nSidecar {
|
|
|
488
502
|
});
|
|
489
503
|
this.child = child;
|
|
490
504
|
this.setState({ pid: child.pid ?? null });
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
const line
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
505
|
+
const captureOutput = (chunk, stream) => {
|
|
506
|
+
const text = chunk.toString();
|
|
507
|
+
for (const line of text.split("\n")) {
|
|
508
|
+
const trimmed = line.trimEnd();
|
|
509
|
+
if (!trimmed)
|
|
510
|
+
continue;
|
|
511
|
+
this.recordOutput(`[${stream}] ${trimmed}`);
|
|
512
|
+
// Surface n8n errors at warn so they land in the dev-server log even
|
|
513
|
+
// when debug is off — the sidecar was silent before when n8n died.
|
|
514
|
+
if (stream === "stderr") {
|
|
515
|
+
logger.warn(`[n8n-sidecar:stderr] ${trimmed}`);
|
|
516
|
+
}
|
|
517
|
+
else {
|
|
518
|
+
logger.debug(`[n8n-sidecar:stdout] ${trimmed}`);
|
|
519
|
+
}
|
|
520
|
+
try {
|
|
521
|
+
this.config.onLog?.(trimmed, stream);
|
|
522
|
+
}
|
|
523
|
+
catch {
|
|
524
|
+
/* ignore */
|
|
525
|
+
}
|
|
510
526
|
}
|
|
527
|
+
};
|
|
528
|
+
child.stdout?.on("data", (buf) => captureOutput(buf, "stdout"));
|
|
529
|
+
child.stderr?.on("data", (buf) => captureOutput(buf, "stderr"));
|
|
530
|
+
// Pre-emptively reap the zombie: without an exit listener attached from
|
|
531
|
+
// the moment we spawn, a child that dies while we're in probeReadiness
|
|
532
|
+
// can linger as <defunct> because Node only waitpid()'s when something
|
|
533
|
+
// is listening. This handler is unconditional — waitForChildExit attaches
|
|
534
|
+
// its own once('exit') for supervisor-level signalling.
|
|
535
|
+
child.on("exit", (code, signal) => {
|
|
536
|
+
const summary = code !== null
|
|
537
|
+
? `exit code ${code}`
|
|
538
|
+
: signal !== null
|
|
539
|
+
? `signal ${signal}`
|
|
540
|
+
: "exit (no code/signal)";
|
|
541
|
+
this.recordOutput(`[exit] n8n child ${summary}`);
|
|
511
542
|
});
|
|
512
543
|
child.on("error", (err) => {
|
|
544
|
+
this.recordOutput(`[error] spawn error: ${err.message}`);
|
|
513
545
|
logger.warn(`[n8n-sidecar] spawn error: ${err.message}`);
|
|
514
546
|
});
|
|
515
547
|
}
|
|
548
|
+
/** Push a line into the bounded recent-output buffer and publish. */
|
|
549
|
+
recordOutput(line) {
|
|
550
|
+
this.recentOutput.push(line);
|
|
551
|
+
if (this.recentOutput.length > N8nSidecar.RECENT_OUTPUT_CAP) {
|
|
552
|
+
this.recentOutput.splice(0, this.recentOutput.length - N8nSidecar.RECENT_OUTPUT_CAP);
|
|
553
|
+
}
|
|
554
|
+
this.state = { ...this.state, recentOutput: [...this.recentOutput] };
|
|
555
|
+
// Don't re-emit on every line — that would spam listeners. The buffer
|
|
556
|
+
// is snapshotted on every setState() call and served by getState().
|
|
557
|
+
}
|
|
516
558
|
/**
|
|
517
559
|
* Wait for the current child to exit. Returns early if the child is null.
|
|
518
560
|
* Capped at CHILD_EXIT_WAIT_TIMEOUT_MS — beyond that we assume the child
|
|
@@ -587,6 +629,15 @@ export class N8nSidecar {
|
|
|
587
629
|
while (Date.now() < deadline) {
|
|
588
630
|
if (this.stopping)
|
|
589
631
|
return false;
|
|
632
|
+
// If the child died mid-probe, keep polling is pointless — the port
|
|
633
|
+
// will never open. Fail fast so the supervisor surfaces the error and
|
|
634
|
+
// kicks off the next retry (with captured stderr in recentOutput).
|
|
635
|
+
// Uses `typeof === "number"` rather than `!== null` so this tolerates
|
|
636
|
+
// test fakes whose exitCode is undefined while still running.
|
|
637
|
+
const child = this.child;
|
|
638
|
+
if (child && typeof child.exitCode === "number") {
|
|
639
|
+
throw new Error(`n8n child exited with code ${child.exitCode} before readiness probe succeeded`);
|
|
640
|
+
}
|
|
590
641
|
try {
|
|
591
642
|
const res = await this.deps.fetch(url, {
|
|
592
643
|
method: "GET",
|