dev-cockpit 0.4.1 → 0.5.0

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/CHANGELOG.md CHANGED
@@ -2,6 +2,19 @@
2
2
 
3
3
  All notable changes to `dev-cockpit` are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
4
4
 
5
+ ## [0.5.0] — 2026-06-11
6
+
7
+ ### Added
8
+
9
+ - **`Profile.cliCommand`** — the command users type to invoke the profile's CLI (e.g. `awc-cockpit`). Used for the commander program name and threaded into every user-facing message that suggests a command (init-config guard, link hint, doctor suggestions), so instructions are copy-pasteable for profile users. Falls back to `appName`, then `dev-cockpit`.
10
+ - **`Profile.profileKey`** — explicit key for the profile's namespace in cockpit.yaml (`profile.<key>:`), used by dev/doctor/mount config loading. Falls back to `appName` (its historical carrier), which now remains responsible only for state-dir identity defaults.
11
+ - **init-config manifest-precedence guard** — when the workspace is registered to an external config via the manifest, `init-config` refuses to write a workspace-local `cockpit.yaml` (which would take precedence in discovery and silently disconnect the registered config). `--force` overrides. Targets outside the discovery location (`-o elsewhere.yaml`) pass freely.
12
+ - **init-config `-o` wiring hint** — files written outside the discovery location end with explicit instructions to register them (`<cli> link <path>`), since discovery only finds `<workspace>/cockpit.yaml` or manifest registrations.
13
+
14
+ ### Changed
15
+
16
+ - **init-config is interactive by default on a TTY** — the wizard (including profile-contributed steps) runs without flags; `--static` writes the canned starter template without prompts; non-TTY invocations automatically get the static template; `-i` still forces the wizard.
17
+
5
18
  ## [0.3.1] — 2026-05-12
6
19
 
7
20
  ### Added
