@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 +61 -1
- package/dist/cli.js +4 -1
- package/dist/cli.js.map +1 -1
- package/dist/documentation.d.ts +23 -0
- package/dist/documentation.d.ts.map +1 -1
- package/dist/documentation.js +157 -13
- package/dist/documentation.js.map +1 -1
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +52 -5
- package/dist/main.js.map +1 -1
- package/dist/update-storage.d.ts +3 -0
- package/dist/update-storage.d.ts.map +1 -0
- package/dist/update-storage.js +69 -0
- package/dist/update-storage.js.map +1 -0
- package/dist/updates.d.ts +52 -0
- package/dist/updates.d.ts.map +1 -0
- package/dist/updates.js +297 -0
- package/dist/updates.js.map +1 -0
- package/package.json +3 -1
- package/skill/publication.json +1 -1
- package/skill/tender-accounts/SKILL.md +9 -1
- package/skill/tender-accounts/references/skills.md +5 -2
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
|
|
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;
|
|
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"}
|
package/dist/documentation.d.ts
CHANGED
|
@@ -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":"
|
|
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"}
|
package/dist/documentation.js
CHANGED
|
@@ -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 {
|
|
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
|
|
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
|
-
|
|
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)])) }
|
|
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"};
|
|
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
|
|
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>;
|
package/dist/main.d.ts.map
CHANGED
|
@@ -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;
|
|
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 {
|
|
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)
|