@withandeo/cli 0.19.11 → 0.19.12

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/README.md CHANGED
@@ -38,7 +38,7 @@ andeo docs --json
38
38
  andeo docs workflows
39
39
  andeo capabilities --json
40
40
  andeo doctor --json
41
- andeo skill install --agent codex --force --json
41
+ andeo skill sync --agent codex --json
42
42
  ```
43
43
 
44
44
  `docs` reads version-matched bundled guides offline, without login or a checkout.
@@ -47,6 +47,12 @@ The global skill downloads the latest compatible public guide from R2 through
47
47
  file hashes are independent of the npm package version. A fresh installation
48
48
  falls back to the bundled guide during an outage; an existing installation is
49
49
  preserved. `skill install --bundled` explicitly selects the offline bundle.
50
+ `skill status` checks freshness; `skill sync` refreshes an existing managed copy
51
+ only when its owned files still match the installation manifest. Local edits,
52
+ unmanaged copies and new-file collisions are reported and preserved. Sync never
53
+ installs a missing guide. Updated results include `rereadRequired: true`: agents
54
+ must reread the entrypoint and relevant references in an active chat. Both
55
+ commands accept `--agent codex|claude` and `--directory PATH`.
50
56
  Review local skill edits before `--force`; unrelated files are preserved and
51
57
  symlinked owned destinations are rejected. `doctor` warns when the global skill
52
58
  differs from the latest public guide or its compatibility cannot be verified;
@@ -82,6 +88,60 @@ npx @withandeo/cli --version
82
88
  npx @withandeo/cli --help
83
89
  ```
84
90
 
91
+ ## Keep the CLI and global guide current
92
+
93
+ For an installation available from any directory:
94
+
95
+ ```sh
96
+ npm install -g @withandeo/cli@latest
97
+ andeo config autoupgrade status --json
98
+ andeo upgrade --json
99
+ andeo skill install --agent codex --json
100
+ andeo skill sync --agent codex --json
101
+ ```
102
+
103
+ CLI 0.19.12 enables maintenance for verified global npm, pnpm and Yarn 1
104
+ installations. After a successful ordinary command, it checks at most once per
105
+ day and installs the newest stable release compatible with the running Node
106
+ version within the current major. Before 1.0, automatic upgrades stay within
107
+ the current minor (`0.19.x`). `andeo upgrade` explicitly selects the latest
108
+ stable version, including compatibility boundaries, and checks Node requirements.
109
+ The next invocation uses the new CLI. Package-manager output stays out of stdout.
110
+
111
+ Upgrades download the CLI archive directly from `registry.npmjs.org` and verify
112
+ its SHA-512 against the selected release metadata before invoking the package
113
+ manager. A scoped registry cannot substitute the CLI archive. The installed
114
+ package name and version are checked before reporting success or advancing the
115
+ guide's compatibility floor. Verified archives remain in
116
+ `~/.config/andeo/updates/packages` because pnpm and Yarn retain local archive
117
+ references in their global manifests. The package manager and its configuration
118
+ remain trusted for dependency resolution and lifecycle scripts. A manager failure
119
+ may require a manual reinstall; package-manager changes are not rolled back.
120
+
121
+ `andeo config autoupgrade off` disables automatic CLI installation and retains
122
+ daily update reminders; `on` re-enables it. Existing Codex and Claude global
123
+ guides refresh independently, even when CLI auto-upgrade is off. Custom skill
124
+ locations require explicit `skill sync --directory PATH`. Guidance compatibility
125
+ is checked against the installed CLI, including an upgrade completed in that run.
126
+
127
+ CI, source checkouts, project-local dependencies, temporary `npx` installations,
128
+ and installations whose global package-manager ownership cannot be verified do
129
+ not run automatic maintenance. Windows package-manager shims are conservatively
130
+ treated as unmanaged; use the package manager directly there. Help, version and
131
+ explicit maintenance commands skip background work. An outage or update failure
132
+ does not change the completed command's exit code or JSON output; attempted
133
+ checks are cached for a day, and explicit upgrade/sync commands can retry sooner.
134
+
135
+ Settings are stored at `~/.config/andeo/updates/settings.json`. Update locks
136
+ serialize concurrent maintenance and skill installations; dead-process locks
137
+ are reclaimed. Skill replacements are staged completely before swapping the
138
+ installed directory, with rollback if the swap fails. If a process is interrupted
139
+ during the swap, retain any `.andeo-stage-*/previous` directory for recovery.
140
+
141
+ Older CLIs need a one-time package-manager upgrade to acquire these commands.
142
+ Release the CLI before publishing guidance that requires 0.19.12; public guide
143
+ publication remains separate from npm releases.
144
+
85
145
  ## Start from the template
86
146
 
87
147
  The optional starter creates a merchant-owned two-service repository: a stable Shopify authentication gateway and an independently deployable React portal connected through `PORTAL_UI`.
package/dist/cli.js CHANGED
@@ -1,4 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import { runCli } from "./main.js";
2
+ import { CLI_VERSION, runCli } from "./main.js";
3
+ import { defaultUpdateRuntime, maintainCli } from "./updates.js";
3
4
  process.exitCode = await runCli(process.argv.slice(2));
