@stoneforge/quarry 0.1.0
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/LICENSE +13 -0
- package/README.md +160 -0
- package/dist/api/index.d.ts +8 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +8 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/quarry-api.d.ts +268 -0
- package/dist/api/quarry-api.d.ts.map +1 -0
- package/dist/api/quarry-api.js +3905 -0
- package/dist/api/quarry-api.js.map +1 -0
- package/dist/api/types.d.ts +1359 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +204 -0
- package/dist/api/types.js.map +1 -0
- package/dist/bin/sf.d.ts +3 -0
- package/dist/bin/sf.d.ts.map +1 -0
- package/dist/bin/sf.js +9 -0
- package/dist/bin/sf.js.map +1 -0
- package/dist/cli/commands/admin.d.ts +11 -0
- package/dist/cli/commands/admin.d.ts.map +1 -0
- package/dist/cli/commands/admin.js +465 -0
- package/dist/cli/commands/admin.js.map +1 -0
- package/dist/cli/commands/alias.d.ts +8 -0
- package/dist/cli/commands/alias.d.ts.map +1 -0
- package/dist/cli/commands/alias.js +70 -0
- package/dist/cli/commands/alias.js.map +1 -0
- package/dist/cli/commands/channel.d.ts +13 -0
- package/dist/cli/commands/channel.d.ts.map +1 -0
- package/dist/cli/commands/channel.js +680 -0
- package/dist/cli/commands/channel.js.map +1 -0
- package/dist/cli/commands/completion.d.ts +8 -0
- package/dist/cli/commands/completion.d.ts.map +1 -0
- package/dist/cli/commands/completion.js +87 -0
- package/dist/cli/commands/completion.js.map +1 -0
- package/dist/cli/commands/config.d.ts +12 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +242 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/crud.d.ts +64 -0
- package/dist/cli/commands/crud.d.ts.map +1 -0
- package/dist/cli/commands/crud.js +805 -0
- package/dist/cli/commands/crud.js.map +1 -0
- package/dist/cli/commands/dep.d.ts +16 -0
- package/dist/cli/commands/dep.d.ts.map +1 -0
- package/dist/cli/commands/dep.js +499 -0
- package/dist/cli/commands/dep.js.map +1 -0
- package/dist/cli/commands/document.d.ts +12 -0
- package/dist/cli/commands/document.d.ts.map +1 -0
- package/dist/cli/commands/document.js +1039 -0
- package/dist/cli/commands/document.js.map +1 -0
- package/dist/cli/commands/embeddings.d.ts +12 -0
- package/dist/cli/commands/embeddings.d.ts.map +1 -0
- package/dist/cli/commands/embeddings.js +273 -0
- package/dist/cli/commands/embeddings.js.map +1 -0
- package/dist/cli/commands/entity.d.ts +16 -0
- package/dist/cli/commands/entity.d.ts.map +1 -0
- package/dist/cli/commands/entity.js +522 -0
- package/dist/cli/commands/entity.js.map +1 -0
- package/dist/cli/commands/gc.d.ts +10 -0
- package/dist/cli/commands/gc.d.ts.map +1 -0
- package/dist/cli/commands/gc.js +257 -0
- package/dist/cli/commands/gc.js.map +1 -0
- package/dist/cli/commands/help.d.ts +11 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +169 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/history.d.ts +9 -0
- package/dist/cli/commands/history.d.ts.map +1 -0
- package/dist/cli/commands/history.js +160 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/identity.d.ts +18 -0
- package/dist/cli/commands/identity.d.ts.map +1 -0
- package/dist/cli/commands/identity.js +698 -0
- package/dist/cli/commands/identity.js.map +1 -0
- package/dist/cli/commands/inbox.d.ts +20 -0
- package/dist/cli/commands/inbox.d.ts.map +1 -0
- package/dist/cli/commands/inbox.js +493 -0
- package/dist/cli/commands/inbox.js.map +1 -0
- package/dist/cli/commands/init.d.ts +20 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +144 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +9 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +200 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/library.d.ts +12 -0
- package/dist/cli/commands/library.d.ts.map +1 -0
- package/dist/cli/commands/library.js +665 -0
- package/dist/cli/commands/library.js.map +1 -0
- package/dist/cli/commands/message.d.ts +11 -0
- package/dist/cli/commands/message.d.ts.map +1 -0
- package/dist/cli/commands/message.js +608 -0
- package/dist/cli/commands/message.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +17 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +698 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/playbook.d.ts +12 -0
- package/dist/cli/commands/playbook.d.ts.map +1 -0
- package/dist/cli/commands/playbook.js +730 -0
- package/dist/cli/commands/playbook.js.map +1 -0
- package/dist/cli/commands/reset.d.ts +12 -0
- package/dist/cli/commands/reset.d.ts.map +1 -0
- package/dist/cli/commands/reset.js +306 -0
- package/dist/cli/commands/reset.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +11 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +106 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/stats.d.ts +8 -0
- package/dist/cli/commands/stats.d.ts.map +1 -0
- package/dist/cli/commands/stats.js +82 -0
- package/dist/cli/commands/stats.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +14 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +370 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/task.d.ts +25 -0
- package/dist/cli/commands/task.d.ts.map +1 -0
- package/dist/cli/commands/task.js +1153 -0
- package/dist/cli/commands/task.js.map +1 -0
- package/dist/cli/commands/team.d.ts +13 -0
- package/dist/cli/commands/team.d.ts.map +1 -0
- package/dist/cli/commands/team.js +471 -0
- package/dist/cli/commands/team.js.map +1 -0
- package/dist/cli/commands/workflow.d.ts +16 -0
- package/dist/cli/commands/workflow.d.ts.map +1 -0
- package/dist/cli/commands/workflow.js +753 -0
- package/dist/cli/commands/workflow.js.map +1 -0
- package/dist/cli/completion.d.ts +28 -0
- package/dist/cli/completion.d.ts.map +1 -0
- package/dist/cli/completion.js +295 -0
- package/dist/cli/completion.js.map +1 -0
- package/dist/cli/db.d.ts +38 -0
- package/dist/cli/db.d.ts.map +1 -0
- package/dist/cli/db.js +90 -0
- package/dist/cli/db.js.map +1 -0
- package/dist/cli/formatter.d.ts +87 -0
- package/dist/cli/formatter.d.ts.map +1 -0
- package/dist/cli/formatter.js +464 -0
- package/dist/cli/formatter.js.map +1 -0
- package/dist/cli/index.d.ts +33 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +38 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/parser.d.ts +45 -0
- package/dist/cli/parser.d.ts.map +1 -0
- package/dist/cli/parser.js +256 -0
- package/dist/cli/parser.js.map +1 -0
- package/dist/cli/plugin-loader.d.ts +39 -0
- package/dist/cli/plugin-loader.d.ts.map +1 -0
- package/dist/cli/plugin-loader.js +165 -0
- package/dist/cli/plugin-loader.js.map +1 -0
- package/dist/cli/plugin-registry.d.ts +50 -0
- package/dist/cli/plugin-registry.d.ts.map +1 -0
- package/dist/cli/plugin-registry.js +206 -0
- package/dist/cli/plugin-registry.js.map +1 -0
- package/dist/cli/plugin-types.d.ts +106 -0
- package/dist/cli/plugin-types.d.ts.map +1 -0
- package/dist/cli/plugin-types.js +103 -0
- package/dist/cli/plugin-types.js.map +1 -0
- package/dist/cli/runner.d.ts +35 -0
- package/dist/cli/runner.d.ts.map +1 -0
- package/dist/cli/runner.js +340 -0
- package/dist/cli/runner.js.map +1 -0
- package/dist/cli/suggest.d.ts +15 -0
- package/dist/cli/suggest.d.ts.map +1 -0
- package/dist/cli/suggest.js +49 -0
- package/dist/cli/suggest.js.map +1 -0
- package/dist/cli/types.d.ts +138 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +63 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/config/config.d.ts +86 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +348 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/defaults.d.ts +66 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +114 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/duration.d.ts +75 -0
- package/dist/config/duration.d.ts.map +1 -0
- package/dist/config/duration.js +190 -0
- package/dist/config/duration.js.map +1 -0
- package/dist/config/env.d.ts +67 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +207 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/file.d.ts +97 -0
- package/dist/config/file.d.ts.map +1 -0
- package/dist/config/file.js +365 -0
- package/dist/config/file.js.map +1 -0
- package/dist/config/index.d.ts +35 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +41 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/merge.d.ts +53 -0
- package/dist/config/merge.d.ts.map +1 -0
- package/dist/config/merge.js +226 -0
- package/dist/config/merge.js.map +1 -0
- package/dist/config/types.d.ts +257 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +72 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validation.d.ts +55 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +251 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/http/index.d.ts +8 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +12 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/sync-handlers.d.ts +162 -0
- package/dist/http/sync-handlers.d.ts.map +1 -0
- package/dist/http/sync-handlers.js +271 -0
- package/dist/http/sync-handlers.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/server/index.d.ts +34 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +3329 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/static.d.ts +18 -0
- package/dist/server/static.d.ts.map +1 -0
- package/dist/server/static.js +71 -0
- package/dist/server/static.js.map +1 -0
- package/dist/server/ws/broadcaster.d.ts +8 -0
- package/dist/server/ws/broadcaster.d.ts.map +1 -0
- package/dist/server/ws/broadcaster.js +7 -0
- package/dist/server/ws/broadcaster.js.map +1 -0
- package/dist/server/ws/handler.d.ts +55 -0
- package/dist/server/ws/handler.d.ts.map +1 -0
- package/dist/server/ws/handler.js +160 -0
- package/dist/server/ws/handler.js.map +1 -0
- package/dist/services/blocked-cache.d.ts +297 -0
- package/dist/services/blocked-cache.d.ts.map +1 -0
- package/dist/services/blocked-cache.js +755 -0
- package/dist/services/blocked-cache.js.map +1 -0
- package/dist/services/dependency.d.ts +205 -0
- package/dist/services/dependency.d.ts.map +1 -0
- package/dist/services/dependency.js +566 -0
- package/dist/services/dependency.js.map +1 -0
- package/dist/services/embeddings/fusion.d.ts +33 -0
- package/dist/services/embeddings/fusion.d.ts.map +1 -0
- package/dist/services/embeddings/fusion.js +34 -0
- package/dist/services/embeddings/fusion.js.map +1 -0
- package/dist/services/embeddings/index.d.ts +12 -0
- package/dist/services/embeddings/index.d.ts.map +1 -0
- package/dist/services/embeddings/index.js +10 -0
- package/dist/services/embeddings/index.js.map +1 -0
- package/dist/services/embeddings/local-provider.d.ts +31 -0
- package/dist/services/embeddings/local-provider.d.ts.map +1 -0
- package/dist/services/embeddings/local-provider.js +80 -0
- package/dist/services/embeddings/local-provider.js.map +1 -0
- package/dist/services/embeddings/service.d.ts +76 -0
- package/dist/services/embeddings/service.d.ts.map +1 -0
- package/dist/services/embeddings/service.js +153 -0
- package/dist/services/embeddings/service.js.map +1 -0
- package/dist/services/embeddings/types.d.ts +70 -0
- package/dist/services/embeddings/types.d.ts.map +1 -0
- package/dist/services/embeddings/types.js +8 -0
- package/dist/services/embeddings/types.js.map +1 -0
- package/dist/services/id-length-cache.d.ts +156 -0
- package/dist/services/id-length-cache.d.ts.map +1 -0
- package/dist/services/id-length-cache.js +197 -0
- package/dist/services/id-length-cache.js.map +1 -0
- package/dist/services/inbox.d.ts +147 -0
- package/dist/services/inbox.d.ts.map +1 -0
- package/dist/services/inbox.js +428 -0
- package/dist/services/inbox.js.map +1 -0
- package/dist/services/index.d.ts +10 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +10 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/priority-service.d.ts +145 -0
- package/dist/services/priority-service.d.ts.map +1 -0
- package/dist/services/priority-service.js +272 -0
- package/dist/services/priority-service.js.map +1 -0
- package/dist/services/search-utils.d.ts +47 -0
- package/dist/services/search-utils.d.ts.map +1 -0
- package/dist/services/search-utils.js +83 -0
- package/dist/services/search-utils.js.map +1 -0
- package/dist/sync/hash.d.ts +48 -0
- package/dist/sync/hash.d.ts.map +1 -0
- package/dist/sync/hash.js +136 -0
- package/dist/sync/hash.js.map +1 -0
- package/dist/sync/index.d.ts +11 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +16 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/merge.d.ts +80 -0
- package/dist/sync/merge.d.ts.map +1 -0
- package/dist/sync/merge.js +310 -0
- package/dist/sync/merge.js.map +1 -0
- package/dist/sync/serialization.d.ts +132 -0
- package/dist/sync/serialization.d.ts.map +1 -0
- package/dist/sync/serialization.js +306 -0
- package/dist/sync/serialization.js.map +1 -0
- package/dist/sync/service.d.ts +102 -0
- package/dist/sync/service.d.ts.map +1 -0
- package/dist/sync/service.js +493 -0
- package/dist/sync/service.js.map +1 -0
- package/dist/sync/types.d.ts +275 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/sync/types.js +76 -0
- package/dist/sync/types.js.map +1 -0
- package/dist/systems/identity.d.ts +479 -0
- package/dist/systems/identity.d.ts.map +1 -0
- package/dist/systems/identity.js +817 -0
- package/dist/systems/identity.js.map +1 -0
- package/dist/systems/index.d.ts +8 -0
- package/dist/systems/index.d.ts.map +1 -0
- package/dist/systems/index.js +29 -0
- package/dist/systems/index.js.map +1 -0
- package/package.json +121 -0
- package/web/assets/charts-vendor-D1YcbGux.js +55 -0
- package/web/assets/dnd-vendor-DmxE-_ZH.js +5 -0
- package/web/assets/editor-vendor-BxraAWts.js +279 -0
- package/web/assets/index-B77vv208.js +341 -0
- package/web/assets/index-CF_XnVLh.css +1 -0
- package/web/assets/router-vendor-BCKpRBrB.js +41 -0
- package/web/assets/ui-vendor-DUahGnbT.js +45 -0
- package/web/assets/utils-vendor-CfYKiENT.js +813 -0
- package/web/favicon.ico +0 -0
- package/web/index.html +23 -0
- package/web/logo.png +0 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocket Handler
|
|
3
|
+
*
|
|
4
|
+
* Handles WebSocket connections, message parsing, and subscription management.
|
|
5
|
+
*/
|
|
6
|
+
import { parseClientMessage, shouldReceiveEvent } from '@stoneforge/shared-routes';
|
|
7
|
+
import { getBroadcaster } from './broadcaster.js';
|
|
8
|
+
/**
|
|
9
|
+
* Track active WebSocket connections
|
|
10
|
+
*/
|
|
11
|
+
const clients = new Map();
|
|
12
|
+
/**
|
|
13
|
+
* Generate a unique client ID
|
|
14
|
+
*/
|
|
15
|
+
function generateClientId() {
|
|
16
|
+
return `client-${Date.now()}-${Math.random().toString(36).substring(2, 8)}`;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Send a message to a specific client
|
|
20
|
+
*/
|
|
21
|
+
function sendToClient(ws, message) {
|
|
22
|
+
try {
|
|
23
|
+
ws.send(JSON.stringify(message));
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
console.error('[ws] Error sending message to client:', err);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Handle a new WebSocket connection
|
|
31
|
+
*/
|
|
32
|
+
export function handleOpen(ws) {
|
|
33
|
+
const clientId = generateClientId();
|
|
34
|
+
const subscriptions = new Set();
|
|
35
|
+
// Create event listener for this client
|
|
36
|
+
const eventListener = (event) => {
|
|
37
|
+
if (shouldReceiveEvent(subscriptions, event)) {
|
|
38
|
+
sendToClient(ws, {
|
|
39
|
+
type: 'event',
|
|
40
|
+
event,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
// Store client data
|
|
45
|
+
ws.data = {
|
|
46
|
+
id: clientId,
|
|
47
|
+
subscriptions,
|
|
48
|
+
eventListener,
|
|
49
|
+
};
|
|
50
|
+
// Register listener with broadcaster
|
|
51
|
+
const broadcaster = getBroadcaster();
|
|
52
|
+
if (broadcaster) {
|
|
53
|
+
broadcaster.addListener(eventListener);
|
|
54
|
+
}
|
|
55
|
+
// Track this client
|
|
56
|
+
clients.set(clientId, ws);
|
|
57
|
+
console.log(`[ws] Client connected: ${clientId}`);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Handle WebSocket message from client
|
|
61
|
+
*/
|
|
62
|
+
export function handleMessage(ws, data) {
|
|
63
|
+
const message = typeof data === 'string' ? data : data.toString();
|
|
64
|
+
const parsed = parseClientMessage(message);
|
|
65
|
+
if (!parsed) {
|
|
66
|
+
sendToClient(ws, {
|
|
67
|
+
type: 'error',
|
|
68
|
+
code: 'INVALID_MESSAGE',
|
|
69
|
+
message: 'Could not parse message',
|
|
70
|
+
});
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
switch (parsed.type) {
|
|
74
|
+
case 'ping':
|
|
75
|
+
sendToClient(ws, { type: 'pong' });
|
|
76
|
+
break;
|
|
77
|
+
case 'subscribe': {
|
|
78
|
+
for (const channel of parsed.channels) {
|
|
79
|
+
ws.data.subscriptions.add(channel);
|
|
80
|
+
}
|
|
81
|
+
sendToClient(ws, {
|
|
82
|
+
type: 'subscribed',
|
|
83
|
+
channels: parsed.channels,
|
|
84
|
+
});
|
|
85
|
+
console.log(`[ws] Client ${ws.data.id} subscribed to: ${parsed.channels.join(', ')}`);
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
case 'unsubscribe': {
|
|
89
|
+
for (const channel of parsed.channels) {
|
|
90
|
+
ws.data.subscriptions.delete(channel);
|
|
91
|
+
}
|
|
92
|
+
sendToClient(ws, {
|
|
93
|
+
type: 'unsubscribed',
|
|
94
|
+
channels: parsed.channels,
|
|
95
|
+
});
|
|
96
|
+
console.log(`[ws] Client ${ws.data.id} unsubscribed from: ${parsed.channels.join(', ')}`);
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Handle WebSocket connection close
|
|
103
|
+
*/
|
|
104
|
+
export function handleClose(ws) {
|
|
105
|
+
const { id, eventListener } = ws.data;
|
|
106
|
+
// Unregister listener from broadcaster
|
|
107
|
+
const broadcaster = getBroadcaster();
|
|
108
|
+
if (broadcaster) {
|
|
109
|
+
broadcaster.removeListener(eventListener);
|
|
110
|
+
}
|
|
111
|
+
// Remove from tracking
|
|
112
|
+
clients.delete(id);
|
|
113
|
+
console.log(`[ws] Client disconnected: ${id}`);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Handle WebSocket error
|
|
117
|
+
*/
|
|
118
|
+
export function handleError(ws, error) {
|
|
119
|
+
console.error(`[ws] Client ${ws.data?.id ?? 'unknown'} error:`, error.message);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get the number of connected clients
|
|
123
|
+
*/
|
|
124
|
+
export function getClientCount() {
|
|
125
|
+
return clients.size;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Broadcast a message to all connected clients
|
|
129
|
+
*/
|
|
130
|
+
export function broadcastToAll(message) {
|
|
131
|
+
for (const client of clients.values()) {
|
|
132
|
+
sendToClient(client, message);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Broadcast an inbox event to subscribed clients
|
|
137
|
+
* Sends to clients subscribed to 'inbox', 'inbox:${recipientId}', or '*'
|
|
138
|
+
*/
|
|
139
|
+
export function broadcastInboxEvent(itemId, recipientId, eventType, oldValue, newValue, actor) {
|
|
140
|
+
const event = {
|
|
141
|
+
id: Date.now(), // Use timestamp as pseudo-ID since inbox events aren't in events table
|
|
142
|
+
elementId: itemId,
|
|
143
|
+
elementType: 'inbox-item',
|
|
144
|
+
eventType: eventType,
|
|
145
|
+
actor: (actor || 'system'),
|
|
146
|
+
oldValue,
|
|
147
|
+
newValue: { ...newValue, recipientId }, // Include recipientId for entity-specific subscriptions
|
|
148
|
+
createdAt: new Date().toISOString(),
|
|
149
|
+
};
|
|
150
|
+
const message = {
|
|
151
|
+
type: 'event',
|
|
152
|
+
event,
|
|
153
|
+
};
|
|
154
|
+
for (const client of clients.values()) {
|
|
155
|
+
if (shouldReceiveEvent(client.data.subscriptions, event)) {
|
|
156
|
+
sendToClient(client, message);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/server/ws/handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Blocked Cache Service
|
|
3
|
+
*
|
|
4
|
+
* Maintains a materialized view of blocked elements for efficient ready-work queries.
|
|
5
|
+
* The blocked_cache table provides ~25x speedup for large datasets by avoiding
|
|
6
|
+
* recursive dependency checks on every query.
|
|
7
|
+
*
|
|
8
|
+
* Blocking Rules:
|
|
9
|
+
* - `blocks` dependency: Blocked element waits for blocker to close
|
|
10
|
+
* - `parent-child` dependency: Blocked element (child) inherits blocked state from blocker (parent) (transitive)
|
|
11
|
+
* - `awaits` dependency: Blocked element waits until gate is satisfied (timer, approval, etc.)
|
|
12
|
+
*
|
|
13
|
+
* Cache Invalidation Triggers:
|
|
14
|
+
* - Blocking dependency added/removed
|
|
15
|
+
* - Element status changes (especially closing)
|
|
16
|
+
* - Gate satisfaction changes
|
|
17
|
+
* - Parent blocking state changes
|
|
18
|
+
*/
|
|
19
|
+
import type { StorageBackend } from '@stoneforge/storage';
|
|
20
|
+
import type { ElementId, EntityId, DependencyType, AwaitsMetadata } from '@stoneforge/core';
|
|
21
|
+
/**
|
|
22
|
+
* Blocking information for an element
|
|
23
|
+
*/
|
|
24
|
+
export interface BlockingInfo {
|
|
25
|
+
/** The element that is blocked */
|
|
26
|
+
elementId: ElementId;
|
|
27
|
+
/** The element causing the block */
|
|
28
|
+
blockedBy: ElementId;
|
|
29
|
+
/** Human-readable reason */
|
|
30
|
+
reason: string;
|
|
31
|
+
/** Status before becoming blocked (for restoration) */
|
|
32
|
+
previousStatus?: string | null;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Result of a cache rebuild operation
|
|
36
|
+
*/
|
|
37
|
+
export interface CacheRebuildResult {
|
|
38
|
+
/** Number of elements checked */
|
|
39
|
+
elementsChecked: number;
|
|
40
|
+
/** Number of elements added to blocked cache */
|
|
41
|
+
elementsBlocked: number;
|
|
42
|
+
/** Time taken in milliseconds */
|
|
43
|
+
durationMs: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Options for gate checking
|
|
47
|
+
*/
|
|
48
|
+
export interface GateCheckOptions {
|
|
49
|
+
/** Current time for timer gate checks (defaults to now) */
|
|
50
|
+
currentTime?: Date;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Callback for automatic status transitions
|
|
54
|
+
*/
|
|
55
|
+
export interface StatusTransitionCallback {
|
|
56
|
+
/**
|
|
57
|
+
* Called when an element should transition to blocked status
|
|
58
|
+
* @param elementId - The element to block
|
|
59
|
+
* @param previousStatus - The status to save for later restoration
|
|
60
|
+
*/
|
|
61
|
+
onBlock: (elementId: ElementId, previousStatus: string) => void;
|
|
62
|
+
/**
|
|
63
|
+
* Called when an element should transition from blocked status
|
|
64
|
+
* @param elementId - The element to unblock
|
|
65
|
+
* @param statusToRestore - The status to restore to
|
|
66
|
+
*/
|
|
67
|
+
onUnblock: (elementId: ElementId, statusToRestore: string) => void;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Service for managing the blocked elements cache
|
|
71
|
+
*/
|
|
72
|
+
export declare class BlockedCacheService {
|
|
73
|
+
private readonly db;
|
|
74
|
+
private statusCallback?;
|
|
75
|
+
constructor(db: StorageBackend);
|
|
76
|
+
/**
|
|
77
|
+
* Set the callback for automatic status transitions
|
|
78
|
+
* This allows the service to notify when elements should be blocked/unblocked
|
|
79
|
+
*/
|
|
80
|
+
setStatusTransitionCallback(callback: StatusTransitionCallback): void;
|
|
81
|
+
/**
|
|
82
|
+
* Check if an element is blocked
|
|
83
|
+
*
|
|
84
|
+
* @param elementId - Element to check
|
|
85
|
+
* @returns Blocking info if blocked, null if not blocked
|
|
86
|
+
*/
|
|
87
|
+
isBlocked(elementId: ElementId): BlockingInfo | null;
|
|
88
|
+
/**
|
|
89
|
+
* Get all blocked elements
|
|
90
|
+
*
|
|
91
|
+
* @returns Array of blocking info for all blocked elements
|
|
92
|
+
*/
|
|
93
|
+
getAllBlocked(): BlockingInfo[];
|
|
94
|
+
/**
|
|
95
|
+
* Get all elements blocked by a specific element
|
|
96
|
+
*
|
|
97
|
+
* @param blockerId - The element causing blocks
|
|
98
|
+
* @returns Array of element IDs blocked by this element
|
|
99
|
+
*/
|
|
100
|
+
getBlockedBy(blockerId: ElementId): ElementId[];
|
|
101
|
+
/**
|
|
102
|
+
* Count blocked elements
|
|
103
|
+
*/
|
|
104
|
+
count(): number;
|
|
105
|
+
/**
|
|
106
|
+
* Add a blocking entry to the cache
|
|
107
|
+
*
|
|
108
|
+
* @param elementId - Element being blocked
|
|
109
|
+
* @param blockedBy - Element causing the block
|
|
110
|
+
* @param reason - Human-readable reason
|
|
111
|
+
* @param previousStatus - The element's status before becoming blocked
|
|
112
|
+
*/
|
|
113
|
+
addBlocked(elementId: ElementId, blockedBy: ElementId, reason: string, previousStatus?: string | null): void;
|
|
114
|
+
/**
|
|
115
|
+
* Remove a blocking entry from the cache
|
|
116
|
+
*
|
|
117
|
+
* @param elementId - Element to unblock
|
|
118
|
+
*/
|
|
119
|
+
removeBlocked(elementId: ElementId): void;
|
|
120
|
+
/**
|
|
121
|
+
* Clear all entries from the cache
|
|
122
|
+
*/
|
|
123
|
+
clear(): void;
|
|
124
|
+
/**
|
|
125
|
+
* Check if an element is in a completed state (doesn't block others)
|
|
126
|
+
*
|
|
127
|
+
* @param elementId - Element to check
|
|
128
|
+
* @returns true if element is completed/closed/tombstone
|
|
129
|
+
*/
|
|
130
|
+
private isElementCompleted;
|
|
131
|
+
/**
|
|
132
|
+
* Check if a blocker element is in a completed state (no longer blocking)
|
|
133
|
+
*
|
|
134
|
+
* @param blockerId - The blocker element to check
|
|
135
|
+
* @returns true if blocker is completed/closed/tombstone (no longer blocking)
|
|
136
|
+
*/
|
|
137
|
+
isBlockerCompleted(blockerId: ElementId): boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Get the current status of an element
|
|
140
|
+
*
|
|
141
|
+
* @param elementId - Element to check
|
|
142
|
+
* @returns The element's status, or null if not found or no status
|
|
143
|
+
*/
|
|
144
|
+
getElementStatus(elementId: ElementId): string | null;
|
|
145
|
+
/**
|
|
146
|
+
* Check if element is a task (has status field)
|
|
147
|
+
*/
|
|
148
|
+
isTask(elementId: ElementId): boolean;
|
|
149
|
+
/**
|
|
150
|
+
* Check if element is a plan
|
|
151
|
+
*/
|
|
152
|
+
isPlan(elementId: ElementId): boolean;
|
|
153
|
+
/**
|
|
154
|
+
* Check if an awaits gate is satisfied
|
|
155
|
+
*
|
|
156
|
+
* @param metadata - The awaits dependency metadata
|
|
157
|
+
* @param options - Gate check options
|
|
158
|
+
* @returns true if gate is satisfied (not blocking)
|
|
159
|
+
*/
|
|
160
|
+
isGateSatisfied(metadata: AwaitsMetadata, options?: GateCheckOptions): boolean;
|
|
161
|
+
/**
|
|
162
|
+
* Compute the blocking state for a single element
|
|
163
|
+
*
|
|
164
|
+
* @param elementId - Element to check
|
|
165
|
+
* @param options - Gate check options
|
|
166
|
+
* @returns Blocking info if blocked, null if not blocked
|
|
167
|
+
*/
|
|
168
|
+
computeBlockingState(elementId: ElementId, options?: GateCheckOptions): BlockingInfo | null;
|
|
169
|
+
/**
|
|
170
|
+
* Update blocking state for an element after a dependency change
|
|
171
|
+
*
|
|
172
|
+
* Handles automatic status transitions:
|
|
173
|
+
* - When element becomes blocked: saves current status and triggers BLOCKED transition
|
|
174
|
+
* - When element becomes unblocked: restores previous status
|
|
175
|
+
*
|
|
176
|
+
* @param elementId - Element whose dependencies changed
|
|
177
|
+
* @param options - Gate check options
|
|
178
|
+
*/
|
|
179
|
+
invalidateElement(elementId: ElementId, options?: GateCheckOptions): void;
|
|
180
|
+
/**
|
|
181
|
+
* Update blocking state for all elements that depend on a changed element
|
|
182
|
+
* Called when an element's status changes (especially when completing)
|
|
183
|
+
*
|
|
184
|
+
* @param changedId - Element whose status changed
|
|
185
|
+
* @param options - Gate check options
|
|
186
|
+
*/
|
|
187
|
+
invalidateDependents(changedId: ElementId, options?: GateCheckOptions): void;
|
|
188
|
+
/**
|
|
189
|
+
* Recursively invalidate children of an element
|
|
190
|
+
* Used for transitive parent-child blocking
|
|
191
|
+
*
|
|
192
|
+
* @param parentId - Parent element
|
|
193
|
+
* @param options - Gate check options
|
|
194
|
+
* @param visited - Set of already visited elements (cycle prevention)
|
|
195
|
+
*/
|
|
196
|
+
private invalidateChildren;
|
|
197
|
+
/**
|
|
198
|
+
* Result of a gate satisfaction operation
|
|
199
|
+
*/
|
|
200
|
+
/**
|
|
201
|
+
* Mark an external or webhook gate as satisfied.
|
|
202
|
+
* Updates the dependency metadata and recomputes blocking state.
|
|
203
|
+
*
|
|
204
|
+
* @param blockedId - Element that has the awaits dependency
|
|
205
|
+
* @param blockerId - Blocker element ID of the awaits dependency
|
|
206
|
+
* @param actor - Entity marking the gate as satisfied
|
|
207
|
+
* @param options - Gate check options
|
|
208
|
+
* @returns True if gate was found and satisfied, false if not found
|
|
209
|
+
*/
|
|
210
|
+
satisfyGate(blockedId: ElementId, blockerId: ElementId, actor: EntityId, options?: GateCheckOptions): boolean;
|
|
211
|
+
/**
|
|
212
|
+
* Record an approval for an approval gate.
|
|
213
|
+
* Updates the dependency metadata with the new approver.
|
|
214
|
+
*
|
|
215
|
+
* @param blockedId - Element that has the awaits dependency
|
|
216
|
+
* @param blockerId - Blocker element ID of the awaits dependency
|
|
217
|
+
* @param approver - Entity recording their approval
|
|
218
|
+
* @param options - Gate check options
|
|
219
|
+
* @returns Object indicating success and current approval count
|
|
220
|
+
*/
|
|
221
|
+
recordApproval(blockedId: ElementId, blockerId: ElementId, approver: EntityId, options?: GateCheckOptions): {
|
|
222
|
+
success: boolean;
|
|
223
|
+
currentCount: number;
|
|
224
|
+
requiredCount: number;
|
|
225
|
+
satisfied: boolean;
|
|
226
|
+
};
|
|
227
|
+
/**
|
|
228
|
+
* Remove an approval from an approval gate.
|
|
229
|
+
*
|
|
230
|
+
* @param blockedId - Element that has the awaits dependency
|
|
231
|
+
* @param blockerId - Blocker element ID of the awaits dependency
|
|
232
|
+
* @param approver - Entity removing their approval
|
|
233
|
+
* @param options - Gate check options
|
|
234
|
+
* @returns Object indicating success and current approval count
|
|
235
|
+
*/
|
|
236
|
+
removeApproval(blockedId: ElementId, blockerId: ElementId, approver: EntityId, options?: GateCheckOptions): {
|
|
237
|
+
success: boolean;
|
|
238
|
+
currentCount: number;
|
|
239
|
+
requiredCount: number;
|
|
240
|
+
satisfied: boolean;
|
|
241
|
+
};
|
|
242
|
+
/**
|
|
243
|
+
* Rebuild the entire blocked cache from scratch
|
|
244
|
+
*
|
|
245
|
+
* This is useful for:
|
|
246
|
+
* - Initial population after migration
|
|
247
|
+
* - Recovery from cache corruption
|
|
248
|
+
* - Periodic consistency checks
|
|
249
|
+
*
|
|
250
|
+
* The rebuild processes elements in topological order (parents before children)
|
|
251
|
+
* to ensure transitive blocking is computed correctly.
|
|
252
|
+
*
|
|
253
|
+
* @param options - Gate check options
|
|
254
|
+
* @returns Rebuild statistics
|
|
255
|
+
*/
|
|
256
|
+
rebuild(options?: GateCheckOptions): CacheRebuildResult;
|
|
257
|
+
/**
|
|
258
|
+
* Handle a blocking dependency being added
|
|
259
|
+
*
|
|
260
|
+
* @param blockedId - Element that is waiting/blocked
|
|
261
|
+
* @param blockerId - Element doing the blocking
|
|
262
|
+
* @param type - Type of dependency
|
|
263
|
+
* @param metadata - Dependency metadata (for awaits)
|
|
264
|
+
* @param options - Gate check options
|
|
265
|
+
*/
|
|
266
|
+
onDependencyAdded(blockedId: ElementId, blockerId: ElementId, type: DependencyType, _metadata?: Record<string, unknown>, options?: GateCheckOptions): void;
|
|
267
|
+
/**
|
|
268
|
+
* Handle a blocking dependency being removed
|
|
269
|
+
*
|
|
270
|
+
* @param blockedId - Element that had a blocking dependency removed
|
|
271
|
+
* @param blockerId - Element that was doing the blocking
|
|
272
|
+
* @param type - Type of dependency that was removed
|
|
273
|
+
* @param options - Gate check options
|
|
274
|
+
*/
|
|
275
|
+
onDependencyRemoved(blockedId: ElementId, blockerId: ElementId, type: DependencyType, options?: GateCheckOptions): void;
|
|
276
|
+
/**
|
|
277
|
+
* Handle an element's status changing
|
|
278
|
+
*
|
|
279
|
+
* @param elementId - Element whose status changed
|
|
280
|
+
* @param oldStatus - Previous status
|
|
281
|
+
* @param newStatus - New status
|
|
282
|
+
* @param options - Gate check options
|
|
283
|
+
*/
|
|
284
|
+
onStatusChanged(elementId: ElementId, oldStatus: string | null, newStatus: string, options?: GateCheckOptions): void;
|
|
285
|
+
/**
|
|
286
|
+
* Handle an element being deleted
|
|
287
|
+
*
|
|
288
|
+
* @param elementId - Element that was deleted
|
|
289
|
+
* @param options - Gate check options
|
|
290
|
+
*/
|
|
291
|
+
onElementDeleted(elementId: ElementId, options?: GateCheckOptions): void;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Create a new BlockedCacheService instance
|
|
295
|
+
*/
|
|
296
|
+
export declare function createBlockedCacheService(db: StorageBackend): BlockedCacheService;
|
|
297
|
+
//# sourceMappingURL=blocked-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocked-cache.d.ts","sourceRoot":"","sources":["../../src/services/blocked-cache.ts"],"names":[],"mappings":"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"}
|