@wayai/cli 0.3.40 → 0.3.41
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/index.js +16893 -310
- package/dist/index.js.map +1 -1
- package/package.json +6 -4
- package/dist/commands/admin.d.ts +0 -1
- package/dist/commands/admin.js +0 -913
- package/dist/commands/admin.js.map +0 -1
- package/dist/commands/analytics.d.ts +0 -34
- package/dist/commands/analytics.js +0 -605
- package/dist/commands/analytics.js.map +0 -1
- package/dist/commands/conversations.d.ts +0 -14
- package/dist/commands/conversations.js +0 -292
- package/dist/commands/conversations.js.map +0 -1
- package/dist/commands/create-credential.d.ts +0 -20
- package/dist/commands/create-credential.js +0 -146
- package/dist/commands/create-credential.js.map +0 -1
- package/dist/commands/delete-history.d.ts +0 -15
- package/dist/commands/delete-history.js +0 -56
- package/dist/commands/delete-history.js.map +0 -1
- package/dist/commands/eval-capture.d.ts +0 -1
- package/dist/commands/eval-capture.js +0 -135
- package/dist/commands/eval-capture.js.map +0 -1
- package/dist/commands/eval-results.d.ts +0 -10
- package/dist/commands/eval-results.js +0 -168
- package/dist/commands/eval-results.js.map +0 -1
- package/dist/commands/eval.d.ts +0 -1
- package/dist/commands/eval.js +0 -49
- package/dist/commands/eval.js.map +0 -1
- package/dist/commands/evals.d.ts +0 -21
- package/dist/commands/evals.js +0 -120
- package/dist/commands/evals.js.map +0 -1
- package/dist/commands/init.d.ts +0 -16
- package/dist/commands/init.js +0 -191
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/list.d.ts +0 -13
- package/dist/commands/list.js +0 -70
- package/dist/commands/list.js.map +0 -1
- package/dist/commands/login.d.ts +0 -8
- package/dist/commands/login.js +0 -145
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/logout.d.ts +0 -1
- package/dist/commands/logout.js +0 -19
- package/dist/commands/logout.js.map +0 -1
- package/dist/commands/migrate.d.ts +0 -12
- package/dist/commands/migrate.js +0 -106
- package/dist/commands/migrate.js.map +0 -1
- package/dist/commands/observability.d.ts +0 -14
- package/dist/commands/observability.js +0 -124
- package/dist/commands/observability.js.map +0 -1
- package/dist/commands/org.d.ts +0 -19
- package/dist/commands/org.js +0 -186
- package/dist/commands/org.js.map +0 -1
- package/dist/commands/pull.d.ts +0 -31
- package/dist/commands/pull.js +0 -210
- package/dist/commands/pull.js.map +0 -1
- package/dist/commands/push.d.ts +0 -25
- package/dist/commands/push.js +0 -472
- package/dist/commands/push.js.map +0 -1
- package/dist/commands/report-create.d.ts +0 -18
- package/dist/commands/report-create.js +0 -143
- package/dist/commands/report-create.js.map +0 -1
- package/dist/commands/report.d.ts +0 -16
- package/dist/commands/report.js +0 -252
- package/dist/commands/report.js.map +0 -1
- package/dist/commands/run-eval.d.ts +0 -15
- package/dist/commands/run-eval.js +0 -187
- package/dist/commands/run-eval.js.map +0 -1
- package/dist/commands/send-message.d.ts +0 -11
- package/dist/commands/send-message.js +0 -63
- package/dist/commands/send-message.js.map +0 -1
- package/dist/commands/status.d.ts +0 -17
- package/dist/commands/status.js +0 -205
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/sync-mcp.d.ts +0 -16
- package/dist/commands/sync-mcp.js +0 -51
- package/dist/commands/sync-mcp.js.map +0 -1
- package/dist/commands/sync-skills.d.ts +0 -10
- package/dist/commands/sync-skills.js +0 -49
- package/dist/commands/sync-skills.js.map +0 -1
- package/dist/commands/unlock.d.ts +0 -1
- package/dist/commands/unlock.js +0 -13
- package/dist/commands/unlock.js.map +0 -1
- package/dist/commands/update-credential.d.ts +0 -29
- package/dist/commands/update-credential.js +0 -156
- package/dist/commands/update-credential.js.map +0 -1
- package/dist/commands/update.d.ts +0 -6
- package/dist/commands/update.js +0 -36
- package/dist/commands/update.js.map +0 -1
- package/dist/commands/use.d.ts +0 -1
- package/dist/commands/use.js +0 -56
- package/dist/commands/use.js.map +0 -1
- package/dist/commands/whoami.d.ts +0 -11
- package/dist/commands/whoami.js +0 -30
- package/dist/commands/whoami.js.map +0 -1
- package/dist/index.d.ts +0 -28
- package/dist/lib/analytics-constants.d.ts +0 -6
- package/dist/lib/analytics-constants.js +0 -14
- package/dist/lib/analytics-constants.js.map +0 -1
- package/dist/lib/api-client.d.ts +0 -568
- package/dist/lib/api-client.js +0 -445
- package/dist/lib/api-client.js.map +0 -1
- package/dist/lib/auth.d.ts +0 -50
- package/dist/lib/auth.js +0 -230
- package/dist/lib/auth.js.map +0 -1
- package/dist/lib/config.d.ts +0 -34
- package/dist/lib/config.js +0 -69
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/credential-utils.d.ts +0 -36
- package/dist/lib/credential-utils.js +0 -88
- package/dist/lib/credential-utils.js.map +0 -1
- package/dist/lib/diff-display.d.ts +0 -8
- package/dist/lib/diff-display.js +0 -37
- package/dist/lib/diff-display.js.map +0 -1
- package/dist/lib/eval-format.d.ts +0 -29
- package/dist/lib/eval-format.js +0 -44
- package/dist/lib/eval-format.js.map +0 -1
- package/dist/lib/hub-lock.d.ts +0 -7
- package/dist/lib/hub-lock.js +0 -116
- package/dist/lib/hub-lock.js.map +0 -1
- package/dist/lib/layout.d.ts +0 -79
- package/dist/lib/layout.js +0 -133
- package/dist/lib/layout.js.map +0 -1
- package/dist/lib/org-workspace.d.ts +0 -22
- package/dist/lib/org-workspace.js +0 -106
- package/dist/lib/org-workspace.js.map +0 -1
- package/dist/lib/parser.d.ts +0 -16
- package/dist/lib/parser.js +0 -306
- package/dist/lib/parser.js.map +0 -1
- package/dist/lib/repo-config.d.ts +0 -23
- package/dist/lib/repo-config.js +0 -91
- package/dist/lib/repo-config.js.map +0 -1
- package/dist/lib/report-edit-args.d.ts +0 -27
- package/dist/lib/report-edit-args.js +0 -56
- package/dist/lib/report-edit-args.js.map +0 -1
- package/dist/lib/report-inbox.d.ts +0 -19
- package/dist/lib/report-inbox.js +0 -73
- package/dist/lib/report-inbox.js.map +0 -1
- package/dist/lib/resource-files.d.ts +0 -29
- package/dist/lib/resource-files.js +0 -156
- package/dist/lib/resource-files.js.map +0 -1
- package/dist/lib/sentry.d.ts +0 -38
- package/dist/lib/sentry.js +0 -168
- package/dist/lib/sentry.js.map +0 -1
- package/dist/lib/skill-version.d.ts +0 -9
- package/dist/lib/skill-version.js +0 -53
- package/dist/lib/skill-version.js.map +0 -1
- package/dist/lib/sql-output.d.ts +0 -17
- package/dist/lib/sql-output.js +0 -48
- package/dist/lib/sql-output.js.map +0 -1
- package/dist/lib/token-store.d.ts +0 -37
- package/dist/lib/token-store.js +0 -354
- package/dist/lib/token-store.js.map +0 -1
- package/dist/lib/types.d.ts +0 -18
- package/dist/lib/types.js +0 -5
- package/dist/lib/types.js.map +0 -1
- package/dist/lib/utils.d.ts +0 -97
- package/dist/lib/utils.js +0 -288
- package/dist/lib/utils.js.map +0 -1
- package/dist/lib/version-cache.d.ts +0 -10
- package/dist/lib/version-cache.js +0 -34
- package/dist/lib/version-cache.js.map +0 -1
- package/dist/lib/workspace.d.ts +0 -112
- package/dist/lib/workspace.js +0 -387
- package/dist/lib/workspace.js.map +0 -1
- package/dist/lib/yaml-writer.d.ts +0 -18
- package/dist/lib/yaml-writer.js +0 -283
- package/dist/lib/yaml-writer.js.map +0 -1
package/dist/commands/init.js
DELETED
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* wayai init [--org <uuid>] — set up .wayai.yaml to scope this repo to an organization
|
|
3
|
-
*
|
|
4
|
-
* Interactive mode: prompts user to pick an org (or auto-selects if only one).
|
|
5
|
-
* Direct mode: --org <uuid> sets the org without prompting.
|
|
6
|
-
*
|
|
7
|
-
* Hubs self-identify via `hub.yaml` inside their folder; this file only carries
|
|
8
|
-
* org context so that push/pull know which org to talk to.
|
|
9
|
-
*/
|
|
10
|
-
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
11
|
-
import path from 'node:path';
|
|
12
|
-
import { requireAuth } from '../lib/auth.js';
|
|
13
|
-
import { ApiClient } from '../lib/api-client.js';
|
|
14
|
-
import { readRepoConfig, writeRepoConfig } from '../lib/repo-config.js';
|
|
15
|
-
import { findGitRoot } from '../lib/workspace.js';
|
|
16
|
-
import { resolveLayout } from '../lib/layout.js';
|
|
17
|
-
import { UUID_RE, prompt } from '../lib/utils.js';
|
|
18
|
-
export const SKILL_INSTALL_CMD = 'npx skills add wayai-pro/wayai-skill -y';
|
|
19
|
-
const AGENTS_MD = `# WayAI Workspace
|
|
20
|
-
|
|
21
|
-
This is a WayAI hub-as-code workspace. Hub configuration is stored as files (\`hub.yaml\`, \`agents/*.yaml\`, \`agents/*.md\`) and synced bidirectionally with the WayAI platform via the \`wayai\` CLI.
|
|
22
|
-
|
|
23
|
-
**Always start by reading the WayAI skill.** Install it with \`${SKILL_INSTALL_CMD}\` if you haven't already; the skill covers:
|
|
24
|
-
- Platform entities, hub types, AI modes, agent roles, connection types
|
|
25
|
-
- Workflow (\`wayai update\` → \`wayai pull\` → edit → \`wayai push\`)
|
|
26
|
-
- Common CLI commands and the decision matrix (CLI vs UI)
|
|
27
|
-
- Repository structure and YAML shapes (\`hub.yaml\`, \`agents/<slug>.yaml\`)
|
|
28
|
-
- Pointers to per-domain references (Connections, Agents, Resources, States, Outbound, Evals, Analytics, Templates)
|
|
29
|
-
|
|
30
|
-
Project-specific overrides live in \`AGENTS.local.md\` — read it after the skill if it exists.
|
|
31
|
-
|
|
32
|
-
This file is created once on \`wayai init\` and never overwritten — edit freely.
|
|
33
|
-
`;
|
|
34
|
-
const CLAUDE_MD = `@AGENTS.md
|
|
35
|
-
@AGENTS.local.md
|
|
36
|
-
`;
|
|
37
|
-
const AGENTS_LOCAL_MD = `# Project-specific instructions
|
|
38
|
-
|
|
39
|
-
This file holds project-specific overrides and additional instructions for AI coding agents working on this hub. It is **never overwritten by \`wayai\` commands** — edit freely.
|
|
40
|
-
|
|
41
|
-
Use it for things like:
|
|
42
|
-
|
|
43
|
-
- Domain glossary and terminology specific to this hub
|
|
44
|
-
- Business rules the AI should always apply
|
|
45
|
-
- Conventions or constraints that override defaults in \`AGENTS.md\`
|
|
46
|
-
- Notes about external systems, integrations, or quirks
|
|
47
|
-
- Pointers to other repo files the agent should read first
|
|
48
|
-
|
|
49
|
-
Leave this file empty (or delete its body) if you have nothing to add — \`AGENTS.md\` is sufficient on its own.
|
|
50
|
-
`;
|
|
51
|
-
const SHIM_FILES = [
|
|
52
|
-
{ name: 'AGENTS.md', content: AGENTS_MD },
|
|
53
|
-
{ name: 'CLAUDE.md', content: CLAUDE_MD },
|
|
54
|
-
{ name: 'AGENTS.local.md', content: AGENTS_LOCAL_MD },
|
|
55
|
-
];
|
|
56
|
-
export function writeWorkspaceFiles(gitRoot) {
|
|
57
|
-
const created = [];
|
|
58
|
-
for (const { name, content } of SHIM_FILES) {
|
|
59
|
-
const filePath = path.join(gitRoot, name);
|
|
60
|
-
if (!existsSync(filePath)) {
|
|
61
|
-
writeFileSync(filePath, content);
|
|
62
|
-
created.push(name);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
// Create the hubs dir for the active layout (`wayai-ws/hubs/` on a fresh repo;
|
|
66
|
-
// the legacy `workspace/` if this repo predates migration).
|
|
67
|
-
const hubsDir = resolveLayout(gitRoot).hubsDir;
|
|
68
|
-
if (!existsSync(hubsDir)) {
|
|
69
|
-
mkdirSync(hubsDir, { recursive: true });
|
|
70
|
-
created.push(`${path.relative(gitRoot, hubsDir)}/`);
|
|
71
|
-
}
|
|
72
|
-
return created;
|
|
73
|
-
}
|
|
74
|
-
export function parseArgs(args) {
|
|
75
|
-
let orgId;
|
|
76
|
-
let autoConfirm = false;
|
|
77
|
-
const orgIdx = args.indexOf('--org');
|
|
78
|
-
if (orgIdx !== -1 && args[orgIdx + 1]) {
|
|
79
|
-
orgId = args[orgIdx + 1];
|
|
80
|
-
}
|
|
81
|
-
for (const arg of args) {
|
|
82
|
-
if (arg === '--yes' || arg === '-y') {
|
|
83
|
-
autoConfirm = true;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
return { orgId, autoConfirm };
|
|
87
|
-
}
|
|
88
|
-
export async function initCommand(args) {
|
|
89
|
-
const { orgId: directOrgId, autoConfirm } = parseArgs(args);
|
|
90
|
-
// Warn if .wayai.yaml already exists
|
|
91
|
-
const existing = readRepoConfig();
|
|
92
|
-
if (existing) {
|
|
93
|
-
const scopeLabel = existing.organization_name
|
|
94
|
-
? `${existing.organization_name} (${existing.organization_id})`
|
|
95
|
-
: existing.organization_id;
|
|
96
|
-
console.log(`Current scope: ${scopeLabel}`);
|
|
97
|
-
if (!autoConfirm) {
|
|
98
|
-
const answer = await prompt('Overwrite? [y/N]: ');
|
|
99
|
-
if (answer.toLowerCase() !== 'y') {
|
|
100
|
-
console.log('Cancelled.');
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
const { config, accessToken } = await requireAuth();
|
|
106
|
-
const client = new ApiClient({ apiUrl: config.api_url, accessToken });
|
|
107
|
-
if (directOrgId) {
|
|
108
|
-
await initDirect(client, directOrgId);
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
await initInteractive(client, autoConfirm);
|
|
112
|
-
}
|
|
113
|
-
// Write workspace shim files (AGENTS.md, CLAUDE.md, AGENTS.local.md) and create the hubs dir.
|
|
114
|
-
// Files are only written if absent — never overwritten on subsequent inits.
|
|
115
|
-
const gitRoot = findGitRoot();
|
|
116
|
-
if (gitRoot) {
|
|
117
|
-
const created = writeWorkspaceFiles(gitRoot);
|
|
118
|
-
if (created.length > 0) {
|
|
119
|
-
console.log(`Created ${created.join(', ')}`);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
console.log(`Run \`${SKILL_INSTALL_CMD}\` to install the WayAI skill in your AI harness, then \`wayai pull\` to fetch hub configuration.`);
|
|
123
|
-
}
|
|
124
|
-
async function initDirect(client, orgId) {
|
|
125
|
-
if (!UUID_RE.test(orgId)) {
|
|
126
|
-
console.error('Invalid organization ID. Expected a UUID.');
|
|
127
|
-
process.exit(1);
|
|
128
|
-
}
|
|
129
|
-
console.log('Looking up organization...');
|
|
130
|
-
const { organizations } = await client.organizations();
|
|
131
|
-
const match = organizations.find((o) => o.id === orgId);
|
|
132
|
-
if (!match) {
|
|
133
|
-
console.error(`Organization ${orgId} not found among the orgs you can access.`);
|
|
134
|
-
process.exit(1);
|
|
135
|
-
}
|
|
136
|
-
const configPath = writeRepoConfig({
|
|
137
|
-
organization_id: match.id,
|
|
138
|
-
organization_name: match.name,
|
|
139
|
-
});
|
|
140
|
-
console.log(`Found: ${match.name}`);
|
|
141
|
-
console.log(`\nWrote ${configPath}`);
|
|
142
|
-
}
|
|
143
|
-
async function initInteractive(client, autoConfirm) {
|
|
144
|
-
console.log('Fetching organizations...');
|
|
145
|
-
let organizations = (await client.organizations()).organizations;
|
|
146
|
-
if (organizations.length === 0) {
|
|
147
|
-
// No org yet — create one inline rather than bouncing to the web UI. In
|
|
148
|
-
// non-interactive mode (-y / CI) there's no one to prompt, so direct the
|
|
149
|
-
// caller to the scriptable primitive instead of hanging on stdin.
|
|
150
|
-
if (autoConfirm) {
|
|
151
|
-
console.error('No organizations found. Create one with `wayai org create "<name>"`, then re-run `wayai init`.');
|
|
152
|
-
process.exit(1);
|
|
153
|
-
}
|
|
154
|
-
console.log('\nNo organizations found.');
|
|
155
|
-
const name = (await prompt('Name your first organization (blank to cancel): ')).trim();
|
|
156
|
-
if (!name) {
|
|
157
|
-
console.error('Cancelled. Create one later with `wayai org create "<name>"`.');
|
|
158
|
-
process.exit(1);
|
|
159
|
-
}
|
|
160
|
-
const { organization } = await client.createOrganization(name);
|
|
161
|
-
console.log(`Created organization: ${organization.name} (${organization.id})`);
|
|
162
|
-
if (organization.region && !organization.region_explicit) {
|
|
163
|
-
console.log(` Region: ${organization.region} (closest to you — re-create with \`wayai org create --region\` to change)`);
|
|
164
|
-
}
|
|
165
|
-
organizations = [{ id: organization.id, name: organization.name }];
|
|
166
|
-
}
|
|
167
|
-
let selectedOrg;
|
|
168
|
-
if (organizations.length === 1) {
|
|
169
|
-
selectedOrg = organizations[0];
|
|
170
|
-
console.log(`Organization: ${selectedOrg.name}`);
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
console.log('\nOrganizations:');
|
|
174
|
-
for (let i = 0; i < organizations.length; i++) {
|
|
175
|
-
console.log(` ${i + 1}. ${organizations[i].name}`);
|
|
176
|
-
}
|
|
177
|
-
const orgAnswer = await prompt(`\nSelect organization [1-${organizations.length}]: `);
|
|
178
|
-
const orgIdx = parseInt(orgAnswer, 10) - 1;
|
|
179
|
-
if (isNaN(orgIdx) || orgIdx < 0 || orgIdx >= organizations.length) {
|
|
180
|
-
console.error('Invalid selection.');
|
|
181
|
-
process.exit(1);
|
|
182
|
-
}
|
|
183
|
-
selectedOrg = organizations[orgIdx];
|
|
184
|
-
}
|
|
185
|
-
const configPath = writeRepoConfig({
|
|
186
|
-
organization_id: selectedOrg.id,
|
|
187
|
-
organization_name: selectedOrg.name,
|
|
188
|
-
});
|
|
189
|
-
console.log(`\nWrote ${configPath}`);
|
|
190
|
-
}
|
|
191
|
-
//# sourceMappingURL=init.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/list.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* wayai list — list organizations and hubs
|
|
3
|
-
*
|
|
4
|
-
* Usage:
|
|
5
|
-
* wayai list # all orgs → hubs
|
|
6
|
-
* wayai list --org <id> # filter to one org
|
|
7
|
-
* wayai list --json # structured output for agents/scripts
|
|
8
|
-
*/
|
|
9
|
-
export declare function parseArgs(args: string[]): {
|
|
10
|
-
orgId: string | undefined;
|
|
11
|
-
json: boolean;
|
|
12
|
-
};
|
|
13
|
-
export declare function listCommand(args: string[]): Promise<void>;
|
package/dist/commands/list.js
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* wayai list — list organizations and hubs
|
|
3
|
-
*
|
|
4
|
-
* Usage:
|
|
5
|
-
* wayai list # all orgs → hubs
|
|
6
|
-
* wayai list --org <id> # filter to one org
|
|
7
|
-
* wayai list --json # structured output for agents/scripts
|
|
8
|
-
*/
|
|
9
|
-
import { requireAuth } from '../lib/auth.js';
|
|
10
|
-
import { ApiClient } from '../lib/api-client.js';
|
|
11
|
-
export function parseArgs(args) {
|
|
12
|
-
let orgId;
|
|
13
|
-
let json = false;
|
|
14
|
-
for (let i = 0; i < args.length; i++) {
|
|
15
|
-
if (args[i] === '--org' && args[i + 1]) {
|
|
16
|
-
orgId = args[++i];
|
|
17
|
-
}
|
|
18
|
-
else if (args[i] === '--json') {
|
|
19
|
-
json = true;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
return { orgId, json };
|
|
23
|
-
}
|
|
24
|
-
export async function listCommand(args) {
|
|
25
|
-
const { orgId, json } = parseArgs(args);
|
|
26
|
-
const { config, accessToken } = await requireAuth();
|
|
27
|
-
const client = new ApiClient({ apiUrl: config.api_url, accessToken });
|
|
28
|
-
const { organizations } = await client.organizations();
|
|
29
|
-
const orgsToList = orgId
|
|
30
|
-
? organizations.filter((o) => o.id === orgId)
|
|
31
|
-
: organizations;
|
|
32
|
-
if (orgsToList.length === 0) {
|
|
33
|
-
if (json) {
|
|
34
|
-
console.log(JSON.stringify({ organizations: [] }, null, 2));
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
console.log(orgId ? `Organization ${orgId} not found.` : 'No organizations found.');
|
|
38
|
-
}
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
// Fetch hubs for all orgs in parallel
|
|
42
|
-
const results = await Promise.all(orgsToList.map((org) => client.listHubs(org.id).then((r) => ({ org, hubs: r.hubs }))));
|
|
43
|
-
if (json) {
|
|
44
|
-
const payload = {
|
|
45
|
-
organizations: results.map(({ org, hubs }) => ({
|
|
46
|
-
organization_id: org.id,
|
|
47
|
-
organization_name: org.name,
|
|
48
|
-
hubs: hubs.map((h) => ({
|
|
49
|
-
hub_id: h.hub_id,
|
|
50
|
-
hub_name: h.hub_name,
|
|
51
|
-
preview_label: h.preview_label ?? null,
|
|
52
|
-
})),
|
|
53
|
-
})),
|
|
54
|
-
};
|
|
55
|
-
console.log(JSON.stringify(payload, null, 2));
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
for (const { org, hubs } of results) {
|
|
59
|
-
console.log(`\n${org.name} (${org.id})`);
|
|
60
|
-
if (hubs.length === 0) {
|
|
61
|
-
console.log(' (no hubs)');
|
|
62
|
-
continue;
|
|
63
|
-
}
|
|
64
|
-
for (const hub of hubs) {
|
|
65
|
-
const label = hub.preview_label ? ` (${hub.preview_label})` : '';
|
|
66
|
-
console.log(` ${hub.hub_name}${label} ${hub.hub_id}`);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
//# sourceMappingURL=list.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/login.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* wayai login — OAuth 2.1 + PKCE browser flow (default) or --token fallback
|
|
3
|
-
*
|
|
4
|
-
* Browser login: Opens AuthKit authorize → PKCE flow → JWT + refresh token
|
|
5
|
-
* Token login: User pastes a way_ scoped token directly
|
|
6
|
-
*/
|
|
7
|
-
export declare function parseApiUrl(args: string[]): string;
|
|
8
|
-
export declare function loginCommand(args: string[]): Promise<void>;
|
package/dist/commands/login.js
DELETED
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* wayai login — OAuth 2.1 + PKCE browser flow (default) or --token fallback
|
|
3
|
-
*
|
|
4
|
-
* Browser login: Opens AuthKit authorize → PKCE flow → JWT + refresh token
|
|
5
|
-
* Token login: User pastes a way_ scoped token directly
|
|
6
|
-
*/
|
|
7
|
-
import * as readline from 'node:readline';
|
|
8
|
-
import { generateState, generateCodeVerifier, generateCodeChallenge, startCallbackServer, exchangeCodeForTokens, expiresInToIso, validateToken, getAuthKitDomain, getAuthKitClientId, OAUTH_CALLBACK_PORT, } from '../lib/auth.js';
|
|
9
|
-
import { writeConfig } from '../lib/config.js';
|
|
10
|
-
import { setOAuthTokens, setWayToken, identifyTokenType } from '../lib/token-store.js';
|
|
11
|
-
import { nudgeReportActions } from '../lib/report-inbox.js';
|
|
12
|
-
function prompt(question, defaultValue) {
|
|
13
|
-
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
14
|
-
const display = defaultValue ? `${question} [${defaultValue}]: ` : `${question}: `;
|
|
15
|
-
return new Promise((resolve) => {
|
|
16
|
-
rl.question(display, (answer) => {
|
|
17
|
-
rl.close();
|
|
18
|
-
resolve(answer.trim() || defaultValue || '');
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
const DEFAULT_API_URL = 'https://api.wayai.pro';
|
|
23
|
-
export function parseApiUrl(args) {
|
|
24
|
-
const idx = args.indexOf('--api-url');
|
|
25
|
-
if (idx !== -1 && args[idx + 1]) {
|
|
26
|
-
return args[idx + 1];
|
|
27
|
-
}
|
|
28
|
-
return DEFAULT_API_URL;
|
|
29
|
-
}
|
|
30
|
-
export async function loginCommand(args) {
|
|
31
|
-
const useToken = args.includes('--token');
|
|
32
|
-
const apiUrl = parseApiUrl(args);
|
|
33
|
-
if (useToken) {
|
|
34
|
-
await loginWithToken(apiUrl);
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
await loginWithBrowser(apiUrl);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
async function loginWithBrowser(apiUrl) {
|
|
41
|
-
console.log('\nConnecting to WayAI...');
|
|
42
|
-
const authkitDomain = getAuthKitDomain();
|
|
43
|
-
const clientId = getAuthKitClientId();
|
|
44
|
-
// Generate PKCE parameters
|
|
45
|
-
const codeVerifier = generateCodeVerifier();
|
|
46
|
-
const codeChallenge = await generateCodeChallenge(codeVerifier);
|
|
47
|
-
const state = generateState();
|
|
48
|
-
// Fixed port so the redirect URI matches what's registered in WorkOS
|
|
49
|
-
const port = OAUTH_CALLBACK_PORT;
|
|
50
|
-
const redirectUri = `http://127.0.0.1:${port}/callback`;
|
|
51
|
-
// Build AuthKit authorization URL with PKCE
|
|
52
|
-
const authorizeUrl = new URL(`${authkitDomain}/oauth2/authorize`);
|
|
53
|
-
authorizeUrl.searchParams.set('client_id', clientId);
|
|
54
|
-
authorizeUrl.searchParams.set('redirect_uri', redirectUri);
|
|
55
|
-
authorizeUrl.searchParams.set('response_type', 'code');
|
|
56
|
-
authorizeUrl.searchParams.set('code_challenge', codeChallenge);
|
|
57
|
-
authorizeUrl.searchParams.set('code_challenge_method', 'S256');
|
|
58
|
-
authorizeUrl.searchParams.set('state', state);
|
|
59
|
-
// offline_access is required for AuthKit to issue a refresh_token alongside the JWT;
|
|
60
|
-
// without it, the CLI would re-prompt login every time the access token expires (~1h).
|
|
61
|
-
authorizeUrl.searchParams.set('scope', 'openid profile email offline_access');
|
|
62
|
-
try {
|
|
63
|
-
// Start callback server before opening browser
|
|
64
|
-
const callbackPromise = startCallbackServer(port, state);
|
|
65
|
-
// Try to open browser
|
|
66
|
-
const openedBrowser = await tryOpenBrowser(authorizeUrl.toString());
|
|
67
|
-
if (!openedBrowser) {
|
|
68
|
-
console.log(`\nOpen this URL in your browser to log in:\n\n ${authorizeUrl.toString()}\n`);
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
console.log('Opening browser for login...');
|
|
72
|
-
}
|
|
73
|
-
const { code } = await callbackPromise;
|
|
74
|
-
console.log('Exchanging authorization code...');
|
|
75
|
-
const tokens = await exchangeCodeForTokens(authkitDomain, clientId, code, codeVerifier, redirectUri);
|
|
76
|
-
// Match the defensive pattern in getAccessToken's refresh path: only persist
|
|
77
|
-
// refresh_token when AuthKit returned one (it's gated on the `offline_access`
|
|
78
|
-
// scope, so a missing value would mean scope config regressed).
|
|
79
|
-
const expiresAt = expiresInToIso(tokens.expires_in);
|
|
80
|
-
await setOAuthTokens(tokens.access_token, tokens.refresh_token, expiresAt);
|
|
81
|
-
writeConfig({ api_url: apiUrl, token_expires_at: expiresAt });
|
|
82
|
-
console.log('\nLogin successful!');
|
|
83
|
-
console.log('Token stored in OS keyring; metadata at ~/.wayai/config.json');
|
|
84
|
-
// Best-effort: remind the reporter of any reports awaiting their accept/contest.
|
|
85
|
-
await nudgeReportActions(apiUrl, tokens.access_token);
|
|
86
|
-
}
|
|
87
|
-
catch (err) {
|
|
88
|
-
console.error(`\nLogin failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
89
|
-
process.exit(1);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
async function loginWithToken(apiUrl) {
|
|
93
|
-
const token = await prompt('API Token (way_...)');
|
|
94
|
-
if (!token) {
|
|
95
|
-
console.error('Token is required.');
|
|
96
|
-
process.exit(1);
|
|
97
|
-
}
|
|
98
|
-
if (identifyTokenType(token) !== 'way_token') {
|
|
99
|
-
console.error('Invalid token format. Tokens start with "way_".');
|
|
100
|
-
process.exit(1);
|
|
101
|
-
}
|
|
102
|
-
console.log('\nValidating token...');
|
|
103
|
-
try {
|
|
104
|
-
await validateToken(apiUrl, token);
|
|
105
|
-
}
|
|
106
|
-
catch (err) {
|
|
107
|
-
console.error(`Token validation failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
108
|
-
process.exit(1);
|
|
109
|
-
}
|
|
110
|
-
await setWayToken(token);
|
|
111
|
-
writeConfig({ api_url: apiUrl });
|
|
112
|
-
console.log('\nLogin successful! Token stored in OS keyring; metadata at ~/.wayai/config.json');
|
|
113
|
-
// Best-effort: remind the reporter of any reports awaiting their accept/contest.
|
|
114
|
-
await nudgeReportActions(apiUrl, token);
|
|
115
|
-
}
|
|
116
|
-
async function tryOpenBrowser(url) {
|
|
117
|
-
if (process.env.SSH_CONNECTION || process.env.SSH_TTY) {
|
|
118
|
-
return false;
|
|
119
|
-
}
|
|
120
|
-
try {
|
|
121
|
-
const { execFile } = await import('node:child_process');
|
|
122
|
-
const platform = process.platform;
|
|
123
|
-
let cmd;
|
|
124
|
-
let args;
|
|
125
|
-
if (platform === 'darwin') {
|
|
126
|
-
cmd = 'open';
|
|
127
|
-
args = [url];
|
|
128
|
-
}
|
|
129
|
-
else if (platform === 'win32') {
|
|
130
|
-
cmd = 'cmd';
|
|
131
|
-
args = ['/c', 'start', '', url];
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
cmd = 'xdg-open';
|
|
135
|
-
args = [url];
|
|
136
|
-
}
|
|
137
|
-
return new Promise((resolve) => {
|
|
138
|
-
execFile(cmd, args, (err) => resolve(!err));
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
catch {
|
|
142
|
-
return false;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
//# sourceMappingURL=login.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function logoutCommand(): Promise<void>;
|
package/dist/commands/logout.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { clearTokens, getToken } from '../lib/token-store.js';
|
|
2
|
-
export async function logoutCommand() {
|
|
3
|
-
const token = await getToken();
|
|
4
|
-
if (!token) {
|
|
5
|
-
console.log('Not logged in.');
|
|
6
|
-
return;
|
|
7
|
-
}
|
|
8
|
-
// WAYAI_TOKEN env override survives clearTokens — surface that so the user
|
|
9
|
-
// knows the current shell is still authenticated.
|
|
10
|
-
const envOverrideActive = !!process.env.WAYAI_TOKEN;
|
|
11
|
-
await clearTokens();
|
|
12
|
-
if (envOverrideActive) {
|
|
13
|
-
console.log('Tokens cleared from keyring and file. Note: WAYAI_TOKEN env var is still set in this shell — unset it to fully log out.');
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
console.log('Logged out. Tokens cleared.');
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=logout.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;IAE/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,2EAA2E;IAC3E,kDAAkD;IAClD,MAAM,iBAAiB,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IAEpD,MAAM,WAAW,EAAE,CAAC;IAEpB,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,yHAAyH,CAAC,CAAC;IACzI,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* wayai migrate — relocate a legacy repo to the `wayai-ws/{hubs,org}` layout.
|
|
3
|
-
*
|
|
4
|
-
* workspace/<hub>/ → wayai-ws/hubs/<hub>/
|
|
5
|
-
* org/ → wayai-ws/org/
|
|
6
|
-
*
|
|
7
|
-
* Idempotent: a no-op when there's nothing legacy left to move. Uses `git mv`
|
|
8
|
-
* (preserving history) for tracked dirs, falling back to a filesystem rename for
|
|
9
|
-
* untracked / partially-tracked dirs or non-git repos. `.wayai.yaml` and the
|
|
10
|
-
* init shim files (AGENTS.md, …) stay at the root and are untouched.
|
|
11
|
-
*/
|
|
12
|
-
export declare function migrateCommand(_args: string[]): Promise<void>;
|
package/dist/commands/migrate.js
DELETED
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* wayai migrate — relocate a legacy repo to the `wayai-ws/{hubs,org}` layout.
|
|
3
|
-
*
|
|
4
|
-
* workspace/<hub>/ → wayai-ws/hubs/<hub>/
|
|
5
|
-
* org/ → wayai-ws/org/
|
|
6
|
-
*
|
|
7
|
-
* Idempotent: a no-op when there's nothing legacy left to move. Uses `git mv`
|
|
8
|
-
* (preserving history) for tracked dirs, falling back to a filesystem rename for
|
|
9
|
-
* untracked / partially-tracked dirs or non-git repos. `.wayai.yaml` and the
|
|
10
|
-
* init shim files (AGENTS.md, …) stay at the root and are untouched.
|
|
11
|
-
*/
|
|
12
|
-
import { execFileSync } from 'node:child_process';
|
|
13
|
-
import * as fs from 'node:fs';
|
|
14
|
-
import * as path from 'node:path';
|
|
15
|
-
import { findGitRoot } from '../lib/workspace.js';
|
|
16
|
-
import { WAYAI_LAYOUT, isDirectory } from '../lib/layout.js';
|
|
17
|
-
/** True when at least one tracked file lives at/under `p`. */
|
|
18
|
-
function isTracked(gitRoot, p) {
|
|
19
|
-
try {
|
|
20
|
-
execFileSync('git', ['ls-files', '--error-unmatch', '--', path.relative(gitRoot, p)], {
|
|
21
|
-
cwd: gitRoot,
|
|
22
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
23
|
-
});
|
|
24
|
-
return true;
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Move `from` → `to`, creating `to`'s parent. Prefers `git mv` for tracked
|
|
32
|
-
* sources (history-preserving, staged); falls back to `fs.rename` when the
|
|
33
|
-
* source is untracked or `git mv` errors (e.g. mixed tracked/untracked
|
|
34
|
-
* contents). Returns which mechanism was used.
|
|
35
|
-
*/
|
|
36
|
-
function moveDir(gitRoot, from, to) {
|
|
37
|
-
fs.mkdirSync(path.dirname(to), { recursive: true });
|
|
38
|
-
if (isTracked(gitRoot, from)) {
|
|
39
|
-
try {
|
|
40
|
-
execFileSync('git', ['mv', path.relative(gitRoot, from), path.relative(gitRoot, to)], {
|
|
41
|
-
cwd: gitRoot,
|
|
42
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
43
|
-
});
|
|
44
|
-
return 'git';
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
// Fall through — e.g. the dir mixes tracked and untracked children.
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
fs.renameSync(from, to);
|
|
51
|
-
return 'fs';
|
|
52
|
-
}
|
|
53
|
-
export async function migrateCommand(_args) {
|
|
54
|
-
const gitRoot = findGitRoot();
|
|
55
|
-
if (!gitRoot) {
|
|
56
|
-
console.error('Not inside a git repository.');
|
|
57
|
-
process.exit(1);
|
|
58
|
-
}
|
|
59
|
-
const rel = (p) => path.relative(gitRoot, p);
|
|
60
|
-
const newWs = path.join(gitRoot, WAYAI_LAYOUT.wsDir);
|
|
61
|
-
const legacyWs = path.join(gitRoot, WAYAI_LAYOUT.legacy.wsDir);
|
|
62
|
-
const legacyOrg = path.join(gitRoot, WAYAI_LAYOUT.legacy.orgAtRoot);
|
|
63
|
-
const newHubs = path.join(newWs, WAYAI_LAYOUT.hubsSubdir);
|
|
64
|
-
const newOrg = path.join(newWs, WAYAI_LAYOUT.orgSubdir);
|
|
65
|
-
const hasLegacyWs = isDirectory(legacyWs);
|
|
66
|
-
const hasLegacyOrg = isDirectory(legacyOrg);
|
|
67
|
-
if (!hasLegacyWs && !hasLegacyOrg) {
|
|
68
|
-
console.log(`Already migrated — no legacy ${WAYAI_LAYOUT.legacy.wsDir}/ or ${WAYAI_LAYOUT.legacy.orgAtRoot}/ to move.`);
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
// Validate ALL targets before moving ANYTHING. Checking per-dir inline would
|
|
72
|
-
// let the workspace move succeed and then abort on an org-target collision,
|
|
73
|
-
// leaving a half-migrated repo that a re-run can't cleanly recover.
|
|
74
|
-
if (hasLegacyWs && isDirectory(newHubs)) {
|
|
75
|
-
console.error(`Cannot migrate: target ${rel(newHubs)}/ already exists alongside legacy ${WAYAI_LAYOUT.legacy.wsDir}/. ` +
|
|
76
|
-
`Merge them manually, then re-run \`wayai migrate\`.`);
|
|
77
|
-
process.exit(1);
|
|
78
|
-
}
|
|
79
|
-
if (hasLegacyOrg && isDirectory(newOrg)) {
|
|
80
|
-
console.error(`Cannot migrate: target ${rel(newOrg)}/ already exists alongside legacy ${WAYAI_LAYOUT.legacy.orgAtRoot}/. ` +
|
|
81
|
-
`Merge them manually, then re-run \`wayai migrate\`.`);
|
|
82
|
-
process.exit(1);
|
|
83
|
-
}
|
|
84
|
-
const moved = [];
|
|
85
|
-
let usedFsFallback = false;
|
|
86
|
-
if (hasLegacyWs) {
|
|
87
|
-
const how = moveDir(gitRoot, legacyWs, newHubs);
|
|
88
|
-
usedFsFallback ||= how === 'fs';
|
|
89
|
-
moved.push(`${WAYAI_LAYOUT.legacy.wsDir}/ → ${rel(newHubs)}/`);
|
|
90
|
-
}
|
|
91
|
-
if (hasLegacyOrg) {
|
|
92
|
-
const how = moveDir(gitRoot, legacyOrg, newOrg);
|
|
93
|
-
usedFsFallback ||= how === 'fs';
|
|
94
|
-
moved.push(`${WAYAI_LAYOUT.legacy.orgAtRoot}/ → ${rel(newOrg)}/`);
|
|
95
|
-
}
|
|
96
|
-
console.log(`Migrated to the ${WAYAI_LAYOUT.wsDir}/ layout:`);
|
|
97
|
-
for (const m of moved)
|
|
98
|
-
console.log(` ${m}`);
|
|
99
|
-
if (usedFsFallback) {
|
|
100
|
-
console.log('\n(Some dirs were moved on disk, not via git — they will show as untracked.)');
|
|
101
|
-
}
|
|
102
|
-
console.log('\nNext steps:');
|
|
103
|
-
console.log(' git add -A && git commit -m "chore: migrate to wayai-ws layout"');
|
|
104
|
-
console.log(' If your CI runs `wayai push`, commit this migration in the same change that updates CI.');
|
|
105
|
-
}
|
|
106
|
-
//# sourceMappingURL=migrate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared output helpers for `wayai conversations <id> observability` (hub-scoped)
|
|
3
|
-
* and `wayai admin observability <hub> <conv>` (platform-admin). Output shape is
|
|
4
|
-
* identical so an operator switching between the two commands sees the same
|
|
5
|
-
* format — only the data source (and the API path) differs.
|
|
6
|
-
*/
|
|
7
|
-
import type { ApiClient } from '../lib/api-client.js';
|
|
8
|
-
interface RenderOptions {
|
|
9
|
-
messageId?: string;
|
|
10
|
-
jsonOutput: boolean;
|
|
11
|
-
}
|
|
12
|
-
export declare function runConversationObservability(client: ApiClient, hubId: string, conversationId: string, opts: RenderOptions): Promise<void>;
|
|
13
|
-
export declare function runDebugObservability(client: ApiClient, hubId: string, conversationId: string, opts: RenderOptions): Promise<void>;
|
|
14
|
-
export {};
|