@schlessera/brain-ui-server 0.34.0 → 0.35.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/README.md +28 -0
- package/dist/activity/notify.d.ts.map +1 -1
- package/dist/activity/notify.js +18 -8
- package/dist/activity/notify.js.map +1 -1
- package/dist/activity/push-sender.d.ts +7 -3
- package/dist/activity/push-sender.d.ts.map +1 -1
- package/dist/activity/push-sender.js +45 -11
- package/dist/activity/push-sender.js.map +1 -1
- package/dist/activity/query.d.ts.map +1 -1
- package/dist/activity/query.js +8 -0
- package/dist/activity/query.js.map +1 -1
- package/dist/activity/recorder.d.ts +11 -1
- package/dist/activity/recorder.d.ts.map +1 -1
- package/dist/activity/recorder.js +52 -2
- package/dist/activity/recorder.js.map +1 -1
- package/dist/activity/runtime.d.ts.map +1 -1
- package/dist/activity/runtime.js +2 -5
- package/dist/activity/runtime.js.map +1 -1
- package/dist/activity/sql.d.ts +34 -0
- package/dist/activity/sql.d.ts.map +1 -0
- package/dist/activity/sql.js +114 -0
- package/dist/activity/sql.js.map +1 -0
- package/dist/activity/store.d.ts +7 -0
- package/dist/activity/store.d.ts.map +1 -1
- package/dist/activity/store.js +48 -113
- package/dist/activity/store.js.map +1 -1
- package/dist/activity/stream.d.ts +3 -1
- package/dist/activity/stream.d.ts.map +1 -1
- package/dist/activity/stream.js +32 -17
- package/dist/activity/stream.js.map +1 -1
- package/dist/app-env.d.ts +8 -0
- package/dist/app-env.d.ts.map +1 -0
- package/dist/app-env.js +2 -0
- package/dist/app-env.js.map +1 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +28 -3
- package/dist/app.js.map +1 -1
- package/dist/brain/client.d.ts +4 -2
- package/dist/brain/client.d.ts.map +1 -1
- package/dist/brain/client.js +60 -20
- package/dist/brain/client.js.map +1 -1
- package/dist/brain/types.d.ts +9 -0
- package/dist/brain/types.d.ts.map +1 -1
- package/dist/cron/run-job.d.ts.map +1 -1
- package/dist/cron/run-job.js +60 -10
- package/dist/cron/run-job.js.map +1 -1
- package/dist/db/principals.d.ts +72 -0
- package/dist/db/principals.d.ts.map +1 -0
- package/dist/db/principals.js +294 -0
- package/dist/db/principals.js.map +1 -0
- package/dist/files/walker.d.ts.map +1 -1
- package/dist/files/walker.js +6 -1
- package/dist/files/walker.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/middleware/auth.d.ts +37 -9
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +148 -74
- package/dist/middleware/auth.js.map +1 -1
- package/dist/middleware/passkeys.d.ts +9 -7
- package/dist/middleware/passkeys.d.ts.map +1 -1
- package/dist/middleware/passkeys.js +25 -7
- package/dist/middleware/passkeys.js.map +1 -1
- package/dist/middleware/principals.d.ts +18 -0
- package/dist/middleware/principals.d.ts.map +1 -0
- package/dist/middleware/principals.js +138 -0
- package/dist/middleware/principals.js.map +1 -0
- package/dist/middleware/require-owner.d.ts +5 -0
- package/dist/middleware/require-owner.d.ts.map +1 -0
- package/dist/middleware/require-owner.js +10 -0
- package/dist/middleware/require-owner.js.map +1 -0
- package/dist/observability/loggers.js +1 -1
- package/dist/observability/loggers.js.map +1 -1
- package/dist/routes/activity.d.ts.map +1 -1
- package/dist/routes/activity.js +3 -0
- package/dist/routes/activity.js.map +1 -1
- package/dist/routes/brain.d.ts.map +1 -1
- package/dist/routes/brain.js +102 -63
- package/dist/routes/brain.js.map +1 -1
- package/dist/routes/files.d.ts.map +1 -1
- package/dist/routes/files.js +7 -2
- package/dist/routes/files.js.map +1 -1
- package/dist/routes/push.d.ts +61 -2
- package/dist/routes/push.d.ts.map +1 -1
- package/dist/routes/push.js +8 -3
- package/dist/routes/push.js.map +1 -1
- package/dist/routes/sessions.d.ts.map +1 -1
- package/dist/routes/sessions.js +30 -4
- package/dist/routes/sessions.js.map +1 -1
- package/dist/share/staging.d.ts.map +1 -1
- package/dist/share/staging.js +11 -4
- package/dist/share/staging.js.map +1 -1
- package/dist/ws/bridge.d.ts.map +1 -1
- package/dist/ws/bridge.js +6 -2
- package/dist/ws/bridge.js.map +1 -1
- package/dist/ws/clients.d.ts +9 -2
- package/dist/ws/clients.d.ts.map +1 -1
- package/dist/ws/clients.js +44 -6
- package/dist/ws/clients.js.map +1 -1
- package/dist/ws/connection.d.ts +7 -4
- package/dist/ws/connection.d.ts.map +1 -1
- package/dist/ws/connection.js +83 -12
- package/dist/ws/connection.js.map +1 -1
- package/dist/ws/dispatch.d.ts +12 -1
- package/dist/ws/dispatch.d.ts.map +1 -1
- package/dist/ws/dispatch.js +46 -6
- package/dist/ws/dispatch.js.map +1 -1
- package/dist/ws/history.d.ts.map +1 -1
- package/dist/ws/history.js +7 -5
- package/dist/ws/history.js.map +1 -1
- package/dist/ws/host.d.ts +22 -0
- package/dist/ws/host.d.ts.map +1 -1
- package/dist/ws/host.js +39 -1
- package/dist/ws/host.js.map +1 -1
- package/dist/ws/run-session.d.ts +7 -7
- package/dist/ws/run-session.d.ts.map +1 -1
- package/dist/ws/run-session.js +208 -52
- package/dist/ws/run-session.js.map +1 -1
- package/dist/ws/shrink.d.ts +3 -1
- package/dist/ws/shrink.d.ts.map +1 -1
- package/dist/ws/shrink.js +46 -16
- package/dist/ws/shrink.js.map +1 -1
- package/dist/ws/turns.d.ts +58 -3
- package/dist/ws/turns.d.ts.map +1 -1
- package/dist/ws/turns.js +101 -2
- package/dist/ws/turns.js.map +1 -1
- package/migrations/011_principals.sql +13 -0
- package/migrations/012_activity_principals.sql +12 -0
- package/migrations/013_push_subscription_principals.sql +7 -0
- package/migrations/014_invalidate_legacy_sessions.sql +14 -0
- package/package.json +3 -3
- package/src/activity/notify.ts +16 -7
- package/src/activity/push-sender.ts +79 -16
- package/src/activity/query.ts +8 -0
- package/src/activity/recorder.ts +68 -3
- package/src/activity/runtime.ts +2 -5
- package/src/activity/sql.ts +122 -0
- package/src/activity/store.ts +73 -155
- package/src/activity/stream.ts +37 -17
- package/src/app-env.ts +8 -0
- package/src/app.ts +33 -4
- package/src/brain/client.ts +61 -20
- package/src/brain/types.ts +10 -0
- package/src/cron/run-job.ts +41 -17
- package/src/db/principals.ts +452 -0
- package/src/files/walker.ts +5 -1
- package/src/index.ts +6 -1
- package/src/middleware/auth.ts +241 -81
- package/src/middleware/passkeys.ts +35 -14
- package/src/middleware/principals.ts +189 -0
- package/src/middleware/require-owner.ts +13 -0
- package/src/observability/loggers.ts +1 -1
- package/src/routes/activity.ts +3 -0
- package/src/routes/brain.ts +107 -70
- package/src/routes/files.ts +10 -5
- package/src/routes/push.ts +11 -5
- package/src/routes/sessions.ts +45 -20
- package/src/share/staging.ts +11 -4
- package/src/ws/bridge.ts +14 -2
- package/src/ws/clients.ts +52 -7
- package/src/ws/connection.ts +98 -20
- package/src/ws/dispatch.ts +66 -6
- package/src/ws/history.ts +7 -5
- package/src/ws/host.ts +59 -1
- package/src/ws/run-session.ts +247 -74
- package/src/ws/shrink.ts +48 -14
- package/src/ws/turns.ts +136 -5
package/dist/brain/client.js
CHANGED
|
@@ -95,22 +95,44 @@ export function probeBrainCliVersion(brainPath, log) {
|
|
|
95
95
|
`or newer is required; bump the brain repo's @schlessera/brain pin before deploying.`);
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
|
+
/** Interactive search must finish or fail within a bounded time. */
|
|
99
|
+
const SEARCH_TIMEOUT_MS = 15_000;
|
|
98
100
|
export function createBrainClient(opts) {
|
|
99
101
|
const { brainPath } = opts;
|
|
100
|
-
|
|
102
|
+
const searchTimeoutMs = opts.searchTimeoutMs ?? SEARCH_TIMEOUT_MS;
|
|
103
|
+
if (!Number.isFinite(searchTimeoutMs) || searchTimeoutMs <= 0) {
|
|
104
|
+
throw new Error("searchTimeoutMs must be a positive finite number");
|
|
105
|
+
}
|
|
106
|
+
async function execBrain(args, signal) {
|
|
107
|
+
signal?.throwIfAborted();
|
|
101
108
|
const proc = Bun.spawn([...brainCliCommand(brainPath), ...args], {
|
|
102
109
|
cwd: brainPath,
|
|
103
110
|
stdout: "pipe",
|
|
104
111
|
stderr: "pipe",
|
|
105
112
|
// Force JSON output when not a TTY
|
|
106
113
|
env: subprocessEnv("brainCli", { NO_COLOR: "1" }),
|
|
114
|
+
// Only read-only search passes a signal. Kill even a CLI that ignores
|
|
115
|
+
// SIGTERM; abandoning a request must not leave the local process alive.
|
|
116
|
+
...(signal ? { signal, killSignal: "SIGKILL" } : {}),
|
|
107
117
|
});
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
118
|
+
try {
|
|
119
|
+
const [stdout, stderr, exitCode] = await Promise.all([
|
|
120
|
+
new Response(proc.stdout).text(),
|
|
121
|
+
new Response(proc.stderr).text(),
|
|
122
|
+
proc.exited,
|
|
123
|
+
]);
|
|
124
|
+
signal?.throwIfAborted();
|
|
125
|
+
return { stdout, stderr, exitCode };
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
// A pipe-read failure also abandons search. Reap before its caller
|
|
129
|
+
// clears the deadline; otherwise that failure could orphan the child.
|
|
130
|
+
if (signal) {
|
|
131
|
+
proc.kill("SIGKILL");
|
|
132
|
+
await proc.exited;
|
|
133
|
+
}
|
|
134
|
+
throw error;
|
|
135
|
+
}
|
|
114
136
|
}
|
|
115
137
|
function parseJsonOutput(result) {
|
|
116
138
|
if (result.exitCode !== 0) {
|
|
@@ -128,21 +150,31 @@ export function createBrainClient(opts) {
|
|
|
128
150
|
cliCommand() {
|
|
129
151
|
return brainCliCommand(brainPath);
|
|
130
152
|
},
|
|
131
|
-
async search(query,
|
|
153
|
+
async search(query, searchOpts) {
|
|
132
154
|
const args = ["search"];
|
|
133
|
-
if (
|
|
134
|
-
args.push("--type",
|
|
135
|
-
if (
|
|
136
|
-
args.push("--tag",
|
|
137
|
-
if (
|
|
138
|
-
args.push("--limit", String(
|
|
139
|
-
if (
|
|
140
|
-
args.push("--mode",
|
|
155
|
+
if (searchOpts?.type)
|
|
156
|
+
args.push("--type", searchOpts.type);
|
|
157
|
+
if (searchOpts?.tag)
|
|
158
|
+
args.push("--tag", searchOpts.tag);
|
|
159
|
+
if (searchOpts?.limit)
|
|
160
|
+
args.push("--limit", String(searchOpts.limit));
|
|
161
|
+
if (searchOpts?.mode)
|
|
162
|
+
args.push("--mode", searchOpts.mode);
|
|
141
163
|
args.push("--", query);
|
|
142
|
-
const
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
164
|
+
const deadline = new AbortController();
|
|
165
|
+
const timer = setTimeout(() => deadline.abort(new DOMException("Search timed out. Please try again.", "TimeoutError")), searchTimeoutMs);
|
|
166
|
+
const signal = searchOpts?.signal
|
|
167
|
+
? AbortSignal.any([searchOpts.signal, deadline.signal])
|
|
168
|
+
: deadline.signal;
|
|
169
|
+
try {
|
|
170
|
+
const result = await execBrain(args, signal);
|
|
171
|
+
const parsed = parseJsonOutput(result);
|
|
172
|
+
// brain returns {results, warnings} since 22e82e1; tolerate the old bare array
|
|
173
|
+
return Array.isArray(parsed) ? { results: parsed, warnings: [] } : parsed;
|
|
174
|
+
}
|
|
175
|
+
finally {
|
|
176
|
+
clearTimeout(timer);
|
|
177
|
+
}
|
|
146
178
|
},
|
|
147
179
|
async briefing() {
|
|
148
180
|
const result = await execBrain(["briefing"]);
|
|
@@ -214,6 +246,14 @@ export function createBrainClient(opts) {
|
|
|
214
246
|
if (result.exitCode !== 0) {
|
|
215
247
|
throw new Error(`brain add failed: ${result.stderr}`);
|
|
216
248
|
}
|
|
249
|
+
const parsed = parseJsonOutput(result);
|
|
250
|
+
if (!parsed || typeof parsed !== "object" || typeof parsed.path !== "string" ||
|
|
251
|
+
typeof parsed.indexed !== "boolean" || typeof parsed.title !== "string" ||
|
|
252
|
+
typeof parsed.type !== "string" || (parsed.indexError !== undefined && typeof parsed.indexError !== "string") ||
|
|
253
|
+
!["created", "appended"].includes(parsed.action)) {
|
|
254
|
+
throw new Error("Capture completed but its outcome could not be read. Check your files before adding it again.");
|
|
255
|
+
}
|
|
256
|
+
return parsed;
|
|
217
257
|
},
|
|
218
258
|
async index(opts) {
|
|
219
259
|
const args = ["index"];
|
package/dist/brain/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/brain/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/brain/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAiDjD;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,QAAQ,CAAC;AAE9C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAClE,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;AACzC,CAAC;AASD,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;IACvB,+DAA+D;IAC/D,sEAAsE;IACtE,uEAAuE;IACvE,oEAAoE;IACpE,qLAAqL,CACtL,CAAC;IACF,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS;KACnC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAoB,EAAE,OAAsB;IAClE,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAU,EAAE,CAAC;QACvD,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,KAAK,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;AACjD,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,oBAAoB,CAAC,SAAiB,EAAE,GAAW;IACjE,IAAI,MAAwC,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,EAAE;YACnE,GAAG,EAAE,SAAS;YACd,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,aAAa,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;YACjD,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,IAAI,CAAC;YACP,YAAY,EAAE,MAAM;YACpB,IAAI,EAAE,4CAA4C;YAClD,UAAU,EAAE;gBACV,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC/D;SACF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,GAAG,CAAC,IAAI,CAAC;YACP,YAAY,EAAE,MAAM;YACpB,IAAI,EAAE,4CAA4C;YAClD,UAAU,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE;SAC7C,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACjE,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,YAAY,CAAC,qBAAqB,CAAE,CAAC;IACrD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,GAAG,CAAC,IAAI,CAAC;YACP,YAAY,EAAE,MAAM;YACpB,IAAI,EAAE,uDAAuD;YAC7D,UAAU,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;SACnC,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAI,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,qBAAqB,SAAS,6BAA6B,qBAAqB,GAAG;YACjF,qFAAqF,CACxF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,oEAAoE;AACpE,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEjC,MAAM,UAAU,iBAAiB,CAAC,IAAqD;IACrF,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,iBAAiB,CAAC;IAClE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,eAAe,IAAI,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,UAAU,SAAS,CAAC,IAAc,EAAE,MAAoB;QAC3D,MAAM,EAAE,cAAc,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;YAC/D,GAAG,EAAE,SAAS;YACd,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,MAAM;YACd,mCAAmC;YACnC,GAAG,EAAE,aAAa,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;YACjD,sEAAsE;YACtE,wEAAwE;YACxE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrD,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACnD,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;gBAChC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;gBAChC,IAAI,CAAC,MAAM;aACZ,CAAC,CAAC;YACH,MAAM,EAAE,cAAc,EAAE,CAAC;YACzB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mEAAmE;YACnE,sEAAsE;YACtE,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACrB,MAAM,IAAI,CAAC,MAAM,CAAC;YACpB,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,SAAS,eAAe,CAAI,MAAkB;QAC5C,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,0BAA0B,MAAM,CAAC,QAAQ,MAAM,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAChF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,4CAA4C;YAC5C,OAAO,MAAM,CAAC,MAAsB,CAAC;QACvC,CAAC;IACH,CAAC;IAED,OAAO;QACL,UAAU;YACR,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU;YAC5B,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,IAAI,UAAU,EAAE,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;YAC3D,IAAI,UAAU,EAAE,GAAG;gBAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;YACxD,IAAI,UAAU,EAAE,KAAK;gBAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YACtE,IAAI,UAAU,EAAE,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAEvB,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAC3C,IAAI,YAAY,CAAC,qCAAqC,EAAE,cAAc,CAAC,CACxE,EAAE,eAAe,CAAC,CAAC;YACpB,MAAM,MAAM,GAAG,UAAU,EAAE,MAAM;gBAC/B,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACvD,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC7C,MAAM,MAAM,GAAG,eAAe,CAA4C,MAAM,CAAC,CAAC;gBAClF,+EAA+E;gBAC/E,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YAC5E,CAAC;oBAAS,CAAC;gBACT,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QAED,KAAK,CAAC,QAAQ;YACZ,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;YAC7C,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;QAED,KAAK,CAAC,KAAK;YACT,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1C,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,IAAI;YACb,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;YACtB,IAAI,IAAI,EAAE,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,IAAI,EAAE,GAAG;gBAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,IAAI,EAAE,MAAM;gBAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,IAAI,EAAE,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9D,IAAI,IAAI,EAAE,KAAK;gBAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAE1D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;YACrC,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,IAAI;YACb,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACrD,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;QAED,KAAK,CAAC,IAAI;YACR,sEAAsE;YACtE,0DAA0D;YAC1D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACzC,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,CAAC;oBACV,SAAS,EAAE,CAAC;oBACZ,OAAO,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM;iBACxC,CAAC;YACJ,CAAC;YACD,IAAI,CAAC;gBACH,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,CAAC;oBACV,SAAS,EAAE,CAAC;oBACZ,OAAO,EAAE,MAAM,CAAC,MAAM;iBACvB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI;YACrB,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;YACrB,IAAI,IAAI,EAAE,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,IAAI,EAAE,KAAK;gBAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,IAAI,EAAE,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACzD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEzB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,MAAM,GAAG,eAAe,CAAiB,MAAM,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;gBACxE,OAAO,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;gBACvE,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC;gBAC7G,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrD,MAAM,IAAI,KAAK,CAAC,+FAA+F,CAAC,CAAC;YACnH,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,IAAI;YACd,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,wEAAwE;YACxE,IAAI,IAAI,EAAE,KAAK;gBAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEtC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,uBAAuB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAED,KAAK,CAAC,UAAU;YACd,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;YACnD,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CACb,kCAAkC,MAAM,CAAC,QAAQ,MAAM,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CACxF,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;QAED,KAAK,CAAC,QAAQ;YACZ,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;YAC7C,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/brain/types.d.ts
CHANGED
|
@@ -38,4 +38,13 @@ export interface BrainSyncResult {
|
|
|
38
38
|
conflicts: number;
|
|
39
39
|
message: string;
|
|
40
40
|
}
|
|
41
|
+
/** Outcome of saving content, including a recoverable indexing failure. */
|
|
42
|
+
export interface BrainAddResult {
|
|
43
|
+
action: "created" | "appended";
|
|
44
|
+
path: string;
|
|
45
|
+
title: string;
|
|
46
|
+
type: string;
|
|
47
|
+
indexed: boolean;
|
|
48
|
+
indexError?: string;
|
|
49
|
+
}
|
|
41
50
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/brain/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,kGAAkG;IAClG,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/brain/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,kGAAkG;IAClG,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,2EAA2E;AAC3E,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-job.d.ts","sourceRoot":"","sources":["../../src/cron/run-job.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-job.d.ts","sourceRoot":"","sources":["../../src/cron/run-job.ts"],"names":[],"mappings":"AAaA,2DAA2D;AAC3D,eAAO,MAAM,iBAAiB,OAAQ,CAAC;AACvC,gFAAgF;AAChF,eAAO,MAAM,iBAAiB,OAAQ,CAAC;AACvC,kFAAkF;AAClF,eAAO,MAAM,YAAY,QAAS,CAAC;AACnC,gEAAgE;AAChE,eAAO,MAAM,aAAa,6BAA6B,CAAC;AAExD,UAAU,QAAQ;IAChB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CAC9B;AAED,UAAU,UAAU;IAClB,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,UAAU,WAAW;IACnB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1E,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC7C,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,MAAM,CAAC,EAAE,QAAQ,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,CACN,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE;QACP,KAAK,EAAE,SAAS,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;KACzC,KACE,UAAU,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,CACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,KACb,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAUD,gFAAgF;AAChF,wBAAsB,SAAS,CAC7B,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,EAClC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC7B,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,sDAAsD;AACtD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7E;AAkGD,gFAAgF;AAChF,wBAAsB,MAAM,CAC1B,OAAO,EAAE,aAAa,EACtB,YAAY,GAAE,kBAAuB,GACpC,OAAO,CAAC,MAAM,CAAC,CA4EjB"}
|
package/dist/cron/run-job.js
CHANGED
|
@@ -7,6 +7,7 @@ import { unlinkSync } from "fs";
|
|
|
7
7
|
import { ingestSpanSink } from "../activity/span-sink.js";
|
|
8
8
|
import { createActivityStore } from "../activity/store.js";
|
|
9
9
|
import { createUiDb } from "../db/client.js";
|
|
10
|
+
import { resolveSystemPrincipal } from "../db/principals.js";
|
|
10
11
|
import { recordCronRun } from "./scheduler.js";
|
|
11
12
|
/** Tail of stderr retained for the cron_runs error row. */
|
|
12
13
|
export const STDERR_TAIL_CHARS = 2_000;
|
|
@@ -20,26 +21,48 @@ function messageOf(error) {
|
|
|
20
21
|
return error instanceof Error ? error.message : String(error);
|
|
21
22
|
}
|
|
22
23
|
function writeLine(sink, text) {
|
|
23
|
-
|
|
24
|
+
try {
|
|
25
|
+
sink.write(`${text}\n`);
|
|
26
|
+
}
|
|
27
|
+
catch { /* Logging cannot stop the job. */ }
|
|
24
28
|
}
|
|
25
29
|
/** Forward a stream verbatim while exposing decoded chunks for tail capture. */
|
|
26
30
|
export async function teeStream(stream, sink, onText) {
|
|
27
31
|
const decoder = new TextDecoder();
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
sink.write(text);
|
|
32
|
+
let forwarding = true;
|
|
33
|
+
const forward = async (text) => {
|
|
31
34
|
onText(text);
|
|
35
|
+
if (!forwarding)
|
|
36
|
+
return;
|
|
37
|
+
try {
|
|
38
|
+
await sink.write(text);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
forwarding = false;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
for await (const chunk of stream) {
|
|
45
|
+
await forward(decoder.decode(chunk, { stream: true }));
|
|
32
46
|
}
|
|
47
|
+
const trailing = decoder.decode();
|
|
48
|
+
if (trailing)
|
|
49
|
+
await forward(trailing);
|
|
33
50
|
}
|
|
34
51
|
/** Keep the last `cap` characters, never the head. */
|
|
35
52
|
export function appendTail(current, text, cap) {
|
|
36
53
|
return (current + text).slice(-cap);
|
|
37
54
|
}
|
|
38
55
|
async function startRecord(name, sinkPath, command, dbPath, stderr) {
|
|
56
|
+
let db;
|
|
39
57
|
try {
|
|
40
|
-
|
|
58
|
+
db = createUiDb(dbPath);
|
|
59
|
+
const openedDb = db;
|
|
41
60
|
const record = recordCronRun(db, name);
|
|
42
61
|
const store = createActivityStore(db, { writer: `cron:${process.pid}` });
|
|
62
|
+
const principal = resolveSystemPrincipal(db, {
|
|
63
|
+
identity: "scheduled-jobs",
|
|
64
|
+
label: "Scheduled jobs",
|
|
65
|
+
});
|
|
43
66
|
const runId = `cron-${name}-${Date.now()}`;
|
|
44
67
|
const rootSpanId = `${runId}:root`;
|
|
45
68
|
store.startSpan({
|
|
@@ -49,6 +72,7 @@ async function startRecord(name, sinkPath, command, dbPath, stderr) {
|
|
|
49
72
|
kind: "cron",
|
|
50
73
|
origin: "cron",
|
|
51
74
|
jobName: name,
|
|
75
|
+
principalId: principal.id,
|
|
52
76
|
});
|
|
53
77
|
let sinkOffset = 0;
|
|
54
78
|
const ingest = () => {
|
|
@@ -102,11 +126,15 @@ async function startRecord(name, sinkPath, command, dbPath, stderr) {
|
|
|
102
126
|
},
|
|
103
127
|
close() {
|
|
104
128
|
clearInterval(heartbeat);
|
|
105
|
-
|
|
129
|
+
openedDb.close();
|
|
106
130
|
},
|
|
107
131
|
};
|
|
108
132
|
}
|
|
109
133
|
catch (error) {
|
|
134
|
+
try {
|
|
135
|
+
db?.close();
|
|
136
|
+
}
|
|
137
|
+
catch { /* Preserve fail-open tracking. */ }
|
|
110
138
|
writeLine(stderr, `[cron-run] tracking unavailable (job runs anyway): ${messageOf(error)}`);
|
|
111
139
|
return null;
|
|
112
140
|
}
|
|
@@ -118,7 +146,13 @@ export async function runJob(options, dependencies = {}) {
|
|
|
118
146
|
const sinkPath = dependencies.sinkPath ??
|
|
119
147
|
`/tmp/brain-activity-sink-${process.pid}-${Date.now()}.jsonl`;
|
|
120
148
|
const beginRecord = dependencies.startRecord ?? startRecord;
|
|
121
|
-
|
|
149
|
+
let recorder = null;
|
|
150
|
+
try {
|
|
151
|
+
recorder = await beginRecord(options.jobName, sinkPath, options.command, options.dbPath, stderr);
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
writeLine(stderr, `[cron-run] tracking unavailable (job runs anyway): ${messageOf(error)}`);
|
|
155
|
+
}
|
|
122
156
|
let exitCode;
|
|
123
157
|
let errorMessage;
|
|
124
158
|
let outputTail = "";
|
|
@@ -131,7 +165,7 @@ export async function runJob(options, dependencies = {}) {
|
|
|
131
165
|
env: { ...options.childEnv, [SPAN_SINK_ENV]: sinkPath },
|
|
132
166
|
});
|
|
133
167
|
let stderrTail = "";
|
|
134
|
-
await Promise.
|
|
168
|
+
const outcomes = await Promise.allSettled([
|
|
135
169
|
teeStream(proc.stdout, stdout, (text) => {
|
|
136
170
|
outputTail = appendTail(outputTail, text, OUTPUT_TAIL_CHARS);
|
|
137
171
|
}),
|
|
@@ -139,8 +173,17 @@ export async function runJob(options, dependencies = {}) {
|
|
|
139
173
|
stderrTail = appendTail(stderrTail, text, STDERR_TAIL_CHARS);
|
|
140
174
|
outputTail = appendTail(outputTail, text, OUTPUT_TAIL_CHARS);
|
|
141
175
|
}),
|
|
176
|
+
proc.exited,
|
|
142
177
|
]);
|
|
143
|
-
|
|
178
|
+
for (const outcome of outcomes.slice(0, 2)) {
|
|
179
|
+
if (outcome.status === "rejected") {
|
|
180
|
+
writeLine(stderr, `[cron-run] output capture failed: ${messageOf(outcome.reason)}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const child = outcomes[2];
|
|
184
|
+
if (child.status === "rejected")
|
|
185
|
+
throw child.reason;
|
|
186
|
+
exitCode = child.value;
|
|
144
187
|
if (exitCode !== 0) {
|
|
145
188
|
const cause = proc.signalCode ? `killed by ${proc.signalCode}` : `exit code ${exitCode}`;
|
|
146
189
|
const trimmedTail = stderrTail.trim();
|
|
@@ -155,11 +198,18 @@ export async function runJob(options, dependencies = {}) {
|
|
|
155
198
|
if (recorder) {
|
|
156
199
|
try {
|
|
157
200
|
recorder.finish(errorMessage, outputTail.trim(), exitCode);
|
|
158
|
-
recorder.close();
|
|
159
201
|
}
|
|
160
202
|
catch (error) {
|
|
161
203
|
writeLine(stderr, `[cron-run] failed to record run outcome: ${messageOf(error)}`);
|
|
162
204
|
}
|
|
205
|
+
finally {
|
|
206
|
+
try {
|
|
207
|
+
recorder.close();
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
writeLine(stderr, `[cron-run] failed to close tracking: ${messageOf(error)}`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
163
213
|
}
|
|
164
214
|
try {
|
|
165
215
|
(dependencies.removeSink ?? unlinkSync)(sinkPath);
|
package/dist/cron/run-job.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-job.js","sourceRoot":"","sources":["../../src/cron/run-job.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,2DAA2D;AAC3D,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC;AACvC,gFAAgF;AAChF,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC;AACvC,kFAAkF;AAClF,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC;AACnC,gEAAgE;AAChE,MAAM,CAAC,MAAM,aAAa,GAAG,0BAA0B,CAAC;AAgDxD,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,SAAS,CAAC,IAAc,EAAE,IAAY;IAC7C,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"run-job.js","sourceRoot":"","sources":["../../src/cron/run-job.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { Database } from "bun:sqlite";
|
|
2
|
+
export declare const MAX_LIVE_PRINCIPALS = 100;
|
|
3
|
+
export declare const PRINCIPAL_RETENTION_MS: number;
|
|
4
|
+
export declare const PRINCIPAL_PRUNE_INTERVAL_MS: number;
|
|
5
|
+
export declare const LAST_SEEN_WRITE_INTERVAL_MS = 60000;
|
|
6
|
+
export type PrincipalKind = "owner" | "agent" | "ambient" | "system";
|
|
7
|
+
export type PrincipalAuthMethod = "password" | "passkey" | "delegated" | "ambient";
|
|
8
|
+
export type AmbientPrincipalSource = "none" | "proxy" | "tailscale";
|
|
9
|
+
export interface Principal {
|
|
10
|
+
id: string;
|
|
11
|
+
kind: PrincipalKind;
|
|
12
|
+
authMethod: PrincipalAuthMethod;
|
|
13
|
+
label: string;
|
|
14
|
+
credentialId: string | null;
|
|
15
|
+
createdBy: string | null;
|
|
16
|
+
createdAt: number;
|
|
17
|
+
expiresAt: number;
|
|
18
|
+
lastSeenAt: number | null;
|
|
19
|
+
revokedAt: number | null;
|
|
20
|
+
}
|
|
21
|
+
export interface CreatePrincipalInput {
|
|
22
|
+
authMethod: Exclude<PrincipalAuthMethod, "ambient">;
|
|
23
|
+
label: string;
|
|
24
|
+
credentialId?: string;
|
|
25
|
+
createdBy?: string;
|
|
26
|
+
ttlSeconds: number;
|
|
27
|
+
}
|
|
28
|
+
export interface ResolveSystemPrincipalInput {
|
|
29
|
+
identity: string;
|
|
30
|
+
label: string;
|
|
31
|
+
}
|
|
32
|
+
export declare class PrincipalLimitError extends Error {
|
|
33
|
+
constructor();
|
|
34
|
+
}
|
|
35
|
+
export declare class PrincipalCredentialNotFoundError extends Error {
|
|
36
|
+
constructor(credentialId: string);
|
|
37
|
+
}
|
|
38
|
+
export declare class PrincipalCreatorNotUsableError extends Error {
|
|
39
|
+
constructor(createdBy: string | undefined);
|
|
40
|
+
}
|
|
41
|
+
export declare function createPrincipal(db: Database, input: CreatePrincipalInput): Principal;
|
|
42
|
+
/**
|
|
43
|
+
* Resolve the durable attribution row for an ambient authorization identity.
|
|
44
|
+
* The id is deterministic per mode and full identity so repeated requests —
|
|
45
|
+
* including concurrent first requests — cannot grow one row per authorization
|
|
46
|
+
* check, while bounded display-label collisions remain distinct.
|
|
47
|
+
*/
|
|
48
|
+
export declare function resolveAmbientPrincipal(db: Database, source: AmbientPrincipalSource, identity: string, label: string): Principal;
|
|
49
|
+
/** Resolve the durable attribution row for a non-cookie system identity. */
|
|
50
|
+
export declare function resolveSystemPrincipal(db: Database, input: ResolveSystemPrincipalInput): Principal;
|
|
51
|
+
export declare function resolvePrincipal(db: Database, id: string): Principal | null;
|
|
52
|
+
/** List currently usable cookie-bearing principals, newest first. */
|
|
53
|
+
export declare function listLivePrincipals(db: Database, now: number): Principal[];
|
|
54
|
+
export declare function isUsablePrincipal(row: Principal, now: number): boolean;
|
|
55
|
+
/** Whether this principal kind may be carried by an authenticated cookie. */
|
|
56
|
+
export declare function isCookieBearingPrincipal(principal: Principal): principal is Principal & {
|
|
57
|
+
kind: "owner" | "agent";
|
|
58
|
+
};
|
|
59
|
+
/** Whether a stored last_seen_at is old enough to be worth a write. */
|
|
60
|
+
export declare function isLastSeenStale(lastSeenAt: number | null, now: number): boolean;
|
|
61
|
+
export declare function touchLastSeen(db: Database, id: string, now: number): void;
|
|
62
|
+
export declare function revokePrincipal(db: Database, id: string, now: number): string[];
|
|
63
|
+
export declare function revokeAllPrincipals(db: Database, now: number): string[];
|
|
64
|
+
export declare function revokeByCredential(db: Database, credentialId: string, now: number): string[];
|
|
65
|
+
export declare function prunePrincipals(db: Database, now: number): void;
|
|
66
|
+
/**
|
|
67
|
+
* Run principal retention at most once per database per process interval.
|
|
68
|
+
* Authentication paths call this cheaply; only the due call reaches SQLite.
|
|
69
|
+
*/
|
|
70
|
+
export declare function prunePrincipalsIfDue(db: Database, now: number): boolean;
|
|
71
|
+
export declare function countLivePrincipals(db: Database, now: number): number;
|
|
72
|
+
//# sourceMappingURL=principals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"principals.d.ts","sourceRoot":"","sources":["../../src/db/principals.ts"],"names":[],"mappings":"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"}
|