@agentuity/cli 0.0.109 → 0.0.111
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/build-report.d.ts +201 -0
- package/dist/build-report.d.ts.map +1 -0
- package/dist/build-report.js +335 -0
- package/dist/build-report.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +19 -4
- package/dist/cli.js.map +1 -1
- package/dist/cmd/build/entry-generator.d.ts.map +1 -1
- package/dist/cmd/build/entry-generator.js +3 -1
- package/dist/cmd/build/entry-generator.js.map +1 -1
- package/dist/cmd/build/index.d.ts.map +1 -1
- package/dist/cmd/build/index.js +44 -1
- package/dist/cmd/build/index.js.map +1 -1
- package/dist/cmd/build/typecheck.d.ts +7 -1
- package/dist/cmd/build/typecheck.d.ts.map +1 -1
- package/dist/cmd/build/typecheck.js +11 -1
- package/dist/cmd/build/typecheck.js.map +1 -1
- package/dist/cmd/build/vite/agent-discovery.d.ts +1 -1
- package/dist/cmd/build/vite/agent-discovery.d.ts.map +1 -1
- package/dist/cmd/build/vite/agent-discovery.js +3 -3
- package/dist/cmd/build/vite/agent-discovery.js.map +1 -1
- package/dist/cmd/build/vite/index.d.ts +2 -1
- package/dist/cmd/build/vite/index.d.ts.map +1 -1
- package/dist/cmd/build/vite/index.js +3 -2
- package/dist/cmd/build/vite/index.js.map +1 -1
- package/dist/cmd/build/vite/metadata-generator.d.ts.map +1 -1
- package/dist/cmd/build/vite/metadata-generator.js +3 -5
- package/dist/cmd/build/vite/metadata-generator.js.map +1 -1
- package/dist/cmd/build/vite/registry-generator.d.ts +1 -1
- package/dist/cmd/build/vite/registry-generator.d.ts.map +1 -1
- package/dist/cmd/build/vite/registry-generator.js +126 -41
- package/dist/cmd/build/vite/registry-generator.js.map +1 -1
- package/dist/cmd/build/vite/route-discovery.d.ts +6 -0
- package/dist/cmd/build/vite/route-discovery.d.ts.map +1 -1
- package/dist/cmd/build/vite/route-discovery.js +19 -0
- package/dist/cmd/build/vite/route-discovery.js.map +1 -1
- package/dist/cmd/build/vite/vite-builder.d.ts +3 -0
- package/dist/cmd/build/vite/vite-builder.d.ts.map +1 -1
- package/dist/cmd/build/vite/vite-builder.js +10 -2
- package/dist/cmd/build/vite/vite-builder.js.map +1 -1
- package/dist/cmd/build/vite-bundler.d.ts +3 -0
- package/dist/cmd/build/vite-bundler.d.ts.map +1 -1
- package/dist/cmd/build/vite-bundler.js +14 -5
- package/dist/cmd/build/vite-bundler.js.map +1 -1
- package/dist/cmd/cloud/deploy.d.ts.map +1 -1
- package/dist/cmd/cloud/deploy.js +149 -10
- package/dist/cmd/cloud/deploy.js.map +1 -1
- package/dist/cmd/cloud/deployment/show.d.ts.map +1 -1
- package/dist/cmd/cloud/deployment/show.js +0 -1
- package/dist/cmd/cloud/deployment/show.js.map +1 -1
- package/dist/cmd/cloud/sandbox/create.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/create.js +18 -0
- package/dist/cmd/cloud/sandbox/create.js.map +1 -1
- package/dist/cmd/cloud/sandbox/delete.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/delete.js +2 -6
- package/dist/cmd/cloud/sandbox/delete.js.map +1 -1
- package/dist/cmd/cloud/sandbox/download.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/download.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/download.js +89 -0
- package/dist/cmd/cloud/sandbox/download.js.map +1 -0
- package/dist/cmd/cloud/sandbox/env.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/env.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/env.js +90 -0
- package/dist/cmd/cloud/sandbox/env.js.map +1 -0
- package/dist/cmd/cloud/sandbox/get.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/get.js +5 -0
- package/dist/cmd/cloud/sandbox/get.js.map +1 -1
- package/dist/cmd/cloud/sandbox/index.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/index.js +14 -0
- package/dist/cmd/cloud/sandbox/index.js.map +1 -1
- package/dist/cmd/cloud/sandbox/ls.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/ls.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/ls.js +119 -0
- package/dist/cmd/cloud/sandbox/ls.js.map +1 -0
- package/dist/cmd/cloud/sandbox/mkdir.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/mkdir.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/mkdir.js +59 -0
- package/dist/cmd/cloud/sandbox/mkdir.js.map +1 -0
- package/dist/cmd/cloud/sandbox/rm.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/rm.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/rm.js +45 -0
- package/dist/cmd/cloud/sandbox/rm.js.map +1 -0
- package/dist/cmd/cloud/sandbox/rmdir.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/rmdir.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/rmdir.js +59 -0
- package/dist/cmd/cloud/sandbox/rmdir.js.map +1 -0
- package/dist/cmd/cloud/sandbox/snapshot/create.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/create.js +0 -2
- package/dist/cmd/cloud/sandbox/snapshot/create.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/get.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/get.js +0 -2
- package/dist/cmd/cloud/sandbox/snapshot/get.js.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/list.d.ts.map +1 -1
- package/dist/cmd/cloud/sandbox/snapshot/list.js +0 -3
- package/dist/cmd/cloud/sandbox/snapshot/list.js.map +1 -1
- package/dist/cmd/cloud/sandbox/upload.d.ts +3 -0
- package/dist/cmd/cloud/sandbox/upload.d.ts.map +1 -0
- package/dist/cmd/cloud/sandbox/upload.js +77 -0
- package/dist/cmd/cloud/sandbox/upload.js.map +1 -0
- package/dist/cmd/dev/index.d.ts.map +1 -1
- package/dist/cmd/dev/index.js +126 -23
- package/dist/cmd/dev/index.js.map +1 -1
- package/dist/cmd/dev/sync.d.ts.map +1 -1
- package/dist/cmd/dev/sync.js +8 -14
- package/dist/cmd/dev/sync.js.map +1 -1
- package/dist/cmd/git/account/add.d.ts +17 -0
- package/dist/cmd/git/account/add.d.ts.map +1 -0
- package/dist/cmd/git/account/add.js +244 -0
- package/dist/cmd/git/account/add.js.map +1 -0
- package/dist/cmd/git/account/index.d.ts +3 -0
- package/dist/cmd/git/account/index.d.ts.map +1 -0
- package/dist/cmd/git/account/index.js +11 -0
- package/dist/cmd/git/account/index.js.map +1 -0
- package/dist/cmd/git/account/list.d.ts +2 -0
- package/dist/cmd/git/account/list.d.ts.map +1 -0
- package/dist/cmd/git/account/list.js +111 -0
- package/dist/cmd/git/account/list.js.map +1 -0
- package/dist/cmd/git/account/remove.d.ts +2 -0
- package/dist/cmd/git/account/remove.d.ts.map +1 -0
- package/dist/cmd/git/account/remove.js +171 -0
- package/dist/cmd/git/account/remove.js.map +1 -0
- package/dist/cmd/git/index.d.ts +3 -0
- package/dist/cmd/git/index.d.ts.map +1 -0
- package/dist/cmd/git/index.js +19 -0
- package/dist/cmd/git/index.js.map +1 -0
- package/dist/cmd/git/link.d.ts +32 -0
- package/dist/cmd/git/link.d.ts.map +1 -0
- package/dist/cmd/git/link.js +357 -0
- package/dist/cmd/git/link.js.map +1 -0
- package/dist/cmd/git/list.d.ts +2 -0
- package/dist/cmd/git/list.d.ts.map +1 -0
- package/dist/cmd/git/list.js +137 -0
- package/dist/cmd/git/list.js.map +1 -0
- package/dist/cmd/git/status.d.ts +2 -0
- package/dist/cmd/git/status.d.ts.map +1 -0
- package/dist/cmd/git/status.js +119 -0
- package/dist/cmd/git/status.js.map +1 -0
- package/dist/cmd/git/unlink.d.ts +2 -0
- package/dist/cmd/git/unlink.d.ts.map +1 -0
- package/dist/cmd/git/unlink.js +98 -0
- package/dist/cmd/git/unlink.js.map +1 -0
- package/dist/cmd/index.d.ts.map +1 -1
- package/dist/cmd/index.js +2 -0
- package/dist/cmd/index.js.map +1 -1
- package/dist/cmd/integration/api.d.ts +61 -0
- package/dist/cmd/integration/api.d.ts.map +1 -0
- package/dist/cmd/integration/api.js +176 -0
- package/dist/cmd/integration/api.js.map +1 -0
- package/dist/cmd/integration/github/connect.d.ts +2 -0
- package/dist/cmd/integration/github/connect.d.ts.map +1 -0
- package/dist/cmd/integration/github/connect.js +197 -0
- package/dist/cmd/integration/github/connect.js.map +1 -0
- package/dist/cmd/integration/github/disconnect.d.ts +2 -0
- package/dist/cmd/integration/github/disconnect.d.ts.map +1 -0
- package/dist/cmd/integration/github/disconnect.js +121 -0
- package/dist/cmd/integration/github/disconnect.js.map +1 -0
- package/dist/cmd/integration/github/index.d.ts +2 -0
- package/dist/cmd/integration/github/index.d.ts.map +1 -0
- package/dist/cmd/integration/github/index.js +21 -0
- package/dist/cmd/integration/github/index.js.map +1 -0
- package/dist/cmd/integration/index.d.ts +2 -0
- package/dist/cmd/integration/index.d.ts.map +1 -0
- package/dist/cmd/integration/index.js +16 -0
- package/dist/cmd/integration/index.js.map +1 -0
- package/dist/cmd/project/auth/generate.d.ts +5 -0
- package/dist/cmd/project/auth/generate.d.ts.map +1 -0
- package/dist/cmd/project/auth/generate.js +102 -0
- package/dist/cmd/project/auth/generate.js.map +1 -0
- package/dist/cmd/project/auth/index.d.ts +2 -0
- package/dist/cmd/project/auth/index.d.ts.map +1 -0
- package/dist/cmd/project/auth/index.js +21 -0
- package/dist/cmd/project/auth/index.js.map +1 -0
- package/dist/cmd/project/auth/init.d.ts +2 -0
- package/dist/cmd/project/auth/init.d.ts.map +1 -0
- package/dist/cmd/project/auth/init.js +220 -0
- package/dist/cmd/project/auth/init.js.map +1 -0
- package/dist/cmd/project/auth/shared.d.ts +88 -0
- package/dist/cmd/project/auth/shared.d.ts.map +1 -0
- package/dist/cmd/project/auth/shared.js +435 -0
- package/dist/cmd/project/auth/shared.js.map +1 -0
- package/dist/cmd/project/index.d.ts.map +1 -1
- package/dist/cmd/project/index.js +9 -1
- package/dist/cmd/project/index.js.map +1 -1
- package/dist/cmd/project/template-flow.d.ts.map +1 -1
- package/dist/cmd/project/template-flow.js +106 -0
- package/dist/cmd/project/template-flow.js.map +1 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +24 -0
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts +2 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +5 -0
- package/dist/errors.js.map +1 -1
- package/dist/types.d.ts +3 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +5 -2
- package/dist/types.js.map +1 -1
- package/package.json +6 -5
- package/src/build-report.ts +457 -0
- package/src/cli.ts +20 -4
- package/src/cmd/build/entry-generator.ts +3 -1
- package/src/cmd/build/index.ts +51 -1
- package/src/cmd/build/typecheck.ts +19 -1
- package/src/cmd/build/vite/agent-discovery.ts +4 -4
- package/src/cmd/build/vite/index.ts +5 -2
- package/src/cmd/build/vite/metadata-generator.ts +5 -7
- package/src/cmd/build/vite/registry-generator.ts +136 -43
- package/src/cmd/build/vite/route-discovery.ts +20 -0
- package/src/cmd/build/vite/vite-builder.ts +13 -2
- package/src/cmd/build/vite-bundler.ts +17 -4
- package/src/cmd/cloud/deploy.ts +183 -12
- package/src/cmd/cloud/deployment/show.ts +0 -1
- package/src/cmd/cloud/sandbox/create.ts +22 -0
- package/src/cmd/cloud/sandbox/delete.ts +2 -6
- package/src/cmd/cloud/sandbox/download.ts +96 -0
- package/src/cmd/cloud/sandbox/env.ts +104 -0
- package/src/cmd/cloud/sandbox/get.ts +5 -0
- package/src/cmd/cloud/sandbox/index.ts +14 -0
- package/src/cmd/cloud/sandbox/ls.ts +126 -0
- package/src/cmd/cloud/sandbox/mkdir.ts +65 -0
- package/src/cmd/cloud/sandbox/rm.ts +51 -0
- package/src/cmd/cloud/sandbox/rmdir.ts +65 -0
- package/src/cmd/cloud/sandbox/snapshot/create.ts +0 -2
- package/src/cmd/cloud/sandbox/snapshot/get.ts +0 -2
- package/src/cmd/cloud/sandbox/snapshot/list.ts +0 -3
- package/src/cmd/cloud/sandbox/upload.ts +83 -0
- package/src/cmd/dev/index.ts +147 -33
- package/src/cmd/dev/sync.ts +26 -30
- package/src/cmd/git/account/add.ts +317 -0
- package/src/cmd/git/account/index.ts +12 -0
- package/src/cmd/git/account/list.ts +139 -0
- package/src/cmd/git/account/remove.ts +212 -0
- package/src/cmd/git/index.ts +20 -0
- package/src/cmd/git/link.ts +468 -0
- package/src/cmd/git/list.ts +161 -0
- package/src/cmd/git/status.ts +144 -0
- package/src/cmd/git/unlink.ts +117 -0
- package/src/cmd/index.ts +2 -0
- package/src/cmd/integration/api.ts +379 -0
- package/src/cmd/integration/github/connect.ts +242 -0
- package/src/cmd/integration/github/disconnect.ts +149 -0
- package/src/cmd/integration/github/index.ts +21 -0
- package/src/cmd/integration/index.ts +16 -0
- package/src/cmd/project/auth/generate.ts +116 -0
- package/src/cmd/project/auth/index.ts +21 -0
- package/src/cmd/project/auth/init.ts +263 -0
- package/src/cmd/project/auth/shared.ts +534 -0
- package/src/cmd/project/index.ts +9 -1
- package/src/cmd/project/template-flow.ts +125 -0
- package/src/config.ts +34 -0
- package/src/errors.ts +7 -0
- package/src/types.ts +5 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disconnect.d.ts","sourceRoot":"","sources":["../../../../src/cmd/integration/github/disconnect.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,oBAAoB,yCAwI/B,CAAC"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { createSubcommand } from '../../../types';
|
|
2
|
+
import * as tui from '../../../tui';
|
|
3
|
+
import { getCommand } from '../../../command-prefix';
|
|
4
|
+
import { ErrorCode } from '../../../errors';
|
|
5
|
+
import { listOrganizations } from '@agentuity/server';
|
|
6
|
+
import enquirer from 'enquirer';
|
|
7
|
+
import { getGithubIntegrationStatus, disconnectGithubIntegration, } from '../api';
|
|
8
|
+
export const disconnectSubcommand = createSubcommand({
|
|
9
|
+
name: 'disconnect',
|
|
10
|
+
description: 'Disconnect a GitHub account from your organization',
|
|
11
|
+
tags: ['mutating', 'destructive', 'slow'],
|
|
12
|
+
idempotent: false,
|
|
13
|
+
requires: { auth: true, apiClient: true },
|
|
14
|
+
examples: [
|
|
15
|
+
{
|
|
16
|
+
command: getCommand('integration github disconnect'),
|
|
17
|
+
description: 'Disconnect a GitHub account from your organization',
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
async handler(ctx) {
|
|
21
|
+
const { logger, apiClient } = ctx;
|
|
22
|
+
try {
|
|
23
|
+
// Fetch organizations
|
|
24
|
+
const orgs = await tui.spinner({
|
|
25
|
+
message: 'Fetching organizations...',
|
|
26
|
+
clearOnSuccess: true,
|
|
27
|
+
callback: () => listOrganizations(apiClient),
|
|
28
|
+
});
|
|
29
|
+
if (orgs.length === 0) {
|
|
30
|
+
tui.fatal('No organizations found for your account');
|
|
31
|
+
}
|
|
32
|
+
// Check GitHub status for each org
|
|
33
|
+
const orgStatuses = await tui.spinner({
|
|
34
|
+
message: 'Checking GitHub integration status...',
|
|
35
|
+
clearOnSuccess: true,
|
|
36
|
+
callback: async () => {
|
|
37
|
+
const statuses = await Promise.all(orgs.map(async (org) => {
|
|
38
|
+
const status = await getGithubIntegrationStatus(apiClient, org.id);
|
|
39
|
+
return {
|
|
40
|
+
...org,
|
|
41
|
+
connected: status.connected,
|
|
42
|
+
integrations: status.integrations,
|
|
43
|
+
};
|
|
44
|
+
}));
|
|
45
|
+
return statuses;
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
// Flatten all integrations across orgs
|
|
49
|
+
const allIntegrations = [];
|
|
50
|
+
for (const org of orgStatuses) {
|
|
51
|
+
for (const integration of org.integrations) {
|
|
52
|
+
allIntegrations.push({
|
|
53
|
+
orgId: org.id,
|
|
54
|
+
orgName: org.name,
|
|
55
|
+
integration,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (allIntegrations.length === 0) {
|
|
60
|
+
tui.newline();
|
|
61
|
+
tui.info('No GitHub accounts are connected.');
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Build choices showing GitHub account and org
|
|
65
|
+
const choices = allIntegrations.map((item) => ({
|
|
66
|
+
name: `${tui.bold(item.integration.githubAccountName)} ${tui.muted(`(${item.integration.githubAccountType})`)} → ${tui.bold(item.orgName)}`,
|
|
67
|
+
value: `${item.orgId}:${item.integration.id}`,
|
|
68
|
+
}));
|
|
69
|
+
// Show picker
|
|
70
|
+
const response = await enquirer.prompt({
|
|
71
|
+
type: 'select',
|
|
72
|
+
name: 'selection',
|
|
73
|
+
message: 'Select a GitHub account to disconnect',
|
|
74
|
+
choices,
|
|
75
|
+
result(name) {
|
|
76
|
+
// Return the value (IDs) instead of the display name
|
|
77
|
+
const choice = choices.find((c) => c.name === name);
|
|
78
|
+
return choice?.value ?? name;
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
const colonIdx = response.selection.indexOf(':');
|
|
82
|
+
if (colonIdx === -1) {
|
|
83
|
+
logger.fatal('Invalid selection format');
|
|
84
|
+
}
|
|
85
|
+
const orgId = response.selection.slice(0, colonIdx);
|
|
86
|
+
const integrationId = response.selection.slice(colonIdx + 1);
|
|
87
|
+
const selected = allIntegrations.find((i) => i.orgId === orgId && i.integration.id === integrationId);
|
|
88
|
+
const displayName = selected
|
|
89
|
+
? `${tui.bold(selected.integration.githubAccountName)} from ${tui.bold(selected.orgName)}`
|
|
90
|
+
: response.selection;
|
|
91
|
+
// Confirm
|
|
92
|
+
const confirmed = await tui.confirm(`Are you sure you want to disconnect ${displayName}?`);
|
|
93
|
+
if (!confirmed) {
|
|
94
|
+
tui.newline();
|
|
95
|
+
tui.info('Cancelled');
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
await tui.spinner({
|
|
99
|
+
message: 'Disconnecting GitHub...',
|
|
100
|
+
clearOnSuccess: true,
|
|
101
|
+
callback: () => disconnectGithubIntegration(apiClient, orgId, integrationId),
|
|
102
|
+
});
|
|
103
|
+
tui.newline();
|
|
104
|
+
tui.success(`Disconnected ${displayName}`);
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
// Handle user cancellation (Ctrl+C)
|
|
108
|
+
const isCancel = error === '' ||
|
|
109
|
+
(error instanceof Error &&
|
|
110
|
+
(error.message === '' || error.message === 'User cancelled'));
|
|
111
|
+
if (isCancel) {
|
|
112
|
+
tui.newline();
|
|
113
|
+
tui.info('Cancelled');
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
logger.trace(error);
|
|
117
|
+
logger.fatal('GitHub disconnect failed: %s', error, ErrorCode.INTEGRATION_FAILED);
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
//# sourceMappingURL=disconnect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disconnect.js","sourceRoot":"","sources":["../../../../src/cmd/integration/github/disconnect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cmd/integration/github/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,aAAa,sCAexB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createCommand } from '../../../types';
|
|
2
|
+
import { getCommand } from '../../../command-prefix';
|
|
3
|
+
import { connectSubcommand } from './connect';
|
|
4
|
+
import { disconnectSubcommand } from './disconnect';
|
|
5
|
+
export const githubCommand = createCommand({
|
|
6
|
+
name: 'github',
|
|
7
|
+
description: 'GitHub integration commands',
|
|
8
|
+
tags: ['requires-auth'],
|
|
9
|
+
examples: [
|
|
10
|
+
{
|
|
11
|
+
command: getCommand('integration github connect'),
|
|
12
|
+
description: 'Connect GitHub to your organization',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
command: getCommand('integration github disconnect'),
|
|
16
|
+
description: 'Disconnect GitHub from your organization',
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
subcommands: [connectSubcommand, disconnectSubcommand],
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cmd/integration/github/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;IAC1C,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,6BAA6B;IAC1C,IAAI,EAAE,CAAC,eAAe,CAAC;IACvB,QAAQ,EAAE;QACT;YACC,OAAO,EAAE,UAAU,CAAC,4BAA4B,CAAC;YACjD,WAAW,EAAE,qCAAqC;SAClD;QACD;YACC,OAAO,EAAE,UAAU,CAAC,+BAA+B,CAAC;YACpD,WAAW,EAAE,0CAA0C;SACvD;KACD;IACD,WAAW,EAAE,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;CACtD,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmd/integration/index.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,mCAWlB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createCommand } from '../../types';
|
|
2
|
+
import { getCommand } from '../../command-prefix';
|
|
3
|
+
import { githubCommand } from './github';
|
|
4
|
+
export const command = createCommand({
|
|
5
|
+
name: 'integration',
|
|
6
|
+
description: 'Manage integrations with external services',
|
|
7
|
+
tags: ['requires-auth'],
|
|
8
|
+
examples: [
|
|
9
|
+
{
|
|
10
|
+
command: getCommand('integration github connect'),
|
|
11
|
+
description: 'Connect GitHub to your organization',
|
|
12
|
+
},
|
|
13
|
+
],
|
|
14
|
+
subcommands: [githubCommand],
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cmd/integration/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,CAAC,MAAM,OAAO,GAAG,aAAa,CAAC;IACpC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,4CAA4C;IACzD,IAAI,EAAE,CAAC,eAAe,CAAC;IACvB,QAAQ,EAAE;QACT;YACC,OAAO,EAAE,UAAU,CAAC,4BAA4B,CAAC;YACjD,WAAW,EAAE,qCAAqC;SAClD;KACD;IACD,WAAW,EAAE,CAAC,aAAa,CAAC;CAC5B,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../../src/cmd/project/auth/generate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,eAAO,MAAM,kBAAkB,yCAuG7B,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate auth schema SQL using drizzle-kit export
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import * as fs from 'node:fs';
|
|
6
|
+
import * as path from 'node:path';
|
|
7
|
+
import { createSubcommand } from '../../../types';
|
|
8
|
+
import * as tui from '../../../tui';
|
|
9
|
+
import { getCommand } from '../../../command-prefix';
|
|
10
|
+
import { generateAuthSchemaSql, getGeneratedSqlDir } from './shared';
|
|
11
|
+
export const generateSubcommand = createSubcommand({
|
|
12
|
+
name: 'generate',
|
|
13
|
+
description: 'Generate SQL schema for Agentuity Auth tables',
|
|
14
|
+
tags: ['slow'],
|
|
15
|
+
requires: { project: true },
|
|
16
|
+
examples: [
|
|
17
|
+
{
|
|
18
|
+
command: getCommand('project auth generate'),
|
|
19
|
+
description: 'Generate SQL schema and save to agentuity-auth-schema.sql',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
command: getCommand('project auth generate --output ./migrations/auth.sql'),
|
|
23
|
+
description: 'Generate schema to a custom path',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
command: getCommand('project auth generate --output -'),
|
|
27
|
+
description: 'Output SQL to stdout',
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
schema: {
|
|
31
|
+
options: z.object({
|
|
32
|
+
output: z
|
|
33
|
+
.string()
|
|
34
|
+
.optional()
|
|
35
|
+
.describe('Output path for generated SQL (default: ./agentuity-auth-schema.sql). Use "-" for stdout.'),
|
|
36
|
+
}),
|
|
37
|
+
response: z.object({
|
|
38
|
+
success: z.boolean().describe('Whether generation succeeded'),
|
|
39
|
+
outputPath: z.string().optional().describe('Path where SQL was written'),
|
|
40
|
+
}),
|
|
41
|
+
},
|
|
42
|
+
async handler(ctx) {
|
|
43
|
+
const { logger, opts, projectDir, options } = ctx;
|
|
44
|
+
const explicitOutput = opts?.output;
|
|
45
|
+
const toStdout = explicitOutput === '-';
|
|
46
|
+
const isJson = options?.json === true;
|
|
47
|
+
if (!toStdout && !isJson) {
|
|
48
|
+
tui.newline();
|
|
49
|
+
tui.info(tui.bold('Agentuity Auth Schema Generation'));
|
|
50
|
+
tui.newline();
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
const sql = isJson
|
|
54
|
+
? await generateAuthSchemaSql(projectDir)
|
|
55
|
+
: await tui.spinner({
|
|
56
|
+
message: 'Generating auth schema SQL from Drizzle schema',
|
|
57
|
+
clearOnSuccess: true,
|
|
58
|
+
callback: () => generateAuthSchemaSql(projectDir),
|
|
59
|
+
});
|
|
60
|
+
if (toStdout) {
|
|
61
|
+
console.log(sql);
|
|
62
|
+
return { success: true };
|
|
63
|
+
}
|
|
64
|
+
let outputPath;
|
|
65
|
+
let displayPath;
|
|
66
|
+
if (explicitOutput) {
|
|
67
|
+
outputPath = path.resolve(projectDir, explicitOutput);
|
|
68
|
+
displayPath = explicitOutput;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
const sqlOutputDir = await getGeneratedSqlDir(projectDir);
|
|
72
|
+
const sqlFileName = 'agentuity-auth-schema.sql';
|
|
73
|
+
outputPath = path.join(sqlOutputDir, sqlFileName);
|
|
74
|
+
displayPath =
|
|
75
|
+
sqlOutputDir === projectDir ? sqlFileName : path.relative(projectDir, outputPath);
|
|
76
|
+
}
|
|
77
|
+
fs.writeFileSync(outputPath, sql);
|
|
78
|
+
if (!isJson) {
|
|
79
|
+
tui.success(`Auth schema SQL saved to ${tui.bold(displayPath)}`);
|
|
80
|
+
tui.newline();
|
|
81
|
+
tui.info('Next steps:');
|
|
82
|
+
console.log(' 1. Review the generated SQL file');
|
|
83
|
+
console.log(' 2. Run the SQL against your database');
|
|
84
|
+
console.log(` ${tui.muted('Or use: agentuity project auth init')}`);
|
|
85
|
+
tui.newline();
|
|
86
|
+
}
|
|
87
|
+
return { success: true, outputPath };
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
logger.error('Schema generation failed', { error });
|
|
91
|
+
if (!isJson) {
|
|
92
|
+
tui.error(`Schema generation failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
93
|
+
tui.newline();
|
|
94
|
+
tui.info('Make sure you have:');
|
|
95
|
+
console.log(' 1. @agentuity/auth installed as a dependency');
|
|
96
|
+
console.log(' 2. drizzle-kit available (installed with @agentuity/auth)');
|
|
97
|
+
}
|
|
98
|
+
return { success: false };
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../src/cmd/project/auth/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cmd/project/auth/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,WAAW,sCAetB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createCommand } from '../../../types';
|
|
2
|
+
import { initSubcommand } from './init';
|
|
3
|
+
import { generateSubcommand } from './generate';
|
|
4
|
+
import { getCommand } from '../../../command-prefix';
|
|
5
|
+
export const authCommand = createCommand({
|
|
6
|
+
name: 'auth',
|
|
7
|
+
description: 'Manage project authentication (Agentuity Auth)',
|
|
8
|
+
tags: ['slow', 'requires-auth'],
|
|
9
|
+
examples: [
|
|
10
|
+
{
|
|
11
|
+
command: getCommand('project auth init'),
|
|
12
|
+
description: 'Set up Agentuity Auth for an existing project',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
command: getCommand('project auth generate'),
|
|
16
|
+
description: 'Generate SQL schema for auth tables',
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
subcommands: [initSubcommand, generateSubcommand],
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cmd/project/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;IACxC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,gDAAgD;IAC7D,IAAI,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC;IAC/B,QAAQ,EAAE;QACT;YACC,OAAO,EAAE,UAAU,CAAC,mBAAmB,CAAC;YACxC,WAAW,EAAE,+CAA+C;SAC5D;QACD;YACC,OAAO,EAAE,UAAU,CAAC,uBAAuB,CAAC;YAC5C,WAAW,EAAE,qCAAqC;SAClD;KACD;IACD,WAAW,EAAE,CAAC,cAAc,EAAE,kBAAkB,CAAC;CACjD,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../src/cmd/project/auth/init.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,cAAc,yCAoPzB,CAAC"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { createSubcommand } from '../../../types';
|
|
3
|
+
import * as tui from '../../../tui';
|
|
4
|
+
import { getCommand } from '../../../command-prefix';
|
|
5
|
+
import { selectOrCreateDatabase, ensureAuthDependencies, runAuthMigrations, generateAuthFileContent, printIntegrationExamples, detectOrmSetup, generateAuthSchemaSql, getGeneratedSqlDir, } from './shared';
|
|
6
|
+
import enquirer from 'enquirer';
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
export const initSubcommand = createSubcommand({
|
|
10
|
+
name: 'init',
|
|
11
|
+
description: 'Set up Agentuity Auth for your project',
|
|
12
|
+
tags: ['mutating', 'slow', 'requires-auth'],
|
|
13
|
+
requires: { auth: true, org: true, region: true },
|
|
14
|
+
idempotent: false,
|
|
15
|
+
examples: [
|
|
16
|
+
{
|
|
17
|
+
command: getCommand('project auth init'),
|
|
18
|
+
description: 'Set up Agentuity Auth with database selection',
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
schema: {
|
|
22
|
+
options: z.object({
|
|
23
|
+
skipMigrations: z
|
|
24
|
+
.boolean()
|
|
25
|
+
.optional()
|
|
26
|
+
.describe('Skip running database migrations (run `agentuity project auth generate` later)'),
|
|
27
|
+
}),
|
|
28
|
+
response: z.object({
|
|
29
|
+
success: z.boolean().describe('Whether setup succeeded'),
|
|
30
|
+
database: z.string().optional().describe('Database name used'),
|
|
31
|
+
authFileCreated: z.boolean().describe('Whether auth.ts was created'),
|
|
32
|
+
migrationsRun: z.boolean().describe('Whether migrations were run'),
|
|
33
|
+
}),
|
|
34
|
+
},
|
|
35
|
+
async handler(ctx) {
|
|
36
|
+
const { logger, opts, auth, orgId, region } = ctx;
|
|
37
|
+
tui.newline();
|
|
38
|
+
tui.info(tui.bold('Agentuity Auth Setup'));
|
|
39
|
+
tui.newline();
|
|
40
|
+
tui.info('This will:');
|
|
41
|
+
console.log(' • Ensure you have a Postgres database configured');
|
|
42
|
+
console.log(' • Install @agentuity/auth');
|
|
43
|
+
console.log(' • Run database migrations to create auth tables');
|
|
44
|
+
console.log(' • Show you how to wire auth into your API and UI');
|
|
45
|
+
tui.newline();
|
|
46
|
+
const projectDir = process.cwd();
|
|
47
|
+
// Check for package.json
|
|
48
|
+
const packageJsonPath = path.join(projectDir, 'package.json');
|
|
49
|
+
if (!fs.existsSync(packageJsonPath)) {
|
|
50
|
+
tui.fatal('No package.json found. Run this command from your project root.');
|
|
51
|
+
}
|
|
52
|
+
// Step 1: Check for DATABASE_URL or select/create database
|
|
53
|
+
let databaseUrl = process.env.DATABASE_URL;
|
|
54
|
+
if (!databaseUrl) {
|
|
55
|
+
// Check .env file
|
|
56
|
+
const envPath = path.join(projectDir, '.env');
|
|
57
|
+
if (fs.existsSync(envPath)) {
|
|
58
|
+
const envContent = fs.readFileSync(envPath, 'utf-8');
|
|
59
|
+
const match = envContent.match(/^DATABASE_URL=(.+)$/m);
|
|
60
|
+
if (match) {
|
|
61
|
+
databaseUrl = match[1].trim().replace(/^["']|["']$/g, '');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Show database picker (with existing as first option if configured)
|
|
66
|
+
const dbInfo = await selectOrCreateDatabase({
|
|
67
|
+
logger,
|
|
68
|
+
auth,
|
|
69
|
+
orgId,
|
|
70
|
+
region,
|
|
71
|
+
existingUrl: databaseUrl,
|
|
72
|
+
});
|
|
73
|
+
const databaseName = dbInfo.name;
|
|
74
|
+
// Update .env with database URL
|
|
75
|
+
const envPath = path.join(projectDir, '.env');
|
|
76
|
+
let envContent = '';
|
|
77
|
+
if (fs.existsSync(envPath)) {
|
|
78
|
+
envContent = fs.readFileSync(envPath, 'utf-8');
|
|
79
|
+
if (!envContent.endsWith('\n') && envContent.length > 0) {
|
|
80
|
+
envContent += '\n';
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Check if DATABASE_URL already exists
|
|
84
|
+
const hasDatabaseUrl = envContent.match(/^DATABASE_URL=/m);
|
|
85
|
+
if (dbInfo.url !== databaseUrl || !hasDatabaseUrl) {
|
|
86
|
+
if (hasDatabaseUrl) {
|
|
87
|
+
// DATABASE_URL exists, use AUTH_DATABASE_URL instead
|
|
88
|
+
envContent += `AUTH_DATABASE_URL="${dbInfo.url}"\n`;
|
|
89
|
+
fs.writeFileSync(envPath, envContent);
|
|
90
|
+
tui.success('AUTH_DATABASE_URL added to .env');
|
|
91
|
+
tui.warning(`DATABASE_URL already exists. Update your ${tui.bold('src/auth.ts')} to use AUTH_DATABASE_URL.`);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
envContent += `DATABASE_URL="${dbInfo.url}"\n`;
|
|
95
|
+
fs.writeFileSync(envPath, envContent);
|
|
96
|
+
tui.success('DATABASE_URL added to .env');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
tui.success(`Using database: ${databaseName}`);
|
|
101
|
+
}
|
|
102
|
+
// Add AGENTUITY_AUTH_SECRET if not present
|
|
103
|
+
// Re-read envContent to get latest state
|
|
104
|
+
envContent = fs.existsSync(envPath) ? fs.readFileSync(envPath, 'utf-8') : '';
|
|
105
|
+
if (!envContent.endsWith('\n') && envContent.length > 0) {
|
|
106
|
+
envContent += '\n';
|
|
107
|
+
}
|
|
108
|
+
const hasAuthSecret = envContent.match(/^AGENTUITY_AUTH_SECRET=/m) || envContent.match(/^BETTER_AUTH_SECRET=/m);
|
|
109
|
+
if (!hasAuthSecret) {
|
|
110
|
+
const devSecret = `dev-${crypto.randomUUID()}-CHANGE-ME`;
|
|
111
|
+
envContent += `AGENTUITY_AUTH_SECRET="${devSecret}"\n`;
|
|
112
|
+
fs.writeFileSync(envPath, envContent);
|
|
113
|
+
tui.success('AGENTUITY_AUTH_SECRET added to .env (development default)');
|
|
114
|
+
tui.warning(`Replace ${tui.bold('AGENTUITY_AUTH_SECRET')} with a secure value before deploying.`);
|
|
115
|
+
tui.info(`Generate one with: ${tui.muted('openssl rand -hex 32')}`);
|
|
116
|
+
}
|
|
117
|
+
// Step 2: Install dependencies
|
|
118
|
+
tui.newline();
|
|
119
|
+
await ensureAuthDependencies({ projectDir, logger });
|
|
120
|
+
// Step 3: Generate auth.ts if it doesn't exist
|
|
121
|
+
const authFilePath = path.join(projectDir, 'src', 'auth.ts');
|
|
122
|
+
let authFileCreated = false;
|
|
123
|
+
if (fs.existsSync(authFilePath)) {
|
|
124
|
+
tui.info('src/auth.ts already exists, skipping generation');
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
const { createFile } = await enquirer.prompt({
|
|
128
|
+
type: 'confirm',
|
|
129
|
+
name: 'createFile',
|
|
130
|
+
message: 'Create src/auth.ts with default configuration?',
|
|
131
|
+
initial: true,
|
|
132
|
+
});
|
|
133
|
+
if (createFile) {
|
|
134
|
+
// Ensure src directory exists
|
|
135
|
+
const srcDir = path.join(projectDir, 'src');
|
|
136
|
+
if (!fs.existsSync(srcDir)) {
|
|
137
|
+
fs.mkdirSync(srcDir, { recursive: true });
|
|
138
|
+
}
|
|
139
|
+
fs.writeFileSync(authFilePath, generateAuthFileContent());
|
|
140
|
+
tui.success('Created src/auth.ts');
|
|
141
|
+
authFileCreated = true;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Step 4: Run migrations (ORM-aware)
|
|
145
|
+
let migrationsRun = false;
|
|
146
|
+
if (opts.skipMigrations) {
|
|
147
|
+
tui.info('Skipping migrations (run `agentuity project auth generate` later)');
|
|
148
|
+
}
|
|
149
|
+
else if (databaseName) {
|
|
150
|
+
tui.newline();
|
|
151
|
+
const ormSetup = await detectOrmSetup(projectDir);
|
|
152
|
+
if (ormSetup === 'drizzle') {
|
|
153
|
+
tui.info(tui.bold('Drizzle detected in your project.'));
|
|
154
|
+
tui.newline();
|
|
155
|
+
console.log(' Since you manage your own Drizzle schema, add authSchema to your schema:');
|
|
156
|
+
tui.newline();
|
|
157
|
+
console.log(tui.muted(" import * as authSchema from '@agentuity/auth/schema';"));
|
|
158
|
+
console.log(tui.muted(' export const schema = { ...authSchema, ...yourSchema };'));
|
|
159
|
+
tui.newline();
|
|
160
|
+
console.log(' Then run migrations:');
|
|
161
|
+
console.log(tui.muted(' bunx drizzle-kit push'));
|
|
162
|
+
tui.newline();
|
|
163
|
+
}
|
|
164
|
+
else if (ormSetup === 'prisma') {
|
|
165
|
+
tui.info(tui.bold('Prisma detected in your project.'));
|
|
166
|
+
tui.newline();
|
|
167
|
+
const sql = await tui.spinner({
|
|
168
|
+
message: 'Preparing auth database schema...',
|
|
169
|
+
clearOnSuccess: true,
|
|
170
|
+
callback: () => generateAuthSchemaSql(projectDir),
|
|
171
|
+
});
|
|
172
|
+
const sqlOutputDir = await getGeneratedSqlDir(projectDir);
|
|
173
|
+
const sqlFileName = 'agentuity-auth-schema.sql';
|
|
174
|
+
const sqlFilePath = path.join(sqlOutputDir, sqlFileName);
|
|
175
|
+
const relativePath = sqlOutputDir === projectDir ? sqlFileName : path.relative(projectDir, sqlFilePath);
|
|
176
|
+
fs.writeFileSync(sqlFilePath, sql);
|
|
177
|
+
tui.success(`Auth schema SQL saved to ${tui.bold(relativePath)}`);
|
|
178
|
+
tui.newline();
|
|
179
|
+
console.log(' Run this SQL against your database to create auth tables.');
|
|
180
|
+
tui.newline();
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
const { runMigrations } = await enquirer.prompt({
|
|
184
|
+
type: 'confirm',
|
|
185
|
+
name: 'runMigrations',
|
|
186
|
+
message: 'Run database migrations now? (idempotent, safe to re-run)',
|
|
187
|
+
initial: true,
|
|
188
|
+
});
|
|
189
|
+
if (runMigrations) {
|
|
190
|
+
const sql = await tui.spinner({
|
|
191
|
+
message: 'Preparing auth database schema...',
|
|
192
|
+
clearOnSuccess: true,
|
|
193
|
+
callback: () => generateAuthSchemaSql(projectDir),
|
|
194
|
+
});
|
|
195
|
+
await runAuthMigrations({
|
|
196
|
+
logger,
|
|
197
|
+
auth,
|
|
198
|
+
orgId,
|
|
199
|
+
region,
|
|
200
|
+
databaseName,
|
|
201
|
+
sql,
|
|
202
|
+
});
|
|
203
|
+
migrationsRun = true;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
tui.warning('Could not determine database name. Run `agentuity project auth generate` manually.');
|
|
209
|
+
}
|
|
210
|
+
// Step 5: Print integration examples
|
|
211
|
+
printIntegrationExamples();
|
|
212
|
+
return {
|
|
213
|
+
success: true,
|
|
214
|
+
database: databaseName,
|
|
215
|
+
authFileCreated,
|
|
216
|
+
migrationsRun,
|
|
217
|
+
};
|
|
218
|
+
},
|
|
219
|
+
});
|
|
220
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../src/cmd/project/auth/init.ts"],"names":[],"mappings":"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"}
|