@wayai/cli 0.2.74 → 0.2.76
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/status.d.ts +7 -1
- package/dist/commands/status.js +86 -15
- package/dist/commands/status.js.map +1 -1
- package/dist/index.js +3 -8
- package/dist/index.js.map +1 -1
- package/dist/lib/scaffold.d.ts +4 -3
- package/dist/lib/scaffold.js +26 -7
- package/dist/lib/scaffold.js.map +1 -1
- package/dist/lib/version-cache.d.ts +8 -0
- package/dist/lib/version-cache.js +33 -0
- package/dist/lib/version-cache.js.map +1 -0
- package/package.json +1 -1
|
@@ -4,8 +4,14 @@
|
|
|
4
4
|
* Usage:
|
|
5
5
|
* wayai status # human-readable output
|
|
6
6
|
* wayai status --json # structured output for agents/scripts
|
|
7
|
+
*
|
|
8
|
+
* The --json shape is the canonical state snapshot consumed by the WayAI skill
|
|
9
|
+
* during agentic onboarding. Fields are nullable so the agent can branch
|
|
10
|
+
* cleanly from any starting state (no config / no org / no workspace / etc.).
|
|
7
11
|
*/
|
|
8
12
|
export declare function parseArgs(args: string[]): {
|
|
9
13
|
json: boolean;
|
|
10
14
|
};
|
|
11
|
-
export declare function statusCommand(args: string[]
|
|
15
|
+
export declare function statusCommand(args: string[], pkg: {
|
|
16
|
+
version: string;
|
|
17
|
+
}): Promise<void>;
|
package/dist/commands/status.js
CHANGED
|
@@ -4,60 +4,131 @@
|
|
|
4
4
|
* Usage:
|
|
5
5
|
* wayai status # human-readable output
|
|
6
6
|
* wayai status --json # structured output for agents/scripts
|
|
7
|
+
*
|
|
8
|
+
* The --json shape is the canonical state snapshot consumed by the WayAI skill
|
|
9
|
+
* during agentic onboarding. Fields are nullable so the agent can branch
|
|
10
|
+
* cleanly from any starting state (no config / no org / no workspace / etc.).
|
|
7
11
|
*/
|
|
12
|
+
import * as path from 'node:path';
|
|
8
13
|
import { readConfig } from '../lib/config.js';
|
|
9
14
|
import { getAccessToken } from '../lib/auth.js';
|
|
10
15
|
import { readRepoConfig } from '../lib/repo-config.js';
|
|
16
|
+
import { detectWorkspace, findGitRoot, scanWorkspaceHubs } from '../lib/workspace.js';
|
|
17
|
+
import { ApiClient } from '../lib/api-client.js';
|
|
18
|
+
import { readCachedLatest } from '../lib/version-cache.js';
|
|
11
19
|
export function parseArgs(args) {
|
|
12
20
|
return { json: args.includes('--json') };
|
|
13
21
|
}
|
|
14
|
-
|
|
22
|
+
function buildWorkspaceState(repoConfig) {
|
|
23
|
+
if (!repoConfig)
|
|
24
|
+
return { scoped: false, path: null, hub_count: 0 };
|
|
25
|
+
const ws = detectWorkspace();
|
|
26
|
+
const gitRoot = ws?.gitRoot ?? findGitRoot();
|
|
27
|
+
const hubCount = ws ? scanWorkspaceHubs(ws.workspaceDir).length : 0;
|
|
28
|
+
const yamlPath = gitRoot ? path.join(gitRoot, '.wayai.yaml') : null;
|
|
29
|
+
return { scoped: true, path: yamlPath, hub_count: hubCount };
|
|
30
|
+
}
|
|
31
|
+
export async function statusCommand(args, pkg) {
|
|
15
32
|
const { json } = parseArgs(args);
|
|
16
33
|
const config = readConfig();
|
|
34
|
+
const repoConfig = readRepoConfig();
|
|
35
|
+
const workspace = buildWorkspaceState(repoConfig);
|
|
36
|
+
const cliLatest = readCachedLatest();
|
|
37
|
+
// Cold-start path: no config at all.
|
|
17
38
|
if (!config) {
|
|
39
|
+
const snapshot = {
|
|
40
|
+
logged_in: false,
|
|
41
|
+
token_valid: null,
|
|
42
|
+
api_url: null,
|
|
43
|
+
repo_scope: null,
|
|
44
|
+
cli: { version: pkg.version, latest: cliLatest },
|
|
45
|
+
auth: { logged_in: false, user_email: null },
|
|
46
|
+
orgs: [],
|
|
47
|
+
active_org: null,
|
|
48
|
+
workspace,
|
|
49
|
+
};
|
|
18
50
|
if (json) {
|
|
19
|
-
console.log(JSON.stringify(
|
|
51
|
+
console.log(JSON.stringify(snapshot, null, 2));
|
|
20
52
|
}
|
|
21
53
|
else {
|
|
22
54
|
console.log('Not logged in. Run `wayai login`.');
|
|
23
55
|
}
|
|
24
56
|
return;
|
|
25
57
|
}
|
|
26
|
-
//
|
|
27
|
-
let tokenValid;
|
|
58
|
+
// Logged-in path: validate token, then enrich with backend data.
|
|
59
|
+
let tokenValid = false;
|
|
60
|
+
let accessToken = null;
|
|
28
61
|
try {
|
|
29
|
-
await getAccessToken(config);
|
|
62
|
+
accessToken = await getAccessToken(config);
|
|
30
63
|
tokenValid = true;
|
|
31
64
|
}
|
|
32
65
|
catch {
|
|
33
66
|
tokenValid = false;
|
|
34
67
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
68
|
+
let userEmail = null;
|
|
69
|
+
let orgs = [];
|
|
70
|
+
if (tokenValid && accessToken) {
|
|
71
|
+
const client = new ApiClient({ apiUrl: config.api_url, accessToken });
|
|
72
|
+
const [meResult, orgsResult] = await Promise.allSettled([
|
|
73
|
+
client.me(),
|
|
74
|
+
client.organizations(),
|
|
75
|
+
]);
|
|
76
|
+
if (meResult.status === 'fulfilled') {
|
|
77
|
+
userEmail = meResult.value.email || null;
|
|
78
|
+
}
|
|
79
|
+
if (orgsResult.status === 'fulfilled') {
|
|
80
|
+
orgs = orgsResult.value.organizations.map((o) => ({ id: o.id, name: o.name }));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const activeOrg = repoConfig
|
|
84
|
+
? {
|
|
85
|
+
id: repoConfig.organization_id,
|
|
86
|
+
name: orgs.find((o) => o.id === repoConfig.organization_id)?.name
|
|
87
|
+
?? repoConfig.organization_name
|
|
88
|
+
?? repoConfig.organization_id,
|
|
89
|
+
}
|
|
90
|
+
: null;
|
|
91
|
+
const snapshot = {
|
|
92
|
+
logged_in: true,
|
|
93
|
+
token_valid: tokenValid,
|
|
94
|
+
api_url: config.api_url,
|
|
95
|
+
repo_scope: repoConfig
|
|
96
|
+
? {
|
|
42
97
|
organization_id: repoConfig.organization_id,
|
|
43
98
|
organization_name: repoConfig.organization_name ?? null,
|
|
44
|
-
}
|
|
45
|
-
|
|
99
|
+
}
|
|
100
|
+
: null,
|
|
101
|
+
cli: { version: pkg.version, latest: cliLatest },
|
|
102
|
+
auth: { logged_in: true, user_email: userEmail },
|
|
103
|
+
orgs,
|
|
104
|
+
active_org: activeOrg,
|
|
105
|
+
workspace,
|
|
106
|
+
};
|
|
107
|
+
if (json) {
|
|
108
|
+
console.log(JSON.stringify(snapshot, null, 2));
|
|
46
109
|
return;
|
|
47
110
|
}
|
|
111
|
+
// Human-readable output.
|
|
48
112
|
const tokenStatus = tokenValid
|
|
49
113
|
? 'token valid'
|
|
50
114
|
: 'token expired (run `wayai login` to re-authenticate)';
|
|
51
|
-
console.log(`Logged in — ${tokenStatus}`);
|
|
115
|
+
console.log(`Logged in${userEmail ? ` as ${userEmail}` : ''} — ${tokenStatus}`);
|
|
52
116
|
if (config.api_url !== 'https://api.wayai.pro') {
|
|
53
117
|
console.log(`API: ${config.api_url}`);
|
|
54
118
|
}
|
|
119
|
+
if (cliLatest && cliLatest !== pkg.version) {
|
|
120
|
+
console.log(`CLI: ${pkg.version} (latest: ${cliLatest} — run \`wayai update\`)`);
|
|
121
|
+
}
|
|
122
|
+
if (orgs.length > 0) {
|
|
123
|
+
console.log(`Organizations: ${orgs.length}`);
|
|
124
|
+
}
|
|
55
125
|
if (repoConfig) {
|
|
56
126
|
const orgLine = repoConfig.organization_name
|
|
57
127
|
? `${repoConfig.organization_name} (${repoConfig.organization_id})`
|
|
58
128
|
: repoConfig.organization_id;
|
|
59
129
|
console.log(`Repository scope:`);
|
|
60
130
|
console.log(` Organization: ${orgLine}`);
|
|
131
|
+
console.log(` Hubs: ${workspace.hub_count}`);
|
|
61
132
|
}
|
|
62
133
|
else {
|
|
63
134
|
console.log('No .wayai.yaml found — run `wayai init` to scope this repo to an organization.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -26,6 +26,7 @@ import { dirname, join } from 'node:path';
|
|
|
26
26
|
import { homedir } from 'node:os';
|
|
27
27
|
import { initSentry, captureException, shouldReportToSentry, closeSentry } from './lib/sentry.js';
|
|
28
28
|
import { isNewerVersion } from './lib/utils.js';
|
|
29
|
+
import { readVersionCache } from './lib/version-cache.js';
|
|
29
30
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
30
31
|
const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
|
|
31
32
|
const [, , command, ...args] = process.argv;
|
|
@@ -45,7 +46,7 @@ async function main() {
|
|
|
45
46
|
}
|
|
46
47
|
case 'status': {
|
|
47
48
|
const { statusCommand } = await import('./commands/status.js');
|
|
48
|
-
await statusCommand(args);
|
|
49
|
+
await statusCommand(args, pkg);
|
|
49
50
|
break;
|
|
50
51
|
}
|
|
51
52
|
case 'whoami': {
|
|
@@ -233,13 +234,7 @@ function checkForUpdates() {
|
|
|
233
234
|
try {
|
|
234
235
|
const cacheDir = join(homedir(), '.wayai');
|
|
235
236
|
const cachePath = join(cacheDir, 'update-check.json');
|
|
236
|
-
|
|
237
|
-
try {
|
|
238
|
-
if (existsSync(cachePath)) {
|
|
239
|
-
cache = JSON.parse(readFileSync(cachePath, 'utf-8'));
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
catch { /* malformed cache — proceed to fresh check */ }
|
|
237
|
+
const cache = readVersionCache();
|
|
243
238
|
if (cache && Date.now() - cache.lastCheck < UPDATE_CHECK_INTERVAL_MS) {
|
|
244
239
|
if (cache.latest && isNewerVersion(cache.latest, pkg.version)) {
|
|
245
240
|
console.error(`\nUpdate available: ${pkg.version} → ${cache.latest}\nRun \`wayai update\` to update.`);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/scaffold.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Scaffold — download and extract workspace scaffold files from R2
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* pull/update (refresh mode)
|
|
6
|
-
*
|
|
4
|
+
* Most files from the scaffold ZIP are extracted and overwritten on every
|
|
5
|
+
* pull/update (refresh mode) so platform changes reach the workspace. The
|
|
6
|
+
* exceptions are `INIT_ONLY_FILES` below — written once on `wayai init` (when
|
|
7
|
+
* missing) and never touched on `wayai update`, preserving user-owned files.
|
|
7
8
|
*
|
|
8
9
|
* Changes land as unstaged git modifications — the user reviews via `git diff`
|
|
9
10
|
* before committing.
|
package/dist/lib/scaffold.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Scaffold — download and extract workspace scaffold files from R2
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* pull/update (refresh mode)
|
|
6
|
-
*
|
|
4
|
+
* Most files from the scaffold ZIP are extracted and overwritten on every
|
|
5
|
+
* pull/update (refresh mode) so platform changes reach the workspace. The
|
|
6
|
+
* exceptions are `INIT_ONLY_FILES` below — written once on `wayai init` (when
|
|
7
|
+
* missing) and never touched on `wayai update`, preserving user-owned files.
|
|
7
8
|
*
|
|
8
9
|
* Changes land as unstaged git modifications — the user reviews via `git diff`
|
|
9
10
|
* before committing.
|
|
@@ -12,8 +13,24 @@ import * as fs from 'node:fs';
|
|
|
12
13
|
import * as path from 'node:path';
|
|
13
14
|
import { unzipSync } from 'fflate';
|
|
14
15
|
import { ApiClient } from './api-client.js';
|
|
15
|
-
/**
|
|
16
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Init-only files — written on `wayai init` when missing; in refresh mode
|
|
18
|
+
* (`wayai update`) they are always skipped, even if the user deleted them.
|
|
19
|
+
* To restore a deleted init-only file, re-run `wayai init`.
|
|
20
|
+
*
|
|
21
|
+
* Names match scaffold ZIP root paths (`repositories/wayai-workspace/`); the
|
|
22
|
+
* membership check is case-insensitive so a case-variant ZIP entry cannot
|
|
23
|
+
* bypass protection on case-insensitive filesystems (macOS/APFS, Windows).
|
|
24
|
+
*
|
|
25
|
+
* `AGENTS.md` and `CLAUDE.md` ship as thin pointers to the canonical WayAI skill
|
|
26
|
+
* at `.wayai/skills/wayai/SKILL.md`. Treating them as init-only respects user
|
|
27
|
+
* customizations — once the user edits either file, `wayai update` leaves it
|
|
28
|
+
* alone. The skill itself (under `.wayai/skills/wayai/`) and the per-harness
|
|
29
|
+
* skill shims (under `.claude/`, `.opencode/`, `.agents/`) refresh on every
|
|
30
|
+
* update so platform changes always reach the workspace.
|
|
31
|
+
*/
|
|
32
|
+
const INIT_ONLY_FILES = ['.wayai.yaml', 'AGENTS.local.md', 'AGENTS.md', 'CLAUDE.md'];
|
|
33
|
+
const INIT_ONLY_FILES_LC = new Set(INIT_ONLY_FILES.map((f) => f.toLowerCase()));
|
|
17
34
|
export async function refreshScaffold(options) {
|
|
18
35
|
const { gitRoot, apiUrl, accessToken, mode } = options;
|
|
19
36
|
const client = new ApiClient({ apiUrl, accessToken });
|
|
@@ -45,8 +62,10 @@ export async function refreshScaffold(options) {
|
|
|
45
62
|
const gitInternals = path.resolve(gitRoot, '.git');
|
|
46
63
|
if (destPath === gitInternals || destPath.startsWith(gitInternals + path.sep))
|
|
47
64
|
continue;
|
|
48
|
-
//
|
|
49
|
-
if (
|
|
65
|
+
// Scaffold ZIPs only ship canonical names; case-variants are malformed.
|
|
66
|
+
if (INIT_ONLY_FILES_LC.has(filePath.toLowerCase())) {
|
|
67
|
+
if (!INIT_ONLY_FILES.includes(filePath))
|
|
68
|
+
continue;
|
|
50
69
|
if (mode === 'refresh' || fs.existsSync(destPath))
|
|
51
70
|
continue;
|
|
52
71
|
}
|
package/dist/lib/scaffold.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/lib/scaffold.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/lib/scaffold.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const MAX_AGE_24H_MS: number;
|
|
2
|
+
export interface VersionCache {
|
|
3
|
+
lastCheck: number;
|
|
4
|
+
latest: string | null;
|
|
5
|
+
}
|
|
6
|
+
export declare function getVersionCachePath(): string;
|
|
7
|
+
export declare function readVersionCache(): VersionCache | null;
|
|
8
|
+
export declare function readCachedLatest(maxAgeMs?: number): string | null;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Read side of ~/.wayai/update-check.json; writes happen in src/index.ts checkForUpdates().
|
|
2
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
export const MAX_AGE_24H_MS = 24 * 60 * 60 * 1000;
|
|
6
|
+
export function getVersionCachePath() {
|
|
7
|
+
return join(homedir(), '.wayai', 'update-check.json');
|
|
8
|
+
}
|
|
9
|
+
export function readVersionCache() {
|
|
10
|
+
try {
|
|
11
|
+
const path = getVersionCachePath();
|
|
12
|
+
if (!existsSync(path))
|
|
13
|
+
return null;
|
|
14
|
+
const parsed = JSON.parse(readFileSync(path, 'utf-8'));
|
|
15
|
+
if (typeof parsed.lastCheck !== 'number')
|
|
16
|
+
return null;
|
|
17
|
+
if (parsed.latest !== null && typeof parsed.latest !== 'string')
|
|
18
|
+
return null;
|
|
19
|
+
return parsed;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function readCachedLatest(maxAgeMs = MAX_AGE_24H_MS) {
|
|
26
|
+
const cache = readVersionCache();
|
|
27
|
+
if (!cache?.latest)
|
|
28
|
+
return null;
|
|
29
|
+
if (Date.now() - cache.lastCheck > maxAgeMs)
|
|
30
|
+
return null;
|
|
31
|
+
return cache.latest;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=version-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-cache.js","sourceRoot":"","sources":["../../src/lib/version-cache.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAE5F,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAOlD,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,mBAAmB,EAAE,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAiB,CAAC;QACvE,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACtD,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC7E,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,WAAmB,cAAc;IAChE,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;IACjC,IAAI,CAAC,KAAK,EAAE,MAAM;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzD,OAAO,KAAK,CAAC,MAAM,CAAC;AACtB,CAAC"}
|