@feltdb/core 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.
Files changed (59) hide show
  1. package/dist/cli/application-lifecycle.js +112 -0
  2. package/dist/cli/application.js +10 -0
  3. package/dist/cli/commands.js +234 -64
  4. package/dist/cli/development-session.js +54 -0
  5. package/dist/cli/index.js +1 -1
  6. package/dist/cli/workspace-integration.js +146 -20
  7. package/dist/create/cli.js +4 -2
  8. package/dist/create/create.js +42 -6
  9. package/dist/create/frameworks.js +18 -0
  10. package/dist/create/package-versions.js +1 -1
  11. package/dist/create/workspace-initialization.js +4 -5
  12. package/dist/db.d.ts +4 -1
  13. package/dist/db.d.ts.map +1 -1
  14. package/dist/db.js +56 -7
  15. package/dist/development-runtime-bridge.d.ts +60 -0
  16. package/dist/development-runtime-bridge.d.ts.map +1 -0
  17. package/dist/development-runtime-bridge.js +171 -0
  18. package/dist/index-core.d.ts +2 -0
  19. package/dist/index-core.d.ts.map +1 -1
  20. package/dist/index-core.js +2 -0
  21. package/dist/studio/app.d.ts +2 -1
  22. package/dist/studio/app.d.ts.map +1 -1
  23. package/dist/studio/components/StateExplorer.d.ts +2 -1
  24. package/dist/studio/components/StateExplorer.d.ts.map +1 -1
  25. package/dist/studio/components/index.js +1 -1
  26. package/dist/studio/{components-9kDSWiGL.js → components-C5p2TfIU.js} +25 -14
  27. package/dist/studio/index.js +234 -160
  28. package/dist/studio-app/assets/index-DospFFYE.js +28 -0
  29. package/dist/studio-app/index.html +1 -1
  30. package/dist/workspace/browser.d.ts +2 -2
  31. package/dist/workspace/browser.d.ts.map +1 -1
  32. package/dist/workspace/browser.js +1 -1
  33. package/dist/workspace/development-node.d.ts +16 -0
  34. package/dist/workspace/development-node.d.ts.map +1 -1
  35. package/dist/workspace/development-node.js +85 -1
  36. package/dist/workspace/index.d.ts +2 -2
  37. package/dist/workspace/index.d.ts.map +1 -1
  38. package/dist/workspace/index.js +1 -1
  39. package/dist/workspace/investigation-lifecycle-manager.d.ts +2 -0
  40. package/dist/workspace/investigation-lifecycle-manager.d.ts.map +1 -1
  41. package/dist/workspace/investigation-lifecycle-manager.js +33 -3
  42. package/dist/workspace/investigation-supervisor.d.ts.map +1 -1
  43. package/dist/workspace/investigation-supervisor.js +3 -1
  44. package/dist/workspace/runtime-investigation.d.ts +4 -0
  45. package/dist/workspace/runtime-investigation.d.ts.map +1 -1
  46. package/dist/workspace/runtime-investigation.js +4 -0
  47. package/dist/workspace/runtime-observation.d.ts +4 -1
  48. package/dist/workspace/runtime-observation.d.ts.map +1 -1
  49. package/dist/workspace/runtime-observation.js +20 -2
  50. package/dist/workspace/runtime-observer.d.ts +6 -0
  51. package/dist/workspace/runtime-observer.d.ts.map +1 -1
  52. package/dist/workspace/runtime-observer.js +4 -0
  53. package/dist/workspace/workspace-identity.d.ts +1 -1
  54. package/dist/workspace/workspace-identity.d.ts.map +1 -1
  55. package/dist/workspace/workspace-identity.js +4 -4
  56. package/dist/workspace/workspace-types.d.ts +95 -0
  57. package/dist/workspace/workspace-types.d.ts.map +1 -1
  58. package/package.json +1 -1
  59. package/dist/studio-app/assets/index-D3rT0SJi.js +0 -28