5
+ if (process.exitCode === 0)
6
+ await maintainCli(process.argv.slice(2), defaultUpdateRuntime(CLI_VERSION));
4
7
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,CAAC,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEjE,OAAO,CAAC,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC;IAAE,MAAM,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC"}
@@ -12,6 +12,29 @@ export declare function installDocumentation(base: string, force: boolean, versi
12
12
  minimumCliVersion?: string | undefined;
13
13
  warning?: string | undefined;
14
14
  }>;
15
+ export declare function skillDocumentationStatus(base: string, version: string, options?: {
16
+ fetcher?: typeof fetch;
17
+ }): Promise<{
18
+ status: string;
19
+ path: string;
20
+ }>;
21
+ export declare function syncDocumentation(base: string, version: string, options?: {
22
+ fetcher?: typeof fetch;
23
+ }): Promise<{
24
+ status: string;
25
+ path: string;
26
+ } | {
27
+ path: string;
28
+ version: string;
29
+ source: string;
30
+ files: number;
31
+ revision?: string | undefined;
32
+ minimumCliVersion?: string | undefined;
33
+ warning?: string | undefined;
34
+ status: string;
35
+ rereadRequired: boolean;
36
+ message: string;
37
+ }>;
15
38
  export declare function installedSkillCheck(home: string, options?: {
16
39
  fetcher?: typeof fetch;
17
40
  cliVersion?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"documentation.d.ts","sourceRoot":"","sources":["../src/documentation.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,UAAU,YAAI,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,QAAQ,EAAE,eAAe,CAAU,CAAC;AAI3O,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKtE;AAgBD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EACtF,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO;;;;;;;;GAkC5D;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EACpD,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAwBpI"}
1
+ {"version":3,"file":"documentation.d.ts","sourceRoot":"","sources":["../src/documentation.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,UAAU,YAAI,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,QAAQ,EAAE,eAAe,CAAU,CAAC;AAI3O,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKtE;AAgBD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EACtF,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO;;;;;;;;GAE5D;AA4GD,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAC1E,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO;;;GAGzC;AA8BD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO;;;;;;;;;;;;;;GAQ9G;AAID,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EACpD,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAwBpI"}
@@ -1,9 +1,10 @@
1
1
  import { createHash } from "node:crypto";
2
- import { lstat, mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { cp, lstat, mkdir, mkdtemp, readFile, rename, rm, writeFile } from "node:fs/promises";
3
3
  import { resolve } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import { CliError } from "./errors.js";
6
- import { MAX_PUBLIC_SKILL_BYTES, PUBLIC_SKILL_URL, parsePublicSkillBundle, verifyPublicSkillBundle } from "./public-skill-contract.js";
6
+ import { atomicJson, withUpdateLock } from "./update-storage.js";
7
+ import { MAX_PUBLIC_SKILL_BYTES, PUBLIC_SKILL_URL, publicSkillPath, parsePublicSkillBundle, verifyPublicSkillBundle } from "./public-skill-contract.js";
7
8
  export const DOC_TOPICS = ["authentication", "managed-source", "delivery", "email", "workflows", "configuration-secrets", "storage", "services", "domains-auth", "observability", "releases-recovery", "skills", "feature-flags"];
8
9
  const root = fileURLToPath(new URL("../skill/tender-accounts/", import.meta.url));
9
10
  const files = ["SKILL.md", ...DOC_TOPICS.map(topic => `references/${topic}.md`)];
@@ -27,6 +28,9 @@ async function rejectSymlink(path) {
27
28
  throw new CliError("skill_target_unsafe", "Skill installation cannot follow symbolic links.");
28
29
  }
29
30
  export async function installDocumentation(base, force, version, options = {}) {
31
+ return withUpdateLock(resolve(base, ".andeo-update-lock"), () => installUnlocked(base, force, version, options));
32
+ }
33
+ async function installUnlocked(base, force, version, options = {}) {
30
34
  const target = resolve(base, "andeo");
31
35
  // The explicitly selected base may use an OS alias such as /var -> /private/var.
32
36
  // Never follow links within the skill directory we own.
@@ -38,9 +42,9 @@ export async function installDocumentation(base, force, version, options = {}) {
38
42
  });
39
43
  if (exists && !force)
40
44
  throw new CliError("skill_exists", `An Andeo skill already exists at ${target}.`, "andeo skill install --force");
41
- let remote;
45
+ let remote = options.remote;
42
46
  let warning;
43
- if (!options.bundled) {
47
+ if (!options.bundled && !remote) {
44
48
  try {
45
49
  remote = await fetchPublicSkill(version, options.fetcher ?? fetch);
46
50
  }
@@ -49,25 +53,165 @@ export async function installDocumentation(base, force, version, options = {}) {
49
53
  // can use the offline bundle, but integrity/compatibility errors fail closed.
50
54
  if (!(error instanceof CliError) || error.code !== "public_skill_unavailable" || exists)
51
55
  throw error;
52
- warning = "Public skill unavailable; installed the bundled offline guide. Retry skill install --force to refresh.";
56
+ warning = "Public skill unavailable; installed the bundled offline guide. Retry skill sync to refresh.";
53
57
  }
54
58
  }
55
59
  const entries = remote?.files ?? await bundle();
56
60
  await rejectSymlink(resolve(target, "references"));
57
61
  for (const path of [...entries.map(entry => entry.path), "bundle.json"])
58
62
  await rejectSymlink(resolve(target, path));
59
- await mkdir(resolve(target, "references"), { recursive: true });
60
- // Preserve unrelated user files; replace only this explicitly owned inventory.
61
- for (const entry of entries)
62
- await writeFile(resolve(target, entry.path), entry.content);
63
63
  const source = remote ? "public" : "bundled";
64
- await writeFile(resolve(target, "bundle.json"), JSON.stringify({ schema: "andeo.skill-bundle/v1", version, source,
64
+ const manifest = { schema: "andeo.skill-bundle/v1", version, source,
65
65
  ...(remote ? { revision: remote.revision, minimumCliVersion: remote.minimumCliVersion } : {}),
66
- files: Object.fromEntries(entries.map(entry => [entry.path, digest(entry.content)])) }, null, 2) + "\n");
66
+ files: Object.fromEntries(entries.map(entry => [entry.path, digest(entry.content)])) };
67
+ // Prepare a complete replacement before touching the installed guide. A failed
68
+ // write leaves it intact; unrelated files (including their symlinks) survive.
69
+ // cp preserves directory modes. Keep the copy inside a private container so
70
+ // a shared installation cannot expose the staging tree while it is prepared.
71
+ const staging = await mkdtemp(resolve(base, ".andeo-stage-"));
72
+ const stage = resolve(staging, "next"), backup = resolve(staging, "previous");
73
+ let activated = false;
74
+ let backedUp = false;
75
+ try {
76
+ if (exists)
77
+ await cp(target, stage, { recursive: true, dereference: false, verbatimSymlinks: true });
78
+ await rejectSymlink(stage);
79
+ await rejectSymlink(resolve(stage, "references"));
80
+ // Validate the copy itself: a source entry may have become a symlink after
81
+ // the initial checks. Never write or remove files through a copied link.
82
+ for (const path of [...entries.map(entry => entry.path), "bundle.json"])
83
+ await rejectSymlink(resolve(stage, path));
84
+ const previous = exists ? await installedManifest(target) : null;
85
+ for (const path of Object.keys(previous?.files ?? {})) {
86
+ if (entries.some(entry => entry.path === path))
87
+ continue;
88
+ await rejectSymlink(resolve(target, path));
89
+ await rejectSymlink(resolve(stage, path));
90
+ const content = await readFile(resolve(target, path)).catch(() => null);
91
+ if (content && digest(content) === previous.files[path])
92
+ await rm(resolve(stage, path));
93
+ }
94
+ await mkdir(resolve(stage, "references"), { recursive: true });
95
+ for (const entry of entries) {
96
+ await rm(resolve(stage, entry.path), { force: true });
97
+ await writeFile(resolve(stage, entry.path), entry.content, { flag: "wx" });
98
+ }
99
+ await atomicJson(resolve(stage, "bundle.json"), manifest);
100
+ if (options.expectedManifest) {
101
+ await rejectSymlink(target);
102
+ await rejectSymlink(resolve(target, "references"));
103
+ const current = await installedManifest(target);
104
+ if (JSON.stringify(current) !== JSON.stringify(options.expectedManifest))
105
+ throw localChanged();
106
+ for (const [path, hash] of Object.entries(options.expectedManifest.files)) {
107
+ await rejectSymlink(resolve(target, path));
108
+ const content = await readFile(resolve(target, path)).catch(() => null);
109
+ if (!content || digest(content) !== hash)
110
+ throw localChanged();
111
+ }
112
+ for (const entry of entries) {
113
+ if (!Object.hasOwn(options.expectedManifest.files, entry.path)
114
+ && await lstat(resolve(target, entry.path)).catch(() => null))
115
+ throw localChanged();
116
+ }
117
+ }
118
+ if (exists) {
119
+ await rename(target, backup);
120
+ backedUp = true;
121
+ }
122
+ try {
123
+ await rename(stage, target);
124
+ activated = true;
125
+ }
126
+ catch (error) {
127
+ if (exists) {
128
+ await rename(backup, target);
129
+ backedUp = false;
130
+ }
131
+ throw error;
132
+ }
133
+ }
134
+ finally {
135
+ await rm(stage, { recursive: true, force: true });
136
+ // If restoring the backup failed, retain it for recovery.
137
+ if (activated || !backedUp)
138
+ await rm(staging, { recursive: true, force: true });
139
+ }
67
140
  return { path: resolve(target, "SKILL.md"), version, source, files: entries.length,
68
141
  ...(remote ? { revision: remote.revision, minimumCliVersion: remote.minimumCliVersion } : {}),
69
142
  ...(warning ? { warning } : {}) };
70
143
  }
144
+ async function installedManifest(target) {
145
+ await rejectSymlink(resolve(target, "bundle.json"));
146
+ try {
147
+ const bytes = await readFile(resolve(target, "bundle.json"));
148
+ if (bytes.length > MAX_PUBLIC_SKILL_BYTES)
149
+ return null;
150
+ const value = JSON.parse(bytes.toString("utf8"));
151
+ if (value?.schema !== "andeo.skill-bundle/v1" || !value.files || typeof value.files !== "object"
152
+ || Array.isArray(value.files) || !Object.hasOwn(value.files, "SKILL.md"))
153
+ return null;
154
+ const entries = Object.entries(value.files);
155
+ if (entries.length > 100 || entries.some(([path, hash]) => !publicSkillPath(path)
156
+ || typeof hash !== "string" || !/^[a-f0-9]{64}$/u.test(hash)))
157
+ return null;
158
+ return value;
159
+ }
160
+ catch (error) {
161
+ if (error.code === "ENOENT" || error instanceof SyntaxError)
162
+ return null;
163
+ throw error;
164
+ }
165
+ }
166
+ export async function skillDocumentationStatus(base, version, options = {}) {
167
+ const { result } = await inspectDocumentation(base, version, options);
168
+ return result;
169
+ }
170
+ async function inspectDocumentation(base, version, options) {
171
+ const target = resolve(base, "andeo");
172
+ await rejectSymlink(target);
173
+ const result = (status, extra = {}) => ({ status, path: resolve(target, "SKILL.md"), ...extra });
174
+ if (!await lstat(target).catch((error) => { if (error.code === "ENOENT")
175
+ return null; throw error; }))
176
+ return { result: result("not_installed") };
177
+ const manifest = await installedManifest(target);
178
+ if (!manifest)
179
+ return { result: result("unmanaged", { message: "No valid ownership manifest; review this installation before using skill install --force." }) };
180
+ await rejectSymlink(resolve(target, "references"));
181
+ const modified = [];
182
+ for (const [path, hash] of Object.entries(manifest.files)) {
183
+ await rejectSymlink(resolve(target, path));
184
+ const content = await readFile(resolve(target, path)).catch((error) => { if (error.code === "ENOENT")
185
+ return null; throw error; });
186
+ if (!content || digest(content) !== hash)
187
+ modified.push(path);
188
+ }
189
+ if (modified.length)
190
+ return { result: result("local_changes", { files: modified, message: "Local edits preserved. Review changes before using skill install --force." }) };
191
+ const remote = await fetchPublicSkill(version, options.fetcher ?? fetch);
192
+ for (const file of remote.files) {
193
+ await rejectSymlink(resolve(target, file.path));
194
+ if (!Object.hasOwn(manifest.files, file.path) && await lstat(resolve(target, file.path)).catch(() => null))
195
+ modified.push(file.path);
196
+ }
197
+ if (modified.length)
198
+ return { result: result("local_changes", { files: modified, message: "New guide files conflict with local files; local files preserved." }) };
199
+ const matches = remote.revision === manifest.revision && remote.files.length === Object.keys(manifest.files).length
200
+ && remote.files.every(file => manifest.files[file.path] === file.sha256);
201
+ return { result: result(matches ? "up_to_date" : "update_available", { revision: remote.revision,
202
+ installedRevision: manifest.revision ?? null, minimumCliVersion: remote.minimumCliVersion }), remote, manifest };
203
+ }
204
+ export async function syncDocumentation(base, version, options = {}) {
205
+ return withUpdateLock(resolve(base, ".andeo-update-lock"), async () => {
206
+ const { result, remote, manifest } = await inspectDocumentation(base, version, options);
207
+ if (result.status !== "update_available" || !remote || !manifest)
208
+ return result;
209
+ const installed = await installUnlocked(base, true, version, { ...options, remote, expectedManifest: manifest });
210
+ return { ...result, ...installed, status: "updated", rereadRequired: true,
211
+ message: "Reread SKILL.md and task-relevant references before continuing; active chats retain previously loaded guidance." };
212
+ });
213
+ }
214
+ function localChanged() { return new CliError("skill_local_changes", "The installed guide changed during synchronization. Local files were preserved; inspect with andeo skill status --json."); }
71
215
  export async function installedSkillCheck(home, options = {}) {
72
216
  const found = [];
73
217
  for (const parent of [".agents/skills", ".claude/skills"]) {
@@ -96,7 +240,7 @@ export async function installedSkillCheck(home, options = {}) {
96
240
  const content = await readFile(resolve(target, entry.path), "utf8").catch(() => null);
97
241
  if (content === null || digest(content) !== digest(entry.content))
98
242
  return { name: "skill", status: "warn",
99
- message: `Installed skill at ${target} differs from ${options.cliVersion ? "the latest public skill" : "this CLI bundle"}; review local edits, then run andeo skill install --agent ${parent.startsWith(".agents") ? "codex" : "claude"} --force.` };
243
+ message: `Installed skill at ${target} differs from ${options.cliVersion ? "the latest public skill" : "this CLI bundle"}; run andeo skill sync --agent ${parent.startsWith(".agents") ? "codex" : "claude"} --json; review local edits before using skill install --force.` };
100
244
  }
101
245
  }
102
246
  return { name: "skill", status: "pass", message: options.cliVersion
@@ -157,7 +301,7 @@ async function fetchPublicSkill(version, fetcher) {
157
301
  || current[0] < minimum[0] || current[0] === minimum[0] && (current[1] < minimum[1]
158
302
  || current[1] === minimum[1] && current[2] < minimum[2]);
159
303
  if (older)
160
- throw new CliError("skill_cli_upgrade_required", `This skill requires CLI ${result.minimumCliVersion} or newer.`, "Update @withandeo/cli, then run andeo skill install --force.");
304
+ throw new CliError("skill_cli_upgrade_required", `This skill requires CLI ${result.minimumCliVersion} or newer.`, "Update @withandeo/cli, then run andeo skill sync --json.");
161
305
  return result;
162
306
  }
163
307
  function publicUnavailable() {
@@ -1 +1 @@
1
- {"version":3,"file":"documentation.js","sourceRoot":"","sources":["../src/documentation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"documentation.js","sourceRoot":"","sources":["../src/documentation.ts"],"names":[],"mappings":"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"}
package/dist/main.d.ts CHANGED
@@ -2,6 +2,7 @@ import { type CliAuthStore } from "./auth-store.js";
2
2
  import { waitForLoopbackAuthorization } from "./oauth.js";
3
3
  import { captureCommand, runProjectCommand } from "./processes.js";
4
4
  import { type CliProfileBindings } from "./profile-bindings.js";
5
+ import { type UpdateRunner } from "./updates.js";
5
6
  export declare const CLI_VERSION: string;
6
7
  export interface CliRuntime {
7
8
  defaultApiUrl: string;
@@ -15,6 +16,8 @@ export interface CliRuntime {
15
16
  sleep(milliseconds: number): Promise<void>;
16
17
  runProjectCommand: typeof runProjectCommand;
17
18
  captureCommand: typeof captureCommand;
19
+ updateCommand: UpdateRunner;
20
+ packageDirectory: string;
18
21
  authStore: CliAuthStore;
19
22
  profileBindings: CliProfileBindings;
20
23
  openBrowser(url: string): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AASA,OAAO,EAIL,KAAK,YAAY,EAIlB,MAAM,iBAAiB,CAAC;AA2BzB,OAAO,EAIL,4BAA4B,EAE7B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAW/B,eAAO,MAAM,WAAW,QAA0B,CAAC;AAenD,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC;IAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,EAAE,OAAO,KAAK,CAAC;IACtB,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,cAAc,EAAE,OAAO,cAAc,CAAC;IACtC,SAAS,EAAE,YAAY,CAAC;IACxB,eAAe,EAAE,kBAAkB,CAAC;IACpC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,4BAA4B,EAAE,OAAO,4BAA4B,CAAC;IAClE,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC;IAClE,WAAW,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC3D,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACtF,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACnG,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AA6BD,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmCjG"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AASA,OAAO,EAIL,KAAK,YAAY,EAIlB,MAAM,iBAAiB,CAAC;AA2BzB,OAAO,EAIL,4BAA4B,EAE7B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAA6E,KAAK,YAAY,EAAsB,MAAM,cAAc,CAAC;AAQhJ,eAAO,MAAM,WAAW,QAA0B,CAAC;AAenD,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC;IAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,EAAE,OAAO,KAAK,CAAC;IACtB,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,cAAc,EAAE,OAAO,cAAc,CAAC;IACtC,aAAa,EAAE,YAAY,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,YAAY,CAAC;IACxB,eAAe,EAAE,kBAAkB,CAAC;IACpC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,4BAA4B,EAAE,OAAO,4BAA4B,CAAC;IAClE,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC;IAClE,WAAW,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC3D,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACtF,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACnG,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AA+BD,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmCjG"}
package/dist/main.js CHANGED
@@ -18,7 +18,8 @@ import { captureCommand, runProjectCommand } from "./processes.js";
18
18
  import { createDefaultProfileBindings, } from "./profile-bindings.js";
19
19
  import { initializeStarter } from "./starter.js";
20
20
  import { normalizeAndeoEnvironment } from "./andeo-environment.js";
21
- import { DOC_TOPICS, readDocumentation, installDocumentation, installedSkillCheck } from "./documentation.js";
21
+ import { DOC_TOPICS, readDocumentation, installDocumentation, installedSkillCheck, skillDocumentationStatus, syncDocumentation } from "./documentation.js";
22
+ import { CLI_PACKAGE_DIRECTORY, configureAutoUpgrade, runUpdateCommand, upgradeCli } from "./updates.js";
22
23
  import { capabilityPreflight } from "./capability-preflight.js";
23
24
  import { flagEnvironment, flagKey, validateFlagDefinition, flagContext, FLAGSHIP_SCHEMA, FLAG_DELETION_GUIDANCE, FlagCompatibilityError } from "./flagship-contract.js";
24
25
  const packageMetadata = createRequire(import.meta.url)("../package.json");
@@ -38,6 +39,8 @@ const DEFAULT_RUNTIME = {
38
39
  sleep: async (milliseconds) => await new Promise((resolvePromise) => setTimeout(resolvePromise, milliseconds)),
39
40
  runProjectCommand,
40
41
  captureCommand,
42
+ updateCommand: runUpdateCommand,
43
+ packageDirectory: CLI_PACKAGE_DIRECTORY,
41
44
  authStore: createDefaultAuthStore(process.env),
42
45
  profileBindings: createDefaultProfileBindings(process.env),
43
46
  openBrowser: openSystemBrowser,
@@ -115,6 +118,16 @@ async function execute(topic, options, cwd, runtime) {
115
118
  if (topic.startsWith("flagship "))
116
119
  return { value: await flagshipCommand(topic.slice(9), cwd, options, runtime) };
117
120
  switch (topic) {
121
+ case "upgrade":
122
+ if (options.positionals.length)
123
+ throw new CliError("argument_invalid", "upgrade does not accept positional arguments.");
124
+ return { value: await upgradeCli(updateRuntime(runtime)) };
125
+ case "config autoupgrade on":
126
+ case "config autoupgrade off":
127
+ case "config autoupgrade status":
128
+ if (options.positionals.length)
129
+ throw new CliError("argument_invalid", "autoupgrade does not accept positional arguments.");
130
+ return { value: await configureAutoUpgrade(topic.split(" ")[2], updateRuntime(runtime)) };
118
131
  case "docs": {
119
132
  const name = options.positionals[0];
120
133
  if (!name)
@@ -144,6 +157,14 @@ async function execute(topic, options, cwd, runtime) {
144
157
  : { raw: await readSkill() };
145
158
  case "skill install":
146
159
  return { value: await installSkill(cwd, options, runtime) };
160
+ case "skill status":
161
+ case "skill sync": {
162
+ if (options.positionals.length)
163
+ throw new CliError("argument_invalid", "skill status/sync do not accept positional arguments.");
164
+ const { agent, base } = skillDestination(cwd, options, runtime);
165
+ const action = topic === "skill sync" ? syncDocumentation : skillDocumentationStatus;
166
+ return { value: { agent, ...await action(base, CLI_VERSION, { fetcher: runtime.fetcher }) } };
167
+ }
147
168
  case "skills list": {
148
169
  if (options.positionals.length)
149
170
  throw new CliError("skills_arguments_invalid", "skills list does not accept positional arguments.");
@@ -2434,6 +2455,14 @@ async function optionalContext(cwd) {
2434
2455
  }
2435
2456
  }
2436
2457
  async function installSkill(cwd, options, runtime) {
2458
+ const { agent, base } = skillDestination(cwd, options, runtime);
2459
+ return { status: "installed", agent, ...await installDocumentation(base, options.booleans.has("force"), CLI_VERSION, { fetcher: runtime.fetcher, bundled: options.booleans.has("bundled") }) };
2460
+ }
2461
+ function updateRuntime(runtime) {
2462
+ return { ...runtime, version: CLI_VERSION, runner: runtime.updateCommand, now: Date.now,
2463
+ notify: message => { runtime.stderr.write(`${message}\n`); } };
2464
+ }
2465
+ function skillDestination(cwd, options, runtime) {
2437
2466
  const agent = options.flags.get("agent") ?? "codex";
2438
2467
  const requestedDirectory = options.flags.get("directory");
2439
2468
  const base = requestedDirectory
@@ -2446,7 +2475,7 @@ async function installSkill(cwd, options, runtime) {
2446
2475
  if (!base) {
2447
2476
  throw new CliError("skill_target_invalid", "--agent must be codex or claude unless --directory is provided.");
2448
2477
  }
2449
- return { status: "installed", agent, ...await installDocumentation(base, options.booleans.has("force"), CLI_VERSION, { fetcher: runtime.fetcher, bundled: options.booleans.has("bundled") }) };
2478
+ return { agent, base };
2450
2479
  }
2451
2480
  async function readSkill() {
2452
2481
  return await readFile(skillPath(), "utf8");
@@ -2574,6 +2603,12 @@ function commandTopic(argv) {
2574
2603
  const child = argv[1];
2575
2604
  if (!child || child.startsWith("--"))
2576
2605
  return { topic: "help", values: [parent] };
2606
+ if (parent === "config" && child === "autoupgrade") {
2607
+ const action = argv[2];
2608
+ if (!action || action.startsWith("-") || argv.includes("--help") || argv.includes("-h"))
2609
+ return { topic: "help", values: ["config autoupgrade"] };
2610
+ return { topic: `config autoupgrade ${action}`, values: argv.slice(3) };
2611
+ }
2577
2612
  if (parent === "source" && child === "merge" && argv[2] && !argv[2].startsWith("-")) {
2578
2613
  const topic = `source merge ${argv[2]}`;
2579
2614
  return argv.includes("--help") || argv.includes("-h") ? { topic: "help", values: [topic] } : { topic, values: argv.slice(3) };
@@ -2661,6 +2696,10 @@ function assertAllowedOptions(topic, options) {
2661
2696
  const authentication = ["api-url", "token-stdin", "profile"];
2662
2697
  const allowed = {
2663
2698
  "artifact finalize": [...common, "artifact-directory"],
2699
+ upgrade: common,
2700
+ "config autoupgrade on": common,
2701
+ "config autoupgrade off": common,
2702
+ "config autoupgrade status": common,
2664
2703
  docs: common,
2665
2704
  capabilities: [...common, ...authentication, "project"],
2666
2705
  "email capabilities": [...common, ...authentication, "tenant", "project"],
@@ -2690,6 +2729,8 @@ function assertAllowedOptions(topic, options) {
2690
2729
  "config example": common,
2691
2730
  "skill print": common,
2692
2731
  "skill install": [...common, "agent", "directory", "force", "bundled"],
2732
+ "skill status": [...common, "agent", "directory"],
2733
+ "skill sync": [...common, "agent", "directory"],
2693
2734
  "skills list": [...common, ...authentication],
2694
2735
  "skills get": [...common, ...authentication],
2695
2736
  "skills file": [...common, ...authentication, "path"],
@@ -2899,6 +2940,8 @@ function writeOutput(value, options, runtime) {
2899
2940
  runtime.stdout.write(`${JSON.stringify(value, null, 2)}\n`);
2900
2941
  }
2901
2942
  function helpText(topic) {
2943
+ if (topic?.startsWith("config autoupgrade "))
2944
+ topic = "config autoupgrade";
2902
2945
  if (topic === "flagship")
2903
2946
  return `Usage: andeo flagship apps ensure|list --env ENV [--collection NAME] [--project ID] [--json]
2904
2947
  andeo flagship apps get|rename|disconnect|delete|reconcile APP_ID --env ENV [--expected-revision N] [--name NAME] [--confirm EXACT_ID]
@@ -2945,6 +2988,8 @@ Choose background preview routing with preview-service-set --target-project PROJ
2945
2988
  Only non-secret JSON belongs in workflow params/events. Keep credentials in the connected service's native secrets.
2946
2989
  Account workflow entitlement is required for new starts. Run status is authoritative; list results are a timestamped projection.`;
2947
2990
  const topics = {
2991
+ upgrade: "Usage: andeo upgrade [--json]\n\nUpgrade a verified global npm, pnpm or Yarn 1 installation to the latest stable CLI. Explicit upgrades can cross compatibility boundaries. CI, temporary npx and project-local installs must use their package manager. The next invocation uses the new CLI.",
2992
+ "config autoupgrade": "Usage: andeo config autoupgrade <on|off|status> [--json]\n\nGlobal CLI upgrades default on and run after successful commands at most once daily. Before 1.0, only patches within the current minor are automatic; afterward, updates stay in the current major. Off retains daily reminders and independent global skill refresh. Help, version, CI and explicit maintenance commands skip automatic maintenance.",
2948
2993
  vars: "Usage: andeo vars <list|set|unset> --environment preview|production [options]\n\nManage saved non-secret runtime variables. Changes apply on the next delivery.",
2949
2994
  "source reconnect": "Usage: andeo source reconnect <prepare|status|complete|cancel> [options]\n\nMove a legacy managed repository to its tenant namespace by preparing, pushing, and completing.",
2950
2995
  "source reconnect prepare": "Usage: andeo source reconnect prepare --repository SRC_ID --idempotency-key KEY [--project PROJECT_ID] [--json]\n\nPause the old source and prepare its tenant destination. Merchant administrator required.",
@@ -3023,19 +3068,21 @@ Account workflow entitlement is required for new starts. Run status is authorita
3023
3068
  "preview entries": "Usage: andeo preview entries [--json]\n\nList eligible published entry apps and the selected default for this linked app.",
3024
3069
  "preview open": "Usage: andeo preview open --from dly_...|sbl_... [--through PROJECT_ID] [--return-path /account] [--json]\n\nOpen the exact deployed preview without rebuilding or uploading. Private apps open through their published connections. Opening again renews access.",
3025
3070
  "delivery retry": "Usage: andeo delivery retry --delivery dly_... [--reauthorize] [--json]\n\nRetry one requested or failed developer preview idempotently. --reauthorize explicitly authorizes a legacy preview for the same owner and linked project using the current CLI login; it cannot replace another login's recorded grant or publish production. Normal credential refresh needs no flag. A dwf_ production workflow is resumed by a merchant administrator from Activity.",
3026
- skill: "Usage: andeo skill <print|install> [options]",
3071
+ skill: "Usage: andeo skill <print|install|status|sync> [options]",
3072
+ "skill status": "Usage: andeo skill status [--agent codex|claude] [--directory PATH] [--json]\n\nCheck the installed guide against the compatible public revision. Reports local_changes, unmanaged or not_installed without overwriting files. Offline and incompatible checks fail explicitly.",
3073
+ "skill sync": "Usage: andeo skill sync [--agent codex|claude] [--directory PATH] [--json]\n\nRefresh an existing, unchanged Andeo-managed guide. Preserve local edits and unrelated files. Outages and incompatible bundles retain installed guidance. After status=updated, reread SKILL.md and relevant references in active chats. Use skill install for a missing guide.",
3027
3074
  "skill print": "Usage: andeo skill print [--json]",
3028
3075
  "skill install": "Usage: andeo skill install [--agent codex|claude] [--directory PATH] [--force] [--bundled] [--json]\n\nFetch the latest compatible public Andeo guide without login. A fresh install falls back to the bundled guide during an outage; existing installations are preserved. --bundled explicitly selects this CLI's offline guide. --force replaces owned files, preserving unrelated files. Installs globally: ~/.agents/skills for Codex or ~/.claude/skills for Claude. --directory overrides the location.\n\nExamples:\n andeo skill install --agent codex --json\n andeo skill install --agent codex --force --json\n andeo skill install --bundled --directory ./skills --json",
3029
3076
  skills: "Usage: andeo skills <list|get|file> [options]\n\nAuthenticated, session-only access to Andeo practice skills. Content is not installed into the repository.\n\nExamples:\n andeo skills list --json\n andeo skills get recharge-client\n andeo skills file recharge-customer-operations --path references/subscriptions.md",
3030
3077
  "skills list": "Usage: andeo skills list [--profile NAME] [--api-url URL] [--json]\n\nList the practice skills available to the authenticated Andeo user.",
3031
3078
  "skills get": "Usage: andeo skills get SKILL_ID [--profile NAME] [--api-url URL] [--json]\n\nRead one skill entrypoint for the current invocation.\n\nExample:\n andeo skills get guardrailed-design-system",
3032
3079
  "skills file": "Usage: andeo skills file SKILL_ID --path PATH [--profile NAME] [--api-url URL] [--json]\n\nRead one catalog-listed supporting file for the current invocation.\n\nExample:\n andeo skills file recharge-customer-operations --path references/subscriptions.md",
3033
- config: "Usage: andeo config example [--json]",
3080
+ config: "Usage: andeo config example [--json]\n andeo config autoupgrade <on|off|status> [--json]",
3034
3081
  "config example": "Usage: andeo config example [--json]\n\nPrint the committed tender-accounts.json contract.",
3035
3082
  };
3036
3083
  if (topic && topics[topic])
3037
3084
  return topics[topic];
3038
- return `Andeo merchant developer CLI ${CLI_VERSION}\n\nCommands:\n docs Read version-matched offline guides\n capabilities Inspect scoped support, enablement and permissions\n init Create a new Shopify account starter\n auth login Create or refresh the default login\n auth create Create or re-authorize a named login\n auth activate Bind a named login to a directory tree\n auth deactivate Remove an exact directory binding\n auth status Validate one login or scoped credential\n auth list List local login profiles and bindings\n auth delete Revoke one named login\n auth logout Revoke the default or every login\n link Link this checkout to one permitted project\n doctor Check developer readiness\n dev Run the project-owned local dev command\n check Run project validation\n build Package and verify a portable artifact\n upload Retain a build for administrator publication\n preview Build and deploy an exact preview\n preview entries List eligible connected entry apps\n preview open Reopen an exact deployed preview\n source status Inspect Andeo-managed Git and recent builds\n source branches List exact managed branches and default policy\n source compare Compare two managed branches\n source connect Connect this linked project to managed Git\n source reconnect Prepare, inspect, complete or cancel a tenant namespace cutover\n source pull Clone or fast-forward the exact connected repository\n source token Issue a short-lived repository credential\n source push Push the exact commit without persisting a token\n source promote Fast-forward the default after successful preview checks\n source history Run guarded, archived source-history migration\n email Create and reuse merchant email identities\n workflows Inspect and control app-defined background runs\n vars Manage saved per-environment runtime variables\n source policy Inspect or change automatic publication\n tail Stream logs for one exact linked project\n delivery status Read preview workflow state\n delivery retry Retry a failed preview workflow\n skill install Install the Andeo agent skill\n skills list Discover authenticated practice skills\n skills get Read an authenticated practice skill\n skills file Read one authenticated skill resource\n config example Print the project configuration contract\n\nThere is intentionally no production publish command.\nRun andeo <command> --help for examples.`;
3085
+ return `Andeo merchant developer CLI ${CLI_VERSION}\n\nCommands:\n docs Read version-matched offline guides\n capabilities Inspect scoped support, enablement and permissions\n init Create a new Shopify account starter\n auth login Create or refresh the default login\n auth create Create or re-authorize a named login\n auth activate Bind a named login to a directory tree\n auth deactivate Remove an exact directory binding\n auth status Validate one login or scoped credential\n auth list List local login profiles and bindings\n auth delete Revoke one named login\n auth logout Revoke the default or every login\n link Link this checkout to one permitted project\n doctor Check developer readiness\n dev Run the project-owned local dev command\n check Run project validation\n build Package and verify a portable artifact\n upload Retain a build for administrator publication\n preview Build and deploy an exact preview\n preview entries List eligible connected entry apps\n preview open Reopen an exact deployed preview\n source status Inspect Andeo-managed Git and recent builds\n source branches List exact managed branches and default policy\n source compare Compare two managed branches\n source connect Connect this linked project to managed Git\n source reconnect Prepare, inspect, complete or cancel a tenant namespace cutover\n source pull Clone or fast-forward the exact connected repository\n source token Issue a short-lived repository credential\n source push Push the exact commit without persisting a token\n source promote Fast-forward the default after successful preview checks\n source history Run guarded, archived source-history migration\n email Create and reuse merchant email identities\n workflows Inspect and control app-defined background runs\n vars Manage saved per-environment runtime variables\n source policy Inspect or change automatic publication\n tail Stream logs for one exact linked project\n delivery status Read preview workflow state\n delivery retry Retry a failed preview workflow\n upgrade Upgrade a verified global CLI installation\n config autoupgrade Configure automatic CLI upgrades\n skill install Install the Andeo agent skill\n skill status Inspect installed guidance freshness\n skill sync Refresh unchanged managed guidance\n skills list Discover authenticated practice skills\n skills get Read an authenticated practice skill\n skills file Read one authenticated skill resource\n config example Print the project configuration contract\n\nThere is intentionally no production publish command.\nRun andeo <command> --help for examples.`;
3039
3086
  }
3040
3087
  function normalizeError(error) {
3041
3088
  if (error instanceof FlagCompatibilityError)