@cleanslop/cli 0.1.0-beta.2 → 0.1.0-beta.21
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 +5 -4
- package/assets/skill-core.md +25 -7
- package/dist/action.d.ts +4 -1
- package/dist/action.js +24 -0
- package/dist/action.js.map +1 -1
- package/dist/args.d.ts +1 -1
- package/dist/args.js +31 -9
- package/dist/args.js.map +1 -1
- package/dist/commands/credits.d.ts +30 -1
- package/dist/commands/credits.js +320 -43
- package/dist/commands/credits.js.map +1 -1
- package/dist/commands/email.js +22 -0
- package/dist/commands/email.js.map +1 -1
- package/dist/commands/link-login.js +4 -4
- package/dist/commands/link-login.js.map +1 -1
- package/dist/commands/login.d.ts +1 -0
- package/dist/commands/login.js +22 -8
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts +2 -1
- package/dist/commands/logout.js +48 -23
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/redeem.d.ts +7 -0
- package/dist/commands/redeem.js +33 -0
- package/dist/commands/redeem.js.map +1 -0
- package/dist/commands/scan-upload.js +48 -27
- package/dist/commands/scan-upload.js.map +1 -1
- package/dist/commands/scan.js +45 -4
- package/dist/commands/scan.js.map +1 -1
- package/dist/config.d.ts +3 -3
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/connect.d.ts +15 -0
- package/dist/connect.js +100 -0
- package/dist/connect.js.map +1 -0
- package/dist/credentials.d.ts +14 -0
- package/dist/credentials.js +25 -7
- package/dist/credentials.js.map +1 -1
- package/dist/done-question.d.ts +20 -0
- package/dist/done-question.js +25 -0
- package/dist/done-question.js.map +1 -0
- package/dist/exit.d.ts +29 -0
- package/dist/exit.js +12 -0
- package/dist/exit.js.map +1 -1
- package/dist/git.d.ts +8 -1
- package/dist/git.js +35 -1
- package/dist/git.js.map +1 -1
- package/dist/http.js +74 -4
- package/dist/http.js.map +1 -1
- package/dist/link.d.ts +52 -11
- package/dist/link.js +169 -43
- package/dist/link.js.map +1 -1
- package/dist/main.js +8 -3
- package/dist/main.js.map +1 -1
- package/dist/output.js +6 -1
- package/dist/output.js.map +1 -1
- package/dist/pack.d.ts +19 -3
- package/dist/pack.js +30 -2
- package/dist/pack.js.map +1 -1
- package/dist/skill.d.ts +1 -1
- package/dist/skill.js +2 -1
- package/dist/skill.js.map +1 -1
- package/dist/top-up.d.ts +8 -0
- package/dist/top-up.js +35 -0
- package/dist/top-up.js.map +1 -0
- package/dist/types.d.ts +18 -1
- package/package.json +1 -1
package/dist/connect.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { CliError, EXIT_ACTION } from "./exit.js";
|
|
2
|
+
import { parseGithubRemote } from "./git.js";
|
|
3
|
+
import { asRecord, httpRequest } from "./http.js";
|
|
4
|
+
export const LINK_LOGIN_COMMAND = "cleanslop login --link --no-wait";
|
|
5
|
+
export const GITHUB_LOGIN_COMMAND = "cleanslop login --no-wait";
|
|
6
|
+
const LINK_DESCRIPTION = "Scan this folder as is, no GitHub needed. Needs a Link account; US and Canada only.";
|
|
7
|
+
/**
|
|
8
|
+
* The server lists both methods only while `AGENT_CONNECT_CHOICE=ask` and Link
|
|
9
|
+
* sign-up is public. `githubUploads`: a GitHub sign-in can also upload local files.
|
|
10
|
+
*/
|
|
11
|
+
async function offeredMethods(deps, origin) {
|
|
12
|
+
try {
|
|
13
|
+
const result = await httpRequest(deps, origin, "GET", "/api/agent/v1/connect");
|
|
14
|
+
if (result.status !== 200)
|
|
15
|
+
return { both: false, githubUploads: false };
|
|
16
|
+
const methods = asRecord(result.json)?.methods;
|
|
17
|
+
const list = Array.isArray(methods) ? methods.map((m) => asRecord(m)) : [];
|
|
18
|
+
const github = list.find((m) => m?.kind === "github");
|
|
19
|
+
return {
|
|
20
|
+
both: Boolean(github) && list.some((m) => m?.kind === "stripe_link"),
|
|
21
|
+
githubUploads: github?.uploads === true,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return { both: false, githubUploads: false };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async function onGithub(deps) {
|
|
29
|
+
const remote = await deps.git(["remote", "get-url", "origin"], deps.env.cwd());
|
|
30
|
+
return remote.ok && parseGithubRemote(remote.stdout.trim()) !== null;
|
|
31
|
+
}
|
|
32
|
+
function githubDescription(onGithub, uploads) {
|
|
33
|
+
if (onGithub)
|
|
34
|
+
return "Your code is on GitHub. Sign in with GitHub.";
|
|
35
|
+
return uploads
|
|
36
|
+
? "Sign in with GitHub. This folder isn't on GitHub, so CleanSlop uploads its files."
|
|
37
|
+
: "This folder isn't on GitHub yet; you'd need to push it first.";
|
|
38
|
+
}
|
|
39
|
+
export function connectQuestion(github, githubUploads = false) {
|
|
40
|
+
return {
|
|
41
|
+
id: "connect_method",
|
|
42
|
+
header: "Connect",
|
|
43
|
+
question: "How should CleanSlop connect?",
|
|
44
|
+
options: [
|
|
45
|
+
{
|
|
46
|
+
value: "stripe_link",
|
|
47
|
+
label: "Stripe Link (Recommended)",
|
|
48
|
+
description: LINK_DESCRIPTION,
|
|
49
|
+
run: LINK_LOGIN_COMMAND,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
value: "github",
|
|
53
|
+
label: "GitHub",
|
|
54
|
+
description: githubDescription(github, githubUploads),
|
|
55
|
+
run: GITHUB_LOGIN_COMMAND,
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Not connected: ask Link (recommended) or GitHub when the server offers
|
|
62
|
+
* both; otherwise, or if the server cannot say, keep the plain login block.
|
|
63
|
+
*/
|
|
64
|
+
export async function withConnectChoice(deps, err) {
|
|
65
|
+
const offered = await offeredMethods(deps, err.origin);
|
|
66
|
+
if (!offered.both)
|
|
67
|
+
return err;
|
|
68
|
+
return new CliError(err.message, EXIT_ACTION, {
|
|
69
|
+
kind: "ask_human",
|
|
70
|
+
humanPrompt: `This machine isn't connected to CleanSlop yet. Ask the human how to connect: Stripe Link (recommended; ${LINK_DESCRIPTION}) runs \`${LINK_LOGIN_COMMAND}\`; GitHub runs \`${GITHUB_LOGIN_COMMAND}\`. If they already said which, use that without asking.`,
|
|
71
|
+
question: connectQuestion(await onGithub(deps), offered.githubUploads),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* A link-cli failure during `login --link` (no action of its own) offers
|
|
76
|
+
* GitHub, since Link may simply be unavailable to this person.
|
|
77
|
+
*/
|
|
78
|
+
export function offerGithubAfterLinkFailure(err) {
|
|
79
|
+
if (!(err instanceof CliError) || err.action)
|
|
80
|
+
throw err;
|
|
81
|
+
throw new CliError(err.message, err.exitCode, {
|
|
82
|
+
kind: "ask_human",
|
|
83
|
+
humanPrompt: `Link sign-in failed (the error is below). If Link isn't available to the human (Link sign-up is US and Canada only), connect with GitHub instead: run \`${GITHUB_LOGIN_COMMAND}\`.`,
|
|
84
|
+
question: {
|
|
85
|
+
id: "link_failed",
|
|
86
|
+
header: "Connect",
|
|
87
|
+
question: "Link sign-in failed. Connect with GitHub instead?",
|
|
88
|
+
options: [
|
|
89
|
+
{
|
|
90
|
+
value: "github",
|
|
91
|
+
label: "Use GitHub",
|
|
92
|
+
description: "Sign in with GitHub instead",
|
|
93
|
+
run: GITHUB_LOGIN_COMMAND,
|
|
94
|
+
},
|
|
95
|
+
{ value: "retry", label: "Try Link again", run: LINK_LOGIN_COMMAND },
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=connect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"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"}
|
package/dist/credentials.d.ts
CHANGED
|
@@ -25,6 +25,12 @@ export type PendingSpendRequest = {
|
|
|
25
25
|
networkId: string;
|
|
26
26
|
purchaseUrl: string;
|
|
27
27
|
createdAt: number;
|
|
28
|
+
/** Link approval page from spend-request create, re-shown on --no-wait / --resume. */
|
|
29
|
+
approvalUrl?: string;
|
|
30
|
+
/** Created with `link-cli --test`. Absent on files from older CLIs. */
|
|
31
|
+
testMode?: boolean;
|
|
32
|
+
/** Spend-request events already reported to the server (billing Slack). */
|
|
33
|
+
reported?: string[];
|
|
28
34
|
};
|
|
29
35
|
export declare function readPendingSpend(deps: CliDeps): PendingSpendRequest | null;
|
|
30
36
|
export declare function writePendingSpend(deps: CliDeps, pending: PendingSpendRequest): Promise<void>;
|
|
@@ -41,6 +47,14 @@ export type PendingLogin = {
|
|
|
41
47
|
export declare function readPendingLogin(deps: CliDeps): PendingLogin | null;
|
|
42
48
|
export declare function writePendingLogin(deps: CliDeps, pending: PendingLogin): Promise<void>;
|
|
43
49
|
export declare function deletePendingLogin(deps: CliDeps): void;
|
|
50
|
+
/**
|
|
51
|
+
* Removes the pending GitHub login and Link payment saved for `origin`, so a
|
|
52
|
+
* logout leaves nothing for the next command to resume. Another origin's stay;
|
|
53
|
+
* a file that no longer parses goes too.
|
|
54
|
+
*/
|
|
55
|
+
export declare function deletePendingFor(deps: CliDeps, origin: string): void;
|
|
56
|
+
/** Every file the CLI keeps in `configDir`; `logout --all` deletes them all. */
|
|
57
|
+
export declare function deleteAllLocalState(deps: CliDeps): void;
|
|
44
58
|
export declare function assertNotInWorktree(deps: CliDeps, targetPath: string): Promise<void>;
|
|
45
59
|
export declare function readCredentialsFile(deps: CliDeps): CredentialsFile;
|
|
46
60
|
export declare function writeCredentialsFile(deps: CliDeps, file: CredentialsFile): Promise<void>;
|
package/dist/credentials.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
2
|
import { CREDENTIALS_FILE, PENDING_LOGIN_FILE, PENDING_SPEND_FILE, parseOrigin, } from "./config.js";
|
|
3
|
-
import { CliError,
|
|
3
|
+
import { CliError, EXIT_USAGE, NotConnectedError, usageError } from "./exit.js";
|
|
4
4
|
import { gitToplevel, isPathInsideWorktree } from "./git.js";
|
|
5
5
|
import { tokenLast4 } from "./redact.js";
|
|
6
6
|
export function resolveOrigin(deps) {
|
|
@@ -108,6 +108,28 @@ export function deletePendingLogin(deps) {
|
|
|
108
108
|
if (deps.fs.exists(path))
|
|
109
109
|
deps.fs.rm(path);
|
|
110
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* Removes the pending GitHub login and Link payment saved for `origin`, so a
|
|
113
|
+
* logout leaves nothing for the next command to resume. Another origin's stay;
|
|
114
|
+
* a file that no longer parses goes too.
|
|
115
|
+
*/
|
|
116
|
+
export function deletePendingFor(deps, origin) {
|
|
117
|
+
const login = pendingLoginPath(deps);
|
|
118
|
+
if (deps.fs.exists(login) && (readPendingLogin(deps)?.origin ?? origin) === origin) {
|
|
119
|
+
deps.fs.rm(login);
|
|
120
|
+
}
|
|
121
|
+
const spend = pendingSpendPath(deps);
|
|
122
|
+
if (deps.fs.exists(spend) && (readPendingSpend(deps)?.origin ?? origin) === origin) {
|
|
123
|
+
deps.fs.rm(spend);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/** Every file the CLI keeps in `configDir`; `logout --all` deletes them all. */
|
|
127
|
+
export function deleteAllLocalState(deps) {
|
|
128
|
+
for (const path of [credentialsPath(deps), pendingLoginPath(deps), pendingSpendPath(deps)]) {
|
|
129
|
+
if (deps.fs.exists(path))
|
|
130
|
+
deps.fs.rm(path);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
111
133
|
export async function assertNotInWorktree(deps, targetPath) {
|
|
112
134
|
const top = await gitToplevel(deps, deps.env.cwd());
|
|
113
135
|
if (!top)
|
|
@@ -173,12 +195,8 @@ export function resolveToken(deps, origin) {
|
|
|
173
195
|
}
|
|
174
196
|
export function requireToken(deps, origin) {
|
|
175
197
|
const resolved = resolveToken(deps, origin);
|
|
176
|
-
if (!resolved)
|
|
177
|
-
throw new
|
|
178
|
-
kind: "approve",
|
|
179
|
-
humanPrompt: "Run `cleanslop login` and ask the human to approve the device code.",
|
|
180
|
-
});
|
|
181
|
-
}
|
|
198
|
+
if (!resolved)
|
|
199
|
+
throw new NotConnectedError(origin);
|
|
182
200
|
return resolved;
|
|
183
201
|
}
|
|
184
202
|
export async function storeToken(deps, origin, input) {
|
package/dist/credentials.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ActionQuestion } from "./exit.js";
|
|
2
|
+
/** The next step after a `--no-wait` approval when only the agent knows its exact command. */
|
|
3
|
+
export declare const RESUME_SAME_COMMAND = "run the same cleanslop command again, with --resume in place of --no-wait";
|
|
4
|
+
export declare const RERUN_SAME_COMMAND = "run the same cleanslop command again";
|
|
5
|
+
/**
|
|
6
|
+
* "Tell me when you're done" as a question, so agents ask with their question
|
|
7
|
+
* tool instead of improvising "reply done". The question repeats any link and
|
|
8
|
+
* code, because a question tool may show only the question.
|
|
9
|
+
*/
|
|
10
|
+
export declare function doneQuestion(opts: {
|
|
11
|
+
id: string;
|
|
12
|
+
header: string;
|
|
13
|
+
question: string;
|
|
14
|
+
then: {
|
|
15
|
+
run: string;
|
|
16
|
+
} | {
|
|
17
|
+
next: string;
|
|
18
|
+
};
|
|
19
|
+
notNow?: string;
|
|
20
|
+
}): ActionQuestion;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** The next step after a `--no-wait` approval when only the agent knows its exact command. */
|
|
2
|
+
export const RESUME_SAME_COMMAND = "run the same cleanslop command again, with --resume in place of --no-wait";
|
|
3
|
+
export const RERUN_SAME_COMMAND = "run the same cleanslop command again";
|
|
4
|
+
const NOT_NOW = {
|
|
5
|
+
value: "stop",
|
|
6
|
+
label: "Not now",
|
|
7
|
+
description: "Stop here",
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* "Tell me when you're done" as a question, so agents ask with their question
|
|
11
|
+
* tool instead of improvising "reply done". The question repeats any link and
|
|
12
|
+
* code, because a question tool may show only the question.
|
|
13
|
+
*/
|
|
14
|
+
export function doneQuestion(opts) {
|
|
15
|
+
return {
|
|
16
|
+
id: opts.id,
|
|
17
|
+
header: opts.header,
|
|
18
|
+
question: opts.question,
|
|
19
|
+
options: [
|
|
20
|
+
{ value: "done", label: "Done", ...opts.then },
|
|
21
|
+
opts.notNow ? { ...NOT_NOW, description: opts.notNow } : NOT_NOW,
|
|
22
|
+
],
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=done-question.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"done-question.js","sourceRoot":"","sources":["../src/done-question.ts"],"names":[],"mappings":"AAEA,8FAA8F;AAC9F,MAAM,CAAC,MAAM,mBAAmB,GAC9B,2EAA2E,CAAC;AAC9E,MAAM,CAAC,MAAM,kBAAkB,GAAG,sCAAsC,CAAC;AAEzE,MAAM,OAAO,GAAyB;IACpC,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,WAAW;CACzB,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAM5B;IACC,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;YAC9C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO;SACjE;KACF,CAAC;AACJ,CAAC"}
|
package/dist/exit.d.ts
CHANGED
|
@@ -8,17 +8,46 @@ export declare const EXIT_SOURCE = 13;
|
|
|
8
8
|
export declare const EXIT_SCAN_FAILED = 20;
|
|
9
9
|
export declare const EXIT_RUNNING = 75;
|
|
10
10
|
export type ActionKind = "approve" | "install" | "top-up" | "beta" | "reauth" | "present_identity" | "link_existing" | "ask_human" | "ask_email" | "wait";
|
|
11
|
+
/**
|
|
12
|
+
* One answer to a structured question. `run` is the exact next command;
|
|
13
|
+
* `next` is a plain instruction (consent answers never carry `--agree`);
|
|
14
|
+
* neither means stop.
|
|
15
|
+
*/
|
|
16
|
+
export type ActionQuestionOption = {
|
|
17
|
+
value: string;
|
|
18
|
+
label: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
run?: string;
|
|
21
|
+
next?: string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* A multiple-choice question for the human. Agents with a question tool
|
|
25
|
+
* (e.g. Claude Code AskUserQuestion: 2–4 options, header ≤12 chars) ask with
|
|
26
|
+
* it; others ask in plain text. The agent never answers it itself.
|
|
27
|
+
*/
|
|
28
|
+
export type ActionQuestion = {
|
|
29
|
+
id: string;
|
|
30
|
+
header: string;
|
|
31
|
+
question: string;
|
|
32
|
+
options: ActionQuestionOption[];
|
|
33
|
+
};
|
|
11
34
|
export type ActionRequired = {
|
|
12
35
|
kind: ActionKind;
|
|
13
36
|
humanPrompt: string;
|
|
14
37
|
url?: string;
|
|
15
38
|
code?: string;
|
|
39
|
+
question?: ActionQuestion;
|
|
16
40
|
};
|
|
17
41
|
export declare class CliError extends Error {
|
|
18
42
|
readonly exitCode: number;
|
|
19
43
|
readonly action: ActionRequired | undefined;
|
|
20
44
|
constructor(message: string, exitCode: number, action?: ActionRequired);
|
|
21
45
|
}
|
|
46
|
+
/** No credentials for `origin`; `runCli` may turn this into a connect question. */
|
|
47
|
+
export declare class NotConnectedError extends CliError {
|
|
48
|
+
readonly origin: string;
|
|
49
|
+
constructor(origin: string);
|
|
50
|
+
}
|
|
22
51
|
export declare function usageError(message: string): CliError;
|
|
23
52
|
export declare function sourceError(message: string, action?: ActionRequired): CliError;
|
|
24
53
|
export declare function actionError(message: string, action: ActionRequired): CliError;
|
package/dist/exit.js
CHANGED
|
@@ -17,6 +17,18 @@ export class CliError extends Error {
|
|
|
17
17
|
this.action = action;
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
+
/** No credentials for `origin`; `runCli` may turn this into a connect question. */
|
|
21
|
+
export class NotConnectedError extends CliError {
|
|
22
|
+
origin;
|
|
23
|
+
constructor(origin) {
|
|
24
|
+
super("Not connected. Run `cleanslop login`.", EXIT_ACTION, {
|
|
25
|
+
kind: "approve",
|
|
26
|
+
humanPrompt: "Run `cleanslop login` and ask the human to approve the device code.",
|
|
27
|
+
});
|
|
28
|
+
this.name = "NotConnectedError";
|
|
29
|
+
this.origin = origin;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
20
32
|
export function usageError(message) {
|
|
21
33
|
return new CliError(message, EXIT_USAGE);
|
|
22
34
|
}
|
package/dist/exit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exit.js","sourceRoot":"","sources":["../src/exit.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AACjC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAC5B,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAC/B,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"exit.js","sourceRoot":"","sources":["../src/exit.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AACjC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAC5B,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAC/B,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AA+C/B,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,QAAQ,CAAS;IACjB,MAAM,CAA6B;IAE5C,YACE,OAAe,EACf,QAAgB,EAChB,MAAuB;QAEvB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,mFAAmF;AACnF,MAAM,OAAO,iBAAkB,SAAQ,QAAQ;IACpC,MAAM,CAAS;IAExB,YAAY,MAAc;QACxB,KAAK,CAAC,uCAAuC,EAAE,WAAW,EAAE;YAC1D,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,qEAAqE;SACnF,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,MAAuB;IAClE,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,MAAsB;IACjE,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC"}
|
package/dist/git.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CliDeps } from "./deps.js";
|
|
2
|
+
import { type ActionQuestion } from "./exit.js";
|
|
2
3
|
import type { GitSnapshot } from "./types.js";
|
|
3
4
|
export type GithubRemote = {
|
|
4
5
|
owner: string;
|
|
@@ -10,5 +11,11 @@ export declare function parseGithubRemote(raw: string): GithubRemote | null;
|
|
|
10
11
|
export declare function isPathInsideWorktree(targetPath: string, worktreeRoot: string): boolean;
|
|
11
12
|
export declare function gitToplevel(deps: CliDeps, cwd: string): Promise<string | null>;
|
|
12
13
|
export declare function inspectGit(deps: CliDeps): Promise<GitSnapshot>;
|
|
13
|
-
|
|
14
|
+
/** The human commits and pushes; the agent never does. */
|
|
15
|
+
export declare function pushFirstQuestion(): ActionQuestion;
|
|
16
|
+
/** GitHub grants that may upload: scan the local files now, or push and scan the commit. */
|
|
17
|
+
export declare function pushOrUploadQuestion(): ActionQuestion;
|
|
18
|
+
export declare function assertGithubReady(git: GitSnapshot, opts?: {
|
|
19
|
+
canUpload?: boolean;
|
|
20
|
+
}): void;
|
|
14
21
|
export declare function detectAgentHint(env: CliDeps["env"]): string;
|
package/dist/git.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { existsSync, realpathSync } from "node:fs";
|
|
2
2
|
import { basename, isAbsolute, relative, resolve, sep } from "node:path";
|
|
3
|
+
import { doneQuestion, RERUN_SAME_COMMAND } from "./done-question.js";
|
|
3
4
|
import { sourceError } from "./exit.js";
|
|
4
5
|
const OWNER_REPO_RE = /^[A-Za-z0-9._-]+\/[A-Za-z0-9._-]+$/;
|
|
5
6
|
function stripGitSuffix(name) {
|
|
@@ -127,7 +128,39 @@ export async function inspectGit(deps) {
|
|
|
127
128
|
github: parseGithubRemote(remote),
|
|
128
129
|
};
|
|
129
130
|
}
|
|
130
|
-
|
|
131
|
+
/** The human commits and pushes; the agent never does. */
|
|
132
|
+
export function pushFirstQuestion() {
|
|
133
|
+
return doneQuestion({
|
|
134
|
+
id: "push_first",
|
|
135
|
+
header: "Push",
|
|
136
|
+
question: "Commit and push your changes to GitHub. Done?",
|
|
137
|
+
then: { next: RERUN_SAME_COMMAND },
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/** GitHub grants that may upload: scan the local files now, or push and scan the commit. */
|
|
141
|
+
export function pushOrUploadQuestion() {
|
|
142
|
+
return {
|
|
143
|
+
id: "push_or_upload",
|
|
144
|
+
header: "Source",
|
|
145
|
+
question: "Your latest changes are not on GitHub. Scan the local files as they are, or push them and scan the pushed commit?",
|
|
146
|
+
options: [
|
|
147
|
+
{
|
|
148
|
+
value: "upload",
|
|
149
|
+
label: "Scan local files",
|
|
150
|
+
description: "Upload this folder's files; nothing is pushed",
|
|
151
|
+
next: "run the same cleanslop command again, adding --upload",
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
value: "pushed",
|
|
155
|
+
label: "I pushed",
|
|
156
|
+
description: "Scan the pushed commit",
|
|
157
|
+
next: RERUN_SAME_COMMAND,
|
|
158
|
+
},
|
|
159
|
+
{ value: "stop", label: "Not now", description: "Stop here" },
|
|
160
|
+
],
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
export function assertGithubReady(git, opts = {}) {
|
|
131
164
|
if (!git.github) {
|
|
132
165
|
throw sourceError("origin is not a github.com remote. Phase 1 only scans GitHub App repos.", {
|
|
133
166
|
kind: "ask_human",
|
|
@@ -144,6 +177,7 @@ export function assertGithubReady(git) {
|
|
|
144
177
|
throw sourceError(`Ask the human before committing or pushing (${why}).`, {
|
|
145
178
|
kind: "ask_human",
|
|
146
179
|
humanPrompt: "This checkout has local changes or an unpushed HEAD. Ask the human to commit and push, then rerun. Do not commit or push yourself.",
|
|
180
|
+
question: opts.canUpload ? pushOrUploadQuestion() : pushFirstQuestion(),
|
|
147
181
|
});
|
|
148
182
|
}
|
|
149
183
|
}
|
package/dist/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEzE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
|
package/dist/http.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { USER_AGENT } from "./config.js";
|
|
2
2
|
import { actionError, CliError, EXIT_ACTION, EXIT_PAYMENT, EXIT_POLICY, EXIT_RUNNING, EXIT_SCAN_FAILED, EXIT_SOURCE, EXIT_UNEXPECTED, EXIT_USAGE, } from "./exit.js";
|
|
3
|
+
import { doneQuestion, RERUN_SAME_COMMAND } from "./done-question.js";
|
|
4
|
+
import { pushFirstQuestion } from "./git.js";
|
|
5
|
+
import { promoOffered, topUpQuestion } from "./top-up.js";
|
|
3
6
|
export function hasIdentityPresentationChallenge(result) {
|
|
4
7
|
if (result.status !== 401)
|
|
5
8
|
return false;
|
|
@@ -80,6 +83,63 @@ function actionFromBody(body, fallback) {
|
|
|
80
83
|
url: body.action?.url,
|
|
81
84
|
};
|
|
82
85
|
}
|
|
86
|
+
/** Without Link packs (`credits.ts` handles those), offer checkout or a promo code. */
|
|
87
|
+
function outOfScansAction(body, json) {
|
|
88
|
+
const action = actionFromBody(body, "top-up");
|
|
89
|
+
if (!promoOffered(json)) {
|
|
90
|
+
if (!action.url)
|
|
91
|
+
return action;
|
|
92
|
+
const question = doneQuestion({
|
|
93
|
+
id: "web_checkout",
|
|
94
|
+
header: "Add scans",
|
|
95
|
+
question: `Buy scans at ${action.url}. Done?`,
|
|
96
|
+
then: { next: "rerun the scan" },
|
|
97
|
+
notNow: "Buy nothing",
|
|
98
|
+
});
|
|
99
|
+
return { ...action, question };
|
|
100
|
+
}
|
|
101
|
+
const checkout = action.url
|
|
102
|
+
? {
|
|
103
|
+
value: "checkout",
|
|
104
|
+
label: "Buy on the web",
|
|
105
|
+
description: "Pay in the browser",
|
|
106
|
+
next: "give the human the URL above, then rerun the scan after they pay",
|
|
107
|
+
}
|
|
108
|
+
: null;
|
|
109
|
+
return { ...action, question: topUpQuestion(checkout) };
|
|
110
|
+
}
|
|
111
|
+
/** The human does `what` at the action's link, then the agent reruns. No link, nothing to ask. */
|
|
112
|
+
function doneAtUrl(action, id, header, what) {
|
|
113
|
+
if (!action.url)
|
|
114
|
+
return action;
|
|
115
|
+
return {
|
|
116
|
+
...action,
|
|
117
|
+
question: doneQuestion({
|
|
118
|
+
id,
|
|
119
|
+
header,
|
|
120
|
+
question: `${what} at ${action.url}. Done?`,
|
|
121
|
+
then: { next: RERUN_SAME_COMMAND },
|
|
122
|
+
}),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function installAction(body) {
|
|
126
|
+
return doneAtUrl(actionFromBody(body, "install"), "github_install", "Install", "Install the CleanSlop GitHub App for this repository");
|
|
127
|
+
}
|
|
128
|
+
/** The Link email already has an account: connect Link to it through GitHub, or stop. */
|
|
129
|
+
const LINK_EXISTING_QUESTION = {
|
|
130
|
+
id: "link_existing",
|
|
131
|
+
header: "Connect",
|
|
132
|
+
question: "This Link email already has a CleanSlop account. Connect Link to it by signing in with GitHub?",
|
|
133
|
+
options: [
|
|
134
|
+
{
|
|
135
|
+
value: "github",
|
|
136
|
+
label: "Sign in with GitHub",
|
|
137
|
+
description: "Then connect Link to that account",
|
|
138
|
+
next: "run `cleanslop login --no-wait` and finish its approval, then run `cleanslop link-identity --no-wait`",
|
|
139
|
+
},
|
|
140
|
+
{ value: "stop", label: "Not now", description: "Stop here" },
|
|
141
|
+
],
|
|
142
|
+
};
|
|
83
143
|
function mapActionKind(raw, fallback) {
|
|
84
144
|
switch (raw) {
|
|
85
145
|
case "approve":
|
|
@@ -118,16 +178,20 @@ export function throwHttpError(result) {
|
|
|
118
178
|
humanPrompt: message,
|
|
119
179
|
});
|
|
120
180
|
case "out_of_scans":
|
|
121
|
-
throw new CliError(message, EXIT_PAYMENT,
|
|
181
|
+
throw new CliError(message, EXIT_PAYMENT, outOfScansAction(body, result.json));
|
|
122
182
|
case "repo_not_connected":
|
|
123
|
-
throw new CliError(message, EXIT_ACTION,
|
|
183
|
+
throw new CliError(message, EXIT_ACTION, installAction(body));
|
|
124
184
|
case "github_reauth_required":
|
|
185
|
+
throw new CliError(message, EXIT_ACTION, doneAtUrl(actionFromBody(body, "reauth"), "github_reconnect", "Reconnect", "Reconnect GitHub"));
|
|
125
186
|
case "token_revoked":
|
|
126
187
|
case "token_expired":
|
|
127
188
|
case "invalid_token":
|
|
128
189
|
throw new CliError(message, EXIT_ACTION, actionFromBody(body, "reauth"));
|
|
129
190
|
case "account_exists":
|
|
130
|
-
throw new CliError(message, EXIT_ACTION,
|
|
191
|
+
throw new CliError(message, EXIT_ACTION, {
|
|
192
|
+
...actionFromBody(body, "link_existing"),
|
|
193
|
+
question: LINK_EXISTING_QUESTION,
|
|
194
|
+
});
|
|
131
195
|
case "link_pilot_required":
|
|
132
196
|
case "terms_required":
|
|
133
197
|
case "link_email_unverified":
|
|
@@ -135,6 +199,8 @@ export function throwHttpError(result) {
|
|
|
135
199
|
case "link_email_in_use":
|
|
136
200
|
case "uploads_unavailable":
|
|
137
201
|
case "upload_quota":
|
|
202
|
+
case "promo_invalid":
|
|
203
|
+
case "promo_already_redeemed":
|
|
138
204
|
throw new CliError(message, EXIT_POLICY, actionFromBody(body, "ask_human"));
|
|
139
205
|
case "link_unavailable":
|
|
140
206
|
throw new CliError(message, EXIT_UNEXPECTED);
|
|
@@ -146,6 +212,10 @@ export function throwHttpError(result) {
|
|
|
146
212
|
case "insufficient_scope":
|
|
147
213
|
throw new CliError(message, EXIT_POLICY, actionFromBody(body, "ask_human"));
|
|
148
214
|
case "commit_not_on_github":
|
|
215
|
+
throw new CliError(message, EXIT_SOURCE, {
|
|
216
|
+
...actionFromBody(body, "ask_human"),
|
|
217
|
+
question: pushFirstQuestion(),
|
|
218
|
+
});
|
|
149
219
|
case "unsupported_remote":
|
|
150
220
|
throw new CliError(message, EXIT_SOURCE, actionFromBody(body, "ask_human"));
|
|
151
221
|
case "scan_failed":
|
|
@@ -156,7 +226,7 @@ export function throwHttpError(result) {
|
|
|
156
226
|
case "github_unavailable":
|
|
157
227
|
throw new CliError(message, EXIT_UNEXPECTED, actionFromBody(body, "wait"));
|
|
158
228
|
case "training_decision_required":
|
|
159
|
-
throw new CliError(message, EXIT_ACTION, actionFromBody(body, "ask_human"));
|
|
229
|
+
throw new CliError(message, EXIT_ACTION, doneAtUrl(actionFromBody(body, "ask_human"), "training_default", "Training", "Choose a training default for undecided repos"));
|
|
160
230
|
case "report_not_ready":
|
|
161
231
|
case "scan_in_progress":
|
|
162
232
|
throw new CliError(message, EXIT_RUNNING, actionFromBody(body, "wait"));
|
package/dist/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EACL,WAAW,EACX,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,UAAU,
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|