openmates 0.20.0-alpha.0 → 0.20.0-alpha.1

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.
@@ -30521,6 +30521,51 @@ function containsBoundedWebResult(value) {
30521
30521
  return Object.values(record2).some(containsBoundedWebResult);
30522
30522
  }
30523
30523
 
30524
+ // src/releaseChannel.ts
30525
+ var RELEASES_URL = "https://api.github.com/repos/glowingkitty/OpenMates/releases?per_page=100";
30526
+ var EXACT_RELEASE_TAG = /^v(\d+)\.(\d+)\.(\d+)$/;
30527
+ function selectLatestStableReleaseTag(payload) {
30528
+ if (!Array.isArray(payload)) throw new Error("GitHub returned invalid release metadata.");
30529
+ const candidates = payload.flatMap((item) => {
30530
+ if (!item || typeof item !== "object") return [];
30531
+ const release2 = item;
30532
+ if (release2.draft !== false || typeof release2.tag_name !== "string") return [];
30533
+ const match = EXACT_RELEASE_TAG.exec(release2.tag_name);
30534
+ return match ? [{ tag: release2.tag_name, version: match.slice(1).map((part) => Number(part)) }] : [];
30535
+ });
30536
+ candidates.sort((left, right) => {
30537
+ for (let index = 0; index < 3; index += 1) {
30538
+ const difference = right.version[index] - left.version[index];
30539
+ if (difference !== 0) return difference;
30540
+ }
30541
+ return 0;
30542
+ });
30543
+ if (!candidates[0]) {
30544
+ throw new Error("No verified stable OpenMates release is published on GitHub.");
30545
+ }
30546
+ return candidates[0].tag;
30547
+ }
30548
+ async function resolveStableImageTag(fetcher = fetch) {
30549
+ let response;
30550
+ try {
30551
+ response = await fetcher(RELEASES_URL, {
30552
+ headers: {
30553
+ Accept: "application/vnd.github+json",
30554
+ "User-Agent": "openmates-cli"
30555
+ },
30556
+ signal: AbortSignal.timeout(15e3)
30557
+ });
30558
+ } catch (error) {
30559
+ throw new Error(
30560
+ `Could not resolve the stable OpenMates release from GitHub: ${error instanceof Error ? error.message : String(error)}`
30561
+ );
30562
+ }
30563
+ if (!response.ok) {
30564
+ throw new Error(`Could not resolve the stable OpenMates release from GitHub (HTTP ${response.status}).`);
30565
+ }
30566
+ return selectLatestStableReleaseTag(await response.json());
30567
+ }
30568
+
30524
30569
  // src/server.ts
30525
30570
  var SOURCE_COMPOSE_FILE = join11("backend", "core", "docker-compose.yml");
30526
30571
  var ROLE_IMAGE_COMPOSE_FILES = {
@@ -30555,7 +30600,7 @@ var ENV_BACKUP_PREFIX = ".env.openmates-backup-";
30555
30600
  var ENV_BACKUP_RETENTION_COUNT = 5;
30556
30601
  var BACKUP_FORMAT_VERSION = 2;
30557
30602
  var IMAGE_CHANNEL_TAGS = {
30558
- stable: MAIN_BRANCH,
30603
+ stable: "stable",
30559
30604
  main: MAIN_BRANCH,
30560
30605
  dev: DEV_BRANCH
30561
30606
  };
@@ -30998,7 +31043,8 @@ function getPackageVersion() {
30998
31043
  }
30999
31044
  }
31000
31045
  function getDefaultImageTagForVersion(version) {
31001
- return version ? `v${version}` : DEV_BRANCH;
31046
+ if (!version) return DEV_BRANCH;
31047
+ return /-(alpha|beta|rc)(\.|\d|$)/.test(version) ? `v${version}` : "stable";
31002
31048
  }