@@ -1 +1 @@
1
- {"version":3,"file":"buildCli.d.ts","sourceRoot":"","sources":["../src/buildCli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAO/C,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAkBD,wBAAgB,QAAQ,CAAC,IAAI,GAAE,eAAoB,GAAG,OAAO,CA+J5D"}
1
+ {"version":3,"file":"buildCli.d.ts","sourceRoot":"","sources":["../src/buildCli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAO/C,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAkBD,wBAAgB,QAAQ,CAAC,IAAI,GAAE,eAAoB,GAAG,OAAO,CA2K5D"}
@@ -22,6 +22,12 @@ export interface InitConfigOptions {
22
22
  profile?: Profile;
23
23
  /** Override default output path (`<cwd>/cockpit.yaml`). */
24
24
  output?: string;
25
+ /**
26
+ * Command name used in user-facing messages and suggested commands.
27
+ * Profiles pass their own (e.g. "awc-cockpit") so instructions are
28
+ * copy-pasteable for their users. Default: "dev-cockpit".
29
+ */
30
+ cliCommand?: string;
25
31
  }
26
32
  export declare function buildTemplate(opts: {
27
33
  withDocker: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"init-config.d.ts","sourceRoot":"","sources":["../../src/commands/init-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAIhD,MAAM,WAAW,iBAAiB;IAChC,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mDAAmD;IACnD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sFAAsF;IACtF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAoEpF;AAED,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAsB,iBAAiB,CACrC,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAgElC"}
1
+ {"version":3,"file":"init-config.d.ts","sourceRoot":"","sources":["../../src/commands/init-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAKhD,MAAM,WAAW,iBAAiB;IAChC,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mDAAmD;IACnD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sFAAsF;IACtF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAwFpF;AAED,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAsB,iBAAiB,CACrC,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAmGlC"}
@@ -161,6 +161,19 @@ export interface Profile {
161
161
  * core 8 steps. Each step's YAML output lands under `profile.<appName>:`
162
162
  * in the generated cockpit.yaml.
163
163
  */
164
+ /**
165
+ * The command users type to invoke this profile's CLI (e.g.
166
+ * "awc-cockpit"). Used for the commander program name and in every
167
+ * user-facing message that suggests a command. Falls back to `appName`,
168
+ * then "dev-cockpit".
169
+ */
170
+ cliCommand?: string;
171
+ /**
172
+ * Key of this profile's namespace in cockpit.yaml (`profile.<key>:`),
173
+ * used when loading/validating config in dev/doctor/mount. Falls back
174
+ * to `appName` (its historical carrier).
175
+ */
176
+ profileKey?: string;
164
177
  wizardSteps?: readonly WizardStep[];
165
178
  configSchemaExt?: z.ZodObject<z.ZodRawShape>;
166
179
  mountCandidatesProvider?: () => Mount[] | Promise<Mount[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -91567,7 +91567,7 @@ async function devCommand(opts = {}) {
91567
91567
  }
91568
91568
  const config = loadConfig(configPath, {
91569
91569
  configSchemaExt: profile?.configSchemaExt,
91570
- profileKey: profile?.appName
91570
+ profileKey: profile?.profileKey ?? profile?.appName
91571
91571
  });
91572
91572
  const seededRepos = {};
91573
91573
  const seededOrder = [];
@@ -91856,7 +91856,7 @@ async function doctorCommand(opts = {}) {
91856
91856
  }
91857
91857
  const config = loadConfig(configPath, {
91858
91858
  configSchemaExt: profile?.configSchemaExt,
91859
- profileKey: profile?.appName
91859
+ profileKey: profile?.profileKey ?? profile?.appName
91860
91860
  });
91861
91861
  const ctx = buildHealthContext(workspaceRoot);
91862
91862
  const registry = buildHealthRegistry({
@@ -92920,10 +92920,10 @@ docker:
92920
92920
  # - name: app
92921
92921
  # tail: true
92922
92922
  `;
92923
- return `# dev-cockpit configuration. All keys except \`version\` and \`appName\` are
92924
- # optional; defaults from src/core/config.ts apply when missing.
92923
+ return `# dev-cockpit configuration (schema v3). All keys except \`version\` and
92924
+ # \`appName\` are optional; defaults from src/core/config.ts apply when missing.
92925
92925
 
92926
- version: 2
92926
+ version: 3
92927
92927
  appName: ${opts.appName}
92928
92928
 
92929
92929
  # Long-running processes streamed into the Output pane.
@@ -92952,6 +92952,26 @@ ${dockerBlock}
92952
92952
  # label: app responsive
92953
92953
  # type: http-ok
92954
92954
  # url: http://localhost:3000/health
92955
+ # remediation:
92956
+ # label: restart app
92957
+ # command: docker compose restart app
92958
+
92959
+ # Single-keypress \u2192 health-id dispatch table (v3). Value can be a single id
92960
+ # or a list; multi-id bindings fire each UNIQUE remediation (deduped by
92961
+ # \`command|cwd\`) once. Action keys live separately on \`actions[].key\`.
92962
+ # keybindings:
92963
+ # R: app-up
92964
+ # D:
92965
+ # - app-up
92966
+
92967
+ # Named shell commands surfaced via the \`:\` palette and the Targets pane.
92968
+ # \`scope\` values: \`global\` | \`repos\` | \`repos:<id>\`.
92969
+ # actions:
92970
+ # - id: docs
92971
+ # label: Open docs
92972
+ # command: open ./docs/index.html
92973
+ # scope: global
92974
+ # key: o
92955
92975
 
92956
92976
  # Help-pane sources (markdown trees) and the landing page slug.
92957
92977
  # help:
@@ -92971,12 +92991,29 @@ ${dockerBlock}
92971
92991
  }
92972
92992
  async function initConfigCommand(opts = {}) {
92973
92993
  const cwd = opts.cwd ?? process.cwd();
92994
+ const cli = opts.cliCommand ?? "dev-cockpit";
92974
92995
  const target = opts.output ? path22.resolve(cwd, opts.output) : path22.join(cwd, "cockpit.yaml");
92975
92996
  const exists = fs15.existsSync(target);
92976
92997
  if (exists && !opts.force) {
92977
92998
  process.stdout.write(
92978
- `dev-cockpit init-config: ${target} already exists.
92999
+ `${cli} init-config: ${target} already exists.
92979
93000
  Pass --force to overwrite.
93001
+ `
93002
+ );
93003
+ return null;
93004
+ }
93005
+ const discoveryTarget = path22.join(cwd, "cockpit.yaml");
93006
+ const registered = lookupConfig(cwd);
93007
+ if (registered && !opts.force && target === discoveryTarget && path22.resolve(registered) !== target) {
93008
+ process.stdout.write(
93009
+ `${cli} init-config: this workspace already uses an external config:
93010
+
93011
+ ${registered}
93012
+ (registered in ${manifestPath()})
93013
+
93014
+ A new ${target} would take precedence over it \u2014 commands in this workspace would stop reading the registered config and use the fresh starter file instead. The registered file itself is not modified.
93015
+
93016
+ Edit the registered config instead, or pass --force to write the local file anyway.
92980
93017
  `
92981
93018
  );
92982
93019
  return null;
@@ -92993,15 +93030,24 @@ async function initConfigCommand(opts = {}) {
92993
93030
  });
92994
93031
  fs15.writeFileSync(target, content, "utf8");
92995
93032
  process.stdout.write(`
92996
- dev-cockpit init-config: wrote ${target}
93033
+ ${cli} init-config: wrote ${target}
92997
93034
  `);
93035
+ if (target !== discoveryTarget) {
93036
+ process.stdout.write(
93037
+ `
93038
+ Note: this file is not wired to any workspace \u2014 discovery only finds <workspace>/cockpit.yaml or manifest registrations.
93039
+ To use it from a workspace, register it:
93040
+ cd <workspace> && ${cli} link ${target}
93041
+ `
93042
+ );
93043
+ }
92998
93044
  if (opts.withDocker) {
92999
93045
  process.stdout.write(" Docker block uncommented; adjust composeFile/services as needed.\n");
93000
93046
  }
93001
93047
  if (opts.interactive) {
93002
93048
  const { confirm } = await import("@inquirer/prompts");
93003
93049
  const runDoctorNow = await confirm({
93004
- message: "Run `dev-cockpit doctor` now to validate the file + show initial health?",
93050
+ message: `Run \`${cli} doctor\` now to validate the file + show initial health?`,
93005
93051
  default: true
93006
93052
  });
93007
93053
  if (runDoctorNow) {
@@ -93017,13 +93063,16 @@ doctor failed: ${err instanceof Error ? err.message : String(err)}
93017
93063
  }
93018
93064
  }
93019
93065
  process.stdout.write("\nNext:\n");
93020
- process.stdout.write(" \u2022 Edit cockpit.yaml any time, then re-run `dev-cockpit doctor`.\n");
93066
+ process.stdout.write(` \u2022 Edit cockpit.yaml any time, then re-run \`${cli} doctor\`.
93067
+ `);
93021
93068
  process.stdout.write(
93022
- " \u2022 Run `dev-cockpit dev` to launch the cockpit (Tab/arrows cycle panes, q quits).\n"
93069
+ ` \u2022 Run \`${cli} dev\` to launch the cockpit (Tab/arrows cycle panes, q quits).
93070
+ `
93023
93071
  );
93024
93072
  process.stdout.write(" \u2022 The Help tab inside the cockpit has the full docs.\n");
93025
93073
  } else {
93026
- process.stdout.write(" Run `dev-cockpit doctor` to verify the config loads cleanly.\n");
93074
+ process.stdout.write(` Run \`${cli} doctor\` to verify the config loads cleanly.
93075
+ `);
93027
93076
  }
93028
93077
  return { path: target, overwrote: exists };
93029
93078
  }
@@ -93134,7 +93183,7 @@ async function resolveContext(opts) {
93134
93183
  }
93135
93184
  const config = loadConfig(configPath, {
93136
93185
  configSchemaExt: profile?.configSchemaExt,
93137
- profileKey: profile?.appName
93186
+ profileKey: profile?.profileKey ?? profile?.appName
93138
93187
  });
93139
93188
  const explicitService = opts.service ?? config.mount.service ?? config.docker?.services?.[0]?.name;
93140
93189
  if (!explicitService) {
@@ -93576,7 +93625,7 @@ function hasCommand(program2, name) {
93576
93625
  function buildCli(opts = {}) {
93577
93626
  const program2 = new Command();
93578
93627
  const profile = opts.profile;
93579
- const appName = profile?.appName ?? "dev-cockpit";
93628
+ const appName = profile?.cliCommand ?? profile?.appName ?? "dev-cockpit";
93580
93629
  program2.name(appName).description(profile ? `${appName} \u2014 built on dev-cockpit` : "Generic terminal UI dev cockpit").version(profile?.version ?? readPackageVersion(), "-V, --version", "Output the version number");
93581
93630
  if (profile?.setupCli) {
93582
93631
  profile.setupCli(program2);
@@ -93600,17 +93649,22 @@ function buildCli(opts = {}) {
93600
93649
  if (!hasCommand(program2, "init-config")) {
93601
93650
  program2.command("init-config").description("Write a starter cockpit.yaml in the current directory").option("-f, --force", "Overwrite an existing cockpit.yaml without prompting", false).option("--with-docker", "Include an uncommented docker block (static template only)", false).option(
93602
93651
  "-i, --interactive",
93603
- "Walk through prompts to populate the file (skips static template)",
93652
+ "Force the interactive wizard (default on a TTY; this flag matters in scripts)",
93604
93653
  false
93605
- ).option("-o, --output <path>", "Write the file to this path instead of <cwd>/cockpit.yaml").action(
93654
+ ).option("--static", "Write the static starter template without prompts", false).option(
93655
+ "-o, --output <path>",
93656
+ "Write the file to this path instead of <cwd>/cockpit.yaml. The file is NOT registered/linked to any workspace \u2014 run `link <path>` from the workspace afterwards"
93657
+ ).action(
93606
93658
  async (cmdOpts) => {
93659
+ const interactive = cmdOpts.static ? false : (cmdOpts.interactive ?? false) || Boolean(process.stdout.isTTY && process.stdin.isTTY);
93607
93660
  await initConfigCommand({
93608
93661
  force: cmdOpts.force ?? false,
93609
93662
  withDocker: cmdOpts.withDocker ?? false,
93610
- interactive: cmdOpts.interactive ?? false,
93663
+ interactive,
93611
93664
  appName,
93612
93665
  profile,
93613
- output: cmdOpts.output
93666
+ output: cmdOpts.output,
93667
+ cliCommand: appName
93614
93668
  });
93615
93669
  }
93616
93670
  );