@forgeax/engine-dsh 0.1.4 → 0.1.7
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/README.md +0 -15
- package/dist/.tsbuildinfo +1 -1
- package/dist/embedded.mjs +4 -34
- package/dist/embedded.mjs.map +1 -1
- package/dist/engine-host.d.ts.map +1 -1
- package/dist/engine-host.mjs +6 -59
- package/dist/engine-host.mjs.map +1 -1
- package/dist/engine-preview.mjs.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +4 -34
- package/dist/index.mjs.map +1 -1
- package/dist/protocol.d.ts +0 -1
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.mjs +1 -6
- package/dist/protocol.mjs.map +1 -1
- package/lib/client.js.map +1 -1
- package/package.json +5 -5
- package/dist/__tests__/dsh-activity-http.test.d.ts +0 -30
- package/dist/__tests__/dsh-activity-http.test.d.ts.map +0 -1
package/dist/protocol.mjs
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
// src/protocol.ts
|
|
2
2
|
var FEDERATION_PROTOCOL_VERSION = 1;
|
|
3
3
|
var FEDERATION_ROUTE_PREFIX = "/forgeax-federation/v1";
|
|
4
|
-
function isFederationCommunityCapability(value) {
|
|
5
|
-
if (typeof value !== "object" || value === null) return false;
|
|
6
|
-
const record = value;
|
|
7
|
-
return typeof record.id === "string" && typeof record.value === "string";
|
|
8
|
-
}
|
|
9
4
|
function isEnginePreviewRequest(value) {
|
|
10
5
|
if (typeof value !== "object" || value === null) return false;
|
|
11
6
|
const record = value;
|
|
@@ -31,6 +26,6 @@ function isEngineProjection(value) {
|
|
|
31
26
|
return record.binding === "embedded" && typeof record.frameId === "number" && typeof record.tick === "number" && typeof record.state === "number";
|
|
32
27
|
}
|
|
33
28
|
|
|
34
|
-
export { FEDERATION_PROTOCOL_VERSION, FEDERATION_ROUTE_PREFIX, isEnginePreviewRequest, isEnginePreviewStatus,
|
|
29
|
+
export { FEDERATION_PROTOCOL_VERSION, FEDERATION_ROUTE_PREFIX, isEnginePreviewRequest, isEnginePreviewStatus, isFederationStatus };
|
|
35
30
|
//# sourceMappingURL=protocol.mjs.map
|
|
36
31
|
//# sourceMappingURL=protocol.mjs.map
|
package/dist/protocol.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/protocol.ts"],"names":[],"mappings":";AAAO,IAAM,2BAAA,GAA8B;AACpC,IAAM,uBAAA,GAA0B;
|
|
1
|
+
{"version":3,"sources":["../src/protocol.ts"],"names":[],"mappings":";AAAO,IAAM,2BAAA,GAA8B;AACpC,IAAM,uBAAA,GAA0B;AAmEhC,SAAS,uBAAuB,KAAA,EAA+C;AACpF,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,MAAM,OAAO,KAAA;AACxD,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,IAAI,MAAA,CAAO,QAAA,KAAa,2BAAA,EAA6B,OAAO,KAAA;AAC5D,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,qBAAA,EAAuB,OAAO,IAAA;AAClD,EAAA,OAAO,MAAA,CAAO,IAAA,KAAS,wBAAA,IAA4B,MAAA,CAAO,MAAA,KAAW,QAAA;AACvE;AAEO,SAAS,sBAAsB,KAAA,EAA8C;AAClF,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,MAAM,OAAO,KAAA;AACxD,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,OACE,MAAA,CAAO,aAAa,2BAAA,IACpB,MAAA,CAAO,SAAS,uBAAA,IAChB,MAAA,CAAO,OAAA,KAAY,UAAA,IACnB,MAAA,CAAO,KAAA,KAAU,QACjB,OAAO,MAAA,CAAO,YAAY,QAAA,IAC1B,OAAO,OAAO,IAAA,KAAS,QAAA,IACvB,OAAO,MAAA,CAAO,KAAA,KAAU,QAAA;AAE5B;AAEO,SAAS,mBAAmB,KAAA,EAA2C;AAC5E,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,MAAM,OAAO,KAAA;AACxD,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,OACE,OAAO,QAAA,KAAa,2BAAA,IACpB,MAAA,CAAO,KAAA,KAAU,SACjB,MAAA,CAAO,KAAA,KAAU,IAAA,IACjB,OAAO,OAAO,QAAA,KAAa,QAAA,IAC3B,KAAA,CAAM,OAAA,CAAQ,OAAO,YAAY,CAAA,IACjC,MAAA,CAAO,YAAA,CAAa,MAAM,CAAC,UAAA,KAAe,OAAO,UAAA,KAAe,QAAQ,CAAA,IACxE,MAAA,CAAO,SAAA,CAAU,MAAA,CAAO,MAAM,CAAA,IAC7B,MAAA,CAAO,UAAqB,CAAA,IAC7B,kBAAA,CAAmB,OAAO,MAAM,CAAA;AAEpC;AAEA,SAAS,mBAAmB,KAAA,EAA2C;AACrE,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,MAAM,OAAO,KAAA;AACxD,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,IAAI,MAAA,CAAO,KAAA,KAAU,IAAA,EAAM,OAAO,KAAA;AAClC,EAAA,IAAI,OAAO,OAAA,KAAY,UAAA,EAAY,OAAO,OAAO,OAAO,QAAA,KAAa,QAAA;AACrE,EAAA,OACE,MAAA,CAAO,OAAA,KAAY,UAAA,IACnB,OAAO,MAAA,CAAO,OAAA,KAAY,QAAA,IAC1B,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,IACvB,OAAO,OAAO,KAAA,KAAU,QAAA;AAE5B","file":"protocol.mjs","sourcesContent":["export const FEDERATION_PROTOCOL_VERSION = 1 as const;\nexport const FEDERATION_ROUTE_PREFIX = '/forgeax-federation/v1' as const;\n\nexport type FederationBinding = 'attach' | 'external' | 'embedded';\nexport type FederationOwnership = 'lease' | 'instance';\n\nexport interface FederationStatus {\n readonly protocol: typeof FEDERATION_PROTOCOL_VERSION;\n readonly identity: string;\n readonly ready: true;\n readonly realm: 'dsh';\n readonly capabilities: readonly string[];\n readonly leases: number;\n readonly engine: EngineProjection;\n}\n\nexport type EngineProjection = EngineEndpointProjection | EmbeddedEngineProjection;\n\nexport interface EngineEndpointProjection {\n readonly binding: 'external';\n readonly endpoint: string;\n readonly ready: true;\n}\n\nexport interface EmbeddedEngineProjection {\n readonly binding: 'embedded';\n readonly ready: true;\n readonly frameId: number;\n readonly tick: number;\n readonly state: number;\n}\n\nexport interface FederationLease {\n readonly leaseId: string;\n}\n\nexport interface FederationCommunityCapability {\n readonly id: string;\n readonly value: string;\n}\n\nexport interface FederationActivityResult {\n readonly output: string;\n}\n\nexport interface EnginePreviewStatus {\n readonly protocol: typeof FEDERATION_PROTOCOL_VERSION;\n readonly kind: 'forgeax-engine-status';\n readonly binding: 'external';\n readonly ready: true;\n readonly frameId: number;\n readonly tick: number;\n readonly state: number;\n}\n\nexport interface EnginePreviewPoll {\n readonly protocol: typeof FEDERATION_PROTOCOL_VERSION;\n readonly kind: 'forgeax-engine-poll';\n}\n\nexport interface EnginePreviewControl {\n readonly protocol: typeof FEDERATION_PROTOCOL_VERSION;\n readonly kind: 'forgeax-engine-control';\n readonly action: 'toggle';\n}\n\nexport type EnginePreviewRequest = EnginePreviewPoll | EnginePreviewControl;\n\nexport function isEnginePreviewRequest(value: unknown): value is EnginePreviewRequest {\n if (typeof value !== 'object' || value === null) return false;\n const record = value as Record<string, unknown>;\n if (record.protocol !== FEDERATION_PROTOCOL_VERSION) return false;\n if (record.kind === 'forgeax-engine-poll') return true;\n return record.kind === 'forgeax-engine-control' && record.action === 'toggle';\n}\n\nexport function isEnginePreviewStatus(value: unknown): value is EnginePreviewStatus {\n if (typeof value !== 'object' || value === null) return false;\n const record = value as Record<string, unknown>;\n return (\n record.protocol === FEDERATION_PROTOCOL_VERSION &&\n record.kind === 'forgeax-engine-status' &&\n record.binding === 'external' &&\n record.ready === true &&\n typeof record.frameId === 'number' &&\n typeof record.tick === 'number' &&\n typeof record.state === 'number'\n );\n}\n\nexport function isFederationStatus(value: unknown): value is FederationStatus {\n if (typeof value !== 'object' || value === null) return false;\n const record = value as Record<string, unknown>;\n return (\n record.protocol === FEDERATION_PROTOCOL_VERSION &&\n record.realm === 'dsh' &&\n record.ready === true &&\n typeof record.identity === 'string' &&\n Array.isArray(record.capabilities) &&\n record.capabilities.every((capability) => typeof capability === 'string') &&\n Number.isInteger(record.leases) &&\n (record.leases as number) >= 0 &&\n isEngineProjection(record.engine)\n );\n}\n\nfunction isEngineProjection(value: unknown): value is EngineProjection {\n if (typeof value !== 'object' || value === null) return false;\n const record = value as Record<string, unknown>;\n if (record.ready !== true) return false;\n if (record.binding === 'external') return typeof record.endpoint === 'string';\n return (\n record.binding === 'embedded' &&\n typeof record.frameId === 'number' &&\n typeof record.tick === 'number' &&\n typeof record.state === 'number'\n );\n}\n"]}
|
package/lib/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client.tsx","../src/protocol.ts"],"sourcesContent":["import type React from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport {\n type EnginePreviewStatus,\n FEDERATION_PROTOCOL_VERSION,\n FEDERATION_ROUTE_PREFIX,\n type FederationStatus,\n isEnginePreviewStatus,\n isFederationStatus,\n} from './protocol';\n\ninterface SlotService {\n inject(name: string, callback: () => () => void): void;\n register(options: Readonly<Record<string, unknown>>, component: React.ComponentType): () => void;\n}\n\ninterface ClientContext {\n readonly slots: SlotService;\n}\n\nexport const inject = ['slots'];\n\nexport function apply(ctx: ClientContext): void {\n ctx.slots.inject('shell.overlay', () =>\n ctx.slots.register(\n {\n name: 'shell.overlay',\n id: 'forgeax-engine',\n order: 80,\n label: 'ForgeaX Engine',\n },\n ForgeaXPanel,\n ),\n );\n}\n\nfunction ForgeaXPanel(): React.JSX.Element {\n const [open, setOpen] = useState(true);\n const [realm, setRealm] = useState<FederationStatus>();\n const [engine, setEngine] = useState<EnginePreviewStatus>();\n const iframe = useRef<HTMLIFrameElement>(null);\n\n const readRealm = useCallback(async (): Promise<void> => {\n const response = await fetch(`${FEDERATION_ROUTE_PREFIX}/status`, { cache: 'no-store' });\n if (!response.ok) return;\n const value: unknown = await response.json();\n if (isFederationStatus(value)) setRealm(value);\n }, []);\n\n const engineEndpoint = realm?.engine.binding === 'external' ? realm.engine.endpoint : undefined;\n\n useEffect(() => {\n if (!open) return;\n void readRealm();\n const realmTimer = window.setInterval(() => void readRealm(), 1_000);\n return () => window.clearInterval(realmTimer);\n }, [open, readRealm]);\n\n useEffect(() => {\n if (!open || engineEndpoint === undefined) return;\n const pollTimer = window.setInterval(() => {\n const target = iframe.current?.contentWindow;\n if (target == null) return;\n target.postMessage(\n { protocol: FEDERATION_PROTOCOL_VERSION, kind: 'forgeax-engine-poll' },\n new URL(engineEndpoint).origin,\n );\n }, 250);\n const onMessage = (event: MessageEvent): void => {\n if (event.source !== iframe.current?.contentWindow || !isEnginePreviewStatus(event.data))\n return;\n setEngine(event.data);\n };\n window.addEventListener('message', onMessage);\n return () => {\n window.clearInterval(pollTimer);\n window.removeEventListener('message', onMessage);\n };\n }, [engineEndpoint, open]);\n\n const control = (): void => {\n if (realm?.engine.binding === 'external') {\n iframe.current?.contentWindow?.postMessage(\n {\n protocol: FEDERATION_PROTOCOL_VERSION,\n kind: 'forgeax-engine-control',\n action: 'toggle',\n },\n new URL(realm.engine.endpoint).origin,\n );\n return;\n }\n void fetch(`${FEDERATION_ROUTE_PREFIX}/engine/control`, { method: 'POST' }).then(() =>\n readRealm(),\n );\n };\n\n const projection =\n realm?.engine.binding === 'external'\n ? engine\n : realm?.engine.binding === 'embedded'\n ? realm.engine\n : undefined;\n\n return (\n <section\n data-forgeax-panel=\"mounted\"\n style={{\n position: 'fixed',\n right: 18,\n bottom: 18,\n zIndex: 100,\n width: open ? 680 : 210,\n border: '1px solid rgba(94, 234, 212, 0.42)',\n borderRadius: 16,\n overflow: 'hidden',\n color: '#e6fffb',\n background: 'rgba(5, 14, 25, 0.96)',\n boxShadow: '0 24px 70px rgba(0, 0, 0, 0.55)',\n pointerEvents: 'auto',\n fontFamily: 'ui-sans-serif, system-ui, sans-serif',\n }}\n >\n <header\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '11px 14px',\n background: 'linear-gradient(90deg, rgba(13,148,136,.28), rgba(37,99,235,.18))',\n }}\n >\n <div>\n <strong style={{ fontSize: 14 }}>ForgeaX Engine</strong>\n <span\n data-forgeax-ready={realm?.ready === true ? 'true' : 'false'}\n style={{\n marginLeft: 9,\n color: realm?.ready === true ? '#5eead4' : '#fbbf24',\n fontSize: 12,\n }}\n >\n {realm?.ready === true ? '● bridge ready' : '○ connecting'}\n </span>\n </div>\n <button type=\"button\" onClick={() => setOpen((value) => !value)} style={buttonStyle}>\n {open ? 'Hide preview' : 'Show preview'}\n </button>\n </header>\n {open ? (\n <div style={{ padding: 12 }}>\n <div\n data-forgeax-status=\"live\"\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(4, 1fr)',\n gap: 8,\n marginBottom: 10,\n }}\n >\n <Fact label=\"binding\" value={realm?.engine.binding ?? 'pending'} />\n <Fact label=\"frameId\" value={String(projection?.frameId ?? 0)} />\n <Fact label=\"tick\" value={String(projection?.tick ?? 0)} />\n <Fact label=\"state\" value={String(projection?.state ?? 0)} />\n </div>\n {engineEndpoint !== undefined ? (\n <iframe\n ref={iframe}\n data-forgeax-engine-frame=\"real\"\n src={engineEndpoint}\n title=\"Running ForgeaX Engine\"\n onLoad={() => {\n iframe.current?.contentWindow?.postMessage(\n { protocol: FEDERATION_PROTOCOL_VERSION, kind: 'forgeax-engine-poll' },\n new URL(engineEndpoint).origin,\n );\n }}\n style={{\n display: 'block',\n width: '100%',\n height: 390,\n border: '1px solid rgba(148,163,184,.25)',\n borderRadius: 10,\n background: '#020617',\n }}\n />\n ) : (\n <div\n data-forgeax-headless=\"true\"\n style={{\n display: 'grid',\n placeItems: 'center',\n height: 180,\n borderRadius: 10,\n color: '#94a3b8',\n background: 'radial-gradient(circle at center, #123047, #020617 70%)',\n }}\n >\n Embedded headless Engine · no placeholder pixels\n </div>\n )}\n <footer\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginTop: 10,\n }}\n >\n <span style={{ color: '#94a3b8', fontSize: 12 }}>\n DSH native Loader · lease {realm?.leases ?? 0} · protocol {realm?.protocol ?? '–'}\n </span>\n <button\n data-forgeax-control=\"toggle\"\n type=\"button\"\n onClick={control}\n style={buttonStyle}\n >\n Toggle Engine state\n </button>\n </footer>\n </div>\n ) : null}\n </section>\n );\n}\n\nfunction Fact({\n label,\n value,\n}: {\n readonly label: string;\n readonly value: string;\n}): React.JSX.Element {\n return (\n <div style={{ padding: '7px 9px', borderRadius: 8, background: 'rgba(15, 23, 42, .9)' }}>\n <div\n style={{\n color: '#64748b',\n fontSize: 10,\n textTransform: 'uppercase',\n letterSpacing: '.08em',\n }}\n >\n {label}\n </div>\n <div style={{ color: '#f8fafc', fontSize: 13, fontVariantNumeric: 'tabular-nums' }}>\n {value}\n </div>\n </div>\n );\n}\n\nconst buttonStyle: React.CSSProperties = {\n padding: '6px 10px',\n border: '1px solid rgba(94,234,212,.35)',\n borderRadius: 8,\n color: '#ccfbf1',\n background: 'rgba(15,118,110,.25)',\n cursor: 'pointer',\n fontSize: 12,\n};\n","export const FEDERATION_PROTOCOL_VERSION = 1 as const;\nexport const FEDERATION_ROUTE_PREFIX = '/forgeax-federation/v1' as const;\n\nexport type FederationBinding = 'attach' | 'external' | 'embedded';\nexport type FederationOwnership = 'lease' | 'instance';\n\nexport interface FederationStatus {\n readonly protocol: typeof FEDERATION_PROTOCOL_VERSION;\n readonly identity: string;\n readonly ready: true;\n readonly realm: 'dsh';\n readonly capabilities: readonly string[];\n readonly leases: number;\n readonly engine: EngineProjection;\n}\n\nexport type EngineProjection = EngineEndpointProjection | EmbeddedEngineProjection;\n\nexport interface EngineEndpointProjection {\n readonly binding: 'external';\n readonly endpoint: string;\n readonly ready: true;\n}\n\nexport interface EmbeddedEngineProjection {\n readonly binding: 'embedded';\n readonly ready: true;\n readonly frameId: number;\n readonly tick: number;\n readonly state: number;\n}\n\nexport interface FederationLease {\n readonly leaseId: string;\n}\n\nexport interface FederationCommunityCapability {\n readonly id: string;\n readonly value: string;\n}\n\nexport interface FederationActivityResult {\n readonly output: string;\n}\n\nexport function isFederationCommunityCapability(\n value: unknown,\n): value is FederationCommunityCapability {\n if (typeof value !== 'object' || value === null) return false;\n const record = value as Record<string, unknown>;\n return typeof record.id === 'string' && typeof record.value === 'string';\n}\n\nexport interface EnginePreviewStatus {\n readonly protocol: typeof FEDERATION_PROTOCOL_VERSION;\n readonly kind: 'forgeax-engine-status';\n readonly binding: 'external';\n readonly ready: true;\n readonly frameId: number;\n readonly tick: number;\n readonly state: number;\n}\n\nexport interface EnginePreviewPoll {\n readonly protocol: typeof FEDERATION_PROTOCOL_VERSION;\n readonly kind: 'forgeax-engine-poll';\n}\n\nexport interface EnginePreviewControl {\n readonly protocol: typeof FEDERATION_PROTOCOL_VERSION;\n readonly kind: 'forgeax-engine-control';\n readonly action: 'toggle';\n}\n\nexport type EnginePreviewRequest = EnginePreviewPoll | EnginePreviewControl;\n\nexport function isEnginePreviewRequest(value: unknown): value is EnginePreviewRequest {\n if (typeof value !== 'object' || value === null) return false;\n const record = value as Record<string, unknown>;\n if (record.protocol !== FEDERATION_PROTOCOL_VERSION) return false;\n if (record.kind === 'forgeax-engine-poll') return true;\n return record.kind === 'forgeax-engine-control' && record.action === 'toggle';\n}\n\nexport function isEnginePreviewStatus(value: unknown): value is EnginePreviewStatus {\n if (typeof value !== 'object' || value === null) return false;\n const record = value as Record<string, unknown>;\n return (\n record.protocol === FEDERATION_PROTOCOL_VERSION &&\n record.kind === 'forgeax-engine-status' &&\n record.binding === 'external' &&\n record.ready === true &&\n typeof record.frameId === 'number' &&\n typeof record.tick === 'number' &&\n typeof record.state === 'number'\n );\n}\n\nexport function isFederationStatus(value: unknown): value is FederationStatus {\n if (typeof value !== 'object' || value === null) return false;\n const record = value as Record<string, unknown>;\n return (\n record.protocol === FEDERATION_PROTOCOL_VERSION &&\n record.realm === 'dsh' &&\n record.ready === true &&\n typeof record.identity === 'string' &&\n Array.isArray(record.capabilities) &&\n record.capabilities.every((capability) => typeof capability === 'string') &&\n Number.isInteger(record.leases) &&\n (record.leases as number) >= 0 &&\n isEngineProjection(record.engine)\n );\n}\n\nfunction isEngineProjection(value: unknown): value is EngineProjection {\n if (typeof value !== 'object' || value === null) return false;\n const record = value as Record<string, unknown>;\n if (record.ready !== true) return false;\n if (record.binding === 'external') return typeof record.endpoint === 'string';\n return (\n record.binding === 'embedded' &&\n typeof record.frameId === 'number' &&\n typeof record.tick === 'number' &&\n typeof record.state === 'number'\n );\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/client.tsx","../src/protocol.ts"],"sourcesContent":["import type React from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport {\n type EnginePreviewStatus,\n FEDERATION_PROTOCOL_VERSION,\n FEDERATION_ROUTE_PREFIX,\n type FederationStatus,\n isEnginePreviewStatus,\n isFederationStatus,\n} from './protocol';\n\ninterface SlotService {\n inject(name: string, callback: () => () => void): void;\n register(options: Readonly<Record<string, unknown>>, component: React.ComponentType): () => void;\n}\n\ninterface ClientContext {\n readonly slots: SlotService;\n}\n\nexport const inject = ['slots'];\n\nexport function apply(ctx: ClientContext): void {\n ctx.slots.inject('shell.overlay', () =>\n ctx.slots.register(\n {\n name: 'shell.overlay',\n id: 'forgeax-engine',\n order: 80,\n label: 'ForgeaX Engine',\n },\n ForgeaXPanel,\n ),\n );\n}\n\nfunction ForgeaXPanel(): React.JSX.Element {\n const [open, setOpen] = useState(true);\n const [realm, setRealm] = useState<FederationStatus>();\n const [engine, setEngine] = useState<EnginePreviewStatus>();\n const iframe = useRef<HTMLIFrameElement>(null);\n\n const readRealm = useCallback(async (): Promise<void> => {\n const response = await fetch(`${FEDERATION_ROUTE_PREFIX}/status`, { cache: 'no-store' });\n if (!response.ok) return;\n const value: unknown = await response.json();\n if (isFederationStatus(value)) setRealm(value);\n }, []);\n\n const engineEndpoint = realm?.engine.binding === 'external' ? realm.engine.endpoint : undefined;\n\n useEffect(() => {\n if (!open) return;\n void readRealm();\n const realmTimer = window.setInterval(() => void readRealm(), 1_000);\n return () => window.clearInterval(realmTimer);\n }, [open, readRealm]);\n\n useEffect(() => {\n if (!open || engineEndpoint === undefined) return;\n const pollTimer = window.setInterval(() => {\n const target = iframe.current?.contentWindow;\n if (target == null) return;\n target.postMessage(\n { protocol: FEDERATION_PROTOCOL_VERSION, kind: 'forgeax-engine-poll' },\n new URL(engineEndpoint).origin,\n );\n }, 250);\n const onMessage = (event: MessageEvent): void => {\n if (event.source !== iframe.current?.contentWindow || !isEnginePreviewStatus(event.data))\n return;\n setEngine(event.data);\n };\n window.addEventListener('message', onMessage);\n return () => {\n window.clearInterval(pollTimer);\n window.removeEventListener('message', onMessage);\n };\n }, [engineEndpoint, open]);\n\n const control = (): void => {\n if (realm?.engine.binding === 'external') {\n iframe.current?.contentWindow?.postMessage(\n {\n protocol: FEDERATION_PROTOCOL_VERSION,\n kind: 'forgeax-engine-control',\n action: 'toggle',\n },\n new URL(realm.engine.endpoint).origin,\n );\n return;\n }\n void fetch(`${FEDERATION_ROUTE_PREFIX}/engine/control`, { method: 'POST' }).then(() =>\n readRealm(),\n );\n };\n\n const projection =\n realm?.engine.binding === 'external'\n ? engine\n : realm?.engine.binding === 'embedded'\n ? realm.engine\n : undefined;\n\n return (\n <section\n data-forgeax-panel=\"mounted\"\n style={{\n position: 'fixed',\n right: 18,\n bottom: 18,\n zIndex: 100,\n width: open ? 680 : 210,\n border: '1px solid rgba(94, 234, 212, 0.42)',\n borderRadius: 16,\n overflow: 'hidden',\n color: '#e6fffb',\n background: 'rgba(5, 14, 25, 0.96)',\n boxShadow: '0 24px 70px rgba(0, 0, 0, 0.55)',\n pointerEvents: 'auto',\n fontFamily: 'ui-sans-serif, system-ui, sans-serif',\n }}\n >\n <header\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '11px 14px',\n background: 'linear-gradient(90deg, rgba(13,148,136,.28), rgba(37,99,235,.18))',\n }}\n >\n <div>\n <strong style={{ fontSize: 14 }}>ForgeaX Engine</strong>\n <span\n data-forgeax-ready={realm?.ready === true ? 'true' : 'false'}\n style={{\n marginLeft: 9,\n color: realm?.ready === true ? '#5eead4' : '#fbbf24',\n fontSize: 12,\n }}\n >\n {realm?.ready === true ? '● bridge ready' : '○ connecting'}\n </span>\n </div>\n <button type=\"button\" onClick={() => setOpen((value) => !value)} style={buttonStyle}>\n {open ? 'Hide preview' : 'Show preview'}\n </button>\n </header>\n {open ? (\n <div style={{ padding: 12 }}>\n <div\n data-forgeax-status=\"live\"\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(4, 1fr)',\n gap: 8,\n marginBottom: 10,\n }}\n >\n <Fact label=\"binding\" value={realm?.engine.binding ?? 'pending'} />\n <Fact label=\"frameId\" value={String(projection?.frameId ?? 0)} />\n <Fact label=\"tick\" value={String(projection?.tick ?? 0)} />\n <Fact label=\"state\" value={String(projection?.state ?? 0)} />\n </div>\n {engineEndpoint !== undefined ? (\n <iframe\n ref={iframe}\n data-forgeax-engine-frame=\"real\"\n src={engineEndpoint}\n title=\"Running ForgeaX Engine\"\n onLoad={() => {\n iframe.current?.contentWindow?.postMessage(\n { protocol: FEDERATION_PROTOCOL_VERSION, kind: 'forgeax-engine-poll' },\n new URL(engineEndpoint).origin,\n );\n }}\n style={{\n display: 'block',\n width: '100%',\n height: 390,\n border: '1px solid rgba(148,163,184,.25)',\n borderRadius: 10,\n background: '#020617',\n }}\n />\n ) : (\n <div\n data-forgeax-headless=\"true\"\n style={{\n display: 'grid',\n placeItems: 'center',\n height: 180,\n borderRadius: 10,\n color: '#94a3b8',\n background: 'radial-gradient(circle at center, #123047, #020617 70%)',\n }}\n >\n Embedded headless Engine · no placeholder pixels\n </div>\n )}\n <footer\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginTop: 10,\n }}\n >\n <span style={{ color: '#94a3b8', fontSize: 12 }}>\n DSH native Loader · lease {realm?.leases ?? 0} · protocol {realm?.protocol ?? '–'}\n </span>\n <button\n data-forgeax-control=\"toggle\"\n type=\"button\"\n onClick={control}\n style={buttonStyle}\n >\n Toggle Engine state\n </button>\n </footer>\n </div>\n ) : null}\n </section>\n );\n}\n\nfunction Fact({\n label,\n value,\n}: {\n readonly label: string;\n readonly value: string;\n}): React.JSX.Element {\n return (\n <div style={{ padding: '7px 9px', borderRadius: 8, background: 'rgba(15, 23, 42, .9)' }}>\n <div\n style={{\n color: '#64748b',\n fontSize: 10,\n textTransform: 'uppercase',\n letterSpacing: '.08em',\n }}\n >\n {label}\n </div>\n <div style={{ color: '#f8fafc', fontSize: 13, fontVariantNumeric: 'tabular-nums' }}>\n {value}\n </div>\n </div>\n );\n}\n\nconst buttonStyle: React.CSSProperties = {\n padding: '6px 10px',\n border: '1px solid rgba(94,234,212,.35)',\n borderRadius: 8,\n color: '#ccfbf1',\n background: 'rgba(15,118,110,.25)',\n cursor: 'pointer',\n fontSize: 12,\n};\n","export const FEDERATION_PROTOCOL_VERSION = 1 as const;\nexport const FEDERATION_ROUTE_PREFIX = '/forgeax-federation/v1' as const;\n\nexport type FederationBinding = 'attach' | 'external' | 'embedded';\nexport type FederationOwnership = 'lease' | 'instance';\n\nexport interface FederationStatus {\n readonly protocol: typeof FEDERATION_PROTOCOL_VERSION;\n readonly identity: string;\n readonly ready: true;\n readonly realm: 'dsh';\n readonly capabilities: readonly string[];\n readonly leases: number;\n readonly engine: EngineProjection;\n}\n\nexport type EngineProjection = EngineEndpointProjection | EmbeddedEngineProjection;\n\nexport interface EngineEndpointProjection {\n readonly binding: 'external';\n readonly endpoint: string;\n readonly ready: true;\n}\n\nexport interface EmbeddedEngineProjection {\n readonly binding: 'embedded';\n readonly ready: true;\n readonly frameId: number;\n readonly tick: number;\n readonly state: number;\n}\n\nexport interface FederationLease {\n readonly leaseId: string;\n}\n\nexport interface FederationCommunityCapability {\n readonly id: string;\n readonly value: string;\n}\n\nexport interface FederationActivityResult {\n readonly output: string;\n}\n\nexport interface EnginePreviewStatus {\n readonly protocol: typeof FEDERATION_PROTOCOL_VERSION;\n readonly kind: 'forgeax-engine-status';\n readonly binding: 'external';\n readonly ready: true;\n readonly frameId: number;\n readonly tick: number;\n readonly state: number;\n}\n\nexport interface EnginePreviewPoll {\n readonly protocol: typeof FEDERATION_PROTOCOL_VERSION;\n readonly kind: 'forgeax-engine-poll';\n}\n\nexport interface EnginePreviewControl {\n readonly protocol: typeof FEDERATION_PROTOCOL_VERSION;\n readonly kind: 'forgeax-engine-control';\n readonly action: 'toggle';\n}\n\nexport type EnginePreviewRequest = EnginePreviewPoll | EnginePreviewControl;\n\nexport function isEnginePreviewRequest(value: unknown): value is EnginePreviewRequest {\n if (typeof value !== 'object' || value === null) return false;\n const record = value as Record<string, unknown>;\n if (record.protocol !== FEDERATION_PROTOCOL_VERSION) return false;\n if (record.kind === 'forgeax-engine-poll') return true;\n return record.kind === 'forgeax-engine-control' && record.action === 'toggle';\n}\n\nexport function isEnginePreviewStatus(value: unknown): value is EnginePreviewStatus {\n if (typeof value !== 'object' || value === null) return false;\n const record = value as Record<string, unknown>;\n return (\n record.protocol === FEDERATION_PROTOCOL_VERSION &&\n record.kind === 'forgeax-engine-status' &&\n record.binding === 'external' &&\n record.ready === true &&\n typeof record.frameId === 'number' &&\n typeof record.tick === 'number' &&\n typeof record.state === 'number'\n );\n}\n\nexport function isFederationStatus(value: unknown): value is FederationStatus {\n if (typeof value !== 'object' || value === null) return false;\n const record = value as Record<string, unknown>;\n return (\n record.protocol === FEDERATION_PROTOCOL_VERSION &&\n record.realm === 'dsh' &&\n record.ready === true &&\n typeof record.identity === 'string' &&\n Array.isArray(record.capabilities) &&\n record.capabilities.every((capability) => typeof capability === 'string') &&\n Number.isInteger(record.leases) &&\n (record.leases as number) >= 0 &&\n isEngineProjection(record.engine)\n );\n}\n\nfunction isEngineProjection(value: unknown): value is EngineProjection {\n if (typeof value !== 'object' || value === null) return false;\n const record = value as Record<string, unknown>;\n if (record.ready !== true) return false;\n if (record.binding === 'external') return typeof record.endpoint === 'string';\n return (\n record.binding === 'embedded' &&\n typeof record.frameId === 'number' &&\n typeof record.tick === 'number' &&\n typeof record.state === 'number'\n );\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forgeax/engine-dsh",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -56,10 +56,10 @@
|
|
|
56
56
|
}
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@forgeax/engine-ecs": "0.1.
|
|
60
|
-
"@forgeax/engine-intelligence": "0.1.
|
|
61
|
-
"@forgeax/engine-plugin": "0.1.
|
|
62
|
-
"@forgeax/engine-types": "0.1.
|
|
59
|
+
"@forgeax/engine-ecs": "0.1.7",
|
|
60
|
+
"@forgeax/engine-intelligence": "0.1.7",
|
|
61
|
+
"@forgeax/engine-plugin": "0.1.7",
|
|
62
|
+
"@forgeax/engine-types": "0.1.7"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
65
|
"@types/node": "^20.14.0",
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { type IncomingMessage, type ServerResponse } from 'node:http';
|
|
2
|
-
interface Route {
|
|
3
|
-
readonly kind: 'exact' | 'prefix';
|
|
4
|
-
readonly path: string;
|
|
5
|
-
readonly handler: (request: IncomingMessage, response: ServerResponse) => void | Promise<void>;
|
|
6
|
-
}
|
|
7
|
-
interface WebServer {
|
|
8
|
-
register(route: Route): () => void;
|
|
9
|
-
}
|
|
10
|
-
declare module '@forgeax/engine-plugin' {
|
|
11
|
-
interface EngineContextServices {
|
|
12
|
-
webServer: WebServer;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
interface CommunityCapability {
|
|
16
|
-
inspect(): {
|
|
17
|
-
readonly id: string;
|
|
18
|
-
readonly value: string;
|
|
19
|
-
} | Promise<{
|
|
20
|
-
readonly id: string;
|
|
21
|
-
readonly value: string;
|
|
22
|
-
}>;
|
|
23
|
-
}
|
|
24
|
-
declare module '@forgeax/engine-plugin' {
|
|
25
|
-
interface EngineContextServices {
|
|
26
|
-
forgeaxFederationCapability: CommunityCapability;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
export {};
|
|
30
|
-
//# sourceMappingURL=dsh-activity-http.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dsh-activity-http.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/dsh-activity-http.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EAEpB,KAAK,cAAc,EACpB,MAAM,WAAW,CAAC;AAQnB,UAAU,KAAK;IACb,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChG;AAED,UAAU,SAAS;IACjB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,IAAI,CAAC;CACpC;AAQD,OAAO,QAAQ,wBAAwB,CAAC;IACtC,UAAU,qBAAqB;QAC7B,SAAS,EAAE,SAAS,CAAC;KACtB;CACF;AA4JD,UAAU,mBAAmB;IAC3B,OAAO,IACH;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAC/C,OAAO,CAAC;QACN,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;CACR;AAiBD,OAAO,QAAQ,wBAAwB,CAAC;IACtC,UAAU,qBAAqB;QAC7B,2BAA2B,EAAE,mBAAmB,CAAC;KAClD;CACF"}
|