nolo-cli 0.1.32 → 0.1.34
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 +4 -10
- package/agent-runtime/agentRecordConfig.ts +10 -0
- package/agent-runtime/hostAdapter.ts +10 -1
- package/agent-runtime/index.ts +9 -20
- package/agent-runtime/localLoop.ts +49 -2
- package/agent-runtime/localToolPolicy.ts +76 -34
- package/agent-runtime/localWorkspaceTools.ts +30 -333
- package/agent-runtime/openAiCompatibleProvider.ts +7 -3
- package/agent-runtime/openAiCompatibleProviderConfig.ts +15 -26
- package/agent-runtime/platformChatProvider.ts +47 -73
- package/agent-runtime/providerResolution.ts +244 -0
- package/agent-runtime/runtimeToolPolicy.ts +77 -29
- package/agent-runtime/shellCommandPolicy.ts +120 -0
- package/agentAliases.ts +14 -83
- package/agentCommandSupport.ts +3 -6
- package/agentInternalCommandEntries.ts +4 -13
- package/agentListCommands.ts +18 -27
- package/agentMachineCommands.ts +40 -336
- package/agentPullCommand.ts +30 -55
- package/agentRecordCommands.ts +84 -1
- package/agentRecordHelpers.ts +102 -186
- package/agentRunCommand.ts +438 -107
- package/agentRuntimeLocal.ts +2 -9
- package/ai/agent/cliExecutor.ts +19 -323
- package/ai/tools/toolNameAliases.ts +70 -0
- package/authCommands.ts +2 -36
- package/cli/agentAliases.ts +14 -83
- package/cli/agentCommandSupport.ts +3 -6
- package/cli/agentInternalCommandEntries.ts +4 -13
- package/cli/agentListCommands.ts +18 -27
- package/cli/agentMachineCommands.ts +40 -336
- package/cli/agentPullCommand.ts +30 -55
- package/cli/agentRecordCommands.ts +84 -1
- package/cli/agentRecordHelpers.ts +102 -186
- package/cli/agentRunCommand.ts +438 -107
- package/cli/agentRuntimeLocal.ts +2 -9
- package/cli/authCommands.ts +2 -36
- package/cli/cliCommandDispatch.ts +2 -2
- package/cli/cliEnvHelpers.ts +34 -107
- package/cli/client/agentRun.ts +854 -57
- package/cli/client/localRuntimeAdapter.ts +59 -159
- package/cli/client/streamingOutput.ts +3 -1
- package/cli/client/taskRunPrompt.ts +24 -7
- package/cli/commandRegistry.ts +4 -5
- package/cli/connectorRunArtifact.ts +10 -34
- package/cli/connectorWebSocketTarget.ts +6 -10
- package/cli/internalCommandEntries.ts +0 -8
- package/cli/localRuntimeDb.ts +2 -39
- package/cli/machineCommands.ts +189 -190
- package/cli/machineDaemonCommands.ts +165 -9
- package/cli/machineHeartbeatCommands.ts +2 -1
- package/cli/machineStatusCommands.ts +13 -5
- package/cli/machineWatchCommands.ts +1 -1
- package/cli/machineWsRunDispatch.ts +30 -44
- package/cli/machineWsSession.ts +0 -2
- package/cli/offlineMarxistsAgentCommand.ts +314 -0
- package/cli/runtimeDoctorCommands.ts +72 -15
- package/cli/scriptCommandEntries.ts +45 -5
- package/cli/tableCommands.ts +133 -33
- package/cli/taskRunCommand.ts +211 -16
- package/cli/tui/session.ts +372 -43
- package/cli/workflowInternalCommandEntries.ts +0 -20
- package/cliCommandDispatch.ts +2 -2
- package/cliEnvHelpers.ts +34 -107
- package/client/agentConfigResolver.test.ts +2 -0
- package/client/agentRun.test.ts +12 -208
- package/client/agentRun.ts +854 -57
- package/client/localProviderResolver.test.ts +26 -2
- package/client/localRuntimeAdapter.test.ts +296 -171
- package/client/localRuntimeAdapter.ts +59 -159
- package/client/localToolPolicy.test.ts +4 -28
- package/client/streamingOutput.ts +3 -1
- package/client/taskRunPrompt.ts +24 -7
- package/commandRegistry.ts +4 -5
- package/connectorRunArtifact.ts +10 -34
- package/connectorWebSocketTarget.ts +6 -10
- package/database/server/serverStoreFactory.ts +2 -8
- package/internalCommandEntries.ts +0 -8
- package/localRuntimeDb.ts +2 -39
- package/machineCommands.ts +189 -190
- package/machineDaemonCommands.ts +165 -9
- package/machineHeartbeatCommands.ts +2 -1
- package/machineStatusCommands.ts +13 -5
- package/machineWatchCommands.ts +1 -1
- package/machineWsRunDispatch.ts +30 -44
- package/machineWsSession.ts +0 -2
- package/offlineMarxistsAgentCommand.ts +314 -0
- package/package.json +52 -188
- package/runtimeDoctorCommands.ts +72 -15
- package/scriptCommandEntries.ts +45 -5
- package/tableCommands.ts +133 -33
- package/taskRunCommand.ts +211 -16
- package/tui/session.ts +372 -43
- package/workflowInternalCommandEntries.ts +0 -20
- package/agent-runtime/dialogStatus.ts +0 -139
- package/agent-runtime/hostRuntimeConfig.ts +0 -86
- package/agentCreateCustomCommands.ts +0 -278
- package/agentDialogsCommands.ts +0 -227
- package/agentDoctorCommands.ts +0 -203
- package/agentRunLocalWorkspace.ts +0 -182
- package/agentRunParsing.ts +0 -298
- package/agentSuperviseCommands.ts +0 -8
- package/agentUnpublishCommands.ts +0 -113
- package/ai/agent/agentRunDialogLineage.ts +0 -56
- package/ai/policy/types.ts +0 -64
- package/ai/skills/skillSummaryMarker.ts +0 -26
- package/app/types.ts +0 -358
- package/build.ts +0 -16
- package/buildPublish.ts +0 -138
- package/buildPublishArtifactAssembly.ts +0 -724
- package/buildPublishImportAnalysis.ts +0 -242
- package/chat/messages/fetchMessages.ts +0 -84
- package/chat/messages/types.ts +0 -185
- package/cli/agentCreateCustomCommands.ts +0 -278
- package/cli/agentDialogsCommands.ts +0 -227
- package/cli/agentDoctorCommands.ts +0 -203
- package/cli/agentRunLocalWorkspace.ts +0 -182
- package/cli/agentRunParsing.ts +0 -298
- package/cli/agentSuperviseCommands.ts +0 -8
- package/cli/agentUnpublishCommands.ts +0 -113
- package/cli/buildPublish.ts +0 -138
- package/cli/buildPublishArtifactAssembly.ts +0 -724
- package/cli/buildPublishImportAnalysis.ts +0 -242
- package/cli/cliIoTypes.ts +0 -3
- package/cli/cliRuntimeDoctorReport.ts +0 -193
- package/cli/client/agentRunInput.ts +0 -10
- package/cli/client/agentRunLocalExecution.ts +0 -124
- package/cli/client/agentRunLocalExecutor.ts +0 -179
- package/cli/client/agentRunRuntimeSelection.ts +0 -145
- package/cli/client/agentRunServerTransport.ts +0 -397
- package/cli/client/agentRunTaskRunRecorder.ts +0 -176
- package/cli/customCodingAgentFlow.ts +0 -208
- package/cli/customCodingAgentRecord.ts +0 -179
- package/cli/dialogDataAccess.ts +0 -186
- package/cli/dialogInternalCommandEntries.ts +0 -11
- package/cli/dialogReadCommands.ts +0 -180
- package/cli/dialogReadHelpers.ts +0 -226
- package/cli/dialogStatusCommands.ts +0 -123
- package/cli/docInternalCommandEntries.ts +0 -20
- package/cli/hybridReadHelpers.ts +0 -109
- package/cli/machineCommandPrompts.ts +0 -79
- package/cli/machineCommandResolution.ts +0 -43
- package/cli/noloReadBridgePrompt.ts +0 -16
- package/cli/pageCreateCommands.ts +0 -219
- package/cli/pageDeleteCommands.ts +0 -167
- package/cli/pageReadCommands.ts +0 -151
- package/cli/pageUpdateCommands.ts +0 -249
- package/cli/pageWriteHelpers.ts +0 -209
- package/cli/publishPackage.ts +0 -36
- package/cli/runtimeInternalCommandEntries.ts +0 -15
- package/cli/runtimePassthroughCommands.ts +0 -22
- package/cli/scriptPassthroughHelpers.ts +0 -28
- package/cli/secretScanHelpers.ts +0 -31
- package/cli/spaceAttachCommands.ts +0 -134
- package/cli/spaceCategoryCommands.ts +0 -263
- package/cli/spaceCommands.ts +0 -295
- package/cli/spaceDeleteCommands.ts +0 -312
- package/cli/spaceInternalCommandEntries.ts +0 -21
- package/cli/spaceMutationHelpers.ts +0 -135
- package/cli/spaceReadCommands.ts +0 -323
- package/cli/tableDataOutput.ts +0 -41
- package/cli/tableDataSafety.ts +0 -26
- package/cli/tableMetaCommands.ts +0 -307
- package/cli/tableMutationCommands.ts +0 -266
- package/cli/tableQueryParsing.ts +0 -90
- package/cli/tableQueryRequest.ts +0 -53
- package/cli/taskRunActions.ts +0 -122
- package/cli/taskRunParsing.ts +0 -86
- package/cli/taskRunPromptShared.ts +0 -55
- package/cli/tui/tuiCatalog.ts +0 -22
- package/cli/tui/tuiCommandInterpreter.ts +0 -253
- package/cli/tui/tuiPresentation.ts +0 -146
- package/cliIoTypes.ts +0 -3
- package/cliRuntimeDoctorReport.ts +0 -193
- package/client/agentRunInput.ts +0 -10
- package/client/agentRunLocalExecution.test.ts +0 -123
- package/client/agentRunLocalExecution.ts +0 -124
- package/client/agentRunLocalExecutor.ts +0 -179
- package/client/agentRunRuntimeSelection.test.ts +0 -159
- package/client/agentRunRuntimeSelection.ts +0 -145
- package/client/agentRunServerTransport.ts +0 -397
- package/client/agentRunTaskRunRecorder.ts +0 -176
- package/connector-experimental/daemonLauncher.ts +0 -223
- package/create/space/spaceKeys.ts +0 -65
- package/create/types.ts +0 -21
- package/customCodingAgentFlow.ts +0 -208
- package/customCodingAgentRecord.ts +0 -179
- package/database/keys.ts +0 -765
- package/database/tombstones.ts +0 -52
- package/database/utils/ulid.ts +0 -1
- package/dialogDataAccess.ts +0 -186
- package/dialogInternalCommandEntries.ts +0 -11
- package/dialogReadCommands.ts +0 -180
- package/dialogReadHelpers.ts +0 -226
- package/dialogStatusCommands.ts +0 -123
- package/docInternalCommandEntries.ts +0 -20
- package/hybridReadHelpers.ts +0 -109
- package/machineCommandPrompts.ts +0 -79
- package/machineCommandResolution.ts +0 -43
- package/noloReadBridgePrompt.ts +0 -16
- package/pageCreateCommands.ts +0 -219
- package/pageDeleteCommands.ts +0 -167
- package/pageReadCommands.ts +0 -151
- package/pageUpdateCommands.ts +0 -249
- package/pageWriteHelpers.ts +0 -209
- package/publishPackage.ts +0 -36
- package/runtimeInternalCommandEntries.ts +0 -15
- package/runtimePassthroughCommands.ts +0 -22
- package/scriptPassthroughHelpers.ts +0 -28
- package/secretScanHelpers.ts +0 -31
- package/share/helpers.ts +0 -302
- package/share/keys.ts +0 -243
- package/share/types.ts +0 -100
- package/spaceAttachCommands.ts +0 -134
- package/spaceCategoryCommands.ts +0 -263
- package/spaceCommands.ts +0 -295
- package/spaceDeleteCommands.ts +0 -312
- package/spaceInternalCommandEntries.ts +0 -21
- package/spaceMutationHelpers.ts +0 -135
- package/spaceReadCommands.ts +0 -323
- package/tableDataOutput.ts +0 -41
- package/tableDataSafety.ts +0 -26
- package/tableMetaCommands.ts +0 -307
- package/tableMutationCommands.ts +0 -266
- package/tableQueryParsing.ts +0 -90
- package/tableQueryRequest.ts +0 -53
- package/taskRunActions.ts +0 -122
- package/taskRunParsing.ts +0 -86
- package/taskRunPromptShared.ts +0 -55
- package/tui/tuiCatalog.ts +0 -22
- package/tui/tuiCommandInterpreter.test.ts +0 -169
- package/tui/tuiCommandInterpreter.ts +0 -253
- package/tui/tuiPresentation.test.ts +0 -154
- package/tui/tuiPresentation.ts +0 -146
package/cli/authCommands.ts
CHANGED
|
@@ -9,7 +9,6 @@ import {
|
|
|
9
9
|
loadProfileConfig,
|
|
10
10
|
saveDefaultProfile,
|
|
11
11
|
} from "./client/profileConfig";
|
|
12
|
-
import { parseUserIdFromAuthToken } from "./cliEnvHelpers";
|
|
13
12
|
import { DEFAULT_NOLO_SERVER_URL } from "./defaultServer";
|
|
14
13
|
|
|
15
14
|
function getArg(args: string[], flag: string) {
|
|
@@ -68,47 +67,17 @@ async function saveTokenLogin(args: {
|
|
|
68
67
|
configPath: string;
|
|
69
68
|
serverUrl: string;
|
|
70
69
|
authToken: string;
|
|
71
|
-
fetchImpl: typeof fetch;
|
|
72
70
|
output: Pick<Console, "log">;
|
|
73
71
|
error: Pick<Console, "error">;
|
|
74
72
|
}) {
|
|
75
|
-
|
|
76
|
-
if (!authToken) {
|
|
73
|
+
if (!args.authToken.trim()) {
|
|
77
74
|
args.error.error("No auth token provided.");
|
|
78
75
|
return 1;
|
|
79
76
|
}
|
|
80
77
|
|
|
81
|
-
const userId = parseUserIdFromAuthToken(authToken);
|
|
82
|
-
if (!userId) {
|
|
83
|
-
args.error.error("Auth token payload is missing userId.");
|
|
84
|
-
return 1;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
try {
|
|
88
|
-
const res = await args.fetchImpl(
|
|
89
|
-
`${args.serverUrl}/api/v1/db/query/${encodeURIComponent(userId)}?limit=1`,
|
|
90
|
-
{
|
|
91
|
-
method: "POST",
|
|
92
|
-
headers: {
|
|
93
|
-
Authorization: `Bearer ${authToken}`,
|
|
94
|
-
"Content-Type": "application/json",
|
|
95
|
-
},
|
|
96
|
-
body: JSON.stringify({ type: "agent" }),
|
|
97
|
-
}
|
|
98
|
-
);
|
|
99
|
-
if (res.status === 401 || res.status === 403) {
|
|
100
|
-
args.error.error(
|
|
101
|
-
`Auth token is not valid for ${args.serverUrl}. Log in against the matching server or use a token issued by that server.`
|
|
102
|
-
);
|
|
103
|
-
return 1;
|
|
104
|
-
}
|
|
105
|
-
} catch {
|
|
106
|
-
// Allow saving when the server is temporarily unreachable.
|
|
107
|
-
}
|
|
108
|
-
|
|
109
78
|
saveDefaultProfile(args.configPath, {
|
|
110
79
|
serverUrl: args.serverUrl,
|
|
111
|
-
authToken,
|
|
80
|
+
authToken: args.authToken.trim(),
|
|
112
81
|
});
|
|
113
82
|
args.output.log(`Saved profile default -> ${args.serverUrl}`);
|
|
114
83
|
return 0;
|
|
@@ -175,7 +144,6 @@ async function runWebLogin(args: {
|
|
|
175
144
|
configPath: args.configPath,
|
|
176
145
|
serverUrl: approvedServer,
|
|
177
146
|
authToken: poll.token,
|
|
178
|
-
fetchImpl: args.fetchImpl,
|
|
179
147
|
output: args.output,
|
|
180
148
|
error: args.error,
|
|
181
149
|
});
|
|
@@ -205,7 +173,6 @@ export async function runLoginCommand(args: string[], deps: LoginCommandDeps = {
|
|
|
205
173
|
configPath,
|
|
206
174
|
serverUrl,
|
|
207
175
|
authToken: tokenArg,
|
|
208
|
-
fetchImpl: deps.fetchImpl ?? fetch,
|
|
209
176
|
output: outputTarget,
|
|
210
177
|
error: errorTarget,
|
|
211
178
|
});
|
|
@@ -220,7 +187,6 @@ export async function runLoginCommand(args: string[], deps: LoginCommandDeps = {
|
|
|
220
187
|
configPath,
|
|
221
188
|
serverUrl,
|
|
222
189
|
authToken,
|
|
223
|
-
fetchImpl: deps.fetchImpl ?? fetch,
|
|
224
190
|
output: outputTarget,
|
|
225
191
|
error: errorTarget,
|
|
226
192
|
});
|
|
@@ -31,7 +31,7 @@ function readOption(args: string[], flag: string) {
|
|
|
31
31
|
|
|
32
32
|
function buildDaemonEnv(args: string[], runtimeEnv: NodeJS.ProcessEnv) {
|
|
33
33
|
const serverUrl = readOption(args, "--server-url") || readOption(args, "--server");
|
|
34
|
-
const apiKey = readOption(args, "--
|
|
34
|
+
const apiKey = readOption(args, "--machine-key") || readOption(args, "--token");
|
|
35
35
|
return {
|
|
36
36
|
...runtimeEnv,
|
|
37
37
|
...(serverUrl ? { NOLO_SERVER: serverUrl } : {}),
|
|
@@ -40,7 +40,7 @@ function buildDaemonEnv(args: string[], runtimeEnv: NodeJS.ProcessEnv) {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
export function looksLikeDaemonShortcut(args: string[]) {
|
|
43
|
-
return args.includes("--server-url") || args.includes("--
|
|
43
|
+
return args.includes("--server-url") || args.includes("--machine-key");
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
export function createCliRuntimeContext(args: {
|
package/cli/cliEnvHelpers.ts
CHANGED
|
@@ -3,63 +3,13 @@ import { NOLO_CLUSTER_SERVERS } from "../database/config";
|
|
|
3
3
|
|
|
4
4
|
export type EnvLike = Record<string, string | undefined>;
|
|
5
5
|
|
|
6
|
-
function trimTrailingSlashes(value: string) {
|
|
7
|
-
return value.trim().replace(/\/+$/, "");
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
function firstDefinedEnvValue(env: EnvLike, keys: string[]) {
|
|
11
|
-
for (const key of keys) {
|
|
12
|
-
const value = env[key];
|
|
13
|
-
if (typeof value === "string" && value.length > 0) return value;
|
|
14
|
-
}
|
|
15
|
-
return "";
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export function hasFlag(args: string[], flag: string) {
|
|
19
|
-
return args.includes(flag);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export function readCliOptionValue(args: string[], flag: string): string {
|
|
23
|
-
for (let i = 0; i < args.length; i += 1) {
|
|
24
|
-
const arg = args[i];
|
|
25
|
-
if (arg === flag) {
|
|
26
|
-
const next = args[i + 1];
|
|
27
|
-
if (typeof next === "string" && !next.startsWith("-")) return next;
|
|
28
|
-
return "";
|
|
29
|
-
}
|
|
30
|
-
if (arg.startsWith(`${flag}=`)) return arg.slice(flag.length + 1);
|
|
31
|
-
}
|
|
32
|
-
return "";
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export function hasExplicitServerOverride(args: string[]) {
|
|
36
|
-
return Boolean(
|
|
37
|
-
readCliOptionValue(args, "--server-url") ||
|
|
38
|
-
readCliOptionValue(args, "--server") ||
|
|
39
|
-
readCliOptionValue(args, "--base-url")
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
6
|
export function resolveServerUrlFromEnv(env: EnvLike) {
|
|
44
|
-
return
|
|
45
|
-
firstDefinedEnvValue(env, ["NOLO_SERVER_URL", "NOLO_SERVER", "BASE_URL"]) ||
|
|
46
|
-
DEFAULT_NOLO_SERVER_URL,
|
|
47
|
-
);
|
|
7
|
+
return (env.NOLO_SERVER || env.BASE_URL || DEFAULT_NOLO_SERVER_URL).replace(/\/+$/, "");
|
|
48
8
|
}
|
|
49
9
|
|
|
50
|
-
|
|
51
|
-
return trimTrailingSlashes(
|
|
52
|
-
readCliOptionValue(args, "--server-url") ||
|
|
53
|
-
readCliOptionValue(args, "--server") ||
|
|
54
|
-
readCliOptionValue(args, "--base-url") ||
|
|
55
|
-
firstDefinedEnvValue(env, ["NOLO_SERVER_URL", "NOLO_SERVER", "BASE_URL"]) ||
|
|
56
|
-
DEFAULT_NOLO_SERVER_URL,
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
type ServerResolverInput = string[] | EnvLike;
|
|
10
|
+
type ResolverInput = string[] | EnvLike;
|
|
61
11
|
|
|
62
|
-
function isCliArgs(value:
|
|
12
|
+
function isCliArgs(value: ResolverInput): value is string[] {
|
|
63
13
|
return Array.isArray(value);
|
|
64
14
|
}
|
|
65
15
|
|
|
@@ -73,9 +23,12 @@ function buildServerCandidates(values: Array<string | null | undefined>) {
|
|
|
73
23
|
|
|
74
24
|
export function resolveServerUrl(env: EnvLike): string;
|
|
75
25
|
export function resolveServerUrl(args: string[], env: EnvLike): string;
|
|
76
|
-
export function resolveServerUrl(input:
|
|
26
|
+
export function resolveServerUrl(input: ResolverInput, env?: EnvLike) {
|
|
77
27
|
if (isCliArgs(input)) {
|
|
78
|
-
|
|
28
|
+
const explicit =
|
|
29
|
+
readOption(input, "--server-url") ||
|
|
30
|
+
readOption(input, "--server");
|
|
31
|
+
return explicit?.replace(/\/+$/, "") || resolveServerUrlFromEnv(env ?? {});
|
|
79
32
|
}
|
|
80
33
|
return resolveServerUrlFromEnv(input);
|
|
81
34
|
}
|
|
@@ -87,13 +40,13 @@ export function resolveServerCandidates(
|
|
|
87
40
|
preferred?: string | null,
|
|
88
41
|
): string[];
|
|
89
42
|
export function resolveServerCandidates(
|
|
90
|
-
input:
|
|
43
|
+
input: ResolverInput,
|
|
91
44
|
envOrPreferred?: EnvLike | string | null,
|
|
92
45
|
preferred?: string | null,
|
|
93
46
|
) {
|
|
94
47
|
if (isCliArgs(input)) {
|
|
95
48
|
const env = (envOrPreferred ?? {}) as EnvLike;
|
|
96
|
-
const explicitServer =
|
|
49
|
+
const explicitServer = resolveServerUrl(input, env);
|
|
97
50
|
return buildServerCandidates([
|
|
98
51
|
explicitServer,
|
|
99
52
|
preferred?.trim(),
|
|
@@ -104,6 +57,7 @@ export function resolveServerCandidates(
|
|
|
104
57
|
...NOLO_CLUSTER_SERVERS,
|
|
105
58
|
]);
|
|
106
59
|
}
|
|
60
|
+
|
|
107
61
|
const env = input;
|
|
108
62
|
return buildServerCandidates([
|
|
109
63
|
typeof envOrPreferred === "string" ? envOrPreferred.trim() : undefined,
|
|
@@ -115,71 +69,44 @@ export function resolveServerCandidates(
|
|
|
115
69
|
]);
|
|
116
70
|
}
|
|
117
71
|
|
|
72
|
+
export function resolveAuthTokenFromEnv(env: EnvLike, extraEnvKeys: string[] = []) {
|
|
73
|
+
for (const key of ["AUTH_TOKEN", "AUTH", ...extraEnvKeys]) {
|
|
74
|
+
const value = env[key];
|
|
75
|
+
if (typeof value === "string" && value.trim()) return value;
|
|
76
|
+
}
|
|
77
|
+
return "";
|
|
78
|
+
}
|
|
79
|
+
|
|
118
80
|
export function resolveAuthToken(env: EnvLike, extraEnvKeys?: string[]): string;
|
|
119
81
|
export function resolveAuthToken(args: string[], env: EnvLike, extraEnvKeys?: string[]): string;
|
|
120
82
|
export function resolveAuthToken(
|
|
121
|
-
input:
|
|
83
|
+
input: ResolverInput,
|
|
122
84
|
envOrExtraEnvKeys?: EnvLike | string[],
|
|
123
85
|
extraEnvKeys: string[] = [],
|
|
124
86
|
) {
|
|
125
87
|
if (isCliArgs(input)) {
|
|
126
|
-
|
|
88
|
+
const env = (envOrExtraEnvKeys ?? {}) as EnvLike;
|
|
89
|
+
return (
|
|
90
|
+
readOption(input, "--token") ||
|
|
91
|
+
readOption(input, "--machine-key") ||
|
|
92
|
+
resolveAuthTokenFromEnv(env, extraEnvKeys)
|
|
93
|
+
);
|
|
127
94
|
}
|
|
128
95
|
return resolveAuthTokenFromEnv(input, (envOrExtraEnvKeys as string[] | undefined) ?? []);
|
|
129
96
|
}
|
|
130
97
|
|
|
131
|
-
export function resolveAuthTokenFromEnv(env: EnvLike, extraEnvKeys: string[] = []) {
|
|
132
|
-
return (
|
|
133
|
-
firstDefinedEnvValue(env, [...extraEnvKeys, "BENCHMARK_AUTH_TOKEN", "AUTH_TOKEN", "AUTH"]) ||
|
|
134
|
-
""
|
|
135
|
-
);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
export function resolveAuthTokenFromArgs(
|
|
139
|
-
args: string[],
|
|
140
|
-
env: EnvLike,
|
|
141
|
-
extraEnvKeys: string[] = [],
|
|
142
|
-
) {
|
|
143
|
-
return (
|
|
144
|
-
readCliOptionValue(args, "--api-key") ||
|
|
145
|
-
readCliOptionValue(args, "--token") ||
|
|
146
|
-
firstDefinedEnvValue(env, [
|
|
147
|
-
...extraEnvKeys,
|
|
148
|
-
"BENCHMARK_AUTH_TOKEN",
|
|
149
|
-
"NOLO_TASK_RUN_TOKEN",
|
|
150
|
-
"NOLO_MACHINE_API_KEY",
|
|
151
|
-
"AUTH_TOKEN",
|
|
152
|
-
"AUTH",
|
|
153
|
-
]) ||
|
|
154
|
-
""
|
|
155
|
-
);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
export function decodeJwtPayload(token: string): Record<string, unknown> | null {
|
|
159
|
-
const trimmed = token.trim();
|
|
160
|
-
if (!trimmed) return null;
|
|
161
|
-
const parts = trimmed.split(".").filter(Boolean);
|
|
162
|
-
const payloadCandidates = parts.length >= 3 ? [parts[1], parts[0]] : [parts[0]];
|
|
163
|
-
for (const payload of payloadCandidates) {
|
|
164
|
-
try {
|
|
165
|
-
return JSON.parse(Buffer.from(payload, "base64").toString("utf8"));
|
|
166
|
-
} catch {
|
|
167
|
-
continue;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
return null;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
98
|
export function parseUserIdFromAuthToken(token: string) {
|
|
174
|
-
const
|
|
175
|
-
|
|
99
|
+
const payload = token.trim().split(".")[0];
|
|
100
|
+
if (!payload) return "";
|
|
101
|
+
try {
|
|
102
|
+
const parsed = JSON.parse(Buffer.from(payload, "base64").toString("utf8"));
|
|
103
|
+
return typeof parsed?.userId === "string" ? parsed.userId : "";
|
|
104
|
+
} catch {
|
|
105
|
+
return "";
|
|
106
|
+
}
|
|
176
107
|
}
|
|
177
108
|
|
|
178
109
|
export function readOption(args: string[], flag: string) {
|
|
179
110
|
const index = args.indexOf(flag);
|
|
180
111
|
return index >= 0 ? args[index + 1] : undefined;
|
|
181
112
|
}
|
|
182
|
-
|
|
183
|
-
export function readOptionValue(args: string[], flag: string) {
|
|
184
|
-
return readCliOptionValue(args, flag);
|
|
185
|
-
}
|