@getmonoceros/workbench 1.38.3 → 1.38.5
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: '
|
|
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,
|
|
@@ -2418,7 +2421,7 @@ var init_catalog = __esm({
|
|
|
2418
2421
|
override = process.env.MONOCEROS_BASE_IMAGE_OVERRIDE?.trim();
|
|
2419
2422
|
BASE_IMAGE = override && override.length > 0 ? override : DEFAULT_BASE_IMAGE;
|
|
2420
2423
|
RUNTIME_IMAGE_REPO = "ghcr.io/getmonoceros/monoceros-runtime";
|
|
2421
|
-
DEFAULT_RUNTIME_VERSION = true ? "1.6.
|
|
2424
|
+
DEFAULT_RUNTIME_VERSION = true ? "1.6.1" : readFileSync3(
|
|
2422
2425
|
fileURLToPath2(
|
|
2423
2426
|
new URL("../../../../images/runtime/VERSION", import.meta.url)
|
|
2424
2427
|
),
|
|
@@ -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);
|
|
@@ -4626,7 +4635,7 @@ function generateAgentsMd(input) {
|
|
|
4626
4635
|
lines.push("");
|
|
4627
4636
|
lines.push("```json");
|
|
4628
4637
|
lines.push("{");
|
|
4629
|
-
lines.push(' "
|
|
4638
|
+
lines.push(' "targets": [');
|
|
4630
4639
|
lines.push(
|
|
4631
4640
|
` { "name": "web", "command": "<the project's start command>", "port": ${examplePort}, "default": true }`
|
|
4632
4641
|
);
|
|
@@ -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.
|
|
9008
|
+
CLI_VERSION = true ? "1.38.5" : "dev";
|
|
9000
9009
|
}
|
|
9001
9010
|
});
|
|
9002
9011
|
|
|
@@ -9246,11 +9255,12 @@ function validate(parsed, where) {
|
|
|
9246
9255
|
throw new Error(`${where}: expected a JSON object`);
|
|
9247
9256
|
}
|
|
9248
9257
|
const obj = parsed;
|
|
9249
|
-
|
|
9250
|
-
|
|
9258
|
+
const rawList = Array.isArray(obj.targets) ? obj.targets : Array.isArray(obj.configurations) ? obj.configurations : null;
|
|
9259
|
+
if (!rawList) {
|
|
9260
|
+
throw new Error(`${where}: missing "targets" array`);
|
|
9251
9261
|
}
|
|
9252
9262
|
const seen = /* @__PURE__ */ new Set();
|
|
9253
|
-
const configurations =
|
|
9263
|
+
const configurations = rawList.map((raw, i) => {
|
|
9254
9264
|
if (typeof raw !== "object" || raw === null) {
|
|
9255
9265
|
throw new Error(`${where}: configuration #${i} is not an object`);
|
|
9256
9266
|
}
|