@getmonoceros/workbench 1.38.4 → 1.38.6

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.
@@ -50,4 +50,7 @@ usageNotes:
50
50
  - 'Paths are relative to the container root (`projects/<app>/...`); Monoceros resolves the bind source for you. Do not turn off the deferred start while mounting a repo file - the file would not exist at boot.'
51
51
  - 'Import is one-way: admin-UI changes live in the Keycloak database, not the file. To keep them, export the realm and overwrite the committed JSON.'
52
52
  briefing:
53
- - text: 'Keycloak (identity & access management) runs as service `keycloak`. Reach it at `$KEYCLOAK_URL` (admin user `$KEYCLOAK_USER` / `$KEYCLOAK_PASSWORD`). Realms come from JSON files the project mounts into `/opt/keycloak/data/import`; the database is ephemeral and re-seeds from them on each apply.'
53
+ - text: 'Identity & access management, reached in-container as host `keycloak`. Admin console + API at `$KEYCLOAK_URL` (admin `$KEYCLOAK_USER` / `$KEYCLOAK_PASSWORD`).'
54
+ - text: 'Keycloak auto-imports realms at startup (`--import-realm`) from `/opt/keycloak/data/import`, and its database is ephemeral - it re-seeds from those files on every apply. So keep the realm as a file in the repo at `projects/<app>/keycloak/realm.json`; do NOT configure it by hand in the admin UI, that is lost on the next apply.'
55
+ - text: 'You can create/edit that realm.json, but the bind-mount that feeds it to Keycloak lives in the container yml on the host, which you cannot edit from inside. Tell the user to add this volume to the keycloak service and re-apply: `projects/<app>/keycloak/realm.json:/opt/keycloak/data/import/<app>.json:ro`, then run `monoceros apply <name>` on the host.'
56
+ - text: "In the realm, define a public client (e.g. `<app>-web`) with your app's redirect URIs, and have the frontend reach Keycloak same-origin under `/realms/<realm>` so the issuer follows the request host (works on `.localhost` and over `monoceros share`)."
package/dist/bin.js CHANGED
@@ -2313,6 +2313,9 @@ function serviceDefersStart(name) {
2313
2313
  function curatedServiceExampleVolumes(name) {
2314
2314
  return SERVICE_CATALOG[name]?.exampleVolumes ?? [];
2315
2315
  }
2316
+ function curatedServiceBriefing(name) {
2317
+ return (SERVICE_CATALOG[name]?.briefing ?? []).map((line) => line.text);
2318
+ }
2316
2319
  function resolveService(entry2) {
2317
2320
  return {
2318
2321
  name: entry2.name,
@@ -2474,7 +2477,8 @@ var init_catalog = __esm({
2474
2477
  ...svc.client ? { client: svc.client } : {},
2475
2478
  ...svc.command ? { command: svc.command } : {},
2476
2479
  ...svc.exampleVolumes ? { exampleVolumes: svc.exampleVolumes } : {},
2477
- ...svc.deferStart ? { deferStart: true } : {}
2480
+ ...svc.deferStart ? { deferStart: true } : {},
2481
+ ...c.descriptor.briefing && c.descriptor.briefing.length > 0 ? { briefing: c.descriptor.briefing } : {}
2478
2482
  };
2479
2483
  return [key, entry2];
2480
2484
  })
@@ -4416,6 +4420,11 @@ function generateAgentsMd(input) {
4416
4420
  lines.push("");
4417
4421
  for (const svc of input.services) {
4418
4422
  lines.push(formatServiceLine(svc));
4423
+ for (const brief of curatedServiceBriefing(svc.name)) {
4424
+ for (const sub of brief.split("\n")) {
4425
+ lines.push(sub ? ` ${sub}` : "");
4426
+ }
4427
+ }
4419
4428
  }
4420
4429
  lines.push("");
4421
4430
  const connEnv = serviceConnectionEnv(input.services);
@@ -8996,7 +9005,7 @@ var CLI_VERSION;
8996
9005
  var init_version = __esm({
8997
9006
  "src/version.ts"() {
8998
9007
  "use strict";
8999
- CLI_VERSION = true ? "1.38.4" : "dev";
9008
+ CLI_VERSION = true ? "1.38.6" : "dev";
9000
9009
  }
9001
9010
  });
9002
9011
 
@@ -12767,7 +12776,7 @@ var init_share = __esm({
12767
12776
  meta: {
12768
12777
  name: "share",
12769
12778
  group: "discovery",
12770
- description: "Expose an app's ports to the local network (phone, tablet, other devices) over HTTPS so any device can open it - reached via the host's LAN IP (or `.local` name). TLS is served with a machine-local CA; trust the printed rootCA.pem once per device for warning-free HTTPS (and a working PWA secure context). Every target in the app's launch.json that declares a port is shared. Foreground: Ctrl+C stops sharing. See ADR 0030 and 0033."
12779
+ description: "Expose an app's ports to the local network (phone, tablet, other devices) over HTTPS so any device can open it - reached via the host's LAN IP (or `.local` name). TLS is served with a machine-local CA; trust the printed rootCA.pem once per device for warning-free HTTPS (and a working PWA secure context). Every target in the app's launch.json that declares a port is shared. Foreground: Ctrl+C stops sharing."
12771
12780
  },
12772
12781
  args: {
12773
12782
  name: {
@@ -13448,7 +13457,7 @@ var init_tunnel = __esm({
13448
13457
  meta: {
13449
13458
  name: "tunnel",
13450
13459
  group: "discovery",
13451
- description: "Open a TCP tunnel from the host to a service or port inside the container. Foreground process \u2014 Ctrl+C closes the tunnel. Pass a service name (e.g. `postgres`, `mysql`, `redis`) from the container yml or a bare in-container port number. See ADR 0009."
13460
+ description: "Open a TCP tunnel from the host to a service or port inside the container. Foreground process \u2014 Ctrl+C closes the tunnel. Pass a service name (e.g. `postgres`, `mysql`, `redis`) from the container yml or a bare in-container port number."
13452
13461
  },
13453
13462
  args: {
13454
13463
  name: {