@feltdb/core 0.6.10 → 0.6.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/application-lifecycle.js +112 -0
- package/dist/cli/application.js +10 -0
- package/dist/cli/commands.js +234 -64
- package/dist/cli/development-session.js +54 -0
- package/dist/cli/index.js +1 -1
- package/dist/cli/workspace-integration.js +151 -20
- package/dist/create/cli.js +4 -2
- package/dist/create/create.js +42 -6
- package/dist/create/frameworks.js +18 -0
- package/dist/create/package-versions.js +1 -1
- package/dist/create/workspace-initialization.js +4 -5
- package/dist/db.d.ts +4 -1
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +56 -7
- package/dist/development-runtime-bridge.d.ts +60 -0
- package/dist/development-runtime-bridge.d.ts.map +1 -0
- package/dist/development-runtime-bridge.js +171 -0
- package/dist/index-core.d.ts +2 -0
- package/dist/index-core.d.ts.map +1 -1
- package/dist/index-core.js +2 -0
- package/dist/studio/app.d.ts +2 -1
- package/dist/studio/app.d.ts.map +1 -1
- package/dist/studio/components/StateExplorer.d.ts +2 -1
- package/dist/studio/components/StateExplorer.d.ts.map +1 -1
- package/dist/studio/components/index.js +1 -1
- package/dist/studio/{components-9kDSWiGL.js → components-C5p2TfIU.js} +25 -14
- package/dist/studio/index.js +234 -160
- package/dist/studio-app/assets/index-DospFFYE.js +28 -0
- package/dist/studio-app/index.html +1 -1
- package/dist/workspace/browser.d.ts +3 -3
- package/dist/workspace/browser.d.ts.map +1 -1
- package/dist/workspace/browser.js +1 -1
- package/dist/workspace/development-node.d.ts +16 -0
- package/dist/workspace/development-node.d.ts.map +1 -1
- package/dist/workspace/development-node.js +85 -1
- package/dist/workspace/index.d.ts +3 -3
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/index.js +1 -1
- package/dist/workspace/investigation-lifecycle-manager.d.ts +2 -0
- package/dist/workspace/investigation-lifecycle-manager.d.ts.map +1 -1
- package/dist/workspace/investigation-lifecycle-manager.js +33 -3
- package/dist/workspace/investigation-supervisor.d.ts.map +1 -1
- package/dist/workspace/investigation-supervisor.js +3 -1
- package/dist/workspace/runtime-investigation.d.ts +4 -0
- package/dist/workspace/runtime-investigation.d.ts.map +1 -1
- package/dist/workspace/runtime-investigation.js +4 -0
- package/dist/workspace/runtime-observation.d.ts +4 -1
- package/dist/workspace/runtime-observation.d.ts.map +1 -1
- package/dist/workspace/runtime-observation.js +20 -2
- package/dist/workspace/runtime-observer.d.ts +6 -0
- package/dist/workspace/runtime-observer.d.ts.map +1 -1
- package/dist/workspace/runtime-observer.js +4 -0
- package/dist/workspace/workspace-connection.d.ts +33 -1
- package/dist/workspace/workspace-connection.d.ts.map +1 -1
- package/dist/workspace/workspace-connection.js +117 -2
- package/dist/workspace/workspace-identity.d.ts +1 -1
- package/dist/workspace/workspace-identity.d.ts.map +1 -1
- package/dist/workspace/workspace-identity.js +4 -4
- package/dist/workspace/workspace-types.d.ts +95 -0
- package/dist/workspace/workspace-types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/studio-app/assets/index-D3rT0SJi.js +0 -28
|
@@ -12,6 +12,7 @@ import path from 'path';
|
|
|
12
12
|
import { randomBytes } from 'crypto';
|
|
13
13
|
import http from 'http';
|
|
14
14
|
import { spawnSync } from 'child_process';
|
|
15
|
+
export const DEVELOPMENT_OBSERVATION_HISTORY_LIMIT = 1000;
|
|
15
16
|
const FELTDB_IGNORE_PATTERN = /^\/?\.feltdb\/?$/;
|
|
16
17
|
/**
|
|
17
18
|
* Reserve .feltdb/ for local FeltDB runtime state before any state is written.
|
|
@@ -42,15 +43,26 @@ export function ensureWorkspaceGitIgnored(projectDir) {
|
|
|
42
43
|
}
|
|
43
44
|
return { added, tracked };
|
|
44
45
|
}
|
|
45
|
-
export function startPairingDiscoveryServer(token, port = 7799, host = '127.0.0.1') {
|
|
46
|
+
export function startPairingDiscoveryServer(token, port = 7799, host = '127.0.0.1', runtimeSession, runtimeTtlMs = 5000) {
|
|
46
47
|
const authorityEndpoint = token.authorityEndpoint || token.endpoint;
|
|
47
48
|
if (!token.workspaceId || !authorityEndpoint || !token.namespace) {
|
|
48
49
|
throw new Error('Pairing discovery requires workspaceId, endpoint, and namespace');
|
|
49
50
|
}
|
|
50
51
|
const route = `/api/v1/development/pairing/${encodeURIComponent(token.token)}`;
|
|
51
|
-
const
|
|
52
|
+
const registrations = new Map();
|
|
53
|
+
const observationHistory = new Map();
|
|
54
|
+
const droppedObservations = new Map();
|
|
55
|
+
let observationCursor = 0;
|
|
56
|
+
const activeRegistrations = () => {
|
|
57
|
+
const now = Date.now();
|
|
58
|
+
for (const [id, registration] of registrations)
|
|
59
|
+
if (registration.expiresAt <= now)
|
|
60
|
+
registrations.delete(id);
|
|
61
|
+
return [...registrations.values()];
|
|
62
|
+
};
|
|
63
|
+
const server = http.createServer(async (request, response) => {
|
|
52
64
|
response.setHeader('Access-Control-Allow-Origin', '*');
|
|
53
|
-
response.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS');
|
|
65
|
+
response.setHeader('Access-Control-Allow-Methods', 'GET, POST, DELETE, OPTIONS');
|
|
54
66
|
response.setHeader('Access-Control-Allow-Headers', 'Accept, Content-Type');
|
|
55
67
|
response.setHeader('Cache-Control', 'no-store');
|
|
56
68
|
if (request.method === 'OPTIONS') {
|
|
@@ -58,26 +70,147 @@ export function startPairingDiscoveryServer(token, port = 7799, host = '127.0.0.
|
|
|
58
70
|
response.end();
|
|
59
71
|
return;
|
|
60
72
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
73
|
+
try {
|
|
74
|
+
const pathname = new URL(request.url || '/', `http://${host}`).pathname;
|
|
75
|
+
if (runtimeSession && request.method === 'POST' && pathname === '/api/v1/development/runtime/register') {
|
|
76
|
+
const body = JSON.parse(await readRequestBody(request) || '{}');
|
|
77
|
+
if (body.sessionId !== runtimeSession.sessionId || body.workspaceId !== runtimeSession.workspaceId) {
|
|
78
|
+
runtimeJson(response, 403, { error: 'RUNTIME_SESSION_MISMATCH' });
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (body.namespace !== runtimeSession.namespace || body.runtime !== runtimeSession.runtime || body.authorityUrl !== runtimeSession.authorityUrl) {
|
|
82
|
+
runtimeJson(response, 409, { error: 'RUNTIME_IDENTITY_MISMATCH' });
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (!body.runtimeInstanceId || !body.applicationId) {
|
|
86
|
+
runtimeJson(response, 400, { error: 'RUNTIME_IDENTITY_REQUIRED' });
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const now = Date.now();
|
|
90
|
+
const previous = registrations.get(body.runtimeInstanceId);
|
|
91
|
+
const registration = {
|
|
92
|
+
runtimeInstanceId: body.runtimeInstanceId,
|
|
93
|
+
applicationId: body.applicationId,
|
|
94
|
+
workspaceId: runtimeSession.workspaceId,
|
|
95
|
+
sessionId: runtimeSession.sessionId,
|
|
96
|
+
namespace: runtimeSession.namespace,
|
|
97
|
+
runtime: runtimeSession.runtime,
|
|
98
|
+
authorityUrl: runtimeSession.authorityUrl,
|
|
99
|
+
applicationUrl: body.applicationUrl || runtimeSession.applicationUrl,
|
|
100
|
+
registeredAt: previous?.registeredAt ?? now,
|
|
101
|
+
lastSeenAt: now,
|
|
102
|
+
expiresAt: now + runtimeTtlMs,
|
|
103
|
+
};
|
|
104
|
+
for (const [id, active] of registrations) {
|
|
105
|
+
if (id !== registration.runtimeInstanceId && active.applicationId === registration.applicationId)
|
|
106
|
+
registrations.delete(id);
|
|
107
|
+
}
|
|
108
|
+
registrations.set(registration.runtimeInstanceId, registration);
|
|
109
|
+
runtimeJson(response, previous ? 200 : 201, registration);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (runtimeSession && request.method === 'GET' && pathname === '/api/v1/development/runtimes') {
|
|
113
|
+
const sessionId = new URL(request.url || '/', `http://${host}`).searchParams.get('sessionId');
|
|
114
|
+
if (sessionId !== runtimeSession.sessionId) {
|
|
115
|
+
runtimeJson(response, 403, { error: 'RUNTIME_SESSION_MISMATCH' });
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
runtimeJson(response, 200, { sessionId, workspaceId: runtimeSession.workspaceId, runtimes: activeRegistrations() });
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const observationMatch = pathname.match(/^\/api\/v1\/development\/runtime\/([^/]+)\/observations$/);
|
|
122
|
+
if (runtimeSession && observationMatch) {
|
|
123
|
+
const runtimeInstanceId = decodeURIComponent(observationMatch[1]);
|
|
124
|
+
const url = new URL(request.url || '/', `http://${host}`);
|
|
125
|
+
const sessionId = request.method === 'POST'
|
|
126
|
+
? undefined
|
|
127
|
+
: url.searchParams.get('sessionId');
|
|
128
|
+
if (request.method === 'POST') {
|
|
129
|
+
const body = JSON.parse(await readRequestBody(request) || '{}');
|
|
130
|
+
if (body.sessionId !== runtimeSession.sessionId) {
|
|
131
|
+
runtimeJson(response, 403, { error: 'RUNTIME_SESSION_MISMATCH' });
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (!registrations.has(runtimeInstanceId)) {
|
|
135
|
+
runtimeJson(response, 404, { error: 'RUNTIME_NOT_REGISTERED' });
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const valid = (body.observations || []).slice(0, 64).filter((event) => event && event.runtimeInstanceId === runtimeInstanceId && typeof event.eventId === 'string'
|
|
139
|
+
&& typeof event.correlationId === 'string' && ['started', 'completed', 'failed'].includes(event.status));
|
|
140
|
+
const history = observationHistory.get(runtimeInstanceId) || [];
|
|
141
|
+
history.push(...valid.map(event => ({ ...event, cursor: ++observationCursor })));
|
|
142
|
+
if (history.length > DEVELOPMENT_OBSERVATION_HISTORY_LIMIT)
|
|
143
|
+
history.splice(0, history.length - DEVELOPMENT_OBSERVATION_HISTORY_LIMIT);
|
|
144
|
+
observationHistory.set(runtimeInstanceId, history);
|
|
145
|
+
droppedObservations.set(runtimeInstanceId, (droppedObservations.get(runtimeInstanceId) || 0) + Math.max(0, Number(body.dropped) || 0));
|
|
146
|
+
runtimeJson(response, 202, { accepted: valid.length });
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (request.method === 'GET') {
|
|
150
|
+
if (sessionId !== runtimeSession.sessionId) {
|
|
151
|
+
runtimeJson(response, 403, { error: 'RUNTIME_SESSION_MISMATCH' });
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const cursor = Math.max(0, Number(url.searchParams.get('cursor')) || 0);
|
|
155
|
+
const limit = Math.min(200, Math.max(1, Number(url.searchParams.get('limit')) || 100));
|
|
156
|
+
const observations = (observationHistory.get(runtimeInstanceId) || []).filter(event => event.cursor > cursor).slice(0, limit);
|
|
157
|
+
runtimeJson(response, 200, { runtimeInstanceId, observations, nextCursor: observations[observations.length - 1]?.cursor ?? cursor, dropped: droppedObservations.get(runtimeInstanceId) || 0 });
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (runtimeSession && request.method === 'DELETE' && pathname.startsWith('/api/v1/development/runtime/')) {
|
|
162
|
+
const sessionId = new URL(request.url || '/', `http://${host}`).searchParams.get('sessionId');
|
|
163
|
+
if (sessionId !== runtimeSession.sessionId) {
|
|
164
|
+
runtimeJson(response, 403, { error: 'RUNTIME_SESSION_MISMATCH' });
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
registrations.delete(decodeURIComponent(pathname.slice('/api/v1/development/runtime/'.length)));
|
|
168
|
+
response.statusCode = 204;
|
|
169
|
+
response.end();
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
if (request.method !== 'GET' || pathname !== route || Date.now() >= token.expiresAt) {
|
|
173
|
+
response.statusCode = 404;
|
|
174
|
+
response.setHeader('Content-Type', 'application/json; charset=utf-8');
|
|
175
|
+
response.end(JSON.stringify({ error: 'PAIRING_CODE_NOT_FOUND' }));
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
64
178
|
response.setHeader('Content-Type', 'application/json; charset=utf-8');
|
|
65
|
-
|
|
66
|
-
|
|
179
|
+
const activeRuntime = runtimeSession
|
|
180
|
+
? activeRegistrations().sort((left, right) => right.lastSeenAt - left.lastSeenAt)[0]
|
|
181
|
+
: undefined;
|
|
182
|
+
response.end(JSON.stringify({
|
|
183
|
+
workspaceId: token.workspaceId,
|
|
184
|
+
endpoint: authorityEndpoint,
|
|
185
|
+
expiresAt: token.expiresAt,
|
|
186
|
+
namespace: token.namespace,
|
|
187
|
+
sessionId: runtimeSession?.sessionId,
|
|
188
|
+
runtimeInstanceId: activeRuntime?.runtimeInstanceId,
|
|
189
|
+
}));
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
runtimeJson(response, 400, { error: error instanceof Error ? error.message : String(error) });
|
|
67
193
|
}
|
|
68
|
-
response.setHeader('Content-Type', 'application/json; charset=utf-8');
|
|
69
|
-
response.end(JSON.stringify({
|
|
70
|
-
workspaceId: token.workspaceId,
|
|
71
|
-
endpoint: authorityEndpoint,
|
|
72
|
-
expiresAt: token.expiresAt,
|
|
73
|
-
namespace: token.namespace,
|
|
74
|
-
}));
|
|
75
194
|
});
|
|
76
195
|
return new Promise((resolve, reject) => {
|
|
77
196
|
server.once('error', reject);
|
|
78
197
|
server.listen(port, host, () => resolve(server));
|
|
79
198
|
});
|
|
80
199
|
}
|
|
200
|
+
function readRequestBody(request) {
|
|
201
|
+
return new Promise((resolve, reject) => {
|
|
202
|
+
let body = '';
|
|
203
|
+
request.setEncoding('utf8');
|
|
204
|
+
request.on('data', chunk => { body += chunk; });
|
|
205
|
+
request.once('end', () => resolve(body));
|
|
206
|
+
request.once('error', reject);
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
function runtimeJson(response, status, value) {
|
|
210
|
+
response.statusCode = status;
|
|
211
|
+
response.setHeader('Content-Type', 'application/json; charset=utf-8');
|
|
212
|
+
response.end(JSON.stringify(value));
|
|
213
|
+
}
|
|
81
214
|
/**
|
|
82
215
|
* Discover workspace identity from .feltdb/workspace.json
|
|
83
216
|
* Returns null if workspace is not initialized
|
|
@@ -143,12 +276,10 @@ export function readPairingToken(projectDir) {
|
|
|
143
276
|
}
|
|
144
277
|
/**
|
|
145
278
|
* Generate a unique workspace ID
|
|
146
|
-
*
|
|
279
|
+
* Opaque format: ws_<random>. Project identity is stored separately.
|
|
147
280
|
*/
|
|
148
|
-
export function generateWorkspaceId(
|
|
149
|
-
|
|
150
|
-
const random = Math.random().toString(36).substring(2, 9);
|
|
151
|
-
return `ws_${projectId}_${timestamp}_${random}`;
|
|
281
|
+
export function generateWorkspaceId(_projectId) {
|
|
282
|
+
return `ws_${randomBytes(16).toString('hex')}`;
|
|
152
283
|
}
|
|
153
284
|
/**
|
|
154
285
|
* Initialize development workspace for a project
|
package/dist/create/cli.js
CHANGED
|
@@ -345,17 +345,19 @@ Learn more: https://github.com/rkendel1/feltdb`);
|
|
|
345
345
|
console.log('Build the production application image with: docker compose build app');
|
|
346
346
|
}
|
|
347
347
|
else {
|
|
348
|
-
console.log('\n🚀 Starting the application
|
|
348
|
+
console.log('\n🚀 Starting the application...\n');
|
|
349
349
|
await run(npm, ['run', 'dev'], projectDir);
|
|
350
350
|
}
|
|
351
351
|
}
|
|
352
352
|
}
|
|
353
353
|
else {
|
|
354
|
-
console.log('Project is ready. Start
|
|
354
|
+
console.log('Project is ready. Start the application with:');
|
|
355
355
|
console.log(` cd ${projectName}`);
|
|
356
356
|
if (!shouldInstall)
|
|
357
357
|
console.log(' npm install');
|
|
358
358
|
console.log(' npm run dev');
|
|
359
|
+
console.log('Start FeltDB development tooling separately with:');
|
|
360
|
+
console.log(' npm run feltdb:dev');
|
|
359
361
|
}
|
|
360
362
|
}
|
|
361
363
|
catch (error) {
|
package/dist/create/create.js
CHANGED
|
@@ -7,6 +7,7 @@ import { randomBytes } from 'crypto';
|
|
|
7
7
|
import { feltdbPackageRange } from './package-versions.js';
|
|
8
8
|
import { generateDockerCompose, generateDockerfile, generateDockerIgnore, generateDotEnvLocal, generateFeltDBDockerfile, generateStudioDockerfile, } from './docker-compose-generator.js';
|
|
9
9
|
import { initializeWorkspace, appendWorkspaceGitignore, } from './workspace-initialization.js';
|
|
10
|
+
import { frameworkScaffold } from './frameworks.js';
|
|
10
11
|
export async function createProject(options) {
|
|
11
12
|
const { projectName, templatesDir } = options;
|
|
12
13
|
const projectDir = path.resolve(process.cwd(), projectName);
|
|
@@ -29,6 +30,7 @@ export async function createProject(options) {
|
|
|
29
30
|
fs.mkdirSync(feltdbConfigDir, { recursive: true });
|
|
30
31
|
const runtime = options.runtime || 'browser';
|
|
31
32
|
const framework = options.framework || 'react';
|
|
33
|
+
const applicationFramework = frameworkScaffold(framework);
|
|
32
34
|
const distributed = options.distributed !== false;
|
|
33
35
|
const hasAgents = options.agents !== false;
|
|
34
36
|
const hasWebLLM = options.webllm !== false;
|
|
@@ -41,7 +43,8 @@ export async function createProject(options) {
|
|
|
41
43
|
main: 'src/index.ts',
|
|
42
44
|
type: 'module',
|
|
43
45
|
scripts: {
|
|
44
|
-
dev:
|
|
46
|
+
dev: applicationFramework.applicationDevCommand,
|
|
47
|
+
'feltdb:dev': 'feltdb dev',
|
|
45
48
|
build: 'feltdb build',
|
|
46
49
|
test: 'node --test',
|
|
47
50
|
feltdb: 'feltdb',
|
|
@@ -81,6 +84,10 @@ export async function createProject(options) {
|
|
|
81
84
|
agents: {
|
|
82
85
|
enabled: hasAgents,
|
|
83
86
|
},
|
|
87
|
+
application: {
|
|
88
|
+
lifecycle: 'managed',
|
|
89
|
+
},
|
|
90
|
+
applicationUrl: 'http://127.0.0.1:5173',
|
|
84
91
|
capabilities: {},
|
|
85
92
|
};
|
|
86
93
|
if (capabilities.includes('search')) {
|
|
@@ -185,13 +192,23 @@ ${hasAgents ? ` agent WorkspaceAssistant {
|
|
|
185
192
|
fs.writeFileSync(path.join(projectDir, 'tsconfig.json'), JSON.stringify(tsconfig, null, 2));
|
|
186
193
|
// Create main application files
|
|
187
194
|
const runtimeOptions = runtime === 'browser'
|
|
188
|
-
? "{ namespace: '" + applicationName + "', browser: true }"
|
|
195
|
+
? "{ namespace: import.meta.env.VITE_FELTDB_NAMESPACE || '" + applicationName + "', browser: true }"
|
|
189
196
|
: runtime === 'managed'
|
|
190
|
-
? "{ namespace: import.meta.env.VITE_FELTDB_MANAGED_NAMESPACE || '" + applicationName + "', server: { url: import.meta.env.VITE_FELTDB_MANAGED_URL || import.meta.env.VITE_FELTDB_URL || '', token: import.meta.env.VITE_FELTDB_MANAGED_API_KEY || import.meta.env.VITE_FELTDB_API_KEY || '' } }"
|
|
197
|
+
? "{ namespace: import.meta.env.VITE_FELTDB_MANAGED_NAMESPACE || import.meta.env.VITE_FELTDB_NAMESPACE || '" + applicationName + "', server: { url: import.meta.env.VITE_FELTDB_MANAGED_URL || import.meta.env.VITE_FELTDB_URL || '', token: import.meta.env.VITE_FELTDB_MANAGED_API_KEY || import.meta.env.VITE_FELTDB_API_KEY || '' } }"
|
|
191
198
|
: runtime === 'self-hosted'
|
|
192
|
-
? "{ namespace: '" + applicationName + "', server: { url: import.meta.env.VITE_FELTDB_URL || 'http://localhost:7700', token: import.meta.env.VITE_FELTDB_API_KEY || '' } }"
|
|
193
|
-
: "{ namespace: '" + applicationName + "', memory: true }";
|
|
194
|
-
const feltdbTs = `import { createFeltDB } from '@feltdb/core';
|
|
199
|
+
? "{ namespace: import.meta.env.VITE_FELTDB_NAMESPACE || '" + applicationName + "', server: { url: import.meta.env.VITE_FELTDB_URL || 'http://localhost:7700', token: import.meta.env.VITE_FELTDB_API_KEY || '' } }"
|
|
200
|
+
: "{ namespace: import.meta.env.VITE_FELTDB_NAMESPACE || '" + applicationName + "', memory: true }";
|
|
201
|
+
const feltdbTs = `import { configureDevelopmentRuntimeBridge, createFeltDB } from '@feltdb/core';
|
|
202
|
+
|
|
203
|
+
configureDevelopmentRuntimeBridge({
|
|
204
|
+
sessionId: import.meta.env.VITE_FELTDB_DEV_SESSION_ID,
|
|
205
|
+
workspaceId: import.meta.env.VITE_FELTDB_WORKSPACE_ID,
|
|
206
|
+
namespace: import.meta.env.VITE_FELTDB_NAMESPACE,
|
|
207
|
+
runtime: import.meta.env.VITE_FELTDB_RUNTIME,
|
|
208
|
+
authorityUrl: import.meta.env.VITE_FELTDB_AUTHORITY_URL,
|
|
209
|
+
bridgeUrl: import.meta.env.VITE_FELTDB_DEV_BRIDGE_URL,
|
|
210
|
+
applicationUrl: import.meta.env.VITE_FELTDB_APPLICATION_URL,
|
|
211
|
+
});
|
|
195
212
|
|
|
196
213
|
export const db = createFeltDB(${runtimeOptions});
|
|
197
214
|
|
|
@@ -1523,6 +1540,8 @@ A FeltDB Workspace application demonstrating local-first database capabilities.
|
|
|
1523
1540
|
|
|
1524
1541
|
## Quick Start
|
|
1525
1542
|
|
|
1543
|
+
Start the application:
|
|
1544
|
+
|
|
1526
1545
|
\`\`\`bash
|
|
1527
1546
|
npm install
|
|
1528
1547
|
npm run dev
|
|
@@ -1530,6 +1549,13 @@ npm run dev
|
|
|
1530
1549
|
|
|
1531
1550
|
The application will be available at http://localhost:5173 (or your configured port).
|
|
1532
1551
|
|
|
1552
|
+
In a second terminal, start FeltDB authority, pairing, and Studio and attach it
|
|
1553
|
+
to the application explicitly:
|
|
1554
|
+
|
|
1555
|
+
\`\`\`bash
|
|
1556
|
+
npm run feltdb:dev
|
|
1557
|
+
\`\`\`
|
|
1558
|
+
|
|
1533
1559
|
## FeltDB Workspace Showcase
|
|
1534
1560
|
|
|
1535
1561
|
This application demonstrates core FeltDB capabilities:
|
|
@@ -1628,6 +1654,10 @@ Configuration is in \`feltdb.config.json\`:
|
|
|
1628
1654
|
"agents": {
|
|
1629
1655
|
"enabled": ${hasAgents}
|
|
1630
1656
|
},
|
|
1657
|
+
"application": {
|
|
1658
|
+
"lifecycle": "managed"
|
|
1659
|
+
},
|
|
1660
|
+
"applicationUrl": "http://127.0.0.1:5173",
|
|
1631
1661
|
"capabilities": ["${capabilities}"]
|
|
1632
1662
|
}
|
|
1633
1663
|
\`\`\`
|
|
@@ -1653,6 +1683,12 @@ These are required when connecting to an authenticated self-hosted or managed Fe
|
|
|
1653
1683
|
npm run dev
|
|
1654
1684
|
\`\`\`
|
|
1655
1685
|
|
|
1686
|
+
### Start FeltDB Development Tooling
|
|
1687
|
+
|
|
1688
|
+
\`\`\`bash
|
|
1689
|
+
npm run feltdb:dev
|
|
1690
|
+
\`\`\`
|
|
1691
|
+
|
|
1656
1692
|
### Build for Production
|
|
1657
1693
|
\`\`\`bash
|
|
1658
1694
|
npm run build
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const FRAMEWORK_SCAFFOLDS = {
|
|
2
|
+
react: {
|
|
3
|
+
name: 'react',
|
|
4
|
+
applicationDevCommand: 'vite',
|
|
5
|
+
},
|
|
6
|
+
vanilla: {
|
|
7
|
+
name: 'vanilla',
|
|
8
|
+
applicationDevCommand: 'vite',
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
/** Resolve framework-owned application lifecycle metadata. */
|
|
12
|
+
export function frameworkScaffold(framework) {
|
|
13
|
+
const scaffold = FRAMEWORK_SCAFFOLDS[framework];
|
|
14
|
+
if (!scaffold) {
|
|
15
|
+
throw new Error(`Unsupported framework "${framework}". Choose react or vanilla.`);
|
|
16
|
+
}
|
|
17
|
+
return scaffold;
|
|
18
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// One release train keeps generated applications installable. The repository
|
|
2
2
|
// validation script checks these values against every workspace manifest.
|
|
3
|
-
export const FELTDB_PACKAGE_VERSION = '0.6.
|
|
3
|
+
export const FELTDB_PACKAGE_VERSION = '0.6.12';
|
|
4
4
|
export const feltdbPackageRange = `^${FELTDB_PACKAGE_VERSION}`;
|
|
@@ -7,14 +7,13 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import fs from 'fs';
|
|
9
9
|
import path from 'path';
|
|
10
|
+
import { randomBytes } from 'crypto';
|
|
10
11
|
/**
|
|
11
12
|
* Generate a unique workspace ID
|
|
12
|
-
*
|
|
13
|
+
* Opaque format: ws_<random>. Project identity is stored separately.
|
|
13
14
|
*/
|
|
14
|
-
export function generateWorkspaceId(
|
|
15
|
-
|
|
16
|
-
const random = Math.random().toString(36).substring(2, 9);
|
|
17
|
-
return `ws_${projectId}_${timestamp}_${random}`;
|
|
15
|
+
export function generateWorkspaceId(_projectId) {
|
|
16
|
+
return `ws_${randomBytes(16).toString('hex')}`;
|
|
18
17
|
}
|
|
19
18
|
/**
|
|
20
19
|
* Initialize development workspace for a new project
|
package/dist/db.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ import { BundleClient } from './bundle.js';
|
|
|
21
21
|
import { ReleaseClient } from './release.js';
|
|
22
22
|
import { ObserveClient } from './observe.js';
|
|
23
23
|
import { ProviderClient } from './provider.js';
|
|
24
|
+
import { type DevelopmentObservationSink } from './development-runtime-bridge.js';
|
|
24
25
|
interface FeltDBBaseOptions {
|
|
25
26
|
namespace: string;
|
|
26
27
|
}
|
|
@@ -246,6 +247,8 @@ export declare class StateFirstDB {
|
|
|
246
247
|
private agentRegistry;
|
|
247
248
|
private agentRuntime;
|
|
248
249
|
private capabilityWorkers;
|
|
250
|
+
private observation?;
|
|
251
|
+
private closeDevelopmentBridge?;
|
|
249
252
|
readonly workloads: WorkloadClient;
|
|
250
253
|
readonly artifacts: ArtifactClient;
|
|
251
254
|
readonly bundle: BundleClient;
|
|
@@ -255,7 +258,7 @@ export declare class StateFirstDB {
|
|
|
255
258
|
readonly workers: WorkerClient;
|
|
256
259
|
readonly workerPools: WorkerPoolClient;
|
|
257
260
|
readonly mesh: MeshClient;
|
|
258
|
-
constructor(jsDb: JsDb);
|
|
261
|
+
constructor(jsDb: JsDb, observation?: DevelopmentObservationSink, closeDevelopmentBridge?: () => Promise<void>);
|
|
259
262
|
/**
|
|
260
263
|
* Detect runtime environment and storage characteristics
|
|
261
264
|
*/
|
package/dist/db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
|
package/dist/db.js
CHANGED
|
@@ -25,6 +25,7 @@ import { ReleaseClient } from './release.js';
|
|
|
25
25
|
import { ObserveClient } from './observe.js';
|
|
26
26
|
import { ProviderClient } from './provider.js';
|
|
27
27
|
import { emitTelemetry } from './telemetry.js';
|
|
28
|
+
import { attachDevelopmentRuntimeBridge } from './development-runtime-bridge.js';
|
|
28
29
|
export function createFeltDB(options) {
|
|
29
30
|
if (!options?.namespace?.trim()) {
|
|
30
31
|
throw new Error('createFeltDB requires a non-empty namespace');
|
|
@@ -35,14 +36,44 @@ export function createFeltDB(options) {
|
|
|
35
36
|
+ 'In a browser use createFeltDB({ browser: true }); in Node import "@feltdb/core" '
|
|
36
37
|
+ 'rather than a browser-conditioned build.')
|
|
37
38
|
: new MemoryJsDb(options.namespace);
|
|
38
|
-
|
|
39
|
+
const runtimeName = options.server ? 'remote' : 'browser' in options && options.browser ? 'browser' : 'path' in options ? 'node' : 'memory';
|
|
40
|
+
const bridge = attachDevelopmentRuntimeBridge({ namespace: options.namespace, runtime: runtimeName });
|
|
41
|
+
return new StateFirstDB(observeRuntime(runtime, bridge.observation), bridge.observation, bridge.close);
|
|
42
|
+
}
|
|
43
|
+
const OBSERVED_BACKEND_OPERATIONS = new Set([
|
|
44
|
+
'get', 'query', 'insert', 'update', 'delete', 'cas', 'putIfAbsent',
|
|
45
|
+
'export_operations', 'apply_operations', 'sync',
|
|
46
|
+
]);
|
|
47
|
+
function observeRuntime(runtime, observation) {
|
|
48
|
+
return new Proxy(runtime, {
|
|
49
|
+
get(target, property, receiver) {
|
|
50
|
+
const value = Reflect.get(target, property, receiver);
|
|
51
|
+
if (typeof property !== 'string' || typeof value !== 'function')
|
|
52
|
+
return value;
|
|
53
|
+
const bound = value.bind(target);
|
|
54
|
+
if (!OBSERVED_BACKEND_OPERATIONS.has(property))
|
|
55
|
+
return bound;
|
|
56
|
+
return (...args) => {
|
|
57
|
+
const key = typeof args[0] === 'string' ? args[0] : undefined;
|
|
58
|
+
const operation = observation.start(property, { collection: key?.includes(':') ? key.split(':', 1)[0] : undefined });
|
|
59
|
+
try {
|
|
60
|
+
const result = bound(...args);
|
|
61
|
+
return Promise.resolve(result).then((resolved) => { operation.complete(); return resolved; }, (error) => { operation.fail(error); throw error; });
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
operation.fail(error);
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
},
|
|
69
|
+
});
|
|
39
70
|
}
|
|
40
71
|
/**
|
|
41
72
|
* State-first database interface.
|
|
42
73
|
* Applications use this to treat FeltDB collections as live application state.
|
|
43
74
|
*/
|
|
44
75
|
export class StateFirstDB {
|
|
45
|
-
constructor(jsDb) {
|
|
76
|
+
constructor(jsDb, observation, closeDevelopmentBridge) {
|
|
46
77
|
this.collections = new Map();
|
|
47
78
|
this.cells = new Map();
|
|
48
79
|
this.capabilityWorkers = new Map();
|
|
@@ -56,6 +87,8 @@ export class StateFirstDB {
|
|
|
56
87
|
this.workerPools = new WorkerPoolClient();
|
|
57
88
|
this.mesh = new MeshClient();
|
|
58
89
|
this.jsDb = jsDb;
|
|
90
|
+
this.observation = observation;
|
|
91
|
+
this.closeDevelopmentBridge = closeDevelopmentBridge;
|
|
59
92
|
this.runtimeInfo = this.detectRuntime();
|
|
60
93
|
this.agentRegistry = new AgentRegistry();
|
|
61
94
|
const agentConfig = {
|
|
@@ -165,30 +198,45 @@ export class StateFirstDB {
|
|
|
165
198
|
*/
|
|
166
199
|
async transaction(build, options = {}) {
|
|
167
200
|
const builder = new AtomicTransactionBuilder(options.transactionId);
|
|
201
|
+
const observed = this.observation?.start('transaction', { transactionId: builder.transactionId });
|
|
168
202
|
if (!this.jsDb.commit_transaction) {
|
|
169
|
-
|
|
203
|
+
const error = new AtomicTransactionError('This FeltDB runtime does not provide atomic transactions. '
|
|
170
204
|
+ 'Connect to a FeltDB authority (createFeltDB({ server: ... })) to use db.transaction(). '
|
|
171
205
|
+ 'FeltDB will not emulate a transaction with separate writes, because that would not be atomic.', builder.transactionId);
|
|
206
|
+
observed?.fail(error);
|
|
207
|
+
throw error;
|
|
208
|
+
}
|
|
209
|
+
try {
|
|
210
|
+
await build(builder);
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
observed?.fail(error);
|
|
214
|
+
throw error;
|
|
172
215
|
}
|
|
173
|
-
await build(builder);
|
|
174
216
|
const request = builder.seal();
|
|
175
217
|
if (request.operations.length === 0) {
|
|
176
|
-
|
|
218
|
+
const error = new AtomicTransactionError('a transaction requires at least one operation', request.transactionId);
|
|
219
|
+
observed?.fail(error);
|
|
220
|
+
throw error;
|
|
177
221
|
}
|
|
178
222
|
try {
|
|
179
223
|
const result = await this.jsDb.commit_transaction(request);
|
|
180
|
-
|
|
224
|
+
const completed = {
|
|
181
225
|
transactionId: result.transactionId ?? request.transactionId,
|
|
182
226
|
duplicate: Boolean(result.duplicate),
|
|
183
227
|
operations: result.operations ?? request.operations.length,
|
|
184
228
|
stateBefore: result.stateBefore ?? 0,
|
|
185
229
|
stateAfter: result.stateAfter ?? 0,
|
|
186
230
|
};
|
|
231
|
+
observed?.complete({ operations: completed.operations, duplicate: completed.duplicate });
|
|
232
|
+
return completed;
|
|
187
233
|
}
|
|
188
234
|
catch (error) {
|
|
189
235
|
// A refused transaction applied nothing. Surfacing that plainly matters:
|
|
190
236
|
// a caller must never be left wondering whether a prefix landed.
|
|
191
|
-
|
|
237
|
+
const transactionError = new AtomicTransactionError(error instanceof Error ? error.message : String(error), request.transactionId);
|
|
238
|
+
observed?.fail(transactionError);
|
|
239
|
+
throw transactionError;
|
|
192
240
|
}
|
|
193
241
|
}
|
|
194
242
|
/**
|
|
@@ -510,6 +558,7 @@ export class StateFirstDB {
|
|
|
510
558
|
}
|
|
511
559
|
this.collections.clear();
|
|
512
560
|
await this.jsDb.close?.();
|
|
561
|
+
await this.closeDevelopmentBridge?.();
|
|
513
562
|
}
|
|
514
563
|
sync(config) {
|
|
515
564
|
if (config)
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export interface DevelopmentRuntimeSessionIdentity {
|
|
2
|
+
sessionId: string;
|
|
3
|
+
workspaceId: string;
|
|
4
|
+
namespace: string;
|
|
5
|
+
runtime: string;
|
|
6
|
+
authorityUrl: string;
|
|
7
|
+
bridgeUrl: string;
|
|
8
|
+
applicationUrl?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface DevelopmentRuntimeRegistration extends DevelopmentRuntimeSessionIdentity {
|
|
11
|
+
runtimeInstanceId: string;
|
|
12
|
+
applicationId: string;
|
|
13
|
+
}
|
|
14
|
+
export type FeltDBObservationStatus = 'started' | 'completed' | 'failed';
|
|
15
|
+
export interface FeltDBObservation {
|
|
16
|
+
eventId: string;
|
|
17
|
+
correlationId: string;
|
|
18
|
+
timestamp: number;
|
|
19
|
+
workspaceId?: string;
|
|
20
|
+
sessionId?: string;
|
|
21
|
+
runtimeInstanceId: string;
|
|
22
|
+
operation: {
|
|
23
|
+
type: string;
|
|
24
|
+
collection?: string;
|
|
25
|
+
transactionId?: string;
|
|
26
|
+
};
|
|
27
|
+
status: FeltDBObservationStatus;
|
|
28
|
+
durationMs?: number;
|
|
29
|
+
error?: {
|
|
30
|
+
code?: string;
|
|
31
|
+
message: string;
|
|
32
|
+
};
|
|
33
|
+
metadata?: Record<string, unknown>;
|
|
34
|
+
}
|
|
35
|
+
export interface DevelopmentObservationOperation {
|
|
36
|
+
complete(metadata?: Record<string, unknown>): void;
|
|
37
|
+
fail(error: unknown): void;
|
|
38
|
+
}
|
|
39
|
+
export interface DevelopmentObservationSink {
|
|
40
|
+
start(type: string, details?: {
|
|
41
|
+
collection?: string;
|
|
42
|
+
transactionId?: string;
|
|
43
|
+
metadata?: Record<string, unknown>;
|
|
44
|
+
}): DevelopmentObservationOperation;
|
|
45
|
+
}
|
|
46
|
+
/** Maximum unsent events retained by a runtime. New events are dropped beyond this bound. */
|
|
47
|
+
export declare const DEVELOPMENT_OBSERVATION_BUFFER_LIMIT = 256;
|
|
48
|
+
/** Supply ephemeral `feltdb dev` identity. This is a no-op when values are absent. */
|
|
49
|
+
export declare function configureDevelopmentRuntimeBridge(session?: Partial<DevelopmentRuntimeSessionIdentity>): void;
|
|
50
|
+
/** Internal, optional registration hook called by Core runtime construction. */
|
|
51
|
+
export declare function attachDevelopmentRuntimeBridge(input: {
|
|
52
|
+
namespace: string;
|
|
53
|
+
runtime: string;
|
|
54
|
+
applicationId?: string;
|
|
55
|
+
}): {
|
|
56
|
+
runtimeInstanceId: string;
|
|
57
|
+
observation: DevelopmentObservationSink;
|
|
58
|
+
close(): Promise<void>;
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=development-runtime-bridge.d.ts.map
|