free-pi-cli 0.6.15 → 0.6.16
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/index.js
CHANGED
|
@@ -515,7 +515,7 @@ function folderMatches(cwd, sessionCwd) {
|
|
|
515
515
|
// package.json
|
|
516
516
|
var package_default = {
|
|
517
517
|
name: "free-pi-cli",
|
|
518
|
-
version: "0.6.
|
|
518
|
+
version: "0.6.16",
|
|
519
519
|
description: "Free AI coding agent for your terminal. Ads and a daily free allowance pay for the models; sign in with GitHub and run npx free-pi-cli.",
|
|
520
520
|
keywords: [
|
|
521
521
|
"coding agent",
|
|
@@ -7030,11 +7030,14 @@ function formatRewardStatus(r, now, columns) {
|
|
|
7030
7030
|
}
|
|
7031
7031
|
async function renderMeter(deps, ctx, opts = {}) {
|
|
7032
7032
|
const me = await fetchMe(deps);
|
|
7033
|
-
ctx.ui.setStatus(METER_STATUS_KEY, undefined);
|
|
7034
7033
|
if (!me) {
|
|
7035
|
-
|
|
7034
|
+
if (await deps.getToken() !== lastToken) {
|
|
7035
|
+
ctx.ui.setStatus(METER_STATUS_KEY, undefined);
|
|
7036
|
+
ctx.ui.setWidget(METER_WIDGET_ID, undefined);
|
|
7037
|
+
}
|
|
7036
7038
|
return;
|
|
7037
7039
|
}
|
|
7040
|
+
ctx.ui.setStatus(METER_STATUS_KEY, undefined);
|
|
7038
7041
|
const theme = ctx.ui.theme;
|
|
7039
7042
|
const reward = formatRewardStatus(me.earn_reward, opts.now ?? Date.now(), opts.columns ?? (process.stdout.columns || 80));
|
|
7040
7043
|
if (reward)
|
|
@@ -8915,10 +8918,10 @@ function createToolAliasesExtension(opts = {}) {
|
|
|
8915
8918
|
var FUSION_ID = "fusion";
|
|
8916
8919
|
var FUSION_PICKER_ID = "\uD83E\uDDE8 fusion";
|
|
8917
8920
|
var FUSION_NAME = "\uD83E\uDDE8 Fusion · DeepSeek Pro plans, Flash builds";
|
|
8918
|
-
var FUSION_FALLBACK_NAME = "\uD83E\uDDE8 Fusion ·
|
|
8921
|
+
var FUSION_FALLBACK_NAME = "\uD83E\uDDE8 Fusion · DeepSeek Flash plans and builds";
|
|
8919
8922
|
var FUSION_PLANNER_ID = "deepseek-v4-pro";
|
|
8920
8923
|
var FUSION_EXECUTOR_ID = "deepseek-v4-flash";
|
|
8921
|
-
var FUSION_FALLBACK_PLANNER_ID = "
|
|
8924
|
+
var FUSION_FALLBACK_PLANNER_ID = "deepseek-v4-flash";
|
|
8922
8925
|
function resolveFusionIds(catalogIds, server) {
|
|
8923
8926
|
const has = (id) => catalogIds.includes(id);
|
|
8924
8927
|
if (server && has(server.planner) && has(server.executor))
|
|
@@ -9200,7 +9203,7 @@ var LIMIT_CODES = new Set([
|
|
|
9200
9203
|
"context_too_long",
|
|
9201
9204
|
"reward_required"
|
|
9202
9205
|
]);
|
|
9203
|
-
var SERVER_MESSAGE_CODES = new Set(["reward_required", "premium_allowance", "model_at_capacity", "context_too_long_for_fallback", "context_too_long"]);
|
|
9206
|
+
var SERVER_MESSAGE_CODES = new Set(["concurrent", "reward_required", "premium_allowance", "model_at_capacity", "context_too_long_for_fallback", "context_too_long"]);
|
|
9204
9207
|
var FREE_OFFER_CODES = new Set(["daily_cap", "queue_wait", "rolling_cap", "premium_allowance", "model_at_capacity", "model_requires_credits"]);
|
|
9205
9208
|
var isFusion = (model) => model?.provider === PROVIDER_NAME && (model.id === FUSION_ID || model.id === FUSION_PICKER_ID);
|
|
9206
9209
|
function lastUserEntryId(ctx) {
|
|
@@ -9840,6 +9843,14 @@ function mergeAttribution(a, b) {
|
|
|
9840
9843
|
|
|
9841
9844
|
// src/changelog.ts
|
|
9842
9845
|
var CHANGELOG_HIGHLIGHTS = [
|
|
9846
|
+
{
|
|
9847
|
+
version: "0.6.16",
|
|
9848
|
+
highlights: [
|
|
9849
|
+
"New premium model: DeepSeek V4.1 Flash Ultrafast. Find it in /model as \uD83D\uDD25\uD83D\uDD25\uD83D\uDD25 ultrafast. It uses premium credits only.",
|
|
9850
|
+
"Subagents now need credits: they use premium credit, and up to 4 run at once.",
|
|
9851
|
+
"Fusion plans with DeepSeek Flash, since the Claude models are retired."
|
|
9852
|
+
]
|
|
9853
|
+
},
|
|
9843
9854
|
{
|
|
9844
9855
|
version: "0.6.15",
|
|
9845
9856
|
highlights: [
|
|
@@ -11995,12 +12006,40 @@ function createHeaderExtension(opts) {
|
|
|
11995
12006
|
};
|
|
11996
12007
|
}
|
|
11997
12008
|
|
|
12009
|
+
// src/ultrafast.ts
|
|
12010
|
+
var ULTRAFAST_THINKING_LEVELS = ["off", "minimal", "low", "medium", "high"];
|
|
12011
|
+
var ULTRAFAST_CATALOG_ID = "deepseek-v4.1-flash-1017-ultrafast";
|
|
12012
|
+
var ULTRAFAST_PICKER_ID = "\uD83D\uDD25\uD83D\uDD25\uD83D\uDD25 ultrafast";
|
|
12013
|
+
function createUltrafastExtension(model) {
|
|
12014
|
+
return {
|
|
12015
|
+
name: "free-pi-ultrafast",
|
|
12016
|
+
factory(pi) {
|
|
12017
|
+
if (!model || model.id !== ULTRAFAST_CATALOG_ID)
|
|
12018
|
+
return;
|
|
12019
|
+
pi.registerVirtualModel({
|
|
12020
|
+
provider: PROVIDER_NAME,
|
|
12021
|
+
id: ULTRAFAST_PICKER_ID,
|
|
12022
|
+
name: model.name,
|
|
12023
|
+
input: ["text"],
|
|
12024
|
+
thinkingLevels: ULTRAFAST_THINKING_LEVELS,
|
|
12025
|
+
contextWindow: CONTEXT_WINDOW,
|
|
12026
|
+
maxTokens: MAX_OUTPUT_TOKENS,
|
|
12027
|
+
route: (_request, ctx) => ({
|
|
12028
|
+
model: ctx.modelRegistry.find(PROVIDER_NAME, ULTRAFAST_CATALOG_ID),
|
|
12029
|
+
thinkingLevel: _request.thinkingLevel
|
|
12030
|
+
})
|
|
12031
|
+
});
|
|
12032
|
+
}
|
|
12033
|
+
};
|
|
12034
|
+
}
|
|
12035
|
+
|
|
11998
12036
|
// src/provider-lock.ts
|
|
11999
12037
|
function resolveFreePiScope(modelRuntime, providerName, modelIds, env = process.env) {
|
|
12000
12038
|
if (env.FREEPI_KEEP_ENV_PROVIDERS)
|
|
12001
12039
|
return [];
|
|
12002
12040
|
const scoped = [];
|
|
12003
|
-
|
|
12041
|
+
const pickerModelIds = modelIds.map((id) => id === ULTRAFAST_CATALOG_ID ? ULTRAFAST_PICKER_ID : id);
|
|
12042
|
+
for (const id of new Set([FUSION_PICKER_ID, ...pickerModelIds])) {
|
|
12004
12043
|
const model = modelRuntime.getModel(providerName, id);
|
|
12005
12044
|
if (model)
|
|
12006
12045
|
scoped.push({ model });
|
|
@@ -12032,19 +12071,22 @@ var SEND_MESSAGE_TOOL = "send_message";
|
|
|
12032
12071
|
var SUBMIT_PLAN_TOOL = "submit_plan";
|
|
12033
12072
|
var MAX_PARALLEL = 8;
|
|
12034
12073
|
var PARTICLE_ID = "particle";
|
|
12035
|
-
var REFUSAL_FALLBACK = "Subagents
|
|
12074
|
+
var REFUSAL_FALLBACK = "Subagents need credits. Run /buy-credits.";
|
|
12036
12075
|
function subagentModelId(agent, parentModelId, ids) {
|
|
12037
12076
|
if (parentModelId === PARTICLE_ID)
|
|
12038
12077
|
return PARTICLE_ID;
|
|
12039
12078
|
if (agent === "planner")
|
|
12040
12079
|
return ids.planner;
|
|
12080
|
+
if (parentModelId === ULTRAFAST_PICKER_ID)
|
|
12081
|
+
return ULTRAFAST_CATALOG_ID;
|
|
12041
12082
|
return parentModelId === FUSION_ID || parentModelId === FUSION_PICKER_ID ? ids.executor : parentModelId;
|
|
12042
12083
|
}
|
|
12043
|
-
function subagentsAvailable(
|
|
12044
|
-
return
|
|
12084
|
+
function subagentsAvailable(_modelId, hasCredit) {
|
|
12085
|
+
return hasCredit;
|
|
12045
12086
|
}
|
|
12046
|
-
|
|
12047
|
-
|
|
12087
|
+
var SUBAGENT_CONCURRENCY = 4;
|
|
12088
|
+
function subagentConcurrency(_modelId) {
|
|
12089
|
+
return SUBAGENT_CONCURRENCY;
|
|
12048
12090
|
}
|
|
12049
12091
|
function substitutePrevious(task, previous) {
|
|
12050
12092
|
return task.split("{previous}").join(previous);
|
|
@@ -14063,6 +14105,9 @@ function catalogModelsFor(opts) {
|
|
|
14063
14105
|
return [{ id, name: id }];
|
|
14064
14106
|
}
|
|
14065
14107
|
function pickerModelName(opts, id) {
|
|
14108
|
+
if (id === ULTRAFAST_PICKER_ID) {
|
|
14109
|
+
return opts.models?.find((m) => m.id === ULTRAFAST_CATALOG_ID)?.name ?? ULTRAFAST_PICKER_ID;
|
|
14110
|
+
}
|
|
14066
14111
|
return [...catalogModelsFor(opts), ...defenseModelsFor(opts)].find((m) => m.id === id)?.name;
|
|
14067
14112
|
}
|
|
14068
14113
|
function defenseModelsFor(opts) {
|
|
@@ -14261,6 +14306,7 @@ function buildRuntimeOptions(opts, sessionId) {
|
|
|
14261
14306
|
});
|
|
14262
14307
|
const extensionFactories = [
|
|
14263
14308
|
providerExtension,
|
|
14309
|
+
...models.some((m) => m.id === ULTRAFAST_CATALOG_ID) ? [createUltrafastExtension(models.find((m) => m.id === ULTRAFAST_CATALOG_ID))] : [],
|
|
14264
14310
|
createFusionExtension(models[0].id, resolveFusionIds(models.map((m) => m.id), opts.fusion)),
|
|
14265
14311
|
adsExtension,
|
|
14266
14312
|
usageToolExtension,
|
package/package.json
CHANGED