@@ -0,0 +1 @@
1
+ {"version":3,"file":"development-runtime-bridge.d.ts","sourceRoot":"","sources":["../src/development-runtime-bridge.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iCAAiC;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,8BAA+B,SAAQ,iCAAiC;IACvF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEzE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzE,MAAM,EAAE,uBAAuB,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACnD,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,+BAA+B,CAAC;CACrJ;AAED,6FAA6F;AAC7F,eAAO,MAAM,oCAAoC,MAAM,CAAC;AAIxD,sFAAsF;AACtF,wBAAgB,iCAAiC,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,iCAAiC,CAAC,GAAG,IAAI,CAI5G;AA8BD,gFAAgF;AAChF,wBAAgB,8BAA8B,CAAC,KAAK,EAAE;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,0BAA0B,CAAC;IAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAmHjG"}
@@ -0,0 +1,171 @@
1
+ /** Maximum unsent events retained by a runtime. New events are dropped beyond this bound. */
2
+ export const DEVELOPMENT_OBSERVATION_BUFFER_LIMIT = 256;
3
+ let configuredSession;
4
+ /** Supply ephemeral `feltdb dev` identity. This is a no-op when values are absent. */
5
+ export function configureDevelopmentRuntimeBridge(session) {
6
+ if (!session) {
7
+ configuredSession = undefined;
8
+ return;
9
+ }
10
+ if (!session.sessionId || !session.workspaceId || !session.namespace || !session.runtime || !session.authorityUrl || !session.bridgeUrl)
11
+ return;
12
+ configuredSession = session;
13
+ }
14
+ function randomId() {
15
+ const value = globalThis.crypto?.randomUUID?.().replace(/-/g, '')
16
+ ?? `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}${Math.random().toString(36).slice(2)}`;
17
+ return `runtime_${value}`;
18
+ }
19
+ function processSession() {
20
+ const environment = globalThis.process?.env;
21
+ if (!environment?.FELTDB_DEV_SESSION_ID)
22
+ return undefined;
23
+ return {
24
+ sessionId: environment.FELTDB_DEV_SESSION_ID,
25
+ workspaceId: environment.FELTDB_WORKSPACE_ID,
26
+ namespace: environment.FELTDB_NAMESPACE,
27
+ runtime: environment.FELTDB_RUNTIME,
28
+ authorityUrl: environment.FELTDB_AUTHORITY_URL || environment.FELTDB_WORKSPACE_ENDPOINT,
29
+ bridgeUrl: environment.FELTDB_DEV_BRIDGE_URL,
30
+ applicationUrl: environment.FELTDB_APPLICATION_URL,
31
+ };
32
+ }
33
+ function safeBridgeUrl(value) {
34
+ try {
35
+ const url = new URL(value);
36
+ if (url.protocol !== 'http:' || !['127.0.0.1', 'localhost', '::1', '[::1]'].includes(url.hostname))
37
+ return undefined;
38
+ return url.origin;
39
+ }
40
+ catch {
41
+ return undefined;
42
+ }
43
+ }
44
+ /** Internal, optional registration hook called by Core runtime construction. */
45
+ export function attachDevelopmentRuntimeBridge(input) {
46
+ const runtimeInstanceId = randomId();
47
+ let activeSession;
48
+ let heartbeat;
49
+ let flushTimer;
50
+ let flushing = false;
51
+ let closing = false;
52
+ let dropped = 0;
53
+ const observations = [];
54
+ const applicationId = input.applicationId
55
+ || globalThis.document?.title
56
+ || globalThis.process?.env?.npm_package_name
57
+ || 'application';
58
+ const register = async (candidate) => {
59
+ const session = candidate || configuredSession || processSession();
60
+ const compatibleRuntime = session?.runtime === input.runtime
61
+ || (input.runtime === 'remote' && ['managed', 'self-hosted', 'remote'].includes(session?.runtime || ''));
62
+ if (!session || session.namespace !== input.namespace || !compatibleRuntime)
63
+ return;
64
+ const bridgeUrl = safeBridgeUrl(session.bridgeUrl);
65
+ if (!bridgeUrl)
66
+ return;
67
+ activeSession = { ...session, bridgeUrl };
68
+ const registration = { ...activeSession, runtimeInstanceId, applicationId };
69
+ try {
70
+ const response = await fetch(`${bridgeUrl}/api/v1/development/runtime/register`, {
71
+ method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify(registration),
72
+ });
73
+ if (!response.ok)
74
+ return;
75
+ if (!heartbeat) {
76
+ heartbeat = setInterval(() => { void register(activeSession); }, 2000);
77
+ heartbeat.unref?.();
78
+ }
79
+ }
80
+ catch { /* Development tooling is optional. */ }
81
+ };
82
+ const flush = async () => {
83
+ if (flushing || !activeSession || observations.length === 0)
84
+ return;
85
+ flushing = true;
86
+ const batch = observations.splice(0, 32);
87
+ const droppedEvents = dropped;
88
+ dropped = 0;
89
+ try {
90
+ const response = await fetch(`${activeSession.bridgeUrl}/api/v1/development/runtime/${encodeURIComponent(runtimeInstanceId)}/observations`, {
91
+ method: 'POST', headers: { 'content-type': 'application/json' },
92
+ body: JSON.stringify({ sessionId: activeSession.sessionId, observations: batch, dropped: droppedEvents }),
93
+ });
94
+ if (!response.ok)
95
+ throw new Error('observation delivery failed');
96
+ }
97
+ catch {
98
+ if (!closing) {
99
+ const available = DEVELOPMENT_OBSERVATION_BUFFER_LIMIT - observations.length;
100
+ observations.unshift(...batch.slice(Math.max(0, batch.length - available)));
101
+ dropped += droppedEvents + Math.max(0, batch.length - available);
102
+ }
103
+ }
104
+ finally {
105
+ flushing = false;
106
+ if (observations.length && !closing) {
107
+ flushTimer = setTimeout(() => { flushTimer = undefined; void flush(); }, 100);
108
+ flushTimer.unref?.();
109
+ }
110
+ }
111
+ };
112
+ const enqueue = (event) => {
113
+ if (!activeSession || closing)
114
+ return;
115
+ if (observations.length >= DEVELOPMENT_OBSERVATION_BUFFER_LIMIT)
116
+ dropped++;
117
+ else
118
+ observations.push(event);
119
+ if (!flushTimer && !flushing) {
120
+ flushTimer = setTimeout(() => { flushTimer = undefined; void flush(); }, 0);
121
+ flushTimer.unref?.();
122
+ }
123
+ };
124
+ const observation = {
125
+ start(type, details = {}) {
126
+ const correlationId = `op_${randomId().slice(8)}`;
127
+ const startedAt = Date.now();
128
+ const emit = (status, metadata, error) => enqueue({
129
+ eventId: `evt_${randomId().slice(8)}`, correlationId, timestamp: Date.now(),
130
+ workspaceId: activeSession?.workspaceId, sessionId: activeSession?.sessionId, runtimeInstanceId,
131
+ operation: { type, collection: details.collection, transactionId: details.transactionId }, status,
132
+ durationMs: status === 'started' ? undefined : Date.now() - startedAt,
133
+ metadata: metadata || details.metadata,
134
+ error: status === 'failed' ? {
135
+ code: typeof error === 'object' && error && 'code' in error ? String(error.code) : undefined,
136
+ message: (error instanceof Error ? error.message : String(error)).slice(0, 500),
137
+ } : undefined,
138
+ });
139
+ emit('started');
140
+ return { complete: metadata => emit('completed', metadata), fail: error => emit('failed', undefined, error) };
141
+ },
142
+ };
143
+ const browser = globalThis.window;
144
+ const receive = (event) => {
145
+ if (event.source !== browser?.parent || event.data?.type !== 'feltdb:dev-session')
146
+ return;
147
+ void register(event.data.session);
148
+ };
149
+ browser?.addEventListener?.('message', receive);
150
+ void register();
151
+ const close = async () => {
152
+ closing = true;
153
+ if (heartbeat)
154
+ clearInterval(heartbeat);
155
+ if (flushTimer)
156
+ clearTimeout(flushTimer);
157
+ while (observations.length)
158
+ await flush();
159
+ browser?.removeEventListener?.('message', receive);
160
+ if (!activeSession)
161
+ return;
162
+ try {
163
+ await fetch(`${activeSession.bridgeUrl}/api/v1/development/runtime/${encodeURIComponent(runtimeInstanceId)}?sessionId=${encodeURIComponent(activeSession.sessionId)}`, {
164
+ method: 'DELETE', keepalive: true,
165
+ });
166
+ }
167
+ catch { /* Lease expiry handles crashes and unavailable tooling. */ }
168
+ };
169
+ browser?.addEventListener?.('pagehide', () => { void close(); }, { once: true });
170
+ return { runtimeInstanceId, observation, close };
171
+ }
@@ -49,6 +49,7 @@ export * from './release.js';
49
49
  export * from './observe.js';
50
50
  export * from './provider.js';
51
51
  export * from './identity.js';
52
+ export * from './development-runtime-bridge.js';
52
53
  export * from './application-contract.js';
53
54
  export { ProtocolHandler, type Message, type Operation as ProtocolOperation, type Response as ProtocolResponse, } from './protocol.js';
54
55
  /**
@@ -75,4 +76,5 @@ export type { ProvenanceGraph, ProvenanceNode, ProvenanceEdge, ProvenanceEdgeTyp
75
76
  * Shared development state for coordinating Browser, IDE, and Agent clients.
76
77
  */
77
78
  export * from './workspace/browser.js';
79
+ export * from './development-runtime-bridge.js';
78
80
  //# sourceMappingURL=index-core.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-core.d.ts","sourceRoot":"","sources":["../src/index-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EACL,eAAe,EACf,KAAK,OAAO,EACZ,KAAK,SAAS,IAAI,iBAAiB,EACnC,KAAK,QAAQ,IAAI,gBAAgB,GAClC,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AAEnC;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACnE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEzE;;GAEG;AACH,YAAY,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAEjB;;;;GAIG;AACH,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index-core.d.ts","sourceRoot":"","sources":["../src/index-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EACL,eAAe,EACf,KAAK,OAAO,EACZ,KAAK,SAAS,IAAI,iBAAiB,EACnC,KAAK,QAAQ,IAAI,gBAAgB,GAClC,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AAEnC;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACnE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEzE;;GAEG;AACH,YAAY,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAEjB;;;;GAIG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC"}
@@ -49,6 +49,7 @@ export * from './release.js';
49
49
  export * from './observe.js';
50
50
  export * from './provider.js';
51
51
  export * from './identity.js';
52
+ export * from './development-runtime-bridge.js';
52
53
  export * from './application-contract.js';
53
54
  export { ProtocolHandler, } from './protocol.js';
54
55
  /**
@@ -70,3 +71,4 @@ export { emitTelemetry, getTelemetryClient } from './telemetry.js';
70
71
  * Shared development state for coordinating Browser, IDE, and Agent clients.
71
72
  */
72
73
  export * from './workspace/browser.js';
74
+ export * from './development-runtime-bridge.js';
@@ -7,8 +7,9 @@ export interface StudioAppProps {
7
7
  namespace?: string;
8
8
  deploymentRuntime?: string;
9
9
  applicationUrl?: string;
10
+ developmentSession?: Record<string, string>;
10
11
  onConnect?: (url: string, token: string) => void;
11
12
  }
12
- export declare function StudioApp({ db, remoteUrl, token, namespace, deploymentRuntime, applicationUrl, onConnect }: StudioAppProps): React.JSX.Element;
13
+ export declare function StudioApp({ db, remoteUrl, token, namespace, deploymentRuntime, applicationUrl, developmentSession, onConnect }: StudioAppProps): React.JSX.Element;
13
14
  export default StudioApp;
14
15
  //# sourceMappingURL=app.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAA8B,MAAM,OAAO,CAAC;AAmBnD,OAAO,EAAgC,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,WAAW,CAAC;AAEnB,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,YAAY,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,EAAE,SAAc,EAAE,KAAU,EAAE,SAAqB,EAAE,iBAA6B,EAAE,cAAmB,EAAE,SAAS,EAAE,EAAE,cAAc,qBAgGjK;AAED,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAA8B,MAAM,OAAO,CAAC;AAmBnD,OAAO,EAAgC,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,WAAW,CAAC;AAEnB,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,YAAY,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,EAAE,SAAc,EAAE,KAAU,EAAE,SAAqB,EAAE,iBAA6B,EAAE,cAAmB,EAAE,kBAAkB,EAAE,SAAS,EAAE,EAAE,cAAc,qBA6IrL;AAED,eAAe,SAAS,CAAC"}
@@ -5,7 +5,8 @@ export interface StateExplorerProps {
5
5
  model?: FlowSpec | null;
6
6
  namespace?: string;
7
7
  applicationUrl?: string;
8
+ developmentSession?: Record<string, string>;
8
9
  }
9
- export declare function StateExplorer({ db, model, namespace, applicationUrl }: StateExplorerProps): React.JSX.Element;
10
+ export declare function StateExplorer({ db, model, namespace, applicationUrl, developmentSession }: StateExplorerProps): React.JSX.Element;
10
11
  export default StateExplorer;
11
12
  //# sourceMappingURL=StateExplorer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StateExplorer.d.ts","sourceRoot":"","sources":["../../src/components/StateExplorer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,KAAK,EAAkB,QAAQ,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG3E,MAAM,WAAW,kBAAkB;IAAG,EAAE,CAAC,EAAE,YAAY,CAAC;IAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE;AAoB/H,wBAAgB,aAAa,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAqB,EAAE,cAAmB,EAAE,EAAE,kBAAkB,qBAuB1G;AACD,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"StateExplorer.d.ts","sourceRoot":"","sources":["../../src/components/StateExplorer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,KAAK,EAAkB,QAAQ,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG3E,MAAM,WAAW,kBAAkB;IAAG,EAAE,CAAC,EAAE,YAAY,CAAC;IAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE;AAoB5K,wBAAgB,aAAa,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAqB,EAAE,cAAmB,EAAE,kBAAkB,EAAE,EAAE,kBAAkB,qBA0B9H;AACD,eAAe,aAAa,CAAC"}
@@ -1,4 +1,4 @@
1
- import { a as e, c as t, d as n, f as r, i, l as a, m as o, n as s, o as c, p as l, r as u, s as d, t as f, u as p, x as m } from "../components-9kDSWiGL.js";
1
+ import { a as e, c as t, d as n, f as r, i, l as a, m as o, n as s, o as c, p as l, r as u, s as d, t as f, u as p, x as m } from "../components-C5p2TfIU.js";
2
2
  import { t as h } from "../KeyManagementPanel-DZuSeWBK.js";
3
3
  import { ManagedInstancePanel as g } from "./ManagedInstancePanel.js";
4
4
  export { c as AgentExplorer, f as ApplicationDesigner, p as CapabilityExplorer, t as ConflictExplorer, a as ExecutionViewer, s as GlobalSearch, i as HealthCenter, h as KeyManagementPanel, g as ManagedInstancePanel, r as OperationsExplorer, m as OverviewDashboard, n as PeerMap, e as ProvenanceViewer, l as ReferenceExplorer, u as SettingsPanel, o as StateExplorer, d as WorkflowVisualizer };
@@ -281,22 +281,27 @@ function C({ db: e, definition: t, namespace: n, bridgedItems: r }) {
281
281
  ]
282
282
  });
