@justfortytwo/memory 0.1.4 → 0.1.5
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/gate-approval-store.js +14 -0
- package/dist/gate-approval-store.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/jobs.d.ts +49 -0
- package/dist/jobs.js +67 -0
- package/dist/jobs.js.map +1 -0
- package/dist/memory.js +10 -1
- package/dist/memory.js.map +1 -1
- package/dist/migrate.js +2 -0
- package/dist/migrate.js.map +1 -1
- package/dist/migrations/004_jobs.d.ts +3 -0
- package/dist/migrations/004_jobs.js +19 -0
- package/dist/migrations/004_jobs.js.map +1 -0
- package/package.json +1 -1
|
@@ -9,6 +9,14 @@
|
|
|
9
9
|
// Dependency direction is ONE-WAY: memory -> gate (we import gate's TYPES; gate
|
|
10
10
|
// never imports memory). No cycle. gate is a peerDependency of memory.
|
|
11
11
|
import { randomUUID } from 'node:crypto';
|
|
12
|
+
import { enqueue, existsPending } from './jobs.js';
|
|
13
|
+
/**
|
|
14
|
+
* Fixed dedup key for notify_pending jobs. Real approval ids are UUIDs (pa_…),
|
|
15
|
+
* never 0, so payload:{id:0} is safe as a synthetic sentinel. At most ONE
|
|
16
|
+
* notify_pending job is queued at a time; when the scheduler completes it the
|
|
17
|
+
* next staged approval re-enqueues.
|
|
18
|
+
*/
|
|
19
|
+
const NOTIFY_PENDING_KEY = 0;
|
|
12
20
|
function nowIso() {
|
|
13
21
|
return new Date().toISOString();
|
|
14
22
|
}
|
|
@@ -65,6 +73,12 @@ export class GateApprovalStore {
|
|
|
65
73
|
status = 'pending', decided_by = NULL,
|
|
66
74
|
created_at = excluded.created_at, updated_at = excluded.updated_at`)
|
|
67
75
|
.run(id, input.tool, input.target, JSON.stringify(input.payload ?? {}), input.tier, input.tool_use_id, input.session_id ?? null, ts, ts);
|
|
76
|
+
// Enqueue a deduped notify_pending job so the scheduler can summarise pending
|
|
77
|
+
// approvals to the assistant. Best-effort: the approval is already durable;
|
|
78
|
+
// an enqueue failure must not roll back the staging.
|
|
79
|
+
if (!existsPending(this.h, 'notify_pending', NOTIFY_PENDING_KEY)) {
|
|
80
|
+
enqueue(this.h, { kind: 'notify_pending', run_at: new Date().toISOString(), payload: { id: NOTIFY_PENDING_KEY } });
|
|
81
|
+
}
|
|
68
82
|
return id;
|
|
69
83
|
}
|
|
70
84
|
async getByToolUseId(toolUseId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-approval-store.js","sourceRoot":"","sources":["../src/gate-approval-store.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,qFAAqF;AACrF,mFAAmF;AACnF,4BAA4B;AAC5B,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"gate-approval-store.js","sourceRoot":"","sources":["../src/gate-approval-store.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export { openDb, type DbHandles, EMBED_DIM } from './db.js';
|
|
|
5
5
|
export { runMigrations } from './migrate.js';
|
|
6
6
|
export { store, query, recall, recallDocs, lexical, reindex, exportRange, reembed, deleteByIds, type MemoryInput, type MemoryRow, type RecallRow, type QueryOpts, type DocRecallRow, type ReindexResult, } from './memory.js';
|
|
7
7
|
export { enrich, enrichFromTurn, type EnrichmentCandidate, type EnrichmentResult } from './enrichment.js';
|
|
8
|
+
export { enqueue, claimDue, complete, fail, listActive, requeueStale, existsPending, countPendingApprovals, setRecurrence, MAX_ATTEMPTS, type JobRow, type NewJob } from './jobs.js';
|
|
8
9
|
export { toolDefinitions } from './tools.js';
|
|
9
10
|
export { GateApprovalStore } from './gate-approval-store.js';
|
|
10
11
|
/**
|
package/dist/index.js
CHANGED
|
@@ -18,6 +18,7 @@ export { openDb, EMBED_DIM } from './db.js';
|
|
|
18
18
|
export { runMigrations } from './migrate.js';
|
|
19
19
|
export { store, query, recall, recallDocs, lexical, reindex, exportRange, reembed, deleteByIds, } from './memory.js';
|
|
20
20
|
export { enrich, enrichFromTurn } from './enrichment.js';
|
|
21
|
+
export { enqueue, claimDue, complete, fail, listActive, requeueStale, existsPending, countPendingApprovals, setRecurrence, MAX_ATTEMPTS } from './jobs.js';
|
|
21
22
|
export { toolDefinitions } from './tools.js';
|
|
22
23
|
// memory's implementation of gate's ApprovalStore + AuditLogger seam (memory -> gate).
|
|
23
24
|
export { GateApprovalStore } from './gate-approval-store.js';
|
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/jobs.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { DbHandles } from './db.js';
|
|
2
|
+
export interface NewJob {
|
|
3
|
+
kind: string;
|
|
4
|
+
run_at: string;
|
|
5
|
+
payload?: unknown;
|
|
6
|
+
recurrence?: string | null;
|
|
7
|
+
}
|
|
8
|
+
export interface JobRow {
|
|
9
|
+
id: number;
|
|
10
|
+
kind: string;
|
|
11
|
+
payload: string | null;
|
|
12
|
+
run_at: string;
|
|
13
|
+
recurrence: string | null;
|
|
14
|
+
status: string;
|
|
15
|
+
attempts: number;
|
|
16
|
+
last_error: string | null;
|
|
17
|
+
created_at: string;
|
|
18
|
+
updated_at: string;
|
|
19
|
+
}
|
|
20
|
+
export declare const MAX_ATTEMPTS = 3;
|
|
21
|
+
export declare function enqueue(h: DbHandles, j: NewJob): number;
|
|
22
|
+
export declare function claimDue(h: DbHandles, now: string): JobRow[];
|
|
23
|
+
export declare function complete(h: DbHandles, id: number, opts?: {
|
|
24
|
+
reschedule?: string;
|
|
25
|
+
}): void;
|
|
26
|
+
export declare function fail(h: DbHandles, id: number, error: string, opts?: {
|
|
27
|
+
retryAt?: string;
|
|
28
|
+
}): void;
|
|
29
|
+
/** All active (non-terminal) jobs — status in ('pending','running'). */
|
|
30
|
+
export declare function listActive(h: DbHandles): JobRow[];
|
|
31
|
+
export declare function requeueStale(h: DbHandles, olderThan: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* Returns true if a pending or running job of the given `kind` exists whose
|
|
34
|
+
* payload `$.id` equals `idValue`. Used to deduplicate producer enqueues (e.g.
|
|
35
|
+
* `reembed_memory` for a specific memory id). Uses `json_extract` (SQLite
|
|
36
|
+
* >= 3.38) for an exact match — a substring LIKE would spuriously collide
|
|
37
|
+
* (id 1 vs 11/100).
|
|
38
|
+
*/
|
|
39
|
+
export declare function existsPending(h: DbHandles, kind: string, idValue: number): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Returns the count of approvals in 'pending' status.
|
|
42
|
+
* Used by the scheduler sweep gate to decide whether to run.
|
|
43
|
+
*/
|
|
44
|
+
export declare function countPendingApprovals(h: DbHandles): number;
|
|
45
|
+
/**
|
|
46
|
+
* Updates the recurrence expression and next run_at for a recurring job.
|
|
47
|
+
* Called by seedRecurring when the in-code cron definition changes.
|
|
48
|
+
*/
|
|
49
|
+
export declare function setRecurrence(h: DbHandles, id: number, recurrence: string, runAt: string): void;
|
package/dist/jobs.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export const MAX_ATTEMPTS = 3;
|
|
2
|
+
export function enqueue(h, j) {
|
|
3
|
+
const ts = new Date().toISOString();
|
|
4
|
+
const row = h.raw.prepare(`INSERT INTO jobs (kind, payload, run_at, recurrence, status, attempts, created_at, updated_at)
|
|
5
|
+
VALUES (?,?,?,?, 'pending', 0, ?, ?) RETURNING id`).get(j.kind, j.payload != null ? JSON.stringify(j.payload) : null, j.run_at, j.recurrence ?? null, ts, ts);
|
|
6
|
+
return row.id;
|
|
7
|
+
}
|
|
8
|
+
export function claimDue(h, now) {
|
|
9
|
+
return h.raw.prepare(`UPDATE jobs SET status='running', updated_at=? WHERE status='pending' AND run_at <= ? RETURNING *`).all(now, now);
|
|
10
|
+
}
|
|
11
|
+
export function complete(h, id, opts = {}) {
|
|
12
|
+
const ts = new Date().toISOString();
|
|
13
|
+
if (opts.reschedule) {
|
|
14
|
+
h.raw.prepare(`UPDATE jobs SET status='pending', run_at=?, attempts=0, last_error=NULL, updated_at=? WHERE id=?`).run(opts.reschedule, ts, id);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
h.raw.prepare(`UPDATE jobs SET status='done', updated_at=? WHERE id=?`).run(ts, id);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export function fail(h, id, error, opts = {}) {
|
|
21
|
+
const ts = new Date().toISOString();
|
|
22
|
+
const row = h.raw.prepare(`SELECT attempts FROM jobs WHERE id=?`).get(id);
|
|
23
|
+
const attempts = (row?.attempts ?? 0) + 1;
|
|
24
|
+
if (attempts >= MAX_ATTEMPTS) {
|
|
25
|
+
h.raw.prepare(`UPDATE jobs SET status='failed', attempts=?, last_error=?, updated_at=? WHERE id=?`).run(attempts, error, ts, id);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
h.raw.prepare(`UPDATE jobs SET status='pending', attempts=?, last_error=?, run_at=?, updated_at=? WHERE id=?`).run(attempts, error, opts.retryAt ?? ts, ts, id);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** All active (non-terminal) jobs — status in ('pending','running'). */
|
|
32
|
+
export function listActive(h) {
|
|
33
|
+
return h.raw.prepare(`SELECT * FROM jobs WHERE status IN ('pending','running')`).all();
|
|
34
|
+
}
|
|
35
|
+
export function requeueStale(h, olderThan) {
|
|
36
|
+
const ts = new Date().toISOString();
|
|
37
|
+
h.raw.prepare(`UPDATE jobs SET status='pending', updated_at=? WHERE status='running' AND updated_at < ?`).run(ts, olderThan);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Returns true if a pending or running job of the given `kind` exists whose
|
|
41
|
+
* payload `$.id` equals `idValue`. Used to deduplicate producer enqueues (e.g.
|
|
42
|
+
* `reembed_memory` for a specific memory id). Uses `json_extract` (SQLite
|
|
43
|
+
* >= 3.38) for an exact match — a substring LIKE would spuriously collide
|
|
44
|
+
* (id 1 vs 11/100).
|
|
45
|
+
*/
|
|
46
|
+
export function existsPending(h, kind, idValue) {
|
|
47
|
+
const row = h.raw.prepare(`SELECT 1 FROM jobs WHERE kind=? AND status IN ('pending','running')
|
|
48
|
+
AND json_extract(payload, '$.id') = ? LIMIT 1`).get(kind, idValue);
|
|
49
|
+
return row !== undefined;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Returns the count of approvals in 'pending' status.
|
|
53
|
+
* Used by the scheduler sweep gate to decide whether to run.
|
|
54
|
+
*/
|
|
55
|
+
export function countPendingApprovals(h) {
|
|
56
|
+
const row = h.raw.prepare(`SELECT COUNT(*) AS n FROM approvals WHERE status='pending'`).get();
|
|
57
|
+
return row.n;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Updates the recurrence expression and next run_at for a recurring job.
|
|
61
|
+
* Called by seedRecurring when the in-code cron definition changes.
|
|
62
|
+
*/
|
|
63
|
+
export function setRecurrence(h, id, recurrence, runAt) {
|
|
64
|
+
const ts = new Date().toISOString();
|
|
65
|
+
h.raw.prepare(`UPDATE jobs SET recurrence=?, run_at=?, updated_at=? WHERE id=?`).run(recurrence, runAt, ts, id);
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=jobs.js.map
|
package/dist/jobs.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"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"}
|
package/dist/memory.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
2
|
import { readdirSync, readFileSync, existsSync } from 'node:fs';
|
|
3
3
|
import { vecToBuffer } from './embedder.js';
|
|
4
|
+
import { enqueue, existsPending } from './jobs.js';
|
|
4
5
|
function todayUtc() {
|
|
5
6
|
return new Date().toISOString().slice(0, 10);
|
|
6
7
|
}
|
|
@@ -23,7 +24,15 @@ export async function store(h, embedder, m) {
|
|
|
23
24
|
markSuperseded.run(id, m.supersedes);
|
|
24
25
|
return id;
|
|
25
26
|
});
|
|
26
|
-
|
|
27
|
+
const id = txn();
|
|
28
|
+
// Enqueue a reembed_memory job so the scheduler can re-embed this memory
|
|
29
|
+
// after an embedder/model change. Deduped: skip if a pending/running job
|
|
30
|
+
// already targets this id (e.g. rapid back-to-back stores before the
|
|
31
|
+
// scheduler drains).
|
|
32
|
+
if (!existsPending(h, 'reembed_memory', id)) {
|
|
33
|
+
enqueue(h, { kind: 'reembed_memory', run_at: new Date().toISOString(), payload: { id } });
|
|
34
|
+
}
|
|
35
|
+
return id;
|
|
27
36
|
}
|
|
28
37
|
/**
|
|
29
38
|
* Hard-delete memories by id. OWNER-PRIVILEGED: this is intentionally NOT an MCP
|
package/dist/memory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGhE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}
|
package/dist/migrate.js
CHANGED
|
@@ -5,6 +5,7 @@ import { dirname } from 'node:path';
|
|
|
5
5
|
import * as m001 from './migrations/001_init.js';
|
|
6
6
|
import * as m002 from './migrations/002_fts.js';
|
|
7
7
|
import * as m003 from './migrations/003_approvals.js';
|
|
8
|
+
import * as m004 from './migrations/004_jobs.js';
|
|
8
9
|
// Static import list — deterministic under both vitest (resolves .js → .ts) and
|
|
9
10
|
// the built server (dist/migrations/*.js). No knex CLI, no dynamic-import path
|
|
10
11
|
// fragility.
|
|
@@ -12,6 +13,7 @@ const MIGRATIONS = [
|
|
|
12
13
|
{ name: '001_init', up: m001.up, down: m001.down },
|
|
13
14
|
{ name: '002_fts', up: m002.up, down: m002.down },
|
|
14
15
|
{ name: '003_approvals', up: m003.up, down: m003.down },
|
|
16
|
+
{ name: '004_jobs', up: m004.up, down: m004.down },
|
|
15
17
|
];
|
|
16
18
|
export async function runMigrations(k) {
|
|
17
19
|
await k.raw(`CREATE TABLE IF NOT EXISTS _migration_state (
|
package/dist/migrate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,0BAA0B,CAAC;AACjD,OAAO,KAAK,IAAI,MAAM,yBAAyB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,0BAA0B,CAAC;AACjD,OAAO,KAAK,IAAI,MAAM,yBAAyB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,+BAA+B,CAAC;AACtD,OAAO,KAAK,IAAI,MAAM,0BAA0B,CAAC;AAIjD,gFAAgF;AAChF,+EAA+E;AAC/E,aAAa;AACb,MAAM,UAAU,GAAwC;IACtD,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;IAClD,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;IACjD,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;IACvD,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;CACnD,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,CAAO;IACzC,MAAM,CAAC,CAAC,GAAG,CACT;;;OAGG,CACJ,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAA4B,CAAC;IAC3F,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,SAAS;QAC/B,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACd,MAAM,CAAC,CAAC,GAAG,CAAC,gDAAgD,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACzF,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACzB,MAAM,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACpB,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,kCAAkC,MAAM,EAAE,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export async function up(knex) {
|
|
2
|
+
await knex.schema.createTable('jobs', (t) => {
|
|
3
|
+
t.increments('id').primary();
|
|
4
|
+
t.text('kind').notNullable();
|
|
5
|
+
t.text('payload');
|
|
6
|
+
t.text('run_at').notNullable();
|
|
7
|
+
t.text('recurrence');
|
|
8
|
+
t.text('status').notNullable().defaultTo('pending');
|
|
9
|
+
t.integer('attempts').notNullable().defaultTo(0);
|
|
10
|
+
t.text('last_error');
|
|
11
|
+
t.text('created_at').notNullable();
|
|
12
|
+
t.text('updated_at').notNullable();
|
|
13
|
+
t.index(['status', 'run_at'], 'idx_jobs_status_run_at');
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
export async function down(knex) {
|
|
17
|
+
await knex.schema.dropTable('jobs');
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=004_jobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"004_jobs.js","sourceRoot":"","sources":["../../src/migrations/004_jobs.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC,IAAU;IACjC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;QAC1C,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAC7B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACrB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACpD,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACrB,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,wBAAwB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAU;IACnC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC"}
|