@shardworks/nexus-core 0.1.60 → 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/work.js
DELETED
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Work — top-level unit of the work decomposition hierarchy.
|
|
3
|
-
*
|
|
4
|
-
* A work groups pieces that collectively fulfill a commission or standalone goal.
|
|
5
|
-
* Work items are historical records — no delete, only status transitions.
|
|
6
|
-
*/
|
|
7
|
-
import Database from 'better-sqlite3';
|
|
8
|
-
import { booksPath } from "./nexus-home.js";
|
|
9
|
-
import { generateId } from "./id.js";
|
|
10
|
-
import { signalEvent } from "./events.js";
|
|
11
|
-
export function createWork(home, opts) {
|
|
12
|
-
const db = new Database(booksPath(home));
|
|
13
|
-
db.pragma('foreign_keys = ON');
|
|
14
|
-
try {
|
|
15
|
-
const id = generateId('w');
|
|
16
|
-
db.prepare(`INSERT INTO works (id, commission_id, title, description) VALUES (?, ?, ?, ?)`).run(id, opts.commissionId ?? null, opts.title, opts.description ?? null);
|
|
17
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'operator', 'work_created', 'work', id, JSON.stringify(opts));
|
|
18
|
-
const row = db.prepare(`SELECT id, commission_id, title, description, status, created_at, updated_at FROM works WHERE id = ?`).get(id);
|
|
19
|
-
const record = {
|
|
20
|
-
id: row.id, commissionId: row.commission_id, title: row.title, description: row.description,
|
|
21
|
-
status: row.status, createdAt: row.created_at, updatedAt: row.updated_at,
|
|
22
|
-
};
|
|
23
|
-
signalEvent(home, 'work.created', { workId: id, commissionId: opts.commissionId ?? null }, 'framework');
|
|
24
|
-
return record;
|
|
25
|
-
}
|
|
26
|
-
finally {
|
|
27
|
-
db.close();
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
export function listWorks(home, opts = {}) {
|
|
31
|
-
const db = new Database(booksPath(home));
|
|
32
|
-
db.pragma('foreign_keys = ON');
|
|
33
|
-
try {
|
|
34
|
-
let query = `SELECT id, commission_id, title, description, status, created_at, updated_at FROM works`;
|
|
35
|
-
const conditions = [];
|
|
36
|
-
const params = [];
|
|
37
|
-
if (opts.status) {
|
|
38
|
-
conditions.push(`status = ?`);
|
|
39
|
-
params.push(opts.status);
|
|
40
|
-
}
|
|
41
|
-
if (opts.commissionId) {
|
|
42
|
-
conditions.push(`commission_id = ?`);
|
|
43
|
-
params.push(opts.commissionId);
|
|
44
|
-
}
|
|
45
|
-
if (conditions.length > 0)
|
|
46
|
-
query += ` WHERE ${conditions.join(' AND ')}`;
|
|
47
|
-
query += ` ORDER BY created_at DESC`;
|
|
48
|
-
return db.prepare(query).all(...params).map(r => ({
|
|
49
|
-
id: r.id, commissionId: r.commission_id, title: r.title, description: r.description,
|
|
50
|
-
status: r.status, createdAt: r.created_at, updatedAt: r.updated_at,
|
|
51
|
-
}));
|
|
52
|
-
}
|
|
53
|
-
finally {
|
|
54
|
-
db.close();
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
export function showWork(home, workId) {
|
|
58
|
-
const db = new Database(booksPath(home));
|
|
59
|
-
db.pragma('foreign_keys = ON');
|
|
60
|
-
try {
|
|
61
|
-
const row = db.prepare(`SELECT id, commission_id, title, description, status, created_at, updated_at FROM works WHERE id = ?`).get(workId);
|
|
62
|
-
if (!row)
|
|
63
|
-
return null;
|
|
64
|
-
return {
|
|
65
|
-
id: row.id, commissionId: row.commission_id, title: row.title, description: row.description,
|
|
66
|
-
status: row.status, createdAt: row.created_at, updatedAt: row.updated_at,
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
finally {
|
|
70
|
-
db.close();
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
export function updateWork(home, workId, opts) {
|
|
74
|
-
const db = new Database(booksPath(home));
|
|
75
|
-
db.pragma('foreign_keys = ON');
|
|
76
|
-
try {
|
|
77
|
-
const sets = [];
|
|
78
|
-
const params = [];
|
|
79
|
-
if (opts.title !== undefined) {
|
|
80
|
-
sets.push(`title = ?`);
|
|
81
|
-
params.push(opts.title);
|
|
82
|
-
}
|
|
83
|
-
if (opts.description !== undefined) {
|
|
84
|
-
sets.push(`description = ?`);
|
|
85
|
-
params.push(opts.description);
|
|
86
|
-
}
|
|
87
|
-
if (opts.status !== undefined) {
|
|
88
|
-
sets.push(`status = ?`);
|
|
89
|
-
params.push(opts.status);
|
|
90
|
-
}
|
|
91
|
-
if (sets.length === 0)
|
|
92
|
-
throw new Error('No fields to update.');
|
|
93
|
-
sets.push(`updated_at = datetime('now')`);
|
|
94
|
-
params.push(workId);
|
|
95
|
-
db.prepare(`UPDATE works SET ${sets.join(', ')} WHERE id = ?`).run(...params);
|
|
96
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'operator', 'work_updated', 'work', workId, JSON.stringify(opts));
|
|
97
|
-
const result = showWork(home, workId);
|
|
98
|
-
if (!result)
|
|
99
|
-
throw new Error(`Work "${workId}" not found.`);
|
|
100
|
-
if (opts.status === 'completed') {
|
|
101
|
-
signalEvent(home, 'work.completed', { workId }, 'framework');
|
|
102
|
-
}
|
|
103
|
-
return result;
|
|
104
|
-
}
|
|
105
|
-
finally {
|
|
106
|
-
db.close();
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Check work completion — counts child pieces.
|
|
111
|
-
*/
|
|
112
|
-
export function checkWorkCompletion(home, workId) {
|
|
113
|
-
const db = new Database(booksPath(home));
|
|
114
|
-
db.pragma('foreign_keys = ON');
|
|
115
|
-
try {
|
|
116
|
-
const rows = db.prepare(`SELECT status, COUNT(*) as cnt FROM pieces WHERE work_id = ? GROUP BY status`).all(workId);
|
|
117
|
-
let total = 0, done = 0, pending = 0, failed = 0;
|
|
118
|
-
for (const r of rows) {
|
|
119
|
-
total += r.cnt;
|
|
120
|
-
if (r.status === 'completed' || r.status === 'cancelled')
|
|
121
|
-
done += r.cnt;
|
|
122
|
-
else if (r.status === 'open' || r.status === 'active')
|
|
123
|
-
pending += r.cnt;
|
|
124
|
-
}
|
|
125
|
-
return { complete: total > 0 && pending === 0 && failed === 0, total, done, pending, failed };
|
|
126
|
-
}
|
|
127
|
-
finally {
|
|
128
|
-
db.close();
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Complete a work if all pieces are completed/cancelled.
|
|
133
|
-
* Signals work.completed on transition.
|
|
134
|
-
*/
|
|
135
|
-
export function completeWorkIfReady(home, workId) {
|
|
136
|
-
const check = checkWorkCompletion(home, workId);
|
|
137
|
-
if (!check.complete || check.total === 0) {
|
|
138
|
-
const current = showWork(home, workId);
|
|
139
|
-
return { changed: false, newStatus: current?.status ?? 'unknown' };
|
|
140
|
-
}
|
|
141
|
-
const db = new Database(booksPath(home));
|
|
142
|
-
db.pragma('foreign_keys = ON');
|
|
143
|
-
try {
|
|
144
|
-
const current = db.prepare(`SELECT status FROM works WHERE id = ?`).get(workId);
|
|
145
|
-
if (!current || current.status === 'completed') {
|
|
146
|
-
return { changed: false, newStatus: current?.status ?? 'unknown' };
|
|
147
|
-
}
|
|
148
|
-
db.prepare(`UPDATE works SET status = 'completed', updated_at = datetime('now') WHERE id = ?`).run(workId);
|
|
149
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'framework', 'work_completed', 'work', workId, JSON.stringify(check));
|
|
150
|
-
signalEvent(home, 'work.completed', { workId }, 'framework');
|
|
151
|
-
return { changed: true, newStatus: 'completed' };
|
|
152
|
-
}
|
|
153
|
-
finally {
|
|
154
|
-
db.close();
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
//# sourceMappingURL=work.js.map
|
package/dist/work.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"work.js","sourceRoot":"","sources":["../src/work.ts"],"names":[],"mappings":"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"}
|