283
283
  }
284
- function w({ db: e, model: t, namespace: r = "default", applicationUrl: o = "" }) {
285
- let l = i(null), [u, d] = a(null);
284
+ function w({ db: e, model: t, namespace: r = "default", applicationUrl: o = "", developmentSession: l }) {
285
+ let u = i(null), [d, f] = a(null);
286
286
  return n(() => {
287
287
  if (!o) return;
288
- let e = new URL(o).origin, t = () => l.current?.contentWindow?.postMessage({
289
- type: "feltdb:studio:read",
290
- requestId: "live"
291
- }, e), n = (n) => {
292
- n.origin === e && (n.data?.type === "feltdb:studio:ready" && t(), n.data?.type === "feltdb:studio:data" && d(n.data.records));
288
+ let e = new URL(o).origin, t = () => {
289
+ l?.sessionId && u.current?.contentWindow?.postMessage({
290
+ type: "feltdb:dev-session",
291
+ session: l
292
+ }, e), u.current?.contentWindow?.postMessage({
293
+ type: "feltdb:studio:read",
294
+ requestId: "live"
295
+ }, e);
296
+ }, n = (n) => {
297
+ n.origin === e && (n.data?.type === "feltdb:studio:ready" && t(), n.data?.type === "feltdb:studio:data" && f(n.data.records));
293
298
  };
294
299
  window.addEventListener("message", n);
295
300
  let r = window.setInterval(t, 1500);
296
301
  return () => {
297
302
  window.removeEventListener("message", n), window.clearInterval(r);
298
303
  };
299
- }, [o]), /* @__PURE__ */ c("div", {
304
+ }, [o, l]), /* @__PURE__ */ c("div", {
300
305
  className: "studio-model-page",
301
306
  children: [
302
307
  /* @__PURE__ */ c("header", { children: [
@@ -308,14 +313,20 @@ function w({ db: e, model: t, namespace: r = "default", applicationUrl: o = "" }
308
313
  /* @__PURE__ */ s("p", { children: "Live application records grouped by collection. Select a record to inspect every field." })
309
314
  ] }),
310
315
  o && /* @__PURE__ */ s("iframe", {
311
- ref: l,
316
+ ref: u,
312
317
  className: "studio-data-bridge",
313
318
  src: o,
314
319
  title: "FeltDB application data bridge",
315
- onLoad: () => l.current?.contentWindow?.postMessage({
316
- type: "feltdb:studio:read",
317
- requestId: "initial"
318
- }, new URL(o).origin)
320
+ onLoad: () => {
321
+ let e = new URL(o).origin;
322
+ l?.sessionId && u.current?.contentWindow?.postMessage({
323
+ type: "feltdb:dev-session",
324
+ session: l
325
+ }, e), u.current?.contentWindow?.postMessage({
326
+ type: "feltdb:studio:read",
327
+ requestId: "initial"
328
+ }, e);
329
+ }
319
330
  }),
320
331
  /* @__PURE__ */ c("div", {
321
332
  className: "model-summary",
@@ -331,7 +342,7 @@ function w({ db: e, model: t, namespace: r = "default", applicationUrl: o = "" }
331
342
  db: e ?? null,
332
343
  definition: t,
333
344
  namespace: r,
334
- bridgedItems: u?.[t.name]
345
+ bridgedItems: d?.[t.name]
335
346
  }, t.name)), !t?.collections.length && /* @__PURE__ */ c("div", {
336
347
  className: "model-empty",
337
348
  children: [