@justfortytwo/scheduler 1.0.0-3 → 1.0.0-4
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 +10 -1
- package/dist/conversation-log.d.ts +18 -0
- package/dist/conversation-log.js +20 -0
- package/dist/conversation-log.js.map +1 -0
- package/dist/daemon.d.ts +13 -9
- package/dist/daemon.js +34 -21
- package/dist/daemon.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/notifier.d.ts +3 -3
- package/dist/notifier.js +3 -3
- package/dist/oneiros.d.ts +11 -2
- package/dist/oneiros.js +36 -3
- package/dist/oneiros.js.map +1 -1
- package/package.json +10 -6
package/README.md
CHANGED
|
@@ -96,9 +96,18 @@ MIT © 2026 Enrico Deleo
|
|
|
96
96
|
`persona.oneiros` runs daily at `17 3 * * *` UTC, with null payload and the existing
|
|
97
97
|
durable retry/claim mechanism. Installer seeds it after initializing persona's
|
|
98
98
|
checkpoint; daemon boot reconciles the same job when the checkpoint exists.
|
|
99
|
-
The cheap gate checks the memory head
|
|
99
|
+
The cheap gate checks the memory head and, when the optional `@justfortytwo/transcript`
|
|
100
|
+
peer is installed, the transcript head. Persona validates and applies additions;
|
|
100
101
|
scheduler runs the private prompt through runner in an isolated temporary cwd.
|
|
101
102
|
No tools, MCP, skills or session persistence are enabled, and maintenance emits
|
|
102
103
|
no notification into memory. Authentication/provider configuration is preserved.
|
|
103
104
|
Requires a Claude CLI with `--safe-mode`; unsupported flags fail closed.
|
|
104
105
|
Stop the runtime before upgrading packages and start it again afterwards.
|
|
106
|
+
|
|
107
|
+
## Journal
|
|
108
|
+
|
|
109
|
+
Each job notification is appended to the conversation log (`channel: 'scheduler'`, the
|
|
110
|
+
notification kind in `kind`) when the optional `@justfortytwo/transcript` peer is
|
|
111
|
+
installed; otherwise it is a no-op. It is no longer stored as a memory row
|
|
112
|
+
(`source: 'scheduler:wake'` is retired), so the `learn_review` gate, which counts memory
|
|
113
|
+
rows only, fires less often.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface ConversationEvent {
|
|
2
|
+
channel: string;
|
|
3
|
+
direction: 'inbound' | 'outbound' | 'internal';
|
|
4
|
+
actor: string;
|
|
5
|
+
kind: string;
|
|
6
|
+
content: string;
|
|
7
|
+
threadId?: string | null;
|
|
8
|
+
meta?: Record<string, unknown>;
|
|
9
|
+
}
|
|
10
|
+
export interface ConversationLog {
|
|
11
|
+
append(event: ConversationEvent): Promise<unknown>;
|
|
12
|
+
}
|
|
13
|
+
export declare const noopConversationLog: ConversationLog;
|
|
14
|
+
/**
|
|
15
|
+
* Load the optional @justfortytwo/transcript peer. Any failure (not installed,
|
|
16
|
+
* prepare/create throws) is logged and yields the no-op log.
|
|
17
|
+
*/
|
|
18
|
+
export declare function loadConversationLog(h: unknown, embedder: unknown, importer?: (name: string) => Promise<unknown>): Promise<ConversationLog>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Scheduler's own port for writing the conversation. Structural on purpose:
|
|
2
|
+
// no @justfortytwo/transcript (or memory) types are imported. The
|
|
3
|
+
// implementation is loaded dynamically and degrades to a no-op.
|
|
4
|
+
export const noopConversationLog = { append: async () => undefined };
|
|
5
|
+
/**
|
|
6
|
+
* Load the optional @justfortytwo/transcript peer. Any failure (not installed,
|
|
7
|
+
* prepare/create throws) is logged and yields the no-op log.
|
|
8
|
+
*/
|
|
9
|
+
export async function loadConversationLog(h, embedder, importer = (n) => import(n)) {
|
|
10
|
+
try {
|
|
11
|
+
const mod = (await importer('@justfortytwo/transcript'));
|
|
12
|
+
await mod.prepareTranscript(h);
|
|
13
|
+
return mod.createTranscript(h, embedder);
|
|
14
|
+
}
|
|
15
|
+
catch (e) {
|
|
16
|
+
console.error(`[scheduler] transcript unavailable (${e?.message ?? e}) — journal entries will NOT be recorded.`);
|
|
17
|
+
return noopConversationLog;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=conversation-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-log.js","sourceRoot":"","sources":["../src/conversation-log.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,kEAAkE;AAClE,gEAAgE;AAgBhE,MAAM,CAAC,MAAM,mBAAmB,GAAoB,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;AAOtF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,CAAU,EACV,QAAiB,EACjB,WAA+C,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAE/D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,MAAM,QAAQ,CAAC,0BAA0B,CAAC,CAAqB,CAAC;QAC7E,MAAM,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC/B,OAAO,GAAG,CAAC,gBAAgB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,uCAAwC,CAAW,EAAE,OAAO,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC5H,OAAO,mBAAmB,CAAC;IAC7B,CAAC;AACH,CAAC"}
|
package/dist/daemon.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ConversationLog } from './conversation-log.js';
|
|
1
2
|
import type { Notifier, Registry } from './types.js';
|
|
2
3
|
/** Poll interval: how often `tick` is invoked to drain due jobs. */
|
|
3
4
|
export declare const POLL_MS = 30000;
|
|
@@ -26,6 +27,15 @@ export declare function makePoll(tickFn: () => Promise<void>): {
|
|
|
26
27
|
poll: () => Promise<void>;
|
|
27
28
|
isRunning: () => boolean;
|
|
28
29
|
};
|
|
30
|
+
/**
|
|
31
|
+
* Journal write backed by a ConversationLog. Fire-and-forget (like the
|
|
32
|
+
* telegram bridge): failures, sync or async, are logged to stderr and never
|
|
33
|
+
* propagate, so a broken transcript cannot affect the job or other notifiers.
|
|
34
|
+
*/
|
|
35
|
+
export declare function makeJournalWrite(log: ConversationLog): (n: {
|
|
36
|
+
kind: string;
|
|
37
|
+
text: string;
|
|
38
|
+
}) => Promise<void>;
|
|
29
39
|
export interface DaemonOptions {
|
|
30
40
|
/** Absolute path to the SQLite database file. */
|
|
31
41
|
dbPath: string;
|
|
@@ -50,15 +60,9 @@ export interface DaemonOptions {
|
|
|
50
60
|
* notify (fanout: journal + optional extras), and the injected registry.
|
|
51
61
|
* 4. Starts a 30-second setInterval poll loop with an overlap guard.
|
|
52
62
|
*
|
|
53
|
-
* Journal write: each notification is
|
|
54
|
-
*
|
|
55
|
-
* EMBED_MODEL is set, else FakeEmbedder
|
|
56
|
-
*
|
|
57
|
-
* CONCERN: using FakeEmbedder in production means scheduler-emitted journal
|
|
58
|
-
* entries are not semantically searchable (fake vectors). This matches the
|
|
59
|
-
* bridge's current pattern for channel events and is acceptable for Phase 3.
|
|
60
|
-
* It should be revisited when a persistent embedder is always available (e.g.
|
|
61
|
-
* Phase 4+ where EMBED_MODEL is part of the required env).
|
|
63
|
+
* Journal write: each notification is appended to the ConversationLog
|
|
64
|
+
* (channel 'scheduler', no-op when @justfortytwo/transcript is absent). The
|
|
65
|
+
* embedder is OllamaEmbedder when EMBED_MODEL is set, else FakeEmbedder.
|
|
62
66
|
*
|
|
63
67
|
* @returns A dispose fn that clears the poll interval.
|
|
64
68
|
*/
|
package/dist/daemon.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { resolve } from 'node:path';
|
|
2
|
-
import { makeOneirosHandler, oneirosEnabled, seedOneiros } from './oneiros.js';
|
|
2
|
+
import { loadTranscriptSource, makeOneirosHandler, oneirosEnabled, seedOneiros } from './oneiros.js';
|
|
3
|
+
import { loadConversationLog } from './conversation-log.js';
|
|
3
4
|
import { Cron } from 'croner';
|
|
4
5
|
import PQueue from 'p-queue';
|
|
5
|
-
import { openDb, runMigrations, claimDue, complete, fail, requeueStale, FakeEmbedder, OllamaEmbedder,
|
|
6
|
+
import { openDb, runMigrations, claimDue, complete, fail, requeueStale, FakeEmbedder, OllamaEmbedder, query, reembed, listActive, enqueue, setRecurrence, countPendingApprovals, } from '@justfortytwo/memory';
|
|
6
7
|
import { createRunner } from '@justfortytwo/runner';
|
|
7
8
|
import { tick } from './tick.js';
|
|
8
9
|
import { heartbeatPath, writeHeartbeat } from './heartbeat.js';
|
|
@@ -61,6 +62,29 @@ export function makePoll(tickFn) {
|
|
|
61
62
|
return { poll, isRunning: () => running };
|
|
62
63
|
}
|
|
63
64
|
// ---------------------------------------------------------------------------
|
|
65
|
+
// makeJournalWrite
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
/**
|
|
68
|
+
* Journal write backed by a ConversationLog. Fire-and-forget (like the
|
|
69
|
+
* telegram bridge): failures, sync or async, are logged to stderr and never
|
|
70
|
+
* propagate, so a broken transcript cannot affect the job or other notifiers.
|
|
71
|
+
*/
|
|
72
|
+
export function makeJournalWrite(log) {
|
|
73
|
+
return async (n) => {
|
|
74
|
+
const reportAppendFailure = (e) => {
|
|
75
|
+
process.stderr.write(`fortytwo-scheduler: journal append failed: ${e?.message ?? e}\n`);
|
|
76
|
+
};
|
|
77
|
+
try {
|
|
78
|
+
void Promise.resolve(log.append({
|
|
79
|
+
channel: 'scheduler', direction: 'outbound', actor: 'assistant', kind: n.kind, content: n.text,
|
|
80
|
+
})).catch(reportAppendFailure);
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
reportAppendFailure(e);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
64
88
|
// startDaemon
|
|
65
89
|
// ---------------------------------------------------------------------------
|
|
66
90
|
/**
|
|
@@ -73,15 +97,9 @@ export function makePoll(tickFn) {
|
|
|
73
97
|
* notify (fanout: journal + optional extras), and the injected registry.
|
|
74
98
|
* 4. Starts a 30-second setInterval poll loop with an overlap guard.
|
|
75
99
|
*
|
|
76
|
-
* Journal write: each notification is
|
|
77
|
-
*
|
|
78
|
-
* EMBED_MODEL is set, else FakeEmbedder
|
|
79
|
-
*
|
|
80
|
-
* CONCERN: using FakeEmbedder in production means scheduler-emitted journal
|
|
81
|
-
* entries are not semantically searchable (fake vectors). This matches the
|
|
82
|
-
* bridge's current pattern for channel events and is acceptable for Phase 3.
|
|
83
|
-
* It should be revisited when a persistent embedder is always available (e.g.
|
|
84
|
-
* Phase 4+ where EMBED_MODEL is part of the required env).
|
|
100
|
+
* Journal write: each notification is appended to the ConversationLog
|
|
101
|
+
* (channel 'scheduler', no-op when @justfortytwo/transcript is absent). The
|
|
102
|
+
* embedder is OllamaEmbedder when EMBED_MODEL is set, else FakeEmbedder.
|
|
85
103
|
*
|
|
86
104
|
* @returns A dispose fn that clears the poll interval.
|
|
87
105
|
*/
|
|
@@ -95,25 +113,20 @@ export async function startDaemon(opts) {
|
|
|
95
113
|
const embedder = process.env['EMBED_MODEL']
|
|
96
114
|
? new OllamaEmbedder(process.env['EMBED_MODEL'], process.env['OLLAMA_BASE_URL'])
|
|
97
115
|
: new FakeEmbedder();
|
|
98
|
-
// Journal notifier:
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
content: `[scheduler:${n.kind}] ${n.text}`,
|
|
102
|
-
source: 'scheduler:wake',
|
|
103
|
-
observed: 'internal',
|
|
104
|
-
tags: ['scheduler', n.kind],
|
|
105
|
-
});
|
|
106
|
-
};
|
|
116
|
+
// Journal notifier: appends each Notification to the conversation log.
|
|
117
|
+
const log = await loadConversationLog(h, embedder);
|
|
118
|
+
const journalWrite = makeJournalWrite(log);
|
|
107
119
|
const journalNotifier = createJournalNotifier(journalWrite);
|
|
108
120
|
const allNotifiers = [journalNotifier, ...(opts.extraNotifiers ?? [])];
|
|
109
121
|
const fanout = createFanoutNotifier(allNotifiers);
|
|
110
122
|
// Build the real handler registry (or accept the injected one for tests).
|
|
123
|
+
const transcript = opts.registry ? undefined : await loadTranscriptSource(h);
|
|
111
124
|
const registry = opts.registry ?? (() => {
|
|
112
125
|
const runner = createRunner();
|
|
113
126
|
const reembedOne = (id) => reembed(h, embedder, id);
|
|
114
127
|
return buildRegistry({
|
|
115
128
|
runner: async (prompt) => runner.run({ prompt }),
|
|
116
|
-
oneiros: oneirosEnabled(resolve(process.env['FORTYTWO_ROOT'] ?? process.cwd())) ? makeOneirosHandler(resolve(process.env['FORTYTWO_ROOT'] ?? process.cwd()), h) : undefined,
|
|
129
|
+
oneiros: oneirosEnabled(resolve(process.env['FORTYTWO_ROOT'] ?? process.cwd())) ? makeOneirosHandler(resolve(process.env['FORTYTWO_ROOT'] ?? process.cwd()), h, undefined, transcript) : undefined,
|
|
117
130
|
countPendingApprovals: () => countPendingApprovals(h),
|
|
118
131
|
// Compute the 7-day lookback per call so a long-running daemon's window
|
|
119
132
|
// does not drift forward from the boot-time instant.
|
package/dist/daemon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -12,3 +12,7 @@ export { seedRecurring } from './seed.js';
|
|
|
12
12
|
export type { SeedStore } from './seed.js';
|
|
13
13
|
export { heartbeatPath, writeHeartbeat } from './heartbeat.js';
|
|
14
14
|
export { ONEIROS_DEF, seedOneiros, makeOneirosHandler } from './oneiros.js';
|
|
15
|
+
export { loadTranscriptSource } from './oneiros.js';
|
|
16
|
+
export { loadConversationLog, noopConversationLog } from './conversation-log.js';
|
|
17
|
+
export type { ConversationEvent, ConversationLog } from './conversation-log.js';
|
|
18
|
+
export { makeJournalWrite } from './daemon.js';
|
package/dist/index.js
CHANGED
|
@@ -65,4 +65,7 @@ if (invokedAsBin()) {
|
|
|
65
65
|
});
|
|
66
66
|
}
|
|
67
67
|
export { ONEIROS_DEF, seedOneiros, makeOneirosHandler } from './oneiros.js';
|
|
68
|
+
export { loadTranscriptSource } from './oneiros.js';
|
|
69
|
+
export { loadConversationLog, noopConversationLog } from './conversation-log.js';
|
|
70
|
+
export { makeJournalWrite } from './daemon.js';
|
|
68
71
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/notifier.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Notification, Notifier } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Creates a notifier that forwards every notification to the injected `write`
|
|
4
|
-
* callback. The daemon supplies the real write that
|
|
5
|
-
*
|
|
6
|
-
* opening a real database.
|
|
4
|
+
* callback. The daemon supplies the real write that appends entries to the
|
|
5
|
+
* conversation log (the transcript, or a no-op when it is not installed). Using
|
|
6
|
+
* DI keeps the logging logic testable without opening a real database.
|
|
7
7
|
*/
|
|
8
8
|
export declare function createJournalNotifier(write: (n: Notification) => Promise<void>): Notifier;
|
|
9
9
|
/**
|
package/dist/notifier.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Creates a notifier that forwards every notification to the injected `write`
|
|
3
|
-
* callback. The daemon supplies the real write that
|
|
4
|
-
*
|
|
5
|
-
* opening a real database.
|
|
3
|
+
* callback. The daemon supplies the real write that appends entries to the
|
|
4
|
+
* conversation log (the transcript, or a no-op when it is not installed). Using
|
|
5
|
+
* DI keeps the logging logic testable without opening a real database.
|
|
6
6
|
*/
|
|
7
7
|
export function createJournalNotifier(write) {
|
|
8
8
|
return {
|
package/dist/oneiros.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type RunOptions, type RunResult } from '@justfortytwo/runner';
|
|
2
|
-
import { type WorkerInput } from '@justfortytwo/persona';
|
|
2
|
+
import { type WorkerInput, type TranscriptSource } from '@justfortytwo/persona';
|
|
3
3
|
import { type DbHandles } from '@justfortytwo/memory';
|
|
4
4
|
import type { Handler } from './types.js';
|
|
5
5
|
import type { RecurringDef } from './handlers/index.js';
|
|
@@ -7,4 +7,13 @@ export declare const ONEIROS_DEF: RecurringDef;
|
|
|
7
7
|
export declare function seedOneiros(h: DbHandles, now: string, next: (cron: string, now: string) => string): void;
|
|
8
8
|
export declare function isolatedWorker(input: WorkerInput, run?: (options: RunOptions) => Promise<RunResult>): Promise<unknown>;
|
|
9
9
|
export declare function oneirosEnabled(root: string): boolean;
|
|
10
|
-
export declare function makeOneirosHandler(root: string, h: DbHandles, worker?: typeof isolatedWorker): Handler;
|
|
10
|
+
export declare function makeOneirosHandler(root: string, h: DbHandles, worker?: typeof isolatedWorker, transcript?: TranscriptSource): Handler;
|
|
11
|
+
/** Transcript rows per Oneiros round; smaller than the package default to keep the worker input within budget. */
|
|
12
|
+
export declare const TRANSCRIPT_PAGE_LIMIT = 20;
|
|
13
|
+
/**
|
|
14
|
+
* Adapt the optional @justfortytwo/transcript peer into a TranscriptSource.
|
|
15
|
+
* Any failure (not installed, missing exports) yields undefined and is reported
|
|
16
|
+
* on stderr. Persona then refuses to run if a transcript stream was initialised,
|
|
17
|
+
* so a missing source is never silently skipped.
|
|
18
|
+
*/
|
|
19
|
+
export declare function loadTranscriptSource(h: unknown, importer?: (name: string) => Promise<unknown>): Promise<TranscriptSource | undefined>;
|
package/dist/oneiros.js
CHANGED
|
@@ -34,11 +34,44 @@ export async function isolatedWorker(input, run = createRunner().run) {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
export function oneirosEnabled(root) { return existsSync(join(root, '.fortytwo/oneiros/checkpoint.json')); }
|
|
37
|
-
export function makeOneirosHandler(root, h, worker = isolatedWorker) {
|
|
37
|
+
export function makeOneirosHandler(root, h, worker = isolatedWorker, transcript) {
|
|
38
38
|
const memory = { head: () => memoryHead(h), delta: (cursor) => memoryDelta(h, cursor) };
|
|
39
39
|
return { kind: ONEIROS_DEF.kind,
|
|
40
|
-
hasWork: async () => hasWork(root, memory),
|
|
41
|
-
run: async () => { await refine({ root, memory, worker }); return null; },
|
|
40
|
+
hasWork: async () => hasWork(root, memory, transcript),
|
|
41
|
+
run: async () => { await refine({ root, memory, transcript, worker }); return null; },
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/** Transcript rows per Oneiros round; smaller than the package default to keep the worker input within budget. */
|
|
45
|
+
export const TRANSCRIPT_PAGE_LIMIT = 20;
|
|
46
|
+
/**
|
|
47
|
+
* Adapt the optional @justfortytwo/transcript peer into a TranscriptSource.
|
|
48
|
+
* Any failure (not installed, missing exports) yields undefined and is reported
|
|
49
|
+
* on stderr. Persona then refuses to run if a transcript stream was initialised,
|
|
50
|
+
* so a missing source is never silently skipped.
|
|
51
|
+
*/
|
|
52
|
+
export async function loadTranscriptSource(h, importer = (n) => import(n)) {
|
|
53
|
+
let mod;
|
|
54
|
+
try {
|
|
55
|
+
mod = (await importer('@justfortytwo/transcript'));
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
process.stderr.write(`fortytwo-scheduler: transcript source unavailable (import @justfortytwo/transcript failed): ${e?.message ?? e}\n`);
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
if (typeof mod?.transcriptHead !== 'function' || typeof mod?.transcriptDelta !== 'function') {
|
|
62
|
+
process.stderr.write('fortytwo-scheduler: transcript source unavailable (@justfortytwo/transcript lacks transcriptHead/transcriptDelta)\n');
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
head: () => mod.transcriptHead(h),
|
|
67
|
+
delta: (cursor) => {
|
|
68
|
+
const d = mod.transcriptDelta(h, cursor, TRANSCRIPT_PAGE_LIMIT);
|
|
69
|
+
// Explicit mapping: exactly the fields persona reads, including the row meta.
|
|
70
|
+
return { cursor: d.cursor, entries: d.entries.map((r) => ({
|
|
71
|
+
id: r.id, channel: r.channel, direction: r.direction, actor: r.actor, kind: r.kind,
|
|
72
|
+
content: r.content, thread_id: r.thread_id, meta: r.meta,
|
|
73
|
+
})) };
|
|
74
|
+
},
|
|
42
75
|
};
|
|
43
76
|
}
|
|
44
77
|
//# sourceMappingURL=oneiros.js.map
|
package/dist/oneiros.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oneiros.js","sourceRoot":"","sources":["../src/oneiros.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAmC,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"oneiros.js","sourceRoot":"","sources":["../src/oneiros.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@justfortytwo/scheduler",
|
|
3
|
-
"version": "1.0.0-
|
|
4
|
-
"description": "Durable job scheduler daemon for justfortytwo
|
|
3
|
+
"version": "1.0.0-4",
|
|
4
|
+
"description": "Durable job scheduler daemon for justfortytwo — drains a jobs queue and fires LLM turns behind a cheap gate.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Enrico Deleo",
|
|
@@ -34,11 +34,11 @@
|
|
|
34
34
|
"fortytwo-scheduler": "dist/index.js"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@justfortytwo/memory": "1.0.0-
|
|
37
|
+
"@justfortytwo/memory": "1.0.0-3",
|
|
38
|
+
"@justfortytwo/persona": "1.0.0-3",
|
|
38
39
|
"@justfortytwo/runner": "1.0.0-0",
|
|
39
40
|
"croner": "^10.0.0",
|
|
40
|
-
"p-queue": "^9.0.0"
|
|
41
|
-
"@justfortytwo/persona": "1.0.0-2"
|
|
41
|
+
"p-queue": "^9.0.0"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@justfortytwo/telegram": "^1.0.0-2",
|
|
@@ -50,11 +50,15 @@
|
|
|
50
50
|
"access": "public"
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
53
|
-
"@justfortytwo/telegram": "^0.1.5 || ^1.0.0-0"
|
|
53
|
+
"@justfortytwo/telegram": "^0.1.5 || ^1.0.0-0",
|
|
54
|
+
"@justfortytwo/transcript": "^1.0.0-0"
|
|
54
55
|
},
|
|
55
56
|
"peerDependenciesMeta": {
|
|
56
57
|
"@justfortytwo/telegram": {
|
|
57
58
|
"optional": true
|
|
59
|
+
},
|
|
60
|
+
"@justfortytwo/transcript": {
|
|
61
|
+
"optional": true
|
|
58
62
|
}
|
|
59
63
|
}
|
|
60
64
|
}
|