@feltdb/core 0.7.3 → 0.7.4

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 (95) hide show
  1. package/dist/application-development.d.ts +76 -0
  2. package/dist/application-development.d.ts.map +1 -0
  3. package/dist/application-development.js +137 -0
  4. package/dist/application-manifest.d.ts +5 -1
  5. package/dist/application-manifest.d.ts.map +1 -1
  6. package/dist/application-manifest.js +10 -3
  7. package/dist/canonical-application.d.ts +26 -0
  8. package/dist/canonical-application.d.ts.map +1 -0
  9. package/dist/canonical-application.js +45 -0
  10. package/dist/cli/ai-model-config.js +97 -0
  11. package/dist/cli/commands.js +466 -105
  12. package/dist/cli/index.js +1 -1
  13. package/dist/cli/proposal-client.js +54 -0
  14. package/dist/cli/publish-engine.js +162 -0
  15. package/dist/cli/source-sync.js +139 -0
  16. package/dist/create/cli.js +1 -1
  17. package/dist/create/create.js +30 -6
  18. package/dist/create/managed-account.js +14 -7
  19. package/dist/create/package-versions.js +1 -1
  20. package/dist/create/server-source/crates/feltdb/src/application.rs +31 -1
  21. package/dist/create/server-source/crates/feltdb/src/authority_failover.rs +84 -6
  22. package/dist/create/server-source/crates/feltdb/src/bin/feltdb_node.rs +126 -38
  23. package/dist/create/server-source/crates/feltdb/src/distributed_transactions.rs +72 -34
  24. package/dist/create/server-source/crates/feltdb-server/src/identity.rs +46 -3
  25. package/dist/create/server-source/crates/feltdb-server/src/main.rs +315 -16
  26. package/dist/create/server-source/crates/feltdb-server/src/tenancy.rs +20 -0
  27. package/dist/create/template/default-project/README.md +57 -0
  28. package/dist/create/template/default-project/agents/activity-assistant.ts +18 -0
  29. package/dist/create/template/default-project/agents/project-assistant.ts +19 -0
  30. package/dist/create/template/default-project/capabilities/activity-summary.ts +14 -0
  31. package/dist/create/template/default-project/capabilities/project-search.ts +16 -0
  32. package/dist/create/template/default-project/capabilities/project-summary.ts +15 -0
  33. package/dist/create/template/default-project/feltdb.flow +169 -0
  34. package/dist/create/template/default-project/src/App.tsx +20 -0
  35. package/dist/create/template/default-project/src/context/AuthContext.tsx +27 -0
  36. package/dist/create/template/default-project/src/feltdb.ts +87 -0
  37. package/dist/create/template/default-project/src/index.tsx +14 -0
  38. package/dist/create/template/default-project/src/pages/Activity.tsx +7 -0
  39. package/dist/create/template/default-project/src/pages/Agents.tsx +15 -0
  40. package/dist/create/template/default-project/src/pages/Dashboard.tsx +17 -0
  41. package/dist/create/template/default-project/src/pages/Invitations.tsx +11 -0
  42. package/dist/create/template/default-project/src/pages/Projects.tsx +11 -0
  43. package/dist/create/template/default-project/src/pages/SignIn.tsx +8 -0
  44. package/dist/create/template/default-project/src/pages/SignUp.tsx +8 -0
  45. package/dist/create/template/default-project/src/styles-application.css +21 -0
  46. package/dist/create/template/default-project/src/styles.css +1 -0
  47. package/dist/create/template/default-project/workflows/agent-assisted-summary.ts +1 -0
  48. package/dist/create/template/default-project/workflows/invitation.ts +30 -0
  49. package/dist/create/template/default-project/workflows/project-created.ts +2 -0
  50. package/dist/db.d.ts +49 -1
  51. package/dist/db.d.ts.map +1 -1
  52. package/dist/db.js +77 -0
  53. package/dist/error-codes.d.ts +20 -1
  54. package/dist/error-codes.d.ts.map +1 -1
  55. package/dist/error-codes.js +25 -0
  56. package/dist/flowspec.d.ts.map +1 -1
  57. package/dist/flowspec.js +27 -6
  58. package/dist/http-db.d.ts +15 -2
  59. package/dist/http-db.d.ts.map +1 -1
  60. package/dist/http-db.js +113 -5
  61. package/dist/index-core.d.ts +3 -0
  62. package/dist/index-core.d.ts.map +1 -1
  63. package/dist/index-core.js +3 -0
  64. package/dist/proposal.d.ts +85 -0
  65. package/dist/proposal.d.ts.map +1 -0
  66. package/dist/proposal.js +105 -0
  67. package/dist/studio/app.d.ts +3 -1
  68. package/dist/studio/app.d.ts.map +1 -1
  69. package/dist/studio/components/ApplicationDesigner.d.ts +2 -1
  70. package/dist/studio/components/ApplicationDesigner.d.ts.map +1 -1
  71. package/dist/studio/components/AskFeltDB.d.ts +20 -0
  72. package/dist/studio/components/AskFeltDB.d.ts.map +1 -0
  73. package/dist/studio/components/ProposalBrowser.d.ts +3 -0
  74. package/dist/studio/components/ProposalBrowser.d.ts.map +1 -0
  75. package/dist/studio/components/index.d.ts +2 -0
  76. package/dist/studio/components/index.d.ts.map +1 -1
  77. package/dist/studio/components/index.js +4 -4
  78. package/dist/studio/{components-Dxuhrv8_.js → components-Bm4sjhcX.js} +335 -5
  79. package/dist/studio/index.js +168 -157
  80. package/dist/studio/studio.css +1 -1
  81. package/dist/studio-app/assets/dist-DA1MYSzp.js +1 -0
  82. package/dist/studio-app/assets/{feltdb_wasm-DVKsw75S.js → feltdb_wasm-B-Ccgccb.js} +1 -1
  83. package/dist/studio-app/assets/feltdb_wasm_bg-wH3enJIA.wasm +0 -0
  84. package/dist/studio-app/assets/{index-C1GWyazR.css → index-BRrmvaKw.css} +1 -1
  85. package/dist/studio-app/assets/index-CEIqowCh.js +42 -0
  86. package/dist/studio-app/assets/lib-B2_7fcn7.js +69 -0
  87. package/dist/studio-app/assets/worker-CARZ5g7K.js +69 -0
  88. package/dist/studio-app/index.html +2 -2
  89. package/dist/wasm/feltdb_wasm_bg.wasm +0 -0
  90. package/dist/workspace/local-development-authority.d.ts +3 -0
  91. package/dist/workspace/local-development-authority.d.ts.map +1 -1
  92. package/dist/workspace/local-development-authority.js +62 -1
  93. package/package.json +1 -1
  94. package/dist/studio-app/assets/feltdb_wasm_bg-DNyNf0yy.wasm +0 -0
  95. package/dist/studio-app/assets/index-B5tnmvSD.js +0 -28
