codetyper-cli 0.4.5 → 0.4.7

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
@@ -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.5"
95779
+ version: "0.4.7"
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
- return PROGRESS_BAR.FILLED_CHAR.repeat(filledWidth) + PROGRESS_BAR.EMPTY_CHAR.repeat(emptyWidth);
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
- lines.push(PROGRESS_BAR.FILLED_CHAR.repeat(PROGRESS_BAR.WIDTH) + " Unlimited");
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: props.sessionId ?? "unknown",
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();
@@ -120179,10 +120599,9 @@ var execute3 = async (options2) => {
120179
120599
  const handleCascadeToggleFn = createHandleCascadeToggle();
120180
120600
  const handleCommand3 = createHandleCommand(ctx, handleExit);
120181
120601
  const handleSubmit2 = createHandleSubmit(ctx, handleCommand3);
120182
- const isResuming = options2.continueSession || options2.resumeSession;
120183
120602
  const savedCascadeEnabled = config2.get("cascadeEnabled");
120184
120603
  const renderProps = {
120185
- sessionId: isResuming ? session.id : undefined,
120604
+ sessionId: session.id,
120186
120605
  handleSubmit: handleSubmit2,
120187
120606
  handleCommand: handleCommand3,
120188
120607
  handleModelSelect: handleModelSelectFn,
@@ -120849,4 +121268,4 @@ ${plan.steps.map((s) => `${s.id}. ${s.description}`).join(`
120849
121268
  });
120850
121269
  program2.parse(process.argv);
120851
121270
 
120852
- //# debugId=850267EE3A1DD43B64756E2164756E21
121271
+ //# debugId=DB45223ABEBC370864756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codetyper-cli",
3
- "version": "0.4.5",
3
+ "version": "0.4.7",
4
4
  "description": "CodeTyper AI Agent - Standalone CLI for autonomous code generation",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
package/src/version.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "0.4.5"
2
+ "version": "0.4.7"
3
3
  }