@shardworks/nexus-core 0.1.100 → 0.1.102

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,72 +0,0 @@
1
- /**
2
- * Clockworks daemon — the long-running process that polls the event queue.
3
- *
4
- * Spawned by clockStart() as a detached child process. Accepts two arguments:
5
- * argv[2] = guild home path
6
- * argv[3] = polling interval in ms
7
- *
8
- * Logs to stdout/stderr, which clockStart() redirects to the log file.
9
- * Handles SIGTERM for graceful shutdown.
10
- */
11
- import { clockRun } from "./clockworks.js";
12
- import { registerSessionProvider } from "./session.js";
13
- // Dynamically load the session provider so the daemon can dispatch anima sessions
14
- // (summon/brief standing orders). The provider package is not a compile-time
15
- // dependency of core, but it's always installed at runtime via the CLI package.
16
- try {
17
- // @ts-expect-error — dynamic import of a package not in core's dependencies
18
- const mod = await import('@shardworks/claude-code-session-provider');
19
- registerSessionProvider(mod.claudeCodeProvider ?? mod.default);
20
- }
21
- catch {
22
- // Session provider not available — anima dispatches will be skipped.
23
- }
24
- const home = process.argv[2];
25
- const interval = parseInt(process.argv[3] ?? '2000', 10);
26
- if (!home) {
27
- process.stderr.write('Usage: clock-daemon <guild-home> [interval-ms]\n');
28
- process.exit(1);
29
- }
30
- let shuttingDown = false;
31
- let processing = false;
32
- function log(message) {
33
- const timestamp = new Date().toISOString();
34
- process.stdout.write(`[${timestamp}] ${message}\n`);
35
- }
36
- // Graceful shutdown: finish current processing, then exit.
37
- process.on('SIGTERM', () => {
38
- log('Received SIGTERM, shutting down...');
39
- shuttingDown = true;
40
- if (!processing) {
41
- log('Daemon stopped.');
42
- process.exit(0);
43
- }
44
- // If processing, the loop will exit after the current cycle.
45
- });
46
- log(`Clockworks daemon started (PID ${process.pid}, interval ${interval}ms, home: ${home})`);
47
- while (!shuttingDown) {
48
- try {
49
- processing = true;
50
- const result = await clockRun(home);
51
- processing = false;
52
- if (result.processed.length > 0) {
53
- const summary = result.processed
54
- .map(t => `${t.eventName} (${t.dispatches.length} dispatch${t.dispatches.length === 1 ? '' : 'es'})`)
55
- .join(', ');
56
- log(`Processed ${result.processed.length} event${result.processed.length === 1 ? '' : 's'}: ${summary}`);
57
- }
58
- // Idle cycles are silent — don't spam the log.
59
- }
60
- catch (err) {
61
- processing = false;
62
- const msg = err instanceof Error ? err.message : String(err);
63
- log(`Error during clock run: ${msg}`);
64
- }
65
- if (shuttingDown)
66
- break;
67
- // Wait for the next poll interval
68
- await new Promise(resolve => setTimeout(resolve, interval));
69
- }
70
- log('Daemon stopped.');
71
- process.exit(0);
72
- //# sourceMappingURL=clock-daemon.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clock-daemon.js","sourceRoot":"","sources":["../../../src/legacy/1/clock-daemon.ts"],"names":[],"mappings":"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"}
@@ -1,98 +0,0 @@
1
- import type { StandingOrder } from './guild-config.ts';
2
- /**
3
- * Desugar a standing order into canonical form: `{ on, run, ...params }`.
4
- *
5
- * - `{ on, run, ... }` passes through unchanged.
6
- * - `{ on, summon, prompt?, ... }` becomes `{ on, run: "summon-engine", role: <summon>, prompt?, ... }`.
7
- * - `{ on, brief, ... }` becomes `{ on, run: "summon-engine", role: <brief>, ... }` (legacy).
8
- *
9
- * Returns a plain object (not typed as StandingOrder) because the sugar
10
- * forms carry arbitrary extra keys that the TS type doesn't declare.
11
- */
12
- export declare function desugarOrder(order: StandingOrder): Record<string, unknown>;
13
- /**
14
- * Extract engine params from a desugared standing order.
15
- * Returns all keys except the reserved structural ones.
16
- */
17
- export declare function extractParams(order: Record<string, unknown>): Record<string, unknown>;
18
- /** Result of processing a single event. */
19
- export interface TickResult {
20
- eventId: string;
21
- eventName: string;
22
- dispatches: DispatchSummary[];
23
- }
24
- /** Summary of one standing order execution. */
25
- export interface DispatchSummary {
26
- handlerType: 'engine' | 'anima';
27
- handlerName: string;
28
- status: 'success' | 'error' | 'skipped';
29
- error?: string;
30
- }
31
- /** Result of a full clock run. */
32
- export interface ClockRunResult {
33
- processed: TickResult[];
34
- totalEvents: number;
35
- }
36
- /**
37
- * Process the next pending event (or a specific event by id).
38
- *
39
- * @param home - Guild root path.
40
- * @param eventId - Specific event id to process, or undefined for next pending.
41
- * @returns Processing result, or null if no events to process.
42
- */
43
- export declare function clockTick(home: string, eventId?: string): Promise<TickResult | null>;
44
- /**
45
- * Process all pending events until the queue is empty.
46
- *
47
- * @param home - Guild root path.
48
- * @returns Summary of all processing.
49
- */
50
- export declare function clockRun(home: string): Promise<ClockRunResult>;
51
- /** Options for starting the clockworks daemon. */
52
- export interface ClockStartOptions {
53
- /** Polling interval in milliseconds. Default: 2000. */
54
- interval?: number;
55
- }
56
- /** Result of starting the clockworks daemon. */
57
- export interface ClockStartResult {
58
- pid: number;
59
- logFile: string;
60
- }
61
- /** Result of stopping the clockworks daemon. */
62
- export interface ClockStopResult {
63
- pid: number;
64
- stopped: boolean;
65
- }
66
- /** Current status of the clockworks daemon. */
67
- export interface ClockStatus {
68
- running: boolean;
69
- pid?: number;
70
- logFile?: string;
71
- uptime?: number;
72
- }
73
- /**
74
- * Start the clockworks daemon as a detached background process.
75
- *
76
- * Spawns a child process that polls the event queue at the given interval.
77
- * Returns immediately after the child is spawned.
78
- *
79
- * @param home - Guild root path.
80
- * @param options - Daemon options (interval).
81
- * @returns PID and log file path.
82
- */
83
- export declare function clockStart(home: string, options?: ClockStartOptions): ClockStartResult;
84
- /**
85
- * Stop the running clockworks daemon.
86
- *
87
- * @param home - Guild root path.
88
- * @returns PID that was stopped and whether the process was still alive.
89
- */
90
- export declare function clockStop(home: string): ClockStopResult;
91
- /**
92
- * Get the current status of the clockworks daemon.
93
- *
94
- * @param home - Guild root path.
95
- * @returns Daemon status including PID, log file, and uptime if running.
96
- */
97
- export declare function clockStatus(home: string): ClockStatus;
98
- //# sourceMappingURL=clockworks.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clockworks.d.ts","sourceRoot":"","sources":["../../../src/legacy/1/clockworks.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAiBpE;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAe1E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMrF;AAID,2CAA2C;AAC3C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,eAAe,EAAE,CAAC;CAC/B;AAED,+CAA+C;AAC/C,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,kCAAkC;AAClC,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AA+ID;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAa1F;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAkBpE;AAID,kDAAkD;AAClD,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,gDAAgD;AAChD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,gDAAgD;AAChD,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,+CAA+C;AAC/C,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAwCD;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,CAwDtF;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAcvD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAqBrD"}
@@ -1,359 +0,0 @@
1
- var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
- if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
- return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
- return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
- });
6
- }
7
- return path;
8
- };
9
- /**
10
- * Clockworks runner — processes the event queue by matching pending events
11
- * to standing orders in guild.json and executing them.
12
- *
13
- * This is the core of Pillar 5. It reads unprocessed events from the
14
- * Clockworks event queue, finds matching standing orders, and dispatches
15
- * them as engine invocations. Each event is marked as processed after all
16
- * its standing orders have been dispatched.
17
- *
18
- * Standing orders have one canonical form: `{ on, run, ...params }`.
19
- * The `summon` verb is syntactic sugar — desugared to a `summon-engine`
20
- * invocation at dispatch time. All dispatch flows through engines.
21
- */
22
- import fs from 'node:fs';
23
- import path from 'node:path';
24
- import { spawn } from 'node:child_process';
25
- import { fileURLToPath } from 'node:url';
26
- import { readGuildConfig } from "./guild-config.js";
27
- import { readPendingEvents, readEvent, markEventProcessed, recordDispatch, signalEvent, } from "./events.js";
28
- import { isClockworkEngine, resolveEngineFromExport } from "./engine.js";
29
- import { clockPidPath, clockLogPath } from "./nexus-home.js";
30
- // ── Standing Order Desugaring ─────────────────────────────────────────
31
- /** Reserved keys on a standing order — everything else is an engine param. */
32
- const RESERVED_KEYS = new Set(['on', 'run', 'summon', 'brief']);
33
- /**
34
- * Desugar a standing order into canonical form: `{ on, run, ...params }`.
35
- *
36
- * - `{ on, run, ... }` passes through unchanged.
37
- * - `{ on, summon, prompt?, ... }` becomes `{ on, run: "summon-engine", role: <summon>, prompt?, ... }`.
38
- * - `{ on, brief, ... }` becomes `{ on, run: "summon-engine", role: <brief>, ... }` (legacy).
39
- *
40
- * Returns a plain object (not typed as StandingOrder) because the sugar
41
- * forms carry arbitrary extra keys that the TS type doesn't declare.
42
- */
43
- export function desugarOrder(order) {
44
- const raw = order;
45
- if ('summon' in raw && typeof raw.summon === 'string') {
46
- const { summon, ...rest } = raw;
47
- return { ...rest, run: 'summon-engine', role: summon };
48
- }
49
- // Legacy brief support — desugar to summon-engine
50
- if ('brief' in raw && typeof raw.brief === 'string') {
51
- const { brief, ...rest } = raw;
52
- return { ...rest, run: 'summon-engine', role: brief };
53
- }
54
- return raw;
55
- }
56
- /**
57
- * Extract engine params from a desugared standing order.
58
- * Returns all keys except the reserved structural ones.
59
- */
60
- export function extractParams(order) {
61
- const params = {};
62
- for (const [key, value] of Object.entries(order)) {
63
- if (!RESERVED_KEYS.has(key))
64
- params[key] = value;
65
- }
66
- return params;
67
- }
68
- /**
69
- * Process a single event: find matching standing orders and execute them.
70
- *
71
- * All standing orders are desugared into `{ on, run, ...params }` form and
72
- * dispatched as engine invocations. The `summon` verb is syntactic sugar
73
- * for `{ run: "summon-engine", role: <summon-value>, ... }`.
74
- *
75
- * @param home - Absolute path to the guild root.
76
- * @param event - The event to process.
77
- * @returns Summary of what was dispatched.
78
- */
79
- async function processEvent(home, event) {
80
- const config = readGuildConfig(home);
81
- const standingOrders = config.clockworks?.standingOrders ?? [];
82
- const matching = standingOrders.filter(so => so.on === event.name);
83
- const dispatches = [];
84
- // Check loop guard: don't process standing-order.failed events triggered
85
- // by other standing-order.failed events.
86
- const isFailureEvent = event.name === 'standing-order.failed';
87
- const isNestedFailure = isFailureEvent &&
88
- typeof event.payload === 'object' &&
89
- event.payload !== null &&
90
- 'triggeringEvent' in event.payload &&
91
- typeof event.payload.triggeringEvent === 'object' &&
92
- event.payload.triggeringEvent !== null &&
93
- event.payload.triggeringEvent.name === 'standing-order.failed';
94
- if (isNestedFailure) {
95
- // Loop guard: skip processing to prevent cascade.
96
- markEventProcessed(home, event.id);
97
- return { eventId: event.id, eventName: event.name, dispatches: [] };
98
- }
99
- for (const order of matching) {
100
- const desugared = desugarOrder(order);
101
- const engineName = desugared.run;
102
- const params = extractParams(desugared);
103
- const summary = await executeEngineOrder(home, event, engineName, config, params);
104
- dispatches.push(summary);
105
- // On failure, signal standing-order.failed
106
- if (summary.status === 'error') {
107
- signalStandingOrderFailed(home, order, event, summary.error);
108
- }
109
- }
110
- markEventProcessed(home, event.id);
111
- return { eventId: event.id, eventName: event.name, dispatches };
112
- }
113
- /**
114
- * Execute an engine standing order — load and call a clockwork engine.
115
- *
116
- * Params from the standing order are passed through to the engine via
117
- * `EngineContext.params`.
118
- */
119
- async function executeEngineOrder(home, event, engineName, config, params = {}) {
120
- const startedAt = new Date().toISOString();
121
- try {
122
- // Resolve engine entry point from guild.json
123
- const engineEntry = config.engines?.[engineName];
124
- if (!engineEntry) {
125
- throw new Error(`Engine "${engineName}" not found in guild.json engines registry.`);
126
- }
127
- // Resolve the engine module path
128
- const enginePkg = engineEntry.package;
129
- if (!enginePkg) {
130
- throw new Error(`Engine "${engineName}" has no package field — cannot resolve module.`);
131
- }
132
- // Import the engine module — handles both single and array exports
133
- const mod = await import(__rewriteRelativeImportExtension(enginePkg));
134
- const engineDef = resolveEngineFromExport(mod.default, engineName);
135
- if (!engineDef) {
136
- throw new Error(`Engine "${engineName}" could not be resolved from "${enginePkg}". ` +
137
- `Module must export an engine() definition or an array of engine() definitions with matching names.`);
138
- }
139
- await engineDef.handler(event, { home, params });
140
- const endedAt = new Date().toISOString();
141
- recordDispatch(home, {
142
- eventId: event.id,
143
- handlerType: 'engine',
144
- handlerName: engineName,
145
- startedAt,
146
- endedAt,
147
- status: 'success',
148
- });
149
- return { handlerType: 'engine', handlerName: engineName, status: 'success' };
150
- }
151
- catch (err) {
152
- const endedAt = new Date().toISOString();
153
- const errorMsg = err instanceof Error ? err.message : String(err);
154
- recordDispatch(home, {
155
- eventId: event.id,
156
- handlerType: 'engine',
157
- handlerName: engineName,
158
- startedAt,
159
- endedAt,
160
- status: 'error',
161
- error: errorMsg,
162
- });
163
- return { handlerType: 'engine', handlerName: engineName, status: 'error', error: errorMsg };
164
- }
165
- }
166
- /**
167
- * Signal standing-order.failed when a standing order execution fails.
168
- */
169
- function signalStandingOrderFailed(home, order, triggeringEvent, error) {
170
- signalEvent(home, 'standing-order.failed', {
171
- standingOrder: order,
172
- triggeringEvent: {
173
- id: triggeringEvent.id,
174
- name: triggeringEvent.name,
175
- },
176
- error,
177
- }, 'framework');
178
- }
179
- /**
180
- * Process the next pending event (or a specific event by id).
181
- *
182
- * @param home - Guild root path.
183
- * @param eventId - Specific event id to process, or undefined for next pending.
184
- * @returns Processing result, or null if no events to process.
185
- */
186
- export async function clockTick(home, eventId) {
187
- if (eventId != null) {
188
- const event = readEvent(home, eventId);
189
- if (!event) {
190
- throw new Error(`Event #${eventId} not found.`);
191
- }
192
- return processEvent(home, event);
193
- }
194
- const pending = readPendingEvents(home);
195
- if (pending.length === 0)
196
- return null;
197
- return processEvent(home, pending[0]);
198
- }
199
- /**
200
- * Process all pending events until the queue is empty.
201
- *
202
- * @param home - Guild root path.
203
- * @returns Summary of all processing.
204
- */
205
- export async function clockRun(home) {
206
- const processed = [];
207
- let totalEvents = 0;
208
- // Process in a loop because standing order failures may generate new events
209
- while (true) {
210
- const pending = readPendingEvents(home);
211
- if (pending.length === 0)
212
- break;
213
- totalEvents += pending.length;
214
- for (const event of pending) {
215
- const result = await processEvent(home, event);
216
- processed.push(result);
217
- }
218
- }
219
- return { processed, totalEvents };
220
- }
221
- /**
222
- * Check if a process is alive by sending signal 0.
223
- */
224
- function isProcessAlive(pid) {
225
- try {
226
- process.kill(pid, 0);
227
- return true;
228
- }
229
- catch {
230
- return false;
231
- }
232
- }
233
- /**
234
- * Read the PID file. Returns { pid, startedAt } or null if no file.
235
- */
236
- function readPidFile(home) {
237
- const pidFile = clockPidPath(home);
238
- if (!fs.existsSync(pidFile))
239
- return null;
240
- try {
241
- const content = fs.readFileSync(pidFile, 'utf-8').trim();
242
- const lines = content.split('\n');
243
- const pid = parseInt(lines[0], 10);
244
- const startedAt = lines[1] ?? new Date().toISOString();
245
- if (isNaN(pid))
246
- return null;
247
- return { pid, startedAt };
248
- }
249
- catch {
250
- return null;
251
- }
252
- }
253
- /**
254
- * Clean up a stale PID file (process is dead).
255
- */
256
- function cleanStalePid(home) {
257
- const pidFile = clockPidPath(home);
258
- try {
259
- fs.unlinkSync(pidFile);
260
- }
261
- catch { /* already gone */ }
262
- }
263
- /**
264
- * Start the clockworks daemon as a detached background process.
265
- *
266
- * Spawns a child process that polls the event queue at the given interval.
267
- * Returns immediately after the child is spawned.
268
- *
269
- * @param home - Guild root path.
270
- * @param options - Daemon options (interval).
271
- * @returns PID and log file path.
272
- */
273
- export function clockStart(home, options) {
274
- const interval = options?.interval ?? 2000;
275
- // Check if daemon is already running
276
- const existing = readPidFile(home);
277
- if (existing && isProcessAlive(existing.pid)) {
278
- throw new Error(`Clockworks daemon is already running (PID ${existing.pid}).`);
279
- }
280
- // Clean up stale PID file if needed
281
- if (existing)
282
- cleanStalePid(home);
283
- const logFile = clockLogPath(home);
284
- // Open log file for append
285
- const logFd = fs.openSync(logFile, 'a');
286
- // Resolve the daemon script from this module's directory.
287
- // clock-daemon lives alongside clockworks in the same package.
288
- // When running from source it's .ts; when running from dist it's .js.
289
- const thisDir = path.dirname(fileURLToPath(import.meta.url));
290
- const daemonScript = fs.existsSync(path.join(thisDir, 'clock-daemon.ts'))
291
- ? path.join(thisDir, 'clock-daemon.ts')
292
- : path.join(thisDir, 'clock-daemon.js');
293
- // Use --experimental-transform-types for .ts, not needed for .js
294
- const nodeArgs = daemonScript.endsWith('.ts')
295
- ? ['--disable-warning=ExperimentalWarning', '--experimental-transform-types']
296
- : [];
297
- const child = spawn(process.execPath, [
298
- ...nodeArgs,
299
- daemonScript,
300
- home,
301
- String(interval),
302
- ], {
303
- detached: true,
304
- stdio: ['ignore', logFd, logFd],
305
- env: { ...process.env },
306
- });
307
- const pid = child.pid;
308
- // Write PID file: line 1 = PID, line 2 = start timestamp
309
- const pidFile = clockPidPath(home);
310
- fs.writeFileSync(pidFile, `${pid}\n${new Date().toISOString()}\n`);
311
- // Detach from parent
312
- child.unref();
313
- fs.closeSync(logFd);
314
- return { pid, logFile };
315
- }
316
- /**
317
- * Stop the running clockworks daemon.
318
- *
319
- * @param home - Guild root path.
320
- * @returns PID that was stopped and whether the process was still alive.
321
- */
322
- export function clockStop(home) {
323
- const pidInfo = readPidFile(home);
324
- if (!pidInfo) {
325
- throw new Error('Clockworks daemon is not running (no PID file).');
326
- }
327
- const alive = isProcessAlive(pidInfo.pid);
328
- if (alive) {
329
- process.kill(pidInfo.pid, 'SIGTERM');
330
- }
331
- cleanStalePid(home);
332
- return { pid: pidInfo.pid, stopped: alive };
333
- }
334
- /**
335
- * Get the current status of the clockworks daemon.
336
- *
337
- * @param home - Guild root path.
338
- * @returns Daemon status including PID, log file, and uptime if running.
339
- */
340
- export function clockStatus(home) {
341
- const pidInfo = readPidFile(home);
342
- if (!pidInfo) {
343
- return { running: false };
344
- }
345
- const alive = isProcessAlive(pidInfo.pid);
346
- if (!alive) {
347
- cleanStalePid(home);
348
- return { running: false };
349
- }
350
- const logFile = clockLogPath(home);
351
- const uptime = Date.now() - new Date(pidInfo.startedAt).getTime();
352
- return {
353
- running: true,
354
- pid: pidInfo.pid,
355
- logFile,
356
- uptime,
357
- };
358
- }
359
- //# sourceMappingURL=clockworks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clockworks.js","sourceRoot":"","sources":["../../../src/legacy/1/clockworks.ts"],"names":[],"mappings":"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"}