@runcore-sh/runcore 0.1.9 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/brain-template/agents/cooldowns.json +1 -0
- package/brain-template/agents/locks.json +1 -0
- package/brain-template/agents/module.json +15 -0
- package/brain-template/agents/workflows/examples/conditional-deploy.json +124 -0
- package/brain-template/agents/workflows/examples/parallel-analysis.json +81 -0
- package/brain-template/agents/workflows/examples/research-and-write.json +71 -0
- package/brain-template/agents/workflows/schema.json +236 -0
- package/brain-template/contacts/README.md +22 -0
- package/brain-template/contacts/module.json +19 -0
- package/brain-template/content/CONTENT.md +36 -0
- package/brain-template/content/templates/blog.md +26 -0
- package/brain-template/knowledge/README.md +11 -0
- package/brain-template/library/README.md +29 -0
- package/brain-template/library/module.json +29 -0
- package/brain-template/memory/README.md +17 -0
- package/brain-template/metrics/module.json +7 -0
- package/brain-template/operations/OPERATIONS.md +28 -0
- package/brain-template/ops/module.json +8 -0
- package/brain-template/registry.md +566 -0
- package/brain-template/rest_api-integration.md +522 -0
- package/brain-template/scheduling/README.md +23 -0
- package/brain-template/scheduling/module.json +16 -0
- package/brain-template/settings.json +60 -0
- package/brain-template/skills/debugging.yml +152 -0
- package/brain-template/skills/file-editing.yml +148 -0
- package/brain-template/skills/git-operations.yml +131 -0
- package/brain-template/skills/schema.yml +286 -0
- package/brain-template/skills/testing.yml +170 -0
- package/brain-template/skills/web-scraping.yml +178 -0
- package/brain-template/templates/instances.yaml +70 -0
- package/brain-template/templates/spawn-policy.yaml +36 -0
- package/brain-template/templates/vault.policy.yaml +37 -0
- package/brain-template/training/module.json +14 -0
- package/dictionary.json +38 -0
- package/dist/access/manifest.js +2 -2
- package/dist/access/manifest.js.map +1 -1
- package/dist/activity/log.d.ts.map +1 -1
- package/dist/activity/log.js +2 -1
- package/dist/activity/log.js.map +1 -1
- package/dist/agents/cooldown.d.ts.map +1 -1
- package/dist/agents/cooldown.js +2 -1
- package/dist/agents/cooldown.js.map +1 -1
- package/dist/agents/governance.js +16 -16
- package/dist/agents/governance.js.map +1 -1
- package/dist/agents/heartbeat.d.ts.map +1 -1
- package/dist/agents/heartbeat.js +3 -2
- package/dist/agents/heartbeat.js.map +1 -1
- package/dist/agents/locks.js +2 -2
- package/dist/agents/locks.js.map +1 -1
- package/dist/agents/memory.d.ts.map +1 -1
- package/dist/agents/memory.js +2 -1
- package/dist/agents/memory.js.map +1 -1
- package/dist/agents/reflection.d.ts.map +1 -1
- package/dist/agents/reflection.js +25 -24
- package/dist/agents/reflection.js.map +1 -1
- package/dist/agents/runtime/config.d.ts.map +1 -1
- package/dist/agents/runtime/config.js +2 -1
- package/dist/agents/runtime/config.js.map +1 -1
- package/dist/agents/spawn-policy.js +2 -2
- package/dist/agents/spawn-policy.js.map +1 -1
- package/dist/agents/spawn.d.ts.map +1 -1
- package/dist/agents/spawn.js +54 -53
- package/dist/agents/spawn.js.map +1 -1
- package/dist/agents/store.d.ts.map +1 -1
- package/dist/agents/store.js +20 -20
- package/dist/agents/store.js.map +1 -1
- package/dist/agents/workflow.d.ts.map +1 -1
- package/dist/agents/workflow.js +2 -1
- package/dist/agents/workflow.js.map +1 -1
- package/dist/auth/identity.d.ts.map +1 -1
- package/dist/auth/identity.js +2 -1
- package/dist/auth/identity.js.map +1 -1
- package/dist/browser/sessions.d.ts.map +1 -1
- package/dist/browser/sessions.js +2 -1
- package/dist/browser/sessions.js.map +1 -1
- package/dist/cli.js +274 -53
- package/dist/cli.js.map +1 -1
- package/dist/distiller.js +2 -2
- package/dist/distiller.js.map +1 -1
- package/dist/files/deep-index.d.ts +59 -0
- package/dist/files/deep-index.d.ts.map +1 -0
- package/dist/files/deep-index.js +337 -0
- package/dist/files/deep-index.js.map +1 -0
- package/dist/files/import.d.ts +44 -0
- package/dist/files/import.d.ts.map +1 -0
- package/dist/files/import.js +213 -0
- package/dist/files/import.js.map +1 -0
- package/dist/files/index-local.d.ts +37 -0
- package/dist/files/index-local.d.ts.map +1 -0
- package/dist/files/index-local.js +198 -0
- package/dist/files/index-local.js.map +1 -0
- package/dist/goals/loop.js +31 -31
- package/dist/goals/loop.js.map +1 -1
- package/dist/goals/notifications.d.ts.map +1 -1
- package/dist/goals/notifications.js +2 -1
- package/dist/goals/notifications.js.map +1 -1
- package/dist/instance.d.ts.map +1 -1
- package/dist/instance.js +2 -1
- package/dist/instance.js.map +1 -1
- package/dist/lib/audit.js +1 -1
- package/dist/lib/audit.js.map +1 -1
- package/dist/lib/locked.js +2 -2
- package/dist/lib/locked.js.map +1 -1
- package/dist/lib/paths.d.ts +11 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +13 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/mcp-server.js +1 -1
- package/dist/mcp-server.js.map +1 -1
- package/dist/memory/visual.d.ts.map +1 -1
- package/dist/memory/visual.js +2 -1
- package/dist/memory/visual.js.map +1 -1
- package/dist/metrics/system.d.ts.map +1 -1
- package/dist/metrics/system.js +2 -1
- package/dist/metrics/system.js.map +1 -1
- package/dist/nerve/push.js +2 -2
- package/dist/nerve/push.js.map +1 -1
- package/dist/nerve/state.d.ts +1 -1
- package/dist/nerve/state.d.ts.map +1 -1
- package/dist/nerve/state.js +3 -3
- package/dist/nerve/state.js.map +1 -1
- package/dist/openloop/scanner.d.ts.map +1 -1
- package/dist/openloop/scanner.js +11 -10
- package/dist/openloop/scanner.js.map +1 -1
- package/dist/openloop/store.d.ts.map +1 -1
- package/dist/openloop/store.js +3 -2
- package/dist/openloop/store.js.map +1 -1
- package/dist/posture/engine.d.ts +41 -0
- package/dist/posture/engine.d.ts.map +1 -0
- package/dist/posture/engine.js +217 -0
- package/dist/posture/engine.js.map +1 -0
- package/dist/posture/index.d.ts +11 -0
- package/dist/posture/index.d.ts.map +1 -0
- package/dist/posture/index.js +10 -0
- package/dist/posture/index.js.map +1 -0
- package/dist/posture/middleware.d.ts +30 -0
- package/dist/posture/middleware.d.ts.map +1 -0
- package/dist/posture/middleware.js +92 -0
- package/dist/posture/middleware.js.map +1 -0
- package/dist/posture/types.d.ts +61 -0
- package/dist/posture/types.d.ts.map +1 -0
- package/dist/posture/types.js +48 -0
- package/dist/posture/types.js.map +1 -0
- package/dist/pulse/activation-log.js +1 -2
- package/dist/pulse/activation-log.js.map +1 -1
- package/dist/pulse/pressure.d.ts.map +1 -1
- package/dist/pulse/pressure.js +2 -1
- package/dist/pulse/pressure.js.map +1 -1
- package/dist/queue/grooming.d.ts.map +1 -1
- package/dist/queue/grooming.js +2 -2
- package/dist/queue/grooming.js.map +1 -1
- package/dist/resend/inbox.d.ts.map +1 -1
- package/dist/resend/inbox.js +2 -1
- package/dist/resend/inbox.js.map +1 -1
- package/dist/search/brain-docs.js +1 -2
- package/dist/search/brain-docs.js.map +1 -1
- package/dist/server.d.ts +3 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +221 -75
- package/dist/server.js.map +1 -1
- package/dist/services/backup.js +1 -1
- package/dist/services/backup.js.map +1 -1
- package/dist/services/morningBriefing.d.ts.map +1 -1
- package/dist/services/morningBriefing.js +46 -45
- package/dist/services/morningBriefing.js.map +1 -1
- package/dist/services/traceInsights.js +31 -31
- package/dist/services/traceInsights.js.map +1 -1
- package/dist/services/training.js +1 -1
- package/dist/services/training.js.map +1 -1
- package/dist/services/whatsapp.js +1 -1
- package/dist/services/whatsapp.js.map +1 -1
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +2 -1
- package/dist/sessions/store.js.map +1 -1
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +2 -1
- package/dist/settings.js.map +1 -1
- package/dist/tier/bond.d.ts +51 -0
- package/dist/tier/bond.d.ts.map +1 -0
- package/dist/tier/bond.js +154 -0
- package/dist/tier/bond.js.map +1 -0
- package/dist/tier/freeze.d.ts +21 -0
- package/dist/tier/freeze.d.ts.map +1 -0
- package/dist/tier/freeze.js +73 -0
- package/dist/tier/freeze.js.map +1 -0
- package/dist/tier/gate.d.ts +11 -0
- package/dist/tier/gate.d.ts.map +1 -0
- package/dist/tier/gate.js +25 -0
- package/dist/tier/gate.js.map +1 -0
- package/dist/tier/heartbeat.d.ts +22 -0
- package/dist/tier/heartbeat.d.ts.map +1 -0
- package/dist/tier/heartbeat.js +128 -0
- package/dist/tier/heartbeat.js.map +1 -0
- package/dist/tier/token.d.ts +22 -0
- package/dist/tier/token.d.ts.map +1 -0
- package/dist/tier/token.js +100 -0
- package/dist/tier/token.js.map +1 -0
- package/dist/tier/types.d.ts +44 -0
- package/dist/tier/types.d.ts.map +1 -0
- package/dist/tier/types.js +61 -0
- package/dist/tier/types.js.map +1 -0
- package/dist/vault/personal.d.ts.map +1 -1
- package/dist/vault/personal.js +2 -1
- package/dist/vault/personal.js.map +1 -1
- package/dist/vault/policy.js +2 -2
- package/dist/vault/policy.js.map +1 -1
- package/dist/vault/store.d.ts.map +1 -1
- package/dist/vault/store.js +2 -1
- package/dist/vault/store.js.map +1 -1
- package/dist/vault/transfer.d.ts.map +1 -1
- package/dist/vault/transfer.js +4 -3
- package/dist/vault/transfer.js.map +1 -1
- package/package.json +5 -2
- package/public/pulse.html +592 -0
package/dist/queue/grooming.js
CHANGED
|
@@ -12,13 +12,13 @@ import { logActivity } from "../activity/log.js";
|
|
|
12
12
|
import { pushNotification } from "../goals/notifications.js";
|
|
13
13
|
import { createLogger } from "../utils/logger.js";
|
|
14
14
|
import { onGroomingComplete } from "../services/training.js";
|
|
15
|
-
import {
|
|
15
|
+
import { BRAIN_DIR } from "../lib/paths.js";
|
|
16
16
|
const log = createLogger("queue");
|
|
17
17
|
const DEFAULT_GROOM_INTERVAL_MS = 5 * 60 * 1000; // 5 minutes
|
|
18
18
|
const COMPACT_THRESHOLD = 200;
|
|
19
19
|
/** Max backlog items to promote per grooming cycle (prevents flood). */
|
|
20
20
|
const MAX_PROMOTIONS_PER_CYCLE = 3;
|
|
21
|
-
const GROOM_STATE_FILE = join(
|
|
21
|
+
const GROOM_STATE_FILE = join(BRAIN_DIR, "operations", ".grooming-last-nudge");
|
|
22
22
|
let timer = null;
|
|
23
23
|
let activeStore = null;
|
|
24
24
|
// Dedup: only log/nudge when the set of findings changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grooming.js","sourceRoot":"","sources":["../../src/queue/grooming.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"grooming.js","sourceRoot":"","sources":["../../src/queue/grooming.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/resend/inbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/resend/inbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAgGH;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAgDtD;AAmED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,CAuB7D"}
|
package/dist/resend/inbox.js
CHANGED
|
@@ -14,6 +14,7 @@ import { join } from "node:path";
|
|
|
14
14
|
import { logActivity } from "../activity/log.js";
|
|
15
15
|
import { createLogger } from "../utils/logger.js";
|
|
16
16
|
import { processInboundEmail, sendResendReply } from "./webhooks.js";
|
|
17
|
+
import { BRAIN_DIR } from "../lib/paths.js";
|
|
17
18
|
const log = createLogger("resend.inbox");
|
|
18
19
|
/** Minimum interval between inbox checks (ms). */
|
|
19
20
|
const CHECK_DEBOUNCE_MS = 2 * 60 * 1000; // 2 minutes
|
|
@@ -28,7 +29,7 @@ async function loadAgentRegistry() {
|
|
|
28
29
|
if (agentRegistryCache)
|
|
29
30
|
return agentRegistryCache;
|
|
30
31
|
try {
|
|
31
|
-
const raw = await readFile(join(
|
|
32
|
+
const raw = await readFile(join(BRAIN_DIR, "identity", "email-agents.json"), "utf-8");
|
|
32
33
|
agentRegistryCache = JSON.parse(raw);
|
|
33
34
|
return agentRegistryCache;
|
|
34
35
|
}
|
package/dist/resend/inbox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/resend/inbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/resend/inbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,7 @@
|
|
|
9
9
|
import { readdir } from "node:fs/promises";
|
|
10
10
|
import { join, basename } from "node:path";
|
|
11
11
|
import { readBrainFile } from "../lib/brain-io.js";
|
|
12
|
-
import {
|
|
13
|
-
const BRAIN_DIR = resolveEnv("BRAIN_DIR") ?? join(process.cwd(), "brain");
|
|
12
|
+
import { BRAIN_DIR } from "../lib/paths.js";
|
|
14
13
|
/** Directories to scan for documents the user might reference by description. */
|
|
15
14
|
const DOC_DIRS = [
|
|
16
15
|
join(BRAIN_DIR, "content", "drafts"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brain-docs.js","sourceRoot":"","sources":["../../src/search/brain-docs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"brain-docs.js","sourceRoot":"","sources":["../../src/search/brain-docs.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
* Hono app: serves static UI, handles pairing/auth, streams chat via Ollama (local) or OpenRouter (cloud).
|
|
4
4
|
*/
|
|
5
5
|
export declare function getStartupToken(): string | null;
|
|
6
|
-
declare function start(
|
|
6
|
+
declare function start(opts?: {
|
|
7
|
+
tier?: import("./tier/types.js").TierName;
|
|
8
|
+
}): Promise<void>;
|
|
7
9
|
/** Returns the port the server is actually listening on (resolves port 0). */
|
|
8
10
|
export declare function getActualPort(): number;
|
|
9
11
|
export { start };
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuTH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuTH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AA2gKD,iBAAe,KAAK,CAAC,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,iBAAiB,EAAE,QAAQ,CAAA;CAAE,iBAghBxE;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
package/dist/server.js
CHANGED
|
@@ -135,7 +135,7 @@ function pickStreamFn() {
|
|
|
135
135
|
const PORT = parseInt(process.env.CORE_PORT ?? resolveEnv("PORT") ?? "0", 10);
|
|
136
136
|
let actualPort = PORT;
|
|
137
137
|
const SIDECAR_PORT = resolveEnv("SEARCH_PORT") ?? "3578";
|
|
138
|
-
|
|
138
|
+
import { BRAIN_DIR } from "./lib/paths.js";
|
|
139
139
|
const SKILLS_DIR = join(process.cwd(), "skills");
|
|
140
140
|
const MEMORY_DIR = join(BRAIN_DIR, "memory");
|
|
141
141
|
const PERSONALITY_PATH = join(BRAIN_DIR, "identity", "personality.md");
|
|
@@ -406,6 +406,11 @@ app.use("/api/*", async (c, next) => {
|
|
|
406
406
|
}
|
|
407
407
|
return generalLimiter(c, next);
|
|
408
408
|
});
|
|
409
|
+
// --- Posture middleware (intent accumulation + surface gating) ---
|
|
410
|
+
// Track all API interactions for posture engine
|
|
411
|
+
app.use("/api/*", postureTracker());
|
|
412
|
+
// Attach posture surface header to all responses
|
|
413
|
+
app.use("/api/*", postureHeader());
|
|
409
414
|
// --- Webhook initialization (batch registration + config + admin routes) ---
|
|
410
415
|
const webhookInitStart = performance.now();
|
|
411
416
|
// Phase 1: Batch-register all webhook providers (deferred from module imports to avoid
|
|
@@ -474,7 +479,7 @@ app.post("/api/pair", async (c) => {
|
|
|
474
479
|
// Save agent name to settings
|
|
475
480
|
if (agentName) {
|
|
476
481
|
try {
|
|
477
|
-
const settingsPath = join(
|
|
482
|
+
const settingsPath = join(BRAIN_DIR, "settings.json");
|
|
478
483
|
const raw = await readFile(settingsPath, "utf-8");
|
|
479
484
|
const settings = JSON.parse(raw);
|
|
480
485
|
settings.agentName = agentName.trim();
|
|
@@ -2438,6 +2443,10 @@ function issuesToCardPayload(issues) {
|
|
|
2438
2443
|
};
|
|
2439
2444
|
});
|
|
2440
2445
|
}
|
|
2446
|
+
// Board API — gated to board posture
|
|
2447
|
+
app.use("/api/board/*", requireSurface("pages"));
|
|
2448
|
+
app.use("/api/ops/*", requireSurface("pages"));
|
|
2449
|
+
app.use("/api/agents/*", requireSurface("agents"));
|
|
2441
2450
|
// Board status: is a provider configured, and who is the user?
|
|
2442
2451
|
app.get("/api/board/status", async (c) => {
|
|
2443
2452
|
const board = getBoardProvider();
|
|
@@ -3213,7 +3222,7 @@ app.get("/api/help/context", async (c) => {
|
|
|
3213
3222
|
const last20 = activities.slice(-20).reverse();
|
|
3214
3223
|
let changelog = "";
|
|
3215
3224
|
try {
|
|
3216
|
-
changelog = await readBrainFile(join(
|
|
3225
|
+
changelog = await readBrainFile(join(BRAIN_DIR, "operations", "changelog.md"));
|
|
3217
3226
|
}
|
|
3218
3227
|
catch {
|
|
3219
3228
|
// changelog file missing — skip
|
|
@@ -3244,33 +3253,29 @@ app.get("/api/help/context", async (c) => {
|
|
|
3244
3253
|
changelog,
|
|
3245
3254
|
});
|
|
3246
3255
|
});
|
|
3247
|
-
// --- Ops dashboard routes (
|
|
3248
|
-
//
|
|
3249
|
-
app.get("/observatory", async (c) => {
|
|
3256
|
+
// --- Ops dashboard routes (posture-gated: board level) ---
|
|
3257
|
+
// Board-level pages — only assembled when user has shown intent for full visibility
|
|
3258
|
+
app.get("/observatory", requireSurface("pages"), async (c) => {
|
|
3250
3259
|
const html = await serveHtmlTemplate(join(PKG_ROOT, "public", "observatory.html"));
|
|
3251
3260
|
return c.html(html);
|
|
3252
3261
|
});
|
|
3253
|
-
|
|
3254
|
-
app.get("/ops", async (c) => {
|
|
3262
|
+
app.get("/ops", requireSurface("pages"), async (c) => {
|
|
3255
3263
|
const html = await serveHtmlTemplate(join(PKG_ROOT, "public", "ops.html"));
|
|
3256
3264
|
return c.html(html);
|
|
3257
3265
|
});
|
|
3258
|
-
|
|
3259
|
-
app.get("/board", async (c) => {
|
|
3266
|
+
app.get("/board", requireSurface("pages"), async (c) => {
|
|
3260
3267
|
const html = await serveHtmlTemplate(join(PKG_ROOT, "public", "board.html"));
|
|
3261
3268
|
return c.html(html);
|
|
3262
3269
|
});
|
|
3263
|
-
|
|
3264
|
-
app.get("/library", async (c) => {
|
|
3270
|
+
app.get("/library", requireSurface("pages"), async (c) => {
|
|
3265
3271
|
const html = await serveHtmlTemplate(join(PKG_ROOT, "public", "library.html"));
|
|
3266
3272
|
return c.html(html);
|
|
3267
3273
|
});
|
|
3268
|
-
|
|
3269
|
-
app.get("/browser", async (c) => {
|
|
3274
|
+
app.get("/browser", requireSurface("pages"), async (c) => {
|
|
3270
3275
|
const html = await serveHtmlTemplate(join(PKG_ROOT, "public", "browser.html"));
|
|
3271
3276
|
return c.html(html);
|
|
3272
3277
|
});
|
|
3273
|
-
//
|
|
3278
|
+
// Registry is always available — it's the entry point
|
|
3274
3279
|
app.get("/registry", async (c) => {
|
|
3275
3280
|
const html = await serveHtmlTemplate(join(PKG_ROOT, "public", "registry.html"));
|
|
3276
3281
|
return c.html(html);
|
|
@@ -3283,7 +3288,7 @@ app.get("/roadmap", async (c) => {
|
|
|
3283
3288
|
// Roadmap API — parse brain/operations/roadmap.yaml and return as JSON
|
|
3284
3289
|
app.get("/api/roadmap", async (c) => {
|
|
3285
3290
|
try {
|
|
3286
|
-
const raw = await readBrainFile(join(
|
|
3291
|
+
const raw = await readBrainFile(join(BRAIN_DIR, "operations", "roadmap.yaml"));
|
|
3287
3292
|
const parsed = parseRoadmapYaml(raw);
|
|
3288
3293
|
return c.json(parsed);
|
|
3289
3294
|
}
|
|
@@ -3385,28 +3390,28 @@ app.post("/api/share", async (c) => {
|
|
|
3385
3390
|
}
|
|
3386
3391
|
const { randomBytes } = await import("node:crypto");
|
|
3387
3392
|
const shareId = `share_${Date.now()}_${randomBytes(4).toString("hex")}`;
|
|
3388
|
-
const emailHtml = `
|
|
3389
|
-
<div style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; max-width: 560px; margin: 0 auto; padding: 32px 24px; color: #e4e4e7; background: #0e0e10;">
|
|
3390
|
-
<h1 style="font-size: 20px; font-weight: 600; margin: 0 0 16px;">You've been invited to try Core</h1>
|
|
3391
|
-
<p style="color: #8b8b94; font-size: 14px; line-height: 1.6; margin: 0 0 20px;">
|
|
3392
|
-
Core is a file-based personal operating system for an AI agent — your own local brain that learns, remembers, and works for you.
|
|
3393
|
-
</p>
|
|
3394
|
-
${note ? `<div style="background: #18181b; border: 1px solid #2e2e33; border-radius: 8px; padding: 14px 16px; margin: 0 0 20px; font-size: 13px; color: #e4e4e7;"><strong>Note from sender:</strong> ${note.replace(/</g, "<").replace(/>/g, ">")}</div>` : ""}
|
|
3395
|
-
<h2 style="font-size: 14px; font-weight: 600; margin: 0 0 10px;">Install</h2>
|
|
3396
|
-
<pre style="background: #18181b; border: 1px solid #2e2e33; border-radius: 8px; padding: 14px 16px; font-size: 13px; color: #a78bfa; overflow-x: auto; margin: 0 0 20px;">
|
|
3397
|
-
# Clone the repo
|
|
3398
|
-
git clone https://github.com/yourusername/core.git
|
|
3399
|
-
cd core && npm install && npm run build
|
|
3400
|
-
npm run chat</pre>
|
|
3401
|
-
<h2 style="font-size: 14px; font-weight: 600; margin: 0 0 10px;">Your Connection Key</h2>
|
|
3402
|
-
<p style="color: #8b8b94; font-size: 13px; line-height: 1.5; margin: 0 0 8px;">
|
|
3403
|
-
Paste this key during first-run setup to connect with the person who invited you:
|
|
3404
|
-
</p>
|
|
3405
|
-
<pre style="background: #18181b; border: 1px solid #2e2e33; border-radius: 8px; padding: 14px 16px; font-size: 14px; color: #22c55e; letter-spacing: 0.5px; margin: 0 0 20px;">${shareId}</pre>
|
|
3406
|
-
<p style="color: #8b8b94; font-size: 12px; margin: 0;">
|
|
3407
|
-
This creates a connection record — it does <strong>not</strong> enable mesh/hive-mind until you explicitly approve it in network settings.
|
|
3408
|
-
</p>
|
|
3409
|
-
</div>
|
|
3393
|
+
const emailHtml = `
|
|
3394
|
+
<div style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; max-width: 560px; margin: 0 auto; padding: 32px 24px; color: #e4e4e7; background: #0e0e10;">
|
|
3395
|
+
<h1 style="font-size: 20px; font-weight: 600; margin: 0 0 16px;">You've been invited to try Core</h1>
|
|
3396
|
+
<p style="color: #8b8b94; font-size: 14px; line-height: 1.6; margin: 0 0 20px;">
|
|
3397
|
+
Core is a file-based personal operating system for an AI agent — your own local brain that learns, remembers, and works for you.
|
|
3398
|
+
</p>
|
|
3399
|
+
${note ? `<div style="background: #18181b; border: 1px solid #2e2e33; border-radius: 8px; padding: 14px 16px; margin: 0 0 20px; font-size: 13px; color: #e4e4e7;"><strong>Note from sender:</strong> ${note.replace(/</g, "<").replace(/>/g, ">")}</div>` : ""}
|
|
3400
|
+
<h2 style="font-size: 14px; font-weight: 600; margin: 0 0 10px;">Install</h2>
|
|
3401
|
+
<pre style="background: #18181b; border: 1px solid #2e2e33; border-radius: 8px; padding: 14px 16px; font-size: 13px; color: #a78bfa; overflow-x: auto; margin: 0 0 20px;">
|
|
3402
|
+
# Clone the repo
|
|
3403
|
+
git clone https://github.com/yourusername/core.git
|
|
3404
|
+
cd core && npm install && npm run build
|
|
3405
|
+
npm run chat</pre>
|
|
3406
|
+
<h2 style="font-size: 14px; font-weight: 600; margin: 0 0 10px;">Your Connection Key</h2>
|
|
3407
|
+
<p style="color: #8b8b94; font-size: 13px; line-height: 1.5; margin: 0 0 8px;">
|
|
3408
|
+
Paste this key during first-run setup to connect with the person who invited you:
|
|
3409
|
+
</p>
|
|
3410
|
+
<pre style="background: #18181b; border: 1px solid #2e2e33; border-radius: 8px; padding: 14px 16px; font-size: 14px; color: #22c55e; letter-spacing: 0.5px; margin: 0 0 20px;">${shareId}</pre>
|
|
3411
|
+
<p style="color: #8b8b94; font-size: 12px; margin: 0;">
|
|
3412
|
+
This creates a connection record — it does <strong>not</strong> enable mesh/hive-mind until you explicitly approve it in network settings.
|
|
3413
|
+
</p>
|
|
3414
|
+
</div>
|
|
3410
3415
|
`.trim();
|
|
3411
3416
|
try {
|
|
3412
3417
|
const res = await fetch("https://api.resend.com/emails", {
|
|
@@ -3435,7 +3440,7 @@ npm run chat</pre>
|
|
|
3435
3440
|
sharedAt: new Date().toISOString(),
|
|
3436
3441
|
status: "sent",
|
|
3437
3442
|
};
|
|
3438
|
-
const sharesPath = join(
|
|
3443
|
+
const sharesPath = join(BRAIN_DIR, "ops", "shares.jsonl");
|
|
3439
3444
|
await appendBrainLine(sharesPath, JSON.stringify(record));
|
|
3440
3445
|
log.info("Share invite sent", { email, shareId });
|
|
3441
3446
|
return c.json({ ok: true, shareId });
|
|
@@ -3689,6 +3694,30 @@ app.delete("/api/ops/projects/:id", async (c) => {
|
|
|
3689
3694
|
return c.json({ error: "Project not found" }, 404);
|
|
3690
3695
|
return c.json({ ok: true });
|
|
3691
3696
|
});
|
|
3697
|
+
// --- Posture API (UI surface assembly) ---
|
|
3698
|
+
app.get("/api/posture", (c) => {
|
|
3699
|
+
return c.json({
|
|
3700
|
+
posture: getPosture(),
|
|
3701
|
+
surface: getSurface(),
|
|
3702
|
+
state: getPostureState(),
|
|
3703
|
+
});
|
|
3704
|
+
});
|
|
3705
|
+
app.put("/api/posture", async (c) => {
|
|
3706
|
+
const body = await c.req.json();
|
|
3707
|
+
if (body.posture && ["silent", "pulse", "board"].includes(body.posture)) {
|
|
3708
|
+
if (body.pinned !== false) {
|
|
3709
|
+
pinPosture(body.posture);
|
|
3710
|
+
}
|
|
3711
|
+
else {
|
|
3712
|
+
pinPosture(body.posture);
|
|
3713
|
+
unpinPosture();
|
|
3714
|
+
}
|
|
3715
|
+
}
|
|
3716
|
+
else if (body.pinned === false) {
|
|
3717
|
+
unpinPosture();
|
|
3718
|
+
}
|
|
3719
|
+
return c.json({ posture: getPosture(), surface: getSurface(), state: getPostureState() });
|
|
3720
|
+
});
|
|
3692
3721
|
// --- Pulse (nervous system) endpoint ---
|
|
3693
3722
|
app.get("/api/pulse/status", (c) => {
|
|
3694
3723
|
const integrator = getPressureIntegrator();
|
|
@@ -3707,6 +3736,8 @@ app.get("/api/pulse/history", (c) => {
|
|
|
3707
3736
|
// --- Nerve API (three-dot goo) ---
|
|
3708
3737
|
import { getNerveState } from "./nerve/state.js";
|
|
3709
3738
|
import { initPush, getVapidPublicKey, addSubscription, checkAndNotify, startPushMonitor, stopPushMonitor } from "./nerve/push.js";
|
|
3739
|
+
import { loadPosture, startDecayTimer, getPosture, getPostureState, getSurface, pinPosture, unpinPosture, } from "./posture/engine.js";
|
|
3740
|
+
import { postureTracker, requireSurface, postureHeader } from "./posture/middleware.js";
|
|
3710
3741
|
// State endpoint — three dots
|
|
3711
3742
|
app.get("/api/nerve/state", async (c) => {
|
|
3712
3743
|
const state = await getNerveState();
|
|
@@ -4368,7 +4399,7 @@ app.post("/api/chat", async (c) => {
|
|
|
4368
4399
|
const changelogKeywords = /\b(what'?s new|changelog|recent changes|what changed|updates?|release notes|new features?|capabilities)\b/i;
|
|
4369
4400
|
if (changelogKeywords.test(chatMessage)) {
|
|
4370
4401
|
try {
|
|
4371
|
-
const changelogPath = join(
|
|
4402
|
+
const changelogPath = join(BRAIN_DIR, "operations", "changelog.md");
|
|
4372
4403
|
const changelogContent = await readBrainFile(changelogPath);
|
|
4373
4404
|
const changelogMsg = {
|
|
4374
4405
|
role: "system",
|
|
@@ -4781,8 +4812,111 @@ app.post("/api/chat", async (c) => {
|
|
|
4781
4812
|
});
|
|
4782
4813
|
});
|
|
4783
4814
|
});
|
|
4815
|
+
// --- Freeze endpoint (operator clicks freeze link) ---
|
|
4816
|
+
app.post("/api/freeze", async (c) => {
|
|
4817
|
+
const body = await c.req.json().catch(() => null);
|
|
4818
|
+
if (!body?.signal)
|
|
4819
|
+
return c.json({ error: "Missing freeze signal" }, 400);
|
|
4820
|
+
const { freeze, isFrozen } = await import("./tier/freeze.js");
|
|
4821
|
+
if (isFrozen())
|
|
4822
|
+
return c.json({ error: "Already frozen" }, 409);
|
|
4823
|
+
await freeze(body.signal, process.cwd());
|
|
4824
|
+
return c.json({ status: "frozen", message: "All agents dormant." });
|
|
4825
|
+
});
|
|
4826
|
+
app.post("/api/thaw", async (c) => {
|
|
4827
|
+
const { thaw } = await import("./tier/freeze.js");
|
|
4828
|
+
await thaw(process.cwd());
|
|
4829
|
+
return c.json({ status: "thawed", message: "Operations resuming." });
|
|
4830
|
+
});
|
|
4831
|
+
app.get("/api/freeze/status", async (c) => {
|
|
4832
|
+
const { isFrozen, getFreezeSignal } = await import("./tier/freeze.js");
|
|
4833
|
+
return c.json({ frozen: isFrozen(), signal: getFreezeSignal() });
|
|
4834
|
+
});
|
|
4835
|
+
// --- Brain import API ---
|
|
4836
|
+
app.post("/api/import/folder", async (c) => {
|
|
4837
|
+
const body = await c.req.json();
|
|
4838
|
+
if (!body.paths || !Array.isArray(body.paths) || body.paths.length === 0) {
|
|
4839
|
+
return c.json({ error: "paths[] required" }, 400);
|
|
4840
|
+
}
|
|
4841
|
+
const { resolve } = await import("node:path");
|
|
4842
|
+
const { importToBrain } = await import("./files/import.js");
|
|
4843
|
+
const result = await importToBrain({
|
|
4844
|
+
sources: body.paths.map(p => resolve(p)),
|
|
4845
|
+
brainRoot: process.cwd(),
|
|
4846
|
+
dryRun: body.dryRun ?? false,
|
|
4847
|
+
});
|
|
4848
|
+
// After import: fast pass → deep pass (both background, chained)
|
|
4849
|
+
if (!body.dryRun && result.imported > 0) {
|
|
4850
|
+
import("./files/index-local.js").then(({ indexImportedFiles }) => {
|
|
4851
|
+
indexImportedFiles({ localOnly: true })
|
|
4852
|
+
.then(() => import("./files/deep-index.js"))
|
|
4853
|
+
.then(({ runDeepIndex }) => runDeepIndex())
|
|
4854
|
+
.catch(() => { });
|
|
4855
|
+
});
|
|
4856
|
+
}
|
|
4857
|
+
return c.json(result);
|
|
4858
|
+
});
|
|
4859
|
+
app.post("/api/import/index", async (c) => {
|
|
4860
|
+
const { indexImportedFiles } = await import("./files/index-local.js");
|
|
4861
|
+
const result = await indexImportedFiles({ localOnly: true });
|
|
4862
|
+
// After fast pass, kick off deep index in background
|
|
4863
|
+
import("./files/deep-index.js").then(({ runDeepIndex }) => {
|
|
4864
|
+
runDeepIndex().catch(() => { });
|
|
4865
|
+
});
|
|
4866
|
+
return c.json(result);
|
|
4867
|
+
});
|
|
4868
|
+
app.post("/api/import/deep-index", async (c) => {
|
|
4869
|
+
const { runDeepIndex } = await import("./files/deep-index.js");
|
|
4870
|
+
const result = await runDeepIndex();
|
|
4871
|
+
return c.json(result);
|
|
4872
|
+
});
|
|
4873
|
+
app.get("/api/import/deep-index/progress", async (c) => {
|
|
4874
|
+
const { getDeepIndexProgress } = await import("./files/deep-index.js");
|
|
4875
|
+
return c.json(getDeepIndexProgress());
|
|
4876
|
+
});
|
|
4877
|
+
app.get("/api/import/deep-index/results", async (c) => {
|
|
4878
|
+
const { readFile: rf } = await import("node:fs/promises");
|
|
4879
|
+
const { join: jp } = await import("node:path");
|
|
4880
|
+
try {
|
|
4881
|
+
const raw = await rf(jp(BRAIN_DIR, ".core", "deep-index.json"), "utf-8");
|
|
4882
|
+
return c.json(JSON.parse(raw));
|
|
4883
|
+
}
|
|
4884
|
+
catch {
|
|
4885
|
+
return c.json({ entities: [], themes: [], crossRefs: [], flags: [], deepIndexed: [] });
|
|
4886
|
+
}
|
|
4887
|
+
});
|
|
4888
|
+
app.post("/api/import/files", async (c) => {
|
|
4889
|
+
const formData = await c.req.formData();
|
|
4890
|
+
const files = formData.getAll("files");
|
|
4891
|
+
if (files.length === 0)
|
|
4892
|
+
return c.json({ error: "No files provided" }, 400);
|
|
4893
|
+
const { mkdir: mkdirFs, writeFile: writeFs } = await import("node:fs/promises");
|
|
4894
|
+
const { join: joinPath } = await import("node:path");
|
|
4895
|
+
const ingestDir = joinPath(process.cwd(), "ingest");
|
|
4896
|
+
await mkdirFs(ingestDir, { recursive: true });
|
|
4897
|
+
const saved = [];
|
|
4898
|
+
for (const file of files) {
|
|
4899
|
+
if (!file.name)
|
|
4900
|
+
continue;
|
|
4901
|
+
const buffer = Buffer.from(await file.arrayBuffer());
|
|
4902
|
+
const dest = joinPath(ingestDir, file.name);
|
|
4903
|
+
await writeFs(dest, buffer);
|
|
4904
|
+
saved.push(file.name);
|
|
4905
|
+
}
|
|
4906
|
+
// Process the ingest folder immediately
|
|
4907
|
+
const { processIngestFolder } = await import("./files/ingest-folder.js");
|
|
4908
|
+
const ingestedDir = joinPath(process.cwd(), "ingested");
|
|
4909
|
+
const result = await processIngestFolder(ingestDir, ingestedDir);
|
|
4910
|
+
return c.json({
|
|
4911
|
+
saved: saved.length,
|
|
4912
|
+
files: saved,
|
|
4913
|
+
ingested: result.newFiles,
|
|
4914
|
+
});
|
|
4915
|
+
});
|
|
4784
4916
|
// --- Startup ---
|
|
4785
|
-
async function start() {
|
|
4917
|
+
async function start(opts) {
|
|
4918
|
+
const tier = opts?.tier ?? "byok";
|
|
4919
|
+
const tierGate = await import("./tier/gate.js");
|
|
4786
4920
|
// Initialize instance name before anything else
|
|
4787
4921
|
initInstanceName();
|
|
4788
4922
|
// Initialize OpenTelemetry tracing (must be early, before instrumented code)
|
|
@@ -4793,6 +4927,9 @@ async function start() {
|
|
|
4793
4927
|
});
|
|
4794
4928
|
// Load settings (airplane mode, model selection)
|
|
4795
4929
|
const settings = await loadSettings();
|
|
4930
|
+
// Initialize posture system (UI surface assembly)
|
|
4931
|
+
await loadPosture();
|
|
4932
|
+
startDecayTimer();
|
|
4796
4933
|
// Install fetch guard before any routes or outbound calls
|
|
4797
4934
|
installFetchGuard();
|
|
4798
4935
|
// Initialize PrivacyMembrane for reversible redaction
|
|
@@ -4963,17 +5100,24 @@ async function start() {
|
|
|
4963
5100
|
logActivity({ source: "agent", summary: `Continuation error: ${msg}` });
|
|
4964
5101
|
}
|
|
4965
5102
|
});
|
|
4966
|
-
// Initialize
|
|
4967
|
-
|
|
4968
|
-
|
|
4969
|
-
|
|
4970
|
-
|
|
4971
|
-
|
|
4972
|
-
|
|
4973
|
-
|
|
4974
|
-
|
|
4975
|
-
|
|
4976
|
-
|
|
5103
|
+
// Initialize agent spawning — tier >= spawn only
|
|
5104
|
+
if (tierGate.canSpawn(tier)) {
|
|
5105
|
+
// Initialize instance manager (GC, health checks, load balancing)
|
|
5106
|
+
instanceManager = new AgentInstanceManager(runtime);
|
|
5107
|
+
await instanceManager.init();
|
|
5108
|
+
// Initialize agent pool (circuit breakers, isolation, resource management)
|
|
5109
|
+
agentPool = AgentPool.fromExisting(runtime, instanceManager);
|
|
5110
|
+
setAgentPool(agentPool);
|
|
5111
|
+
// Initialize workflow engine for multi-agent coordination
|
|
5112
|
+
workflowEngine = new WorkflowEngine(agentPool);
|
|
5113
|
+
await workflowEngine.loadAllDefinitions().catch((err) => {
|
|
5114
|
+
log.warn("Failed to load workflow definitions", { error: err instanceof Error ? err.message : String(err) });
|
|
5115
|
+
});
|
|
5116
|
+
log.info(`Agent spawning enabled (tier: ${tier})`);
|
|
5117
|
+
}
|
|
5118
|
+
else {
|
|
5119
|
+
log.info(`Agent spawning disabled (tier: ${tier} — requires spawn tier)`);
|
|
5120
|
+
}
|
|
4977
5121
|
// --- Register component health checks (after all systems initialized) ---
|
|
4978
5122
|
// Queue store: can we read the JSONL file?
|
|
4979
5123
|
health.register("queue", queueStoreCheck(() => queueProvider.getStore()), { critical: false });
|
|
@@ -4997,25 +5141,27 @@ async function start() {
|
|
|
4997
5141
|
recovery.start();
|
|
4998
5142
|
// Start alert evaluation loop (evaluates every 30s)
|
|
4999
5143
|
alertManager.start();
|
|
5000
|
-
// Wire notification channels —
|
|
5001
|
-
|
|
5002
|
-
|
|
5003
|
-
|
|
5004
|
-
|
|
5005
|
-
|
|
5006
|
-
|
|
5007
|
-
|
|
5008
|
-
|
|
5009
|
-
|
|
5010
|
-
|
|
5011
|
-
|
|
5012
|
-
|
|
5013
|
-
|
|
5014
|
-
|
|
5015
|
-
|
|
5016
|
-
|
|
5017
|
-
|
|
5018
|
-
|
|
5144
|
+
// Wire notification channels — tier >= byok only (requires BYOK API keys)
|
|
5145
|
+
if (tierGate.canAlert(tier)) {
|
|
5146
|
+
const resendKey = process.env.RESEND_API_KEY;
|
|
5147
|
+
if (resendKey) {
|
|
5148
|
+
alertDispatcher.add(new EmailChannel({
|
|
5149
|
+
endpoint: "https://api.resend.com/emails",
|
|
5150
|
+
apiKey: resendKey,
|
|
5151
|
+
from: `${getInstanceName()} <${getAlertEmailFrom()}>`,
|
|
5152
|
+
to: [resolveEnv("ALERT_EMAIL_TO") ?? ""].filter(Boolean),
|
|
5153
|
+
}));
|
|
5154
|
+
log.info("Alert channel: email (Resend)");
|
|
5155
|
+
}
|
|
5156
|
+
if (process.env.TWILIO_ACCOUNT_SID) {
|
|
5157
|
+
alertDispatcher.add(new PhoneChannel());
|
|
5158
|
+
log.info("Alert channel: phone (Twilio voice)");
|
|
5159
|
+
}
|
|
5160
|
+
alertManager.updateNotifications([
|
|
5161
|
+
{ channel: "email", minSeverity: "warning" },
|
|
5162
|
+
{ channel: "phone", minSeverity: "critical" },
|
|
5163
|
+
]);
|
|
5164
|
+
}
|
|
5019
5165
|
// Start credit monitoring (checks every 5 min, configurable via CORE_CREDIT_CHECK_INTERVAL_MS)
|
|
5020
5166
|
startCreditMonitor(health, alertManager);
|
|
5021
5167
|
// Avatar sidecar launches in background — slow (model loading) but non-blocking
|
|
@@ -5238,8 +5384,8 @@ async function start() {
|
|
|
5238
5384
|
});
|
|
5239
5385
|
}
|
|
5240
5386
|
catch { /* ok */ }
|
|
5241
|
-
// Announce on LAN if mesh.lanAnnounce is enabled
|
|
5242
|
-
if (getMeshConfig().lanAnnounce) {
|
|
5387
|
+
// Announce on LAN if mesh.lanAnnounce is enabled AND tier >= byok
|
|
5388
|
+
if (tierGate.canMesh(tier) && getMeshConfig().lanAnnounce) {
|
|
5243
5389
|
try {
|
|
5244
5390
|
startMdns(actualPort);
|
|
5245
5391
|
}
|
|
@@ -5397,7 +5543,7 @@ process.on("SIGTERM", () => { gracefulShutdown("SIGTERM"); });
|
|
|
5397
5543
|
process.on("uncaughtException", (err) => {
|
|
5398
5544
|
const msg = `[${new Date().toISOString()}] UNCAUGHT: ${err.stack ?? err.message}\n`;
|
|
5399
5545
|
try {
|
|
5400
|
-
writeFileSync(join(
|
|
5546
|
+
writeFileSync(join(BRAIN_DIR, "ops", "crash.log"), msg, { flag: "a" });
|
|
5401
5547
|
}
|
|
5402
5548
|
catch { }
|
|
5403
5549
|
// EPIPE = broken pipe from stdout/stderr (e.g. tsx watch restart).
|
|
@@ -5412,7 +5558,7 @@ process.on("unhandledRejection", (reason) => {
|
|
|
5412
5558
|
const err = reason instanceof Error ? reason : new Error(String(reason));
|
|
5413
5559
|
const msg = `[${new Date().toISOString()}] UNHANDLED_REJECTION: ${err.stack ?? err.message}\n`;
|
|
5414
5560
|
try {
|
|
5415
|
-
writeFileSync(join(
|
|
5561
|
+
writeFileSync(join(BRAIN_DIR, "ops", "crash.log"), msg, { flag: "a" });
|
|
5416
5562
|
}
|
|
5417
5563
|
catch { }
|
|
5418
5564
|
log.error("Unhandled rejection", { error: err.message, stack: err.stack });
|