@rizom/ops 0.2.0-alpha.7 → 0.2.0-alpha.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/age-key-bootstrap.d.ts +17 -0
- package/dist/brains-ops.js +262 -156
- package/dist/cert-bootstrap.d.ts +3 -3
- package/dist/content-repo.d.ts +13 -0
- package/dist/default-user-runner.d.ts +1 -1
- package/dist/deploy.js +3 -170
- package/dist/entries/deploy.d.ts +2 -2
- package/dist/index.d.ts +3 -0
- package/dist/index.js +262 -156
- package/dist/load-registry.d.ts +19 -3
- package/dist/observed-status.d.ts +1 -1
- package/dist/onboard-user.d.ts +2 -2
- package/dist/origin-ca.d.ts +1 -1
- package/dist/parse-args.d.ts +2 -0
- package/dist/push-secrets.d.ts +1 -1
- package/dist/reconcile-all.d.ts +2 -2
- package/dist/reconcile-cohort.d.ts +2 -2
- package/dist/reconcile-lib.d.ts +4 -2
- package/dist/run-command.d.ts +1 -2
- package/dist/run-subprocess.d.ts +1 -0
- package/dist/schema.d.ts +100 -0
- package/dist/secrets-encrypt.d.ts +32 -0
- package/dist/secrets-push.d.ts +1 -1
- package/dist/ssh-key-bootstrap.d.ts +1 -1
- package/dist/user-add.d.ts +15 -0
- package/dist/user-runner.d.ts +5 -0
- package/package.json +7 -3
- package/templates/rover-pilot/.env.schema +11 -0
- package/templates/rover-pilot/.github/workflows/build.yml +4 -4
- package/templates/rover-pilot/.github/workflows/deploy.yml +75 -20
- package/templates/rover-pilot/.github/workflows/reconcile.yml +16 -2
- package/templates/rover-pilot/README.md +6 -3
- package/templates/rover-pilot/deploy/scripts/decrypt-user-secrets.ts +83 -0
- package/templates/rover-pilot/deploy/scripts/provision-server.ts +1 -1
- package/templates/rover-pilot/deploy/scripts/resolve-deploy-handles.ts +15 -4
- package/templates/rover-pilot/deploy/scripts/resolve-user-config.ts +12 -12
- package/templates/rover-pilot/deploy/scripts/sync-content-repo.ts +179 -0
- package/templates/rover-pilot/deploy/scripts/update-dns.ts +14 -4
- package/templates/rover-pilot/docs/onboarding-checklist.md +28 -12
- package/templates/rover-pilot/docs/operator-playbook.md +43 -5
- package/templates/rover-pilot/docs/user-onboarding.md +292 -99
- package/templates/rover-pilot/package.json +3 -0
- package/templates/rover-pilot/pilot.yaml +4 -0
- package/templates/rover-pilot/users/alice.yaml +5 -1
- package/dist/user-secret-names.d.ts +0 -6
- package/templates/rover-pilot/.kamal/hooks/pre-deploy +0 -9
- package/templates/rover-pilot/deploy/Caddyfile +0 -66
- package/templates/rover-pilot/deploy/Dockerfile +0 -38
- package/templates/rover-pilot/deploy/kamal/deploy.yml +0 -39
package/dist/load-registry.d.ts
CHANGED
|
@@ -13,6 +13,21 @@ export interface ResolvedCohort {
|
|
|
13
13
|
brainVersionOverride?: string;
|
|
14
14
|
presetOverride?: PilotPreset;
|
|
15
15
|
aiApiKeyOverride?: string;
|
|
16
|
+
gitSyncTokenOverride?: string;
|
|
17
|
+
mcpAuthTokenOverride?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface ResolvedAnchorProfileSocialLink {
|
|
20
|
+
platform: "github" | "instagram" | "linkedin" | "email" | "website";
|
|
21
|
+
url: string;
|
|
22
|
+
label?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface ResolvedAnchorProfile {
|
|
25
|
+
name: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
website?: string;
|
|
28
|
+
email?: string;
|
|
29
|
+
story?: string;
|
|
30
|
+
socialLinks?: ResolvedAnchorProfileSocialLink[];
|
|
16
31
|
}
|
|
17
32
|
export interface ResolvedUserIdentity {
|
|
18
33
|
handle: string;
|
|
@@ -23,7 +38,11 @@ export interface ResolvedUserIdentity {
|
|
|
23
38
|
domain: string;
|
|
24
39
|
contentRepo: string;
|
|
25
40
|
discordEnabled: boolean;
|
|
41
|
+
discordAnchorUserId?: string;
|
|
26
42
|
effectiveAiApiKey: string;
|
|
43
|
+
effectiveGitSyncToken: string;
|
|
44
|
+
effectiveMcpAuthToken: string;
|
|
45
|
+
anchorProfile: ResolvedAnchorProfile;
|
|
27
46
|
snapshotStatus: SnapshotStatus;
|
|
28
47
|
}
|
|
29
48
|
export interface ResolvedUser extends ResolvedUserIdentity {
|
|
@@ -40,7 +59,4 @@ export interface PilotRegistry {
|
|
|
40
59
|
cohorts: ResolvedCohort[];
|
|
41
60
|
users: ResolvedUser[];
|
|
42
61
|
}
|
|
43
|
-
declare class PilotRegistryError extends Error {
|
|
44
|
-
}
|
|
45
62
|
export declare function loadPilotRegistry(rootDir: string, options?: LoadPilotRegistryOptions): Promise<PilotRegistry>;
|
|
46
|
-
export { PilotRegistryError };
|
package/dist/onboard-user.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { type UserRunner } from "./reconcile-lib";
|
|
2
|
-
export declare function onboardUser(rootDir: string, handle: string, runner?: UserRunner): Promise<void>;
|
|
1
|
+
import { type UserRunner, type ContentRepoSyncOptions } from "./reconcile-lib";
|
|
2
|
+
export declare function onboardUser(rootDir: string, handle: string, runner?: UserRunner, contentRepoOptions?: ContentRepoSyncOptions): Promise<void>;
|
package/dist/origin-ca.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { createOriginCertificateRequest, generateOriginKeyPair, issueCloudflareOriginCertificate, setCloudflareZoneSslStrict, type CloudflareOriginCaResult, type FetchLike, type OriginCertificateRequest, type OriginKeyPair, } from "@brains/
|
|
1
|
+
export { createOriginCertificateRequest, generateOriginKeyPair, issueCloudflareOriginCertificate, setCloudflareZoneSslStrict, type CloudflareOriginCaResult, type FetchLike, type OriginCertificateRequest, type OriginKeyPair, } from "@brains/deploy-support/origin-ca";
|
package/dist/parse-args.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export interface ParsedArgs {
|
|
|
6
6
|
version?: boolean | undefined;
|
|
7
7
|
dryRun?: boolean | undefined;
|
|
8
8
|
pushTo?: string | undefined;
|
|
9
|
+
cohort?: string | undefined;
|
|
10
|
+
anchorId?: string | undefined;
|
|
9
11
|
};
|
|
10
12
|
}
|
|
11
13
|
export declare function parseArgs(argv: string[]): ParsedArgs;
|
package/dist/push-secrets.d.ts
CHANGED
|
@@ -5,5 +5,5 @@ export interface PushSecretsOptions {
|
|
|
5
5
|
runCommand?: RunCommand | undefined;
|
|
6
6
|
logger?: ((message: string) => void) | undefined;
|
|
7
7
|
}
|
|
8
|
-
export declare function pushSecretsToBackend(
|
|
8
|
+
export declare function pushSecretsToBackend(_target: PushTarget, secrets: readonly SecretPair[], options?: PushSecretsOptions): Promise<void>;
|
|
9
9
|
export { normalizePushTarget };
|
package/dist/reconcile-all.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { type UserRunner } from "./reconcile-lib";
|
|
2
|
-
export declare function reconcileAll(rootDir: string, runner?: UserRunner): Promise<void>;
|
|
1
|
+
import { type UserRunner, type ContentRepoSyncOptions } from "./reconcile-lib";
|
|
2
|
+
export declare function reconcileAll(rootDir: string, runner?: UserRunner, contentRepoOptions?: ContentRepoSyncOptions): Promise<void>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { type UserRunner } from "./reconcile-lib";
|
|
2
|
-
export declare function reconcileCohort(rootDir: string, cohortId: string, runner?: UserRunner): Promise<void>;
|
|
1
|
+
import { type UserRunner, type ContentRepoSyncOptions } from "./reconcile-lib";
|
|
2
|
+
export declare function reconcileCohort(rootDir: string, cohortId: string, runner?: UserRunner, contentRepoOptions?: ContentRepoSyncOptions): Promise<void>;
|
package/dist/reconcile-lib.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { type ContentRepoSyncOptions } from "./content-repo";
|
|
1
2
|
import { type PilotRegistry, type ResolvedUser } from "./load-registry";
|
|
2
3
|
import type { UserRunner } from "./user-runner";
|
|
3
|
-
export type {
|
|
4
|
-
export
|
|
4
|
+
export type { ContentRepoSyncOptions } from "./content-repo";
|
|
5
|
+
export type { ContentRepoFile, UserRunResult, UserRunner } from "./user-runner";
|
|
6
|
+
export declare function runUsers(rootDir: string, registry: PilotRegistry, users: ResolvedUser[], runner?: UserRunner, contentRepoOptions?: ContentRepoSyncOptions): Promise<void>;
|
|
5
7
|
export declare function findUser(rootDir: string, handle: string): Promise<{
|
|
6
8
|
registry: PilotRegistry;
|
|
7
9
|
user: ResolvedUser;
|
package/dist/run-command.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FetchLike } from "@brains/
|
|
1
|
+
import type { FetchLike } from "@brains/deploy-support/origin-ca";
|
|
2
2
|
import type { LoadPilotRegistryOptions } from "./load-registry";
|
|
3
3
|
import { type LookupHost } from "./observed-status";
|
|
4
4
|
import type { ParsedArgs } from "./parse-args";
|
|
@@ -15,7 +15,6 @@ export interface CommandDependencies extends LoadPilotRegistryOptions {
|
|
|
15
15
|
logger?: ((message: string) => void) | undefined;
|
|
16
16
|
fetchImpl?: FetchLike | undefined;
|
|
17
17
|
lookupHost?: LookupHost | undefined;
|
|
18
|
-
secretRunCommand?: OpsRunCommand | undefined;
|
|
19
18
|
bootstrapRunCommand?: OpsRunCommand | undefined;
|
|
20
19
|
sshKeygen?: SshKeygen | undefined;
|
|
21
20
|
}
|
package/dist/run-subprocess.d.ts
CHANGED
package/dist/schema.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export declare const presetSchema: z.ZodEnum<["core", "default", "pro"]>;
|
|
|
3
3
|
export declare const exactVersionSchema: z.ZodString;
|
|
4
4
|
export declare const handleSchema: z.ZodString;
|
|
5
5
|
export declare const secretNameSchema: z.ZodString;
|
|
6
|
+
export declare const agePublicKeySchema: z.ZodString;
|
|
6
7
|
export declare const pilotSchema: z.ZodObject<{
|
|
7
8
|
schemaVersion: z.ZodLiteral<1>;
|
|
8
9
|
brainVersion: z.ZodString;
|
|
@@ -12,7 +13,12 @@ export declare const pilotSchema: z.ZodObject<{
|
|
|
12
13
|
domainSuffix: z.ZodString;
|
|
13
14
|
preset: z.ZodEnum<["core", "default", "pro"]>;
|
|
14
15
|
aiApiKey: z.ZodString;
|
|
16
|
+
gitSyncToken: z.ZodString;
|
|
17
|
+
contentRepoAdminToken: z.ZodString;
|
|
18
|
+
mcpAuthToken: z.ZodString;
|
|
19
|
+
agePublicKey: z.ZodString;
|
|
15
20
|
}, "strict", z.ZodTypeAny, {
|
|
21
|
+
agePublicKey: string;
|
|
16
22
|
schemaVersion: 1;
|
|
17
23
|
brainVersion: string;
|
|
18
24
|
model: "rover";
|
|
@@ -21,7 +27,11 @@ export declare const pilotSchema: z.ZodObject<{
|
|
|
21
27
|
domainSuffix: string;
|
|
22
28
|
preset: "default" | "core" | "pro";
|
|
23
29
|
aiApiKey: string;
|
|
30
|
+
gitSyncToken: string;
|
|
31
|
+
contentRepoAdminToken: string;
|
|
32
|
+
mcpAuthToken: string;
|
|
24
33
|
}, {
|
|
34
|
+
agePublicKey: string;
|
|
25
35
|
schemaVersion: 1;
|
|
26
36
|
brainVersion: string;
|
|
27
37
|
model: "rover";
|
|
@@ -30,53 +40,143 @@ export declare const pilotSchema: z.ZodObject<{
|
|
|
30
40
|
domainSuffix: string;
|
|
31
41
|
preset: "default" | "core" | "pro";
|
|
32
42
|
aiApiKey: string;
|
|
43
|
+
gitSyncToken: string;
|
|
44
|
+
contentRepoAdminToken: string;
|
|
45
|
+
mcpAuthToken: string;
|
|
33
46
|
}>;
|
|
34
47
|
export declare const userSchema: z.ZodObject<{
|
|
35
48
|
handle: z.ZodString;
|
|
36
49
|
discord: z.ZodObject<{
|
|
37
50
|
enabled: z.ZodBoolean;
|
|
51
|
+
anchorUserId: z.ZodOptional<z.ZodString>;
|
|
38
52
|
}, "strict", z.ZodTypeAny, {
|
|
39
53
|
enabled: boolean;
|
|
54
|
+
anchorUserId?: string | undefined;
|
|
40
55
|
}, {
|
|
41
56
|
enabled: boolean;
|
|
57
|
+
anchorUserId?: string | undefined;
|
|
42
58
|
}>;
|
|
43
59
|
aiApiKeyOverride: z.ZodOptional<z.ZodString>;
|
|
60
|
+
gitSyncTokenOverride: z.ZodOptional<z.ZodString>;
|
|
61
|
+
mcpAuthTokenOverride: z.ZodOptional<z.ZodString>;
|
|
62
|
+
anchorProfile: z.ZodOptional<z.ZodObject<{
|
|
63
|
+
name: z.ZodOptional<z.ZodString>;
|
|
64
|
+
description: z.ZodOptional<z.ZodString>;
|
|
65
|
+
website: z.ZodOptional<z.ZodString>;
|
|
66
|
+
email: z.ZodOptional<z.ZodString>;
|
|
67
|
+
story: z.ZodOptional<z.ZodString>;
|
|
68
|
+
socialLinks: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
69
|
+
platform: z.ZodEnum<["github", "instagram", "linkedin", "email", "website"]>;
|
|
70
|
+
url: z.ZodString;
|
|
71
|
+
label: z.ZodOptional<z.ZodString>;
|
|
72
|
+
}, "strict", z.ZodTypeAny, {
|
|
73
|
+
platform: "github" | "instagram" | "linkedin" | "email" | "website";
|
|
74
|
+
url: string;
|
|
75
|
+
label?: string | undefined;
|
|
76
|
+
}, {
|
|
77
|
+
platform: "github" | "instagram" | "linkedin" | "email" | "website";
|
|
78
|
+
url: string;
|
|
79
|
+
label?: string | undefined;
|
|
80
|
+
}>, "many">>;
|
|
81
|
+
}, "strict", z.ZodTypeAny, {
|
|
82
|
+
name?: string | undefined;
|
|
83
|
+
email?: string | undefined;
|
|
84
|
+
website?: string | undefined;
|
|
85
|
+
description?: string | undefined;
|
|
86
|
+
story?: string | undefined;
|
|
87
|
+
socialLinks?: {
|
|
88
|
+
platform: "github" | "instagram" | "linkedin" | "email" | "website";
|
|
89
|
+
url: string;
|
|
90
|
+
label?: string | undefined;
|
|
91
|
+
}[] | undefined;
|
|
92
|
+
}, {
|
|
93
|
+
name?: string | undefined;
|
|
94
|
+
email?: string | undefined;
|
|
95
|
+
website?: string | undefined;
|
|
96
|
+
description?: string | undefined;
|
|
97
|
+
story?: string | undefined;
|
|
98
|
+
socialLinks?: {
|
|
99
|
+
platform: "github" | "instagram" | "linkedin" | "email" | "website";
|
|
100
|
+
url: string;
|
|
101
|
+
label?: string | undefined;
|
|
102
|
+
}[] | undefined;
|
|
103
|
+
}>>;
|
|
44
104
|
}, "strict", z.ZodTypeAny, {
|
|
45
105
|
handle: string;
|
|
46
106
|
discord: {
|
|
47
107
|
enabled: boolean;
|
|
108
|
+
anchorUserId?: string | undefined;
|
|
48
109
|
};
|
|
49
110
|
aiApiKeyOverride?: string | undefined;
|
|
111
|
+
gitSyncTokenOverride?: string | undefined;
|
|
112
|
+
mcpAuthTokenOverride?: string | undefined;
|
|
113
|
+
anchorProfile?: {
|
|
114
|
+
name?: string | undefined;
|
|
115
|
+
email?: string | undefined;
|
|
116
|
+
website?: string | undefined;
|
|
117
|
+
description?: string | undefined;
|
|
118
|
+
story?: string | undefined;
|
|
119
|
+
socialLinks?: {
|
|
120
|
+
platform: "github" | "instagram" | "linkedin" | "email" | "website";
|
|
121
|
+
url: string;
|
|
122
|
+
label?: string | undefined;
|
|
123
|
+
}[] | undefined;
|
|
124
|
+
} | undefined;
|
|
50
125
|
}, {
|
|
51
126
|
handle: string;
|
|
52
127
|
discord: {
|
|
53
128
|
enabled: boolean;
|
|
129
|
+
anchorUserId?: string | undefined;
|
|
54
130
|
};
|
|
55
131
|
aiApiKeyOverride?: string | undefined;
|
|
132
|
+
gitSyncTokenOverride?: string | undefined;
|
|
133
|
+
mcpAuthTokenOverride?: string | undefined;
|
|
134
|
+
anchorProfile?: {
|
|
135
|
+
name?: string | undefined;
|
|
136
|
+
email?: string | undefined;
|
|
137
|
+
website?: string | undefined;
|
|
138
|
+
description?: string | undefined;
|
|
139
|
+
story?: string | undefined;
|
|
140
|
+
socialLinks?: {
|
|
141
|
+
platform: "github" | "instagram" | "linkedin" | "email" | "website";
|
|
142
|
+
url: string;
|
|
143
|
+
label?: string | undefined;
|
|
144
|
+
}[] | undefined;
|
|
145
|
+
} | undefined;
|
|
56
146
|
}>;
|
|
57
147
|
export declare const cohortSchema: z.ZodEffects<z.ZodObject<{
|
|
58
148
|
members: z.ZodArray<z.ZodString, "many">;
|
|
59
149
|
brainVersionOverride: z.ZodOptional<z.ZodString>;
|
|
60
150
|
presetOverride: z.ZodOptional<z.ZodEnum<["core", "default", "pro"]>>;
|
|
61
151
|
aiApiKeyOverride: z.ZodOptional<z.ZodString>;
|
|
152
|
+
gitSyncTokenOverride: z.ZodOptional<z.ZodString>;
|
|
153
|
+
mcpAuthTokenOverride: z.ZodOptional<z.ZodString>;
|
|
62
154
|
}, "strict", z.ZodTypeAny, {
|
|
63
155
|
members: string[];
|
|
64
156
|
aiApiKeyOverride?: string | undefined;
|
|
157
|
+
gitSyncTokenOverride?: string | undefined;
|
|
158
|
+
mcpAuthTokenOverride?: string | undefined;
|
|
65
159
|
brainVersionOverride?: string | undefined;
|
|
66
160
|
presetOverride?: "default" | "core" | "pro" | undefined;
|
|
67
161
|
}, {
|
|
68
162
|
members: string[];
|
|
69
163
|
aiApiKeyOverride?: string | undefined;
|
|
164
|
+
gitSyncTokenOverride?: string | undefined;
|
|
165
|
+
mcpAuthTokenOverride?: string | undefined;
|
|
70
166
|
brainVersionOverride?: string | undefined;
|
|
71
167
|
presetOverride?: "default" | "core" | "pro" | undefined;
|
|
72
168
|
}>, {
|
|
73
169
|
members: string[];
|
|
74
170
|
aiApiKeyOverride?: string | undefined;
|
|
171
|
+
gitSyncTokenOverride?: string | undefined;
|
|
172
|
+
mcpAuthTokenOverride?: string | undefined;
|
|
75
173
|
brainVersionOverride?: string | undefined;
|
|
76
174
|
presetOverride?: "default" | "core" | "pro" | undefined;
|
|
77
175
|
}, {
|
|
78
176
|
members: string[];
|
|
79
177
|
aiApiKeyOverride?: string | undefined;
|
|
178
|
+
gitSyncTokenOverride?: string | undefined;
|
|
179
|
+
mcpAuthTokenOverride?: string | undefined;
|
|
80
180
|
brainVersionOverride?: string | undefined;
|
|
81
181
|
presetOverride?: "default" | "core" | "pro" | undefined;
|
|
82
182
|
}>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from "@brains/utils";
|
|
2
|
+
declare const encryptedUserSecretsSchema: z.ZodObject<{
|
|
3
|
+
gitSyncToken: z.ZodOptional<z.ZodString>;
|
|
4
|
+
mcpAuthToken: z.ZodOptional<z.ZodString>;
|
|
5
|
+
discordBotToken: z.ZodOptional<z.ZodString>;
|
|
6
|
+
aiApiKey: z.ZodOptional<z.ZodString>;
|
|
7
|
+
}, "strict", z.ZodTypeAny, {
|
|
8
|
+
aiApiKey?: string | undefined;
|
|
9
|
+
gitSyncToken?: string | undefined;
|
|
10
|
+
mcpAuthToken?: string | undefined;
|
|
11
|
+
discordBotToken?: string | undefined;
|
|
12
|
+
}, {
|
|
13
|
+
aiApiKey?: string | undefined;
|
|
14
|
+
gitSyncToken?: string | undefined;
|
|
15
|
+
mcpAuthToken?: string | undefined;
|
|
16
|
+
discordBotToken?: string | undefined;
|
|
17
|
+
}>;
|
|
18
|
+
export type EncryptedUserSecrets = z.infer<typeof encryptedUserSecretsSchema>;
|
|
19
|
+
export interface SecretsEncryptOptions {
|
|
20
|
+
env?: NodeJS.ProcessEnv | undefined;
|
|
21
|
+
logger?: ((message: string) => void) | undefined;
|
|
22
|
+
dryRun?: boolean | undefined;
|
|
23
|
+
}
|
|
24
|
+
export interface SecretsEncryptResult {
|
|
25
|
+
encryptedPath: string;
|
|
26
|
+
plaintextPath: string;
|
|
27
|
+
deletedPlaintext: boolean;
|
|
28
|
+
encryptedKeys: Array<keyof EncryptedUserSecrets>;
|
|
29
|
+
dryRun?: boolean | undefined;
|
|
30
|
+
}
|
|
31
|
+
export declare function encryptPilotSecrets(rootDir: string, handle: string, options?: SecretsEncryptOptions): Promise<SecretsEncryptResult>;
|
|
32
|
+
export {};
|
package/dist/secrets-push.d.ts
CHANGED
|
@@ -10,4 +10,4 @@ export interface SecretsPushResult {
|
|
|
10
10
|
skippedKeys: string[];
|
|
11
11
|
dryRun?: boolean | undefined;
|
|
12
12
|
}
|
|
13
|
-
export declare function pushPilotSecrets(rootDir: string,
|
|
13
|
+
export declare function pushPilotSecrets(rootDir: string, options?: SecretsPushOptions): Promise<SecretsPushResult>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface AddPilotUserOptions {
|
|
2
|
+
cohort: string;
|
|
3
|
+
anchorId?: string | undefined;
|
|
4
|
+
}
|
|
5
|
+
export interface AddPilotUserResult {
|
|
6
|
+
handle: string;
|
|
7
|
+
cohort: string;
|
|
8
|
+
userPath: string;
|
|
9
|
+
secretsTemplatePath: string;
|
|
10
|
+
cohortPath: string;
|
|
11
|
+
createdUser: boolean;
|
|
12
|
+
createdSecretsTemplate: boolean;
|
|
13
|
+
addedToCohort: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function addPilotUser(rootDir: string, handle: string, options: AddPilotUserOptions): Promise<AddPilotUserResult>;
|
package/dist/user-runner.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import type { ResolvedUser } from "./load-registry";
|
|
2
|
+
export interface ContentRepoFile {
|
|
3
|
+
path: string;
|
|
4
|
+
content: string;
|
|
5
|
+
}
|
|
2
6
|
export interface UserRunResult {
|
|
3
7
|
brainYaml?: string;
|
|
4
8
|
envFile?: string;
|
|
9
|
+
contentRepoFiles?: ContentRepoFile[];
|
|
5
10
|
}
|
|
6
11
|
export type UserRunner = (user: ResolvedUser) => Promise<UserRunResult | void>;
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "0.2.0-alpha.
|
|
7
|
+
"version": "0.2.0-alpha.70",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"exports": {
|
|
10
10
|
".": {
|
|
@@ -32,10 +32,14 @@
|
|
|
32
32
|
"typecheck": "tsc --noEmit",
|
|
33
33
|
"lint": "eslint . --ext .ts",
|
|
34
34
|
"lint:fix": "eslint . --ext .ts --fix",
|
|
35
|
-
"test": "bun test"
|
|
35
|
+
"test": "bun run build && bun test --timeout 20000",
|
|
36
|
+
"test:smoke": "bun run build && RUN_SMOKE_TESTS=1 bun test --timeout 60000"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"age-encryption": "^0.3.0"
|
|
36
40
|
},
|
|
37
|
-
"dependencies": {},
|
|
38
41
|
"devDependencies": {
|
|
42
|
+
"@brains/deploy-support": "workspace:*",
|
|
39
43
|
"@brains/eslint-config": "workspace:*",
|
|
40
44
|
"@brains/typescript-config": "workspace:*",
|
|
41
45
|
"@brains/utils": "workspace:*",
|
|
@@ -4,18 +4,29 @@
|
|
|
4
4
|
# ----------
|
|
5
5
|
|
|
6
6
|
# AI provider
|
|
7
|
+
# Shared GitHub secret by default; a per-user override may come from the decrypted
|
|
8
|
+
# users/<handle>.secrets.yaml.age file at deploy time.
|
|
7
9
|
# @required @sensitive
|
|
8
10
|
AI_API_KEY=
|
|
9
11
|
|
|
10
12
|
# Git sync
|
|
13
|
+
# Comes from the decrypted users/<handle>.secrets.yaml.age file.
|
|
11
14
|
# @required @sensitive
|
|
12
15
|
GIT_SYNC_TOKEN=
|
|
13
16
|
|
|
17
|
+
# Content repo administration
|
|
18
|
+
# Local/operator secret only. Used by brains-ops to create missing GitHub repos;
|
|
19
|
+
# do not deploy it into Rover runtime config.
|
|
20
|
+
# @required @sensitive
|
|
21
|
+
CONTENT_REPO_ADMIN_TOKEN=
|
|
22
|
+
|
|
14
23
|
# MCP interface
|
|
24
|
+
# Comes from the decrypted users/<handle>.secrets.yaml.age file.
|
|
15
25
|
# @required @sensitive
|
|
16
26
|
MCP_AUTH_TOKEN=
|
|
17
27
|
|
|
18
28
|
# Discord (optional, per-user)
|
|
29
|
+
# Comes from the decrypted users/<handle>.secrets.yaml.age file when enabled.
|
|
19
30
|
# @sensitive
|
|
20
31
|
DISCORD_BOT_TOKEN=
|
|
21
32
|
|
|
@@ -32,25 +32,25 @@ jobs:
|
|
|
32
32
|
echo "IMAGE_REPOSITORY=ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}" >> "$GITHUB_ENV"
|
|
33
33
|
|
|
34
34
|
- name: Set up Docker Buildx
|
|
35
|
-
uses: docker/setup-buildx-action@
|
|
35
|
+
uses: docker/setup-buildx-action@v4
|
|
36
36
|
|
|
37
37
|
- name: Extract image metadata
|
|
38
38
|
id: meta
|
|
39
|
-
uses: docker/metadata-action@
|
|
39
|
+
uses: docker/metadata-action@v6
|
|
40
40
|
with:
|
|
41
41
|
images: ${{ env.IMAGE_REPOSITORY }}
|
|
42
42
|
tags: |
|
|
43
43
|
type=raw,value=brain-${{ env.BRAIN_VERSION }}
|
|
44
44
|
|
|
45
45
|
- name: Log in to GHCR
|
|
46
|
-
uses: docker/login-action@
|
|
46
|
+
uses: docker/login-action@v4
|
|
47
47
|
with:
|
|
48
48
|
registry: ghcr.io
|
|
49
49
|
username: ${{ github.actor }}
|
|
50
50
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
51
51
|
|
|
52
52
|
- name: Build and push image
|
|
53
|
-
uses: docker/build-push-action@
|
|
53
|
+
uses: docker/build-push-action@v7
|
|
54
54
|
with:
|
|
55
55
|
context: .
|
|
56
56
|
file: deploy/Dockerfile
|