@kapishdima/ai-ledger 0.0.4 → 0.0.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.
Files changed (2) hide show
  1. package/dist/plugin.js +24 -11
  2. package/package.json +1 -1
package/dist/plugin.js CHANGED
@@ -3739,19 +3739,37 @@ async function deductBalance(provider, cost) {
3739
3739
  }
3740
3740
 
3741
3741
  // plugin.ts
3742
+ var sessions = new Map;
3742
3743
  var plugin_default = async (input) => {
3743
3744
  await initializeDatabase();
3745
+ async function flushTurn(sessionID, state) {
3746
+ sessions.delete(sessionID);
3747
+ const balanceSign = state.lastBalance < 0 ? "\u26A0\uFE0F " : "";
3748
+ const text2 = `\`ai-ledger\` \xB7 ${state.providerID} \u2014 **-$${state.totalCost.toFixed(4)}** spent | **$${state.lastBalance.toFixed(2)}** remaining`;
3749
+ await input.client.session.prompt({
3750
+ path: { id: sessionID },
3751
+ body: {
3752
+ noReply: true,
3753
+ parts: [{ type: "text", text: balanceSign + text2, synthetic: true }]
3754
+ }
3755
+ });
3756
+ }
3744
3757
  return {
3745
3758
  event: async ({ event }) => {
3759
+ if (event.type === "session.idle") {
3760
+ const sessionID = event.properties?.sessionID;
3761
+ const state = sessions.get(sessionID);
3762
+ if (state)
3763
+ await flushTurn(sessionID, state);
3764
+ return;
3765
+ }
3746
3766
  if (event.type !== "message.updated")
3747
3767
  return;
3748
3768
  const msg = event.properties?.info;
3749
- if (!msg)
3769
+ if (!msg?.finish)
3750
3770
  return;
3751
3771
  if (msg.role !== "assistant")
3752
3772
  return;
3753
- if (!msg.finish)
3754
- return;
3755
3773
  if (!msg.cost || msg.cost === 0)
3756
3774
  return;
3757
3775
  const wallet = await getWallet(msg.providerID);
@@ -3769,14 +3787,9 @@ var plugin_default = async (input) => {
3769
3787
  created_at: new Date().toISOString(),
3770
3788
  synced: 0
3771
3789
  });
3772
- input.client.tui.showToast({
3773
- body: {
3774
- title: `ai-ledger \xB7 ${msg.providerID}`,
3775
- message: `-$${msg.cost.toFixed(4)} | balance: $${newBalance.toFixed(2)}`,
3776
- variant: newBalance < 0 ? "warning" : "info",
3777
- duration: 4000
3778
- }
3779
- });
3790
+ const existing = sessions.get(msg.sessionID);
3791
+ const totalCost = (existing?.totalCost ?? 0) + msg.cost;
3792
+ sessions.set(msg.sessionID, { totalCost, lastBalance: newBalance, providerID: msg.providerID });
3780
3793
  }
3781
3794
  };
3782
3795
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kapishdima/ai-ledger",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "description": "AI provider balance and spending tracker for OpenCode",
5
5
  "type": "module",
6
6
  "main": "dist/plugin.js",