agent-orchestrator-kit 0.10.0 → 0.12.0

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.
@@ -5,7 +5,7 @@
5
5
  // must never block the agent loop, so every failure path exits 0 with no output.
6
6
  'use strict';
7
7
 
8
- const { existsSync, mkdirSync, appendFileSync } = require('fs');
8
+ const { mkdirSync, appendFileSync } = require('fs');
9
9
  const { join } = require('path');
10
10
 
11
11
  function numOrNull(value) {
@@ -14,14 +14,24 @@ function numOrNull(value) {
14
14
  return Number.isFinite(n) ? n : null;
15
15
  }
16
16
 
17
+ function loadCollect() {
18
+ return require('./cursor-spend-collect.cjs');
19
+ }
20
+
17
21
  function resolveBaseDir(payload) {
18
- const cwd = process.cwd();
19
- if (existsSync(join(cwd, '.agents'))) return cwd;
20
- const roots = Array.isArray(payload.workspace_roots) ? payload.workspace_roots : [];
21
- for (const root of roots) {
22
- if (root && existsSync(join(String(root), '.agents'))) return String(root);
23
- }
24
- return cwd;
22
+ try {
23
+ const collect = loadCollect();
24
+ if (typeof collect.resolveBaseDir === 'function') return collect.resolveBaseDir(payload);
25
+ } catch {}
26
+ return process.cwd();
27
+ }
28
+
29
+ function runLeftover(payload) {
30
+ try {
31
+ const collect = loadCollect();
32
+ const fn = collect.backfillLeftover || collect.main;
33
+ if (typeof fn === 'function') fn(payload);
34
+ } catch {}
25
35
  }
26
36
 
27
37
  function main(raw) {
@@ -41,7 +51,13 @@ function main(raw) {
41
51
 
42
52
  const generationId = payload.generation_id ? String(payload.generation_id) : '';
43
53
  const conversationId = payload.conversation_id ? String(payload.conversation_id) : '';
44
- const id = generationId || (conversationId ? `${conversationId}:${Date.now()}` : `cursor:${Date.now()}`);
54
+ const cacheReadTokens = numOrNull(payload.cache_read_tokens);
55
+ const id = generationId || [
56
+ conversationId || 'none',
57
+ inputTokens ?? 0,
58
+ outputTokens ?? 0,
59
+ cacheReadTokens ?? 0,
60
+ ].join(':');
45
61
 
46
62
  const record = {
47
63
  id,
@@ -51,7 +67,7 @@ function main(raw) {
51
67
  modelId: payload.model_id ? String(payload.model_id) : null,
52
68
  inputTokens,
53
69
  outputTokens,
54
- cacheReadTokens: numOrNull(payload.cache_read_tokens),
70
+ cacheReadTokens,
55
71
  cacheWriteTokens: numOrNull(payload.cache_write_tokens),
56
72
  at: new Date().toISOString(),
57
73
  };
@@ -59,6 +75,11 @@ function main(raw) {
59
75
  const spendDir = join(resolveBaseDir(payload), '.agents', 'spend');
60
76
  mkdirSync(spendDir, { recursive: true });
61
77
  appendFileSync(join(spendDir, 'cursor-usage.jsonl'), `${JSON.stringify(record)}\n`);
78
+
79
+ const event = payload.hook_event_name ? String(payload.hook_event_name) : '';
80
+ if (event === 'stop' || event === 'afterAgentResponse') {
81
+ runLeftover(payload);
82
+ }
62
83
  }
63
84
 
64
85
  let input = '';