Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/facade/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# Run `make sync` after every Wippy Web Host version bump to pull fresh copies.

# Web Host CDN base — update version when Wippy Web Host releases
WEB_HOST_CDN = https://web-host.wippy.ai/webcomponents-1.0.49
WEB_HOST_CDN = https://web-host.wippy.ai/webcomponents-1.0.52

# Files to sync from CDN into public/@wippy-fe/
CDN_FILES = loading.js
Expand Down
18 changes: 15 additions & 3 deletions src/facade/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,18 @@ Both entries expose the same `window.initWippyApp(config, rootContainer?)` signa

Leave `fe_mode` at `compat` unless you have a specific reason to opt in — the managed shell omits every piece of default Wippy chrome (no sidebar, no chat wrapper, no right panel) and expects the declaration to provide equivalents.

If you do opt in, use Web Host **1.0.50 or newer** and declare the shipped coordinator:

```yaml
coordinators:
compat:
kind: builtin
id: '@HOST/compat-coordinator'
props: { artifactPanel: right, modalId: artifact-modal, routeSync: true }
```

Below 1.0.50, a child app's `host.openArtifact()` / `startChat()` / `openSession()` / `navigate()` calls fail **silently** in managed mode, and the host URL is not bound to any panel — so deep links, the browser Back button and nav-sidebar clicks change the address bar and render nothing. From 1.0.50 those calls publish intents the coordinator acts on, and the host prints a boot-time table naming anything the declaration has not wired up. See [`managed-layout.md`](https://github.com/wippyai/gen-2-chat/blob/webcomponents/managed-layout.md).

## Vendored CDN files

`public/@wippy-fe/` contains files copied from the Wippy Web Host CDN. These are loaded before the CDN URL is known (pre-config-fetch), so they must be vendored locally.
Expand Down Expand Up @@ -66,7 +78,7 @@ These fields are NOT configurable via requirements — they are computed at runt

| Requirement | Default | Description |
|---|---|---|
| `fe_facade_url` | `https://web-host.wippy.ai/webcomponents-1.0.49` | CDN base URL for the Web Host frontend bundle |
| `fe_facade_url` | `https://web-host.wippy.ai/webcomponents-1.0.52` | CDN base URL for the Web Host frontend bundle |
| `fe_entry_path` | `/iframe.html` | Iframe HTML entry point path (appended to `fe_facade_url`) |
| `fe_mode` | `compat` | `compat` (default — loads `module.js`) or `managed` (loads `managed-layout.js` for declarative multi-panel apps). See [Modes](#modes) above |
| `render_engine` | `iframe` | Global page render engine for packaged `view.page` micro-frontends: `iframe` (default — legacy srcdoc iframe) or `fragment` (Web Fragment / reframed realm reflected into a shadow root). `fragment` **requires** the `wippy/views` fragment gateway and a fragment-capable host bundle serving `/@wippy-fe/proxy-fragment.js`. Flows to the host as `hostConfig.renderEngine`; the child app is engine-agnostic (same package renders under either engine). |
Expand Down Expand Up @@ -378,9 +390,9 @@ Returns an empty body (200 OK) when no variables are configured. Response has `C

```json
{
"facade_url": "https://web-host.wippy.ai/webcomponents-1.0.49",
"facade_url": "https://web-host.wippy.ai/webcomponents-1.0.52",
"iframe_origin": "https://web-host.wippy.ai",
"iframe_url": "https://web-host.wippy.ai/webcomponents-1.0.49/iframe.html?waitForCustomConfig",
"iframe_url": "https://web-host.wippy.ai/webcomponents-1.0.52/iframe.html?waitForCustomConfig",
"login_path": "/login.html",
"login_redirect_param": null,
"env": {
Expand Down
2 changes: 1 addition & 1 deletion src/facade/_index.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ entries:
targets:
- entry: wippy.facade:fe_facade_url
path: .default
default: https://web-host.wippy.ai/webcomponents-1.0.49
default: https://web-host.wippy.ai/webcomponents-1.0.52

- name: fe_entry_path
kind: ns.requirement
Expand Down
4 changes: 2 additions & 2 deletions src/facade/config_handler_test.lua
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ local function define_tests()
end)

test.it("extracts iframe origin from facade URL", function()
local facade_url = "https://web-host.wippy.ai/webcomponents-1.0.49"
local facade_url = "https://web-host.wippy.ai/webcomponents-1.0.52"
local origin = facade_url:match("^(https?://[^/]+)")

test.eq(origin, "https://web-host.wippy.ai")
Expand Down Expand Up @@ -266,7 +266,7 @@ local function define_tests()

test.it("returns all default requirement values", function()
local entry = registry.get(NS .. "fe_facade_url")
test.eq(entry.data.default, "https://front.wippy.ai")
test.eq(entry.data.default, "https://web-host.wippy.ai/webcomponents-1.0.52")

entry = registry.get(NS .. "fe_entry_path")
test.eq(entry.data.default, "/iframe.html")
Expand Down
2 changes: 1 addition & 1 deletion src/facade/test/config_dependency_test.lua
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ local function run()
local entry = registry.get(NS .. "fe_facade_url")
test.not_nil(entry)
test.not_nil(entry.data)
test.eq(entry.data.default, "https://web-host.wippy.ai/webcomponents-1.0.49")
test.eq(entry.data.default, "https://web-host.wippy.ai/webcomponents-1.0.52")

entry = registry.get(NS .. "app_title")
test.not_nil(entry)
Expand Down
Loading