31003
31049
  function getDefaultImageTag() {
31004
31050
  const version = getPackageVersion();
@@ -31008,13 +31054,14 @@ function defaultTemplateRefForVersion(version) {
31008
31054
  return /-(alpha|beta|rc)(\.|\d|$)/.test(version) ? DEV_BRANCH : `v${version}`;
31009
31055
  }
31010
31056
  function templateRefForImageTag(imageTag, packageVersion = "") {
31057
+ if (imageTag === "stable") return MAIN_BRANCH;
31011
31058
  const channelTag = IMAGE_CHANNEL_TAGS[imageTag];
31012
31059
  if (channelTag) return channelTag;
31013
31060
  if (imageTag.startsWith("v")) return defaultTemplateRefForVersion(imageTag.slice(1));
31014
31061
  if (!imageTag && packageVersion) return defaultTemplateRefForVersion(packageVersion);
31015
31062
  return DEV_BRANCH;
31016
31063
  }
31017
- function resolveTargetImageTag(flags, currentTag, packageVersion) {
31064
+ function resolveTargetImageTag(flags, currentTag, _packageVersion) {
31018
31065
  const imageTag = flags["image-tag"];
31019
31066
  const channel = flags.channel;
31020
31067
  if (imageTag === true) {
@@ -31041,7 +31088,7 @@ function resolveTargetImageTag(flags, currentTag, packageVersion) {
31041
31088
  }
31042
31089
  const installedChannel = IMAGE_CHANNEL_TAGS[currentTag];
31043
31090
  if (installedChannel) return { tag: installedChannel, channel: installedChannel };
31044
- return { tag: getDefaultImageTagForVersion(packageVersion) };
31091
+ return { tag: "stable", channel: "stable" };
31045
31092
  }
31046
31093
  function randomHex(bytes) {
31047
31094
  return randomBytes8(bytes).toString("hex");
@@ -32250,7 +32297,8 @@ async function serverInstall(flags) {
32250
32297
  copyFileSync2(envSource, join11(installPath, ".env"));
32251
32298
  console.error(`Copied ${envSource} to ${installPath}/.env`);
32252
32299
  }
32253
- const imageTag = typeof flags["image-tag"] === "string" ? flags["image-tag"] : getDefaultImageTag();
32300
+ const requestedImageTag = typeof flags["image-tag"] === "string" ? flags["image-tag"] : getDefaultImageTag();
32301
+ const imageTag = requestedImageTag === "stable" ? await resolveStableImageTag() : requestedImageTag;
32254
32302
  console.error(`Preparing OpenMates image-mode install at ${installPath}...`);
32255
32303
  await writeImageModeRuntimeFiles(installPath, imageTag, role);
32256
32304
  const overlay2 = writeDeploymentModeEnv(installPath, deploymentMode, requestedOverlayPath);
@@ -32271,6 +32319,7 @@ async function serverInstall(flags) {
32271
32319
  deploymentMode,
32272
32320
  openMatesCloudOverlayPath: overlay2.overlayPath ?? void 0,
32273
32321
  imageTag,
32322
+ imageChannel: requestedImageTag === "stable" ? "stable" : void 0,
32274
32323
  ...cliUrls2
32275
32324
  });
32276
32325
  try {
@@ -32381,7 +32430,7 @@ CLI default API: ${cliUrls.apiUrl}`);
32381
32430
  async function installContinuousUpdateService(flags) {
32382
32431
  const config = loadServerConfig();
32383
32432
  const role = getServerRole(flags, config);
32384
- const channel = typeof flags.channel === "string" ? flags.channel : config?.imageChannel ?? "main";
32433
+ const channel = typeof flags.channel === "string" ? flags.channel : config?.imageChannel ?? "stable";
32385
32434
  const window = typeof flags.window === "string" ? flags.window : "02:00-04:00 UTC";
32386
32435
  const plan = planContinuousUpdateService({ role, channel, window });
32387
32436
  const servicePath = join11("/etc", "systemd", "system", plan.serviceName);
@@ -32735,7 +32784,8 @@ async function serverUpdate(client, rest, flags) {
32735
32784
  console.error("Updating OpenMates...");
32736
32785
  if (installMode === "image") {
32737
32786
  const currentTag = getImageTagFromEnv(installPath, config);
32738
- const target = resolveTargetImageTag(flags, currentTag, getPackageVersion());
32787
+ const requestedTarget = resolveTargetImageTag(flags, currentTag, getPackageVersion());
32788
+ const target = requestedTarget.channel === "stable" ? { ...requestedTarget, tag: await resolveStableImageTag() } : requestedTarget;
32739
32789
  const templateRef = templateRefForImageTag(target.tag, getPackageVersion());
32740
32790
  const sourceLinks = targetSourceLinks(target.tag, templateRef);
32741
32791
  const safetyPlan = planUpdate({ role, selectedServices, dryRun, skipBackup: flags["skip-backup"] === true, continuous: false, missingRequiredSecrets: missingOrUnverifiedSecrets });
package/dist/cli.js CHANGED
@@ -13,7 +13,7 @@ import {
13
13
  serializeToYaml,
14
14
  shouldRequireTrustedAccountGuard,
15
15
  waitForWorkflowRun
16
- } from "./chunk-2PETDZ4J.js";
16
+ } from "./chunk-SVQF3GDG.js";
17
17
  import "./chunk-IWKP55ZB.js";
18
18
  import "./chunk-BBKJZ23O.js";
19
19
  export {
package/dist/index.js CHANGED
@@ -42,7 +42,7 @@ import {
42
42
  selectAssistantMessagesForSpeech,
43
43
  serializeToYaml,
44
44
  summarizeAssistantSpeech
45
- } from "./chunk-2PETDZ4J.js";
45
+ } from "./chunk-SVQF3GDG.js";
46
46
  import "./chunk-IWKP55ZB.js";
47
47
  import "./chunk-BBKJZ23O.js";
48
48
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openmates",
3
- "version": "0.20.0-alpha.0",
3
+ "version": "0.20.0-alpha.1",
4
4
  "description": "OpenMates CLI and SDK",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",