@m8t-stack/cli 0.2.26 → 0.2.28

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/dist/cli.js CHANGED
@@ -931,7 +931,7 @@ var init_foundry_agents = __esm({
931
931
  "use strict";
932
932
  init_http();
933
933
  init_errors();
934
- METADATA_SOURCE = "m8t-stack-POC";
934
+ METADATA_SOURCE = "m8t";
935
935
  FOUNDRY_SCOPE2 = "https://ai.azure.com/.default";
936
936
  API = "v1";
937
937
  }
@@ -1177,7 +1177,7 @@ async function enableHostedBrain(args) {
1177
1177
  // survive the relink version; the managed fields are re-asserted over the
1178
1178
  // spread, and createCoderVersion applies the `brain` arg last.
1179
1179
  ...current.metadata,
1180
- source: "m8t-stack-POC",
1180
+ source: "m8t",
1181
1181
  kind: "hosted",
1182
1182
  persona: current.metadata?.persona ?? "coding-agent",
1183
1183
  personaVersion: current.metadata?.personaVersion ?? null
@@ -1247,7 +1247,7 @@ var init_enable_hosted_brain = __esm({
1247
1247
  import { Builtins, Cli } from "clipanion";
1248
1248
 
1249
1249
  // src/lib/package-version.ts
1250
- var CLI_VERSION = "0.2.26";
1250
+ var CLI_VERSION = "0.2.28";
1251
1251
 
1252
1252
  // src/lib/render-error.ts
1253
1253
  init_errors();
@@ -1412,7 +1412,7 @@ var BACKEND_RULES = [
1412
1412
  {
1413
1413
  code: "UPSTREAM_FAILED",
1414
1414
  reason: "kv_secret_malformed",
1415
- hint: () => "the Key Vault secret for this binding is in an unexpected shape. Manual cleanup may be required \u2014 contact your m8t-stack admin."
1415
+ hint: () => "the Key Vault secret for this binding is in an unexpected shape. Manual cleanup may be required \u2014 contact your m8t admin."
1416
1416
  },
1417
1417
  // NOTE: cascade_partial_failure is handled INLINE in the bind remove +
1418
1418
  // bind cleanup command files (the rendering needs the structured
@@ -1477,15 +1477,15 @@ var LOCAL_RULES = {
1477
1477
  // Task 15+16
1478
1478
  KV_URI_NOT_FOUND: "Pass `--kv-uri` or set `AZURE_KEYVAULT_URI` / `KEYVAULT_URI`.",
1479
1479
  // Task 13 — brain-link
1480
- LINK_NO_INSTALLATION_ID: "Internal error \u2014 the CLI command must poll for the installation id before calling linkBrain. Report at https://github.com/m8t-stack/m8t-stack-poc/issues.",
1480
+ LINK_NO_INSTALLATION_ID: "Internal error \u2014 the CLI command must poll for the installation id before calling linkBrain. Report at https://github.com/m8t/m8t/issues.",
1481
1481
  // Task 16 — brain link command
1482
- M8T_REPO_ROOT_MISSING: "Re-run `m8t install` from a fresh m8t-stack checkout \u2014 the post-install hook writes ~/.m8t-stack/repo-root.",
1482
+ M8T_REPO_ROOT_MISSING: "Re-run `m8t install` from a fresh m8t checkout \u2014 the post-install hook writes ~/.m8t/repo-root.",
1483
1483
  // Task 14 — persona-render
1484
- PERSONA_PATH_NOT_ABSOLUTE: "The persona path in ~/.m8t-stack/foundry/<worker>.yaml must be absolute. Re-deploy the worker via the architect.",
1484
+ PERSONA_PATH_NOT_ABSOLUTE: "The persona path in ~/.m8t/foundry/<worker>.yaml must be absolute. Re-deploy the worker via the architect.",
1485
1485
  // Task 9 — persona-render
1486
- PERSONA_PLACEHOLDER_UNSATISFIED: "Re-deploy the worker via the architect to repopulate fillableFieldValues, OR edit ~/.m8t-stack/foundry/<worker>.yaml manually.",
1486
+ PERSONA_PLACEHOLDER_UNSATISFIED: "Re-deploy the worker via the architect to repopulate fillableFieldValues, OR edit ~/.m8t/foundry/<worker>.yaml manually.",
1487
1487
  // Task 9 — persona-render
1488
- PERSONA_READ_FAILED: "Verify the persona path in ~/.m8t-stack/foundry/<worker>.yaml; the architect should have populated it at deploy time.",
1488
+ PERSONA_READ_FAILED: "Verify the persona path in ~/.m8t/foundry/<worker>.yaml; the architect should have populated it at deploy time.",
1489
1489
  // ── pre-existing entries ──────────────────────────────────────────────────
1490
1490
  AUTH_NOT_SIGNED_IN: "you are not signed in to Azure \u2014 run 'az login' first.",
1491
1491
  AUTH_EXPIRED: "your Azure login expired \u2014 run 'az login' to re-authenticate.",
@@ -11747,7 +11747,7 @@ import * as path2 from "path";
11747
11747
  import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
11748
11748
  function configDir() {
11749
11749
  const home = process.env.HOME ?? process.env.USERPROFILE ?? "";
11750
- return path2.join(home, ".m8t-stack");
11750
+ return path2.join(home, ".m8t");
11751
11751
  }
11752
11752
  function getConfigPath() {
11753
11753
  return path2.join(configDir(), "cli-config.yaml");
@@ -11810,7 +11810,7 @@ async function discoverGateway(opts) {
11810
11810
  const candidates = [];
11811
11811
  try {
11812
11812
  for await (const app of client.containerApps.listBySubscription()) {
11813
- if (app.tags?.["m8t-stack"] !== "gateway") continue;
11813
+ if (app.tags?.m8t !== "gateway") continue;
11814
11814
  const fqdn2 = app.configuration?.ingress?.fqdn;
11815
11815
  const envs = app.template?.containers?.[0]?.env ?? [];
11816
11816
  const envMap = /* @__PURE__ */ new Map();
@@ -11839,7 +11839,7 @@ async function discoverGateway(opts) {
11839
11839
  if (candidates.length === 0) {
11840
11840
  throw new LocalCliError({
11841
11841
  code: "GATEWAY_DISCOVERY_ZERO",
11842
- message: `No m8t-stack deployment found in subscription ${subscriptionId}.`,
11842
+ message: `No m8t deployment found in subscription ${subscriptionId}.`,
11843
11843
  hint: "If the deployment is in another subscription, run 'az account set --subscription <name>'."
11844
11844
  });
11845
11845
  }
@@ -11850,8 +11850,8 @@ async function discoverGateway(opts) {
11850
11850
  if (pool.length === 0) {
11851
11851
  throw new LocalCliError({
11852
11852
  code: "GATEWAY_DISCOVERY_RG_NOT_FOUND",
11853
- message: `No m8t-stack gateway found in resource group '${opts.resourceGroup}' (subscription ${subscriptionId}).`,
11854
- hint: `m8t-stack gateways in this subscription: ${candidates.map((c) => c.resourceGroup).join(", ")}.`
11853
+ message: `No m8t gateway found in resource group '${opts.resourceGroup}' (subscription ${subscriptionId}).`,
11854
+ hint: `m8t gateways in this subscription: ${candidates.map((c) => c.resourceGroup).join(", ")}.`
11855
11855
  });
11856
11856
  }
11857
11857
  }
@@ -11860,7 +11860,7 @@ async function discoverGateway(opts) {
11860
11860
  chosen = pool[0];
11861
11861
  } else if (opts.interactive) {
11862
11862
  const resourceId = await select({
11863
- message: `Multiple m8t-stack deployments found in subscription ${subscriptionId}. Choose one:`,
11863
+ message: `Multiple m8t deployments found in subscription ${subscriptionId}. Choose one:`,
11864
11864
  choices: pool.map((c) => ({
11865
11865
  name: `${c.name} (rg=${c.resourceGroup}, ${c.location})`,
11866
11866
  value: c.resourceId
@@ -11877,7 +11877,7 @@ async function discoverGateway(opts) {
11877
11877
  } else {
11878
11878
  throw new LocalCliError({
11879
11879
  code: "GATEWAY_DISCOVERY_MULTIPLE",
11880
- message: `Multiple m8t-stack gateways found in subscription ${subscriptionId}: ${pool.map((c) => `${c.name} (rg=${c.resourceGroup}, ${c.location})`).join("; ")}.`,
11880
+ message: `Multiple m8t gateways found in subscription ${subscriptionId}: ${pool.map((c) => `${c.name} (rg=${c.resourceGroup}, ${c.location})`).join("; ")}.`,
11881
11881
  hint: `Re-run with --resource-group <rg> to pick one (e.g. --resource-group ${pool[0].resourceGroup}).`
11882
11882
  });
11883
11883
  }
@@ -11965,7 +11965,7 @@ var BindAddCommand = class extends M8tCommand {
11965
11965
  description: "Azure subscription ID to discover gateway in (defaults to active az subscription)."
11966
11966
  });
11967
11967
  resourceGroup = Option.String("--resource-group", {
11968
- description: "m8t-stack resource group to disambiguate the gateway (multi-deployment subscriptions)."
11968
+ description: "m8t resource group to disambiguate the gateway (multi-deployment subscriptions)."
11969
11969
  });
11970
11970
  async executeCommand() {
11971
11971
  if (!this.worker) {
@@ -12048,7 +12048,7 @@ var BindCleanupCommand = class extends M8tCommand {
12048
12048
  description: "Azure subscription ID to discover gateway in (defaults to active az subscription)."
12049
12049
  });
12050
12050
  resourceGroup = Option2.String("--resource-group", {
12051
- description: "m8t-stack resource group to disambiguate the gateway (multi-deployment subscriptions)."
12051
+ description: "m8t resource group to disambiguate the gateway (multi-deployment subscriptions)."
12052
12052
  });
12053
12053
  async executeCommand() {
12054
12054
  if (this.bindingId && this.allOrphaned) {
@@ -12189,7 +12189,7 @@ var BindListCommand = class extends M8tCommand {
12189
12189
  description: "Azure subscription ID to discover gateway in (defaults to active az subscription)."
12190
12190
  });
12191
12191
  resourceGroup = Option3.String("--resource-group", {
12192
- description: "m8t-stack resource group to disambiguate the gateway (multi-deployment subscriptions)."
12192
+ description: "m8t resource group to disambiguate the gateway (multi-deployment subscriptions)."
12193
12193
  });
12194
12194
  async executeCommand() {
12195
12195
  const mode = resolveOutputMode(
@@ -12269,7 +12269,7 @@ var BindRemoveCommand = class extends M8tCommand {
12269
12269
  description: "Azure subscription ID to discover gateway in (defaults to active az subscription)."
12270
12270
  });
12271
12271
  resourceGroup = Option4.String("--resource-group", {
12272
- description: "m8t-stack resource group to disambiguate the gateway (multi-deployment subscriptions)."
12272
+ description: "m8t resource group to disambiguate the gateway (multi-deployment subscriptions)."
12273
12273
  });
12274
12274
  async executeCommand() {
12275
12275
  const mode = resolveOutputMode(
@@ -12348,7 +12348,7 @@ var BindShowCommand = class extends M8tCommand {
12348
12348
  description: "Azure subscription ID to discover gateway in (defaults to active az subscription)."
12349
12349
  });
12350
12350
  resourceGroup = Option5.String("--resource-group", {
12351
- description: "m8t-stack resource group to disambiguate the gateway (multi-deployment subscriptions)."
12351
+ description: "m8t resource group to disambiguate the gateway (multi-deployment subscriptions)."
12352
12352
  });
12353
12353
  async executeCommand() {
12354
12354
  const mode = resolveOutputMode(
@@ -12422,7 +12422,7 @@ var FOUNDRY_CONFIG_KEYS = ["tenantId", "clientId", "projectEndpoint"];
12422
12422
  var UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
12423
12423
  function configDir2() {
12424
12424
  const home = process.env.HOME ?? process.env.USERPROFILE ?? "";
12425
- return path3.join(home, ".m8t-stack");
12425
+ return path3.join(home, ".m8t");
12426
12426
  }
12427
12427
  function getFoundryConfigPath() {
12428
12428
  return path3.join(configDir2(), "config.yaml");
@@ -12539,7 +12539,7 @@ init_errors();
12539
12539
  var ConfigSetCommand = class extends M8tCommand {
12540
12540
  static paths = [["config", "set"]];
12541
12541
  static usage = Command8.Usage({
12542
- description: "Set a value in ~/.m8t-stack/config.yaml (tenantId | clientId | projectEndpoint)."
12542
+ description: "Set a value in ~/.m8t/config.yaml (tenantId | clientId | projectEndpoint)."
12543
12543
  });
12544
12544
  key = Option7.String();
12545
12545
  value = Option7.String();
@@ -12574,7 +12574,7 @@ import { Command as Command9, Option as Option8 } from "clipanion";
12574
12574
  var ConfigShowCommand = class extends M8tCommand {
12575
12575
  static paths = [["config", "show"]];
12576
12576
  static usage = Command9.Usage({
12577
- description: "Show ~/.m8t-stack/config.yaml (tenant/client/project) + the cached gateway.",
12577
+ description: "Show ~/.m8t/config.yaml (tenant/client/project) + the cached gateway.",
12578
12578
  details: "Displays the Foundry config (config.yaml) and the gateway discovery cache (cli-config.yaml)."
12579
12579
  });
12580
12580
  output = Option8.String("--output");
@@ -12648,7 +12648,7 @@ var TeamAddCommand = class extends M8tCommand {
12648
12648
  description: "Azure subscription ID to discover gateway in (defaults to active az subscription)."
12649
12649
  });
12650
12650
  resourceGroup = Option9.String("--resource-group", {
12651
- description: "m8t-stack resource group to disambiguate the gateway (multi-deployment subscriptions)."
12651
+ description: "m8t resource group to disambiguate the gateway (multi-deployment subscriptions)."
12652
12652
  });
12653
12653
  async executeCommand() {
12654
12654
  const identities = {};
@@ -12741,7 +12741,7 @@ var TeamAddIdentityCommand = class extends M8tCommand {
12741
12741
  description: "Azure subscription ID to discover gateway in (defaults to active az subscription)."
12742
12742
  });
12743
12743
  resourceGroup = Option10.String("--resource-group", {
12744
- description: "m8t-stack resource group to disambiguate the gateway (multi-deployment subscriptions)."
12744
+ description: "m8t resource group to disambiguate the gateway (multi-deployment subscriptions)."
12745
12745
  });
12746
12746
  async executeCommand() {
12747
12747
  const identities = {};
@@ -12801,7 +12801,7 @@ var TeamListCommand = class extends M8tCommand {
12801
12801
  description: "Azure subscription ID to discover gateway in (defaults to active az subscription)."
12802
12802
  });
12803
12803
  resourceGroup = Option11.String("--resource-group", {
12804
- description: "m8t-stack resource group to disambiguate the gateway (multi-deployment subscriptions)."
12804
+ description: "m8t resource group to disambiguate the gateway (multi-deployment subscriptions)."
12805
12805
  });
12806
12806
  async executeCommand() {
12807
12807
  const mode = resolveOutputMode(
@@ -12870,7 +12870,7 @@ var TeamRemoveCommand = class extends M8tCommand {
12870
12870
  description: "Azure subscription ID to discover gateway in (defaults to active az subscription)."
12871
12871
  });
12872
12872
  resourceGroup = Option12.String("--resource-group", {
12873
- description: "m8t-stack resource group to disambiguate the gateway (multi-deployment subscriptions)."
12873
+ description: "m8t resource group to disambiguate the gateway (multi-deployment subscriptions)."
12874
12874
  });
12875
12875
  async executeCommand() {
12876
12876
  const mode = resolveOutputMode(
@@ -12934,7 +12934,7 @@ var TeamRemoveIdentityCommand = class extends M8tCommand {
12934
12934
  description: "Azure subscription ID to discover gateway in (defaults to active az subscription)."
12935
12935
  });
12936
12936
  resourceGroup = Option13.String("--resource-group", {
12937
- description: "m8t-stack resource group to disambiguate the gateway (multi-deployment subscriptions)."
12937
+ description: "m8t resource group to disambiguate the gateway (multi-deployment subscriptions)."
12938
12938
  });
12939
12939
  async executeCommand() {
12940
12940
  const channels = [];
@@ -12997,7 +12997,7 @@ var TeamShowCommand = class extends M8tCommand {
12997
12997
  description: "Azure subscription ID to discover gateway in (defaults to active az subscription)."
12998
12998
  });
12999
12999
  resourceGroup = Option14.String("--resource-group", {
13000
- description: "m8t-stack resource group to disambiguate the gateway (multi-deployment subscriptions)."
13000
+ description: "m8t resource group to disambiguate the gateway (multi-deployment subscriptions)."
13001
13001
  });
13002
13002
  async executeCommand() {
13003
13003
  const mode = resolveOutputMode(
@@ -13492,8 +13492,8 @@ var BrainAppCreateCommand = class extends M8tCommand {
13492
13492
  });
13493
13493
  }
13494
13494
  const org = this.org;
13495
- const pemOut = typeof this.pemOut === "string" ? this.pemOut : path4.join(os.homedir(), ".m8t-stack", "github-app.pem");
13496
- const credsOut = typeof this.credsOut === "string" ? this.credsOut : path4.join(os.homedir(), ".m8t-stack", "github-app.json");
13495
+ const pemOut = typeof this.pemOut === "string" ? this.pemOut : path4.join(os.homedir(), ".m8t", "github-app.pem");
13496
+ const credsOut = typeof this.credsOut === "string" ? this.credsOut : path4.join(os.homedir(), ".m8t", "github-app.json");
13497
13497
  const port = Number(this.port);
13498
13498
  const onProgress = (m) => this.context.stderr.write(` ${colors.dim(m)}
13499
13499
  `);
@@ -13591,7 +13591,7 @@ function discoverKvUri(env, override) {
13591
13591
  });
13592
13592
  }
13593
13593
  function tryResolveRepoRoot() {
13594
- const marker = path5.join(os2.homedir(), ".m8t-stack", "repo-root");
13594
+ const marker = path5.join(os2.homedir(), ".m8t", "repo-root");
13595
13595
  if (!fs5.existsSync(marker)) return null;
13596
13596
  const root = fs5.readFileSync(marker, "utf8").trim();
13597
13597
  return root.length > 0 ? root : null;
@@ -13601,7 +13601,7 @@ function resolveRepoRoot() {
13601
13601
  if (root === null) {
13602
13602
  throw new LocalCliError({
13603
13603
  code: "M8T_REPO_ROOT_MISSING",
13604
- message: "~/.m8t-stack/repo-root marker missing \u2014 m8t install never completed."
13604
+ message: "~/.m8t/repo-root marker missing \u2014 m8t install never completed."
13605
13605
  });
13606
13606
  }
13607
13607
  return root;
@@ -13756,7 +13756,7 @@ import * as path6 from "path";
13756
13756
  import * as os3 from "os";
13757
13757
  import { parse as parseYaml3, stringify as stringifyYaml3 } from "yaml";
13758
13758
  function agentYamlPath(agentName, home = os3.homedir()) {
13759
- return path6.join(home, ".m8t-stack", "foundry", `${agentName}.yaml`);
13759
+ return path6.join(home, ".m8t", "foundry", `${agentName}.yaml`);
13760
13760
  }
13761
13761
  function readAgentYaml(agentName, home) {
13762
13762
  const file = agentYamlPath(agentName, home);
@@ -13837,7 +13837,7 @@ function renderPersonaBody(personaPath, fillableFieldValues, instanceName) {
13837
13837
  throw new LocalCliError({
13838
13838
  code: "PERSONA_PLACEHOLDER_UNSATISFIED",
13839
13839
  message: `Persona '${personaPath}' has un-substituted placeholders: ${names.join(", ")}`,
13840
- hint: `Add these to fillableFieldValues in ~/.m8t-stack/foundry/<agent>.yaml, or re-deploy the agent via the architect to repopulate.`
13840
+ hint: `Add these to fillableFieldValues in ~/.m8t/foundry/<agent>.yaml, or re-deploy the agent via the architect to repopulate.`
13841
13841
  });
13842
13842
  }
13843
13843
  const out = rendered.replace(/\s+$/, "");
@@ -14685,7 +14685,7 @@ var BrainCreateCommand = class extends M8tCommand {
14685
14685
  static paths = [["brain", "create"]];
14686
14686
  static usage = Command18.Usage({
14687
14687
  description: "Create a new brain repo from brain-template/ (optionally seeded) and link it to <worker>.",
14688
- details: "Copies ~/.m8t-stack/repo-root/brain-template/ to a tmp dir, optionally overlays brain-seeds/<name>/ (via --seed), stages it as a git repo, runs gh repo create --source --push, then the link cascade. Default --repo-name: <worker>-brain. Default visibility: private.",
14688
+ details: "Copies ~/.m8t/repo-root/brain-template/ to a tmp dir, optionally overlays brain-seeds/<name>/ (via --seed), stages it as a git repo, runs gh repo create --source --push, then the link cascade. Default --repo-name: <worker>-brain. Default visibility: private.",
14689
14689
  examples: [
14690
14690
  ["Create + link with defaults", "$0 brain create cmo --owner orkeren21"],
14691
14691
  ["Custom name + public", "$0 brain create cmo --owner orkeren21 --repo-name cmo-second-brain --public"],
@@ -15110,7 +15110,7 @@ async function listM8tAgents(args) {
15110
15110
  if (!raw.name && !raw.id) continue;
15111
15111
  const name = String(raw.name ?? raw.id);
15112
15112
  const md = raw.metadata ?? raw.versions?.latest?.metadata ?? {};
15113
- if (md.source === "m8t-stack-POC") {
15113
+ if (md.source === "m8t") {
15114
15114
  result.push({ name, metadata: md });
15115
15115
  }
15116
15116
  }
@@ -15270,12 +15270,12 @@ async function unlinkBrain(args) {
15270
15270
  if (yaml?.personaPath) {
15271
15271
  let personaPath = yaml.personaPath;
15272
15272
  if (!personaPath.startsWith("/")) {
15273
- const marker = path11.join(args.home ?? os5.homedir(), ".m8t-stack", "repo-root");
15273
+ const marker = path11.join(args.home ?? os5.homedir(), ".m8t", "repo-root");
15274
15274
  if (!fs12.existsSync(marker)) {
15275
15275
  throw new LocalCliError({
15276
15276
  code: "PERSONA_PATH_NOT_ABSOLUTE",
15277
15277
  message: `personaPath '${personaPath}' is relative and the repo-root marker is missing.`,
15278
- hint: "Re-run 'm8t install' from a fresh m8t-stack checkout (writes ~/.m8t-stack/repo-root) \u2014 or edit the personaPath to absolute."
15278
+ hint: "Re-run 'm8t install' from a fresh m8t checkout (writes ~/.m8t/repo-root) \u2014 or edit the personaPath to absolute."
15279
15279
  });
15280
15280
  }
15281
15281
  personaPath = path11.join(fs12.readFileSync(marker, "utf8").trim(), personaPath);
@@ -15629,7 +15629,7 @@ var AgentDeployAdvisorCommand = class extends M8tCommand {
15629
15629
  description: "Azure subscription ID. Defaults to the current az account."
15630
15630
  });
15631
15631
  repoRootFlag = Option22.String("--repo-root", {
15632
- description: "Path to the m8t-stack repo checkout. Defaults to the ~/.m8t-stack/repo-root marker."
15632
+ description: "Path to the m8t repo checkout. Defaults to the ~/.m8t/repo-root marker."
15633
15633
  });
15634
15634
  output = Option22.String("--output", {
15635
15635
  description: "Output format: pretty (default) or json."
@@ -15641,7 +15641,7 @@ var AgentDeployAdvisorCommand = class extends M8tCommand {
15641
15641
  throw new LocalCliError({
15642
15642
  code: "USAGE",
15643
15643
  message: "--persona is required (e.g. --persona startup-advisor).",
15644
- hint: "Pass the persona directory name under personas/ in your m8t-stack checkout."
15644
+ hint: "Pass the persona directory name under personas/ in your m8t checkout."
15645
15645
  });
15646
15646
  }
15647
15647
  if (!agentName) {
@@ -16170,7 +16170,7 @@ var AgentRemoveCommand = class extends M8tCommand {
16170
16170
  subscription = Option23.String("--subscription");
16171
16171
  kvUri = Option23.String("--kv-uri");
16172
16172
  resourceGroup = Option23.String("--resource-group", {
16173
- description: "m8t-stack resource group to disambiguate the gateway (multi-deployment subscriptions)."
16173
+ description: "m8t resource group to disambiguate the gateway (multi-deployment subscriptions)."
16174
16174
  });
16175
16175
  output = Option23.String("--output");
16176
16176
  async executeCommand() {
@@ -16305,7 +16305,7 @@ function resolveBridgeUrl(opts) {
16305
16305
  throw new LocalCliError({
16306
16306
  code: "A2A_NO_GATEWAY_URL",
16307
16307
  message: "Could not resolve the gateway URL for the A2A bridge.",
16308
- hint: "Pass --gateway-url https://<gateway-fqdn>, set M8T_GATEWAY_URL, or add a gatewayUrl key to ~/.m8t-stack/config.yaml."
16308
+ hint: "Pass --gateway-url https://<gateway-fqdn>, set M8T_GATEWAY_URL, or add a gatewayUrl key to ~/.m8t/config.yaml."
16309
16309
  });
16310
16310
  }
16311
16311
  return `${base}${A2A_PATH}`;
@@ -16317,7 +16317,7 @@ function clean(v) {
16317
16317
  return t.length ? t : void 0;
16318
16318
  }
16319
16319
  function readConfigGatewayUrl(home) {
16320
- const cfg = path13.join(home ?? os6.homedir(), ".m8t-stack", "config.yaml");
16320
+ const cfg = path13.join(home ?? os6.homedir(), ".m8t", "config.yaml");
16321
16321
  if (!fs16.existsSync(cfg)) return void 0;
16322
16322
  try {
16323
16323
  const o = parseYaml8(fs16.readFileSync(cfg, "utf8"));
@@ -16465,6 +16465,67 @@ function readVersionFrontmatter(file) {
16465
16465
  function sha256File(filePath) {
16466
16466
  return createHash2("sha256").update(fs17.readFileSync(filePath)).digest("hex");
16467
16467
  }
16468
+ var SIDECAR_FILENAME = "m8t-architect.m8t-skill.json";
16469
+ var LEGACY_SIDECAR_FILENAME = ".m8t-skill.json";
16470
+ function vsCodeUserDataDir() {
16471
+ if (process.platform === "darwin") {
16472
+ return path15.join(os7.homedir(), "Library", "Application Support", "Code", "User");
16473
+ }
16474
+ if (process.platform === "win32") {
16475
+ const appData = process.env.APPDATA ?? path15.join(os7.homedir(), "AppData", "Roaming");
16476
+ return path15.join(appData, "Code", "User");
16477
+ }
16478
+ return null;
16479
+ }
16480
+ function vsCodePromptsDir() {
16481
+ const userData = vsCodeUserDataDir();
16482
+ if (!userData) return null;
16483
+ const prompts = path15.join(userData, "prompts");
16484
+ if (fs17.existsSync(prompts)) return prompts;
16485
+ const promptFiles = path15.join(userData, "prompt-files");
16486
+ if (fs17.existsSync(promptFiles)) return promptFiles;
16487
+ return prompts;
16488
+ }
16489
+ var COPILOT_CLI_SKILLS_ROOTS = [
16490
+ [".copilot", "skills"],
16491
+ [".config", "github-copilot", "skills"],
16492
+ [".github", "copilot", "skills"]
16493
+ ];
16494
+ function sidecarLocations() {
16495
+ const home = os7.homedir();
16496
+ const locations = [
16497
+ { host: "Claude Code", dir: path15.join(home, ".claude", "skills", "m8t-architect") }
16498
+ ];
16499
+ const vsCodeDir = vsCodePromptsDir();
16500
+ if (vsCodeDir) {
16501
+ locations.push({ host: "VS Code Copilot Chat", dir: vsCodeDir });
16502
+ }
16503
+ for (const segments of COPILOT_CLI_SKILLS_ROOTS) {
16504
+ locations.push({
16505
+ host: "GitHub Copilot CLI",
16506
+ dir: path15.join(home, ...segments, "m8t-architect")
16507
+ });
16508
+ }
16509
+ return locations;
16510
+ }
16511
+ function resolveSidecar() {
16512
+ let best = null;
16513
+ for (const loc of sidecarLocations()) {
16514
+ for (const filename of [SIDECAR_FILENAME, LEGACY_SIDECAR_FILENAME]) {
16515
+ const candidate2 = path15.join(loc.dir, filename);
16516
+ let mtimeMs;
16517
+ try {
16518
+ mtimeMs = fs17.statSync(candidate2).mtimeMs;
16519
+ } catch {
16520
+ continue;
16521
+ }
16522
+ if (!best || mtimeMs > best.mtimeMs) {
16523
+ best = { path: candidate2, host: loc.host, mtimeMs };
16524
+ }
16525
+ }
16526
+ }
16527
+ return best;
16528
+ }
16468
16529
  function checkArchitectDrift() {
16469
16530
  const sourcePath = path15.join(
16470
16531
  resolveRepoRoot(),
@@ -16472,26 +16533,20 @@ function checkArchitectDrift() {
16472
16533
  "m8t-architect",
16473
16534
  "persona.md"
16474
16535
  );
16475
- const sidecarPath = path15.join(
16476
- os7.homedir(),
16477
- ".claude",
16478
- "skills",
16479
- "m8t-architect",
16480
- ".m8t-skill.json"
16481
- );
16482
16536
  if (!fs17.existsSync(sourcePath)) {
16483
16537
  return {
16484
16538
  match: false,
16485
16539
  sourceVersion: "",
16486
16540
  installedVersion: "",
16487
- advice: `Source persona not found at ${sourcePath}. Check ~/.m8t-stack/repo-root points at a valid checkout.`
16541
+ advice: `Source persona not found at ${sourcePath}. Check ~/.m8t/repo-root points at a valid checkout.`
16488
16542
  };
16489
16543
  }
16490
16544
  const sourceVersion = readVersionFrontmatter(sourcePath);
16545
+ const resolved = resolveSidecar();
16491
16546
  let sidecar = null;
16492
- if (fs17.existsSync(sidecarPath)) {
16547
+ if (resolved) {
16493
16548
  try {
16494
- const raw = JSON.parse(fs17.readFileSync(sidecarPath, "utf8"));
16549
+ const raw = JSON.parse(fs17.readFileSync(resolved.path, "utf8"));
16495
16550
  if (raw !== null && typeof raw === "object") {
16496
16551
  const r = raw;
16497
16552
  sidecar = {
@@ -16504,11 +16559,12 @@ function checkArchitectDrift() {
16504
16559
  }
16505
16560
  }
16506
16561
  if (!sidecar || typeof sidecar.sourceSha256 !== "string") {
16562
+ const checked = sidecarLocations().map((l) => `${l.host} (${l.dir})`).join("; ");
16507
16563
  return {
16508
16564
  match: false,
16509
16565
  sourceVersion,
16510
16566
  installedVersion: "",
16511
- advice: "Architect skill not installed (or installed before sidecar support). Run `bash guides/install/m8t.md` to render it."
16567
+ advice: `Architect skill not installed (or installed before sidecar support). Checked: ${checked}. Re-run the install guide for your host from guides/install/m8t.md to render it.`
16512
16568
  };
16513
16569
  }
16514
16570
  const installedVersion = typeof sidecar.version === "string" ? sidecar.version : "";
@@ -16521,7 +16577,7 @@ function checkArchitectDrift() {
16521
16577
  match: false,
16522
16578
  sourceVersion,
16523
16579
  installedVersion,
16524
- advice: sameVersion ? `m8t-architect content drift (v${sourceVersion} unchanged, body edited since render). Re-render via \`bash guides/install/m8t.md\`.` : `Installed m8t-architect${installedVersion ? ` (v${installedVersion})` : ""} is out of date with source${sourceVersion ? ` (v${sourceVersion})` : ""}. Run \`bash guides/install/m8t.md\` to re-render.`
16580
+ advice: sameVersion ? `m8t-architect content drift (v${sourceVersion} unchanged, body edited since render). Re-render via the install guide for your host (guides/install/m8t.md).` : `Installed m8t-architect${installedVersion ? ` (v${installedVersion})` : ""} is out of date with source${sourceVersion ? ` (v${sourceVersion})` : ""}. Re-render via the install guide for your host (guides/install/m8t.md).`
16525
16581
  };
16526
16582
  }
16527
16583
 
@@ -16530,7 +16586,7 @@ var ArchitectCheckCommand = class extends M8tCommand {
16530
16586
  static paths = [["architect-check"]];
16531
16587
  static usage = Command27.Usage({
16532
16588
  description: "Verify the installed m8t-architect persona matches the repo source.",
16533
- details: "Compares a render-time content hash (stored in ~/.claude/skills/m8t-architect/.m8t-skill.json) against a fresh hash of <repo-root>/personas/m8t-architect/persona.md. Exits 0 when they match, 1 with remediation advice when they don't. Used as a pre-flight gate by the architect persona body and as a verification step in guides/install/m8t.md.",
16589
+ details: "Compares a render-time content hash (stored in a per-persona `<name>.m8t-skill.json` sidecar, checked across every host m8t can render into \u2014 Claude Code, VS Code Copilot Chat, GitHub Copilot CLI) against a fresh hash of <repo-root>/personas/m8t-architect/persona.md. Exits 0 when they match, 1 with remediation advice when they don't. Used as a pre-flight gate by the architect persona body and as a verification step in guides/install/m8t.md.",
16534
16590
  examples: [
16535
16591
  ["Run the architect drift check", "$0 architect-check"]
16536
16592
  ]
@@ -16924,7 +16980,7 @@ async function assertPlatformLive(opts) {
16924
16980
  if (e.code === "GATEWAY_DISCOVERY_ZERO") {
16925
16981
  throw new LocalCliError({
16926
16982
  code: "PLATFORM_NOT_LIVE",
16927
- message: "The m8t-stack platform isn't deployed yet \u2014 there is no gateway in this subscription.",
16983
+ message: "The m8t platform isn't deployed yet \u2014 there is no gateway in this subscription.",
16928
16984
  hint: "Deploy it first: run the local bootstrap (`m8t bootstrap launch \u2026`) and wait for `m8t bootstrap status` to reach done. If it's in another subscription, run `az account set --subscription <id>`.",
16929
16985
  cause: e
16930
16986
  });
@@ -17098,7 +17154,7 @@ var CoderDeployCommand = class extends M8tCommand {
17098
17154
  cpu: preset.cpu,
17099
17155
  memory: preset.memory,
17100
17156
  env,
17101
- metadata: { ...currentMetadata, source: "m8t-stack-POC", kind: "hosted", persona: personaName, personaVersion },
17157
+ metadata: { ...currentMetadata, source: "m8t", kind: "hosted", persona: personaName, personaVersion },
17102
17158
  onProgress
17103
17159
  });
17104
17160
  if (typeof this.brain === "string") {
@@ -17211,7 +17267,7 @@ var CoderDeployCommand = class extends M8tCommand {
17211
17267
  this.context.stdout.write(` project: ${project.projectName} (${project.region})
17212
17268
  `);
17213
17269
  this.context.stdout.write(
17214
- ` ${colors.hint("next:")} it now appears on MCP (/m8t-stack:workers), the web app, and (when --gateway-url was passed) as an a2a target.
17270
+ ` ${colors.hint("next:")} it now appears on MCP (/m8t:workers), the web app, and (when --gateway-url was passed) as an a2a target.
17215
17271
  `
17216
17272
  );
17217
17273
  return 0;
@@ -17545,7 +17601,7 @@ var AzureExecDeployCommand = class extends M8tCommand {
17545
17601
  cpu: preset.cpu,
17546
17602
  memory: preset.memory,
17547
17603
  env,
17548
- metadata: { source: "m8t-stack-POC", kind: "hosted", persona: personaName, personaVersion },
17604
+ metadata: { source: "m8t", kind: "hosted", persona: personaName, personaVersion },
17549
17605
  onProgress
17550
17606
  });
17551
17607
  onProgress?.(`granting Contributor at ${grantScope}\u2026`);
@@ -18005,7 +18061,7 @@ async function resolveReleaseContent(manifest, opts = {}) {
18005
18061
  return opts.contentDir;
18006
18062
  }
18007
18063
  const commit = manifest.platform.commit;
18008
- const cacheRoot = opts.cacheRoot ?? path19.join(os8.homedir(), ".m8t-stack", "cache");
18064
+ const cacheRoot = opts.cacheRoot ?? path19.join(os8.homedir(), ".m8t", "cache");
18009
18065
  const dest = path19.join(cacheRoot, `release-${commit}`);
18010
18066
  if (fs20.existsSync(path19.join(dest, "personas"))) return dest;
18011
18067
  const fetchImpl = opts.fetchImpl ?? fetch;
@@ -18069,7 +18125,7 @@ async function discoverStampStorage(opts) {
18069
18125
  url: `${ARM3}/subscriptions/${opts.subscriptionId}/resourceGroups/${opts.resourceGroup}/providers/Microsoft.Storage/storageAccounts?api-version=${STORAGE_API}`
18070
18126
  }) ?? {};
18071
18127
  const accounts = (list.value ?? []).filter((a) => a.properties?.primaryEndpoints?.table);
18072
- const chosen = accounts.find((a) => a.tags?.["m8t-stack"] === "storage") ?? accounts.find((a) => a.tags?.["m8t-stack:role"] === "gateway" || a.tags?.["m8t-stack:role"] === "ledger") ?? (accounts.length === 1 ? accounts[0] : void 0);
18128
+ const chosen = accounts.find((a) => a.tags?.m8t === "storage") ?? accounts.find((a) => a.tags?.["m8t:role"] === "gateway" || a.tags?.["m8t:role"] === "ledger") ?? (accounts.length === 1 ? accounts[0] : void 0);
18073
18129
  const tableEndpoint = chosen?.properties?.primaryEndpoints?.table?.replace(/\/$/, "");
18074
18130
  if (!tableEndpoint || !chosen?.id || !chosen.name) {
18075
18131
  throw new LocalCliError({
@@ -18224,7 +18280,7 @@ function buildBicepParams(p) {
18224
18280
  return params;
18225
18281
  }
18226
18282
  async function resolveRepoRoot2(home = os9.homedir()) {
18227
- const marker = path20.join(home, ".m8t-stack", "repo-root");
18283
+ const marker = path20.join(home, ".m8t", "repo-root");
18228
18284
  try {
18229
18285
  const root = (await fs21.readFile(marker, "utf8")).trim();
18230
18286
  if (!root) throw new Error("empty");
@@ -18232,8 +18288,8 @@ async function resolveRepoRoot2(home = os9.homedir()) {
18232
18288
  } catch {
18233
18289
  throw new LocalCliError({
18234
18290
  code: "DEPLOY_NO_REPO_ROOT",
18235
- message: "~/.m8t-stack/repo-root marker is missing or empty.",
18236
- hint: "Run 'm8t install' from an m8t-stack checkout (it writes the marker), or run 'm8t deploy' from the repo."
18291
+ message: "~/.m8t/repo-root marker is missing or empty.",
18292
+ hint: "Run 'm8t install' from an m8t checkout (it writes the marker), or run 'm8t deploy' from the repo."
18237
18293
  });
18238
18294
  }
18239
18295
  }
@@ -18297,7 +18353,7 @@ async function ensureResourceGroup(name, location) {
18297
18353
  await runAz(["group", "show", "--name", name, "--output", "json"]).catch(() => "") || "null"
18298
18354
  );
18299
18355
  if (existing) return;
18300
- await runAz(["group", "create", "--name", name, "--location", location, "--tags", "m8t-stack=deployment"]);
18356
+ await runAz(["group", "create", "--name", name, "--location", location, "--tags", "m8t=deployment"]);
18301
18357
  }
18302
18358
  function resolveAcrPullIdentity(opts) {
18303
18359
  return opts.explicit ?? "";
@@ -18769,13 +18825,13 @@ var PlatformStatusCommand = class extends M8tCommand {
18769
18825
  });
18770
18826
  subscription = Option29.String("--subscription");
18771
18827
  resourceGroup = Option29.String("--resource-group", {
18772
- description: "m8t-stack resource group to disambiguate the gateway (multi-deployment subscriptions)."
18828
+ description: "m8t resource group to disambiguate the gateway (multi-deployment subscriptions)."
18773
18829
  });
18774
18830
  to = Option29.String("--to", {
18775
18831
  description: "Check status against a pinned platform version (defaults to the current release channel)."
18776
18832
  });
18777
18833
  contentDir = Option29.String("--content-dir", {
18778
- description: "Path to a local m8t-stack repo checkout (skips the tarball tree-SHA fetch)."
18834
+ description: "Path to a local m8t repo checkout (skips the tarball tree-SHA fetch)."
18779
18835
  });
18780
18836
  manifestUrl = Option29.String("--manifest-url", {
18781
18837
  description: "Fetch the release manifest from this URL instead of the release channel."
@@ -19503,7 +19559,7 @@ var PlatformUpdateCommand = class extends M8tCommand {
19503
19559
  });
19504
19560
  subscription = Option30.String("--subscription");
19505
19561
  resourceGroup = Option30.String("--resource-group", {
19506
- description: "m8t-stack resource group to disambiguate the gateway (multi-deployment subscriptions)."
19562
+ description: "m8t resource group to disambiguate the gateway (multi-deployment subscriptions)."
19507
19563
  });
19508
19564
  to = Option30.String("--to", {
19509
19565
  description: "Pin the platform version to converge to (defaults to the current release channel)."
@@ -19519,7 +19575,7 @@ var PlatformUpdateCommand = class extends M8tCommand {
19519
19575
  description: "Required with --force-infra \u2014 the existing deployment's resource-name suffix (avoids provisioning duplicates)."
19520
19576
  });
19521
19577
  contentDir = Option30.String("--content-dir", {
19522
- description: "Path to a local m8t-stack repo checkout (skips the tarball fetch + tree-drift check)."
19578
+ description: "Path to a local m8t repo checkout (skips the tarball fetch + tree-drift check)."
19523
19579
  });
19524
19580
  manifestUrl = Option30.String("--manifest-url", {
19525
19581
  description: "Fetch the release manifest from this URL instead of the release channel."
@@ -20193,7 +20249,7 @@ var PlatformEnableCostReportCommand = class extends M8tCommand {
20193
20249
  });
20194
20250
  subscription = Option31.String("--subscription");
20195
20251
  resourceGroup = Option31.String("--resource-group", {
20196
- description: "m8t-stack resource group to disambiguate the gateway (multi-deployment subscriptions)."
20252
+ description: "m8t resource group to disambiguate the gateway (multi-deployment subscriptions)."
20197
20253
  });
20198
20254
  acsEndpoint = Option31.String("--acs-endpoint", { required: true, description: "ACS data-plane endpoint, e.g. https://acs-<name>.communication.azure.com/" });
20199
20255
  acsSender = Option31.String("--acs-sender", { required: true, description: "Managed-domain sender address, e.g. DoNotReply@<guid>.azurecomm.net" });
@@ -20285,7 +20341,7 @@ var PlatformEnableAutoUpdateCommand = class extends M8tCommand {
20285
20341
  });
20286
20342
  subscription = Option32.String("--subscription");
20287
20343
  resourceGroup = Option32.String("--resource-group", {
20288
- description: "m8t-stack resource group to disambiguate the gateway (multi-deployment subscriptions)."
20344
+ description: "m8t resource group to disambiguate the gateway (multi-deployment subscriptions)."
20289
20345
  });
20290
20346
  suffix = Option32.String("--suffix", {
20291
20347
  description: "The existing deployment's resource-name suffix. Required when it cannot be recovered from system/infra-params or the live gateway."
@@ -20429,7 +20485,7 @@ import { Command as Command36, Option as Option33 } from "clipanion";
20429
20485
 
20430
20486
  // src/lib/app-reg.ts
20431
20487
  init_errors();
20432
- var APP_NAME = "m8t-stack-webapp";
20488
+ var APP_NAME = "m8t-webapp";
20433
20489
  var AZURE_CLI_FIRST_PARTY_APP_ID = "04b07795-8ddb-461a-bbee-02f9e1bf7b46";
20434
20490
  var FOUNDRY_SP_APP_ID = "18a66f5f-dbdf-4c17-9dd7-1634712a9cbe";
20435
20491
  var USER_IMPERSONATION_SCOPE_ID = "1a7925b5-f871-417a-9b8b-303f9f29fa10";
@@ -20469,10 +20525,10 @@ async function ensureExposeAnApi(appId, appObjectId) {
20469
20525
  id: scopeId,
20470
20526
  value: "user_impersonation",
20471
20527
  type: "User",
20472
- adminConsentDescription: "Allow the application to access m8t-stack on behalf of the signed-in user.",
20473
- adminConsentDisplayName: "Access m8t-stack",
20474
- userConsentDescription: "Allow the application to access m8t-stack on your behalf.",
20475
- userConsentDisplayName: "Access m8t-stack",
20528
+ adminConsentDescription: "Allow the application to access m8t on behalf of the signed-in user.",
20529
+ adminConsentDisplayName: "Access m8t",
20530
+ userConsentDescription: "Allow the application to access m8t on your behalf.",
20531
+ userConsentDisplayName: "Access m8t",
20476
20532
  isEnabled: true
20477
20533
  }
20478
20534
  ];
@@ -20829,7 +20885,7 @@ var DeployCommand = class extends M8tCommand {
20829
20885
  static paths = [["deploy"]];
20830
20886
  static usage = Command36.Usage({
20831
20887
  description: "Deploy (or update) the m8t gateway/webapp stack via Bicep.",
20832
- details: "Ensures the Entra app reg (or pass --client-id to reuse an existing one \u2014 required if you can't create app regs), writes ~/.m8t-stack/config.yaml, ensures the resource group, and runs deploy/main.bicep. The repo is located via ~/.m8t-stack/repo-root."
20888
+ details: "Ensures the Entra app reg (or pass --client-id to reuse an existing one \u2014 required if you can't create app regs), writes ~/.m8t/config.yaml, ensures the resource group, and runs deploy/main.bicep. The repo is located via ~/.m8t/repo-root."
20833
20889
  });
20834
20890
  subscription = Option33.String("--subscription");
20835
20891
  resourceGroup = Option33.String("--resource-group", "rg-m8t-stack");
@@ -20878,7 +20934,7 @@ var DeployCommand = class extends M8tCommand {
20878
20934
  throw new LocalCliError({
20879
20935
  code: "DEPLOY_NO_FOUNDRY_ENDPOINT",
20880
20936
  message: "No Foundry endpoint provided.",
20881
- hint: "Pass --foundry-endpoint <url> or set projectEndpoint in ~/.m8t-stack/config.yaml (m8t config set / m8t switch)."
20937
+ hint: "Pass --foundry-endpoint <url> or set projectEndpoint in ~/.m8t/config.yaml (m8t config set / m8t switch)."
20882
20938
  });
20883
20939
  }
20884
20940
  if (this.whatIf) {
@@ -20887,7 +20943,7 @@ var DeployCommand = class extends M8tCommand {
20887
20943
  throw new LocalCliError({
20888
20944
  code: "DEPLOY_WHATIF_NO_CLIENT",
20889
20945
  message: "--what-if needs a client id but none was provided or configured.",
20890
- hint: "Pass --client-id <appId>, or run from a host with ~/.m8t-stack/config.yaml."
20946
+ hint: "Pass --client-id <appId>, or run from a host with ~/.m8t/config.yaml."
20891
20947
  });
20892
20948
  }
20893
20949
  const foundryResourceId2 = await resolveFoundryResourceId(foundryEndpoint, this.foundryResourceId);
@@ -21508,7 +21564,7 @@ var WhoamiCommand = class extends M8tCommand {
21508
21564
  description: "Azure subscription ID to discover gateway in (defaults to active az subscription)."
21509
21565
  });
21510
21566
  resourceGroup = Option37.String("--resource-group", {
21511
- description: "m8t-stack resource group to disambiguate the gateway (multi-deployment subscriptions)."
21567
+ description: "m8t resource group to disambiguate the gateway (multi-deployment subscriptions)."
21512
21568
  });
21513
21569
  async executeCommand() {
21514
21570
  const mode = resolveOutputMode(
@@ -21696,7 +21752,7 @@ function checkFoundryConfig(cfg) {
21696
21752
  return {
21697
21753
  name: "config.yaml",
21698
21754
  status: "FAIL",
21699
- detail: "missing or invalid ~/.m8t-stack/config.yaml",
21755
+ detail: "missing or invalid ~/.m8t/config.yaml",
21700
21756
  remediation: "m8t switch (or m8t config set tenantId|clientId|projectEndpoint <value>)"
21701
21757
  };
21702
21758
  }
@@ -21820,27 +21876,46 @@ function checkRepoRoot(probe) {
21820
21876
  return {
21821
21877
  name: "brain repo-root",
21822
21878
  status: "FAIL",
21823
- detail: "~/.m8t-stack/repo-root marker missing \u2014 m8t install never completed",
21824
- remediation: 're-run the m8t-stack install (writes ~/.m8t-stack/repo-root), or: printf %s "$(git -C <m8t-stack-poc-checkout> rev-parse --show-toplevel)" > ~/.m8t-stack/repo-root'
21879
+ detail: "~/.m8t/repo-root marker missing \u2014 m8t install never completed",
21880
+ remediation: 're-run the m8t install (writes ~/.m8t/repo-root), or: printf %s "$(git -C <m8t-checkout> rev-parse --show-toplevel)" > ~/.m8t/repo-root'
21825
21881
  };
21826
21882
  }
21827
21883
  if (!probe.isDir) {
21828
21884
  return {
21829
21885
  name: "brain repo-root",
21830
21886
  status: "FAIL",
21831
- detail: `~/.m8t-stack/repo-root \u2192 ${probe.path} \u2014 that path does not exist or is not a directory`,
21832
- remediation: 'the m8t-stack checkout moved or was deleted; point the marker at the current checkout: printf %s "$(git -C <m8t-stack-poc-checkout> rev-parse --show-toplevel)" > ~/.m8t-stack/repo-root'
21887
+ detail: `~/.m8t/repo-root \u2192 ${probe.path} \u2014 that path does not exist or is not a directory`,
21888
+ remediation: 'the m8t checkout moved or was deleted; point the marker at the current checkout: printf %s "$(git -C <m8t-checkout> rev-parse --show-toplevel)" > ~/.m8t/repo-root'
21833
21889
  };
21834
21890
  }
21835
21891
  if (!probe.isGitCheckout) {
21836
21892
  return {
21837
21893
  name: "brain repo-root",
21838
21894
  status: "WARN",
21839
- detail: `~/.m8t-stack/repo-root \u2192 ${probe.path} exists but is not a git checkout (no .git) \u2014 brain-loader template + persona paths may be stale`,
21840
- remediation: "point the marker at the m8t-stack-poc git checkout (it reads targets/foundry/brain-loader.md from there)"
21895
+ detail: `~/.m8t/repo-root \u2192 ${probe.path} exists but is not a git checkout (no .git) \u2014 brain-loader template + persona paths may be stale`,
21896
+ remediation: "point the marker at the m8t git checkout (it reads targets/foundry/brain-loader.md from there)"
21897
+ };
21898
+ }
21899
+ return { name: "brain repo-root", status: "PASS", detail: `~/.m8t/repo-root \u2192 ${probe.path}` };
21900
+ }
21901
+ function checkLegacyStateDir(probe) {
21902
+ if (!probe.legacyExists) {
21903
+ return { name: "state dir", status: "PASS", detail: "no legacy ~/.m8t-stack folder" };
21904
+ }
21905
+ if (!probe.currentExists) {
21906
+ return {
21907
+ name: "state dir",
21908
+ status: "WARN",
21909
+ detail: "found legacy ~/.m8t-stack but no ~/.m8t \u2014 the state folder was renamed to ~/.m8t",
21910
+ remediation: "mv ~/.m8t-stack ~/.m8t"
21841
21911
  };
21842
21912
  }
21843
- return { name: "brain repo-root", status: "PASS", detail: `~/.m8t-stack/repo-root \u2192 ${probe.path}` };
21913
+ return {
21914
+ name: "state dir",
21915
+ status: "WARN",
21916
+ detail: "legacy ~/.m8t-stack exists alongside ~/.m8t \u2014 only ~/.m8t is read",
21917
+ remediation: "review ~/.m8t-stack for anything you still need, then remove it"
21918
+ };
21844
21919
  }
21845
21920
 
21846
21921
  // src/commands/doctor.ts
@@ -21907,7 +21982,7 @@ async function resolveAccountLocation(accountId) {
21907
21982
  }
21908
21983
  }
21909
21984
  function probeRepoRoot() {
21910
- const marker = path28.join(os11.homedir(), ".m8t-stack", "repo-root");
21985
+ const marker = path28.join(os11.homedir(), ".m8t", "repo-root");
21911
21986
  if (!fs26.existsSync(marker)) {
21912
21987
  return { markerExists: false, path: null, isDir: false, isGitCheckout: false };
21913
21988
  }
@@ -21927,6 +22002,12 @@ function probeRepoRoot() {
21927
22002
  const isGitCheckout = isDir && fs26.existsSync(path28.join(repoPath, ".git"));
21928
22003
  return { markerExists: true, path: repoPath, isDir, isGitCheckout };
21929
22004
  }
22005
+ function probeLegacyStateDir() {
22006
+ return {
22007
+ legacyExists: fs26.existsSync(path28.join(os11.homedir(), ".m8t-stack")),
22008
+ currentExists: fs26.existsSync(path28.join(os11.homedir(), ".m8t"))
22009
+ };
22010
+ }
21930
22011
  var DoctorCommand = class extends M8tCommand {
21931
22012
  static paths = [["doctor"]];
21932
22013
  static usage = Command42.Usage({
@@ -21935,7 +22016,7 @@ var DoctorCommand = class extends M8tCommand {
21935
22016
  output = Option39.String("--output");
21936
22017
  agent = Option39.String("--agent");
21937
22018
  resourceGroup = Option39.String("--resource-group", {
21938
- description: "m8t-stack resource group to disambiguate the gateway (multi-deployment subscriptions)."
22019
+ description: "m8t resource group to disambiguate the gateway (multi-deployment subscriptions)."
21939
22020
  });
21940
22021
  async executeCommand() {
21941
22022
  const mode = resolveOutputMode(
@@ -21969,6 +22050,7 @@ var DoctorCommand = class extends M8tCommand {
21969
22050
  emit(checkFoundryConfig(foundry));
21970
22051
  emit(checkTenantAlignment(az, foundry));
21971
22052
  emit(checkRepoRoot(probeRepoRoot()));
22053
+ emit(checkLegacyStateDir(probeLegacyStateDir()));
21972
22054
  checking("gateway");
21973
22055
  let gw = { ok: false, detail: "not probed" };
21974
22056
  try {
@@ -22058,7 +22140,7 @@ import * as path29 from "path";
22058
22140
  import { parse as parseYaml11, stringify as stringifyYaml4 } from "yaml";
22059
22141
  function profilesDir() {
22060
22142
  const home = process.env.HOME ?? process.env.USERPROFILE ?? "";
22061
- return path29.join(home, ".m8t-stack", "profiles");
22143
+ return path29.join(home, ".m8t", "profiles");
22062
22144
  }
22063
22145
  function getProfilePath(name) {
22064
22146
  return path29.join(profilesDir(), `${path29.basename(name)}.yaml`);
@@ -22308,7 +22390,7 @@ var OpenCommand = class extends M8tCommand {
22308
22390
  print = Option41.Boolean("--print", false);
22309
22391
  output = Option41.String("--output");
22310
22392
  resourceGroup = Option41.String("--resource-group", {
22311
- description: "m8t-stack resource group to disambiguate the gateway (multi-deployment subscriptions)."
22393
+ description: "m8t resource group to disambiguate the gateway (multi-deployment subscriptions)."
22312
22394
  });
22313
22395
  async executeCommand() {
22314
22396
  const mode = resolveOutputMode(
@@ -23117,7 +23199,7 @@ async function runPipeline(args) {
23117
23199
  ({ items, fetchError } = await fetchItems(sources.conversations, recoveredId));
23118
23200
  if (g.source === "a2a" && !fetchError && items.length > 0 && sources.conversations.retrieveApp) {
23119
23201
  const app = await sources.conversations.retrieveApp(recoveredId);
23120
- if (app !== "m8t-stack-a2a") {
23202
+ if (app !== "m8t-a2a") {
23121
23203
  didRecover = false;
23122
23204
  items = [];
23123
23205
  conversationId = void 0;
@@ -24452,13 +24534,13 @@ async function discoverLedgerResources(opts) {
24452
24534
  url: `${ARM4}/subscriptions/${subscriptionId}/resourceGroups/${resourceGroup}/providers/Microsoft.Storage/storageAccounts?api-version=${STORAGE_API2}`
24453
24535
  });
24454
24536
  const accounts = storage.filter((a) => a.properties?.primaryEndpoints?.table);
24455
- const ledgerAcct = accounts.find((a) => (a.tags?.["m8t-stack:role"] ?? a.properties?.tags?.["m8t-stack:role"]) === "ledger") ?? (accounts.length === 1 ? accounts[0] : void 0);
24537
+ const ledgerAcct = accounts.find((a) => (a.tags?.["m8t:role"] ?? a.properties?.tags?.["m8t:role"]) === "ledger") ?? (accounts.length === 1 ? accounts[0] : void 0);
24456
24538
  const ledgerTableEndpoint = ledgerAcct?.properties?.primaryEndpoints?.table?.replace(/\/$/, "");
24457
24539
  if (!ledgerTableEndpoint) {
24458
24540
  throw new LocalCliError({
24459
24541
  code: "DREAM_LEDGER_STORAGE_NOT_FOUND",
24460
24542
  message: `No AgentLedger storage account found in resource group ${resourceGroup}.`,
24461
- hint: `Found: ${accounts.map((a) => a.name).join(", ") || "(none)"}. Tag the ledger account 'm8t-stack:role=ledger'.`
24543
+ hint: `Found: ${accounts.map((a) => a.name).join(", ") || "(none)"}. Tag the ledger account 'm8t:role=ledger'.`
24462
24544
  });
24463
24545
  }
24464
24546
  const ws = await authedJsonPagedValues({
@@ -25338,7 +25420,7 @@ function buildPreflightBanner(who) {
25338
25420
  "\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557",
25339
25421
  "\u2551 \u26D4 STOP \u2014 READ THIS BEFORE CONTINUING \u2551",
25340
25422
  "\u2551 \u2551",
25341
- "\u2551 Installing m8t-stack creates real Azure resources in YOUR \u2551",
25423
+ "\u2551 Installing m8t creates real Azure resources in YOUR \u2551",
25342
25424
  "\u2551 subscription and assigns roles. To do that, the account you just \u2551",
25343
25425
  "\u2551 signed in with MUST be: \u2551",
25344
25426
  "\u2551 \u2551",
@@ -25362,7 +25444,7 @@ function buildPreflightBanner(who) {
25362
25444
  var BootstrapPreflightCommand = class extends M8tCommand {
25363
25445
  static paths = [["bootstrap", "preflight"]];
25364
25446
  static usage = Command48.Usage({
25365
- description: "Loudly verify you can install m8t-stack (Owner/UAA + directory admin) and hard-stop if not.",
25447
+ description: "Loudly verify you can install m8t (Owner/UAA + directory admin) and hard-stop if not.",
25366
25448
  details: "Step 1 of `m8t bootstrap`. Prints an unmissable admin-credentials notice, then checks: Owner or User Access Administrator at subscription scope (hard requirement), directory-admin capability to register the app (or pass --client-id), and registers Microsoft.ContainerInstance. Exits non-zero with the exact failing check + remedy.",
25367
25449
  examples: [
25368
25450
  ["Run the preflight", "$0 bootstrap preflight"],
@@ -25386,7 +25468,7 @@ var BootstrapPreflightCommand = class extends M8tCommand {
25386
25468
  }
25387
25469
  if (!clientId) {
25388
25470
  const appReg = await checkAppRegCapability(oid);
25389
- this.context.stdout.write(line(appReg.ok, "Directory admin \u2014 can register the m8t-stack app", "first-run app registration"));
25471
+ this.context.stdout.write(line(appReg.ok, "Directory admin \u2014 can register the m8t app", "first-run app registration"));
25390
25472
  if (!appReg.ok) {
25391
25473
  this.context.stderr.write(failBlock(
25392
25474
  appReg.inconclusive ? "Couldn't verify your directory admin role (Microsoft Graph denied the read \u2014 common for guest accounts)." : "You don't hold a directory admin role (Application / Cloud Application / Global Administrator).",
@@ -25448,7 +25530,7 @@ async function ensureResourceGroup2(opts) {
25448
25530
  "--subscription",
25449
25531
  opts.subscriptionId,
25450
25532
  "--tags",
25451
- "m8t-stack=deployment",
25533
+ "m8t=deployment",
25452
25534
  "--only-show-errors"
25453
25535
  ]);
25454
25536
  }
@@ -25654,7 +25736,7 @@ import * as fs29 from "fs/promises";
25654
25736
  import * as os13 from "os";
25655
25737
  import * as path31 from "path";
25656
25738
  function stateDir(home) {
25657
- return path31.join(home, ".m8t-stack");
25739
+ return path31.join(home, ".m8t");
25658
25740
  }
25659
25741
  function statePath(home) {
25660
25742
  return path31.join(stateDir(home), "bootstrap.json");
@@ -25678,19 +25760,19 @@ async function writeBootstrapState(state, home = os13.homedir()) {
25678
25760
  // src/commands/bootstrap/launch.ts
25679
25761
  var DEFAULT_RG = "rg-m8t-stack";
25680
25762
  var DEFAULT_INSTALLER = "ghcr.io/m8t-labs/m8t-installer";
25681
- var DEFAULT_INSTALLER_TAG = "v0.1.32";
25763
+ var DEFAULT_INSTALLER_TAG = "v0.1.33";
25682
25764
  var ACI_NAME = "m8t-installer";
25683
25765
  var MI_NAME = "m8t-installer-mi";
25684
25766
  var BootstrapLaunchCommand = class extends M8tCommand {
25685
25767
  static paths = [["bootstrap", "launch"]];
25686
25768
  static usage = Command49.Usage({
25687
25769
  description: "Create + authorize the installer managed identity, then kick the cloud installer.",
25688
- details: "Step 2 of `m8t bootstrap` (run after `preflight`). Ensures the resource group, creates the m8t-stack app registration (or uses --client-id), creates a user-assigned managed identity granted Owner at subscription scope, and launches the published m8t-installer image as an ACI run-to-completion job under that identity. Writes ~/.m8t-stack/bootstrap.json for `status`/`reap`/`finish`.",
25770
+ details: "Step 2 of `m8t bootstrap` (run after `preflight`). Ensures the resource group, creates the m8t app registration (or uses --client-id), creates a user-assigned managed identity granted Owner at subscription scope, and launches the published m8t-installer image as an ACI run-to-completion job under that identity. Writes ~/.m8t/bootstrap.json for `status`/`reap`/`finish`.",
25689
25771
  examples: [
25690
25772
  ["Launch in eastus2", "$0 bootstrap launch --location eastus2"],
25691
25773
  ["BYO app registration", "$0 bootstrap launch --location eastus2 --client-id <appId>"],
25692
- ["Pin a specific installer tag", "$0 bootstrap launch --location eastus2 --installer-tag v0.1.32"],
25693
- ["Override the full installer image ref", "$0 bootstrap launch --location eastus2 --installer-image ghcr.io/m8t-labs/m8t-installer:v0.1.32"]
25774
+ ["Pin a specific installer tag", "$0 bootstrap launch --location eastus2 --installer-tag v0.1.33"],
25775
+ ["Override the full installer image ref", "$0 bootstrap launch --location eastus2 --installer-image ghcr.io/m8t-labs/m8t-installer:v0.1.33"]
25694
25776
  ]
25695
25777
  });
25696
25778
  location = Option46.String("--location");
@@ -25719,7 +25801,7 @@ var BootstrapLaunchCommand = class extends M8tCommand {
25719
25801
  const subscriptionId = (typeof this.subscription === "string" ? this.subscription : void 0) ?? account.subscriptionId;
25720
25802
  const out = (m) => this.context.stderr.write(` ${colors.dim(m)}
25721
25803
  `);
25722
- const credsPath = typeof this.githubAppCreds === "string" ? this.githubAppCreds : path32.join(os14.homedir(), ".m8t-stack", "github-app.json");
25804
+ const credsPath = typeof this.githubAppCreds === "string" ? this.githubAppCreds : path32.join(os14.homedir(), ".m8t", "github-app.json");
25723
25805
  let githubApp;
25724
25806
  if (fs30.existsSync(credsPath)) {
25725
25807
  let parsed;
@@ -25755,7 +25837,7 @@ var BootstrapLaunchCommand = class extends M8tCommand {
25755
25837
  }
25756
25838
  out("registering Microsoft.ContainerInstance\u2026");
25757
25839
  await registerContainerInstance(subscriptionId);
25758
- out("resolving the m8t-stack app registration\u2026");
25840
+ out("resolving the m8t app registration\u2026");
25759
25841
  const appReg = await ensureAppReg({ tenantId: account.tenantId, clientId: clientIdOpt });
25760
25842
  out(`ensuring resource group ${resourceGroup}\u2026`);
25761
25843
  await ensureResourceGroup2({ name: resourceGroup, location, subscriptionId });
@@ -25846,7 +25928,7 @@ var BootstrapStatusCommand = class extends M8tCommand {
25846
25928
  if (!state) {
25847
25929
  throw new LocalCliError({
25848
25930
  code: "BOOTSTRAP_NO_STATE",
25849
- message: "No bootstrap is in flight (no ~/.m8t-stack/bootstrap.json).",
25931
+ message: "No bootstrap is in flight (no ~/.m8t/bootstrap.json).",
25850
25932
  hint: "Run 'm8t bootstrap launch --location <region>' first."
25851
25933
  });
25852
25934
  }
@@ -26297,7 +26379,7 @@ function composeFounderIdentityNote(id) {
26297
26379
 
26298
26380
  // src/lib/company-profile-seed.ts
26299
26381
  function readGithubAppCreds(credsPath) {
26300
- const p = credsPath ?? path33.join(os15.homedir(), ".m8t-stack", "github-app.json");
26382
+ const p = credsPath ?? path33.join(os15.homedir(), ".m8t", "github-app.json");
26301
26383
  try {
26302
26384
  return JSON.parse(readFileSync20(p, "utf8"));
26303
26385
  } catch {
@@ -26362,7 +26444,7 @@ async function applyProfileToBrain(args) {
26362
26444
  });
26363
26445
  }
26364
26446
  function spawnDetachedSeedWatch() {
26365
- const logPath = path33.join(os15.homedir(), ".m8t-stack", "seed-profile.log");
26447
+ const logPath = path33.join(os15.homedir(), ".m8t", "seed-profile.log");
26366
26448
  const fd = openSync(logPath, "a");
26367
26449
  try {
26368
26450
  const child = spawn6(process.execPath, [process.argv[1] ?? "", "bootstrap", "seed-profile", "--watch"], {
@@ -26441,7 +26523,7 @@ var BootstrapFinishCommand = class extends M8tCommand {
26441
26523
  static paths = [["bootstrap", "finish"]];
26442
26524
  static usage = Command52.Usage({
26443
26525
  description: "Point your local tools at the now-live platform (repo-root marker, discovery cache, next steps).",
26444
- details: "Final step of `m8t bootstrap` (after the install reaches done). Writes ~/.m8t-stack/repo-root, points your local tools at the live gateway, and \u2014 if you completed the onboarding questionnaire \u2014 seeds your brain-backed advisor's brain with your company profile (best-effort; never blocks finish). Run `m8t bootstrap seed-profile` to seed manually later.",
26526
+ details: "Final step of `m8t bootstrap` (after the install reaches done). Writes ~/.m8t/repo-root, points your local tools at the live gateway, and \u2014 if you completed the onboarding questionnaire \u2014 seeds your brain-backed advisor's brain with your company profile (best-effort; never blocks finish). Run `m8t bootstrap seed-profile` to seed manually later.",
26445
26527
  examples: [["Finish local", "$0 bootstrap finish --repo-root /path/to/m8t"]]
26446
26528
  });
26447
26529
  repoRoot = Option49.String("--repo-root");
@@ -26461,7 +26543,7 @@ var BootstrapFinishCommand = class extends M8tCommand {
26461
26543
  });
26462
26544
  }
26463
26545
  const repoRoot = (typeof this.repoRoot === "string" ? this.repoRoot : void 0) ?? process.cwd();
26464
- const markerDir = path34.join(os16.homedir(), ".m8t-stack");
26546
+ const markerDir = path34.join(os16.homedir(), ".m8t");
26465
26547
  await fs31.mkdir(markerDir, { recursive: true });
26466
26548
  await fs31.writeFile(path34.join(markerDir, "repo-root"), `${repoRoot}
26467
26549
  `, "utf8");
@@ -26520,8 +26602,10 @@ var BootstrapFinishCommand = class extends M8tCommand {
26520
26602
  }
26521
26603
  this.context.stdout.write(renderInstallSummary({ webappUrl, brainOrg }) + "\n");
26522
26604
  this.context.stdout.write(
26523
- `${colors.field("Finish wiring your coding agent:")}
26524
- \u2022 Render the m8t personas + MCP into your host \u2014 follow guides/install/m8t.md (step 4) and, optionally, guides/install/m8t-stack.md (step 5).
26605
+ `${colors.field("Optional local tooling for your coding agent:")}
26606
+ \u2022 Talk to your deployed workers from agent sessions (e.g. /stacey) \u2014 install the m8t plugin: guides/install/m8t-plugin.md.
26607
+ \u2022 Azure-capable MCP servers (microsoft/azure-skills, Microsoft Learn) \u2014 see the optional steps in guides/install.md.
26608
+ \u2022 Deploy workers conversationally with the opt-in persona skills \u2014 see guides/workers.md.
26525
26609
  \u2022 Make sure your m8t CLI is current: npm i -g @m8t-stack/cli@latest
26526
26610
 
26527
26611
  ${colors.field("Then open a brand new chat/session")} \u2014 new skills + MCP servers load only on a fresh start.
@@ -26778,14 +26862,14 @@ async function installWebDeps(repoRoot) {
26778
26862
  await runInherit("pnpm", ["install"], repoRoot, "BOOTSTRAP_UI_INSTALL_FAILED");
26779
26863
  }
26780
26864
  function onboardingUiPaths(home = os17.homedir()) {
26781
- const dir = path35.join(home, ".m8t-stack");
26865
+ const dir = path35.join(home, ".m8t");
26782
26866
  return {
26783
26867
  logPath: path35.join(dir, "onboarding-ui.log"),
26784
26868
  pidPath: path35.join(dir, "onboarding-ui.pid")
26785
26869
  };
26786
26870
  }
26787
26871
  function onboardingRelayPaths(home = os17.homedir()) {
26788
- const dir = path35.join(home, ".m8t-stack");
26872
+ const dir = path35.join(home, ".m8t");
26789
26873
  return {
26790
26874
  logPath: path35.join(dir, "onboarding-relay.log"),
26791
26875
  pidPath: path35.join(dir, "onboarding-relay.pid")
@@ -26979,7 +27063,7 @@ var BootstrapUiCommand = class extends M8tCommand {
26979
27063
  if (!state) {
26980
27064
  throw new LocalCliError({
26981
27065
  code: "BOOTSTRAP_NO_STATE",
26982
- message: "No bootstrap is in flight (no ~/.m8t-stack/bootstrap.json).",
27066
+ message: "No bootstrap is in flight (no ~/.m8t/bootstrap.json).",
26983
27067
  hint: "Run 'm8t bootstrap launch --location <region>' first."
26984
27068
  });
26985
27069
  }
@@ -26995,8 +27079,8 @@ var BootstrapUiCommand = class extends M8tCommand {
26995
27079
  this.context.stderr.write(` ${colors.dim(m)}
26996
27080
  `);
26997
27081
  };
26998
- if (fs33.existsSync(path36.join(os18.homedir(), ".m8t-stack", "config.yaml"))) {
26999
- out(colors.error("\u26A0 an existing ~/.m8t-stack/config.yaml will override the onboarding app registration in apps/web \u2014 if Microsoft sign-in fails, move it aside and retry."));
27082
+ if (fs33.existsSync(path36.join(os18.homedir(), ".m8t", "config.yaml"))) {
27083
+ out(colors.error("\u26A0 an existing ~/.m8t/config.yaml will override the onboarding app registration in apps/web \u2014 if Microsoft sign-in fails, move it aside and retry."));
27000
27084
  }
27001
27085
  const credential2 = new DefaultAzureCredential20();
27002
27086
  const account = await getAzAccount();
@@ -27119,7 +27203,7 @@ var BootstrapSeedProfileCommand = class extends M8tCommand {
27119
27203
  credsPath: typeof this.githubAppCreds === "string" ? this.githubAppCreds : void 0
27120
27204
  });
27121
27205
  if (!ctx) {
27122
- this.context.stderr.write(` ${colors.dim("no GitHub App creds (~/.m8t-stack/github-app.json) \u2014 no brain to seed; skipping.")}
27206
+ this.context.stderr.write(` ${colors.dim("no GitHub App creds (~/.m8t/github-app.json) \u2014 no brain to seed; skipping.")}
27123
27207
  `);
27124
27208
  return 0;
27125
27209
  }
@@ -27159,7 +27243,7 @@ var BootstrapSeedProfileCommand = class extends M8tCommand {
27159
27243
  // src/cli.ts
27160
27244
  var cli = new Cli({
27161
27245
  binaryName: "m8t",
27162
- binaryLabel: "m8t CLI \u2014 manage m8t-stack deployments",
27246
+ binaryLabel: "m8t CLI \u2014 manage m8t deployments",
27163
27247
  binaryVersion: CLI_VERSION
27164
27248
  });
27165
27249
  cli.register(Builtins.HelpCommand);