@cereworker/core 26.330.3 → 26.403.2

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/dist/pairing.js CHANGED
@@ -1,14 +1,10 @@
1
- import { createRequire } from 'node:module';
2
1
  import { randomInt } from 'node:crypto';
2
+ import { existsSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
4
  import { homedir } from 'node:os';
5
5
  import { createLogger } from './logger.js';
6
- const require = createRequire(import.meta.url);
7
- // Lazy-load node:sqlite to defer ExperimentalWarning until after CLI suppresses it
8
- function openDatabase(path) {
9
- const { DatabaseSync } = require('node:sqlite');
10
- return new DatabaseSync(path);
11
- }
6
+ import { ensureDir, readJsonLines, resolveStoreBasePath, withTextStoreLock, writeJsonLines, } from './text-store.js';
7
+ import { markLegacySectionMigrated, readLegacySection } from './legacy-sqlite.js';
12
8
  const log = createLogger('pairing');
13
9
  const DEFAULT_DB_PATH = join(homedir(), '.cereworker', 'conversations.db');
14
10
  const CODE_ALPHABET = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
@@ -29,116 +25,191 @@ export function normalizeCode(input) {
29
25
  return input.replace(/[-\s]/g, '').toUpperCase();
30
26
  }
31
27
  export class PairingStore {
32
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
- db;
28
+ pairingDir;
29
+ requestsPath;
30
+ approvedUsersPath;
31
+ requests = [];
32
+ approvedUsers = [];
34
33
  constructor(dbPath) {
35
- const path = dbPath ?? DEFAULT_DB_PATH;
36
- this.db = openDatabase(path);
37
- this.db.exec('PRAGMA journal_mode = WAL');
38
- this.ensureSchema();
39
- log.info('Opened pairing database', { path });
40
- }
41
- ensureSchema() {
42
- this.db.exec(`
43
- CREATE TABLE IF NOT EXISTS pairing_requests (
44
- code TEXT PRIMARY KEY,
45
- channelId TEXT NOT NULL,
46
- senderId TEXT NOT NULL,
47
- senderName TEXT,
48
- createdAt INTEGER NOT NULL,
49
- expiresAt INTEGER NOT NULL,
50
- status TEXT NOT NULL DEFAULT 'pending'
51
- );
52
- CREATE INDEX IF NOT EXISTS idx_pairing_channel_sender
53
- ON pairing_requests(channelId, senderId, status);
54
- CREATE INDEX IF NOT EXISTS idx_pairing_status
55
- ON pairing_requests(status, expiresAt);
56
-
57
- CREATE TABLE IF NOT EXISTS approved_users (
58
- channelId TEXT NOT NULL,
59
- senderId TEXT NOT NULL,
60
- approvedAt INTEGER NOT NULL,
61
- approvedVia TEXT,
62
- PRIMARY KEY (channelId, senderId)
63
- );
64
- `);
34
+ const baseDir = resolveStoreBasePath(dbPath ?? DEFAULT_DB_PATH);
35
+ this.pairingDir = join(baseDir, 'pairing');
36
+ ensureDir(this.pairingDir);
37
+ this.requestsPath = join(this.pairingDir, 'requests.jsonl');
38
+ this.approvedUsersPath = join(this.pairingDir, 'approved-users.jsonl');
39
+ this.migrateLegacyDatabase(dbPath ?? DEFAULT_DB_PATH);
40
+ this.refreshFromDisk();
41
+ log.info('Opened pairing store', { path: this.pairingDir });
65
42
  }
66
- createPairingCode(channelId, senderId, senderName) {
67
- this.expireStale();
68
- // Check for existing pending code for this sender+channel
69
- const existing = this.db.prepare(`SELECT code FROM pairing_requests WHERE channelId = ? AND senderId = ? AND status = 'pending' AND expiresAt > ?`).get(channelId, senderId, Date.now());
70
- if (existing) {
71
- return formatCode(existing.code);
43
+ migrateLegacyDatabase(dbPath) {
44
+ const migrated = readLegacySection(dbPath, 'pairing',
45
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
+ (db) => {
47
+ const tableRows = db
48
+ .prepare("SELECT name FROM sqlite_master WHERE type = 'table'")
49
+ .all();
50
+ const tableNames = new Set(tableRows.map((row) => row.name));
51
+ return {
52
+ requests: tableNames.has('pairing_requests')
53
+ ? db.prepare(`SELECT code, channelId, senderId, senderName, createdAt, expiresAt, status
54
+ FROM pairing_requests ORDER BY createdAt DESC`).all()
55
+ : [],
56
+ approvedUsers: tableNames.has('approved_users')
57
+ ? db.prepare(`SELECT channelId, senderId, approvedAt, approvedVia
58
+ FROM approved_users ORDER BY approvedAt ASC`).all()
59
+ : [],
60
+ };
61
+ });
62
+ if (!migrated)
63
+ return;
64
+ if (!existsSync(this.requestsPath)) {
65
+ writeJsonLines(this.requestsPath, migrated.requests);
72
66
  }
73
- // Check rate limit per channel
74
- const pendingCount = this.db.prepare(`SELECT COUNT(*) as cnt FROM pairing_requests WHERE channelId = ? AND status = 'pending' AND expiresAt > ?`).get(channelId, Date.now());
75
- if (pendingCount.cnt >= MAX_PENDING_PER_CHANNEL) {
76
- log.warn('Pairing rate limit reached', { channelId, pending: pendingCount.cnt });
77
- return null;
67
+ if (!existsSync(this.approvedUsersPath)) {
68
+ writeJsonLines(this.approvedUsersPath, migrated.approvedUsers);
78
69
  }
79
- // Generate unique code
80
- let code;
81
- let attempts = 0;
82
- do {
83
- code = generateCode();
84
- attempts++;
85
- if (attempts > 100) {
86
- log.warn('Failed to generate unique pairing code');
70
+ markLegacySectionMigrated(dbPath, 'pairing');
71
+ }
72
+ createPairingCode(channelId, senderId, senderName) {
73
+ return this.withMutation(() => {
74
+ this.expireStaleInMemory();
75
+ const existing = this.requests.find((request) => request.channelId === channelId
76
+ && request.senderId === senderId
77
+ && request.status === 'pending'
78
+ && request.expiresAt > Date.now());
79
+ if (existing) {
80
+ return formatCode(existing.code);
81
+ }
82
+ const pendingCount = this.requests.filter((request) => request.channelId === channelId
83
+ && request.status === 'pending'
84
+ && request.expiresAt > Date.now()).length;
85
+ if (pendingCount >= MAX_PENDING_PER_CHANNEL) {
86
+ log.warn('Pairing rate limit reached', { channelId, pending: pendingCount });
87
87
  return null;
88
88
  }
89
- } while (this.db.prepare(`SELECT 1 FROM pairing_requests WHERE code = ?`).get(code));
90
- const now = Date.now();
91
- this.db.prepare(`INSERT INTO pairing_requests (code, channelId, senderId, senderName, createdAt, expiresAt, status)
92
- VALUES (?, ?, ?, ?, ?, ?, 'pending')`).run(code, channelId, senderId, senderName ?? null, now, now + CODE_TTL_MS);
93
- log.info('Pairing code created', { channelId, senderId, code: formatCode(code) });
94
- return formatCode(code);
89
+ let code;
90
+ let attempts = 0;
91
+ do {
92
+ code = generateCode();
93
+ attempts++;
94
+ if (attempts > 100) {
95
+ log.warn('Failed to generate unique pairing code');
96
+ return null;
97
+ }
98
+ } while (this.requests.some((request) => request.code === code));
99
+ const now = Date.now();
100
+ this.requests.unshift({
101
+ code,
102
+ channelId,
103
+ senderId,
104
+ senderName: senderName ?? null,
105
+ createdAt: now,
106
+ expiresAt: now + CODE_TTL_MS,
107
+ status: 'pending',
108
+ });
109
+ this.persistRequests();
110
+ log.info('Pairing code created', { channelId, senderId, code: formatCode(code) });
111
+ return formatCode(code);
112
+ });
95
113
  }
96
114
  getPendingByCode(code) {
115
+ this.refreshFromDisk();
97
116
  const normalized = normalizeCode(code);
98
- const row = this.db.prepare(`SELECT * FROM pairing_requests WHERE code = ? AND status = 'pending' AND expiresAt > ?`).get(normalized, Date.now());
99
- return row ?? null;
117
+ return this.requests.find((request) => request.code === normalized
118
+ && request.status === 'pending'
119
+ && request.expiresAt > Date.now()) ?? null;
100
120
  }
101
121
  listPending() {
102
- return this.db.prepare(`SELECT * FROM pairing_requests WHERE status = 'pending' AND expiresAt > ? ORDER BY createdAt DESC`).all(Date.now());
122
+ this.refreshFromDisk();
123
+ return this.requests
124
+ .filter((request) => request.status === 'pending' && request.expiresAt > Date.now())
125
+ .sort((a, b) => b.createdAt - a.createdAt);
103
126
  }
104
127
  approveCode(code) {
105
- const normalized = normalizeCode(code);
106
- this.expireStale();
107
- const request = this.db.prepare(`SELECT * FROM pairing_requests WHERE code = ? AND status = 'pending' AND expiresAt > ?`).get(normalized, Date.now());
108
- if (!request) {
109
- return { ok: false, error: 'Code not found or expired' };
110
- }
111
- // Mark as approved
112
- this.db.prepare(`UPDATE pairing_requests SET status = 'approved' WHERE code = ?`).run(normalized);
113
- // Add to approved users
114
- this.db.prepare(`INSERT OR IGNORE INTO approved_users (channelId, senderId, approvedAt, approvedVia)
115
- VALUES (?, ?, ?, 'pairing')`).run(request.channelId, request.senderId, Date.now());
116
- log.info('Pairing approved', {
117
- channelId: request.channelId,
118
- senderId: request.senderId,
119
- senderName: request.senderName,
128
+ return this.withMutation(() => {
129
+ const normalized = normalizeCode(code);
130
+ this.expireStaleInMemory();
131
+ const request = this.requests.find((item) => item.code === normalized
132
+ && item.status === 'pending'
133
+ && item.expiresAt > Date.now());
134
+ if (!request) {
135
+ return { ok: false, error: 'Code not found or expired' };
136
+ }
137
+ request.status = 'approved';
138
+ this.persistRequests();
139
+ if (!this.approvedUsers.some((user) => user.channelId === request.channelId && user.senderId === request.senderId)) {
140
+ this.approvedUsers.push({
141
+ channelId: request.channelId,
142
+ senderId: request.senderId,
143
+ approvedAt: Date.now(),
144
+ approvedVia: 'pairing',
145
+ });
146
+ this.persistApprovedUsers();
147
+ }
148
+ log.info('Pairing approved', {
149
+ channelId: request.channelId,
150
+ senderId: request.senderId,
151
+ senderName: request.senderName,
152
+ });
153
+ return {
154
+ ok: true,
155
+ channelId: request.channelId,
156
+ senderId: request.senderId,
157
+ senderName: request.senderName,
158
+ };
120
159
  });
121
- return {
122
- ok: true,
123
- channelId: request.channelId,
124
- senderId: request.senderId,
125
- senderName: request.senderName,
126
- };
127
160
  }
128
161
  isApproved(channelId, senderId) {
129
- const row = this.db.prepare(`SELECT 1 FROM approved_users WHERE channelId = ? AND senderId = ?`).get(channelId, senderId);
130
- return !!row;
162
+ this.refreshFromDisk();
163
+ return this.approvedUsers.some((user) => user.channelId === channelId && user.senderId === senderId);
131
164
  }
132
165
  expireStale() {
133
- const result = this.db.prepare(`UPDATE pairing_requests SET status = 'expired' WHERE status = 'pending' AND expiresAt <= ?`).run(Date.now());
134
- return Number(result.changes);
166
+ return this.withMutation(() => this.expireStaleInMemory());
135
167
  }
136
168
  addConfigUser(channelId, senderId) {
137
- this.db.prepare(`INSERT OR IGNORE INTO approved_users (channelId, senderId, approvedAt, approvedVia)
138
- VALUES (?, ?, ?, 'config')`).run(channelId, senderId, Date.now());
169
+ this.withMutation(() => {
170
+ if (this.approvedUsers.some((user) => user.channelId === channelId && user.senderId === senderId)) {
171
+ return;
172
+ }
173
+ this.approvedUsers.push({
174
+ channelId,
175
+ senderId,
176
+ approvedAt: Date.now(),
177
+ approvedVia: 'config',
178
+ });
179
+ this.persistApprovedUsers();
180
+ });
139
181
  }
140
182
  close() {
141
- this.db.close();
183
+ // No-op for file-backed store.
184
+ }
185
+ persistRequests() {
186
+ writeJsonLines(this.requestsPath, this.requests);
187
+ }
188
+ persistApprovedUsers() {
189
+ writeJsonLines(this.approvedUsersPath, this.approvedUsers);
190
+ }
191
+ refreshFromDisk() {
192
+ this.requests = readJsonLines(this.requestsPath);
193
+ this.approvedUsers = readJsonLines(this.approvedUsersPath);
194
+ }
195
+ withMutation(fn) {
196
+ return withTextStoreLock(this.pairingDir, () => {
197
+ this.refreshFromDisk();
198
+ return fn();
199
+ });
200
+ }
201
+ expireStaleInMemory(now = Date.now()) {
202
+ let changed = 0;
203
+ for (const request of this.requests) {
204
+ if (request.status === 'pending' && request.expiresAt <= now) {
205
+ request.status = 'expired';
206
+ changed++;
207
+ }
208
+ }
209
+ if (changed > 0) {
210
+ this.persistRequests();
211
+ }
212
+ return changed;
142
213
  }
143
214
  }
144
215
  //# sourceMappingURL=pairing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pairing.js","sourceRoot":"","sources":["../src/pairing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pairing.js","sourceRoot":"","sources":["../src/pairing.ts"],"names":[],"mappings":"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"}
@@ -15,9 +15,9 @@ export interface Plan {
15
15
  status: PlanStatus;
16
16
  }
17
17
  export declare class PlanStore {
18
- private db;
18
+ private readonly plansDir;
19
19
  constructor(dbPath?: string);
20
- private ensureSchema;
20
+ private migrateLegacyDatabase;
21
21
  save(plan: Omit<Plan, 'id' | 'createdAt' | 'updatedAt'> & {
22
22
  id?: string;
23
23
  }): Plan;
@@ -27,6 +27,7 @@ export declare class PlanStore {
27
27
  updateStatus(id: string, status: PlanStatus): void;
28
28
  updateStep(planId: string, stepIndex: number, status: PlanStepStatus): void;
29
29
  delete(id: string): void;
30
- private rowToPlan;
30
+ private getPlanPath;
31
+ private readAllPlans;
31
32
  }
32
33
  //# sourceMappingURL=plan-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plan-store.d.ts","sourceRoot":"","sources":["../src/plan-store.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAC3D,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9E,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,qBAAa,SAAS;IAEpB,OAAO,CAAC,EAAE,CAAM;gBAEJ,MAAM,CAAC,EAAE,MAAM;IAe3B,OAAO,CAAC,YAAY;IAkBpB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IA+BhF,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAOjC,aAAa,IAAI,IAAI,EAAE;IAOvB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAO3C,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAQlD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IAU3E,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIxB,OAAO,CAAC,SAAS;CAYlB"}
1
+ {"version":3,"file":"plan-store.d.ts","sourceRoot":"","sources":["../src/plan-store.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAC3D,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9E,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,MAAM,CAAC,EAAE,MAAM;IAO3B,OAAO,CAAC,qBAAqB;IA4C7B,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAoBhF,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAIjC,aAAa,IAAI,IAAI,EAAE;IAMvB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAM3C,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAWlD,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IAU3E,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMxB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,YAAY;CAOrB"}
@@ -1,47 +1,45 @@
1
- import { createRequire } from 'node:module';
2
1
  import { nanoid } from 'nanoid';
3
- import { existsSync, mkdirSync } from 'node:fs';
4
- import { dirname, join } from 'node:path';
2
+ import { existsSync, readdirSync, rmSync } from 'node:fs';
3
+ import { join } from 'node:path';
5
4
  import { homedir } from 'node:os';
6
5
  import { createLogger } from './logger.js';
7
- const require = createRequire(import.meta.url);
8
- function openDatabase(path) {
9
- const { DatabaseSync } = require('node:sqlite');
10
- return new DatabaseSync(path);
11
- }
6
+ import { ensureDir, readJsonFile, resolveStoreBasePath, withTextStoreLock, writeJsonFileAtomic, } from './text-store.js';
7
+ import { markLegacySectionMigrated, readLegacySection } from './legacy-sqlite.js';
12
8
  const log = createLogger('plan-store');
13
9
  const DEFAULT_DB_PATH = join(homedir(), '.cereworker', 'conversations.db');
14
10
  export class PlanStore {
15
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
- db;
11
+ plansDir;
17
12
  constructor(dbPath) {
18
- const path = dbPath ?? DEFAULT_DB_PATH;
19
- if (path !== ':memory:') {
20
- const dir = dirname(path);
21
- if (!existsSync(dir)) {
22
- mkdirSync(dir, { recursive: true });
23
- }
24
- }
25
- this.db = openDatabase(path);
26
- this.db.exec('PRAGMA journal_mode = WAL');
27
- this.ensureSchema();
13
+ const baseDir = resolveStoreBasePath(dbPath ?? DEFAULT_DB_PATH);
14
+ this.plansDir = join(baseDir, 'plans');
15
+ ensureDir(this.plansDir);
16
+ this.migrateLegacyDatabase(dbPath ?? DEFAULT_DB_PATH);
28
17
  }
29
- ensureSchema() {
30
- this.db.exec(`
31
- CREATE TABLE IF NOT EXISTS plans (
32
- id TEXT PRIMARY KEY,
33
- taskId TEXT,
34
- goal TEXT NOT NULL,
35
- steps TEXT NOT NULL,
36
- conversationId TEXT,
37
- createdAt TEXT NOT NULL,
38
- updatedAt TEXT NOT NULL,
39
- status TEXT NOT NULL DEFAULT 'in_progress'
40
- );
41
-
42
- CREATE INDEX IF NOT EXISTS idx_plans_status
43
- ON plans(status);
44
- `);
18
+ migrateLegacyDatabase(dbPath) {
19
+ const rows = readLegacySection(dbPath, 'plans',
20
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
+ (db) => db.prepare(`SELECT id, taskId, goal, steps, conversationId, createdAt, updatedAt, status
22
+ FROM plans ORDER BY createdAt ASC`).all().map((row) => ({
23
+ id: row.id,
24
+ taskId: row.taskId ?? undefined,
25
+ goal: row.goal,
26
+ steps: JSON.parse(row.steps),
27
+ conversationId: row.conversationId ?? undefined,
28
+ createdAt: row.createdAt,
29
+ updatedAt: row.updatedAt,
30
+ status: row.status,
31
+ })));
32
+ if (!rows)
33
+ return;
34
+ for (const plan of rows) {
35
+ const path = this.getPlanPath(plan.id);
36
+ if (existsSync(path))
37
+ continue;
38
+ withTextStoreLock(path, () => {
39
+ writeJsonFileAtomic(path, plan);
40
+ });
41
+ }
42
+ markLegacySectionMigrated(dbPath, 'plans');
45
43
  }
46
44
  save(plan) {
47
45
  const now = new Date().toISOString();
@@ -55,36 +53,34 @@ export class PlanStore {
55
53
  updatedAt: now,
56
54
  status: plan.status,
57
55
  };
58
- this.db
59
- .prepare(`INSERT OR REPLACE INTO plans (id, taskId, goal, steps, conversationId, createdAt, updatedAt, status)
60
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)`)
61
- .run(full.id, full.taskId ?? null, full.goal, JSON.stringify(full.steps), full.conversationId ?? null, full.createdAt, full.updatedAt, full.status);
56
+ withTextStoreLock(this.getPlanPath(full.id), () => {
57
+ writeJsonFileAtomic(this.getPlanPath(full.id), full);
58
+ });
62
59
  log.debug('Saved plan', { id: full.id, status: full.status });
63
60
  return full;
64
61
  }
65
62
  get(id) {
66
- const row = this.db
67
- .prepare('SELECT * FROM plans WHERE id = ?')
68
- .get(id);
69
- return row ? this.rowToPlan(row) : undefined;
63
+ return readJsonFile(this.getPlanPath(id), null) ?? undefined;
70
64
  }
71
65
  getInProgress() {
72
- const rows = this.db
73
- .prepare("SELECT * FROM plans WHERE status = 'in_progress' ORDER BY createdAt ASC")
74
- .all();
75
- return rows.map((r) => this.rowToPlan(r));
66
+ return this.readAllPlans()
67
+ .filter((plan) => plan.status === 'in_progress')
68
+ .sort((a, b) => a.createdAt.localeCompare(b.createdAt));
76
69
  }
77
70
  getByTask(taskId) {
78
- const row = this.db
79
- .prepare("SELECT * FROM plans WHERE taskId = ? AND status = 'in_progress' ORDER BY createdAt DESC LIMIT 1")
80
- .get(taskId);
81
- return row ? this.rowToPlan(row) : undefined;
71
+ return this.readAllPlans()
72
+ .filter((plan) => plan.taskId === taskId && plan.status === 'in_progress')
73
+ .sort((a, b) => b.createdAt.localeCompare(a.createdAt))[0];
82
74
  }
83
75
  updateStatus(id, status) {
84
- const now = new Date().toISOString();
85
- this.db
86
- .prepare('UPDATE plans SET status = ?, updatedAt = ? WHERE id = ?')
87
- .run(status, now, id);
76
+ const plan = this.get(id);
77
+ if (!plan)
78
+ return;
79
+ plan.status = status;
80
+ plan.updatedAt = new Date().toISOString();
81
+ withTextStoreLock(this.getPlanPath(id), () => {
82
+ writeJsonFileAtomic(this.getPlanPath(id), plan);
83
+ });
88
84
  log.debug('Updated plan status', { id, status });
89
85
  }
90
86
  updateStep(planId, stepIndex, status) {
@@ -92,25 +88,26 @@ export class PlanStore {
92
88
  if (!plan || stepIndex < 0 || stepIndex >= plan.steps.length)
93
89
  return;
94
90
  plan.steps[stepIndex].status = status;
95
- const now = new Date().toISOString();
96
- this.db
97
- .prepare('UPDATE plans SET steps = ?, updatedAt = ? WHERE id = ?')
98
- .run(JSON.stringify(plan.steps), now, planId);
91
+ plan.updatedAt = new Date().toISOString();
92
+ withTextStoreLock(this.getPlanPath(planId), () => {
93
+ writeJsonFileAtomic(this.getPlanPath(planId), plan);
94
+ });
99
95
  }
100
96
  delete(id) {
101
- this.db.prepare('DELETE FROM plans WHERE id = ?').run(id);
97
+ withTextStoreLock(this.getPlanPath(id), () => {
98
+ rmSync(this.getPlanPath(id), { force: true });
99
+ });
102
100
  }
103
- rowToPlan(row) {
104
- return {
105
- id: row.id,
106
- taskId: row.taskId ?? undefined,
107
- goal: row.goal,
108
- steps: JSON.parse(row.steps),
109
- conversationId: row.conversationId ?? undefined,
110
- createdAt: row.createdAt,
111
- updatedAt: row.updatedAt,
112
- status: row.status,
113
- };
101
+ getPlanPath(id) {
102
+ return join(this.plansDir, `${id}.json`);
103
+ }
104
+ readAllPlans() {
105
+ if (!existsSync(this.plansDir))
106
+ return [];
107
+ return readdirSync(this.plansDir)
108
+ .filter((entry) => entry.endsWith('.json'))
109
+ .map((entry) => readJsonFile(join(this.plansDir, entry), null))
110
+ .filter((plan) => plan !== null);
114
111
  }
115
112
  }
116
113
  //# sourceMappingURL=plan-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plan-store.js","sourceRoot":"","sources":["../src/plan-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan-store.js","sourceRoot":"","sources":["../src/plan-store.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5C,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC3D,cAAc,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7F,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAgDD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CA0MtE"}
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5C,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC3D,cAAc,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7F,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAmED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAkNtE"}