@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.
Files changed (166) hide show
  1. package/README.md +95 -166
  2. package/dist/guild-config.d.ts +14 -52
  3. package/dist/guild-config.d.ts.map +1 -1
  4. package/dist/guild-config.js +7 -10
  5. package/dist/guild-config.js.map +1 -1
  6. package/dist/guild.d.ts +83 -0
  7. package/dist/guild.d.ts.map +1 -0
  8. package/dist/guild.js +45 -0
  9. package/dist/guild.js.map +1 -0
  10. package/dist/id.d.ts +14 -0
  11. package/dist/id.d.ts.map +1 -0
  12. package/dist/id.js +19 -0
  13. package/dist/id.js.map +1 -0
  14. package/dist/index.d.ts +6 -30
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +7 -32
  17. package/dist/index.js.map +1 -1
  18. package/dist/nexus-home.d.ts +0 -4
  19. package/dist/nexus-home.d.ts.map +1 -1
  20. package/dist/nexus-home.js +1 -9
  21. package/dist/nexus-home.js.map +1 -1
  22. package/dist/plugin.d.ts +115 -0
  23. package/dist/plugin.d.ts.map +1 -0
  24. package/dist/plugin.js +39 -0
  25. package/dist/plugin.js.map +1 -0
  26. package/dist/resolve-package.d.ts +58 -0
  27. package/dist/resolve-package.d.ts.map +1 -0
  28. package/dist/resolve-package.js +123 -0
  29. package/dist/resolve-package.js.map +1 -0
  30. package/package.json +5 -14
  31. package/dist/book.d.ts +0 -110
  32. package/dist/book.d.ts.map +0 -1
  33. package/dist/book.js +0 -16
  34. package/dist/book.js.map +0 -1
  35. package/dist/legacy/1/anima.d.ts +0 -79
  36. package/dist/legacy/1/anima.d.ts.map +0 -1
  37. package/dist/legacy/1/anima.js +0 -285
  38. package/dist/legacy/1/anima.js.map +0 -1
  39. package/dist/legacy/1/audit.d.ts +0 -23
  40. package/dist/legacy/1/audit.d.ts.map +0 -1
  41. package/dist/legacy/1/audit.js +0 -61
  42. package/dist/legacy/1/audit.js.map +0 -1
  43. package/dist/legacy/1/bundle.d.ts +0 -111
  44. package/dist/legacy/1/bundle.d.ts.map +0 -1
  45. package/dist/legacy/1/bundle.js +0 -452
  46. package/dist/legacy/1/bundle.js.map +0 -1
  47. package/dist/legacy/1/clock-daemon.d.ts +0 -2
  48. package/dist/legacy/1/clock-daemon.d.ts.map +0 -1
  49. package/dist/legacy/1/clock-daemon.js +0 -72
  50. package/dist/legacy/1/clock-daemon.js.map +0 -1
  51. package/dist/legacy/1/clockworks.d.ts +0 -98
  52. package/dist/legacy/1/clockworks.d.ts.map +0 -1
  53. package/dist/legacy/1/clockworks.js +0 -359
  54. package/dist/legacy/1/clockworks.js.map +0 -1
  55. package/dist/legacy/1/conversation.d.ts +0 -165
  56. package/dist/legacy/1/conversation.d.ts.map +0 -1
  57. package/dist/legacy/1/conversation.js +0 -457
  58. package/dist/legacy/1/conversation.js.map +0 -1
  59. package/dist/legacy/1/engine.d.ts +0 -90
  60. package/dist/legacy/1/engine.d.ts.map +0 -1
  61. package/dist/legacy/1/engine.js +0 -89
  62. package/dist/legacy/1/engine.js.map +0 -1
  63. package/dist/legacy/1/events.d.ts +0 -88
  64. package/dist/legacy/1/events.d.ts.map +0 -1
  65. package/dist/legacy/1/events.js +0 -239
  66. package/dist/legacy/1/events.js.map +0 -1
  67. package/dist/legacy/1/guild-config.d.ts +0 -74
  68. package/dist/legacy/1/guild-config.d.ts.map +0 -1
  69. package/dist/legacy/1/guild-config.js +0 -51
  70. package/dist/legacy/1/guild-config.js.map +0 -1
  71. package/dist/legacy/1/id.d.ts +0 -8
  72. package/dist/legacy/1/id.d.ts.map +0 -1
  73. package/dist/legacy/1/id.js +0 -27
  74. package/dist/legacy/1/id.js.map +0 -1
  75. package/dist/legacy/1/index.d.ts +0 -28
  76. package/dist/legacy/1/index.d.ts.map +0 -1
  77. package/dist/legacy/1/index.js +0 -32
  78. package/dist/legacy/1/index.js.map +0 -1
  79. package/dist/legacy/1/init-guild.d.ts +0 -24
  80. package/dist/legacy/1/init-guild.d.ts.map +0 -1
  81. package/dist/legacy/1/init-guild.js +0 -230
  82. package/dist/legacy/1/init-guild.js.map +0 -1
  83. package/dist/legacy/1/install-tool.d.ts +0 -73
  84. package/dist/legacy/1/install-tool.d.ts.map +0 -1
  85. package/dist/legacy/1/install-tool.js +0 -436
  86. package/dist/legacy/1/install-tool.js.map +0 -1
  87. package/dist/legacy/1/instantiate.d.ts +0 -33
  88. package/dist/legacy/1/instantiate.d.ts.map +0 -1
  89. package/dist/legacy/1/instantiate.js +0 -137
  90. package/dist/legacy/1/instantiate.js.map +0 -1
  91. package/dist/legacy/1/manifest.d.ts +0 -132
  92. package/dist/legacy/1/manifest.d.ts.map +0 -1
  93. package/dist/legacy/1/manifest.js +0 -321
  94. package/dist/legacy/1/manifest.js.map +0 -1
  95. package/dist/legacy/1/migrate.d.ts +0 -84
  96. package/dist/legacy/1/migrate.d.ts.map +0 -1
  97. package/dist/legacy/1/migrate.js +0 -228
  98. package/dist/legacy/1/migrate.js.map +0 -1
  99. package/dist/legacy/1/nexus-home.d.ts +0 -11
  100. package/dist/legacy/1/nexus-home.d.ts.map +0 -1
  101. package/dist/legacy/1/nexus-home.js +0 -16
  102. package/dist/legacy/1/nexus-home.js.map +0 -1
  103. package/dist/legacy/1/plugin-descriptor.d.ts +0 -3
  104. package/dist/legacy/1/plugin-descriptor.d.ts.map +0 -1
  105. package/dist/legacy/1/plugin-descriptor.js +0 -2
  106. package/dist/legacy/1/plugin-descriptor.js.map +0 -1
  107. package/dist/legacy/1/preconditions.d.ts +0 -100
  108. package/dist/legacy/1/preconditions.d.ts.map +0 -1
  109. package/dist/legacy/1/preconditions.js +0 -189
  110. package/dist/legacy/1/preconditions.js.map +0 -1
  111. package/dist/legacy/1/rehydrate.d.ts +0 -22
  112. package/dist/legacy/1/rehydrate.d.ts.map +0 -1
  113. package/dist/legacy/1/rehydrate.js +0 -109
  114. package/dist/legacy/1/rehydrate.js.map +0 -1
  115. package/dist/legacy/1/remove-tool.d.ts +0 -19
  116. package/dist/legacy/1/remove-tool.d.ts.map +0 -1
  117. package/dist/legacy/1/remove-tool.js +0 -105
  118. package/dist/legacy/1/remove-tool.js.map +0 -1
  119. package/dist/legacy/1/session.d.ts +0 -343
  120. package/dist/legacy/1/session.d.ts.map +0 -1
  121. package/dist/legacy/1/session.js +0 -499
  122. package/dist/legacy/1/session.js.map +0 -1
  123. package/dist/legacy/1/tool-registry.d.ts +0 -12
  124. package/dist/legacy/1/tool-registry.d.ts.map +0 -1
  125. package/dist/legacy/1/tool-registry.js +0 -28
  126. package/dist/legacy/1/tool-registry.js.map +0 -1
  127. package/dist/legacy/1/tool.d.ts +0 -10
  128. package/dist/legacy/1/tool.d.ts.map +0 -1
  129. package/dist/legacy/1/tool.js +0 -2
  130. package/dist/legacy/1/tool.js.map +0 -1
  131. package/dist/legacy/1/upgrade.d.ts +0 -129
  132. package/dist/legacy/1/upgrade.d.ts.map +0 -1
  133. package/dist/legacy/1/upgrade.js +0 -355
  134. package/dist/legacy/1/upgrade.js.map +0 -1
  135. package/dist/legacy/1/workshop.d.ts +0 -95
  136. package/dist/legacy/1/workshop.d.ts.map +0 -1
  137. package/dist/legacy/1/workshop.js +0 -229
  138. package/dist/legacy/1/workshop.js.map +0 -1
  139. package/dist/legacy/1/worktree.d.ts +0 -67
  140. package/dist/legacy/1/worktree.d.ts.map +0 -1
  141. package/dist/legacy/1/worktree.js +0 -117
  142. package/dist/legacy/1/worktree.js.map +0 -1
  143. package/dist/legacy/1/writ.d.ts +0 -130
  144. package/dist/legacy/1/writ.d.ts.map +0 -1
  145. package/dist/legacy/1/writ.js +0 -599
  146. package/dist/legacy/1/writ.js.map +0 -1
  147. package/dist/rig-context.d.ts +0 -47
  148. package/dist/rig-context.d.ts.map +0 -1
  149. package/dist/rig-context.js +0 -11
  150. package/dist/rig-context.js.map +0 -1
  151. package/dist/rig-descriptor.d.ts +0 -39
  152. package/dist/rig-descriptor.d.ts.map +0 -1
  153. package/dist/rig-descriptor.js +0 -12
  154. package/dist/rig-descriptor.js.map +0 -1
  155. package/dist/rig.d.ts +0 -70
  156. package/dist/rig.d.ts.map +0 -1
  157. package/dist/rig.js +0 -14
  158. package/dist/rig.js.map +0 -1
  159. package/dist/tool.d.ts +0 -136
  160. package/dist/tool.d.ts.map +0 -1
  161. package/dist/tool.js +0 -135
  162. package/dist/tool.js.map +0 -1
  163. package/migrations/001-schema.sql +0 -177
  164. package/migrations/002-writs.sql +0 -44
  165. package/migrations/003-conversations.sql +0 -43
  166. package/migrations/004-remove-commissions.sql +0 -24
@@ -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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"}