create-feltdb 0.6.10 → 0.6.11

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.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 and FeltDB Studio...\n');
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 everything with:');
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.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: 'feltdb 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.10';
3
+ export const FELTDB_PACKAGE_VERSION = '0.6.11';
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
- * Format: ws_<projectId>_<timestamp>_<random>
13
+ * Opaque format: ws_<random>. Project identity is stored separately.
13
14
  */
14
- export function generateWorkspaceId(projectId) {
15
- const timestamp = Date.now();
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/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "create-feltdb",
3
3
  "private": false,
4
4
  "description": "Create a new FeltDB application with one command",
5
- "version": "0.6.10",
5
+ "version": "0.6.11",
6
6
  "license": "MIT",
7
7
  "bin": {
8
8
  "create-feltdb": "bin/create-feltdb.js"