@runcore-sh/runcore 0.5.15 → 0.6.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/templates/spawn-policy.yaml +12 -6
- package/dictionary.json +2 -2
- package/dist/agents/autonomous.d.ts.map +1 -1
- package/dist/agents/runtime/config.d.ts.map +1 -1
- package/dist/agents/runtime/driver.d.ts +12 -3
- package/dist/agents/runtime/driver.d.ts.map +1 -1
- package/dist/agents/runtime/types.d.ts +4 -0
- package/dist/agents/runtime/types.d.ts.map +1 -1
- package/dist/agents/runtime.js +3 -3
- package/dist/agents/runtime.js.map +1 -1
- package/dist/agents/spawn-policy.d.ts +15 -7
- package/dist/agents/spawn-policy.d.ts.map +1 -1
- package/dist/agents/spawn.d.ts.map +1 -1
- package/dist/agents/store.d.ts.map +1 -1
- package/dist/agents/store.js +94 -49
- package/dist/agents/store.js.map +1 -1
- package/dist/agents/types.d.ts +6 -0
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/alert.d.ts +6 -0
- package/dist/alert.d.ts.map +1 -1
- package/dist/alert.js +16 -3
- package/dist/alert.js.map +1 -1
- package/dist/capabilities/definitions/email.d.ts +3 -2
- package/dist/capabilities/definitions/email.d.ts.map +1 -1
- package/dist/capabilities/definitions/email.js +74 -60
- package/dist/capabilities/definitions/email.js.map +1 -1
- package/dist/cli.js +49 -12
- package/dist/cli.js.map +1 -1
- package/dist/goals/planner.d.ts +40 -0
- package/dist/goals/planner.d.ts.map +1 -0
- package/dist/goals/planner.js +302 -0
- package/dist/goals/planner.js.map +1 -0
- package/dist/health/alert-defaults.js +6 -6
- package/dist/health/alert-defaults.js.map +1 -1
- package/dist/health/checks.d.ts.map +1 -1
- package/dist/health/checks.js +4 -6
- package/dist/health/checks.js.map +1 -1
- package/dist/llm/tools/handlers.js +1 -1
- package/dist/llm/tools/handlers.js.map +1 -1
- package/dist/llm/tools/loop.d.ts +2 -2
- package/dist/llm/tools/loop.d.ts.map +1 -1
- package/dist/llm/tools/loop.js +36 -8
- package/dist/llm/tools/loop.js.map +1 -1
- package/dist/queue/grooming.d.ts.map +1 -1
- package/dist/queue/grooming.js +27 -3
- package/dist/queue/grooming.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +121 -50
- package/dist/server.js.map +1 -1
- package/dist/services/routine-patterns.d.ts.map +1 -1
- package/dist/services/routine-patterns.js +9 -0
- package/dist/services/routine-patterns.js.map +1 -1
- package/dist/services/traceInsights.d.ts.map +1 -1
- package/dist/services/traceInsights.js +48 -32
- package/dist/services/traceInsights.js.map +1 -1
- package/dist/settings.js +2 -2
- package/dist/settings.js.map +1 -1
- package/dist/tier/token.d.ts.map +1 -1
- package/dist/tier/token.js +4 -1
- package/dist/tier/token.js.map +1 -1
- package/dist/vault/store.d.ts +3 -1
- package/dist/vault/store.d.ts.map +1 -1
- package/package.json +1 -1
- package/public/index.html +102 -16
- package/public/settings.html +1411 -0
- package/public/sw.js +9 -59
package/dist/llm/tools/loop.js
CHANGED
|
@@ -2,12 +2,24 @@
|
|
|
2
2
|
* Tool-calling orchestration loop.
|
|
3
3
|
*
|
|
4
4
|
* Wraps a provider's streamChat to handle multi-round tool calling.
|
|
5
|
-
* The loop: stream
|
|
6
|
-
*
|
|
5
|
+
* The loop: stream -> detect tool calls -> execute -> append results -> stream again.
|
|
6
|
+
* Runs until the model stops calling tools. Context size is the natural limit.
|
|
7
7
|
*/
|
|
8
8
|
import { createLogger } from "../../utils/logger.js";
|
|
9
9
|
const log = createLogger("llm.tools.loop");
|
|
10
|
-
|
|
10
|
+
/** Rough char budget before we nudge the model to wrap up. ~120k tokens. */
|
|
11
|
+
const CONTEXT_CHAR_BUDGET = 480_000;
|
|
12
|
+
/** Estimate total chars across all messages. */
|
|
13
|
+
function estimateContextChars(messages) {
|
|
14
|
+
let total = 0;
|
|
15
|
+
for (const m of messages) {
|
|
16
|
+
if (typeof m.content === "string")
|
|
17
|
+
total += m.content.length;
|
|
18
|
+
else if (m.content != null)
|
|
19
|
+
total += JSON.stringify(m.content).length;
|
|
20
|
+
}
|
|
21
|
+
return total;
|
|
22
|
+
}
|
|
11
23
|
/**
|
|
12
24
|
* Stream with tool-calling support.
|
|
13
25
|
*
|
|
@@ -33,7 +45,14 @@ export async function streamWithTools(options) {
|
|
|
33
45
|
}
|
|
34
46
|
const messages = [...options.messages];
|
|
35
47
|
let round = 0;
|
|
36
|
-
|
|
48
|
+
let nudged = false;
|
|
49
|
+
// Loop until the model stops calling tools or context fills up
|
|
50
|
+
while (true) {
|
|
51
|
+
// Check abort signal
|
|
52
|
+
if (options.signal?.aborted) {
|
|
53
|
+
options.onDone();
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
37
56
|
let toolCalls = [];
|
|
38
57
|
let roundText = "";
|
|
39
58
|
// Run one streaming round
|
|
@@ -117,10 +136,19 @@ export async function streamWithTools(options) {
|
|
|
117
136
|
});
|
|
118
137
|
}
|
|
119
138
|
round++;
|
|
120
|
-
log.info("Tool loop
|
|
139
|
+
log.info("Tool loop round complete", { round, contextChars: estimateContextChars(messages) });
|
|
140
|
+
// Context pressure check: if we're approaching the limit, nudge once
|
|
141
|
+
if (!nudged && estimateContextChars(messages) > CONTEXT_CHAR_BUDGET) {
|
|
142
|
+
nudged = true;
|
|
143
|
+
log.warn("Context nearing limit, nudging model to wrap up", {
|
|
144
|
+
round,
|
|
145
|
+
contextChars: estimateContextChars(messages),
|
|
146
|
+
});
|
|
147
|
+
messages.push({
|
|
148
|
+
role: "system",
|
|
149
|
+
content: "Context is getting large. Wrap up your current work and respond to the user with a summary. You can suggest continuing in a follow-up message if there is more to do.",
|
|
150
|
+
});
|
|
151
|
+
}
|
|
121
152
|
}
|
|
122
|
-
// Max rounds reached — end gracefully
|
|
123
|
-
log.warn("Tool loop hit max rounds without text response", { maxRounds: MAX_ROUNDS });
|
|
124
|
-
options.onDone();
|
|
125
153
|
}
|
|
126
154
|
//# sourceMappingURL=loop.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../src/llm/tools/loop.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,GAAG,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;AAE3C,MAAM,
|
|
1
|
+
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../src/llm/tools/loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grooming.d.ts","sourceRoot":"","sources":["../../src/queue/grooming.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"grooming.d.ts","sourceRoot":"","sources":["../../src/queue/grooming.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAiSxC;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,UAAU,EACjB,UAAU,GAAE,MAAkC,GAC7C,IAAI,CAwBN;AAED,+BAA+B;AAC/B,wBAAgB,iBAAiB,IAAI,IAAI,CAMxC"}
|
package/dist/queue/grooming.js
CHANGED
|
@@ -114,6 +114,22 @@ async function promoteReadyBacklogItems(store, tasks) {
|
|
|
114
114
|
async function runGroomingCheck(store) {
|
|
115
115
|
const tasks = await store.list();
|
|
116
116
|
const now = Date.now();
|
|
117
|
+
// Cancel open anomaly/bottleneck tickets that were auto-generated by the insight engine.
|
|
118
|
+
// These self-referential tickets poison the board and prevent real work from surfacing.
|
|
119
|
+
const junkTickets = tasks.filter((t) => {
|
|
120
|
+
if (t.state === "done" || t.state === "cancelled")
|
|
121
|
+
return false;
|
|
122
|
+
return /^\[(anomaly|bottleneck)\]/i.test(t.title);
|
|
123
|
+
});
|
|
124
|
+
for (const task of junkTickets) {
|
|
125
|
+
await store.update(task.id, { state: "cancelled" });
|
|
126
|
+
}
|
|
127
|
+
if (junkTickets.length > 0) {
|
|
128
|
+
logActivity({
|
|
129
|
+
source: "board",
|
|
130
|
+
summary: `Grooming: cancelled ${junkTickets.length} auto-generated [anomaly]/[bottleneck] ticket(s)`,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
117
133
|
// Find backlog/todo items that are genuinely vague — no meaningful description.
|
|
118
134
|
// Items with exchanges (comments/specs) are considered groomed even if the
|
|
119
135
|
// original description is short, since specs often arrive as comments.
|
|
@@ -130,17 +146,25 @@ async function runGroomingCheck(store) {
|
|
|
130
146
|
const hasActionableDetail = /(?:acceptance|criteria|deliverable|must|should|implement|add|create|fix|update|remove|when|endpoint|route|component)/i.test(desc);
|
|
131
147
|
return desc.length < 80 && !hasFilePaths && !hasActionableDetail;
|
|
132
148
|
});
|
|
133
|
-
// Find in_progress items that have been stale for >
|
|
149
|
+
// Find in_progress items that have been stale for > 2 hours — agent likely crashed or
|
|
150
|
+
// runtime wasn't initialized when the item was set to in_progress. Move back to todo.
|
|
134
151
|
const staleInProgress = tasks.filter((t) => {
|
|
135
152
|
if (t.state !== "in_progress")
|
|
136
153
|
return false;
|
|
137
154
|
const updated = new Date(t.updatedAt).getTime();
|
|
138
|
-
return (now - updated) >
|
|
155
|
+
return (now - updated) > 2 * 60 * 60 * 1000;
|
|
139
156
|
});
|
|
157
|
+
// Move stale in_progress items back to todo so they can be re-picked
|
|
158
|
+
for (const task of staleInProgress) {
|
|
159
|
+
await store.update(task.id, { state: "todo", assignee: null });
|
|
160
|
+
}
|
|
140
161
|
// Find items with stale assignees (assigned but not updated in > 2 hours — agent likely crashed)
|
|
141
162
|
const staleAssigned = tasks.filter((t) => {
|
|
142
163
|
if (!t.assignee || t.state === "done" || t.state === "cancelled")
|
|
143
164
|
return false;
|
|
165
|
+
// Skip items we already moved back to todo above
|
|
166
|
+
if (t.state === "in_progress")
|
|
167
|
+
return false;
|
|
144
168
|
const updated = new Date(t.updatedAt).getTime();
|
|
145
169
|
return (now - updated) > 2 * 60 * 60 * 1000;
|
|
146
170
|
});
|
|
@@ -170,7 +194,7 @@ async function runGroomingCheck(store) {
|
|
|
170
194
|
parts.push(`${vagueItems.length} backlog items need specs (${cap(vagueItems.map((t) => t.identifier))})`);
|
|
171
195
|
}
|
|
172
196
|
if (staleInProgress.length > 0) {
|
|
173
|
-
parts.push(
|
|
197
|
+
parts.push(`moved ${staleInProgress.length} stale in_progress → todo (${cap(staleInProgress.map((t) => t.identifier))})`);
|
|
174
198
|
}
|
|
175
199
|
if (staleAssigned.length > 0) {
|
|
176
200
|
parts.push(`cleared ${staleAssigned.length} stale assignees (${cap(staleAssigned.map((t) => t.identifier))})`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grooming.js","sourceRoot":"","sources":["../../src/queue/grooming.ts"],"names":[],"mappings":"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"}
|
|
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;AAE7D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AAElC,MAAM,yBAAyB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAC7D,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,wEAAwE;AACxE,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAEnC,MAAM,gBAAgB,GAAG,IAAI,CAC3B,SAAS,EACT,YAAY,EACZ,sBAAsB,CACvB,CAAC;AAEF,IAAI,KAAK,GAA0C,IAAI,CAAC;AACxD,IAAI,WAAW,GAAsB,IAAI,CAAC;AAE1C,yDAAyD;AACzD,IAAI,kBAAkB,GAAG,EAAE,CAAC;AAC5B,IAAI,eAAe,GAAG,EAAE,CAAC;AAEzB,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3D,IAAI,GAAG,EAAE,CAAC;YACR,eAAe,GAAG,GAAG,CAAC;YACtB,kBAAkB,GAAG,GAAG,CAAC;QAC3B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,IAAI,CAAC;QACH,aAAa,CAAC,gBAAgB,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;AAC/B,CAAC;AAUD;;;;;;;;;GASG;AACH,SAAS,iBAAiB,CAAC,IAAe;IACxC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAE1C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;IACpC,MAAM,YAAY,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,sEAAsE;IACtE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;IACvC,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAC3C,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;QACjC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CACvE,CAAC;IACF,IAAI,cAAc;QAAE,OAAO,IAAI,CAAC;IAEhC,6DAA6D;IAC7D,MAAM,iBAAiB,GAAG,iFAAiF,CAAC;IAC5G,IAAI,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtD,wCAAwC;IACxC,MAAM,YAAY,GAAG,+DAA+D,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACxG,IAAI,YAAY;QAAE,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAE5D,MAAM,cAAc,GAAG,6GAA6G,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACxJ,IAAI,cAAc;QAAE,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAErD,MAAM,qBAAqB,GAAG,kHAAkH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5J,IAAI,qBAAqB;QAAE,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAEnE,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1C,IAAI,YAAY;QAAE,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAEpD,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IAC7C,IAAI,kBAAkB;QAAE,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAE7D,wDAAwD;IACxD,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,wBAAwB,CACrC,KAAiB,EACjB,KAAkB;IAElB,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAsB,EAAE,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,QAAQ,CAAC,MAAM,IAAI,wBAAwB;YAAE,MAAM;QAEvD,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/C,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtB,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,YAAY,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,gBAAgB,CAAC,KAAiB;IAC/C,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,yFAAyF;IACzF,wFAAwF;IACxF,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACrC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC;QAChE,OAAO,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IACH,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,WAAW,CAAC;YACV,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,uBAAuB,WAAW,CAAC,MAAM,kDAAkD;SACrG,CAAC,CAAC;IACL,CAAC;IAED,gFAAgF;IAChF,2EAA2E;IAC3E,uEAAuE;IACvE,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACpC,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QAC9D,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACpD,yDAAyD;QACzD,IAAI,YAAY;YAAE,OAAO,KAAK,CAAC;QAC/B,mDAAmD;QACnD,MAAM,YAAY,GAAG,2CAA2C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5E,MAAM,mBAAmB,GAAG,uHAAuH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/J,OAAO,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC,mBAAmB,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,sFAAsF;IACtF,sFAAsF;IACtF,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACzC,IAAI,CAAC,CAAC,KAAK,KAAK,aAAa;YAAE,OAAO,KAAK,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,qEAAqE;IACrE,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,iGAAiG;IACjG,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACvC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC;QAC/E,iDAAiD;QACjD,IAAI,CAAC,CAAC,KAAK,KAAK,aAAa;YAAE,OAAO,KAAK,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,kDAAkD;IAClD,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAE9D,4EAA4E;IAC5E,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW;YAAE,SAAS;QAClE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CACxC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CACrE,CAAC;QACF,IAAI,WAAW;YAAE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,2DAA2D;IAC3D,MAAM,GAAG,GAAG,CAAC,GAAa,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CACtC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,GAAG,GAAG,OAAO,CAAC;IAEnG,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,kCAAkC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACjG,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,8BAA8B,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5G,CAAC;IACD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,SAAS,eAAe,CAAC,MAAM,8BAA8B,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5H,CAAC;IACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,WAAW,aAAa,CAAC,MAAM,qBAAqB,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;IACjH,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9F,KAAK,CAAC,IAAI,CAAC,YAAY,QAAQ,CAAC,MAAM,oBAAoB,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,mEAAmE;IACnE,mEAAmE;IACnE,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,KAAK,kBAAkB,EAAE,CAAC;QAC3D,kBAAkB,GAAG,WAAW,CAAC;QACjC,WAAW,CAAC;YACV,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,aAAa,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SACzC,CAAC,CAAC;IACL,CAAC;IAED,oFAAoF;IACpF,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,KAAK,GAAG,iBAAiB,EAAE,CAAC;YAC9B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;YAChD,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,KAAK,YAAY,KAAK,QAAQ,EAAE,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;IAED,+EAA+E;IAC/E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtF,gBAAgB,CAAC;YACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,iBAAiB,QAAQ,CAAC,MAAM,6BAA6B,KAAK,EAAE;SAC9E,CAAC,CAAC;IACL,CAAC;IAED,6DAA6D;IAC7D,MAAM,QAAQ,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9E,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;QACxD,eAAe,GAAG,QAAQ,CAAC;QAC3B,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAE5B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,2BAA2B,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QACzF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,0CAA0C,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;QAEvH,gBAAgB,CAAC;YACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,6BAA6B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iCAAiC;SACxF,CAAC,CAAC;IACL,CAAC;IAED,iEAAiE;IACjE,kBAAkB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAiB,EACjB,aAAqB,yBAAyB;IAE9C,IAAI,KAAK;QAAE,OAAO;IAClB,WAAW,GAAG,KAAK,CAAC;IACpB,cAAc,EAAE,CAAC;IAEjB,wDAAwD;IACxD,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,0BAA0B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC,EAAE,MAAM,CAAC,CAAC;IAEX,KAAK,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC7B,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,0BAA0B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC,EAAE,UAAU,CAAC,CAAC;IAEf,GAAG,CAAC,IAAI,CAAC,iCAAiC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACnF,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,iBAAiB;IAC/B,IAAI,KAAK,EAAE,CAAC;QACV,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,KAAK,GAAG,IAAI,CAAC;IACf,CAAC;IACD,WAAW,GAAG,IAAI,CAAC;AACrB,CAAC"}
|
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;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsXH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AAygND,iBAAe,KAAK,CAAC,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,iBAAiB,EAAE,QAAQ,CAAA;CAAE,iBA6uBxE;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
package/dist/server.js
CHANGED
|
@@ -122,6 +122,7 @@ import { createCapabilityRegistry, getCapabilityRegistry, calendarCapability, em
|
|
|
122
122
|
let _browser = null;
|
|
123
123
|
import { MetricsStore, startCollector, stopCollector, registerDefaultThresholds, evaluateAlerts, buildDashboard, metricsMiddleware, collectPrometheus, generatePeriodStats, generateComparisonReport, } from "./metrics/index.js";
|
|
124
124
|
import { startGroomingTimer, stopGroomingTimer } from "./queue/grooming.js";
|
|
125
|
+
import { startGoalPlanner, stopGoalPlanner } from "./goals/planner.js";
|
|
125
126
|
import { createSchedulingStore, getSchedulingStore } from "./scheduling/store.js";
|
|
126
127
|
import { startSchedulingTimer, stopSchedulingTimer } from "./scheduling/timer.js";
|
|
127
128
|
import { createContactStore, getContactStore } from "./contacts/store.js";
|
|
@@ -412,11 +413,11 @@ async function getOrCreateChatSession(sessionId, name) {
|
|
|
412
413
|
: (_googleAuth?.isGoogleConfigured() ?? false)
|
|
413
414
|
? [`Google Workspace credentials are configured but not yet authorized. Tell ${name} to click "Connect Google" in settings to complete the setup.`, ``]
|
|
414
415
|
: [`Google Workspace is not connected. ${name} can add GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET in vault settings to enable Calendar, Gmail, and Drive access.`, ``]),
|
|
415
|
-
// Non-Google capability instructions (always injected)
|
|
416
|
-
...(getCapabilityRegistry()?.getPromptInstructions({ origin: "chat", name, exclude: ["calendar", "
|
|
416
|
+
// Non-Google capability instructions (always injected; email is Resend-based, not Google)
|
|
417
|
+
...(getCapabilityRegistry()?.getPromptInstructions({ origin: "chat", name, exclude: ["calendar", "docs"] }) ?? "").split("\n"),
|
|
417
418
|
// Google capability instructions (only when authenticated)
|
|
418
419
|
...((_googleAuth?.isGoogleAuthenticated() ?? false)
|
|
419
|
-
? (getCapabilityRegistry()?.getPromptInstructions({ origin: "chat", name, filter: ["calendar", "
|
|
420
|
+
? (getCapabilityRegistry()?.getPromptInstructions({ origin: "chat", name, filter: ["calendar", "docs"] }) ?? "").split("\n")
|
|
420
421
|
: []),
|
|
421
422
|
``,
|
|
422
423
|
// Capability summary — self-knowledge of full toolset
|
|
@@ -1237,10 +1238,12 @@ app.put("/api/vault/:name", async (c) => {
|
|
|
1237
1238
|
return unauthorized("Session key not found");
|
|
1238
1239
|
const name = c.req.param("name");
|
|
1239
1240
|
const body = await c.req.json();
|
|
1240
|
-
const { value, label } = body;
|
|
1241
|
+
const { value, label, type } = body;
|
|
1241
1242
|
if (!value)
|
|
1242
1243
|
return badRequest("value required");
|
|
1243
|
-
|
|
1244
|
+
if (!_vaultStore)
|
|
1245
|
+
return c.json({ error: "Vault not available — tier may not support it" }, 503);
|
|
1246
|
+
await _vaultStore.setVaultKey(name, value, key, label, type);
|
|
1244
1247
|
return c.json({ ok: true });
|
|
1245
1248
|
});
|
|
1246
1249
|
// Delete a vault key
|
|
@@ -1255,6 +1258,8 @@ app.delete("/api/vault/:name", async (c) => {
|
|
|
1255
1258
|
if (!key)
|
|
1256
1259
|
return unauthorized("Session key not found");
|
|
1257
1260
|
const name = c.req.param("name");
|
|
1261
|
+
if (!_vaultStore)
|
|
1262
|
+
return c.json({ error: "Vault not available — tier may not support it" }, 503);
|
|
1258
1263
|
await _vaultStore.deleteVaultKey(name, key);
|
|
1259
1264
|
return c.json({ ok: true });
|
|
1260
1265
|
});
|
|
@@ -1367,6 +1372,8 @@ app.get("/api/google/callback", async (c) => {
|
|
|
1367
1372
|
if (!vaultKey) {
|
|
1368
1373
|
return c.html(`<html><body><h2>Session not found</h2><p>Could not find a session key to store credentials. Please log in first, then try connecting Google again.</p></body></html>`);
|
|
1369
1374
|
}
|
|
1375
|
+
if (!_vaultStore)
|
|
1376
|
+
return c.html(`<html><body><h2>Vault not available</h2><p>Cannot store credentials — vault module not loaded.</p></body></html>`);
|
|
1370
1377
|
await _vaultStore.setVaultKey("GOOGLE_REFRESH_TOKEN", result.refreshToken, vaultKey, "Google OAuth refresh token");
|
|
1371
1378
|
logActivity({ source: "google", summary: "Google OAuth connected — refresh token stored in vault", actionLabel: "PROMPTED", reason: "user connected Google OAuth" });
|
|
1372
1379
|
// Start Google polling timers now that Google is connected
|
|
@@ -3002,6 +3009,8 @@ app.get("/api/slack/callback", async (c) => {
|
|
|
3002
3009
|
if (!vaultKey) {
|
|
3003
3010
|
return c.html(`<html><body><h2>Session not found</h2><p>Log in first, then try connecting Slack again.</p></body></html>`);
|
|
3004
3011
|
}
|
|
3012
|
+
if (!_vaultStore)
|
|
3013
|
+
return c.html(`<html><body><h2>Vault not available</h2><p>Cannot store credentials — vault module not loaded.</p></body></html>`);
|
|
3005
3014
|
await _vaultStore.setVaultKey("SLACK_BOT_TOKEN", result.botToken, vaultKey, "Slack Bot Token");
|
|
3006
3015
|
if (result.teamId) {
|
|
3007
3016
|
await _vaultStore.setVaultKey("SLACK_TEAM_ID", result.teamId, vaultKey, "Slack Team ID");
|
|
@@ -4599,6 +4608,10 @@ app.get("/browser", requireSurface("pages"), async (c) => {
|
|
|
4599
4608
|
const html = await serveHtmlTemplate(join(UI_DIR, "browser.html"));
|
|
4600
4609
|
return c.html(html);
|
|
4601
4610
|
});
|
|
4611
|
+
app.get("/settings", requireSurface("pages"), async (c) => {
|
|
4612
|
+
const html = await serveHtmlTemplate(join(UI_DIR, "settings.html"));
|
|
4613
|
+
return c.html(html);
|
|
4614
|
+
});
|
|
4602
4615
|
// Registry is always available — it's the entry point
|
|
4603
4616
|
app.get("/registry", async (c) => {
|
|
4604
4617
|
const html = await serveHtmlTemplate(join(UI_DIR, "registry.html"));
|
|
@@ -4719,28 +4732,28 @@ app.post("/api/share", async (c) => {
|
|
|
4719
4732
|
}
|
|
4720
4733
|
const { randomBytes } = await import("node:crypto");
|
|
4721
4734
|
const shareId = `share_${Date.now()}_${randomBytes(4).toString("hex")}`;
|
|
4722
|
-
const emailHtml = `
|
|
4723
|
-
<div style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; max-width: 560px; margin: 0 auto; padding: 32px 24px; color: #e4e4e7; background: #0e0e10;">
|
|
4724
|
-
<h1 style="font-size: 20px; font-weight: 600; margin: 0 0 16px;">You've been invited to try Core</h1>
|
|
4725
|
-
<p style="color: #8b8b94; font-size: 14px; line-height: 1.6; margin: 0 0 20px;">
|
|
4726
|
-
Core is a file-based personal operating system for an AI agent — your own local brain that learns, remembers, and works for you.
|
|
4727
|
-
</p>
|
|
4728
|
-
${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>` : ""}
|
|
4729
|
-
<h2 style="font-size: 14px; font-weight: 600; margin: 0 0 10px;">Install</h2>
|
|
4730
|
-
<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;">
|
|
4731
|
-
# Clone the repo
|
|
4732
|
-
git clone https://github.com/yourusername/core.git
|
|
4733
|
-
cd core && npm install && npm run build
|
|
4734
|
-
npm run chat</pre>
|
|
4735
|
-
<h2 style="font-size: 14px; font-weight: 600; margin: 0 0 10px;">Your Connection Key</h2>
|
|
4736
|
-
<p style="color: #8b8b94; font-size: 13px; line-height: 1.5; margin: 0 0 8px;">
|
|
4737
|
-
Paste this key during first-run setup to connect with the person who invited you:
|
|
4738
|
-
</p>
|
|
4739
|
-
<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>
|
|
4740
|
-
<p style="color: #8b8b94; font-size: 12px; margin: 0;">
|
|
4741
|
-
This creates a connection record — it does <strong>not</strong> enable mesh/hive-mind until you explicitly approve it in network settings.
|
|
4742
|
-
</p>
|
|
4743
|
-
</div>
|
|
4735
|
+
const emailHtml = `
|
|
4736
|
+
<div style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; max-width: 560px; margin: 0 auto; padding: 32px 24px; color: #e4e4e7; background: #0e0e10;">
|
|
4737
|
+
<h1 style="font-size: 20px; font-weight: 600; margin: 0 0 16px;">You've been invited to try Core</h1>
|
|
4738
|
+
<p style="color: #8b8b94; font-size: 14px; line-height: 1.6; margin: 0 0 20px;">
|
|
4739
|
+
Core is a file-based personal operating system for an AI agent — your own local brain that learns, remembers, and works for you.
|
|
4740
|
+
</p>
|
|
4741
|
+
${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>` : ""}
|
|
4742
|
+
<h2 style="font-size: 14px; font-weight: 600; margin: 0 0 10px;">Install</h2>
|
|
4743
|
+
<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;">
|
|
4744
|
+
# Clone the repo
|
|
4745
|
+
git clone https://github.com/yourusername/core.git
|
|
4746
|
+
cd core && npm install && npm run build
|
|
4747
|
+
npm run chat</pre>
|
|
4748
|
+
<h2 style="font-size: 14px; font-weight: 600; margin: 0 0 10px;">Your Connection Key</h2>
|
|
4749
|
+
<p style="color: #8b8b94; font-size: 13px; line-height: 1.5; margin: 0 0 8px;">
|
|
4750
|
+
Paste this key during first-run setup to connect with the person who invited you:
|
|
4751
|
+
</p>
|
|
4752
|
+
<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>
|
|
4753
|
+
<p style="color: #8b8b94; font-size: 12px; margin: 0;">
|
|
4754
|
+
This creates a connection record — it does <strong>not</strong> enable mesh/hive-mind until you explicitly approve it in network settings.
|
|
4755
|
+
</p>
|
|
4756
|
+
</div>
|
|
4744
4757
|
`.trim();
|
|
4745
4758
|
try {
|
|
4746
4759
|
const res = await fetch("https://api.resend.com/emails", {
|
|
@@ -6164,9 +6177,13 @@ app.post("/api/chat", async (c) => {
|
|
|
6164
6177
|
if (!def || def.pattern !== "action")
|
|
6165
6178
|
continue;
|
|
6166
6179
|
try {
|
|
6167
|
-
await def.execute(block.payload, { origin: "chat" });
|
|
6180
|
+
const result = await def.execute(block.payload, { origin: "chat" });
|
|
6181
|
+
if (!result.ok)
|
|
6182
|
+
log.warn(`Action block [${block.tag}] failed: ${result.message}`);
|
|
6183
|
+
}
|
|
6184
|
+
catch (err) {
|
|
6185
|
+
log.error(`Action block [${block.tag}] error: ${err instanceof Error ? err.message : String(err)}`);
|
|
6168
6186
|
}
|
|
6169
|
-
catch { }
|
|
6170
6187
|
}
|
|
6171
6188
|
})();
|
|
6172
6189
|
}
|
|
@@ -6629,6 +6646,7 @@ async function start(opts) {
|
|
|
6629
6646
|
}
|
|
6630
6647
|
});
|
|
6631
6648
|
startGroomingTimer(queueProvider.getStore());
|
|
6649
|
+
startGoalPlanner(queueProvider.getStore());
|
|
6632
6650
|
const schedulingStore = createSchedulingStore(BRAIN_DIR);
|
|
6633
6651
|
startSchedulingTimer(schedulingStore);
|
|
6634
6652
|
createContactStore(BRAIN_DIR);
|
|
@@ -6694,11 +6712,24 @@ async function start(opts) {
|
|
|
6694
6712
|
if (pulseSettings.mode !== "timer" && _agentAutonomous) {
|
|
6695
6713
|
const pulse = initPressureIntegrator(_agentAutonomous.triggerPulse, { threshold: pulseSettings.threshold });
|
|
6696
6714
|
log.info(`Metabolic pulse initialized: Θ=${pulseSettings.threshold}mV, mode=${pulseSettings.mode}`);
|
|
6697
|
-
// Boot scan:
|
|
6698
|
-
|
|
6699
|
-
|
|
6700
|
-
|
|
6701
|
-
|
|
6715
|
+
// Boot scan: detect all non-terminal board items and inject tension.
|
|
6716
|
+
// Items in_progress with no running agent are orphans from a previous session —
|
|
6717
|
+
// move them back to triage so the planner can re-evaluate.
|
|
6718
|
+
const allBoardItems = await queueProvider.getStore().list();
|
|
6719
|
+
let orphanCount = 0;
|
|
6720
|
+
for (const item of allBoardItems) {
|
|
6721
|
+
if (item.state === "in_progress") {
|
|
6722
|
+
await queueProvider.getStore().update(item.id, { state: "triage", assignee: null });
|
|
6723
|
+
orphanCount++;
|
|
6724
|
+
}
|
|
6725
|
+
}
|
|
6726
|
+
if (orphanCount > 0) {
|
|
6727
|
+
log.info(`Boot: recovered ${orphanCount} orphaned in_progress item(s) → triage`);
|
|
6728
|
+
}
|
|
6729
|
+
const actionableCount = allBoardItems.filter((t) => t.state === "todo" || t.state === "triage" || t.state === "in_progress").length;
|
|
6730
|
+
if (actionableCount > 0) {
|
|
6731
|
+
pulse.addTension("board", `Boot: ${actionableCount} actionable item(s) waiting`);
|
|
6732
|
+
log.info(`Boot tension: ${actionableCount} actionable item(s) found — pulse should fire`);
|
|
6702
6733
|
}
|
|
6703
6734
|
}
|
|
6704
6735
|
// Initialize nerve push notifications (VAPID keys + subscriptions)
|
|
@@ -7076,28 +7107,28 @@ async function start(opts) {
|
|
|
7076
7107
|
}
|
|
7077
7108
|
resolve();
|
|
7078
7109
|
}
|
|
7079
|
-
|
|
7080
|
-
const server = serve({ fetch: app.fetch, port
|
|
7110
|
+
const tryBind = (port, retriesLeft = 2) => {
|
|
7111
|
+
const server = serve({ fetch: app.fetch, port }, () => onListening(server));
|
|
7081
7112
|
server.on("error", (err) => {
|
|
7082
|
-
if (err.code === "EADDRINUSE"
|
|
7083
|
-
|
|
7084
|
-
|
|
7113
|
+
if (err.code === "EADDRINUSE") {
|
|
7114
|
+
if (retriesLeft > 0 && port !== 0) {
|
|
7115
|
+
log.warn(`Port ${port} in use, retrying in 1s (${retriesLeft} left)`);
|
|
7116
|
+
setTimeout(() => tryBind(port, retriesLeft - 1), 1000);
|
|
7117
|
+
}
|
|
7118
|
+
else if (port !== 0) {
|
|
7119
|
+
log.warn(`Port ${port} in use after retries, falling back to random port`);
|
|
7120
|
+
tryBind(0, 0);
|
|
7121
|
+
}
|
|
7122
|
+
else {
|
|
7123
|
+
throw err;
|
|
7124
|
+
}
|
|
7085
7125
|
}
|
|
7086
7126
|
else {
|
|
7087
7127
|
throw err;
|
|
7088
7128
|
}
|
|
7089
7129
|
});
|
|
7090
|
-
}
|
|
7091
|
-
|
|
7092
|
-
// If serve() throws synchronously (unlikely but safe)
|
|
7093
|
-
if (PORT !== 0) {
|
|
7094
|
-
log.warn(`Port ${PORT} failed, falling back to random port`);
|
|
7095
|
-
const fallback = serve({ fetch: app.fetch, port: 0 }, () => onListening(fallback));
|
|
7096
|
-
}
|
|
7097
|
-
else {
|
|
7098
|
-
throw err;
|
|
7099
|
-
}
|
|
7100
|
-
}
|
|
7130
|
+
};
|
|
7131
|
+
tryBind(PORT);
|
|
7101
7132
|
});
|
|
7102
7133
|
}
|
|
7103
7134
|
/** Returns the port the server is actually listening on (resolves port 0). */
|
|
@@ -7230,6 +7261,7 @@ async function gracefulShutdown(signal) {
|
|
|
7230
7261
|
}
|
|
7231
7262
|
catch { }
|
|
7232
7263
|
stopGroomingTimer();
|
|
7264
|
+
stopGoalPlanner();
|
|
7233
7265
|
stopSchedulingTimer();
|
|
7234
7266
|
try {
|
|
7235
7267
|
_integrationsGithub?.shutdownGitHub();
|
|
@@ -7278,10 +7310,49 @@ async function gracefulShutdown(signal) {
|
|
|
7278
7310
|
}
|
|
7279
7311
|
catch { }
|
|
7280
7312
|
releaseLock();
|
|
7313
|
+
// Self-restart: re-exec with same args instead of exiting
|
|
7314
|
+
if (signal === "self-restart") {
|
|
7315
|
+
const { spawn: spawnProcess } = await import("node:child_process");
|
|
7316
|
+
log.info("Re-executing process for self-restart");
|
|
7317
|
+
const child = spawnProcess(process.execPath, process.argv.slice(1), {
|
|
7318
|
+
cwd: process.cwd(),
|
|
7319
|
+
env: process.env,
|
|
7320
|
+
stdio: "inherit",
|
|
7321
|
+
detached: true,
|
|
7322
|
+
});
|
|
7323
|
+
child.unref();
|
|
7324
|
+
}
|
|
7281
7325
|
process.exit(0);
|
|
7282
7326
|
}
|
|
7283
7327
|
process.on("SIGINT", () => { gracefulShutdown("SIGINT"); });
|
|
7284
7328
|
process.on("SIGTERM", () => { gracefulShutdown("SIGTERM"); });
|
|
7329
|
+
// ── Self-restart: watch for restart signal from autonomous agents ──────────
|
|
7330
|
+
// When an agent builds new code and writes brain/.restart-requested,
|
|
7331
|
+
// the server gracefully shuts down and re-execs itself with the same args.
|
|
7332
|
+
// This is event-driven (fs.watch), not a timer.
|
|
7333
|
+
import { watch as fsWatch, unlinkSync } from "node:fs";
|
|
7334
|
+
try {
|
|
7335
|
+
const restartSignalDir = BRAIN_DIR;
|
|
7336
|
+
const restartWatcher = fsWatch(restartSignalDir, { persistent: false }, (_, filename) => {
|
|
7337
|
+
if (filename === ".restart-requested") {
|
|
7338
|
+
log.info("Restart signal detected — graceful restart in progress");
|
|
7339
|
+
logActivity({ source: "system", summary: "Self-restart triggered by agent build", actionLabel: "AUTONOMOUS", reason: "agent wrote .restart-requested" });
|
|
7340
|
+
try {
|
|
7341
|
+
unlinkSync(join(BRAIN_DIR, ".restart-requested"));
|
|
7342
|
+
}
|
|
7343
|
+
catch { }
|
|
7344
|
+
restartWatcher.close();
|
|
7345
|
+
// Graceful shutdown then re-exec
|
|
7346
|
+
gracefulShutdown("self-restart").then(() => { }).catch(() => {
|
|
7347
|
+
// gracefulShutdown calls process.exit(0), but if it doesn't:
|
|
7348
|
+
process.exit(0);
|
|
7349
|
+
});
|
|
7350
|
+
}
|
|
7351
|
+
});
|
|
7352
|
+
}
|
|
7353
|
+
catch {
|
|
7354
|
+
// Non-fatal — restart signal just won't work
|
|
7355
|
+
}
|
|
7285
7356
|
// Crash diagnostics — write to file since terminal output may be lost on tsx watch restart
|
|
7286
7357
|
process.on("uncaughtException", (err) => {
|
|
7287
7358
|
const msg = `[${new Date().toISOString()}] UNCAUGHT: ${err.stack ?? err.message}\n`;
|