@papert-code/papert-code 0.3.9 → 0.3.91
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +3 -233
- package/package.json +2 -2
package/dist/cli.js
CHANGED
|
@@ -100711,7 +100711,7 @@ import { fileURLToPath as fileURLToPath5 } from "node:url";
|
|
|
100711
100711
|
import path15 from "node:path";
|
|
100712
100712
|
async function getVersion() {
|
|
100713
100713
|
const pkgJson = await getPackageJson(__dirname3);
|
|
100714
|
-
return "0.3.
|
|
100714
|
+
return "0.3.91";
|
|
100715
100715
|
}
|
|
100716
100716
|
var __filename2, __dirname3;
|
|
100717
100717
|
var init_version2 = __esm({
|
|
@@ -171503,7 +171503,7 @@ function createContentGeneratorConfig(config2, authType, generationConfig) {
|
|
|
171503
171503
|
};
|
|
171504
171504
|
}
|
|
171505
171505
|
async function createContentGenerator(config2, gcConfig, isInitialAuth) {
|
|
171506
|
-
const version3 = "0.3.
|
|
171506
|
+
const version3 = "0.3.91";
|
|
171507
171507
|
const userAgent2 = `PapertCode/${version3} (${process.platform}; ${process.arch})`;
|
|
171508
171508
|
const baseHeaders = {
|
|
171509
171509
|
"User-Agent": userAgent2
|
|
@@ -401856,60 +401856,14 @@ var require_prompts3 = __commonJS({
|
|
|
401856
401856
|
// packages/cli/src/admin/adminClient.ts
|
|
401857
401857
|
import path130 from "node:path";
|
|
401858
401858
|
import fs108 from "node:fs/promises";
|
|
401859
|
-
function getAdminEnv() {
|
|
401860
|
-
const rawBase = process.env["PAPERT_ADMIN_URL"];
|
|
401861
|
-
const baseUrl = rawBase ? rawBase.replace(/\/$/, "") : void 0;
|
|
401862
|
-
return {
|
|
401863
|
-
baseUrl,
|
|
401864
|
-
email: process.env["PAPERT_ADMIN_EMAIL"],
|
|
401865
|
-
password: process.env["PAPERT_ADMIN_PASSWORD"],
|
|
401866
|
-
token: process.env["PAPERT_ADMIN_TOKEN"]
|
|
401867
|
-
};
|
|
401868
|
-
}
|
|
401869
401859
|
function getAdminTokenPath() {
|
|
401870
401860
|
return path130.join(Storage.getGlobalPapertDir(), "admin-token.json");
|
|
401871
401861
|
}
|
|
401872
|
-
async function loadCachedToken(baseUrl) {
|
|
401873
|
-
try {
|
|
401874
|
-
const raw2 = await fs108.readFile(getAdminTokenPath(), "utf-8");
|
|
401875
|
-
const parsed = JSON.parse(raw2);
|
|
401876
|
-
if (!parsed.token || !parsed.baseUrl) return null;
|
|
401877
|
-
if (parsed.baseUrl !== baseUrl) return null;
|
|
401878
|
-
return { token: parsed.token, email: parsed.email };
|
|
401879
|
-
} catch {
|
|
401880
|
-
return null;
|
|
401881
|
-
}
|
|
401882
|
-
}
|
|
401883
401862
|
async function saveCachedToken(baseUrl, token2, email2) {
|
|
401884
401863
|
const payload = { baseUrl, token: token2, email: email2, savedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
401885
401864
|
await fs108.mkdir(path130.dirname(getAdminTokenPath()), { recursive: true });
|
|
401886
401865
|
await fs108.writeFile(getAdminTokenPath(), JSON.stringify(payload, null, 2));
|
|
401887
401866
|
}
|
|
401888
|
-
async function promptForLogin() {
|
|
401889
|
-
if (!process.stdin.isTTY) return null;
|
|
401890
|
-
const response = await (0, import_prompts4.default)(
|
|
401891
|
-
[
|
|
401892
|
-
{
|
|
401893
|
-
type: "text",
|
|
401894
|
-
name: "email",
|
|
401895
|
-
message: "Admin email",
|
|
401896
|
-
validate: /* @__PURE__ */ __name((value) => value.includes("@") ? true : "Enter a valid email", "validate")
|
|
401897
|
-
},
|
|
401898
|
-
{
|
|
401899
|
-
type: "password",
|
|
401900
|
-
name: "password",
|
|
401901
|
-
message: "Admin password"
|
|
401902
|
-
}
|
|
401903
|
-
],
|
|
401904
|
-
{
|
|
401905
|
-
onCancel: /* @__PURE__ */ __name(() => true, "onCancel")
|
|
401906
|
-
}
|
|
401907
|
-
);
|
|
401908
|
-
if (!response.email || !response.password) {
|
|
401909
|
-
return null;
|
|
401910
|
-
}
|
|
401911
|
-
return { email: response.email, password: response.password };
|
|
401912
|
-
}
|
|
401913
401867
|
async function requestJson(baseUrl, path157, options2 = {}) {
|
|
401914
401868
|
const response = await fetch(`${baseUrl}${path157}`, options2);
|
|
401915
401869
|
const payload = await response.json().catch(() => void 0);
|
|
@@ -401925,92 +401879,6 @@ async function requestJson(baseUrl, path157, options2 = {}) {
|
|
|
401925
401879
|
function isFetchFailure(err) {
|
|
401926
401880
|
return err instanceof TypeError && err.message === "fetch failed";
|
|
401927
401881
|
}
|
|
401928
|
-
async function resolveAdminSession() {
|
|
401929
|
-
const { baseUrl, email: email2, password, token: token2 } = getAdminEnv();
|
|
401930
|
-
if (!baseUrl) return null;
|
|
401931
|
-
let authToken = token2;
|
|
401932
|
-
let loginResponse;
|
|
401933
|
-
if (!authToken) {
|
|
401934
|
-
const cached2 = await loadCachedToken(baseUrl);
|
|
401935
|
-
if (cached2?.token) {
|
|
401936
|
-
authToken = cached2.token;
|
|
401937
|
-
}
|
|
401938
|
-
}
|
|
401939
|
-
let loginEmail = email2;
|
|
401940
|
-
let loginPassword = password;
|
|
401941
|
-
if (!authToken && (!loginEmail || !loginPassword)) {
|
|
401942
|
-
const prompted = await promptForLogin();
|
|
401943
|
-
if (prompted) {
|
|
401944
|
-
loginEmail = prompted.email;
|
|
401945
|
-
loginPassword = prompted.password;
|
|
401946
|
-
}
|
|
401947
|
-
}
|
|
401948
|
-
if (!authToken && loginEmail && loginPassword) {
|
|
401949
|
-
try {
|
|
401950
|
-
loginResponse = await requestJson(baseUrl, "/api/v1/auth/login", {
|
|
401951
|
-
method: "POST",
|
|
401952
|
-
headers: { "Content-Type": "application/json" },
|
|
401953
|
-
body: JSON.stringify({ email: loginEmail, password: loginPassword })
|
|
401954
|
-
});
|
|
401955
|
-
authToken = loginResponse.token;
|
|
401956
|
-
if (authToken) {
|
|
401957
|
-
await saveCachedToken(baseUrl, authToken, loginEmail);
|
|
401958
|
-
}
|
|
401959
|
-
} catch (err) {
|
|
401960
|
-
if (isFetchFailure(err)) {
|
|
401961
|
-
console.warn(
|
|
401962
|
-
`Warning: unable to reach admin server at ${baseUrl}. Continuing without admin session.`
|
|
401963
|
-
);
|
|
401964
|
-
return null;
|
|
401965
|
-
}
|
|
401966
|
-
throw err;
|
|
401967
|
-
}
|
|
401968
|
-
}
|
|
401969
|
-
if (!authToken) {
|
|
401970
|
-
return null;
|
|
401971
|
-
}
|
|
401972
|
-
try {
|
|
401973
|
-
const configResponse = await requestJson(baseUrl, "/api/v1/user/config", {
|
|
401974
|
-
headers: {
|
|
401975
|
-
Authorization: `Bearer ${authToken}`
|
|
401976
|
-
}
|
|
401977
|
-
});
|
|
401978
|
-
const user = configResponse.user ?? loginResponse?.user;
|
|
401979
|
-
const provider = configResponse.provider ?? loginResponse?.provider ?? loginResponse?.user?.provider ?? {};
|
|
401980
|
-
return {
|
|
401981
|
-
baseUrl,
|
|
401982
|
-
token: authToken,
|
|
401983
|
-
userId: user?.id || email2 || "unknown-user",
|
|
401984
|
-
email: user?.email || email2 || "unknown",
|
|
401985
|
-
selfManaged: Boolean(user?.selfManaged),
|
|
401986
|
-
provider,
|
|
401987
|
-
controls: configResponse.controls ?? loginResponse?.controls ?? {},
|
|
401988
|
-
quota: configResponse.quota ?? loginResponse?.quota
|
|
401989
|
-
};
|
|
401990
|
-
} catch (err) {
|
|
401991
|
-
if (isFetchFailure(err)) {
|
|
401992
|
-
console.warn(
|
|
401993
|
-
`Warning: unable to reach admin server at ${baseUrl}. Continuing without admin session.`
|
|
401994
|
-
);
|
|
401995
|
-
return null;
|
|
401996
|
-
}
|
|
401997
|
-
if (err.status === 401) {
|
|
401998
|
-
try {
|
|
401999
|
-
await fs108.unlink(getAdminTokenPath());
|
|
402000
|
-
} catch {
|
|
402001
|
-
}
|
|
402002
|
-
}
|
|
402003
|
-
const payload = err.payload;
|
|
402004
|
-
if (payload?.error === "quota_exceeded") {
|
|
402005
|
-
throw new AdminQuotaError(payload.message || "Token quota exceeded", {
|
|
402006
|
-
quota: payload.quota,
|
|
402007
|
-
token: authToken,
|
|
402008
|
-
baseUrl
|
|
402009
|
-
});
|
|
402010
|
-
}
|
|
402011
|
-
throw err;
|
|
402012
|
-
}
|
|
402013
|
-
}
|
|
402014
401882
|
async function resolveAdminSessionWithCredentials(options2) {
|
|
402015
401883
|
const baseUrl = options2.baseUrl.replace(/\/$/, "");
|
|
402016
401884
|
if (!baseUrl) return null;
|
|
@@ -402092,64 +401960,6 @@ function applyAdminSessionToEnv(session) {
|
|
|
402092
401960
|
process.env["PAPERT_ADMIN_MODELS"] = JSON.stringify(models);
|
|
402093
401961
|
}
|
|
402094
401962
|
}
|
|
402095
|
-
async function reportAdminUsage(session, config2) {
|
|
402096
|
-
const metrics2 = uiTelemetryService.getMetrics();
|
|
402097
|
-
const usage2 = computeUsageFromMetrics(metrics2);
|
|
402098
|
-
const totalTokens = usage2?.total_tokens ?? (typeof usage2?.input_tokens === "number" && typeof usage2?.output_tokens === "number" ? usage2.input_tokens + usage2.output_tokens : void 0);
|
|
402099
|
-
if (!totalTokens) return;
|
|
402100
|
-
await requestJson(session.baseUrl, "/api/v1/user/usage", {
|
|
402101
|
-
method: "POST",
|
|
402102
|
-
headers: {
|
|
402103
|
-
Authorization: `Bearer ${session.token}`,
|
|
402104
|
-
"Content-Type": "application/json"
|
|
402105
|
-
},
|
|
402106
|
-
body: JSON.stringify({
|
|
402107
|
-
sessionId: config2.getSessionId(),
|
|
402108
|
-
totalTokens,
|
|
402109
|
-
promptTokens: usage2.input_tokens,
|
|
402110
|
-
completionTokens: usage2.output_tokens,
|
|
402111
|
-
model: config2.getModel(),
|
|
402112
|
-
baseUrl: config2.getContentGeneratorConfig().baseUrl
|
|
402113
|
-
})
|
|
402114
|
-
});
|
|
402115
|
-
}
|
|
402116
|
-
async function uploadAdminSession(session, config2) {
|
|
402117
|
-
const sessionId = config2.getSessionId();
|
|
402118
|
-
const chatPath = path130.join(
|
|
402119
|
-
config2.storage.getProjectTempDir(),
|
|
402120
|
-
"chats",
|
|
402121
|
-
`${sessionId}.jsonl`
|
|
402122
|
-
);
|
|
402123
|
-
let transcript;
|
|
402124
|
-
try {
|
|
402125
|
-
transcript = await fs108.readFile(chatPath, "utf-8");
|
|
402126
|
-
} catch {
|
|
402127
|
-
return;
|
|
402128
|
-
}
|
|
402129
|
-
await requestJson(session.baseUrl, "/api/v1/user/sessions", {
|
|
402130
|
-
method: "POST",
|
|
402131
|
-
headers: {
|
|
402132
|
-
Authorization: `Bearer ${session.token}`,
|
|
402133
|
-
"Content-Type": "application/json"
|
|
402134
|
-
},
|
|
402135
|
-
body: JSON.stringify({
|
|
402136
|
-
sessionId,
|
|
402137
|
-
transcript,
|
|
402138
|
-
model: config2.getModel(),
|
|
402139
|
-
baseUrl: config2.getContentGeneratorConfig().baseUrl
|
|
402140
|
-
})
|
|
402141
|
-
});
|
|
402142
|
-
}
|
|
402143
|
-
async function requestQuotaIncrease(baseUrl, token2, reason) {
|
|
402144
|
-
await requestJson(baseUrl, "/api/v1/user/quota-requests", {
|
|
402145
|
-
method: "POST",
|
|
402146
|
-
headers: {
|
|
402147
|
-
Authorization: `Bearer ${token2}`,
|
|
402148
|
-
"Content-Type": "application/json"
|
|
402149
|
-
},
|
|
402150
|
-
body: JSON.stringify({ reason })
|
|
402151
|
-
});
|
|
402152
|
-
}
|
|
402153
401963
|
var import_prompts4, AdminQuotaError;
|
|
402154
401964
|
var init_adminClient = __esm({
|
|
402155
401965
|
async "packages/cli/src/admin/adminClient.ts"() {
|
|
@@ -402173,19 +401983,12 @@ var init_adminClient = __esm({
|
|
|
402173
401983
|
this.baseUrl = options2.baseUrl;
|
|
402174
401984
|
}
|
|
402175
401985
|
};
|
|
402176
|
-
__name(getAdminEnv, "getAdminEnv");
|
|
402177
401986
|
__name(getAdminTokenPath, "getAdminTokenPath");
|
|
402178
|
-
__name(loadCachedToken, "loadCachedToken");
|
|
402179
401987
|
__name(saveCachedToken, "saveCachedToken");
|
|
402180
|
-
__name(promptForLogin, "promptForLogin");
|
|
402181
401988
|
__name(requestJson, "requestJson");
|
|
402182
401989
|
__name(isFetchFailure, "isFetchFailure");
|
|
402183
|
-
__name(resolveAdminSession, "resolveAdminSession");
|
|
402184
401990
|
__name(resolveAdminSessionWithCredentials, "resolveAdminSessionWithCredentials");
|
|
402185
401991
|
__name(applyAdminSessionToEnv, "applyAdminSessionToEnv");
|
|
402186
|
-
__name(reportAdminUsage, "reportAdminUsage");
|
|
402187
|
-
__name(uploadAdminSession, "uploadAdminSession");
|
|
402188
|
-
__name(requestQuotaIncrease, "requestQuotaIncrease");
|
|
402189
401992
|
}
|
|
402190
401993
|
});
|
|
402191
401994
|
|
|
@@ -433731,7 +433534,7 @@ var init_acpAgent = __esm({
|
|
|
433731
433534
|
name: APPROVAL_MODE_INFO[mode].name,
|
|
433732
433535
|
description: APPROVAL_MODE_INFO[mode].description
|
|
433733
433536
|
}));
|
|
433734
|
-
const version3 = "0.3.
|
|
433537
|
+
const version3 = "0.3.91";
|
|
433735
433538
|
return {
|
|
433736
433539
|
protocolVersion: PROTOCOL_VERSION,
|
|
433737
433540
|
agentInfo: {
|
|
@@ -434034,29 +433837,6 @@ async function main() {
|
|
|
434034
433837
|
migrateDeprecatedSettings(settings);
|
|
434035
433838
|
await cleanupCheckpoints();
|
|
434036
433839
|
let argv = await parseArguments(settings.merged);
|
|
434037
|
-
let adminSession = null;
|
|
434038
|
-
try {
|
|
434039
|
-
adminSession = await resolveAdminSession();
|
|
434040
|
-
if (adminSession) {
|
|
434041
|
-
applyAdminSessionToEnv(adminSession);
|
|
434042
|
-
}
|
|
434043
|
-
} catch (err) {
|
|
434044
|
-
if (err instanceof AdminQuotaError) {
|
|
434045
|
-
if (err.baseUrl && err.token) {
|
|
434046
|
-
try {
|
|
434047
|
-
await requestQuotaIncrease(
|
|
434048
|
-
err.baseUrl,
|
|
434049
|
-
err.token,
|
|
434050
|
-
"User exceeded token quota during login."
|
|
434051
|
-
);
|
|
434052
|
-
} catch {
|
|
434053
|
-
}
|
|
434054
|
-
}
|
|
434055
|
-
console.error(err.message);
|
|
434056
|
-
process.exit(1);
|
|
434057
|
-
}
|
|
434058
|
-
throw err;
|
|
434059
|
-
}
|
|
434060
433840
|
const targetCwd = argv.cwd ? path156.resolve(argv.cwd) : process.cwd();
|
|
434061
433841
|
if (argv.promptInteractive && !process.stdin.isTTY) {
|
|
434062
433842
|
console.error(
|
|
@@ -434149,15 +433929,6 @@ ${finalArgs[promptIndex + 1]}`;
|
|
|
434149
433929
|
argv,
|
|
434150
433930
|
targetCwd
|
|
434151
433931
|
);
|
|
434152
|
-
if (adminSession) {
|
|
434153
|
-
registerCleanup(async () => {
|
|
434154
|
-
try {
|
|
434155
|
-
await reportAdminUsage(adminSession, config2);
|
|
434156
|
-
await uploadAdminSession(adminSession, config2);
|
|
434157
|
-
} catch {
|
|
434158
|
-
}
|
|
434159
|
-
});
|
|
434160
|
-
}
|
|
434161
433932
|
if (config2.getListExtensions()) {
|
|
434162
433933
|
console.log("Installed extensions:");
|
|
434163
433934
|
for (const extension of extensions) {
|
|
@@ -434336,7 +434107,6 @@ var init_gemini = __esm({
|
|
|
434336
434107
|
await init_validateNonInterActiveAuth();
|
|
434337
434108
|
await init_ResumeSessionPicker();
|
|
434338
434109
|
init_deferred();
|
|
434339
|
-
await init_adminClient();
|
|
434340
434110
|
init_extensionEnablement();
|
|
434341
434111
|
init_sandboxConfig();
|
|
434342
434112
|
await init_acpAgent();
|