@aui.io/apollo 0.1.21 → 0.1.22
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 +183 -0
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/bundles.js +34 -9
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/bundles.js.map +1 -1
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/curl.d.ts +10 -0
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/curl.js +63 -0
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/curl.js.map +1 -0
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/doctor.d.ts +13 -0
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/doctor.js +89 -0
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/doctor.js.map +1 -0
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/hierarchy.js +24 -7
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/hierarchy.js.map +1 -1
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/runtime-version.d.ts +10 -0
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/runtime-version.js +116 -0
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/runtime-version.js.map +1 -0
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/status.js +1 -0
- package/node_modules/@aui.io/apollo-cli/dist/src/commands/status.js.map +1 -1
- package/node_modules/@aui.io/apollo-cli/dist/src/index.d.ts +1 -0
- package/node_modules/@aui.io/apollo-cli/dist/src/index.js +26 -1
- package/node_modules/@aui.io/apollo-cli/dist/src/index.js.map +1 -1
- package/node_modules/@aui.io/apollo-cli/package.json +3 -3
- package/node_modules/@aui.io/apollo-core/dist/src/api/agent-settings.d.ts +147 -5
- package/node_modules/@aui.io/apollo-core/dist/src/api/agent-settings.js +95 -0
- package/node_modules/@aui.io/apollo-core/dist/src/api/agent-settings.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/api/capture.d.ts +22 -0
- package/node_modules/@aui.io/apollo-core/dist/src/api/capture.js +75 -0
- package/node_modules/@aui.io/apollo-core/dist/src/api/capture.js.map +1 -0
- package/node_modules/@aui.io/apollo-core/dist/src/api/management.d.ts +0 -1
- package/node_modules/@aui.io/apollo-core/dist/src/api/management.js +0 -6
- package/node_modules/@aui.io/apollo-core/dist/src/api/management.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/api/network.d.ts +19 -0
- package/node_modules/@aui.io/apollo-core/dist/src/api/network.js +53 -0
- package/node_modules/@aui.io/apollo-core/dist/src/api/network.js.map +1 -0
- package/node_modules/@aui.io/apollo-core/dist/src/api/transport.d.ts +14 -2
- package/node_modules/@aui.io/apollo-core/dist/src/api/transport.js +15 -28
- package/node_modules/@aui.io/apollo-core/dist/src/api/transport.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/config/index.d.ts +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/config/index.js +16 -1
- package/node_modules/@aui.io/apollo-core/dist/src/config/index.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/config/store.d.ts +10 -0
- package/node_modules/@aui.io/apollo-core/dist/src/config/store.js +24 -0
- package/node_modules/@aui.io/apollo-core/dist/src/config/store.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/config/types.d.ts +18 -1
- package/node_modules/@aui.io/apollo-core/dist/src/index.d.ts +9 -4
- package/node_modules/@aui.io/apollo-core/dist/src/index.js +8 -3
- package/node_modules/@aui.io/apollo-core/dist/src/index.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/runtime-version/index.d.ts +72 -0
- package/node_modules/@aui.io/apollo-core/dist/src/runtime-version/index.js +114 -0
- package/node_modules/@aui.io/apollo-core/dist/src/runtime-version/index.js.map +1 -0
- package/node_modules/@aui.io/apollo-core/dist/src/services/bundles.d.ts +47 -1
- package/node_modules/@aui.io/apollo-core/dist/src/services/bundles.js +60 -6
- package/node_modules/@aui.io/apollo-core/dist/src/services/bundles.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/services/clients.d.ts +4 -1
- package/node_modules/@aui.io/apollo-core/dist/src/services/clients.js +19 -0
- package/node_modules/@aui.io/apollo-core/dist/src/services/clients.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/services/doctor.d.ts +39 -0
- package/node_modules/@aui.io/apollo-core/dist/src/services/doctor.js +586 -0
- package/node_modules/@aui.io/apollo-core/dist/src/services/doctor.js.map +1 -0
- package/node_modules/@aui.io/apollo-core/dist/src/services/hierarchy.d.ts +78 -2
- package/node_modules/@aui.io/apollo-core/dist/src/services/hierarchy.js +177 -17
- package/node_modules/@aui.io/apollo-core/dist/src/services/hierarchy.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/dist/src/services/requests.d.ts +22 -0
- package/node_modules/@aui.io/apollo-core/dist/src/services/requests.js +73 -0
- package/node_modules/@aui.io/apollo-core/dist/src/services/requests.js.map +1 -0
- package/node_modules/@aui.io/apollo-core/dist/src/services/status.service.d.ts +2 -0
- package/node_modules/@aui.io/apollo-core/dist/src/services/status.service.js +10 -2
- package/node_modules/@aui.io/apollo-core/dist/src/services/status.service.js.map +1 -1
- package/node_modules/@aui.io/apollo-core/package.json +1 -1
- package/node_modules/@aui.io/apollo-tui/dist/src/actions/registry.js +16 -2
- package/node_modules/@aui.io/apollo-tui/dist/src/actions/registry.js.map +1 -1
- package/node_modules/@aui.io/apollo-tui/dist/src/activity/ActivityDrawer.js +31 -16
- package/node_modules/@aui.io/apollo-tui/dist/src/activity/ActivityDrawer.js.map +1 -1
- package/node_modules/@aui.io/apollo-tui/dist/src/activity/requests.d.ts +19 -0
- package/node_modules/@aui.io/apollo-tui/dist/src/activity/requests.js +29 -0
- package/node_modules/@aui.io/apollo-tui/dist/src/activity/requests.js.map +1 -0
- package/node_modules/@aui.io/apollo-tui/dist/src/author/AuthorHome.d.ts +3 -1
- package/node_modules/@aui.io/apollo-tui/dist/src/author/AuthorHome.js +6 -18
- package/node_modules/@aui.io/apollo-tui/dist/src/author/AuthorHome.js.map +1 -1
- package/node_modules/@aui.io/apollo-tui/dist/src/author/ResourcesView.js +26 -4
- package/node_modules/@aui.io/apollo-tui/dist/src/author/ResourcesView.js.map +1 -1
- package/node_modules/@aui.io/apollo-tui/dist/src/context/ContextSwitcher.js +6 -2
- package/node_modules/@aui.io/apollo-tui/dist/src/context/ContextSwitcher.js.map +1 -1
- package/node_modules/@aui.io/apollo-tui/dist/src/lib/actions.js +93 -14
- package/node_modules/@aui.io/apollo-tui/dist/src/lib/actions.js.map +1 -1
- package/node_modules/@aui.io/apollo-tui/dist/src/lib/commands.d.ts +1 -1
- package/node_modules/@aui.io/apollo-tui/dist/src/lib/commands.js +20 -0
- package/node_modules/@aui.io/apollo-tui/dist/src/lib/commands.js.map +1 -1
- package/node_modules/@aui.io/apollo-tui/dist/src/lib/diagnostics.d.ts +8 -0
- package/node_modules/@aui.io/apollo-tui/dist/src/lib/diagnostics.js +109 -0
- package/node_modules/@aui.io/apollo-tui/dist/src/lib/diagnostics.js.map +1 -0
- package/node_modules/@aui.io/apollo-tui/dist/src/lib/scope.d.ts +2 -0
- package/node_modules/@aui.io/apollo-tui/dist/src/lib/scope.js +1 -0
- package/node_modules/@aui.io/apollo-tui/dist/src/lib/scope.js.map +1 -1
- package/node_modules/@aui.io/apollo-tui/dist/src/opentui-app.js +2 -2
- package/node_modules/@aui.io/apollo-tui/dist/src/opentui-app.js.map +1 -1
- package/node_modules/@aui.io/apollo-tui/dist/src/shell/Breadcrumb.d.ts +4 -2
- package/node_modules/@aui.io/apollo-tui/dist/src/shell/Breadcrumb.js +5 -3
- package/node_modules/@aui.io/apollo-tui/dist/src/shell/Breadcrumb.js.map +1 -1
- package/node_modules/@aui.io/apollo-tui/dist/src/ui/SplashCard.d.ts +5 -0
- package/node_modules/@aui.io/apollo-tui/dist/src/ui/SplashCard.js +56 -0
- package/node_modules/@aui.io/apollo-tui/dist/src/ui/SplashCard.js.map +1 -0
- package/node_modules/@aui.io/apollo-tui/dist/src/ui/wordmark.d.ts +73 -0
- package/node_modules/@aui.io/apollo-tui/dist/src/ui/wordmark.js +488 -0
- package/node_modules/@aui.io/apollo-tui/dist/src/ui/wordmark.js.map +1 -0
- package/node_modules/@aui.io/apollo-tui/package.json +2 -2
- package/package.json +4 -4
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Context } from "../config/types.js";
|
|
2
|
+
import { type NpmRunner } from "./upgrade.js";
|
|
3
|
+
export type DoctorStatus = "ok" | "warn" | "fail";
|
|
4
|
+
export type DoctorSection = "installation" | "environment" | "auth" | "checkout" | "services" | "hygiene";
|
|
5
|
+
export interface DoctorCheck {
|
|
6
|
+
id: string;
|
|
7
|
+
section: DoctorSection;
|
|
8
|
+
status: DoctorStatus;
|
|
9
|
+
label: string;
|
|
10
|
+
note?: string;
|
|
11
|
+
/** The fix, as the command or action the user should take next. */
|
|
12
|
+
suggestion?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface DoctorReport {
|
|
15
|
+
checks: DoctorCheck[];
|
|
16
|
+
/** `fail` count — the exit-code driver. */
|
|
17
|
+
problems: number;
|
|
18
|
+
warnings: number;
|
|
19
|
+
healthy: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface DoctorOptions {
|
|
22
|
+
cliVersion: string;
|
|
23
|
+
packageName: string;
|
|
24
|
+
/** Skip connectivity checks (npm latest-version + service probes). */
|
|
25
|
+
offline?: boolean;
|
|
26
|
+
env?: NodeJS.ProcessEnv;
|
|
27
|
+
homeDir?: string;
|
|
28
|
+
npm?: NpmRunner;
|
|
29
|
+
/** Probe runner for external binaries (bun). Injectable for tests. */
|
|
30
|
+
runCommand?: (command: string, args: string[]) => Promise<string>;
|
|
31
|
+
fetch?: typeof globalThis.fetch;
|
|
32
|
+
/** Override `process.argv[1]` (install-origin detection) in tests. */
|
|
33
|
+
entryPath?: string;
|
|
34
|
+
/** Override `process.versions.node` in tests. */
|
|
35
|
+
nodeVersion?: string;
|
|
36
|
+
/** Override `process.platform` (login-shell rc resolution) in tests. */
|
|
37
|
+
platform?: string;
|
|
38
|
+
}
|
|
39
|
+
export declare function runDoctor(context: Context, options: DoctorOptions): Promise<DoctorReport>;
|
|
@@ -0,0 +1,586 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `apollo doctor` — environment/setup diagnosis (flutter-doctor style).
|
|
3
|
+
*
|
|
4
|
+
* Doctor verifies everything commands DEPEND on — runtimes, install shape,
|
|
5
|
+
* terminal capabilities, config/credentials, the current checkout, service
|
|
6
|
+
* reachability, and local-state hygiene — it never exercises product
|
|
7
|
+
* features end-to-end (that is CI's job). Every check is read-only: doctor
|
|
8
|
+
* must be safe to run on a broken machine, so it never writes, prunes, or
|
|
9
|
+
* refreshes anything.
|
|
10
|
+
*
|
|
11
|
+
* Checks return structure, not prose: the CLI renders sections, `--json`
|
|
12
|
+
* comes free through the Output envelope, and the TUI can reuse the same
|
|
13
|
+
* report later. Every non-ok finding carries the fix as a suggestion —
|
|
14
|
+
* the whole point is "paste this in a support thread and the next step is
|
|
15
|
+
* already written down".
|
|
16
|
+
*
|
|
17
|
+
* Grown from real failures (keep adding: every support incident should
|
|
18
|
+
* become a check): empty `bundle/src` after a TUI-created agent, expired
|
|
19
|
+
* tokens, forgotten `APOLLO_*_URL` overrides pointing at localhost, missing
|
|
20
|
+
* Bun making the TUI "disappear", loose credential file permissions.
|
|
21
|
+
*/
|
|
22
|
+
import { readdir, readFile, realpath, stat } from "node:fs/promises";
|
|
23
|
+
import { execFile } from "node:child_process";
|
|
24
|
+
import { homedir } from "node:os";
|
|
25
|
+
import path from "node:path";
|
|
26
|
+
import { apolloDir } from "../config/store.js";
|
|
27
|
+
import { checkoutAlive, registryFile, } from "../checkouts/registry.js";
|
|
28
|
+
import { getStatus } from "./status.service.js";
|
|
29
|
+
import { resolvePublishedVersion } from "./upgrade.js";
|
|
30
|
+
const MIN_NODE_MAJOR = 20;
|
|
31
|
+
/** Warn when the token dies within this window — mid-push expiry hurts. */
|
|
32
|
+
const TOKEN_EXPIRY_SOON_MS = 60 * 60 * 1000;
|
|
33
|
+
const SHELL_INIT_MARKER = "apollo shell-init";
|
|
34
|
+
/** Env vars that silently change behavior — doctor surfaces every one set. */
|
|
35
|
+
const OVERRIDE_VARS = [
|
|
36
|
+
"APOLLO_ENV",
|
|
37
|
+
"APOLLO_PROFILE",
|
|
38
|
+
"APOLLO_TOKEN",
|
|
39
|
+
"APOLLO_ORG_ID",
|
|
40
|
+
"APOLLO_PROJECT_ID",
|
|
41
|
+
"APOLLO_TIMEOUT_MS",
|
|
42
|
+
"APOLLO_IDENTITY_URL",
|
|
43
|
+
"APOLLO_MANAGEMENT_URL",
|
|
44
|
+
"APOLLO_RUNTIME_URL",
|
|
45
|
+
"APOLLO_MOCKDB_URL",
|
|
46
|
+
"APOLLO_VAULT_URL",
|
|
47
|
+
"APOLLO_KBM_URL",
|
|
48
|
+
"APOLLO_AGENT_SETTINGS_URL",
|
|
49
|
+
"APOLLO_TUI",
|
|
50
|
+
];
|
|
51
|
+
const defaultRunCommand = (command, args) => new Promise((resolve, reject) => {
|
|
52
|
+
execFile(command, args, { timeout: 2000 }, (error, stdout) => {
|
|
53
|
+
if (error) {
|
|
54
|
+
reject(new Error(error.message || `${command} failed`));
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
resolve(stdout.toString().trim());
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
export async function runDoctor(context, options) {
|
|
62
|
+
const env = options.env ?? process.env;
|
|
63
|
+
const home = options.homeDir ?? homedir();
|
|
64
|
+
const runCommand = options.runCommand ?? defaultRunCommand;
|
|
65
|
+
const offline = options.offline === true;
|
|
66
|
+
const checks = [];
|
|
67
|
+
const add = (check) => {
|
|
68
|
+
checks.push(check);
|
|
69
|
+
};
|
|
70
|
+
await installationChecks(add, { ...options, env, runCommand, offline });
|
|
71
|
+
environmentChecks(add, env);
|
|
72
|
+
const status = await getStatus(context, {
|
|
73
|
+
check: !offline,
|
|
74
|
+
...(options.fetch ? { fetch: options.fetch } : {}),
|
|
75
|
+
});
|
|
76
|
+
await authChecks(add, { env, home, status });
|
|
77
|
+
await checkoutChecks(add, context, home);
|
|
78
|
+
serviceChecks(add, status.checks, offline);
|
|
79
|
+
await hygieneChecks(add, home);
|
|
80
|
+
const problems = checks.filter((item) => item.status === "fail").length;
|
|
81
|
+
const warnings = checks.filter((item) => item.status === "warn").length;
|
|
82
|
+
return { checks, problems, warnings, healthy: problems === 0 };
|
|
83
|
+
}
|
|
84
|
+
// ------------------------------------------------------------ installation
|
|
85
|
+
async function installationChecks(add, options) {
|
|
86
|
+
const nodeVersion = options.nodeVersion ?? process.versions.node;
|
|
87
|
+
const major = Number.parseInt(nodeVersion.split(".")[0] ?? "0", 10);
|
|
88
|
+
add({
|
|
89
|
+
id: "node-version",
|
|
90
|
+
section: "installation",
|
|
91
|
+
status: major >= MIN_NODE_MAJOR ? "ok" : "fail",
|
|
92
|
+
label: `node v${nodeVersion}`,
|
|
93
|
+
...(major >= MIN_NODE_MAJOR
|
|
94
|
+
? {}
|
|
95
|
+
: {
|
|
96
|
+
note: `apollo requires Node ${MIN_NODE_MAJOR}+`,
|
|
97
|
+
suggestion: `Install Node ${MIN_NODE_MAJOR} or newer (e.g. via nvm).`,
|
|
98
|
+
}),
|
|
99
|
+
});
|
|
100
|
+
try {
|
|
101
|
+
const bunVersion = await options.runCommand("bun", ["--version"]);
|
|
102
|
+
add({
|
|
103
|
+
id: "bun",
|
|
104
|
+
section: "installation",
|
|
105
|
+
status: "ok",
|
|
106
|
+
label: `bun v${bunVersion}`,
|
|
107
|
+
note: "interactive TUI available",
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
add({
|
|
112
|
+
id: "bun",
|
|
113
|
+
section: "installation",
|
|
114
|
+
status: "warn",
|
|
115
|
+
label: "bun not found",
|
|
116
|
+
note: "the interactive TUI is unavailable; the CLI is unaffected",
|
|
117
|
+
suggestion: "curl -fsSL https://bun.sh/install | bash",
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
const entry = options.entryPath ?? process.argv[1];
|
|
121
|
+
let origin = "unknown install";
|
|
122
|
+
if (entry) {
|
|
123
|
+
try {
|
|
124
|
+
const resolved = await realpath(entry);
|
|
125
|
+
origin = resolved.includes(`node_modules${path.sep}@aui.io${path.sep}`)
|
|
126
|
+
? "npm global install"
|
|
127
|
+
: `development build (${resolved})`;
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
origin = `unresolvable entry point (${entry})`;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
add({
|
|
134
|
+
id: "install-origin",
|
|
135
|
+
section: "installation",
|
|
136
|
+
status: "ok",
|
|
137
|
+
label: `apollo ${options.cliVersion}`,
|
|
138
|
+
note: origin,
|
|
139
|
+
});
|
|
140
|
+
if (!options.offline) {
|
|
141
|
+
try {
|
|
142
|
+
const latest = await resolvePublishedVersion(options.packageName, "latest", options.npm);
|
|
143
|
+
add({
|
|
144
|
+
id: "latest-version",
|
|
145
|
+
section: "installation",
|
|
146
|
+
status: latest === options.cliVersion ? "ok" : "warn",
|
|
147
|
+
label: latest === options.cliVersion
|
|
148
|
+
? "up to date with npm"
|
|
149
|
+
: `npm has ${latest} (running ${options.cliVersion})`,
|
|
150
|
+
...(latest === options.cliVersion
|
|
151
|
+
? {}
|
|
152
|
+
: { suggestion: "apollo upgrade" }),
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
add({
|
|
157
|
+
id: "latest-version",
|
|
158
|
+
section: "installation",
|
|
159
|
+
status: "warn",
|
|
160
|
+
label: "could not check npm for the latest version",
|
|
161
|
+
note: "registry.npmjs.org unreachable from this machine",
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
await shellIntegrationCheck(add, options.env, options);
|
|
166
|
+
}
|
|
167
|
+
async function shellIntegrationCheck(add, env, options) {
|
|
168
|
+
const home = options.homeDir ?? homedir();
|
|
169
|
+
const platform = options.platform ?? process.platform;
|
|
170
|
+
const loginShell = path.basename(env.SHELL ?? "");
|
|
171
|
+
const rcFile = loginShell === "zsh"
|
|
172
|
+
? path.join(home, ".zshrc")
|
|
173
|
+
: loginShell === "bash"
|
|
174
|
+
? path.join(home, platform === "darwin" ? ".bash_profile" : ".bashrc")
|
|
175
|
+
: undefined;
|
|
176
|
+
if (rcFile === undefined) {
|
|
177
|
+
add({
|
|
178
|
+
id: "shell-integration",
|
|
179
|
+
section: "installation",
|
|
180
|
+
status: "ok",
|
|
181
|
+
label: `shell integration n/a (${loginShell || "unknown shell"})`,
|
|
182
|
+
note: "auto-cd hooks support zsh/bash only",
|
|
183
|
+
});
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
let contents = "";
|
|
187
|
+
try {
|
|
188
|
+
contents = await readFile(rcFile, "utf8");
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
// Missing rc file — same outcome as a missing marker.
|
|
192
|
+
}
|
|
193
|
+
const installed = contents.includes(SHELL_INIT_MARKER);
|
|
194
|
+
add({
|
|
195
|
+
id: "shell-integration",
|
|
196
|
+
section: "installation",
|
|
197
|
+
status: installed ? "ok" : "warn",
|
|
198
|
+
label: installed
|
|
199
|
+
? `shell integration installed (${path.basename(rcFile)})`
|
|
200
|
+
: "shell integration not installed",
|
|
201
|
+
...(installed
|
|
202
|
+
? {}
|
|
203
|
+
: {
|
|
204
|
+
note: "agent use/import/create will not auto-cd",
|
|
205
|
+
suggestion: `Add to ${path.basename(rcFile)}: eval "$(apollo shell-init)"`,
|
|
206
|
+
}),
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
// ------------------------------------------------------------- environment
|
|
210
|
+
function environmentChecks(add, env) {
|
|
211
|
+
const overrides = OVERRIDE_VARS.filter((name) => env[name] !== undefined && env[name] !== "").map((name) => name === "APOLLO_TOKEN" ? "APOLLO_TOKEN=(set)" : `${name}=${env[name]}`);
|
|
212
|
+
add({
|
|
213
|
+
id: "env-overrides",
|
|
214
|
+
section: "environment",
|
|
215
|
+
status: overrides.length === 0 ? "ok" : "warn",
|
|
216
|
+
label: overrides.length === 0
|
|
217
|
+
? "no APOLLO_* environment overrides"
|
|
218
|
+
: `${overrides.length} environment override(s) active`,
|
|
219
|
+
...(overrides.length === 0
|
|
220
|
+
? {}
|
|
221
|
+
: {
|
|
222
|
+
note: overrides.join(" · "),
|
|
223
|
+
suggestion: "Overrides silently redirect the CLI — unset any you do not expect.",
|
|
224
|
+
}),
|
|
225
|
+
});
|
|
226
|
+
const issues = [];
|
|
227
|
+
if (env.NO_COLOR !== undefined)
|
|
228
|
+
issues.push("NO_COLOR is set (monochrome UI)");
|
|
229
|
+
if (env.TERM === "dumb")
|
|
230
|
+
issues.push("TERM=dumb (no interactive rendering)");
|
|
231
|
+
const locale = env.LC_ALL || env.LANG || "";
|
|
232
|
+
if (!/utf-?8/i.test(locale)) {
|
|
233
|
+
issues.push(`locale is not UTF-8 (${locale || "unset"}) — glyphs degrade`);
|
|
234
|
+
}
|
|
235
|
+
add({
|
|
236
|
+
id: "terminal",
|
|
237
|
+
section: "environment",
|
|
238
|
+
status: issues.length === 0 ? "ok" : "warn",
|
|
239
|
+
label: issues.length === 0
|
|
240
|
+
? "terminal supports color + unicode"
|
|
241
|
+
: "terminal capabilities reduced",
|
|
242
|
+
...(issues.length === 0 ? {} : { note: issues.join(" · ") }),
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
// -------------------------------------------------------------------- auth
|
|
246
|
+
async function authChecks(add, input) {
|
|
247
|
+
const { env, home, status } = input;
|
|
248
|
+
add({
|
|
249
|
+
id: "context",
|
|
250
|
+
section: "auth",
|
|
251
|
+
status: "ok",
|
|
252
|
+
label: `${status.profile}@${status.environment}`,
|
|
253
|
+
note: status.agentRoot ? `checkout ${status.agentRoot}` : "no checkout",
|
|
254
|
+
});
|
|
255
|
+
const credentialsPath = path.join(apolloDir(home), "credentials.json");
|
|
256
|
+
try {
|
|
257
|
+
const info = await stat(credentialsPath);
|
|
258
|
+
const mode = info.mode & 0o777;
|
|
259
|
+
const loose = (mode & 0o077) !== 0;
|
|
260
|
+
add({
|
|
261
|
+
id: "credentials-permissions",
|
|
262
|
+
section: "auth",
|
|
263
|
+
status: loose ? "fail" : "ok",
|
|
264
|
+
label: loose
|
|
265
|
+
? `credentials.json permissions too open (0${mode.toString(8)})`
|
|
266
|
+
: "credentials.json permissions 0600",
|
|
267
|
+
...(loose
|
|
268
|
+
? { suggestion: `chmod 600 ${credentialsPath}` }
|
|
269
|
+
: {}),
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
add({
|
|
274
|
+
id: "credentials-permissions",
|
|
275
|
+
section: "auth",
|
|
276
|
+
status: env.APOLLO_TOKEN ? "ok" : "warn",
|
|
277
|
+
label: "no credentials file",
|
|
278
|
+
note: env.APOLLO_TOKEN
|
|
279
|
+
? "APOLLO_TOKEN provides the session"
|
|
280
|
+
: "no stored login for this machine",
|
|
281
|
+
...(env.APOLLO_TOKEN ? {} : { suggestion: "apollo login" }),
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
if (!status.authenticated) {
|
|
285
|
+
add({
|
|
286
|
+
id: "token",
|
|
287
|
+
section: "auth",
|
|
288
|
+
status: "warn",
|
|
289
|
+
label: "not logged in",
|
|
290
|
+
note: "commands that talk to the API will fail",
|
|
291
|
+
suggestion: "apollo login",
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
else if (status.tokenExpiresAt === null) {
|
|
295
|
+
add({
|
|
296
|
+
id: "token",
|
|
297
|
+
section: "auth",
|
|
298
|
+
status: "ok",
|
|
299
|
+
label: "token present (no readable expiry)",
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
const remaining = Date.parse(status.tokenExpiresAt) - Date.now();
|
|
304
|
+
if (remaining <= 0) {
|
|
305
|
+
add({
|
|
306
|
+
id: "token",
|
|
307
|
+
section: "auth",
|
|
308
|
+
status: "fail",
|
|
309
|
+
label: `token expired ${formatAgo(-remaining)} ago`,
|
|
310
|
+
suggestion: "apollo login",
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
else if (remaining < TOKEN_EXPIRY_SOON_MS) {
|
|
314
|
+
add({
|
|
315
|
+
id: "token",
|
|
316
|
+
section: "auth",
|
|
317
|
+
status: "warn",
|
|
318
|
+
label: `token expires in ${formatAgo(remaining)}`,
|
|
319
|
+
note: "long pushes/chats may fail mid-command",
|
|
320
|
+
suggestion: "apollo login",
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
add({
|
|
325
|
+
id: "token",
|
|
326
|
+
section: "auth",
|
|
327
|
+
status: "ok",
|
|
328
|
+
label: `token valid (expires ${status.tokenExpiresAt})`,
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
if (status.orgId !== null &&
|
|
333
|
+
status.tokenOrgId !== null &&
|
|
334
|
+
status.orgId !== status.tokenOrgId) {
|
|
335
|
+
add({
|
|
336
|
+
id: "org-scope",
|
|
337
|
+
section: "auth",
|
|
338
|
+
status: "warn",
|
|
339
|
+
label: "organization mismatch",
|
|
340
|
+
note: `selected ${status.orgId}, token is scoped to ${status.tokenOrgId}`,
|
|
341
|
+
suggestion: `apollo org use ${status.orgId}`,
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
add({
|
|
346
|
+
id: "org-scope",
|
|
347
|
+
section: "auth",
|
|
348
|
+
status: "ok",
|
|
349
|
+
label: status.orgId
|
|
350
|
+
? `organization ${status.orgId}`
|
|
351
|
+
: "no organization selected",
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
// ---------------------------------------------------------------- checkout
|
|
356
|
+
async function checkoutChecks(add, context, home) {
|
|
357
|
+
if (!context.agentRoot) {
|
|
358
|
+
add({
|
|
359
|
+
id: "checkout",
|
|
360
|
+
section: "checkout",
|
|
361
|
+
status: "ok",
|
|
362
|
+
label: "no agent checkout here",
|
|
363
|
+
note: "cd into a checkout (or apollo agent use) for checkout checks",
|
|
364
|
+
});
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
add({
|
|
368
|
+
id: "binding",
|
|
369
|
+
section: "checkout",
|
|
370
|
+
status: context.versionTag ? "ok" : "warn",
|
|
371
|
+
label: context.versionTag
|
|
372
|
+
? `.apollorc pins ${context.versionTag} (agent ${context.agentId ?? "?"})`
|
|
373
|
+
: ".apollorc has no version_tag",
|
|
374
|
+
...(context.versionTag
|
|
375
|
+
? {}
|
|
376
|
+
: {
|
|
377
|
+
note: "pull/push will resolve a version implicitly",
|
|
378
|
+
suggestion: "apollo version use <tag>",
|
|
379
|
+
}),
|
|
380
|
+
});
|
|
381
|
+
const bundleSrc = path.join(context.agentRoot, "bundle", "src");
|
|
382
|
+
const programOk = await exists(path.join(bundleSrc, "program.yaml"));
|
|
383
|
+
if (programOk) {
|
|
384
|
+
add({
|
|
385
|
+
id: "program-files",
|
|
386
|
+
section: "checkout",
|
|
387
|
+
status: "ok",
|
|
388
|
+
label: "bundle/src has program.yaml",
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
const hasBundleDir = await exists(bundleSrc);
|
|
393
|
+
add({
|
|
394
|
+
id: "program-files",
|
|
395
|
+
section: "checkout",
|
|
396
|
+
status: "fail",
|
|
397
|
+
label: hasBundleDir
|
|
398
|
+
? "bundle/src has no program.yaml"
|
|
399
|
+
: "checkout has no bundle/src",
|
|
400
|
+
note: "chat/validate against this agent will fail with missing program files",
|
|
401
|
+
suggestion: "apollo pull",
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
const schemasDir = path.join(context.agentRoot, "schemas");
|
|
405
|
+
let schemaCount = 0;
|
|
406
|
+
try {
|
|
407
|
+
schemaCount = (await readdir(schemasDir)).filter((name) => !name.startsWith(".")).length;
|
|
408
|
+
}
|
|
409
|
+
catch {
|
|
410
|
+
// Missing directory — same as empty.
|
|
411
|
+
}
|
|
412
|
+
add({
|
|
413
|
+
id: "schemas",
|
|
414
|
+
section: "checkout",
|
|
415
|
+
status: schemaCount > 0 ? "ok" : "warn",
|
|
416
|
+
label: schemaCount > 0
|
|
417
|
+
? `authoring schemas present (${schemaCount})`
|
|
418
|
+
: "no authoring schemas",
|
|
419
|
+
...(schemaCount > 0
|
|
420
|
+
? {}
|
|
421
|
+
: {
|
|
422
|
+
note: "editor validation for program files is off",
|
|
423
|
+
suggestion: "apollo schema pull",
|
|
424
|
+
}),
|
|
425
|
+
});
|
|
426
|
+
if (programOk && context.agentId) {
|
|
427
|
+
const baseline = path.join(apolloDir(home), "baselines", context.agentId, "baseline.json");
|
|
428
|
+
const baselineOk = await exists(baseline);
|
|
429
|
+
add({
|
|
430
|
+
id: "baseline",
|
|
431
|
+
section: "checkout",
|
|
432
|
+
status: baselineOk ? "ok" : "warn",
|
|
433
|
+
label: baselineOk ? "sync baseline present" : "no sync baseline",
|
|
434
|
+
...(baselineOk
|
|
435
|
+
? {}
|
|
436
|
+
: {
|
|
437
|
+
note: "diff/push will treat every file as new until the next pull or push records one",
|
|
438
|
+
}),
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
// ---------------------------------------------------------------- services
|
|
443
|
+
function serviceChecks(add, serviceResults, offline) {
|
|
444
|
+
if (offline || serviceResults === undefined) {
|
|
445
|
+
add({
|
|
446
|
+
id: "services",
|
|
447
|
+
section: "services",
|
|
448
|
+
status: "ok",
|
|
449
|
+
label: "service probes skipped (--offline)",
|
|
450
|
+
});
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
453
|
+
for (const result of serviceResults) {
|
|
454
|
+
const authNote = result.authenticated === null
|
|
455
|
+
? "auth unknown"
|
|
456
|
+
: result.authenticated
|
|
457
|
+
? "authorized"
|
|
458
|
+
: "unauthorized";
|
|
459
|
+
if (!result.reachable) {
|
|
460
|
+
add({
|
|
461
|
+
id: `service-${result.service}`,
|
|
462
|
+
section: "services",
|
|
463
|
+
status: "fail",
|
|
464
|
+
label: `${result.service} unreachable`,
|
|
465
|
+
...(result.detail ? { note: result.detail } : {}),
|
|
466
|
+
suggestion: "Check connectivity/VPN — or APOLLO_*_URL overrides pointing at a dead host.",
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
else if (result.authenticated === false) {
|
|
470
|
+
add({
|
|
471
|
+
id: `service-${result.service}`,
|
|
472
|
+
section: "services",
|
|
473
|
+
status: "fail",
|
|
474
|
+
label: `${result.service} reachable, unauthorized`,
|
|
475
|
+
...(result.detail ? { note: result.detail } : {}),
|
|
476
|
+
suggestion: "apollo login",
|
|
477
|
+
});
|
|
478
|
+
}
|
|
479
|
+
else {
|
|
480
|
+
add({
|
|
481
|
+
id: `service-${result.service}`,
|
|
482
|
+
section: "services",
|
|
483
|
+
status: "ok",
|
|
484
|
+
label: `${result.service} reachable, ${authNote}`,
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
// ----------------------------------------------------------------- hygiene
|
|
490
|
+
async function hygieneChecks(add, home) {
|
|
491
|
+
// Read the registry file directly: readCheckoutRegistry() runs a legacy
|
|
492
|
+
// migration that WRITES an empty registry on first read, and doctor is
|
|
493
|
+
// strictly read-only.
|
|
494
|
+
let registryRaw;
|
|
495
|
+
try {
|
|
496
|
+
registryRaw = await readFile(registryFile(home), "utf8");
|
|
497
|
+
}
|
|
498
|
+
catch {
|
|
499
|
+
registryRaw = undefined; // no registry yet — nothing to check
|
|
500
|
+
}
|
|
501
|
+
if (registryRaw === undefined) {
|
|
502
|
+
add({
|
|
503
|
+
id: "checkout-registry",
|
|
504
|
+
section: "hygiene",
|
|
505
|
+
status: "ok",
|
|
506
|
+
label: "checkout registry clean (0 entries)",
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
else {
|
|
510
|
+
try {
|
|
511
|
+
const parsed = JSON.parse(registryRaw);
|
|
512
|
+
const entries = (parsed.checkouts ?? []).filter((entry) => typeof entry.path === "string" &&
|
|
513
|
+
typeof entry.agent_id === "string");
|
|
514
|
+
let dead = 0;
|
|
515
|
+
for (const entry of entries) {
|
|
516
|
+
if (!(await checkoutAlive(entry)))
|
|
517
|
+
dead += 1;
|
|
518
|
+
}
|
|
519
|
+
add({
|
|
520
|
+
id: "checkout-registry",
|
|
521
|
+
section: "hygiene",
|
|
522
|
+
status: dead === 0 ? "ok" : "warn",
|
|
523
|
+
label: dead === 0
|
|
524
|
+
? `checkout registry clean (${entries.length} entr${entries.length === 1 ? "y" : "ies"})`
|
|
525
|
+
: `${dead} stale checkout registry entr${dead === 1 ? "y" : "ies"}`,
|
|
526
|
+
...(dead === 0
|
|
527
|
+
? {}
|
|
528
|
+
: {
|
|
529
|
+
note: "entries point at moved or deleted checkouts; pickers prune them on next use",
|
|
530
|
+
}),
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
catch {
|
|
534
|
+
add({
|
|
535
|
+
id: "checkout-registry",
|
|
536
|
+
section: "hygiene",
|
|
537
|
+
status: "warn",
|
|
538
|
+
label: "checkout registry unreadable",
|
|
539
|
+
note: "~/.apollo/checkouts.json is corrupt; it rebuilds as checkouts are used",
|
|
540
|
+
});
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
const capturePath = path.join(apolloDir(home), "last-requests.json");
|
|
544
|
+
try {
|
|
545
|
+
const raw = await readFile(capturePath, "utf8");
|
|
546
|
+
const parsed = JSON.parse(raw);
|
|
547
|
+
add({
|
|
548
|
+
id: "request-capture",
|
|
549
|
+
section: "hygiene",
|
|
550
|
+
status: "ok",
|
|
551
|
+
label: `request capture readable (${Array.isArray(parsed) ? parsed.length : 0} entries)`,
|
|
552
|
+
});
|
|
553
|
+
}
|
|
554
|
+
catch (error) {
|
|
555
|
+
const missing = error.code === "ENOENT";
|
|
556
|
+
add({
|
|
557
|
+
id: "request-capture",
|
|
558
|
+
section: "hygiene",
|
|
559
|
+
status: missing ? "ok" : "warn",
|
|
560
|
+
label: missing
|
|
561
|
+
? "no request captures yet"
|
|
562
|
+
: "request capture file unreadable",
|
|
563
|
+
...(missing
|
|
564
|
+
? {}
|
|
565
|
+
: { note: "it is overwritten by the next command that calls the API" }),
|
|
566
|
+
});
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
// ------------------------------------------------------------------ shared
|
|
570
|
+
async function exists(target) {
|
|
571
|
+
try {
|
|
572
|
+
await stat(target);
|
|
573
|
+
return true;
|
|
574
|
+
}
|
|
575
|
+
catch {
|
|
576
|
+
return false;
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
function formatAgo(ms) {
|
|
580
|
+
const minutes = Math.round(ms / 60_000);
|
|
581
|
+
if (minutes < 60)
|
|
582
|
+
return `${minutes}m`;
|
|
583
|
+
const hours = Math.floor(minutes / 60);
|
|
584
|
+
return `${hours}h ${String(minutes % 60).padStart(2, "0")}m`;
|
|
585
|
+
}
|
|
586
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/services/doctor.ts"],"names":[],"mappings":"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"}
|