@@ -1,3 +1,3 @@
1
- <!doctype html><html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#17211b"/><title>FeltDB Studio</title> <script type="module" crossorigin src="/assets/index-B5tnmvSD.js"></script>
2
- <link rel="stylesheet" crossorigin href="/assets/index-C1GWyazR.css">
1
+ <!doctype html><html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#17211b"/><title>FeltDB Studio</title> <script type="module" crossorigin src="/assets/index-CEIqowCh.js"></script>
2
+ <link rel="stylesheet" crossorigin href="/assets/index-BRrmvaKw.css">
3
3
  </head><body><div id="root"></div></body></html>
Binary file
@@ -1,11 +1,14 @@
1
+ import { type ProposalContext } from '../proposal.js';
1
2
  export interface LocalDevelopmentAuthority {
2
3
  endpoint: string;
4
+ proposalAuthorityToken: string;
3
5
  close(): Promise<void>;
4
6
  }
5
7
  export interface LocalDevelopmentAuthorityOptions {
6
8
  dataDir: string;
7
9
  host?: string;
8
10
  port?: number;
11
+ proposalContext?: () => Promise<ProposalContext>;
9
12
  }
10
13
  /** Start the durable, unauthenticated loopback authority used by `feltdb dev`. */
11
14
  export declare function startLocalDevelopmentAuthority(options: LocalDevelopmentAuthorityOptions): Promise<LocalDevelopmentAuthority>;
