@kapishdima/ai-ledger 0.0.6 → 0.0.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.
Files changed (2) hide show
  1. package/dist/plugin.js +23 -9
  2. package/package.json +1 -1
package/dist/plugin.js CHANGED
@@ -3742,22 +3742,33 @@ async function deductBalance(provider, cost) {
3742
3742
  var sessions = new Map;
3743
3743
  var plugin_default = async (input) => {
3744
3744
  await initializeDatabase();
3745
+ function log(msg) {
3746
+ input.client.app.log({ body: { service: "ai-ledger", level: "info", message: msg } });
3747
+ }
3745
3748
  async function flushTurn(sessionID, state) {
3746
3749
  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
- });
3750
+ const text2 = `ai-ledger \xB7 ${state.providerID} \xB7 -$${state.totalCost.toFixed(4)} spent | $${state.lastBalance.toFixed(2)} remaining`;
3751
+ log(`flushing turn for ${sessionID}: ${text2}`);
3752
+ try {
3753
+ const res = await input.client.session.prompt({
3754
+ path: { id: sessionID },
3755
+ query: { directory: input.directory },
3756
+ body: {
3757
+ noReply: true,
3758
+ parts: [{ type: "text", text: text2 }]
3759
+ }
3760
+ });
3761
+ log(`session.prompt result: ${JSON.stringify(res)}`);
3762
+ } catch (e) {
3763
+ log(`session.prompt error: ${e?.message}`);
3764
+ }
3756
3765
  }
3757
3766
  return {
3758
3767
  event: async ({ event }) => {
3768
+ log(`event: ${event.type}`);
3759
3769
  if (event.type === "session.idle") {
3760
3770
  const sessionID = event.properties?.sessionID;
3771
+ log(`session.idle for ${sessionID}, accumulated: ${sessions.has(sessionID)}`);
3761
3772
  const state = sessions.get(sessionID);
3762
3773
  if (state)
3763
3774
  await flushTurn(sessionID, state);
@@ -3770,9 +3781,11 @@ var plugin_default = async (input) => {
3770
3781
  return;
3771
3782
  if (msg.role !== "assistant")
3772
3783
  return;
3784
+ log(`assistant message: cost=${msg.cost} provider=${msg.providerID}`);
3773
3785
  if (!msg.cost || msg.cost === 0)
3774
3786
  return;
3775
3787
  const wallet = await getWallet(msg.providerID);
3788
+ log(`wallet for ${msg.providerID}: ${wallet ? "found" : "NOT FOUND"}`);
3776
3789
  if (!wallet)
3777
3790
  return;
3778
3791
  const newBalance = await deductBalance(msg.providerID, msg.cost);
@@ -3790,6 +3803,7 @@ var plugin_default = async (input) => {
3790
3803
  const existing = sessions.get(msg.sessionID);
3791
3804
  const totalCost = (existing?.totalCost ?? 0) + msg.cost;
3792
3805
  sessions.set(msg.sessionID, { totalCost, lastBalance: newBalance, providerID: msg.providerID });
3806
+ log(`accumulated for session ${msg.sessionID}: totalCost=${totalCost}`);
3793
3807
  }
3794
3808
  };
3795
3809
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kapishdima/ai-ledger",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "AI provider balance and spending tracker for OpenCode",
5
5
  "type": "module",
6
6
  "main": "dist/plugin.js",