@feltdb/core 0.8.0 → 0.8.1

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 (74) hide show
  1. package/dist/application-development.d.ts +7 -2
  2. package/dist/application-development.d.ts.map +1 -1
  3. package/dist/application-development.js +7 -13
  4. package/dist/application-manifest.d.ts +1 -0
  5. package/dist/application-manifest.d.ts.map +1 -1
  6. package/dist/application-manifest.js +1 -1
  7. package/dist/application-understanding.d.ts +76 -0
  8. package/dist/application-understanding.d.ts.map +1 -0
  9. package/dist/application-understanding.js +282 -0
  10. package/dist/cli/ai-model-config.js +3 -3
  11. package/dist/cli/commands.js +131 -38
  12. package/dist/cli/proposal-client.js +5 -1
  13. package/dist/cli/publish-engine.js +1 -1
  14. package/dist/cli/repository-evidence.js +55 -0
  15. package/dist/cli/source-sync.js +190 -75
  16. package/dist/convergence.d.ts +55 -0
  17. package/dist/convergence.d.ts.map +1 -0
  18. package/dist/convergence.js +63 -0
  19. package/dist/create/managed-account.js +1 -0
  20. package/dist/create/package-versions.js +1 -1
  21. package/dist/create/server-source/crates/feltdb/src/application.rs +4 -0
  22. package/dist/create/server-source/crates/feltdb-server/src/connections.rs +14 -0
  23. package/dist/create/server-source/crates/feltdb-server/src/main.rs +174 -24
  24. package/dist/create/server-source/crates/feltdb-server/src/tenancy.rs +8 -1
  25. package/dist/create/template/default-project/src/context/AuthContext.tsx +9 -1
  26. package/dist/create/template/default-project/src/pages/SignUp.tsx +1 -1
  27. package/dist/flowspec.d.ts.map +1 -1
  28. package/dist/flowspec.js +6 -1
  29. package/dist/http-client.d.ts +32 -1
  30. package/dist/http-client.d.ts.map +1 -1
  31. package/dist/http-client.js +14 -2
  32. package/dist/http-db.d.ts +3 -0
  33. package/dist/http-db.d.ts.map +1 -1
  34. package/dist/http-db.js +28 -3
  35. package/dist/index-core.d.ts +3 -0
  36. package/dist/index-core.d.ts.map +1 -1
  37. package/dist/index-core.js +3 -0
  38. package/dist/intent.d.ts +98 -0
  39. package/dist/intent.d.ts.map +1 -0
  40. package/dist/intent.js +343 -0
  41. package/dist/module-intent.d.ts +19 -5
  42. package/dist/module-intent.d.ts.map +1 -1
  43. package/dist/module-intent.js +211 -62
  44. package/dist/module.d.ts +41 -12
  45. package/dist/module.d.ts.map +1 -1
  46. package/dist/module.js +543 -38
  47. package/dist/proposal.d.ts +13 -1
  48. package/dist/proposal.d.ts.map +1 -1
  49. package/dist/proposal.js +21 -4
  50. package/dist/studio/components/AskFeltDB.d.ts.map +1 -1
  51. package/dist/studio/components/ProposalBrowser.d.ts +1 -1
  52. package/dist/studio/components/ProposalBrowser.d.ts.map +1 -1
  53. package/dist/studio/components/index.js +1 -1
  54. package/dist/studio/{components-CNSNrmA9.js → components-Duq2xQWt.js} +251 -193
  55. package/dist/studio/index.js +1 -1
  56. package/dist/studio/studio.css +1 -1
  57. package/dist/studio/utils/proposal-api.d.ts +4 -1
  58. package/dist/studio/utils/proposal-api.d.ts.map +1 -1
  59. package/dist/studio/utils/proposal-api.js +3 -0
  60. package/dist/studio-app/assets/{feltdb_wasm-CSB6KVgw.js → feltdb_wasm-bIqcRzAr.js} +1 -1
  61. package/dist/studio-app/assets/feltdb_wasm_bg-BE79okwX.wasm +0 -0
  62. package/dist/studio-app/assets/{index-yazaWMUN.css → index-Cd_NPw14.css} +1 -1
  63. package/dist/studio-app/assets/index-XGYdlElN.js +29 -0
  64. package/dist/studio-app/index.html +2 -2
  65. package/dist/wasm/feltdb_wasm_bg.wasm +0 -0
  66. package/dist/workspace/local-development-authority.d.ts +2 -0
  67. package/dist/workspace/local-development-authority.d.ts.map +1 -1
  68. package/dist/workspace/local-development-authority.js +65 -2
  69. package/package.json +1 -1
  70. package/dist/studio-app/assets/dist-CCOk39Uc.js +0 -1
  71. package/dist/studio-app/assets/feltdb_wasm_bg-Dd1fnO9U.wasm +0 -0
  72. package/dist/studio-app/assets/index-Bncji3aN.js +0 -43
  73. package/dist/studio-app/assets/lib-B2_7fcn7.js +0 -69
  74. package/dist/studio-app/assets/worker-CARZ5g7K.js +0 -69
