@shardworks/nexus-core 0.1.59 → 0.1.61
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/clockworks.d.ts.map +1 -1
- package/dist/clockworks.js +76 -59
- package/dist/clockworks.js.map +1 -1
- package/dist/commission.d.ts +8 -3
- package/dist/commission.d.ts.map +1 -1
- package/dist/commission.js +36 -21
- package/dist/commission.js.map +1 -1
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +2 -4
- package/dist/events.js.map +1 -1
- package/dist/guild-config.d.ts +8 -0
- package/dist/guild-config.d.ts.map +1 -1
- package/dist/guild-config.js.map +1 -1
- package/dist/index.d.ts +2 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -4
- package/dist/index.js.map +1 -1
- package/dist/session.d.ts +4 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +5 -3
- package/dist/session.js.map +1 -1
- package/dist/writ.d.ts +100 -0
- package/dist/writ.d.ts.map +1 -0
- package/dist/writ.js +489 -0
- package/dist/writ.js.map +1 -0
- package/package.json +1 -1
- package/dist/job.d.ts +0 -53
- package/dist/job.d.ts.map +0 -1
- package/dist/job.js +0 -175
- package/dist/job.js.map +0 -1
- package/dist/piece.d.ts +0 -49
- package/dist/piece.d.ts.map +0 -1
- package/dist/piece.js +0 -164
- package/dist/piece.js.map +0 -1
- package/dist/stroke.d.ts +0 -27
- package/dist/stroke.d.ts.map +0 -1
- package/dist/stroke.js +0 -101
- package/dist/stroke.js.map +0 -1
- package/dist/work.d.ts +0 -48
- package/dist/work.d.ts.map +0 -1
- package/dist/work.js +0 -157
- package/dist/work.js.map +0 -1
package/dist/job.js
DELETED
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Job — an assignable unit of work, belonging to a piece.
|
|
3
|
-
*
|
|
4
|
-
* Jobs are historical records — no delete, only status transitions.
|
|
5
|
-
*/
|
|
6
|
-
import Database from 'better-sqlite3';
|
|
7
|
-
import { booksPath } from "./nexus-home.js";
|
|
8
|
-
import { generateId } from "./id.js";
|
|
9
|
-
import { signalEvent } from "./events.js";
|
|
10
|
-
export function createJob(home, opts) {
|
|
11
|
-
const db = new Database(booksPath(home));
|
|
12
|
-
db.pragma('foreign_keys = ON');
|
|
13
|
-
try {
|
|
14
|
-
const id = generateId('j');
|
|
15
|
-
db.prepare(`INSERT INTO jobs (id, piece_id, title, description, assignee) VALUES (?, ?, ?, ?, ?)`).run(id, opts.pieceId ?? null, opts.title, opts.description ?? null, opts.assignee ?? null);
|
|
16
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'operator', 'job_created', 'job', id, JSON.stringify(opts));
|
|
17
|
-
const row = db.prepare(`SELECT id, piece_id, title, description, status, assignee, created_at, updated_at FROM jobs WHERE id = ?`).get(id);
|
|
18
|
-
const record = {
|
|
19
|
-
id: row.id, pieceId: row.piece_id, title: row.title, description: row.description,
|
|
20
|
-
status: row.status, assignee: row.assignee, createdAt: row.created_at, updatedAt: row.updated_at,
|
|
21
|
-
};
|
|
22
|
-
signalEvent(home, 'job.created', { jobId: id, pieceId: opts.pieceId ?? null }, 'framework');
|
|
23
|
-
return record;
|
|
24
|
-
}
|
|
25
|
-
finally {
|
|
26
|
-
db.close();
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
export function listJobs(home, opts = {}) {
|
|
30
|
-
const db = new Database(booksPath(home));
|
|
31
|
-
db.pragma('foreign_keys = ON');
|
|
32
|
-
try {
|
|
33
|
-
let query = `SELECT id, piece_id, title, description, status, assignee, created_at, updated_at FROM jobs`;
|
|
34
|
-
const conditions = [];
|
|
35
|
-
const params = [];
|
|
36
|
-
if (opts.status) {
|
|
37
|
-
conditions.push(`status = ?`);
|
|
38
|
-
params.push(opts.status);
|
|
39
|
-
}
|
|
40
|
-
if (opts.pieceId) {
|
|
41
|
-
conditions.push(`piece_id = ?`);
|
|
42
|
-
params.push(opts.pieceId);
|
|
43
|
-
}
|
|
44
|
-
if (opts.assignee) {
|
|
45
|
-
conditions.push(`assignee = ?`);
|
|
46
|
-
params.push(opts.assignee);
|
|
47
|
-
}
|
|
48
|
-
if (conditions.length > 0)
|
|
49
|
-
query += ` WHERE ${conditions.join(' AND ')}`;
|
|
50
|
-
query += ` ORDER BY created_at DESC`;
|
|
51
|
-
return db.prepare(query).all(...params).map(r => ({
|
|
52
|
-
id: r.id, pieceId: r.piece_id, title: r.title, description: r.description,
|
|
53
|
-
status: r.status, assignee: r.assignee, createdAt: r.created_at, updatedAt: r.updated_at,
|
|
54
|
-
}));
|
|
55
|
-
}
|
|
56
|
-
finally {
|
|
57
|
-
db.close();
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
export function showJob(home, jobId) {
|
|
61
|
-
const db = new Database(booksPath(home));
|
|
62
|
-
db.pragma('foreign_keys = ON');
|
|
63
|
-
try {
|
|
64
|
-
const row = db.prepare(`SELECT id, piece_id, title, description, status, assignee, created_at, updated_at FROM jobs WHERE id = ?`).get(jobId);
|
|
65
|
-
if (!row)
|
|
66
|
-
return null;
|
|
67
|
-
return {
|
|
68
|
-
id: row.id, pieceId: row.piece_id, title: row.title, description: row.description,
|
|
69
|
-
status: row.status, assignee: row.assignee, createdAt: row.created_at, updatedAt: row.updated_at,
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
finally {
|
|
73
|
-
db.close();
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
export function updateJob(home, jobId, opts) {
|
|
77
|
-
const db = new Database(booksPath(home));
|
|
78
|
-
db.pragma('foreign_keys = ON');
|
|
79
|
-
try {
|
|
80
|
-
const sets = [];
|
|
81
|
-
const params = [];
|
|
82
|
-
if (opts.title !== undefined) {
|
|
83
|
-
sets.push(`title = ?`);
|
|
84
|
-
params.push(opts.title);
|
|
85
|
-
}
|
|
86
|
-
if (opts.description !== undefined) {
|
|
87
|
-
sets.push(`description = ?`);
|
|
88
|
-
params.push(opts.description);
|
|
89
|
-
}
|
|
90
|
-
if (opts.status !== undefined) {
|
|
91
|
-
sets.push(`status = ?`);
|
|
92
|
-
params.push(opts.status);
|
|
93
|
-
}
|
|
94
|
-
if (opts.assignee !== undefined) {
|
|
95
|
-
sets.push(`assignee = ?`);
|
|
96
|
-
params.push(opts.assignee);
|
|
97
|
-
}
|
|
98
|
-
if (sets.length === 0)
|
|
99
|
-
throw new Error('No fields to update.');
|
|
100
|
-
sets.push(`updated_at = datetime('now')`);
|
|
101
|
-
params.push(jobId);
|
|
102
|
-
db.prepare(`UPDATE jobs SET ${sets.join(', ')} WHERE id = ?`).run(...params);
|
|
103
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'operator', 'job_updated', 'job', jobId, JSON.stringify(opts));
|
|
104
|
-
const result = showJob(home, jobId);
|
|
105
|
-
if (!result)
|
|
106
|
-
throw new Error(`Job "${jobId}" not found.`);
|
|
107
|
-
if (opts.status === 'active') {
|
|
108
|
-
signalEvent(home, 'job.ready', { jobId }, 'framework');
|
|
109
|
-
}
|
|
110
|
-
else if (opts.status === 'completed') {
|
|
111
|
-
signalEvent(home, 'job.completed', { jobId }, 'framework');
|
|
112
|
-
}
|
|
113
|
-
else if (opts.status === 'failed') {
|
|
114
|
-
signalEvent(home, 'job.failed', { jobId }, 'framework');
|
|
115
|
-
}
|
|
116
|
-
return result;
|
|
117
|
-
}
|
|
118
|
-
finally {
|
|
119
|
-
db.close();
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Check job completion — counts child strokes.
|
|
124
|
-
*/
|
|
125
|
-
export function checkJobCompletion(home, jobId) {
|
|
126
|
-
const db = new Database(booksPath(home));
|
|
127
|
-
db.pragma('foreign_keys = ON');
|
|
128
|
-
try {
|
|
129
|
-
const rows = db.prepare(`SELECT status, COUNT(*) as cnt FROM strokes WHERE job_id = ? GROUP BY status`).all(jobId);
|
|
130
|
-
let total = 0, done = 0, pending = 0, failed = 0;
|
|
131
|
-
for (const r of rows) {
|
|
132
|
-
total += r.cnt;
|
|
133
|
-
if (r.status === 'complete')
|
|
134
|
-
done += r.cnt;
|
|
135
|
-
else if (r.status === 'pending')
|
|
136
|
-
pending += r.cnt;
|
|
137
|
-
else if (r.status === 'failed')
|
|
138
|
-
failed += r.cnt;
|
|
139
|
-
}
|
|
140
|
-
return { complete: total > 0 && pending === 0, total, done, pending, failed };
|
|
141
|
-
}
|
|
142
|
-
finally {
|
|
143
|
-
db.close();
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Complete a job if all strokes are done (complete or failed, none pending).
|
|
148
|
-
* Sets job to 'completed' if no strokes failed, 'failed' if any failed.
|
|
149
|
-
* Signals job.completed or job.failed on transition.
|
|
150
|
-
*/
|
|
151
|
-
export function completeJobIfReady(home, jobId) {
|
|
152
|
-
const check = checkJobCompletion(home, jobId);
|
|
153
|
-
if (!check.complete || check.total === 0) {
|
|
154
|
-
const current = showJob(home, jobId);
|
|
155
|
-
return { changed: false, newStatus: current?.status ?? 'unknown' };
|
|
156
|
-
}
|
|
157
|
-
const db = new Database(booksPath(home));
|
|
158
|
-
db.pragma('foreign_keys = ON');
|
|
159
|
-
try {
|
|
160
|
-
const current = db.prepare(`SELECT status FROM jobs WHERE id = ?`).get(jobId);
|
|
161
|
-
if (!current || current.status === 'completed' || current.status === 'failed') {
|
|
162
|
-
return { changed: false, newStatus: current?.status ?? 'unknown' };
|
|
163
|
-
}
|
|
164
|
-
const newStatus = check.failed > 0 ? 'failed' : 'completed';
|
|
165
|
-
db.prepare(`UPDATE jobs SET status = ?, updated_at = datetime('now') WHERE id = ?`).run(newStatus, jobId);
|
|
166
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'framework', `job_${newStatus}`, 'job', jobId, JSON.stringify(check));
|
|
167
|
-
const eventName = newStatus === 'completed' ? 'job.completed' : 'job.failed';
|
|
168
|
-
signalEvent(home, eventName, { jobId }, 'framework');
|
|
169
|
-
return { changed: true, newStatus };
|
|
170
|
-
}
|
|
171
|
-
finally {
|
|
172
|
-
db.close();
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
//# sourceMappingURL=job.js.map
|
package/dist/job.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"job.js","sourceRoot":"","sources":["../src/job.ts"],"names":[],"mappings":"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"}
|
package/dist/piece.d.ts
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
export interface CompletionCheck {
|
|
2
|
-
complete: boolean;
|
|
3
|
-
total: number;
|
|
4
|
-
done: number;
|
|
5
|
-
pending: number;
|
|
6
|
-
failed: number;
|
|
7
|
-
}
|
|
8
|
-
export interface CompletionResult {
|
|
9
|
-
changed: boolean;
|
|
10
|
-
newStatus: string;
|
|
11
|
-
}
|
|
12
|
-
export interface PieceRecord {
|
|
13
|
-
id: string;
|
|
14
|
-
workId: string | null;
|
|
15
|
-
title: string;
|
|
16
|
-
description: string | null;
|
|
17
|
-
status: string;
|
|
18
|
-
createdAt: string;
|
|
19
|
-
updatedAt: string;
|
|
20
|
-
}
|
|
21
|
-
export interface CreatePieceOptions {
|
|
22
|
-
title: string;
|
|
23
|
-
description?: string;
|
|
24
|
-
workId?: string;
|
|
25
|
-
}
|
|
26
|
-
export interface ListPiecesOptions {
|
|
27
|
-
status?: string;
|
|
28
|
-
workId?: string;
|
|
29
|
-
}
|
|
30
|
-
export interface UpdatePieceOptions {
|
|
31
|
-
title?: string;
|
|
32
|
-
description?: string;
|
|
33
|
-
status?: string;
|
|
34
|
-
}
|
|
35
|
-
export declare function createPiece(home: string, opts: CreatePieceOptions): PieceRecord;
|
|
36
|
-
export declare function listPieces(home: string, opts?: ListPiecesOptions): PieceRecord[];
|
|
37
|
-
export declare function showPiece(home: string, pieceId: string): PieceRecord | null;
|
|
38
|
-
export declare function updatePiece(home: string, pieceId: string, opts: UpdatePieceOptions): PieceRecord;
|
|
39
|
-
/**
|
|
40
|
-
* Check piece completion — counts child jobs.
|
|
41
|
-
* Per policy: a piece with failed jobs stays active (manual resolution needed).
|
|
42
|
-
*/
|
|
43
|
-
export declare function checkPieceCompletion(home: string, pieceId: string): CompletionCheck;
|
|
44
|
-
/**
|
|
45
|
-
* Complete a piece if all jobs are completed/cancelled (none failed, none pending).
|
|
46
|
-
* Signals piece.completed on transition.
|
|
47
|
-
*/
|
|
48
|
-
export declare function completePieceIfReady(home: string, pieceId: string): CompletionResult;
|
|
49
|
-
//# sourceMappingURL=piece.d.ts.map
|
package/dist/piece.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"piece.d.ts","sourceRoot":"","sources":["../src/piece.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,WAAW,CA2B/E;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,iBAAsB,GAAG,WAAW,EAAE,CAwBpF;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAmB3E;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,WAAW,CAmChG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAuBnF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,gBAAgB,CA8BpF"}
|
package/dist/piece.js
DELETED
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Piece — a subdivision of work, grouping related jobs.
|
|
3
|
-
*
|
|
4
|
-
* Pieces are historical records — no delete, only status transitions.
|
|
5
|
-
*/
|
|
6
|
-
import Database from 'better-sqlite3';
|
|
7
|
-
import { booksPath } from "./nexus-home.js";
|
|
8
|
-
import { generateId } from "./id.js";
|
|
9
|
-
import { signalEvent } from "./events.js";
|
|
10
|
-
export function createPiece(home, opts) {
|
|
11
|
-
const db = new Database(booksPath(home));
|
|
12
|
-
db.pragma('foreign_keys = ON');
|
|
13
|
-
try {
|
|
14
|
-
const id = generateId('p');
|
|
15
|
-
db.prepare(`INSERT INTO pieces (id, work_id, title, description) VALUES (?, ?, ?, ?)`).run(id, opts.workId ?? null, opts.title, opts.description ?? null);
|
|
16
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'operator', 'piece_created', 'piece', id, JSON.stringify(opts));
|
|
17
|
-
const row = db.prepare(`SELECT id, work_id, title, description, status, created_at, updated_at FROM pieces WHERE id = ?`).get(id);
|
|
18
|
-
const record = {
|
|
19
|
-
id: row.id, workId: row.work_id, title: row.title, description: row.description,
|
|
20
|
-
status: row.status, createdAt: row.created_at, updatedAt: row.updated_at,
|
|
21
|
-
};
|
|
22
|
-
signalEvent(home, 'piece.created', { pieceId: id, workId: opts.workId ?? null }, 'framework');
|
|
23
|
-
return record;
|
|
24
|
-
}
|
|
25
|
-
finally {
|
|
26
|
-
db.close();
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
export function listPieces(home, opts = {}) {
|
|
30
|
-
const db = new Database(booksPath(home));
|
|
31
|
-
db.pragma('foreign_keys = ON');
|
|
32
|
-
try {
|
|
33
|
-
let query = `SELECT id, work_id, title, description, status, created_at, updated_at FROM pieces`;
|
|
34
|
-
const conditions = [];
|
|
35
|
-
const params = [];
|
|
36
|
-
if (opts.status) {
|
|
37
|
-
conditions.push(`status = ?`);
|
|
38
|
-
params.push(opts.status);
|
|
39
|
-
}
|
|
40
|
-
if (opts.workId) {
|
|
41
|
-
conditions.push(`work_id = ?`);
|
|
42
|
-
params.push(opts.workId);
|
|
43
|
-
}
|
|
44
|
-
if (conditions.length > 0)
|
|
45
|
-
query += ` WHERE ${conditions.join(' AND ')}`;
|
|
46
|
-
query += ` ORDER BY created_at DESC`;
|
|
47
|
-
return db.prepare(query).all(...params).map(r => ({
|
|
48
|
-
id: r.id, workId: r.work_id, title: r.title, description: r.description,
|
|
49
|
-
status: r.status, createdAt: r.created_at, updatedAt: r.updated_at,
|
|
50
|
-
}));
|
|
51
|
-
}
|
|
52
|
-
finally {
|
|
53
|
-
db.close();
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
export function showPiece(home, pieceId) {
|
|
57
|
-
const db = new Database(booksPath(home));
|
|
58
|
-
db.pragma('foreign_keys = ON');
|
|
59
|
-
try {
|
|
60
|
-
const row = db.prepare(`SELECT id, work_id, title, description, status, created_at, updated_at FROM pieces WHERE id = ?`).get(pieceId);
|
|
61
|
-
if (!row)
|
|
62
|
-
return null;
|
|
63
|
-
return {
|
|
64
|
-
id: row.id, workId: row.work_id, title: row.title, description: row.description,
|
|
65
|
-
status: row.status, createdAt: row.created_at, updatedAt: row.updated_at,
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
finally {
|
|
69
|
-
db.close();
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
export function updatePiece(home, pieceId, opts) {
|
|
73
|
-
const db = new Database(booksPath(home));
|
|
74
|
-
db.pragma('foreign_keys = ON');
|
|
75
|
-
try {
|
|
76
|
-
const sets = [];
|
|
77
|
-
const params = [];
|
|
78
|
-
if (opts.title !== undefined) {
|
|
79
|
-
sets.push(`title = ?`);
|
|
80
|
-
params.push(opts.title);
|
|
81
|
-
}
|
|
82
|
-
if (opts.description !== undefined) {
|
|
83
|
-
sets.push(`description = ?`);
|
|
84
|
-
params.push(opts.description);
|
|
85
|
-
}
|
|
86
|
-
if (opts.status !== undefined) {
|
|
87
|
-
sets.push(`status = ?`);
|
|
88
|
-
params.push(opts.status);
|
|
89
|
-
}
|
|
90
|
-
if (sets.length === 0)
|
|
91
|
-
throw new Error('No fields to update.');
|
|
92
|
-
sets.push(`updated_at = datetime('now')`);
|
|
93
|
-
params.push(pieceId);
|
|
94
|
-
db.prepare(`UPDATE pieces SET ${sets.join(', ')} WHERE id = ?`).run(...params);
|
|
95
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'operator', 'piece_updated', 'piece', pieceId, JSON.stringify(opts));
|
|
96
|
-
const result = showPiece(home, pieceId);
|
|
97
|
-
if (!result)
|
|
98
|
-
throw new Error(`Piece "${pieceId}" not found.`);
|
|
99
|
-
if (opts.status === 'active') {
|
|
100
|
-
signalEvent(home, 'piece.ready', { pieceId }, 'framework');
|
|
101
|
-
}
|
|
102
|
-
else if (opts.status === 'completed') {
|
|
103
|
-
signalEvent(home, 'piece.completed', { pieceId }, 'framework');
|
|
104
|
-
}
|
|
105
|
-
return result;
|
|
106
|
-
}
|
|
107
|
-
finally {
|
|
108
|
-
db.close();
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Check piece completion — counts child jobs.
|
|
113
|
-
* Per policy: a piece with failed jobs stays active (manual resolution needed).
|
|
114
|
-
*/
|
|
115
|
-
export function checkPieceCompletion(home, pieceId) {
|
|
116
|
-
const db = new Database(booksPath(home));
|
|
117
|
-
db.pragma('foreign_keys = ON');
|
|
118
|
-
try {
|
|
119
|
-
const rows = db.prepare(`SELECT status, COUNT(*) as cnt FROM jobs WHERE piece_id = ? GROUP BY status`).all(pieceId);
|
|
120
|
-
let total = 0, done = 0, pending = 0, failed = 0;
|
|
121
|
-
for (const r of rows) {
|
|
122
|
-
total += r.cnt;
|
|
123
|
-
if (r.status === 'completed' || r.status === 'cancelled')
|
|
124
|
-
done += r.cnt;
|
|
125
|
-
else if (r.status === 'open' || r.status === 'active')
|
|
126
|
-
pending += r.cnt;
|
|
127
|
-
else if (r.status === 'failed')
|
|
128
|
-
failed += r.cnt;
|
|
129
|
-
}
|
|
130
|
-
// A piece is only auto-completable when all jobs are completed/cancelled and none failed.
|
|
131
|
-
// If any job failed, the piece stays active until manual resolution.
|
|
132
|
-
return { complete: total > 0 && pending === 0 && failed === 0, total, done, pending, failed };
|
|
133
|
-
}
|
|
134
|
-
finally {
|
|
135
|
-
db.close();
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Complete a piece if all jobs are completed/cancelled (none failed, none pending).
|
|
140
|
-
* Signals piece.completed on transition.
|
|
141
|
-
*/
|
|
142
|
-
export function completePieceIfReady(home, pieceId) {
|
|
143
|
-
const check = checkPieceCompletion(home, pieceId);
|
|
144
|
-
if (!check.complete || check.total === 0) {
|
|
145
|
-
const current = showPiece(home, pieceId);
|
|
146
|
-
return { changed: false, newStatus: current?.status ?? 'unknown' };
|
|
147
|
-
}
|
|
148
|
-
const db = new Database(booksPath(home));
|
|
149
|
-
db.pragma('foreign_keys = ON');
|
|
150
|
-
try {
|
|
151
|
-
const current = db.prepare(`SELECT status FROM pieces WHERE id = ?`).get(pieceId);
|
|
152
|
-
if (!current || current.status === 'completed') {
|
|
153
|
-
return { changed: false, newStatus: current?.status ?? 'unknown' };
|
|
154
|
-
}
|
|
155
|
-
db.prepare(`UPDATE pieces SET status = 'completed', updated_at = datetime('now') WHERE id = ?`).run(pieceId);
|
|
156
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'framework', 'piece_completed', 'piece', pieceId, JSON.stringify(check));
|
|
157
|
-
signalEvent(home, 'piece.completed', { pieceId }, 'framework');
|
|
158
|
-
return { changed: true, newStatus: 'completed' };
|
|
159
|
-
}
|
|
160
|
-
finally {
|
|
161
|
-
db.close();
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
//# sourceMappingURL=piece.js.map
|
package/dist/piece.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"piece.js","sourceRoot":"","sources":["../src/piece.ts"],"names":[],"mappings":"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"}
|
package/dist/stroke.d.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
export interface StrokeRecord {
|
|
2
|
-
id: string;
|
|
3
|
-
jobId: string;
|
|
4
|
-
kind: string;
|
|
5
|
-
content: string | null;
|
|
6
|
-
status: string;
|
|
7
|
-
createdAt: string;
|
|
8
|
-
updatedAt: string;
|
|
9
|
-
}
|
|
10
|
-
export interface CreateStrokeOptions {
|
|
11
|
-
jobId: string;
|
|
12
|
-
kind: string;
|
|
13
|
-
content?: string;
|
|
14
|
-
}
|
|
15
|
-
export interface ListStrokesOptions {
|
|
16
|
-
jobId?: string;
|
|
17
|
-
status?: string;
|
|
18
|
-
}
|
|
19
|
-
export interface UpdateStrokeOptions {
|
|
20
|
-
status?: string;
|
|
21
|
-
content?: string;
|
|
22
|
-
}
|
|
23
|
-
export declare function createStroke(home: string, opts: CreateStrokeOptions): StrokeRecord;
|
|
24
|
-
export declare function listStrokes(home: string, opts?: ListStrokesOptions): StrokeRecord[];
|
|
25
|
-
export declare function showStroke(home: string, strokeId: string): StrokeRecord | null;
|
|
26
|
-
export declare function updateStroke(home: string, strokeId: string, opts: UpdateStrokeOptions): StrokeRecord;
|
|
27
|
-
//# sourceMappingURL=stroke.d.ts.map
|
package/dist/stroke.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stroke.d.ts","sourceRoot":"","sources":["../src/stroke.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,YAAY,CA2BlF;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,kBAAuB,GAAG,YAAY,EAAE,CAwBvF;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAmB9E;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,YAAY,CA2BpG"}
|
package/dist/stroke.js
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Stroke — an atomic record of work performed against a job.
|
|
3
|
-
*
|
|
4
|
-
* Strokes are historical records — no delete, only status transitions.
|
|
5
|
-
*/
|
|
6
|
-
import Database from 'better-sqlite3';
|
|
7
|
-
import { booksPath } from "./nexus-home.js";
|
|
8
|
-
import { generateId } from "./id.js";
|
|
9
|
-
import { signalEvent } from "./events.js";
|
|
10
|
-
export function createStroke(home, opts) {
|
|
11
|
-
const db = new Database(booksPath(home));
|
|
12
|
-
db.pragma('foreign_keys = ON');
|
|
13
|
-
try {
|
|
14
|
-
const id = generateId('s');
|
|
15
|
-
db.prepare(`INSERT INTO strokes (id, job_id, kind, content) VALUES (?, ?, ?, ?)`).run(id, opts.jobId, opts.kind, opts.content ?? null);
|
|
16
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'operator', 'stroke_created', 'stroke', id, JSON.stringify(opts));
|
|
17
|
-
const row = db.prepare(`SELECT id, job_id, kind, content, status, created_at, updated_at FROM strokes WHERE id = ?`).get(id);
|
|
18
|
-
const record = {
|
|
19
|
-
id: row.id, jobId: row.job_id, kind: row.kind, content: row.content,
|
|
20
|
-
status: row.status, createdAt: row.created_at, updatedAt: row.updated_at,
|
|
21
|
-
};
|
|
22
|
-
signalEvent(home, 'stroke.recorded', { strokeId: id, jobId: opts.jobId }, 'framework');
|
|
23
|
-
return record;
|
|
24
|
-
}
|
|
25
|
-
finally {
|
|
26
|
-
db.close();
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
export function listStrokes(home, opts = {}) {
|
|
30
|
-
const db = new Database(booksPath(home));
|
|
31
|
-
db.pragma('foreign_keys = ON');
|
|
32
|
-
try {
|
|
33
|
-
let query = `SELECT id, job_id, kind, content, status, created_at, updated_at FROM strokes`;
|
|
34
|
-
const conditions = [];
|
|
35
|
-
const params = [];
|
|
36
|
-
if (opts.jobId) {
|
|
37
|
-
conditions.push(`job_id = ?`);
|
|
38
|
-
params.push(opts.jobId);
|
|
39
|
-
}
|
|
40
|
-
if (opts.status) {
|
|
41
|
-
conditions.push(`status = ?`);
|
|
42
|
-
params.push(opts.status);
|
|
43
|
-
}
|
|
44
|
-
if (conditions.length > 0)
|
|
45
|
-
query += ` WHERE ${conditions.join(' AND ')}`;
|
|
46
|
-
query += ` ORDER BY created_at DESC`;
|
|
47
|
-
return db.prepare(query).all(...params).map(r => ({
|
|
48
|
-
id: r.id, jobId: r.job_id, kind: r.kind, content: r.content,
|
|
49
|
-
status: r.status, createdAt: r.created_at, updatedAt: r.updated_at,
|
|
50
|
-
}));
|
|
51
|
-
}
|
|
52
|
-
finally {
|
|
53
|
-
db.close();
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
export function showStroke(home, strokeId) {
|
|
57
|
-
const db = new Database(booksPath(home));
|
|
58
|
-
db.pragma('foreign_keys = ON');
|
|
59
|
-
try {
|
|
60
|
-
const row = db.prepare(`SELECT id, job_id, kind, content, status, created_at, updated_at FROM strokes WHERE id = ?`).get(strokeId);
|
|
61
|
-
if (!row)
|
|
62
|
-
return null;
|
|
63
|
-
return {
|
|
64
|
-
id: row.id, jobId: row.job_id, kind: row.kind, content: row.content,
|
|
65
|
-
status: row.status, createdAt: row.created_at, updatedAt: row.updated_at,
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
finally {
|
|
69
|
-
db.close();
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
export function updateStroke(home, strokeId, opts) {
|
|
73
|
-
const db = new Database(booksPath(home));
|
|
74
|
-
db.pragma('foreign_keys = ON');
|
|
75
|
-
try {
|
|
76
|
-
const sets = [];
|
|
77
|
-
const params = [];
|
|
78
|
-
if (opts.status !== undefined) {
|
|
79
|
-
sets.push(`status = ?`);
|
|
80
|
-
params.push(opts.status);
|
|
81
|
-
}
|
|
82
|
-
if (opts.content !== undefined) {
|
|
83
|
-
sets.push(`content = ?`);
|
|
84
|
-
params.push(opts.content);
|
|
85
|
-
}
|
|
86
|
-
if (sets.length === 0)
|
|
87
|
-
throw new Error('No fields to update.');
|
|
88
|
-
sets.push(`updated_at = datetime('now')`);
|
|
89
|
-
params.push(strokeId);
|
|
90
|
-
db.prepare(`UPDATE strokes SET ${sets.join(', ')} WHERE id = ?`).run(...params);
|
|
91
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'operator', 'stroke_updated', 'stroke', strokeId, JSON.stringify(opts));
|
|
92
|
-
const result = showStroke(home, strokeId);
|
|
93
|
-
if (!result)
|
|
94
|
-
throw new Error(`Stroke "${strokeId}" not found.`);
|
|
95
|
-
return result;
|
|
96
|
-
}
|
|
97
|
-
finally {
|
|
98
|
-
db.close();
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
//# sourceMappingURL=stroke.js.map
|
package/dist/stroke.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stroke.js","sourceRoot":"","sources":["../src/stroke.ts"],"names":[],"mappings":"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"}
|
package/dist/work.d.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
export interface CompletionCheck {
|
|
2
|
-
complete: boolean;
|
|
3
|
-
total: number;
|
|
4
|
-
done: number;
|
|
5
|
-
pending: number;
|
|
6
|
-
failed: number;
|
|
7
|
-
}
|
|
8
|
-
export interface CompletionResult {
|
|
9
|
-
changed: boolean;
|
|
10
|
-
newStatus: string;
|
|
11
|
-
}
|
|
12
|
-
export interface WorkRecord {
|
|
13
|
-
id: string;
|
|
14
|
-
commissionId: string | null;
|
|
15
|
-
title: string;
|
|
16
|
-
description: string | null;
|
|
17
|
-
status: string;
|
|
18
|
-
createdAt: string;
|
|
19
|
-
updatedAt: string;
|
|
20
|
-
}
|
|
21
|
-
export interface CreateWorkOptions {
|
|
22
|
-
title: string;
|
|
23
|
-
description?: string;
|
|
24
|
-
commissionId?: string;
|
|
25
|
-
}
|
|
26
|
-
export interface ListWorksOptions {
|
|
27
|
-
status?: string;
|
|
28
|
-
commissionId?: string;
|
|
29
|
-
}
|
|
30
|
-
export interface UpdateWorkOptions {
|
|
31
|
-
title?: string;
|
|
32
|
-
description?: string;
|
|
33
|
-
status?: string;
|
|
34
|
-
}
|
|
35
|
-
export declare function createWork(home: string, opts: CreateWorkOptions): WorkRecord;
|
|
36
|
-
export declare function listWorks(home: string, opts?: ListWorksOptions): WorkRecord[];
|
|
37
|
-
export declare function showWork(home: string, workId: string): WorkRecord | null;
|
|
38
|
-
export declare function updateWork(home: string, workId: string, opts: UpdateWorkOptions): WorkRecord;
|
|
39
|
-
/**
|
|
40
|
-
* Check work completion — counts child pieces.
|
|
41
|
-
*/
|
|
42
|
-
export declare function checkWorkCompletion(home: string, workId: string): CompletionCheck;
|
|
43
|
-
/**
|
|
44
|
-
* Complete a work if all pieces are completed/cancelled.
|
|
45
|
-
* Signals work.completed on transition.
|
|
46
|
-
*/
|
|
47
|
-
export declare function completeWorkIfReady(home: string, workId: string): CompletionResult;
|
|
48
|
-
//# sourceMappingURL=work.d.ts.map
|
package/dist/work.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"work.d.ts","sourceRoot":"","sources":["../src/work.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,UAAU,CA2B5E;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,UAAU,EAAE,CAwBjF;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAmBxE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,UAAU,CAiC5F;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAoBjF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,CA8BlF"}
|