@shardworks/nexus-core 0.1.99 → 0.1.101
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 +95 -166
- package/dist/guild-config.d.ts +14 -52
- package/dist/guild-config.d.ts.map +1 -1
- package/dist/guild-config.js +7 -10
- package/dist/guild-config.js.map +1 -1
- package/dist/guild.d.ts +83 -0
- package/dist/guild.d.ts.map +1 -0
- package/dist/guild.js +45 -0
- package/dist/guild.js.map +1 -0
- package/dist/id.d.ts +14 -0
- package/dist/id.d.ts.map +1 -0
- package/dist/id.js +19 -0
- package/dist/id.js.map +1 -0
- package/dist/index.d.ts +6 -30
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -32
- package/dist/index.js.map +1 -1
- package/dist/nexus-home.d.ts +0 -4
- package/dist/nexus-home.d.ts.map +1 -1
- package/dist/nexus-home.js +1 -9
- package/dist/nexus-home.js.map +1 -1
- package/dist/plugin.d.ts +115 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +39 -0
- package/dist/plugin.js.map +1 -0
- package/dist/resolve-package.d.ts +58 -0
- package/dist/resolve-package.d.ts.map +1 -0
- package/dist/resolve-package.js +123 -0
- package/dist/resolve-package.js.map +1 -0
- package/package.json +5 -14
- package/dist/book.d.ts +0 -110
- package/dist/book.d.ts.map +0 -1
- package/dist/book.js +0 -16
- package/dist/book.js.map +0 -1
- package/dist/legacy/1/anima.d.ts +0 -79
- package/dist/legacy/1/anima.d.ts.map +0 -1
- package/dist/legacy/1/anima.js +0 -285
- package/dist/legacy/1/anima.js.map +0 -1
- package/dist/legacy/1/audit.d.ts +0 -23
- package/dist/legacy/1/audit.d.ts.map +0 -1
- package/dist/legacy/1/audit.js +0 -61
- package/dist/legacy/1/audit.js.map +0 -1
- package/dist/legacy/1/bundle.d.ts +0 -111
- package/dist/legacy/1/bundle.d.ts.map +0 -1
- package/dist/legacy/1/bundle.js +0 -452
- package/dist/legacy/1/bundle.js.map +0 -1
- package/dist/legacy/1/clock-daemon.d.ts +0 -2
- package/dist/legacy/1/clock-daemon.d.ts.map +0 -1
- package/dist/legacy/1/clock-daemon.js +0 -72
- package/dist/legacy/1/clock-daemon.js.map +0 -1
- package/dist/legacy/1/clockworks.d.ts +0 -98
- package/dist/legacy/1/clockworks.d.ts.map +0 -1
- package/dist/legacy/1/clockworks.js +0 -359
- package/dist/legacy/1/clockworks.js.map +0 -1
- package/dist/legacy/1/conversation.d.ts +0 -165
- package/dist/legacy/1/conversation.d.ts.map +0 -1
- package/dist/legacy/1/conversation.js +0 -457
- package/dist/legacy/1/conversation.js.map +0 -1
- package/dist/legacy/1/engine.d.ts +0 -90
- package/dist/legacy/1/engine.d.ts.map +0 -1
- package/dist/legacy/1/engine.js +0 -89
- package/dist/legacy/1/engine.js.map +0 -1
- package/dist/legacy/1/events.d.ts +0 -88
- package/dist/legacy/1/events.d.ts.map +0 -1
- package/dist/legacy/1/events.js +0 -239
- package/dist/legacy/1/events.js.map +0 -1
- package/dist/legacy/1/guild-config.d.ts +0 -74
- package/dist/legacy/1/guild-config.d.ts.map +0 -1
- package/dist/legacy/1/guild-config.js +0 -51
- package/dist/legacy/1/guild-config.js.map +0 -1
- package/dist/legacy/1/id.d.ts +0 -8
- package/dist/legacy/1/id.d.ts.map +0 -1
- package/dist/legacy/1/id.js +0 -27
- package/dist/legacy/1/id.js.map +0 -1
- package/dist/legacy/1/index.d.ts +0 -28
- package/dist/legacy/1/index.d.ts.map +0 -1
- package/dist/legacy/1/index.js +0 -32
- package/dist/legacy/1/index.js.map +0 -1
- package/dist/legacy/1/init-guild.d.ts +0 -24
- package/dist/legacy/1/init-guild.d.ts.map +0 -1
- package/dist/legacy/1/init-guild.js +0 -230
- package/dist/legacy/1/init-guild.js.map +0 -1
- package/dist/legacy/1/install-tool.d.ts +0 -73
- package/dist/legacy/1/install-tool.d.ts.map +0 -1
- package/dist/legacy/1/install-tool.js +0 -436
- package/dist/legacy/1/install-tool.js.map +0 -1
- package/dist/legacy/1/instantiate.d.ts +0 -33
- package/dist/legacy/1/instantiate.d.ts.map +0 -1
- package/dist/legacy/1/instantiate.js +0 -137
- package/dist/legacy/1/instantiate.js.map +0 -1
- package/dist/legacy/1/manifest.d.ts +0 -132
- package/dist/legacy/1/manifest.d.ts.map +0 -1
- package/dist/legacy/1/manifest.js +0 -321
- package/dist/legacy/1/manifest.js.map +0 -1
- package/dist/legacy/1/migrate.d.ts +0 -84
- package/dist/legacy/1/migrate.d.ts.map +0 -1
- package/dist/legacy/1/migrate.js +0 -228
- package/dist/legacy/1/migrate.js.map +0 -1
- package/dist/legacy/1/nexus-home.d.ts +0 -11
- package/dist/legacy/1/nexus-home.d.ts.map +0 -1
- package/dist/legacy/1/nexus-home.js +0 -16
- package/dist/legacy/1/nexus-home.js.map +0 -1
- package/dist/legacy/1/plugin-descriptor.d.ts +0 -3
- package/dist/legacy/1/plugin-descriptor.d.ts.map +0 -1
- package/dist/legacy/1/plugin-descriptor.js +0 -2
- package/dist/legacy/1/plugin-descriptor.js.map +0 -1
- package/dist/legacy/1/preconditions.d.ts +0 -100
- package/dist/legacy/1/preconditions.d.ts.map +0 -1
- package/dist/legacy/1/preconditions.js +0 -189
- package/dist/legacy/1/preconditions.js.map +0 -1
- package/dist/legacy/1/rehydrate.d.ts +0 -22
- package/dist/legacy/1/rehydrate.d.ts.map +0 -1
- package/dist/legacy/1/rehydrate.js +0 -109
- package/dist/legacy/1/rehydrate.js.map +0 -1
- package/dist/legacy/1/remove-tool.d.ts +0 -19
- package/dist/legacy/1/remove-tool.d.ts.map +0 -1
- package/dist/legacy/1/remove-tool.js +0 -105
- package/dist/legacy/1/remove-tool.js.map +0 -1
- package/dist/legacy/1/session.d.ts +0 -343
- package/dist/legacy/1/session.d.ts.map +0 -1
- package/dist/legacy/1/session.js +0 -499
- package/dist/legacy/1/session.js.map +0 -1
- package/dist/legacy/1/tool-registry.d.ts +0 -12
- package/dist/legacy/1/tool-registry.d.ts.map +0 -1
- package/dist/legacy/1/tool-registry.js +0 -28
- package/dist/legacy/1/tool-registry.js.map +0 -1
- package/dist/legacy/1/tool.d.ts +0 -10
- package/dist/legacy/1/tool.d.ts.map +0 -1
- package/dist/legacy/1/tool.js +0 -2
- package/dist/legacy/1/tool.js.map +0 -1
- package/dist/legacy/1/upgrade.d.ts +0 -129
- package/dist/legacy/1/upgrade.d.ts.map +0 -1
- package/dist/legacy/1/upgrade.js +0 -355
- package/dist/legacy/1/upgrade.js.map +0 -1
- package/dist/legacy/1/workshop.d.ts +0 -95
- package/dist/legacy/1/workshop.d.ts.map +0 -1
- package/dist/legacy/1/workshop.js +0 -229
- package/dist/legacy/1/workshop.js.map +0 -1
- package/dist/legacy/1/worktree.d.ts +0 -67
- package/dist/legacy/1/worktree.d.ts.map +0 -1
- package/dist/legacy/1/worktree.js +0 -117
- package/dist/legacy/1/worktree.js.map +0 -1
- package/dist/legacy/1/writ.d.ts +0 -130
- package/dist/legacy/1/writ.d.ts.map +0 -1
- package/dist/legacy/1/writ.js +0 -599
- package/dist/legacy/1/writ.js.map +0 -1
- package/dist/rig-context.d.ts +0 -47
- package/dist/rig-context.d.ts.map +0 -1
- package/dist/rig-context.js +0 -11
- package/dist/rig-context.js.map +0 -1
- package/dist/rig-descriptor.d.ts +0 -39
- package/dist/rig-descriptor.d.ts.map +0 -1
- package/dist/rig-descriptor.js +0 -12
- package/dist/rig-descriptor.js.map +0 -1
- package/dist/rig.d.ts +0 -70
- package/dist/rig.d.ts.map +0 -1
- package/dist/rig.js +0 -14
- package/dist/rig.js.map +0 -1
- package/dist/tool.d.ts +0 -136
- package/dist/tool.d.ts.map +0 -1
- package/dist/tool.js +0 -135
- package/dist/tool.js.map +0 -1
- package/migrations/001-schema.sql +0 -177
- package/migrations/002-writs.sql +0 -44
- package/migrations/003-conversations.sql +0 -43
- package/migrations/004-remove-commissions.sql +0 -24
package/dist/legacy/1/writ.js
DELETED
|
@@ -1,599 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Writ — the unified work tracking primitive.
|
|
3
|
-
*
|
|
4
|
-
* Replaces the rigid four-level hierarchy (work, piece, job, stroke) with
|
|
5
|
-
* a single typed, tree-structured model. Every summon gets a writ. Writs
|
|
6
|
-
* are the system's memory of outstanding obligations.
|
|
7
|
-
*
|
|
8
|
-
* Status lifecycle:
|
|
9
|
-
* ready → active → completed
|
|
10
|
-
* → failed
|
|
11
|
-
* → pending → ready (cycle)
|
|
12
|
-
* → cancelled
|
|
13
|
-
*
|
|
14
|
-
* See docs/writs.md for the full design.
|
|
15
|
-
*/
|
|
16
|
-
import Database from 'better-sqlite3';
|
|
17
|
-
import { booksPath } from "./nexus-home.js";
|
|
18
|
-
import { readGuildConfig } from "./guild-config.js";
|
|
19
|
-
import { generateId } from "./id.js";
|
|
20
|
-
import { signalEvent } from "./events.js";
|
|
21
|
-
// ── Constants ──────────────────────────────────────────────────────────
|
|
22
|
-
/**
|
|
23
|
-
* Built-in writ types that don't need guild.json declaration.
|
|
24
|
-
* - 'writ' — the universal default for patron-posted and anima-created work
|
|
25
|
-
* - 'summon' — internal tracking type for engine-synthesized sessions
|
|
26
|
-
*/
|
|
27
|
-
export const BUILTIN_WRIT_TYPES = ['writ', 'summon'];
|
|
28
|
-
function rowToRecord(row) {
|
|
29
|
-
return {
|
|
30
|
-
id: row.id,
|
|
31
|
-
type: row.type,
|
|
32
|
-
title: row.title,
|
|
33
|
-
description: row.description,
|
|
34
|
-
status: row.status,
|
|
35
|
-
parentId: row.parent_id,
|
|
36
|
-
sessionId: row.session_id,
|
|
37
|
-
workshop: row.workshop,
|
|
38
|
-
sourceType: row.source_type,
|
|
39
|
-
sourceId: row.source_id,
|
|
40
|
-
createdAt: row.created_at,
|
|
41
|
-
updatedAt: row.updated_at,
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
const SELECT_COLS = `id, type, title, description, status, parent_id, session_id, workshop, source_type, source_id, created_at, updated_at`;
|
|
45
|
-
function readWritById(db, writId) {
|
|
46
|
-
const row = db.prepare(`SELECT ${SELECT_COLS} FROM writs WHERE id = ?`).get(writId);
|
|
47
|
-
return row ? rowToRecord(row) : null;
|
|
48
|
-
}
|
|
49
|
-
// ── Type Validation ────────────────────────────────────────────────────
|
|
50
|
-
/**
|
|
51
|
-
* Validate that a writ type is declared in guild.json or is a built-in type.
|
|
52
|
-
* Throws if the type is unknown.
|
|
53
|
-
*/
|
|
54
|
-
export function validateWritType(home, type) {
|
|
55
|
-
if (BUILTIN_WRIT_TYPES.includes(type))
|
|
56
|
-
return;
|
|
57
|
-
const config = readGuildConfig(home);
|
|
58
|
-
const declared = config.writTypes ?? {};
|
|
59
|
-
if (!Object.hasOwn(declared, type)) {
|
|
60
|
-
const available = [
|
|
61
|
-
...BUILTIN_WRIT_TYPES,
|
|
62
|
-
...Object.keys(declared),
|
|
63
|
-
];
|
|
64
|
-
throw new Error(`Writ type "${type}" is not declared in guild.json writTypes. ` +
|
|
65
|
-
`Available types: ${available.join(', ')}`);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
// ── CRUD ───────────────────────────────────────────────────────────────
|
|
69
|
-
/**
|
|
70
|
-
* Create a writ. Validates type against guild.json. Fires `<type>.ready`.
|
|
71
|
-
*
|
|
72
|
-
* Type defaults to `'writ'` if omitted — the universal builtin type.
|
|
73
|
-
*
|
|
74
|
-
* Workshop inheritance: if `workshop` is omitted and `parentId` is provided,
|
|
75
|
-
* the parent's workshop is copied. If both are omitted, workshop is null.
|
|
76
|
-
*
|
|
77
|
-
* Source defaults: `sourceType` defaults to `'engine'` if not provided.
|
|
78
|
-
*/
|
|
79
|
-
export function createWrit(home, opts) {
|
|
80
|
-
const type = opts.type ?? 'writ';
|
|
81
|
-
validateWritType(home, type);
|
|
82
|
-
const db = new Database(booksPath(home));
|
|
83
|
-
db.pragma('foreign_keys = ON');
|
|
84
|
-
try {
|
|
85
|
-
const id = generateId('wrt');
|
|
86
|
-
// Resolve workshop: explicit > inherit from parent > null
|
|
87
|
-
let workshop = opts.workshop ?? null;
|
|
88
|
-
if (workshop === null && opts.parentId) {
|
|
89
|
-
const parent = readWritById(db, opts.parentId);
|
|
90
|
-
if (parent)
|
|
91
|
-
workshop = parent.workshop;
|
|
92
|
-
}
|
|
93
|
-
const sourceType = opts.sourceType ?? 'engine';
|
|
94
|
-
const sourceId = opts.sourceId ?? null;
|
|
95
|
-
db.prepare(`INSERT INTO writs (id, type, title, description, parent_id, workshop, source_type, source_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(id, type, opts.title, opts.description ?? null, opts.parentId ?? null, workshop, sourceType, sourceId);
|
|
96
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'framework', 'writ_created', 'writ', id, JSON.stringify(opts));
|
|
97
|
-
const record = readWritById(db, id);
|
|
98
|
-
signalEvent(home, `${type}.ready`, {
|
|
99
|
-
writId: id,
|
|
100
|
-
parentId: opts.parentId ?? null,
|
|
101
|
-
type,
|
|
102
|
-
}, 'framework');
|
|
103
|
-
return record;
|
|
104
|
-
}
|
|
105
|
-
finally {
|
|
106
|
-
db.close();
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Read a single writ by ID.
|
|
111
|
-
*/
|
|
112
|
-
export function readWrit(home, writId) {
|
|
113
|
-
const db = new Database(booksPath(home));
|
|
114
|
-
db.pragma('foreign_keys = ON');
|
|
115
|
-
try {
|
|
116
|
-
return readWritById(db, writId);
|
|
117
|
-
}
|
|
118
|
-
finally {
|
|
119
|
-
db.close();
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* List writs with optional filters.
|
|
124
|
-
*/
|
|
125
|
-
export function listWrits(home, opts = {}) {
|
|
126
|
-
const db = new Database(booksPath(home));
|
|
127
|
-
db.pragma('foreign_keys = ON');
|
|
128
|
-
try {
|
|
129
|
-
let query = `SELECT ${SELECT_COLS} FROM writs`;
|
|
130
|
-
const conditions = [];
|
|
131
|
-
const params = [];
|
|
132
|
-
if (opts.parentId !== undefined) {
|
|
133
|
-
if (opts.parentId === null) {
|
|
134
|
-
conditions.push(`parent_id IS NULL`);
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
conditions.push(`parent_id = ?`);
|
|
138
|
-
params.push(opts.parentId);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
if (opts.type) {
|
|
142
|
-
conditions.push(`type = ?`);
|
|
143
|
-
params.push(opts.type);
|
|
144
|
-
}
|
|
145
|
-
if (opts.status) {
|
|
146
|
-
conditions.push(`status = ?`);
|
|
147
|
-
params.push(opts.status);
|
|
148
|
-
}
|
|
149
|
-
if (opts.workshop !== undefined) {
|
|
150
|
-
if (opts.workshop === null) {
|
|
151
|
-
conditions.push(`workshop IS NULL`);
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
conditions.push(`workshop = ?`);
|
|
155
|
-
params.push(opts.workshop);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
if (conditions.length > 0)
|
|
159
|
-
query += ` WHERE ${conditions.join(' AND ')}`;
|
|
160
|
-
query += ` ORDER BY created_at DESC`;
|
|
161
|
-
const rows = db.prepare(query).all(...params);
|
|
162
|
-
return rows.map(rowToRecord);
|
|
163
|
-
}
|
|
164
|
-
finally {
|
|
165
|
-
db.close();
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
// ── Status Transitions ─────────────────────────────────────────────────
|
|
169
|
-
/**
|
|
170
|
-
* Activate a writ: ready → active. Sets session_id. No event fired.
|
|
171
|
-
*/
|
|
172
|
-
export function activateWrit(home, writId, sessionId) {
|
|
173
|
-
const db = new Database(booksPath(home));
|
|
174
|
-
db.pragma('foreign_keys = ON');
|
|
175
|
-
try {
|
|
176
|
-
const current = readWritById(db, writId);
|
|
177
|
-
if (!current)
|
|
178
|
-
throw new Error(`Writ "${writId}" not found.`);
|
|
179
|
-
if (current.status !== 'ready') {
|
|
180
|
-
throw new Error(`Cannot activate writ "${writId}" — status is "${current.status}", expected "ready".`);
|
|
181
|
-
}
|
|
182
|
-
db.prepare(`UPDATE writs SET status = 'active', session_id = ?, updated_at = datetime('now') WHERE id = ?`).run(sessionId, writId);
|
|
183
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'framework', 'writ_activated', 'writ', writId, JSON.stringify({ sessionId }));
|
|
184
|
-
return readWritById(db, writId);
|
|
185
|
-
}
|
|
186
|
-
finally {
|
|
187
|
-
db.close();
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Complete a writ. Called by complete-session.
|
|
192
|
-
* - No children or all children complete → completed, fires <type>.completed, triggers rollup.
|
|
193
|
-
* - Incomplete children exist → pending. No event fired.
|
|
194
|
-
*/
|
|
195
|
-
export function completeWrit(home, writId) {
|
|
196
|
-
const db = new Database(booksPath(home));
|
|
197
|
-
db.pragma('foreign_keys = ON');
|
|
198
|
-
try {
|
|
199
|
-
const current = readWritById(db, writId);
|
|
200
|
-
if (!current)
|
|
201
|
-
throw new Error(`Writ "${writId}" not found.`);
|
|
202
|
-
if (current.status !== 'active') {
|
|
203
|
-
throw new Error(`Cannot complete writ "${writId}" — status is "${current.status}", expected "active".`);
|
|
204
|
-
}
|
|
205
|
-
// Check children
|
|
206
|
-
const children = db.prepare(`SELECT status FROM writs WHERE parent_id = ?`).all(writId);
|
|
207
|
-
const hasIncomplete = children.some(c => c.status !== 'completed' && c.status !== 'cancelled');
|
|
208
|
-
if (children.length > 0 && hasIncomplete) {
|
|
209
|
-
// Incomplete children → pending
|
|
210
|
-
db.prepare(`UPDATE writs SET status = 'pending', session_id = NULL, updated_at = datetime('now') WHERE id = ?`).run(writId);
|
|
211
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'framework', 'writ_pending', 'writ', writId, JSON.stringify({ reason: 'incomplete children', childCount: children.length }));
|
|
212
|
-
return readWritById(db, writId);
|
|
213
|
-
}
|
|
214
|
-
// No children or all complete → completed
|
|
215
|
-
db.prepare(`UPDATE writs SET status = 'completed', session_id = NULL, updated_at = datetime('now') WHERE id = ?`).run(writId);
|
|
216
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'framework', 'writ_completed', 'writ', writId, null);
|
|
217
|
-
// Fire type-specific completion event
|
|
218
|
-
signalEvent(home, `${current.type}.completed`, {
|
|
219
|
-
writId,
|
|
220
|
-
parentId: current.parentId,
|
|
221
|
-
type: current.type,
|
|
222
|
-
workshop: current.workshop,
|
|
223
|
-
}, 'framework');
|
|
224
|
-
// Fire generic writ.completed event (used by workshop-merge and other cross-type handlers).
|
|
225
|
-
// Skip when type is 'writ' — the type-specific event above already IS writ.completed,
|
|
226
|
-
// so firing it again would produce a duplicate that triggers standing orders twice.
|
|
227
|
-
if (current.type !== 'writ') {
|
|
228
|
-
signalEvent(home, 'writ.completed', {
|
|
229
|
-
writId,
|
|
230
|
-
parentId: current.parentId,
|
|
231
|
-
type: current.type,
|
|
232
|
-
workshop: current.workshop,
|
|
233
|
-
}, 'framework');
|
|
234
|
-
}
|
|
235
|
-
// Trigger rollup on parent
|
|
236
|
-
if (current.parentId) {
|
|
237
|
-
rollupParent(home, current.parentId);
|
|
238
|
-
}
|
|
239
|
-
return readWritById(db, writId);
|
|
240
|
-
}
|
|
241
|
-
finally {
|
|
242
|
-
db.close();
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* Fail a writ. Terminal. Cascades cancellation to incomplete children.
|
|
247
|
-
*/
|
|
248
|
-
export function failWrit(home, writId) {
|
|
249
|
-
const db = new Database(booksPath(home));
|
|
250
|
-
db.pragma('foreign_keys = ON');
|
|
251
|
-
try {
|
|
252
|
-
const current = readWritById(db, writId);
|
|
253
|
-
if (!current)
|
|
254
|
-
throw new Error(`Writ "${writId}" not found.`);
|
|
255
|
-
if (current.status === 'completed' || current.status === 'failed' || current.status === 'cancelled') {
|
|
256
|
-
throw new Error(`Cannot fail writ "${writId}" — status is "${current.status}" (terminal).`);
|
|
257
|
-
}
|
|
258
|
-
db.prepare(`UPDATE writs SET status = 'failed', session_id = NULL, updated_at = datetime('now') WHERE id = ?`).run(writId);
|
|
259
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'framework', 'writ_failed', 'writ', writId, null);
|
|
260
|
-
// Fire failure event
|
|
261
|
-
signalEvent(home, `${current.type}.failed`, {
|
|
262
|
-
writId,
|
|
263
|
-
parentId: current.parentId,
|
|
264
|
-
type: current.type,
|
|
265
|
-
workshop: current.workshop,
|
|
266
|
-
}, 'framework');
|
|
267
|
-
// Cascade: cancel incomplete children (not active ones — let them finish)
|
|
268
|
-
cascadeCancelChildren(db, home, writId);
|
|
269
|
-
return readWritById(db, writId);
|
|
270
|
-
}
|
|
271
|
-
finally {
|
|
272
|
-
db.close();
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
/**
|
|
276
|
-
* Cancel a writ. Cascades cancellation to incomplete children.
|
|
277
|
-
*/
|
|
278
|
-
export function cancelWrit(home, writId) {
|
|
279
|
-
const db = new Database(booksPath(home));
|
|
280
|
-
db.pragma('foreign_keys = ON');
|
|
281
|
-
try {
|
|
282
|
-
const current = readWritById(db, writId);
|
|
283
|
-
if (!current)
|
|
284
|
-
throw new Error(`Writ "${writId}" not found.`);
|
|
285
|
-
if (current.status === 'completed' || current.status === 'failed' || current.status === 'cancelled') {
|
|
286
|
-
throw new Error(`Cannot cancel writ "${writId}" — status is "${current.status}" (terminal).`);
|
|
287
|
-
}
|
|
288
|
-
db.prepare(`UPDATE writs SET status = 'cancelled', session_id = NULL, updated_at = datetime('now') WHERE id = ?`).run(writId);
|
|
289
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'framework', 'writ_cancelled', 'writ', writId, null);
|
|
290
|
-
signalEvent(home, `${current.type}.cancelled`, {
|
|
291
|
-
writId,
|
|
292
|
-
parentId: current.parentId,
|
|
293
|
-
type: current.type,
|
|
294
|
-
}, 'framework');
|
|
295
|
-
cascadeCancelChildren(db, home, writId);
|
|
296
|
-
return readWritById(db, writId);
|
|
297
|
-
}
|
|
298
|
-
finally {
|
|
299
|
-
db.close();
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
/**
|
|
303
|
-
* Administratively complete a writ in pending or active state.
|
|
304
|
-
* Fires <type>.completed (and writ.completed for custom types) and triggers
|
|
305
|
-
* parent rollup, exactly as the normal completion path does.
|
|
306
|
-
* Use case: unsticking a pending writ whose children were all cancelled.
|
|
307
|
-
*/
|
|
308
|
-
export function adminCompleteWrit(home, writId) {
|
|
309
|
-
const db = new Database(booksPath(home));
|
|
310
|
-
db.pragma('foreign_keys = ON');
|
|
311
|
-
try {
|
|
312
|
-
const current = readWritById(db, writId);
|
|
313
|
-
if (!current)
|
|
314
|
-
throw new Error(`Writ "${writId}" not found.`);
|
|
315
|
-
if (current.status !== 'pending' && current.status !== 'active') {
|
|
316
|
-
throw new Error(`Cannot administratively complete writ "${writId}" — status is "${current.status}", expected "pending" or "active".`);
|
|
317
|
-
}
|
|
318
|
-
db.prepare(`UPDATE writs SET status = 'completed', session_id = NULL, updated_at = datetime('now') WHERE id = ?`).run(writId);
|
|
319
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'steward', 'writ_admin_completed', 'writ', writId, null);
|
|
320
|
-
// Fire type-specific completion event
|
|
321
|
-
signalEvent(home, `${current.type}.completed`, {
|
|
322
|
-
writId,
|
|
323
|
-
parentId: current.parentId,
|
|
324
|
-
type: current.type,
|
|
325
|
-
workshop: current.workshop,
|
|
326
|
-
}, 'framework');
|
|
327
|
-
// Fire generic writ.completed event (skip when type is 'writ' to avoid duplicate)
|
|
328
|
-
if (current.type !== 'writ') {
|
|
329
|
-
signalEvent(home, 'writ.completed', {
|
|
330
|
-
writId,
|
|
331
|
-
parentId: current.parentId,
|
|
332
|
-
type: current.type,
|
|
333
|
-
workshop: current.workshop,
|
|
334
|
-
}, 'framework');
|
|
335
|
-
}
|
|
336
|
-
// Trigger rollup on parent
|
|
337
|
-
if (current.parentId) {
|
|
338
|
-
rollupParent(home, current.parentId);
|
|
339
|
-
}
|
|
340
|
-
return readWritById(db, writId);
|
|
341
|
-
}
|
|
342
|
-
finally {
|
|
343
|
-
db.close();
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
/**
|
|
347
|
-
* Reopen a failed writ: failed → ready. Fires <type>.ready for re-dispatch.
|
|
348
|
-
* Use case: recovering from a failed writ without having to cancel and recreate it.
|
|
349
|
-
*/
|
|
350
|
-
export function reopenFailedWrit(home, writId) {
|
|
351
|
-
const db = new Database(booksPath(home));
|
|
352
|
-
db.pragma('foreign_keys = ON');
|
|
353
|
-
try {
|
|
354
|
-
const current = readWritById(db, writId);
|
|
355
|
-
if (!current)
|
|
356
|
-
throw new Error(`Writ "${writId}" not found.`);
|
|
357
|
-
if (current.status !== 'failed') {
|
|
358
|
-
throw new Error(`Cannot reopen-failed writ "${writId}" — status is "${current.status}", expected "failed".`);
|
|
359
|
-
}
|
|
360
|
-
db.prepare(`UPDATE writs SET status = 'ready', session_id = NULL, updated_at = datetime('now') WHERE id = ?`).run(writId);
|
|
361
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'steward', 'writ_reopened_from_failed', 'writ', writId, null);
|
|
362
|
-
// Fire ready event for re-dispatch
|
|
363
|
-
signalEvent(home, `${current.type}.ready`, {
|
|
364
|
-
writId,
|
|
365
|
-
parentId: current.parentId,
|
|
366
|
-
type: current.type,
|
|
367
|
-
}, 'framework');
|
|
368
|
-
return readWritById(db, writId);
|
|
369
|
-
}
|
|
370
|
-
finally {
|
|
371
|
-
db.close();
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
/**
|
|
375
|
-
* Interrupt a writ: active → ready. Session ended without complete-session
|
|
376
|
-
* or fail-writ. Fires <type>.ready for re-dispatch.
|
|
377
|
-
*/
|
|
378
|
-
export function interruptWrit(home, writId) {
|
|
379
|
-
const db = new Database(booksPath(home));
|
|
380
|
-
db.pragma('foreign_keys = ON');
|
|
381
|
-
try {
|
|
382
|
-
const current = readWritById(db, writId);
|
|
383
|
-
if (!current)
|
|
384
|
-
throw new Error(`Writ "${writId}" not found.`);
|
|
385
|
-
if (current.status !== 'active') {
|
|
386
|
-
throw new Error(`Cannot interrupt writ "${writId}" — status is "${current.status}", expected "active".`);
|
|
387
|
-
}
|
|
388
|
-
db.prepare(`UPDATE writs SET status = 'ready', session_id = NULL, updated_at = datetime('now') WHERE id = ?`).run(writId);
|
|
389
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'framework', 'writ_interrupted', 'writ', writId, null);
|
|
390
|
-
// Fire ready event for re-dispatch
|
|
391
|
-
signalEvent(home, `${current.type}.ready`, {
|
|
392
|
-
writId,
|
|
393
|
-
parentId: current.parentId,
|
|
394
|
-
type: current.type,
|
|
395
|
-
}, 'framework');
|
|
396
|
-
return readWritById(db, writId);
|
|
397
|
-
}
|
|
398
|
-
finally {
|
|
399
|
-
db.close();
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
// ── Completion Rollup ──────────────────────────────────────────────────
|
|
403
|
-
/**
|
|
404
|
-
* Completion rollup. When a child completes, check the parent:
|
|
405
|
-
* - Parent is pending and all siblings complete → parent transitions to ready
|
|
406
|
-
* (if standing order exists for <type>.ready) or auto-completes (if not).
|
|
407
|
-
* - Parent is pending and siblings remain incomplete → no action.
|
|
408
|
-
*/
|
|
409
|
-
export function rollupParent(home, parentId) {
|
|
410
|
-
const db = new Database(booksPath(home));
|
|
411
|
-
db.pragma('foreign_keys = ON');
|
|
412
|
-
try {
|
|
413
|
-
const parent = readWritById(db, parentId);
|
|
414
|
-
if (!parent)
|
|
415
|
-
return;
|
|
416
|
-
if (parent.status !== 'pending')
|
|
417
|
-
return;
|
|
418
|
-
// Check if all children are complete
|
|
419
|
-
const children = db.prepare(`SELECT status FROM writs WHERE parent_id = ?`).all(parentId);
|
|
420
|
-
const hasIncomplete = children.some(c => c.status !== 'completed' && c.status !== 'cancelled');
|
|
421
|
-
if (hasIncomplete)
|
|
422
|
-
return;
|
|
423
|
-
// All children complete. Check if a standing order exists for <type>.ready
|
|
424
|
-
const config = readGuildConfig(home);
|
|
425
|
-
const standingOrders = config.clockworks?.standingOrders ?? [];
|
|
426
|
-
const hasStandingOrder = standingOrders.some(so => so.on === `${parent.type}.ready`);
|
|
427
|
-
if (hasStandingOrder) {
|
|
428
|
-
// Transition to ready for re-dispatch (final integration pass)
|
|
429
|
-
db.prepare(`UPDATE writs SET status = 'ready', updated_at = datetime('now') WHERE id = ?`).run(parentId);
|
|
430
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'framework', 'writ_rollup_ready', 'writ', parentId, JSON.stringify({ reason: 'all children complete, standing order exists' }));
|
|
431
|
-
signalEvent(home, `${parent.type}.ready`, {
|
|
432
|
-
writId: parentId,
|
|
433
|
-
parentId: parent.parentId,
|
|
434
|
-
type: parent.type,
|
|
435
|
-
}, 'framework');
|
|
436
|
-
}
|
|
437
|
-
else {
|
|
438
|
-
// Container auto-complete: no standing order, so auto-complete
|
|
439
|
-
db.prepare(`UPDATE writs SET status = 'completed', updated_at = datetime('now') WHERE id = ?`).run(parentId);
|
|
440
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'framework', 'writ_auto_completed', 'writ', parentId, JSON.stringify({ reason: 'all children complete, no standing order for type' }));
|
|
441
|
-
signalEvent(home, `${parent.type}.completed`, {
|
|
442
|
-
writId: parentId,
|
|
443
|
-
parentId: parent.parentId,
|
|
444
|
-
type: parent.type,
|
|
445
|
-
workshop: parent.workshop,
|
|
446
|
-
}, 'framework');
|
|
447
|
-
// Fire generic writ.completed only when the type-specific event is different.
|
|
448
|
-
// When type is 'writ', the event above already IS writ.completed.
|
|
449
|
-
if (parent.type !== 'writ') {
|
|
450
|
-
signalEvent(home, 'writ.completed', {
|
|
451
|
-
writId: parentId,
|
|
452
|
-
parentId: parent.parentId,
|
|
453
|
-
type: parent.type,
|
|
454
|
-
workshop: parent.workshop,
|
|
455
|
-
}, 'framework');
|
|
456
|
-
}
|
|
457
|
-
// Continue rollup up the tree
|
|
458
|
-
if (parent.parentId) {
|
|
459
|
-
// Close this db before recursing (avoids holding multiple connections)
|
|
460
|
-
db.close();
|
|
461
|
-
rollupParent(home, parent.parentId);
|
|
462
|
-
return; // db already closed
|
|
463
|
-
}
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
finally {
|
|
467
|
-
try {
|
|
468
|
-
db.close();
|
|
469
|
-
}
|
|
470
|
-
catch { /* already closed in recursive case */ }
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
// ── Children & Progress ────────────────────────────────────────────────
|
|
474
|
-
/**
|
|
475
|
-
* Get direct children of a writ with nested child counts.
|
|
476
|
-
*/
|
|
477
|
-
export function getWritChildren(home, writId) {
|
|
478
|
-
const db = new Database(booksPath(home));
|
|
479
|
-
db.pragma('foreign_keys = ON');
|
|
480
|
-
try {
|
|
481
|
-
const rows = db.prepare(`SELECT w.id, w.type, w.title, w.status,
|
|
482
|
-
(SELECT COUNT(*) FROM writs c WHERE c.parent_id = w.id) as child_count,
|
|
483
|
-
(SELECT COUNT(*) FROM writs c WHERE c.parent_id = w.id AND c.status IN ('completed', 'cancelled')) as completed_count
|
|
484
|
-
FROM writs w
|
|
485
|
-
WHERE w.parent_id = ?
|
|
486
|
-
ORDER BY w.created_at ASC`).all(writId);
|
|
487
|
-
return rows.map(r => ({
|
|
488
|
-
id: r.id,
|
|
489
|
-
type: r.type,
|
|
490
|
-
title: r.title,
|
|
491
|
-
status: r.status,
|
|
492
|
-
childCount: r.child_count,
|
|
493
|
-
completedCount: r.completed_count,
|
|
494
|
-
}));
|
|
495
|
-
}
|
|
496
|
-
finally {
|
|
497
|
-
db.close();
|
|
498
|
-
}
|
|
499
|
-
}
|
|
500
|
-
/**
|
|
501
|
-
* Build a markdown progress appendix for resumed sessions.
|
|
502
|
-
* Returns null if the writ has no children.
|
|
503
|
-
*/
|
|
504
|
-
export function buildProgressAppendix(home, writId) {
|
|
505
|
-
const children = getWritChildren(home, writId);
|
|
506
|
-
if (children.length === 0)
|
|
507
|
-
return null;
|
|
508
|
-
const lines = [
|
|
509
|
-
'## Prior Progress',
|
|
510
|
-
'This is a continuation of prior work. Current state of sub-items:',
|
|
511
|
-
'',
|
|
512
|
-
];
|
|
513
|
-
for (const child of children) {
|
|
514
|
-
let icon;
|
|
515
|
-
switch (child.status) {
|
|
516
|
-
case 'completed':
|
|
517
|
-
icon = '✓';
|
|
518
|
-
break;
|
|
519
|
-
case 'failed':
|
|
520
|
-
icon = '✗';
|
|
521
|
-
break;
|
|
522
|
-
case 'cancelled':
|
|
523
|
-
icon = '⊘';
|
|
524
|
-
break;
|
|
525
|
-
case 'active':
|
|
526
|
-
icon = '→';
|
|
527
|
-
break;
|
|
528
|
-
default:
|
|
529
|
-
icon = '○';
|
|
530
|
-
break; // ready, pending
|
|
531
|
-
}
|
|
532
|
-
let suffix = `(${child.status})`;
|
|
533
|
-
if (child.childCount > 0) {
|
|
534
|
-
suffix = `(${child.childCount} ${child.type}s: ${child.completedCount} completed, ${child.childCount - child.completedCount} remaining)`;
|
|
535
|
-
}
|
|
536
|
-
lines.push(`- ${icon} ${child.title} ${suffix}`);
|
|
537
|
-
}
|
|
538
|
-
return lines.join('\n');
|
|
539
|
-
}
|
|
540
|
-
// ── Prompt Template Hydration ──────────────────────────────────────────
|
|
541
|
-
/**
|
|
542
|
-
* Hydrate a prompt template by substituting variables from event payload
|
|
543
|
-
* and writ fields. Returns null if no template provided.
|
|
544
|
-
*
|
|
545
|
-
* Scopes:
|
|
546
|
-
* {{field}} — event payload
|
|
547
|
-
* {{writ.field}} — bound writ (camelCase)
|
|
548
|
-
* {{writ.parent.field}} — parent writ (one level up)
|
|
549
|
-
*/
|
|
550
|
-
export function hydratePromptTemplate(home, template, payload, writId) {
|
|
551
|
-
if (!template)
|
|
552
|
-
return null;
|
|
553
|
-
const writ = readWrit(home, writId);
|
|
554
|
-
const parent = writ?.parentId ? readWrit(home, writ.parentId) : null;
|
|
555
|
-
return template.replace(/\{\{([^}]+)\}\}/g, (_, key) => {
|
|
556
|
-
const k = key.trim();
|
|
557
|
-
if (k.startsWith('writ.parent.')) {
|
|
558
|
-
const field = k.slice('writ.parent.'.length);
|
|
559
|
-
if (!parent)
|
|
560
|
-
return '';
|
|
561
|
-
return String(parent[field] ?? '');
|
|
562
|
-
}
|
|
563
|
-
if (k.startsWith('writ.')) {
|
|
564
|
-
const field = k.slice('writ.'.length);
|
|
565
|
-
if (!writ)
|
|
566
|
-
return '';
|
|
567
|
-
return String(writ[field] ?? '');
|
|
568
|
-
}
|
|
569
|
-
// Direct payload field
|
|
570
|
-
return String(payload[k] ?? '');
|
|
571
|
-
});
|
|
572
|
-
}
|
|
573
|
-
// ── Internal Helpers ───────────────────────────────────────────────────
|
|
574
|
-
/**
|
|
575
|
-
* Cancel all non-terminal children of a writ (recursive).
|
|
576
|
-
* Active children are left alone — they'll be cancelled when their session reports back.
|
|
577
|
-
*/
|
|
578
|
-
function cascadeCancelChildren(db, home, parentId) {
|
|
579
|
-
const children = db.prepare(`SELECT id, type, status FROM writs WHERE parent_id = ?`).all(parentId);
|
|
580
|
-
for (const child of children) {
|
|
581
|
-
if (child.status === 'completed' || child.status === 'failed' || child.status === 'cancelled') {
|
|
582
|
-
continue; // terminal — leave it
|
|
583
|
-
}
|
|
584
|
-
if (child.status === 'active') {
|
|
585
|
-
continue; // let active sessions finish; they'll be cancelled on report-back
|
|
586
|
-
}
|
|
587
|
-
// Cancel ready or pending children
|
|
588
|
-
db.prepare(`UPDATE writs SET status = 'cancelled', session_id = NULL, updated_at = datetime('now') WHERE id = ?`).run(child.id);
|
|
589
|
-
db.prepare(`INSERT INTO audit_log (id, actor, action, target_type, target_id, detail) VALUES (?, ?, ?, ?, ?, ?)`).run(generateId('aud'), 'framework', 'writ_cascade_cancelled', 'writ', child.id, JSON.stringify({ reason: 'parent failed/cancelled' }));
|
|
590
|
-
signalEvent(home, `${child.type}.cancelled`, {
|
|
591
|
-
writId: child.id,
|
|
592
|
-
parentId,
|
|
593
|
-
type: child.type,
|
|
594
|
-
}, 'framework');
|
|
595
|
-
// Recurse into this child's children
|
|
596
|
-
cascadeCancelChildren(db, home, child.id);
|
|
597
|
-
}
|
|
598
|
-
}
|
|
599
|
-
//# sourceMappingURL=writ.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"writ.js","sourceRoot":"","sources":["../../../src/legacy/1/writ.ts"],"names":[],"mappings":"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"}
|