@@ -1 +1 @@
1
- {"version":3,"file":"local-development-authority.d.ts","sourceRoot":"","sources":["../../src/workspace/local-development-authority.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,gCAAgC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,kFAAkF;AAClF,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,yBAAyB,CAAC,CAyFpC"}
1
+ {"version":3,"file":"local-development-authority.d.ts","sourceRoot":"","sources":["../../src/workspace/local-development-authority.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyB,KAAK,eAAe,EAAsB,MAAM,gBAAgB,CAAC;AAEjG,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,gCAAgC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;CAClD;AAED,kFAAkF;AAClF,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,yBAAyB,CAAC,CAuHpC"}
@@ -1,6 +1,7 @@
1
1
  import http from 'node:http';
2
2
  import path from 'node:path';
3
3
  import { FileJsDb } from '../file-db.js';
4
+ import { FeltDBProposalService } from '../proposal.js';
4
5
  /** Start the durable, unauthenticated loopback authority used by `feltdb dev`. */
5
6
  export async function startLocalDevelopmentAuthority(options) {
6
7
  const host = options.host || '127.0.0.1';
@@ -9,12 +10,24 @@ export async function startLocalDevelopmentAuthority(options) {
9
10
  throw new Error('The development authority may only bind to a loopback address');
10
11
  }
11
12
  const db = new FileJsDb(path.resolve(options.dataDir));
13
+ const proposalAuthorityToken = crypto.randomUUID();
14
+ const store = {
15
+ async get(collection, id) { const result = db.get(`${collection}:${id}`); if (!result.success)
16
+ throw new Error(result.error); return result.data ? JSON.parse(result.data) : undefined; },
17
+ async list(collection) { const result = db.query(collection); if (!result.success)
18
+ throw new Error(result.error); return JSON.parse(result.data || '[]'); },
19
+ async create(collection, id, value) { const result = db.insert(`${collection}:${id}`, JSON.stringify(value)); if (!result.success)
20
+ throw new Error(result.error); },
21
+ async replace(collection, id, value) { const result = db.update(`${collection}:${id}`, JSON.stringify(value)); if (!result.success)
22
+ throw new Error(result.error); },
23
+ };
24
+ const proposalService = options.proposalContext ? new FeltDBProposalService(store, options.proposalContext, proposalAuthorityToken) : undefined;
12
25
  const streams = new Set();
13
26
  const server = http.createServer(async (request, response) => {
14
27
  try {
15
28
  response.setHeader('Access-Control-Allow-Origin', '*');
16
29
  response.setHeader('Access-Control-Allow-Methods', 'GET, POST, PATCH, DELETE, OPTIONS');
17
- response.setHeader('Access-Control-Allow-Headers', 'Authorization, Content-Type, FeltDB-Protocol');
30
+ response.setHeader('Access-Control-Allow-Headers', 'Authorization, Content-Type, FeltDB-Protocol, FeltDB-Proposal-Authority');
18
31
  response.setHeader('Cache-Control', 'no-store');
19
32
  if (request.method === 'OPTIONS') {
20
33
  response.statusCode = 204;
@@ -38,12 +51,59 @@ export async function startLocalDevelopmentAuthority(options) {
38
51
  request.once('close', () => streams.delete(response));
39
52
  return;
40
53
  }
54
+ const proposalMatch = pathname.match(/^\/v1\/proposals(?:\/([^/]+)(?:\/(validate|preview|status|history))?)?$/);
55
+ if (proposalMatch) {
56
+ if (!proposalService) {
57
+ json(response, 503, { error: 'PROPOSAL_SERVICE_UNAVAILABLE' });
58
+ return;
59
+ }
60
+ const id = proposalMatch[1] ? decodeURIComponent(proposalMatch[1]) : undefined;
61
+ const operation = proposalMatch[2];
62
+ const body = await readBody(request);
63
+ const input = body ? parseObject(body) : {};
64
+ const actor = typeof input.actor === 'string' ? input.actor : 'local-developer';
65
+ if (request.method === 'POST' && !id) {
66
+ json(response, 201, await proposalService.create(input));
67
+ return;
68
+ }
69
+ if (request.method === 'GET' && !id) {
70
+ json(response, 200, { proposals: await proposalService.list() });
71
+ return;
72
+ }
73
+ if (request.method === 'GET' && id && !operation) {
74
+ json(response, 200, await proposalService.get(id));
75
+ return;
76
+ }
77
+ if (request.method === 'GET' && id && operation === 'history') {
78
+ json(response, 200, { events: await proposalService.history(id) });
79
+ return;
80
+ }
81
+ if (request.method === 'POST' && id && operation === 'validate') {
82
+ json(response, 200, await proposalService.validate(id, actor));
83
+ return;
84
+ }
85
+ if (request.method === 'POST' && id && operation === 'preview') {
86
+ json(response, 200, await proposalService.preview(id, actor));
87
+ return;
88
+ }
89
+ if (request.method === 'PATCH' && id && operation === 'status') {
90
+ const status = String(input.status || '');
91
+ json(response, 200, await proposalService.transition(id, status, actor, request.headers['feltdb-proposal-authority'], input.approve_authorization === true));
92
+ return;
93
+ }
94
+ json(response, 405, { error: 'METHOD_NOT_ALLOWED' });
95
+ return;
96
+ }
41
97
  const match = pathname.match(/^\/collections\/([^/]+)(?:\/([^/]+))?$/);
42
98
  if (!match) {
43
99
  json(response, 404, { error: 'NOT_FOUND' });
44
100
  return;
45
101
  }
46
102
  const collection = decodeURIComponent(match[1]);
103
+ if (collection.startsWith('_feltdb.')) {
104
+ json(response, 403, { error: 'SYSTEM_COLLECTION_REQUIRES_SERVICE_API' });
105
+ return;
106
+ }
47
107
  const id = match[2] ? decodeURIComponent(match[2]) : undefined;
48
108
  const body = await readBody(request);
49
109
  let result;
@@ -108,6 +168,7 @@ export async function startLocalDevelopmentAuthority(options) {
108
168
  });
109
169
  return {
110
170
  endpoint: `http://${host}:${port}`,
171
+ proposalAuthorityToken,
111
172
  close: () => new Promise((resolve, reject) => {
112
173
  for (const stream of streams)
113
174
  stream.end();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feltdb/core",
3
- "version": "0.7.3",
3
+ "version": "0.7.4",
4
4
  "description": "FeltDB Core - Application-facing database with Browser, Local, and Server runtimes. Durable state, reactive APIs.",
5
5
  "license": "MIT",
6
6
  "type": "module",