@@ -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-Bncji3aN.js"></script>
2
- <link rel="stylesheet" crossorigin href="/assets/index-yazaWMUN.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-XGYdlElN.js"></script>
2
+ <link rel="stylesheet" crossorigin href="/assets/index-Cd_NPw14.css">
3
3
  </head><body><div id="root"></div></body></html>
Binary file
@@ -1,4 +1,5 @@
1
1
  import { type ProposalContext } from '../proposal.js';
2
+ import type { ObservedEvidenceInput } from '../application-understanding.js';
2
3
  export interface LocalDevelopmentAuthority {
3
4
  endpoint: string;
4
5
  proposalAuthorityToken: string;
@@ -9,6 +10,7 @@ export interface LocalDevelopmentAuthorityOptions {
9
10
  host?: string;
10
11
  port?: number;
11
12
  proposalContext?: () => Promise<ProposalContext>;
13
+ intentObservations?: () => ObservedEvidenceInput[] | Promise<ObservedEvidenceInput[]>;
12
14
  }
13
15
  /** Start the durable, unauthenticated loopback authority used by `feltdb dev`. */
14
16
  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":"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,CAoJpC"}
1
+ {"version":3,"file":"local-development-authority.d.ts","sourceRoot":"","sources":["../../src/workspace/local-development-authority.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwD,KAAK,eAAe,EAAsB,MAAM,gBAAgB,CAAC;AAEhI,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAE7E,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;IACjD,kBAAkB,CAAC,EAAE,MAAM,qBAAqB,EAAE,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;CACvF;AAED,kFAAkF;AAClF,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,yBAAyB,CAAC,CA6JpC"}
@@ -1,7 +1,8 @@
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
+ import { FELTDB_CONVERGENCE_COLLECTION, FeltDBProposalService } from '../proposal.js';
5
+ import { IntentService } from '../intent.js';
5
6
  /** Start the durable, unauthenticated loopback authority used by `feltdb dev`. */
6
7
  export async function startLocalDevelopmentAuthority(options) {
7
8
  const host = options.host || '127.0.0.1';
@@ -22,6 +23,7 @@ export async function startLocalDevelopmentAuthority(options) {
22
23
  throw new Error(result.error); },
23
24
  };
24
25
  const proposalService = options.proposalContext ? new FeltDBProposalService(store, options.proposalContext, proposalAuthorityToken) : undefined;
26
+ const intentService = proposalService && options.proposalContext ? new IntentService(store, options.proposalContext, proposalService, options.intentObservations) : undefined;
25
27
  const streams = new Set();
26
28
  const server = http.createServer(async (request, response) => {
27
29
  try {
@@ -92,7 +94,52 @@ export async function startLocalDevelopmentAuthority(options) {
92
94
  json(response, 405, { error: 'METHOD_NOT_ALLOWED' });
93
95
  return;
94
96
  }
95
- const proposalMatch = pathname.match(/^\/v1\/proposals(?:\/([^/]+)(?:\/(validate|preview|approve|reject|status|history))?)?$/);
97
+ const intentMatch = pathname.match(/^\/v1\/intents(?:\/([^/]+)(?:\/(understanding|plan|proposal|history|execute))?)?$/);
98
+ if (intentMatch) {
99
+ if (!intentService) {
100
+ json(response, 503, { error: 'INTENT_SERVICE_UNAVAILABLE' });
101
+ return;
102
+ }
103
+ const id = intentMatch[1] ? decodeURIComponent(intentMatch[1]) : undefined;
104
+ const operation = intentMatch[2];
105
+ const body = await readBody(request);
106
+ const input = body ? parseObject(body) : {};
107
+ if (request.method === 'POST' && !id) {
108
+ const raw = String(input.raw_request ?? input.request ?? '');
109
+ json(response, 201, await intentService.execute(raw, String(input.actor ?? 'developer')));
110
+ return;
111
+ }
112
+ if (request.method === 'GET' && !id) {
113
+ json(response, 200, { intents: await intentService.list() });
114
+ return;
115
+ }
116
+ if (request.method === 'GET' && id) {
117
+ const intent = await intentService.get(id);
118
+ if (!operation) {
119
+ json(response, 200, intent);
120
+ return;
121
+ }
122
+ if (operation === 'understanding') {
123
+ json(response, 200, intent.understanding ?? {});
124
+ return;
125
+ }
126
+ if (operation === 'plan') {
127
+ json(response, 200, intent.plan ?? {});
128
+ return;
129
+ }
130
+ if (operation === 'proposal') {
131
+ json(response, 200, intent.proposal_id ? await proposalService.get(intent.proposal_id) : {});
132
+ return;
133
+ }
134
+ if (operation === 'history') {
135
+ json(response, 200, { events: await intentService.history(id) });
136
+ return;
137
+ }
138
+ }
139
+ json(response, 405, { error: 'METHOD_NOT_ALLOWED' });
140
+ return;
141
+ }
142
+ const proposalMatch = pathname.match(/^\/v1\/proposals(?:\/([^/]+)(?:\/(validate|preview|approve|reject|status|history|convergence))?)?$/);
96
143
  if (proposalMatch) {
97
144
  if (!proposalService) {
98
145
  json(response, 503, { error: 'PROPOSAL_SERVICE_UNAVAILABLE' });
@@ -131,6 +178,22 @@ export async function startLocalDevelopmentAuthority(options) {
131
178
  json(response, 200, await proposalService.readiness(id));
132
179
  return;
133
180
  }
181
+ if (request.method === 'GET' && id && operation === 'convergence') {
182
+ const all = await store.list(FELTDB_CONVERGENCE_COLLECTION);
183
+ json(response, 200, { convergence: all.filter(value => value.proposal_id === id).sort((a, b) => String(b.created_at).localeCompare(String(a.created_at))) });
184
+ return;
185
+ }
186
+ if (request.method === 'POST' && id && operation === 'convergence') {
187
+ const proposal = await proposalService.get(id);
188
+ if (proposal.status !== 'applied')
189
+ throw new Error('PROPOSAL_NOT_APPLIED');
190
+ if (input.proposal_id !== id)
191
+ throw new Error('INVALID_CONVERGENCE');
192
+ const value = { ...input, id: `cv_${crypto.randomUUID().replaceAll('-', '')}`, created_at: new Date().toISOString(), verifier_version: 1 };
193
+ await store.create(FELTDB_CONVERGENCE_COLLECTION, value.id, value);
194
+ json(response, 201, value);
195
+ return;
196
+ }
134
197
  if (request.method === 'POST' && id && operation === 'validate') {
135
198
  json(response, 200, await proposalService.validate(id, actor));
136
199
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@feltdb/core",
3
- "version": "0.8.0",
3
+ "version": "0.8.1",
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",
@@ -1 +0,0 @@
1
- import{n as e,r as t,t as n}from"./index-Bncji3aN.js";Object.freeze({smallest:`SmolLM2-360M-Instruct-q4f32_1-MLC`,balanced:`SmolLM2-1.7B-Instruct-q4f32_1-MLC`,lowMemoryWithShaderF16:`SmolLM2-360M-Instruct-q4f16_1-MLC`});function r(e){if(e)return{type:e.type,schema:typeof e.schema==`string`?e.schema:e.schema?JSON.stringify(e.schema):void 0}}function i(){return typeof navigator<`u`&&`gpu`in navigator}var a=class{options;kind=`webllm`;private=!0;model;engine=null;initialization=null;ownedWorker=null;constructor(e={}){this.options=e,this.model=e.model??`SmolLM2-360M-Instruct-q4f32_1-MLC`}isReady(){return this.engine!==null}async initialize(){if(!this.engine)return this.initialization||=this.createEngine().then(e=>{this.engine=e}).catch(e=>{throw this.ownedWorker?.terminate(),this.ownedWorker=null,e}).finally(()=>{this.initialization=null}),this.initialization}async createEngine(){let e=e=>this.options.onProgress?.(e),n=this.options.worker??null;if(this.options.engineFactory)return this.options.engineFactory({model:this.model,worker:n,appConfig:this.options.appConfig,onProgress:e});if(!i())throw Error(`@feltdb/webllm requires a WebGPU-capable browser.`);let r=await t(()=>import(`./lib-B2_7fcn7.js`),[]),a={appConfig:this.options.appConfig??{...r.prebuiltAppConfig,cacheBackend:this.options.cacheBackend??`cache`},initProgressCallback:e};if(this.options.useWorker!==!1){if(!n){if(typeof Worker>`u`)throw Error(`@feltdb/webllm could not create a Web Worker in this environment.`);n=new Worker(new URL(`/assets/worker-CARZ5g7K.js`,``+import.meta.url),{type:`module`}),this.ownedWorker=n}return r.CreateWebWorkerMLCEngine(n,this.model,a)}return r.CreateMLCEngine(this.model,a)}async readyEngine(){if(await this.initialize(),!this.engine)throw Error(`@feltdb/webllm failed to initialize.`);return this.engine}async generate(e,t={}){return(await(await this.readyEngine()).chat.completions.create({messages:e,stream:!1,temperature:t.temperature,top_p:t.topP,max_tokens:t.maxTokens,stop:t.stopSequences,response_format:r(t.responseFormat)})).choices[0]?.message.content??``}async generateFlow(t,r){let i=r.snapshot??(typeof this.options.contract==`function`?await this.options.contract():this.options.contract);if(!i)throw Error(`generateFlow requires a FeltDB contract snapshot`);let a=n(i,r.currentFlow,t),o={temperature:r.temperature??.1,maxTokens:r.maxTokens,topP:r.topP,stopSequences:r.stopSequences,responseFormat:{type:`json_object`,schema:{type:`object`,required:[`proposedFlow`,`summary`,`changes`,`warnings`],properties:{proposedFlow:{type:`string`},summary:{type:`string`},changes:{type:`array`,items:{type:`string`}},warnings:{type:`array`,items:{type:`string`}}}}}},s=await this.generate(a,o);try{return await e({raw:s,snapshot:i,currentFlow:r.currentFlow,allowDestructiveProposal:r.allowDestructiveProposal})}catch(t){let n=t instanceof Error?t.message:String(t),c=await this.generate([...a,{role:`assistant`,content:s},{role:`user`,content:`FeltDB rejected that proposal: ${n}. Return one corrected complete JSON proposal. Do not broaden or add unrelated changes.`}],o);return e({raw:c,snapshot:i,currentFlow:r.currentFlow,allowDestructiveProposal:r.allowDestructiveProposal})}}async*stream(e,t={}){let n=await(await this.readyEngine()).chat.completions.create({messages:e,stream:!0,temperature:t.temperature,top_p:t.topP,max_tokens:t.maxTokens,stop:t.stopSequences,response_format:r(t.responseFormat)});for await(let e of n){let t=e.choices[0]?.delta.content;t&&(yield t)}}interrupt(){this.engine?.interruptGenerate()}async shutdown(){let e=this.engine;this.engine=null,e&&(e.interruptGenerate(),await e.unload()),this.ownedWorker?.terminate(),this.ownedWorker=null}};export{a as WebLLMProvider};