@jeffreyjyz/opencode-command-code 0.3.10 → 0.3.11

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
@@ -4063,7 +4063,7 @@ var commandCodeV2 = {
4063
4063
  // package.json
4064
4064
  var package_default = {
4065
4065
  name: "@jeffreyjyz/opencode-command-code",
4066
- version: "0.3.10",
4066
+ version: "0.3.11",
4067
4067
  description: "Command Code provider + usage dashboard for opencode: two providers (Anthropic wire for Claude, OpenAI wire for everything else) against api.commandcode.ai, live model list, plan gating, /cmd-usage. Requires the cmduse CLI for usage rendering.",
4068
4068
  type: "module",
4069
4069
  main: "dist/index.js",
@@ -1,4 +1,4 @@
1
- import { type SidebarRow, type Usage } from "./rows";
1
+ import { type ModelUsage, type SidebarRow, type Usage } from "./rows";
2
2
  /** Which provider a session is on, as far as this panel is concerned. */
3
3
  export type SessionKind = "ours" | "other" | "unknown";
4
4
  /**
@@ -11,4 +11,15 @@ export declare function sessionKind(providerID: string | undefined): SessionKind
11
11
  export declare function rememberSnapshot(snapshot: Usage): void;
12
12
  /** Rows to paint before this panel's first fetch of the session completes. */
13
13
  export declare function seededRows(): SidebarRow[];
14
+ /**
15
+ * Keep the last figure for a model. Keyed canonically because the session's id
16
+ * and the stored `modelID` differ by vendor prefix and punctuation.
17
+ */
18
+ export declare function rememberModelUsage(id: string, usage: ModelUsage): void;
19
+ /**
20
+ * The remembered figure for `id`, or undefined when that model is unseen. An
21
+ * undefined id is the frame during a session switch: keeping the previous row up
22
+ * beats blanking it, the same call `wasOurs` makes for the account block.
23
+ */
24
+ export declare function seededModelUsage(id: string | undefined): ModelUsage | undefined;
14
25
  export declare function useRows(activeModelId: () => string | undefined, providerID: () => string | undefined): import("solid-js").Accessor<SidebarRow[]>;
package/dist/tui.js CHANGED
@@ -2021,19 +2021,40 @@ function rememberSnapshot(snapshot) {
2021
2021
  function seededRows() {
2022
2022
  return lastSnapshot ? usageRows(lastSnapshot) : [];
2023
2023
  }
2024
+ var lastModelUsage;
2025
+ function rememberModelUsage(id, usage) {
2026
+ lastModelUsage = {
2027
+ key: modelKey(id),
2028
+ usage
2029
+ };
2030
+ }
2031
+ function seededModelUsage(id) {
2032
+ if (!lastModelUsage)
2033
+ return;
2034
+ if (id === undefined)
2035
+ return lastModelUsage.usage;
2036
+ return lastModelUsage.key === modelKey(id) ? lastModelUsage.usage : undefined;
2037
+ }
2024
2038
  function useRows(activeModelId, providerID) {
2025
2039
  const [usage, setUsage] = createSignal(seededRows());
2026
2040
  const [meta, setMeta] = createSignal(new Map);
2027
- const [modelUsage, setModelUsage] = createSignal();
2041
+ const [modelUsage, setModelUsage] = createSignal(lastModelUsage);
2028
2042
  const [wasOurs, setWasOurs] = createSignal(false);
2029
2043
  loadMeta().then(setMeta).catch(() => {});
2044
+ const refreshModelUsage = (id, sinceMs) => {
2045
+ if (!id)
2046
+ return;
2047
+ const fresh = loadModelUsage(id, sinceMs);
2048
+ if (fresh)
2049
+ rememberModelUsage(id, fresh);
2050
+ setModelUsage(lastModelUsage);
2051
+ };
2030
2052
  const refresh = async () => {
2031
2053
  try {
2032
2054
  const snapshot = await loadUsage();
2033
2055
  rememberSnapshot(snapshot);
2034
2056
  setUsage(usageRows(snapshot));
2035
- const id = activeModelId();
2036
- setModelUsage(id ? loadModelUsage(id, periodStart(snapshot)) ?? undefined : undefined);
2057
+ refreshModelUsage(activeModelId(), periodStart(snapshot));
2037
2058
  } catch {}
2038
2059
  };
2039
2060
  createEffect(() => {
@@ -2045,6 +2066,19 @@ function useRows(activeModelId, providerID) {
2045
2066
  const timer = setInterval(() => void refresh(), POLL_MS);
2046
2067
  onCleanup(() => clearInterval(timer));
2047
2068
  });
2069
+ createEffect(() => {
2070
+ const id = activeModelId();
2071
+ if (sessionKind(providerID()) !== "ours" || !id)
2072
+ return;
2073
+ refreshModelUsage(id, periodStart(lastSnapshot ?? {}));
2074
+ });
2075
+ const usageFor = (id) => {
2076
+ const seen = modelUsage();
2077
+ if (seen && (id === undefined || seen.key === modelKey(id))) {
2078
+ return seen.usage;
2079
+ }
2080
+ return seededModelUsage(id);
2081
+ };
2048
2082
  return createMemo(() => {
2049
2083
  const kind = sessionKind(providerID());
2050
2084
  if (kind === "other")
@@ -2058,7 +2092,7 @@ function useRows(activeModelId, providerID) {
2058
2092
  tier: found.tier ?? (id ? tierFor(id) : undefined),
2059
2093
  minPlan: id ? minPlan(id) : undefined
2060
2094
  } : undefined;
2061
- return [...usage(), separator(), ...modelRows(model, modelUsage())];
2095
+ return [...usage(), separator(), ...modelRows(model, usageFor(id))];
2062
2096
  });
2063
2097
  }
2064
2098
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jeffreyjyz/opencode-command-code",
3
- "version": "0.3.10",
3
+ "version": "0.3.11",
4
4
  "description": "Command Code provider + usage dashboard for opencode: two providers (Anthropic wire for Claude, OpenAI wire for everything else) against api.commandcode.ai, live model list, plan gating, /cmd-usage. Requires the cmduse CLI for usage rendering.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",