create-hq 10.7.0 → 10.8.0
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/commands/invite.md +215 -0
- package/commands/promote.md +161 -0
- package/commands/team-sync.md +431 -0
- package/dist/__tests__/scaffold.test.js +14 -1
- package/dist/__tests__/scaffold.test.js.map +1 -1
- package/dist/admin-onboarding.d.ts.map +1 -1
- package/dist/admin-onboarding.js +33 -7
- package/dist/admin-onboarding.js.map +1 -1
- package/dist/art.d.ts +17 -0
- package/dist/art.d.ts.map +1 -0
- package/dist/art.js +171 -0
- package/dist/art.js.map +1 -0
- package/dist/auth.d.ts +20 -10
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +109 -44
- package/dist/auth.js.map +1 -1
- package/dist/cloud.d.ts +26 -0
- package/dist/cloud.d.ts.map +1 -0
- package/dist/cloud.js +126 -0
- package/dist/cloud.js.map +1 -0
- package/dist/company-template.js +52 -52
- package/dist/index.js +0 -0
- package/dist/join-flow.d.ts.map +1 -1
- package/dist/join-flow.js +12 -1
- package/dist/join-flow.js.map +1 -1
- package/dist/team-setup.d.ts +25 -0
- package/dist/team-setup.d.ts.map +1 -1
- package/dist/team-setup.js +114 -1
- package/dist/team-setup.js.map +1 -1
- package/dist/teams-flow.js +1 -1
- package/dist/teams-flow.js.map +1 -1
- package/dist/tui.d.ts +8 -0
- package/dist/tui.d.ts.map +1 -0
- package/dist/tui.js +86 -0
- package/dist/tui.js.map +1 -0
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +34 -24
- package/dist/ui.js.map +1 -1
- package/package.json +50 -49
package/dist/art.js
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
const VERSION = "7.0.0";
|
|
3
|
+
/**
|
|
4
|
+
* Raw banner lines without ANSI codes — testable.
|
|
5
|
+
*/
|
|
6
|
+
export function bannerLines() {
|
|
7
|
+
return [
|
|
8
|
+
"",
|
|
9
|
+
" ┌──────────┐",
|
|
10
|
+
" │ ╔══════╗│",
|
|
11
|
+
" │ ║INDIGO║│",
|
|
12
|
+
" │ ║ HQ ║│",
|
|
13
|
+
" │ ╚══════╝│",
|
|
14
|
+
" ┌────┴──────────┴────┐",
|
|
15
|
+
" │ ▓▓ ░░ ▓▓ ░░ ▓▓ │",
|
|
16
|
+
" │ ░░ ▓▓ ░░ ▓▓ ░░ │",
|
|
17
|
+
" │ ▓▓ ░░ ▓▓ ░░ ▓▓ │",
|
|
18
|
+
" ┌────┴────────────────────┴────┐",
|
|
19
|
+
" │ ▓▓ ░░ ▓▓ ░░ ▓▓ ░░ ▓▓ │",
|
|
20
|
+
" │ ░░ ▓▓ ░░ ▓▓ ░░ ▓▓ ░░ │",
|
|
21
|
+
" │ ▓▓ ░░ ▓▓ ░░ ▓▓ ░░ ▓▓ │",
|
|
22
|
+
" ┌────┴─────────────────────────────┴────┐",
|
|
23
|
+
" │ ▓▓ ░░ ▓▓ ░░ ▓▓ ░░ ▓▓ ░░ ▓▓ │",
|
|
24
|
+
" │ ░░ ▓▓ ░░ ▓▓ ░░ ▓▓ ░░ ▓▓ ░░ │",
|
|
25
|
+
" │ ▓▓ ░░ ▓▓ ░░ ▓▓ ░░ ▓▓ ░░ ▓▓ │",
|
|
26
|
+
" │ ░░ ▓▓ ░░ ▓▓ ░░ ▓▓ ░░ ▓▓ ░░ │",
|
|
27
|
+
" ┌────┴──────────────────────────────────────┴────┐",
|
|
28
|
+
" │ ▓▓ ░░ ▓▓ ░░ ▓▓ ░░ ▓▓ ░░ ▓▓ ░░ ▓▓ │",
|
|
29
|
+
" │ ░░ ▓▓ ░░ ▓▓ ░░ ▓▓ ░░ ▓▓ ░░ ▓▓ ░░ │",
|
|
30
|
+
" │ ▓▓ ░░ ▓▓ ░░ ▓▓ ░░ ▓▓ ░░ ▓▓ ░░ ▓▓ │",
|
|
31
|
+
" │ ┌──────────────┐ │",
|
|
32
|
+
" │ │ ════════ │ │",
|
|
33
|
+
" └───────┴──────────────┴───────┘",
|
|
34
|
+
"",
|
|
35
|
+
" ██╗███╗ ██╗██████╗ ██╗ ██████╗ ██████╗ ██╗ ██╗ ██████╗ ",
|
|
36
|
+
" ██║████╗ ██║██╔══██╗██║██╔════╝ ██╔═══██╗ ██║ ██║██╔═══██╗",
|
|
37
|
+
" ██║██╔██╗ ██║██║ ██║██║██║ ███╗██║ ██║ ███████║██║ ██║",
|
|
38
|
+
" ██║██║╚██╗██║██║ ██║██║██║ ██║██║ ██║ ██╔══██║██║▄▄ ██║",
|
|
39
|
+
" ██║██║ ╚████║██████╔╝██║╚██████╔╝╚██████╔╝ ██║ ██║╚██████╔╝",
|
|
40
|
+
" ╚═╝╚═╝ ╚═══╝╚═════╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚══▀▀═╝ ",
|
|
41
|
+
"",
|
|
42
|
+
` Personal OS for AI Workers v${VERSION}`,
|
|
43
|
+
"",
|
|
44
|
+
];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Raw compact banner lines without ANSI codes — testable.
|
|
48
|
+
*/
|
|
49
|
+
export function compactBannerLines() {
|
|
50
|
+
return [
|
|
51
|
+
"",
|
|
52
|
+
" ┌────────────┐",
|
|
53
|
+
" │ ╔════════╗ │",
|
|
54
|
+
" │ ║INDIGOHQ║ │",
|
|
55
|
+
" │ ╚════════╝ │",
|
|
56
|
+
" ┌────┴────────────┴────┐",
|
|
57
|
+
" │ ▓▓ ░░ ▓▓ ░░ ▓▓ │",
|
|
58
|
+
" │ ░░ ▓▓ ░░ ▓▓ ░░ │",
|
|
59
|
+
" │ ▓▓ ░░ ▓▓ ░░ ▓▓ │",
|
|
60
|
+
" │ ░░ ▓▓ ░░ ▓▓ ░░ │",
|
|
61
|
+
" │ ▓▓ ░░ ▓▓ ░░ ▓▓ │",
|
|
62
|
+
" │ ┌──────┐ │",
|
|
63
|
+
" │ │ ════ │ │",
|
|
64
|
+
" └────┴──────┴────────┘",
|
|
65
|
+
"",
|
|
66
|
+
" ██╗██╗ ██╗ ██████╗ ",
|
|
67
|
+
" ██║██║ ██║██╔═══██╗",
|
|
68
|
+
" ██║███████║██║ ██║",
|
|
69
|
+
" ██║██╔══██║██║▄▄ ██║",
|
|
70
|
+
" ██║██║ ██║╚██████╔╝",
|
|
71
|
+
" ╚═╝╚═╝ ╚═╝ ╚══▀▀═╝",
|
|
72
|
+
"",
|
|
73
|
+
" Personal OS for AI Workers",
|
|
74
|
+
` v${VERSION}`,
|
|
75
|
+
"",
|
|
76
|
+
];
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Full-width ASCII art banner (80 cols) — retro office building + INDIGO HQ
|
|
80
|
+
*/
|
|
81
|
+
export function banner() {
|
|
82
|
+
const b = chalk.cyan; // building structure
|
|
83
|
+
const bd = chalk.cyanBright; // building highlights
|
|
84
|
+
const w = chalk.blueBright; // windows (lit)
|
|
85
|
+
const wd = chalk.blue; // windows (dark)
|
|
86
|
+
const t = chalk.bold.whiteBright; // title text
|
|
87
|
+
const dim = chalk.dim;
|
|
88
|
+
const lines = [
|
|
89
|
+
"",
|
|
90
|
+
b(" ┌──────────┐"),
|
|
91
|
+
b(" │") + bd(" ╔══════╗") + b("│"),
|
|
92
|
+
b(" │") + bd(" ║INDIGO║") + b("│"),
|
|
93
|
+
b(" │") + bd(" ║ HQ ║") + b("│"),
|
|
94
|
+
b(" │") + bd(" ╚══════╝") + b("│"),
|
|
95
|
+
b(" ┌────┴──────────┴────┐"),
|
|
96
|
+
b(" │") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + b("│"),
|
|
97
|
+
b(" │") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + b("│"),
|
|
98
|
+
b(" │") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + b("│"),
|
|
99
|
+
b(" ┌────┴────────────────────┴────┐"),
|
|
100
|
+
b(" │") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + b("│"),
|
|
101
|
+
b(" │") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + b("│"),
|
|
102
|
+
b(" │") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + b("│"),
|
|
103
|
+
b(" ┌────┴─────────────────────────────┴────┐"),
|
|
104
|
+
b(" │") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + b("│"),
|
|
105
|
+
b(" │") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + b("│"),
|
|
106
|
+
b(" │") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + b("│"),
|
|
107
|
+
b(" │") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + b("│"),
|
|
108
|
+
b(" ┌────┴──────────────────────────────────────┴────┐"),
|
|
109
|
+
b(" │") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + b("│"),
|
|
110
|
+
b(" │") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + b("│"),
|
|
111
|
+
b(" │") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + b("│"),
|
|
112
|
+
b(" │") + wd(" ") + b("┌──────────────┐") + wd(" ") + b("│"),
|
|
113
|
+
b(" │") + wd(" ") + b("│") + bd(" ════════ ") + b("│") + wd(" ") + b("│"),
|
|
114
|
+
b(" └───────┴──────────────┴───────┘"),
|
|
115
|
+
"",
|
|
116
|
+
t(" ██╗███╗ ██╗██████╗ ██╗ ██████╗ ██████╗ ██╗ ██╗ ██████╗ "),
|
|
117
|
+
t(" ██║████╗ ██║██╔══██╗██║██╔════╝ ██╔═══██╗ ██║ ██║██╔═══██╗"),
|
|
118
|
+
t(" ██║██╔██╗ ██║██║ ██║██║██║ ███╗██║ ██║ ███████║██║ ██║"),
|
|
119
|
+
t(" ██║██║╚██╗██║██║ ██║██║██║ ██║██║ ██║ ██╔══██║██║▄▄ ██║"),
|
|
120
|
+
t(" ██║██║ ╚████║██████╔╝██║╚██████╔╝╚██████╔╝ ██║ ██║╚██████╔╝"),
|
|
121
|
+
t(" ╚═╝╚═╝ ╚═══╝╚═════╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚══▀▀═╝ "),
|
|
122
|
+
"",
|
|
123
|
+
dim(" Personal OS for AI Workers") + dim(` v${VERSION}`),
|
|
124
|
+
"",
|
|
125
|
+
];
|
|
126
|
+
for (const line of lines) {
|
|
127
|
+
console.log(line);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Compact banner for narrow terminals (< 80 cols)
|
|
132
|
+
*/
|
|
133
|
+
export function compactBanner() {
|
|
134
|
+
const b = chalk.cyan;
|
|
135
|
+
const bd = chalk.cyanBright;
|
|
136
|
+
const w = chalk.blueBright;
|
|
137
|
+
const wd = chalk.blue;
|
|
138
|
+
const t = chalk.bold.whiteBright;
|
|
139
|
+
const dim = chalk.dim;
|
|
140
|
+
const lines = [
|
|
141
|
+
"",
|
|
142
|
+
b(" ┌────────────┐"),
|
|
143
|
+
b(" │") + bd(" ╔════════╗ ") + b("│"),
|
|
144
|
+
b(" │") + bd(" ║INDIGOHQ║ ") + b("│"),
|
|
145
|
+
b(" │") + bd(" ╚════════╝ ") + b("│"),
|
|
146
|
+
b(" ┌────┴────────────┴────┐"),
|
|
147
|
+
b(" │") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + b("│"),
|
|
148
|
+
b(" │") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + b("│"),
|
|
149
|
+
b(" │") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + b("│"),
|
|
150
|
+
b(" │") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + b("│"),
|
|
151
|
+
b(" │") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + wd(" ░░ ") + w(" ▓▓ ") + b("│"),
|
|
152
|
+
b(" │") + wd(" ") + b("┌──────┐") + wd(" ") + b("│"),
|
|
153
|
+
b(" │") + wd(" ") + b("│") + bd(" ════ ") + b("│") + wd(" ") + b("│"),
|
|
154
|
+
b(" └────┴──────┴────────┘"),
|
|
155
|
+
"",
|
|
156
|
+
t(" ██╗██╗ ██╗ ██████╗ "),
|
|
157
|
+
t(" ██║██║ ██║██╔═══██╗"),
|
|
158
|
+
t(" ██║███████║██║ ██║"),
|
|
159
|
+
t(" ██║██╔══██║██║▄▄ ██║"),
|
|
160
|
+
t(" ██║██║ ██║╚██████╔╝"),
|
|
161
|
+
t(" ╚═╝╚═╝ ╚═╝ ╚══▀▀═╝"),
|
|
162
|
+
"",
|
|
163
|
+
dim(" Personal OS for AI Workers"),
|
|
164
|
+
dim(` v${VERSION}`),
|
|
165
|
+
"",
|
|
166
|
+
];
|
|
167
|
+
for (const line of lines) {
|
|
168
|
+
console.log(line);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=art.js.map
|
package/dist/art.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"art.js","sourceRoot":"","sources":["../src/art.ts"],"names":[],"mappings":"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"}
|
package/dist/auth.d.ts
CHANGED
|
@@ -7,20 +7,20 @@
|
|
|
7
7
|
* 1. POST github.com/login/device/code with our App's client_id
|
|
8
8
|
* 2. Display user_code, open verification_uri in browser
|
|
9
9
|
* 3. Poll github.com/login/oauth/access_token at the GitHub-specified interval
|
|
10
|
-
* 4. On success: GET api.github.com/user →
|
|
10
|
+
* 4. On success: GET api.github.com/user → configure gh CLI with the token
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* After authentication, the token is handed to `gh auth login --with-token`
|
|
13
|
+
* so that subsequent sessions can use `gh` for all GitHub operations.
|
|
14
|
+
* No credentials are persisted to disk by create-hq itself.
|
|
15
15
|
*
|
|
16
16
|
* Token values are NEVER written to stdout or logs.
|
|
17
17
|
*/
|
|
18
18
|
/** hq-team-sync GitHub App client ID (public — safe to commit). */
|
|
19
19
|
export declare const HQ_GITHUB_APP_CLIENT_ID = "Iv23liSdkCBQYhrNcRmI";
|
|
20
20
|
export declare const HQ_GITHUB_APP_SLUG = "hq-team-sync";
|
|
21
|
-
/**
|
|
21
|
+
/** Authenticated GitHub user info. The access_token is held in-memory only. */
|
|
22
22
|
export interface GitHubAuth {
|
|
23
|
-
/** ghu_ user-to-server token from GitHub App device flow. */
|
|
23
|
+
/** ghu_ user-to-server token from GitHub App device flow (in-memory only). */
|
|
24
24
|
access_token: string;
|
|
25
25
|
/** GitHub login (username). */
|
|
26
26
|
login: string;
|
|
@@ -38,15 +38,21 @@ export interface GitHubAuth {
|
|
|
38
38
|
* callers have migrated. New code should use GitHubAuth.
|
|
39
39
|
*/
|
|
40
40
|
export type AuthToken = GitHubAuth;
|
|
41
|
-
/**
|
|
41
|
+
/**
|
|
42
|
+
* Save the GitHub auth to gh CLI. The token is handed to `gh auth login`
|
|
43
|
+
* so it's stored in the OS keychain, not on disk as a plain file.
|
|
44
|
+
*/
|
|
42
45
|
export declare function saveGitHubAuth(auth: GitHubAuth): void;
|
|
43
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* Load GitHub auth from `gh` CLI. Returns null if gh is not installed
|
|
48
|
+
* or not authenticated. Fetches user profile from GitHub API via gh.
|
|
49
|
+
*/
|
|
44
50
|
export declare function loadGitHubAuth(): GitHubAuth | null;
|
|
45
|
-
/** Remove stored credentials. */
|
|
51
|
+
/** Remove stored credentials by logging out of gh. */
|
|
46
52
|
export declare function clearGitHubAuth(): void;
|
|
47
53
|
/**
|
|
48
54
|
* Quick liveness probe — does the stored token still work?
|
|
49
|
-
*
|
|
55
|
+
* Uses `gh auth status` which validates the token against GitHub.
|
|
50
56
|
*/
|
|
51
57
|
export declare function isGitHubAuthValid(auth: GitHubAuth): Promise<boolean>;
|
|
52
58
|
/** Open a URL in the user's default browser. Best-effort, never throws. */
|
|
@@ -54,6 +60,10 @@ export declare function openBrowser(url: string): void;
|
|
|
54
60
|
/**
|
|
55
61
|
* Run the GitHub App device authorization flow.
|
|
56
62
|
*
|
|
63
|
+
* On success, the token is:
|
|
64
|
+
* 1. Returned in-memory as part of GitHubAuth (for the current session)
|
|
65
|
+
* 2. Configured in `gh` CLI for future sessions (via gh auth login --with-token)
|
|
66
|
+
*
|
|
57
67
|
* Throws on:
|
|
58
68
|
* - Network errors talking to github.com
|
|
59
69
|
* - User-denied authorization (access_denied)
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAUH,mEAAmE;AACnE,eAAO,MAAM,uBAAuB,yBAAyB,CAAC;AAC9D,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAUH,mEAAmE;AACnE,eAAO,MAAM,uBAAuB,yBAAyB,CAAC;AAC9D,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAUjD,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IACzB,8EAA8E;IAC9E,YAAY,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,gEAAgE;IAChE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,yDAAyD;IACzD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC;AA8EnC;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAErD;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,UAAU,GAAG,IAAI,CA+BlD;AAED,sDAAsD;AACtD,wBAAgB,eAAe,IAAI,IAAI,CAUtC;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAoB1E;AAID,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAkB7C;AAQD;;;;;;;;;;;;GAYG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,UAAU,CAAC,CA0HjE;AAID;;;GAGG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,UAAU,EAChB,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,CAAC,CAAC,CAwBZ"}
|
package/dist/auth.js
CHANGED
|
@@ -7,18 +7,17 @@
|
|
|
7
7
|
* 1. POST github.com/login/device/code with our App's client_id
|
|
8
8
|
* 2. Display user_code, open verification_uri in browser
|
|
9
9
|
* 3. Poll github.com/login/oauth/access_token at the GitHub-specified interval
|
|
10
|
-
* 4. On success: GET api.github.com/user →
|
|
10
|
+
* 4. On success: GET api.github.com/user → configure gh CLI with the token
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* After authentication, the token is handed to `gh auth login --with-token`
|
|
13
|
+
* so that subsequent sessions can use `gh` for all GitHub operations.
|
|
14
|
+
* No credentials are persisted to disk by create-hq itself.
|
|
15
15
|
*
|
|
16
16
|
* Token values are NEVER written to stdout or logs.
|
|
17
17
|
*/
|
|
18
|
-
import * as fs from "fs";
|
|
19
18
|
import * as path from "path";
|
|
20
19
|
import * as os from "os";
|
|
21
|
-
import { exec } from "child_process";
|
|
20
|
+
import { exec, execSync } from "child_process";
|
|
22
21
|
import chalk from "chalk";
|
|
23
22
|
// ─── Constants ──────────────────────────────────────────────────────────────
|
|
24
23
|
/** hq-team-sync GitHub App client ID (public — safe to commit). */
|
|
@@ -28,67 +27,128 @@ const GITHUB_DEVICE_CODE_URL = "https://github.com/login/device/code";
|
|
|
28
27
|
const GITHUB_TOKEN_URL = "https://github.com/login/oauth/access_token";
|
|
29
28
|
const GITHUB_API_USER_URL = "https://api.github.com/user";
|
|
30
29
|
const HQ_DIR = path.join(os.homedir(), ".hq");
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
function
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
// ─── gh CLI helpers ────────────────────────────────────────────────────────
|
|
31
|
+
/** Check if `gh` CLI is installed. */
|
|
32
|
+
function isGhInstalled() {
|
|
33
|
+
try {
|
|
34
|
+
execSync("gh --version", { stdio: "ignore" });
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** Check if `gh` is authenticated with any GitHub host. */
|
|
42
|
+
function isGhAuthenticated() {
|
|
43
|
+
try {
|
|
44
|
+
execSync("gh auth status", { stdio: "ignore" });
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Configure `gh` CLI with a token and set up git credential helper.
|
|
53
|
+
* This makes the token available for all future `gh` and `git` operations.
|
|
54
|
+
*/
|
|
55
|
+
function configureGhAuth(token) {
|
|
56
|
+
if (!isGhInstalled()) {
|
|
57
|
+
console.error(chalk.dim(" (gh CLI not found — install it from https://cli.github.com for team commands)"));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
// Pipe token to gh auth login (stdin, non-interactive)
|
|
62
|
+
execSync("gh auth login --with-token", {
|
|
63
|
+
input: token,
|
|
64
|
+
stdio: ["pipe", "ignore", "ignore"],
|
|
65
|
+
});
|
|
66
|
+
// Configure git to use gh for HTTPS auth
|
|
67
|
+
execSync("gh auth setup-git", { stdio: "ignore" });
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
console.error(chalk.dim(" (could not configure gh CLI — you can run `gh auth login` manually)"));
|
|
36
71
|
}
|
|
37
72
|
}
|
|
38
|
-
/**
|
|
73
|
+
/**
|
|
74
|
+
* Save the GitHub auth to gh CLI. The token is handed to `gh auth login`
|
|
75
|
+
* so it's stored in the OS keychain, not on disk as a plain file.
|
|
76
|
+
*/
|
|
39
77
|
export function saveGitHubAuth(auth) {
|
|
40
|
-
|
|
41
|
-
fs.writeFileSync(CREDENTIALS_FILE, JSON.stringify(auth, null, 2), {
|
|
42
|
-
mode: 0o600,
|
|
43
|
-
});
|
|
78
|
+
configureGhAuth(auth.access_token);
|
|
44
79
|
}
|
|
45
|
-
/**
|
|
80
|
+
/**
|
|
81
|
+
* Load GitHub auth from `gh` CLI. Returns null if gh is not installed
|
|
82
|
+
* or not authenticated. Fetches user profile from GitHub API via gh.
|
|
83
|
+
*/
|
|
46
84
|
export function loadGitHubAuth() {
|
|
85
|
+
if (!isGhInstalled() || !isGhAuthenticated())
|
|
86
|
+
return null;
|
|
47
87
|
try {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
88
|
+
// Get the token from gh
|
|
89
|
+
const token = execSync("gh auth token", {
|
|
90
|
+
encoding: "utf-8",
|
|
91
|
+
stdio: ["pipe", "pipe", "ignore"],
|
|
92
|
+
}).trim();
|
|
93
|
+
if (!token)
|
|
54
94
|
return null;
|
|
55
|
-
|
|
56
|
-
|
|
95
|
+
// Get user profile via gh api
|
|
96
|
+
const userJson = execSync('gh api user --jq \'{"login":.login,"id":.id,"name":.name,"email":.email}\'', {
|
|
97
|
+
encoding: "utf-8",
|
|
98
|
+
stdio: ["pipe", "pipe", "ignore"],
|
|
99
|
+
}).trim();
|
|
100
|
+
const user = JSON.parse(userJson);
|
|
101
|
+
return {
|
|
102
|
+
access_token: token,
|
|
103
|
+
login: user.login,
|
|
104
|
+
id: user.id,
|
|
105
|
+
name: user.name,
|
|
106
|
+
email: user.email,
|
|
107
|
+
issued_at: new Date().toISOString(),
|
|
108
|
+
};
|
|
57
109
|
}
|
|
58
110
|
catch {
|
|
59
111
|
return null;
|
|
60
112
|
}
|
|
61
113
|
}
|
|
62
|
-
/** Remove stored credentials. */
|
|
114
|
+
/** Remove stored credentials by logging out of gh. */
|
|
63
115
|
export function clearGitHubAuth() {
|
|
116
|
+
if (!isGhInstalled())
|
|
117
|
+
return;
|
|
64
118
|
try {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
119
|
+
execSync("gh auth logout --hostname github.com", {
|
|
120
|
+
input: "Y\n",
|
|
121
|
+
stdio: ["pipe", "ignore", "ignore"],
|
|
122
|
+
});
|
|
68
123
|
}
|
|
69
124
|
catch {
|
|
70
|
-
// ignore
|
|
125
|
+
// ignore — may already be logged out
|
|
71
126
|
}
|
|
72
127
|
}
|
|
73
128
|
/**
|
|
74
129
|
* Quick liveness probe — does the stored token still work?
|
|
75
|
-
*
|
|
130
|
+
* Uses `gh auth status` which validates the token against GitHub.
|
|
76
131
|
*/
|
|
77
132
|
export async function isGitHubAuthValid(auth) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
133
|
+
// If we have a token in memory, verify it directly
|
|
134
|
+
if (auth.access_token) {
|
|
135
|
+
try {
|
|
136
|
+
const res = await fetch(GITHUB_API_USER_URL, {
|
|
137
|
+
headers: {
|
|
138
|
+
Authorization: `token ${auth.access_token}`,
|
|
139
|
+
Accept: "application/vnd.github+json",
|
|
140
|
+
"User-Agent": "create-hq",
|
|
141
|
+
},
|
|
142
|
+
signal: AbortSignal.timeout(10_000),
|
|
143
|
+
});
|
|
144
|
+
return res.ok;
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
91
149
|
}
|
|
150
|
+
// Fall back to gh auth status
|
|
151
|
+
return isGhAuthenticated();
|
|
92
152
|
}
|
|
93
153
|
// ─── Browser open (cross-platform) ──────────────────────────────────────────
|
|
94
154
|
/** Open a URL in the user's default browser. Best-effort, never throws. */
|
|
@@ -118,6 +178,10 @@ function sleep(ms) {
|
|
|
118
178
|
/**
|
|
119
179
|
* Run the GitHub App device authorization flow.
|
|
120
180
|
*
|
|
181
|
+
* On success, the token is:
|
|
182
|
+
* 1. Returned in-memory as part of GitHubAuth (for the current session)
|
|
183
|
+
* 2. Configured in `gh` CLI for future sessions (via gh auth login --with-token)
|
|
184
|
+
*
|
|
121
185
|
* Throws on:
|
|
122
186
|
* - Network errors talking to github.com
|
|
123
187
|
* - User-denied authorization (access_denied)
|
|
@@ -223,6 +287,7 @@ export async function startGitHubDeviceFlow() {
|
|
|
223
287
|
email: user.email,
|
|
224
288
|
issued_at: new Date().toISOString(),
|
|
225
289
|
};
|
|
290
|
+
// Configure gh CLI with the token for future sessions
|
|
226
291
|
saveGitHubAuth(auth);
|
|
227
292
|
return auth;
|
|
228
293
|
}
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/cloud.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Result type for cloud state detection.
|
|
3
|
+
*/
|
|
4
|
+
export type CloudState = {
|
|
5
|
+
status: "has-files";
|
|
6
|
+
count: number;
|
|
7
|
+
} | {
|
|
8
|
+
status: "empty";
|
|
9
|
+
} | {
|
|
10
|
+
status: "error";
|
|
11
|
+
message: string;
|
|
12
|
+
} | {
|
|
13
|
+
status: "no-auth";
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Pure function that checks cloud state without side effects.
|
|
17
|
+
* Takes dependencies as parameters for testability.
|
|
18
|
+
*/
|
|
19
|
+
export declare function checkCloudState(deps: {
|
|
20
|
+
hasCredentials: () => boolean;
|
|
21
|
+
listRemoteFiles: () => Promise<{
|
|
22
|
+
key: string;
|
|
23
|
+
}[]>;
|
|
24
|
+
}): Promise<CloudState>;
|
|
25
|
+
export declare function checkAndSyncCloud(targetDir: string): Promise<void>;
|
|
26
|
+
//# sourceMappingURL=cloud.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../src/cloud.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GACnB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC;AAE1B;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,cAAc,EAAE,MAAM,OAAO,CAAC;IAC9B,eAAe,EAAE,MAAM,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;CACnD,GAAG,OAAO,CAAC,UAAU,CAAC,CAetB;AAED,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8FxE"}
|