codetyper-cli 0.4.5 → 0.4.6
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 +455 -35
- package/package.json +1 -1
- package/src/version.json +1 -1
package/dist/index.js
CHANGED
|
@@ -66304,6 +66304,84 @@ var stripMarkdown = (text) => {
|
|
|
66304
66304
|
return result;
|
|
66305
66305
|
};
|
|
66306
66306
|
|
|
66307
|
+
// src/providers/copilot/usage.ts
|
|
66308
|
+
var COPILOT_USER_URL = "https://api.github.com/copilot_internal/user", getCopilotUsage = async () => {
|
|
66309
|
+
const oauthToken = await getOAuthToken();
|
|
66310
|
+
if (!oauthToken) {
|
|
66311
|
+
return null;
|
|
66312
|
+
}
|
|
66313
|
+
try {
|
|
66314
|
+
const response2 = await source_default2.get(COPILOT_USER_URL, {
|
|
66315
|
+
headers: {
|
|
66316
|
+
Authorization: `token ${oauthToken}`,
|
|
66317
|
+
Accept: "application/json",
|
|
66318
|
+
"User-Agent": "CodeTyper-CLI/1.0"
|
|
66319
|
+
}
|
|
66320
|
+
}).json();
|
|
66321
|
+
return response2;
|
|
66322
|
+
} catch {
|
|
66323
|
+
return null;
|
|
66324
|
+
}
|
|
66325
|
+
};
|
|
66326
|
+
var init_usage = __esm(() => {
|
|
66327
|
+
init_source4();
|
|
66328
|
+
init_token();
|
|
66329
|
+
});
|
|
66330
|
+
|
|
66331
|
+
// src/services/copilot/usage-refresh-manager.ts
|
|
66332
|
+
class UsageRefreshManager {
|
|
66333
|
+
static instance = null;
|
|
66334
|
+
intervalId = null;
|
|
66335
|
+
lastManualRefreshTime = 0;
|
|
66336
|
+
appStore = null;
|
|
66337
|
+
constructor() {}
|
|
66338
|
+
static getInstance() {
|
|
66339
|
+
if (!UsageRefreshManager.instance) {
|
|
66340
|
+
UsageRefreshManager.instance = new UsageRefreshManager;
|
|
66341
|
+
}
|
|
66342
|
+
return UsageRefreshManager.instance;
|
|
66343
|
+
}
|
|
66344
|
+
start(appStore) {
|
|
66345
|
+
this.appStore = appStore;
|
|
66346
|
+
this.stop();
|
|
66347
|
+
if (appStore.provider() !== "copilot") {
|
|
66348
|
+
return;
|
|
66349
|
+
}
|
|
66350
|
+
this.intervalId = setInterval(() => {
|
|
66351
|
+
if (this.appStore && this.appStore.provider() === "copilot") {
|
|
66352
|
+
this.appStore.fetchCopilotUsage();
|
|
66353
|
+
} else {
|
|
66354
|
+
this.stop();
|
|
66355
|
+
}
|
|
66356
|
+
}, REFRESH_INTERVAL_MS);
|
|
66357
|
+
}
|
|
66358
|
+
stop() {
|
|
66359
|
+
if (this.intervalId) {
|
|
66360
|
+
clearInterval(this.intervalId);
|
|
66361
|
+
this.intervalId = null;
|
|
66362
|
+
}
|
|
66363
|
+
}
|
|
66364
|
+
manualRefresh() {
|
|
66365
|
+
const now = Date.now();
|
|
66366
|
+
if (now - this.lastManualRefreshTime < DEBOUNCE_MS) {
|
|
66367
|
+
return;
|
|
66368
|
+
}
|
|
66369
|
+
this.lastManualRefreshTime = now;
|
|
66370
|
+
if (this.appStore) {
|
|
66371
|
+
this.appStore.fetchCopilotUsage();
|
|
66372
|
+
}
|
|
66373
|
+
}
|
|
66374
|
+
isRunning() {
|
|
66375
|
+
return this.intervalId !== null;
|
|
66376
|
+
}
|
|
66377
|
+
getAppStore() {
|
|
66378
|
+
return this.appStore;
|
|
66379
|
+
}
|
|
66380
|
+
}
|
|
66381
|
+
var REFRESH_INTERVAL_MS = 60000, DEBOUNCE_MS = 2000, getUsageRefreshManager = () => {
|
|
66382
|
+
return UsageRefreshManager.getInstance();
|
|
66383
|
+
};
|
|
66384
|
+
|
|
66307
66385
|
// src/tui-solid/context/app.tsx
|
|
66308
66386
|
var logIdCounter = 0, generateLogId = () => `log-${++logIdCounter}-${Date.now()}`, createInitialSessionStats = () => ({
|
|
66309
66387
|
startTime: Date.now(),
|
|
@@ -66333,6 +66411,8 @@ var logIdCounter = 0, generateLogId = () => `log-${++logIdCounter}-${Date.now()}
|
|
|
66333
66411
|
var init_app = __esm(async () => {
|
|
66334
66412
|
init_server();
|
|
66335
66413
|
init_server2();
|
|
66414
|
+
init_usage();
|
|
66415
|
+
init_copilot();
|
|
66336
66416
|
await init_helper();
|
|
66337
66417
|
({
|
|
66338
66418
|
provider: AppStoreProvider,
|
|
@@ -66378,7 +66458,10 @@ var init_app = __esm(async () => {
|
|
|
66378
66458
|
knowledgeCount: 0,
|
|
66379
66459
|
memoryCount: 0,
|
|
66380
66460
|
showBanner: true
|
|
66381
|
-
}
|
|
66461
|
+
},
|
|
66462
|
+
copilotUsage: null,
|
|
66463
|
+
copilotUsageLoading: false,
|
|
66464
|
+
copilotUsageLastFetch: null
|
|
66382
66465
|
});
|
|
66383
66466
|
let inputInsertFn = null;
|
|
66384
66467
|
const setInputInsertFn = (fn) => {
|
|
@@ -66423,6 +66506,9 @@ var init_app = __esm(async () => {
|
|
|
66423
66506
|
const mcpServers = () => store.mcpServers;
|
|
66424
66507
|
const modifiedFiles = () => store.modifiedFiles;
|
|
66425
66508
|
const brain = () => store.brain;
|
|
66509
|
+
const copilotUsage = () => store.copilotUsage;
|
|
66510
|
+
const copilotUsageLoading = () => store.copilotUsageLoading;
|
|
66511
|
+
const copilotUsageLastFetch = () => store.copilotUsageLastFetch;
|
|
66426
66512
|
const setMode = (newMode) => {
|
|
66427
66513
|
setStore("mode", newMode);
|
|
66428
66514
|
};
|
|
@@ -66512,6 +66598,9 @@ var init_app = __esm(async () => {
|
|
|
66512
66598
|
setStore("provider", newProvider);
|
|
66513
66599
|
setStore("model", newModel);
|
|
66514
66600
|
});
|
|
66601
|
+
if (newProvider === COPILOT_DISPLAY_NAME) {
|
|
66602
|
+
fetchCopilotUsage();
|
|
66603
|
+
}
|
|
66515
66604
|
};
|
|
66516
66605
|
const setVersion = (newVersion) => {
|
|
66517
66606
|
setStore("version", newVersion);
|
|
@@ -66605,6 +66694,33 @@ var init_app = __esm(async () => {
|
|
|
66605
66694
|
showBanner: false
|
|
66606
66695
|
});
|
|
66607
66696
|
};
|
|
66697
|
+
const setCopilotUsage = (usage) => {
|
|
66698
|
+
batch(() => {
|
|
66699
|
+
setStore("copilotUsage", usage);
|
|
66700
|
+
setStore("copilotUsageLastFetch", Date.now());
|
|
66701
|
+
});
|
|
66702
|
+
};
|
|
66703
|
+
const setCopilotUsageLoading = (loading) => {
|
|
66704
|
+
setStore("copilotUsageLoading", loading);
|
|
66705
|
+
};
|
|
66706
|
+
const fetchCopilotUsage = async () => {
|
|
66707
|
+
if (store.provider !== COPILOT_DISPLAY_NAME) {
|
|
66708
|
+
return;
|
|
66709
|
+
}
|
|
66710
|
+
const now = Date.now();
|
|
66711
|
+
if (store.copilotUsageLastFetch && now - store.copilotUsageLastFetch < 5000) {
|
|
66712
|
+
return;
|
|
66713
|
+
}
|
|
66714
|
+
setCopilotUsageLoading(true);
|
|
66715
|
+
try {
|
|
66716
|
+
const usage = await getCopilotUsage();
|
|
66717
|
+
setCopilotUsage(usage);
|
|
66718
|
+
} catch (error2) {
|
|
66719
|
+
console.error("[fetchCopilotUsage] Failed to fetch Copilot usage:", error2);
|
|
66720
|
+
} finally {
|
|
66721
|
+
setCopilotUsageLoading(false);
|
|
66722
|
+
}
|
|
66723
|
+
};
|
|
66608
66724
|
const setMcpServers = (servers) => {
|
|
66609
66725
|
setStore("mcpServers", servers);
|
|
66610
66726
|
};
|
|
@@ -66802,6 +66918,10 @@ var init_app = __esm(async () => {
|
|
|
66802
66918
|
});
|
|
66803
66919
|
}
|
|
66804
66920
|
});
|
|
66921
|
+
if (store.provider === "copilot") {
|
|
66922
|
+
const refreshManager = getUsageRefreshManager();
|
|
66923
|
+
refreshManager.manualRefresh();
|
|
66924
|
+
}
|
|
66805
66925
|
};
|
|
66806
66926
|
const cancelStreaming = () => {
|
|
66807
66927
|
if (!store.streamingLog.logId) {
|
|
@@ -66894,6 +67014,9 @@ var init_app = __esm(async () => {
|
|
|
66894
67014
|
mcpServers,
|
|
66895
67015
|
modifiedFiles,
|
|
66896
67016
|
brain,
|
|
67017
|
+
copilotUsage,
|
|
67018
|
+
copilotUsageLoading,
|
|
67019
|
+
copilotUsageLastFetch,
|
|
66897
67020
|
setMode,
|
|
66898
67021
|
setScreenMode,
|
|
66899
67022
|
setInteractionMode,
|
|
@@ -66931,6 +67054,9 @@ var init_app = __esm(async () => {
|
|
|
66931
67054
|
setBrainCounts,
|
|
66932
67055
|
setBrainShowBanner,
|
|
66933
67056
|
dismissBrainBanner,
|
|
67057
|
+
setCopilotUsage,
|
|
67058
|
+
setCopilotUsageLoading,
|
|
67059
|
+
fetchCopilotUsage,
|
|
66934
67060
|
setMcpServers,
|
|
66935
67061
|
addMcpServer,
|
|
66936
67062
|
updateMcpServerStatus,
|
|
@@ -67003,7 +67129,10 @@ var init_app = __esm(async () => {
|
|
|
67003
67129
|
knowledgeCount: 0,
|
|
67004
67130
|
memoryCount: 0,
|
|
67005
67131
|
showBanner: true
|
|
67006
|
-
}
|
|
67132
|
+
},
|
|
67133
|
+
copilotUsage: null,
|
|
67134
|
+
copilotUsageLoading: false,
|
|
67135
|
+
copilotUsageLastFetch: null
|
|
67007
67136
|
};
|
|
67008
67137
|
appStore = {
|
|
67009
67138
|
getState: () => {
|
|
@@ -67039,7 +67168,10 @@ var init_app = __esm(async () => {
|
|
|
67039
67168
|
mcpServers: storeRef.mcpServers(),
|
|
67040
67169
|
pastedImages: storeRef.pastedImages(),
|
|
67041
67170
|
modifiedFiles: storeRef.modifiedFiles(),
|
|
67042
|
-
brain: storeRef.brain()
|
|
67171
|
+
brain: storeRef.brain(),
|
|
67172
|
+
copilotUsage: storeRef.copilotUsage(),
|
|
67173
|
+
copilotUsageLoading: storeRef.copilotUsageLoading(),
|
|
67174
|
+
copilotUsageLastFetch: storeRef.copilotUsageLastFetch()
|
|
67043
67175
|
};
|
|
67044
67176
|
},
|
|
67045
67177
|
addLog: (entry) => {
|
|
@@ -95644,7 +95776,7 @@ var init_semantic_search = __esm(() => {
|
|
|
95644
95776
|
var version_default2;
|
|
95645
95777
|
var init_version2 = __esm(() => {
|
|
95646
95778
|
version_default2 = {
|
|
95647
|
-
version: "0.4.
|
|
95779
|
+
version: "0.4.6"
|
|
95648
95780
|
};
|
|
95649
95781
|
});
|
|
95650
95782
|
|
|
@@ -97984,31 +98116,7 @@ var listSessions2 = async () => {
|
|
|
97984
98116
|
init_source();
|
|
97985
98117
|
init_usage_store();
|
|
97986
98118
|
init_credentials();
|
|
97987
|
-
|
|
97988
|
-
// src/providers/copilot/usage.ts
|
|
97989
|
-
init_source4();
|
|
97990
|
-
init_token();
|
|
97991
|
-
var COPILOT_USER_URL = "https://api.github.com/copilot_internal/user";
|
|
97992
|
-
var getCopilotUsage = async () => {
|
|
97993
|
-
const oauthToken = await getOAuthToken();
|
|
97994
|
-
if (!oauthToken) {
|
|
97995
|
-
return null;
|
|
97996
|
-
}
|
|
97997
|
-
try {
|
|
97998
|
-
const response2 = await source_default2.get(COPILOT_USER_URL, {
|
|
97999
|
-
headers: {
|
|
98000
|
-
Authorization: `token ${oauthToken}`,
|
|
98001
|
-
Accept: "application/json",
|
|
98002
|
-
"User-Agent": "CodeTyper-CLI/1.0"
|
|
98003
|
-
}
|
|
98004
|
-
}).json();
|
|
98005
|
-
return response2;
|
|
98006
|
-
} catch {
|
|
98007
|
-
return null;
|
|
98008
|
-
}
|
|
98009
|
-
};
|
|
98010
|
-
|
|
98011
|
-
// src/commands/components/chat/usage/show-usage.ts
|
|
98119
|
+
init_usage();
|
|
98012
98120
|
await init_registry();
|
|
98013
98121
|
|
|
98014
98122
|
// src/utils/menu/progress-bar.ts
|
|
@@ -110768,7 +110876,33 @@ var showWhoami = async (state4, callbacks) => {
|
|
|
110768
110876
|
// src/services/chat-tui/usage.ts
|
|
110769
110877
|
init_usage_store();
|
|
110770
110878
|
init_credentials();
|
|
110879
|
+
init_usage();
|
|
110771
110880
|
init_ui();
|
|
110881
|
+
|
|
110882
|
+
// src/constants/quota-colors.ts
|
|
110883
|
+
function getQuotaStatus(percentRemaining) {
|
|
110884
|
+
if (percentRemaining >= 100) {
|
|
110885
|
+
return { status: "healthy", color: "success" };
|
|
110886
|
+
}
|
|
110887
|
+
if (percentRemaining <= 5) {
|
|
110888
|
+
return { status: "critical", color: "error" };
|
|
110889
|
+
}
|
|
110890
|
+
if (percentRemaining <= 40) {
|
|
110891
|
+
return { status: "warning", color: "warning" };
|
|
110892
|
+
}
|
|
110893
|
+
return { status: "healthy", color: "success" };
|
|
110894
|
+
}
|
|
110895
|
+
function calculatePercentRemaining(remaining, entitlement, unlimited) {
|
|
110896
|
+
if (unlimited) {
|
|
110897
|
+
return 100;
|
|
110898
|
+
}
|
|
110899
|
+
if (entitlement === 0) {
|
|
110900
|
+
return 0;
|
|
110901
|
+
}
|
|
110902
|
+
return Math.max(0, Math.min(100, remaining / entitlement * 100));
|
|
110903
|
+
}
|
|
110904
|
+
|
|
110905
|
+
// src/services/chat-tui/usage.ts
|
|
110772
110906
|
var formatNumber2 = (num) => {
|
|
110773
110907
|
return num.toLocaleString();
|
|
110774
110908
|
};
|
|
@@ -110784,11 +110918,16 @@ var formatDuration2 = (ms) => {
|
|
|
110784
110918
|
}
|
|
110785
110919
|
return `${seconds}s`;
|
|
110786
110920
|
};
|
|
110787
|
-
var renderBar = (percent) => {
|
|
110921
|
+
var renderBar = (percent, color) => {
|
|
110788
110922
|
const clampedPercent = Math.max(0, Math.min(100, percent));
|
|
110789
110923
|
const filledWidth = Math.round(clampedPercent / 100 * PROGRESS_BAR.WIDTH);
|
|
110790
110924
|
const emptyWidth = PROGRESS_BAR.WIDTH - filledWidth;
|
|
110791
|
-
|
|
110925
|
+
const filled = PROGRESS_BAR.FILLED_CHAR.repeat(filledWidth);
|
|
110926
|
+
const empty = PROGRESS_BAR.EMPTY_CHAR.repeat(emptyWidth);
|
|
110927
|
+
if (color) {
|
|
110928
|
+
return `${color}${filled}\x1B[2m${empty}\x1B[0m`;
|
|
110929
|
+
}
|
|
110930
|
+
return filled + empty;
|
|
110792
110931
|
};
|
|
110793
110932
|
var formatQuotaBar = (name, quota, resetInfo) => {
|
|
110794
110933
|
const lines = [];
|
|
@@ -110799,13 +110938,22 @@ var formatQuotaBar = (name, quota, resetInfo) => {
|
|
|
110799
110938
|
}
|
|
110800
110939
|
if (quota.unlimited) {
|
|
110801
110940
|
lines.push(name);
|
|
110802
|
-
|
|
110941
|
+
const greenColor = "\x1B[32m";
|
|
110942
|
+
lines.push(`${greenColor}${PROGRESS_BAR.FILLED_CHAR.repeat(PROGRESS_BAR.WIDTH)}\x1B[0m Unlimited`);
|
|
110803
110943
|
return lines;
|
|
110804
110944
|
}
|
|
110805
110945
|
const used = quota.entitlement - quota.remaining;
|
|
110806
110946
|
const percentUsed = quota.entitlement > 0 ? used / quota.entitlement * 100 : 0;
|
|
110947
|
+
const percentRemaining = calculatePercentRemaining(quota.remaining, quota.entitlement, quota.unlimited);
|
|
110948
|
+
const statusInfo = getQuotaStatus(percentRemaining);
|
|
110949
|
+
let ansiColor = "\x1B[32m";
|
|
110950
|
+
if (statusInfo.color === "warning") {
|
|
110951
|
+
ansiColor = "\x1B[33m";
|
|
110952
|
+
} else if (statusInfo.color === "error") {
|
|
110953
|
+
ansiColor = "\x1B[31m";
|
|
110954
|
+
}
|
|
110807
110955
|
lines.push(name);
|
|
110808
|
-
lines.push(`${renderBar(percentUsed)} ${percentUsed.toFixed(0)}% used`);
|
|
110956
|
+
lines.push(`${renderBar(percentUsed, ansiColor)} ${percentUsed.toFixed(0)}% used`);
|
|
110809
110957
|
if (resetInfo) {
|
|
110810
110958
|
lines.push(resetInfo);
|
|
110811
110959
|
}
|
|
@@ -117875,6 +118023,264 @@ await __promiseAll([
|
|
|
117875
118023
|
init_theme2(),
|
|
117876
118024
|
init_app()
|
|
117877
118025
|
]);
|
|
118026
|
+
|
|
118027
|
+
// src/tui-solid/components/panels/copilot-usage.tsx
|
|
118028
|
+
init_server();
|
|
118029
|
+
init_ui();
|
|
118030
|
+
await __promiseAll([
|
|
118031
|
+
init_solid(),
|
|
118032
|
+
init_solid(),
|
|
118033
|
+
init_solid(),
|
|
118034
|
+
init_solid(),
|
|
118035
|
+
init_solid(),
|
|
118036
|
+
init_solid(),
|
|
118037
|
+
init_solid(),
|
|
118038
|
+
init_solid(),
|
|
118039
|
+
init_core2(),
|
|
118040
|
+
init_theme2(),
|
|
118041
|
+
init_app()
|
|
118042
|
+
]);
|
|
118043
|
+
init_copilot();
|
|
118044
|
+
var QUOTA_BAR_WIDTH = 30;
|
|
118045
|
+
var formatResetDate = (dateStr) => {
|
|
118046
|
+
try {
|
|
118047
|
+
const date5 = new Date(dateStr);
|
|
118048
|
+
const month = date5.toLocaleString("en-US", {
|
|
118049
|
+
month: "short"
|
|
118050
|
+
});
|
|
118051
|
+
const day = date5.getDate();
|
|
118052
|
+
return `${month} ${day}`;
|
|
118053
|
+
} catch {
|
|
118054
|
+
return dateStr;
|
|
118055
|
+
}
|
|
118056
|
+
};
|
|
118057
|
+
var renderProgressBar2 = (percent, color) => {
|
|
118058
|
+
const clampedPercent = Math.max(0, Math.min(100, percent));
|
|
118059
|
+
const filledWidth = Math.round(clampedPercent / 100 * QUOTA_BAR_WIDTH);
|
|
118060
|
+
const emptyWidth = QUOTA_BAR_WIDTH - filledWidth;
|
|
118061
|
+
return [(() => {
|
|
118062
|
+
var _el$ = createElement("text");
|
|
118063
|
+
setProp(_el$, "fg", color);
|
|
118064
|
+
insert(_el$, () => PROGRESS_BAR.FILLED_CHAR.repeat(filledWidth));
|
|
118065
|
+
return _el$;
|
|
118066
|
+
})(), (() => {
|
|
118067
|
+
var _el$2 = createElement("text");
|
|
118068
|
+
setProp(_el$2, "fg", color);
|
|
118069
|
+
insert(_el$2, () => PROGRESS_BAR.EMPTY_CHAR.repeat(emptyWidth));
|
|
118070
|
+
effect((_$p) => setProp(_el$2, "attributes", TextAttributes.DIM, _$p));
|
|
118071
|
+
return _el$2;
|
|
118072
|
+
})()];
|
|
118073
|
+
};
|
|
118074
|
+
function CopilotQuotaBar(props) {
|
|
118075
|
+
const theme = useTheme();
|
|
118076
|
+
const quotaInfo = createMemo(() => {
|
|
118077
|
+
if (!props.quota) {
|
|
118078
|
+
return {
|
|
118079
|
+
percentRemaining: 0,
|
|
118080
|
+
percentUsed: 0,
|
|
118081
|
+
status: getQuotaStatus(0),
|
|
118082
|
+
unlimited: false,
|
|
118083
|
+
remaining: 0,
|
|
118084
|
+
total: 0
|
|
118085
|
+
};
|
|
118086
|
+
}
|
|
118087
|
+
if (props.quota.unlimited) {
|
|
118088
|
+
return {
|
|
118089
|
+
percentRemaining: 100,
|
|
118090
|
+
percentUsed: 0,
|
|
118091
|
+
status: getQuotaStatus(100),
|
|
118092
|
+
unlimited: true,
|
|
118093
|
+
remaining: 0,
|
|
118094
|
+
total: 0
|
|
118095
|
+
};
|
|
118096
|
+
}
|
|
118097
|
+
const percentRemaining = calculatePercentRemaining(props.quota.remaining, props.quota.entitlement, props.quota.unlimited);
|
|
118098
|
+
const percentUsed = 100 - percentRemaining;
|
|
118099
|
+
return {
|
|
118100
|
+
percentRemaining,
|
|
118101
|
+
percentUsed,
|
|
118102
|
+
status: getQuotaStatus(percentRemaining),
|
|
118103
|
+
unlimited: false,
|
|
118104
|
+
remaining: props.quota.remaining,
|
|
118105
|
+
total: props.quota.entitlement
|
|
118106
|
+
};
|
|
118107
|
+
});
|
|
118108
|
+
const barColor = createMemo(() => {
|
|
118109
|
+
const status = quotaInfo().status.color;
|
|
118110
|
+
if (status === "error")
|
|
118111
|
+
return theme.colors.error;
|
|
118112
|
+
if (status === "warning")
|
|
118113
|
+
return theme.colors.warning;
|
|
118114
|
+
return theme.colors.success;
|
|
118115
|
+
});
|
|
118116
|
+
return (() => {
|
|
118117
|
+
var _el$3 = createElement("box"), _el$4 = createElement("text"), _el$5 = createElement("box"), _el$6 = createElement("box");
|
|
118118
|
+
insertNode(_el$3, _el$4);
|
|
118119
|
+
insertNode(_el$3, _el$5);
|
|
118120
|
+
insertNode(_el$3, _el$6);
|
|
118121
|
+
setProp(_el$3, "flexDirection", "column");
|
|
118122
|
+
setProp(_el$3, "marginBottom", 1);
|
|
118123
|
+
insert(_el$4, () => props.label);
|
|
118124
|
+
setProp(_el$5, "flexDirection", "row");
|
|
118125
|
+
setProp(_el$5, "marginTop", 0);
|
|
118126
|
+
insert(_el$5, createComponent2(Show, {
|
|
118127
|
+
get when() {
|
|
118128
|
+
return !quotaInfo().unlimited;
|
|
118129
|
+
},
|
|
118130
|
+
get fallback() {
|
|
118131
|
+
return (() => {
|
|
118132
|
+
var _el$9 = createElement("text");
|
|
118133
|
+
insert(_el$9, () => PROGRESS_BAR.FILLED_CHAR.repeat(QUOTA_BAR_WIDTH));
|
|
118134
|
+
effect((_$p) => setProp(_el$9, "fg", theme.colors.success, _$p));
|
|
118135
|
+
return _el$9;
|
|
118136
|
+
})();
|
|
118137
|
+
},
|
|
118138
|
+
get children() {
|
|
118139
|
+
return renderProgressBar2(quotaInfo().percentUsed, barColor());
|
|
118140
|
+
}
|
|
118141
|
+
}));
|
|
118142
|
+
setProp(_el$6, "flexDirection", "row");
|
|
118143
|
+
setProp(_el$6, "marginTop", 0);
|
|
118144
|
+
insert(_el$6, createComponent2(Show, {
|
|
118145
|
+
get when() {
|
|
118146
|
+
return quotaInfo().unlimited;
|
|
118147
|
+
},
|
|
118148
|
+
get fallback() {
|
|
118149
|
+
return [(() => {
|
|
118150
|
+
var _el$0 = createElement("text"), _el$1 = createTextNode(`% left`);
|
|
118151
|
+
insertNode(_el$0, _el$1);
|
|
118152
|
+
insert(_el$0, () => Math.round(quotaInfo().percentRemaining), _el$1);
|
|
118153
|
+
effect((_$p) => setProp(_el$0, "fg", barColor(), _$p));
|
|
118154
|
+
return _el$0;
|
|
118155
|
+
})(), createComponent2(Show, {
|
|
118156
|
+
get when() {
|
|
118157
|
+
return props.showPercentage;
|
|
118158
|
+
},
|
|
118159
|
+
get children() {
|
|
118160
|
+
var _el$10 = createElement("text"), _el$11 = createTextNode(` (`), _el$13 = createTextNode(`/`), _el$14 = createTextNode(`)`);
|
|
118161
|
+
insertNode(_el$10, _el$11);
|
|
118162
|
+
insertNode(_el$10, _el$13);
|
|
118163
|
+
insertNode(_el$10, _el$14);
|
|
118164
|
+
insert(_el$10, () => quotaInfo().remaining, _el$13);
|
|
118165
|
+
insert(_el$10, () => quotaInfo().total, _el$14);
|
|
118166
|
+
effect((_$p) => setProp(_el$10, "fg", theme.colors.textDim, _$p));
|
|
118167
|
+
return _el$10;
|
|
118168
|
+
}
|
|
118169
|
+
})];
|
|
118170
|
+
},
|
|
118171
|
+
get children() {
|
|
118172
|
+
var _el$7 = createElement("text");
|
|
118173
|
+
insertNode(_el$7, createTextNode(`Unlimited`));
|
|
118174
|
+
effect((_$p) => setProp(_el$7, "fg", theme.colors.success, _$p));
|
|
118175
|
+
return _el$7;
|
|
118176
|
+
}
|
|
118177
|
+
}));
|
|
118178
|
+
effect((_$p) => setProp(_el$4, "fg", theme.colors.textDim, _$p));
|
|
118179
|
+
return _el$3;
|
|
118180
|
+
})();
|
|
118181
|
+
}
|
|
118182
|
+
function CopilotUsageSection() {
|
|
118183
|
+
const theme = useTheme();
|
|
118184
|
+
const app = useAppStore();
|
|
118185
|
+
const usage = createMemo(() => app.copilotUsage());
|
|
118186
|
+
const loading = createMemo(() => app.copilotUsageLoading());
|
|
118187
|
+
const resetDate = createMemo(() => {
|
|
118188
|
+
const u3 = usage();
|
|
118189
|
+
return u3 ? formatResetDate(u3.quota_reset_date) : "";
|
|
118190
|
+
});
|
|
118191
|
+
return createComponent2(Show, {
|
|
118192
|
+
get when() {
|
|
118193
|
+
return app.provider() === COPILOT_DISPLAY_NAME;
|
|
118194
|
+
},
|
|
118195
|
+
get children() {
|
|
118196
|
+
return [(() => {
|
|
118197
|
+
var _el$15 = createElement("box"), _el$16 = createElement("box"), _el$17 = createElement("text");
|
|
118198
|
+
insertNode(_el$15, _el$16);
|
|
118199
|
+
setProp(_el$15, "flexDirection", "column");
|
|
118200
|
+
setProp(_el$15, "marginBottom", 1);
|
|
118201
|
+
insertNode(_el$16, _el$17);
|
|
118202
|
+
setProp(_el$16, "flexDirection", "row");
|
|
118203
|
+
setProp(_el$16, "justifyContent", "space-between");
|
|
118204
|
+
insertNode(_el$17, createTextNode(`Copilot Usage`));
|
|
118205
|
+
insert(_el$16, createComponent2(Show, {
|
|
118206
|
+
get when() {
|
|
118207
|
+
return loading();
|
|
118208
|
+
},
|
|
118209
|
+
get children() {
|
|
118210
|
+
var _el$19 = createElement("text");
|
|
118211
|
+
insertNode(_el$19, createTextNode(`...`));
|
|
118212
|
+
effect((_$p) => setProp(_el$19, "fg", theme.colors.textDim, _$p));
|
|
118213
|
+
return _el$19;
|
|
118214
|
+
}
|
|
118215
|
+
}), null);
|
|
118216
|
+
insert(_el$15, createComponent2(Show, {
|
|
118217
|
+
get when() {
|
|
118218
|
+
return memo2(() => !!!loading())() && usage();
|
|
118219
|
+
},
|
|
118220
|
+
get fallback() {
|
|
118221
|
+
return (() => {
|
|
118222
|
+
var _el$28 = createElement("box"), _el$29 = createElement("text");
|
|
118223
|
+
insertNode(_el$28, _el$29);
|
|
118224
|
+
setProp(_el$28, "marginTop", 1);
|
|
118225
|
+
insert(_el$29, () => loading() ? "Loading quota..." : "Unable to fetch quota");
|
|
118226
|
+
effect((_$p) => setProp(_el$29, "fg", theme.colors.textDim, _$p));
|
|
118227
|
+
return _el$28;
|
|
118228
|
+
})();
|
|
118229
|
+
},
|
|
118230
|
+
get children() {
|
|
118231
|
+
var _el$21 = createElement("box"), _el$22 = createElement("box"), _el$23 = createElement("text"), _el$24 = createTextNode(`Resets `);
|
|
118232
|
+
insertNode(_el$21, _el$22);
|
|
118233
|
+
setProp(_el$21, "flexDirection", "column");
|
|
118234
|
+
setProp(_el$21, "marginTop", 1);
|
|
118235
|
+
insert(_el$21, createComponent2(CopilotQuotaBar, {
|
|
118236
|
+
label: "Premium Requests",
|
|
118237
|
+
get quota() {
|
|
118238
|
+
return usage()?.quota_snapshots.premium_interactions;
|
|
118239
|
+
}
|
|
118240
|
+
}), _el$22);
|
|
118241
|
+
insert(_el$21, createComponent2(CopilotQuotaBar, {
|
|
118242
|
+
label: "Chat",
|
|
118243
|
+
get quota() {
|
|
118244
|
+
return usage()?.quota_snapshots.chat;
|
|
118245
|
+
}
|
|
118246
|
+
}), _el$22);
|
|
118247
|
+
insert(_el$21, createComponent2(CopilotQuotaBar, {
|
|
118248
|
+
label: "Completions",
|
|
118249
|
+
get quota() {
|
|
118250
|
+
return usage()?.quota_snapshots.completions;
|
|
118251
|
+
}
|
|
118252
|
+
}), _el$22);
|
|
118253
|
+
insertNode(_el$22, _el$23);
|
|
118254
|
+
setProp(_el$22, "marginTop", 0);
|
|
118255
|
+
insertNode(_el$23, _el$24);
|
|
118256
|
+
insert(_el$23, resetDate, null);
|
|
118257
|
+
effect((_$p) => setProp(_el$23, "fg", theme.colors.textDim, _$p));
|
|
118258
|
+
return _el$21;
|
|
118259
|
+
}
|
|
118260
|
+
}), null);
|
|
118261
|
+
effect((_p$) => {
|
|
118262
|
+
var _v$ = theme.colors.text, _v$2 = TextAttributes.BOLD;
|
|
118263
|
+
_v$ !== _p$.e && (_p$.e = setProp(_el$17, "fg", _v$, _p$.e));
|
|
118264
|
+
_v$2 !== _p$.t && (_p$.t = setProp(_el$17, "attributes", _v$2, _p$.t));
|
|
118265
|
+
return _p$;
|
|
118266
|
+
}, {
|
|
118267
|
+
e: undefined,
|
|
118268
|
+
t: undefined
|
|
118269
|
+
});
|
|
118270
|
+
return _el$15;
|
|
118271
|
+
})(), (() => {
|
|
118272
|
+
var _el$25 = createElement("box"), _el$26 = createElement("text");
|
|
118273
|
+
insertNode(_el$25, _el$26);
|
|
118274
|
+
setProp(_el$25, "marginBottom", 1);
|
|
118275
|
+
insertNode(_el$26, createTextNode(`──────────────────────────────────`));
|
|
118276
|
+
effect((_$p) => setProp(_el$26, "fg", theme.colors.border, _$p));
|
|
118277
|
+
return _el$25;
|
|
118278
|
+
})()];
|
|
118279
|
+
}
|
|
118280
|
+
});
|
|
118281
|
+
}
|
|
118282
|
+
|
|
118283
|
+
// src/tui-solid/components/panels/activity-panel.tsx
|
|
117878
118284
|
var getFileName = (filePath2) => {
|
|
117879
118285
|
const parts = filePath2.split("/");
|
|
117880
118286
|
return parts[parts.length - 1] ?? filePath2;
|
|
@@ -117938,6 +118344,7 @@ function ActivityPanel() {
|
|
|
117938
118344
|
setProp(_el$, "paddingRight", 1);
|
|
117939
118345
|
setProp(_el$, "paddingTop", 1);
|
|
117940
118346
|
setProp(_el$, "flexShrink", 0);
|
|
118347
|
+
insert(_el$, createComponent2(CopilotUsageSection, {}), _el$2);
|
|
117941
118348
|
insertNode(_el$2, _el$3);
|
|
117942
118349
|
insertNode(_el$2, _el$5);
|
|
117943
118350
|
insertNode(_el$2, _el$10);
|
|
@@ -119157,6 +119564,7 @@ function Session(props) {
|
|
|
119157
119564
|
}
|
|
119158
119565
|
|
|
119159
119566
|
// src/tui-solid/app.tsx
|
|
119567
|
+
init_copilot();
|
|
119160
119568
|
function ErrorFallback(props) {
|
|
119161
119569
|
const theme = useTheme();
|
|
119162
119570
|
return (() => {
|
|
@@ -119203,7 +119611,7 @@ function AppContent(props) {
|
|
|
119203
119611
|
createEffect(() => {
|
|
119204
119612
|
const state4 = appStore.getState();
|
|
119205
119613
|
const summary = generateSessionSummary({
|
|
119206
|
-
sessionId:
|
|
119614
|
+
sessionId: state4.sessionId ?? "unknown",
|
|
119207
119615
|
sessionStats: state4.sessionStats,
|
|
119208
119616
|
modifiedFiles: state4.modifiedFiles,
|
|
119209
119617
|
modelName: state4.model,
|
|
@@ -119256,6 +119664,18 @@ function AppContent(props) {
|
|
|
119256
119664
|
await props.onSubmit(props.initialPrompt);
|
|
119257
119665
|
}, 100);
|
|
119258
119666
|
}
|
|
119667
|
+
createEffect(() => {
|
|
119668
|
+
const refreshManager = getUsageRefreshManager();
|
|
119669
|
+
const currentProvider = app.provider();
|
|
119670
|
+
if (currentProvider === COPILOT_DISPLAY_NAME) {
|
|
119671
|
+
refreshManager.start(app);
|
|
119672
|
+
} else {
|
|
119673
|
+
refreshManager.stop();
|
|
119674
|
+
}
|
|
119675
|
+
onCleanup(() => {
|
|
119676
|
+
refreshManager.stop();
|
|
119677
|
+
});
|
|
119678
|
+
});
|
|
119259
119679
|
useKeyboard((evt) => {
|
|
119260
119680
|
if (matchesAction(evt, "clipboard_copy")) {
|
|
119261
119681
|
copySelectionToClipboard();
|
|
@@ -120849,4 +121269,4 @@ ${plan.steps.map((s) => `${s.id}. ${s.description}`).join(`
|
|
|
120849
121269
|
});
|
|
120850
121270
|
program2.parse(process.argv);
|
|
120851
121271
|
|
|
120852
|
-
//# debugId=
|
|
121272
|
+
//# debugId=A334B0496383E8C764756E2164756E21
|
package/package.json
CHANGED
package/src/version.json
CHANGED