phaibel 4.0.35 → 4.0.37

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 (56) hide show
  1. package/README.md +26 -31
  2. package/dist/commands/chat.d.ts.map +1 -1
  3. package/dist/commands/chat.js +39 -53
  4. package/dist/commands/chat.js.map +1 -1
  5. package/dist/context/context-tree-serializer.d.ts +8 -0
  6. package/dist/context/context-tree-serializer.d.ts.map +1 -0
  7. package/dist/context/context-tree-serializer.js +150 -0
  8. package/dist/context/context-tree-serializer.js.map +1 -0
  9. package/dist/context/context-tree.d.ts +67 -0
  10. package/dist/context/context-tree.d.ts.map +1 -0
  11. package/dist/context/context-tree.js +207 -0
  12. package/dist/context/context-tree.js.map +1 -0
  13. package/dist/context/scope-classifier.d.ts +9 -0
  14. package/dist/context/scope-classifier.d.ts.map +1 -0
  15. package/dist/context/scope-classifier.js +43 -0
  16. package/dist/context/scope-classifier.js.map +1 -0
  17. package/dist/feral/bootstrap.d.ts.map +1 -1
  18. package/dist/feral/bootstrap.js +9 -1
  19. package/dist/feral/bootstrap.js.map +1 -1
  20. package/dist/feral/catalog/usage-catalog-source.d.ts +7 -0
  21. package/dist/feral/catalog/usage-catalog-source.d.ts.map +1 -0
  22. package/dist/feral/catalog/usage-catalog-source.js +48 -0
  23. package/dist/feral/catalog/usage-catalog-source.js.map +1 -0
  24. package/dist/feral/node-code/data/chart-token-usage-node-code.d.ts +11 -0
  25. package/dist/feral/node-code/data/chart-token-usage-node-code.d.ts.map +1 -0
  26. package/dist/feral/node-code/data/chart-token-usage-node-code.js +130 -0
  27. package/dist/feral/node-code/data/chart-token-usage-node-code.js.map +1 -0
  28. package/dist/feral/node-code/data/query-token-usage-node-code.d.ts +10 -0
  29. package/dist/feral/node-code/data/query-token-usage-node-code.d.ts.map +1 -0
  30. package/dist/feral/node-code/data/query-token-usage-node-code.js +45 -0
  31. package/dist/feral/node-code/data/query-token-usage-node-code.js.map +1 -0
  32. package/dist/llm/providers/claude.d.ts.map +1 -1
  33. package/dist/llm/providers/claude.js +5 -0
  34. package/dist/llm/providers/claude.js.map +1 -1
  35. package/dist/llm/providers/openai.d.ts.map +1 -1
  36. package/dist/llm/providers/openai.js +9 -0
  37. package/dist/llm/providers/openai.js.map +1 -1
  38. package/dist/llm/token-usage.d.ts +39 -0
  39. package/dist/llm/token-usage.d.ts.map +1 -0
  40. package/dist/llm/token-usage.js +156 -0
  41. package/dist/llm/token-usage.js.map +1 -0
  42. package/dist/service/api-router.d.ts.map +1 -1
  43. package/dist/service/api-router.js +41 -0
  44. package/dist/service/api-router.js.map +1 -1
  45. package/dist/service/cron/scheduler.d.ts.map +1 -1
  46. package/dist/service/cron/scheduler.js +8 -0
  47. package/dist/service/cron/scheduler.js.map +1 -1
  48. package/dist/service/cron/world-model-synthesis.d.ts +22 -0
  49. package/dist/service/cron/world-model-synthesis.d.ts.map +1 -0
  50. package/dist/service/cron/world-model-synthesis.js +202 -0
  51. package/dist/service/cron/world-model-synthesis.js.map +1 -0
  52. package/dist/service/web-client.html +323 -1
  53. package/dist/service/web-server.d.ts.map +1 -1
  54. package/dist/service/web-server.js +1 -0
  55. package/dist/service/web-server.js.map +1 -1
  56. package/package.json +1 -1
@@ -0,0 +1,207 @@
1
+ // ─────────────────────────────────────────────────────────────────────────────
2
+ // Context Tree — Hierarchical vault context for LLM consumption
3
+ //
4
+ // Models the vault as: Trunk (root) → Branches (entity types) → Leaves (entities)
5
+ // with Edges connecting leaves across types. Scope controls which parts
6
+ // of the tree are materialized to stay within token budgets.
7
+ // ─────────────────────────────────────────────────────────────────────────────
8
+ import { promises as fsP } from 'fs';
9
+ import { getVaultContext, getSubdirectoryContext } from './reader.js';
10
+ import { getEntityIndex } from '../entities/entity-index.js';
11
+ import { loadEntityTypes } from '../entities/entity-type-config.js';
12
+ import { parseEntity } from '../entities/entity.js';
13
+ import { debug } from '../utils/debug.js';
14
+ // ─────────────────────────────────────────────────────────────────────────────
15
+ // CONSTANTS
16
+ // ─────────────────────────────────────────────────────────────────────────────
17
+ const MAX_LEAVES_PER_BRANCH = 50;
18
+ const MAX_FULL_CONTENT_LEAVES = 50;
19
+ // ─────────────────────────────────────────────────────────────────────────────
20
+ // BUILDER
21
+ // ─────────────────────────────────────────────────────────────────────────────
22
+ function fieldToTreeField(f) {
23
+ const tf = { key: f.key, type: f.type };
24
+ if (f.type === 'enum' && f.values)
25
+ tf.values = f.values;
26
+ return tf;
27
+ }
28
+ function indexNodeToLeaf(node, includeContent) {
29
+ return {
30
+ key: `${node.type}:${node.id}`,
31
+ title: node.title,
32
+ tags: node.tags,
33
+ summary: node.summary,
34
+ meta: node.meta,
35
+ content: includeContent,
36
+ };
37
+ }
38
+ /**
39
+ * Build the context tree trunk — always included.
40
+ */
41
+ async function buildTrunk(globals) {
42
+ const vaultContext = await getVaultContext().catch(() => '');
43
+ const index = getEntityIndex();
44
+ const stats = index.getStats();
45
+ return {
46
+ vaultContext,
47
+ globals,
48
+ stats: {
49
+ totalEntities: stats.nodeCount,
50
+ entityTypes: Object.keys(stats.byType),
51
+ },
52
+ };
53
+ }
54
+ /**
55
+ * Build a branch (entity type) with optional leaf population.
56
+ */
57
+ async function buildBranch(typeConfig, leafMode) {
58
+ const index = getEntityIndex();
59
+ const subdirContext = await getSubdirectoryContext(typeConfig.directory).catch(() => '');
60
+ const nodes = index.getNodes(typeConfig.name);
61
+ let leaves = [];
62
+ if (leafMode === 'summary') {
63
+ // Sort by recency (meta.created descending), cap at MAX_LEAVES_PER_BRANCH
64
+ const sorted = [...nodes].sort((a, b) => {
65
+ const aDate = a.meta.created || '';
66
+ const bDate = b.meta.created || '';
67
+ return bDate.localeCompare(aDate);
68
+ });
69
+ leaves = sorted.slice(0, MAX_LEAVES_PER_BRANCH).map(n => indexNodeToLeaf(n));
70
+ }
71
+ else if (leafMode === 'full') {
72
+ // Load full content from disk, capped
73
+ const sorted = [...nodes].sort((a, b) => {
74
+ const aDate = a.meta.created || '';
75
+ const bDate = b.meta.created || '';
76
+ return bDate.localeCompare(aDate);
77
+ });
78
+ const toLoad = sorted.slice(0, MAX_FULL_CONTENT_LEAVES);
79
+ leaves = await Promise.all(toLoad.map(async (n) => {
80
+ try {
81
+ const raw = await fsP.readFile(n.filepath, 'utf-8');
82
+ const { content } = parseEntity(n.filepath, raw);
83
+ return indexNodeToLeaf(n, content);
84
+ }
85
+ catch {
86
+ return indexNodeToLeaf(n);
87
+ }
88
+ }));
89
+ }
90
+ return {
91
+ entityType: typeConfig.name,
92
+ plural: typeConfig.plural,
93
+ description: typeConfig.description || '',
94
+ fields: typeConfig.fields.map(fieldToTreeField),
95
+ subdirectoryContext: subdirContext,
96
+ leafCount: nodes.length,
97
+ leaves,
98
+ };
99
+ }
100
+ /**
101
+ * Filter edges to only include those connecting included leaves.
102
+ */
103
+ function filterEdges(allEdges, includedKeys) {
104
+ return allEdges
105
+ .filter(e => includedKeys.has(e.source) && includedKeys.has(e.target))
106
+ .map(e => ({
107
+ source: e.source,
108
+ target: e.target,
109
+ edgeType: e.edgeType,
110
+ label: e.label,
111
+ }));
112
+ }
113
+ /**
114
+ * Build the full context tree based on scope.
115
+ */
116
+ export async function buildContextTree(scope, globals) {
117
+ const entityTypes = await loadEntityTypes();
118
+ const entityTypeMap = new Map(entityTypes.map(t => [t.name, t]));
119
+ const index = getEntityIndex();
120
+ // 1. Always build trunk
121
+ const trunk = await buildTrunk(globals);
122
+ // 2. Build branches based on scope
123
+ let branches = [];
124
+ const includedLeafKeys = new Set();
125
+ switch (scope.type) {
126
+ case 'trunk': {
127
+ // All branches with metadata only (no leaves)
128
+ branches = await Promise.all(entityTypes.map(t => buildBranch(t, 'none')));
129
+ break;
130
+ }
131
+ case 'branch': {
132
+ // Requested branches get leaf summaries; others get none
133
+ branches = await Promise.all(entityTypes.map(t => buildBranch(t, scope.branches.includes(t.name) ? 'summary' : 'none')));
134
+ break;
135
+ }
136
+ case 'branch-full': {
137
+ // Requested branches get full content; others get none
138
+ branches = await Promise.all(entityTypes.map(t => buildBranch(t, scope.branches.includes(t.name) ? 'full' : 'none')));
139
+ break;
140
+ }
141
+ case 'leaves': {
142
+ // Specific leaves + their branches
143
+ const leafTypes = new Set();
144
+ for (const key of scope.keys) {
145
+ const node = index.getNode(key);
146
+ if (node)
147
+ leafTypes.add(node.type);
148
+ }
149
+ // Build branches: types with requested leaves get summary, others none
150
+ branches = await Promise.all(entityTypes.map(t => buildBranch(t, leafTypes.has(t.name) ? 'summary' : 'none')));
151
+ break;
152
+ }
153
+ case 'cross': {
154
+ // Requested branches get summaries
155
+ branches = await Promise.all(entityTypes.map(t => buildBranch(t, scope.branches.includes(t.name) ? 'summary' : 'none')));
156
+ break;
157
+ }
158
+ }
159
+ // Collect all included leaf keys for edge filtering
160
+ for (const branch of branches) {
161
+ for (const leaf of branch.leaves) {
162
+ includedLeafKeys.add(leaf.key);
163
+ }
164
+ }
165
+ // 3. Filter edges to only those connecting included leaves
166
+ const edges = filterEdges(index.getAllEdges(), includedLeafKeys);
167
+ debug('context-tree', `Built tree: scope=${scope.type}, branches=${branches.length}, leaves=${includedLeafKeys.size}, edges=${edges.length}`);
168
+ return { trunk, branches, edges };
169
+ }
170
+ /**
171
+ * Expand an existing context tree with additional branches (adds leaf summaries).
172
+ * Mutates the tree in place and returns it.
173
+ */
174
+ export async function expandContextTree(tree, additionalBranches) {
175
+ const entityTypes = await loadEntityTypes();
176
+ const existingTypes = new Set(tree.branches.map(b => b.entityType));
177
+ for (const typeName of additionalBranches) {
178
+ if (existingTypes.has(typeName)) {
179
+ // Already present — upgrade from 'none' to 'summary' if needed
180
+ const existing = tree.branches.find(b => b.entityType === typeName);
181
+ if (existing.leaves.length === 0 && existing.leafCount > 0) {
182
+ const typeConfig = entityTypes.find(t => t.name === typeName);
183
+ if (typeConfig) {
184
+ const upgraded = await buildBranch(typeConfig, 'summary');
185
+ Object.assign(existing, upgraded);
186
+ }
187
+ }
188
+ continue;
189
+ }
190
+ const typeConfig = entityTypes.find(t => t.name === typeName);
191
+ if (typeConfig) {
192
+ const branch = await buildBranch(typeConfig, 'summary');
193
+ tree.branches.push(branch);
194
+ }
195
+ }
196
+ // Rebuild included leaf keys and re-filter edges
197
+ const includedLeafKeys = new Set();
198
+ for (const branch of tree.branches) {
199
+ for (const leaf of branch.leaves) {
200
+ includedLeafKeys.add(leaf.key);
201
+ }
202
+ }
203
+ const index = getEntityIndex();
204
+ tree.edges = filterEdges(index.getAllEdges(), includedLeafKeys);
205
+ return tree;
206
+ }
207
+ //# sourceMappingURL=context-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-tree.js","sourceRoot":"","sources":["../../src/context/context-tree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ContextScope } from './context-tree.js';
2
+ import type { EntityTypeConfig } from '../entities/entity-type-config.js';
3
+ import type { IndexStats } from '../entities/entity-index.js';
4
+ /**
5
+ * Classify the appropriate context scope for a user's input.
6
+ * Rules are ordered by specificity — first match wins.
7
+ */
8
+ export declare function classifyScope(userInput: string, entityTypes: EntityTypeConfig[], _stats: IndexStats): ContextScope;
9
+ //# sourceMappingURL=scope-classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-classifier.d.ts","sourceRoot":"","sources":["../../src/context/scope-classifier.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAQ9D;;;GAGG;AACH,wBAAgB,aAAa,CACzB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,gBAAgB,EAAE,EAC/B,MAAM,EAAE,UAAU,GACnB,YAAY,CAiCd"}
@@ -0,0 +1,43 @@
1
+ // ─────────────────────────────────────────────────────────────────────────────
2
+ // Scope Classifier — Heuristic scope selection for context tree
3
+ //
4
+ // Determines which parts of the context tree to materialize based on the
5
+ // user's input. Fast (sub-millisecond), no LLM call.
6
+ // ─────────────────────────────────────────────────────────────────────────────
7
+ // Keywords that suggest the user wants to see all items
8
+ const FULL_KEYWORDS = /\b(all|every|reflect|review|list|summarize|summary|overview|report|show me|audit|analyze|breakdown|digest)\b/i;
9
+ // Keywords that suggest cross-type relationships
10
+ const CROSS_KEYWORDS = /\b(relat|connect|across|between|link|depend|impact|affect|overlap)\b/i;
11
+ /**
12
+ * Classify the appropriate context scope for a user's input.
13
+ * Rules are ordered by specificity — first match wins.
14
+ */
15
+ export function classifyScope(userInput, entityTypes, _stats) {
16
+ const input = userInput.toLowerCase();
17
+ // 1. Detect which entity types are mentioned
18
+ const mentionedTypes = [];
19
+ for (const et of entityTypes) {
20
+ if (input.includes(et.name) || input.includes(et.plural)) {
21
+ mentionedTypes.push(et.name);
22
+ }
23
+ }
24
+ // 2. Cross-type keywords with multiple types mentioned
25
+ if (CROSS_KEYWORDS.test(input) && mentionedTypes.length >= 2) {
26
+ return { type: 'cross', branches: mentionedTypes };
27
+ }
28
+ // 3. Cross-type keywords without specific types → all branches
29
+ if (CROSS_KEYWORDS.test(input) && mentionedTypes.length === 0) {
30
+ return { type: 'cross', branches: entityTypes.map(t => t.name) };
31
+ }
32
+ // 4. Full keywords + type mentioned → branch-full for that type
33
+ if (FULL_KEYWORDS.test(input) && mentionedTypes.length > 0) {
34
+ return { type: 'branch-full', branches: mentionedTypes };
35
+ }
36
+ // 5. Type mentioned but no full/cross keywords → branch with summaries
37
+ if (mentionedTypes.length > 0) {
38
+ return { type: 'branch', branches: mentionedTypes };
39
+ }
40
+ // 6. Default — trunk only (lightweight for general chat)
41
+ return { type: 'trunk' };
42
+ }
43
+ //# sourceMappingURL=scope-classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-classifier.js","sourceRoot":"","sources":["../../src/context/scope-classifier.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,gEAAgE;AAChE,EAAE;AACF,yEAAyE;AACzE,qDAAqD;AACrD,gFAAgF;AAMhF,wDAAwD;AACxD,MAAM,aAAa,GAAG,+GAA+G,CAAC;AAEtI,iDAAiD;AACjD,MAAM,cAAc,GAAG,uEAAuE,CAAC;AAE/F;;;GAGG;AACH,MAAM,UAAU,aAAa,CACzB,SAAiB,EACjB,WAA+B,EAC/B,MAAkB;IAElB,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAEtC,6CAA6C;IAC7C,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;YACvD,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;IAED,uDAAuD;IACvD,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC3D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;IACvD,CAAC;IAED,+DAA+D;IAC/D,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IACrE,CAAC;IAED,gEAAgE;IAChE,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC7D,CAAC;IAED,uEAAuE;IACvE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;IACxD,CAAC;IAED,yDAAyD;IACzD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/feral/bootstrap.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAI/C,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AA2KpD;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC;CACtC;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAChC,cAAc,GAAE,aAAa,EAAO,GACrC,OAAO,CAAC,YAAY,CAAC,CA8DvB"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/feral/bootstrap.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAI/C,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAiLpD;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC;CACtC;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAChC,cAAc,GAAE,aAAa,EAAO,GACrC,OAAO,CAAC,YAAY,CAAC,CAgEvB"}
@@ -40,6 +40,8 @@ import { ReadFileNodeCode } from './node-code/data/read-file-node-code.js';
40
40
  import { LlmChatNodeCode } from './node-code/data/llm-chat-node-code.js';
41
41
  import { CleanLlmJsonNodeCode } from './node-code/data/clean-llm-json-node-code.js';
42
42
  import { WeatherNodeCode } from './node-code/data/weather-node-code.js';
43
+ import { QueryTokenUsageNodeCode } from './node-code/data/query-token-usage-node-code.js';
44
+ import { ChartTokenUsageNodeCode } from './node-code/data/chart-token-usage-node-code.js';
43
45
  // Slack node codes
44
46
  import { SlackBlockBuilderNodeCode } from './node-code/slack/slack-block-builder-node-code.js';
45
47
  import { SlackPostWebhookNodeCode } from './node-code/slack/slack-post-webhook-node-code.js';
@@ -87,6 +89,7 @@ import { OutputCatalogSource } from './catalog/output-catalog-source.js';
87
89
  import { IntrospectCatalogSource } from './catalog/introspect-catalog-source.js';
88
90
  import { PampCatalogSource } from './catalog/pamp-catalog-source.js';
89
91
  import { McpCatalogSource } from './catalog/mcp-catalog-source.js';
92
+ import { UsageCatalogSource } from './catalog/usage-catalog-source.js';
90
93
  // System & output node codes
91
94
  import { CliCommandNodeCode } from './node-code/system/cli-command-node-code.js';
92
95
  import { IntrospectNodeCode } from './node-code/system/introspect-node-code.js';
@@ -100,6 +103,7 @@ import { PromptSelectNodeCode } from './node-code/input/prompt-select-node-code.
100
103
  import { JsonProcessSource } from './process/json-process-source.js';
101
104
  // Entity type schema
102
105
  import { loadEntityTypes } from '../entities/entity-type-config.js';
106
+ import { getTrackedModels } from '../llm/token-usage.js';
103
107
  /**
104
108
  * All built-in NodeCode instances.
105
109
  */
@@ -128,6 +132,8 @@ function getBuiltInNodeCodes() {
128
132
  new LlmChatNodeCode(),
129
133
  new CleanLlmJsonNodeCode(),
130
134
  new WeatherNodeCode(),
135
+ new QueryTokenUsageNodeCode(),
136
+ new ChartTokenUsageNodeCode(),
131
137
  // Slack
132
138
  new SlackBlockBuilderNodeCode(),
133
139
  new SlackPostWebhookNodeCode(),
@@ -190,10 +196,11 @@ export async function bootstrapFeral(processSources = []) {
190
196
  ]);
191
197
  // 2. Load catalog config, entity types, and MCP tools (parallel — independent)
192
198
  const { mcpManager } = await import('../skills/mcp-manager.js');
193
- const [catalogConfig, entityTypes, mcpTools] = await Promise.all([
199
+ const [catalogConfig, entityTypes, mcpTools, trackedModels] = await Promise.all([
194
200
  loadFeralCatalogConfig(),
195
201
  loadEntityTypes(),
196
202
  mcpManager.discoverAllTools(),
203
+ getTrackedModels(),
197
204
  ]);
198
205
  // 3. Build catalog from all sources
199
206
  const catalog = new Catalog([
@@ -207,6 +214,7 @@ export async function bootstrapFeral(processSources = []) {
207
214
  new IntrospectCatalogSource(),
208
215
  new PampCatalogSource(),
209
216
  new McpCatalogSource(mcpTools),
217
+ new UsageCatalogSource(trackedModels),
210
218
  ]);
211
219
  // 4. Load process definitions from {vault}/.phaibel/processes/
212
220
  const processDir = await getProcessesDir();
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/feral/bootstrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/feral/bootstrap.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAChF,EAAE;AACF,mDAAmD;AACnD,qDAAqD;AACrD,gFAAgF;AAEhF,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAI7D,sBAAsB;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,oDAAoD,CAAC;AAChG,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAE1F,mBAAmB;AACnB,OAAO,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAC;AAC/F,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,gCAAgC,EAAE,MAAM,4DAA4D,CAAC;AAE9G,2BAA2B;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAC;AAC/F,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kDAAkD,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AAEpF,oBAAoB;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAC;AAC9F,OAAO,EAAE,uBAAuB,EAAE,MAAM,mDAAmD,CAAC;AAC5F,OAAO,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAC;AAC9F,OAAO,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAC;AAC9F,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAC;AAC9F,OAAO,EAAE,2BAA2B,EAAE,MAAM,uDAAuD,CAAC;AACpG,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAErF,kBAAkB;AAClB,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AACxF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iDAAiD,CAAC;AAC1F,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AAExF,kBAAkB;AAClB,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,6BAA6B;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AAEjF,mBAAmB;AACnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AAEpF,kBAAkB;AAClB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,qBAAqB;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;GAEG;AACH,SAAS,mBAAmB;IACxB,OAAO;QACH,OAAO;QACP,IAAI,aAAa,EAAE;QACnB,IAAI,YAAY,EAAE;QAClB,IAAI,YAAY,EAAE;QAClB,IAAI,kBAAkB,EAAE;QACxB,IAAI,0BAA0B,EAAE;QAChC,IAAI,qBAAqB,EAAE;QAC3B,IAAI,sBAAsB,EAAE;QAC5B,IAAI,kBAAkB,EAAE;QACxB,OAAO;QACP,IAAI,uBAAuB,EAAE;QAC7B,IAAI,uBAAuB,EAAE;QAC7B,IAAI,mBAAmB,EAAE;QACzB,IAAI,eAAe,EAAE;QACrB,IAAI,YAAY,EAAE;QAClB,IAAI,kBAAkB,EAAE;QACxB,IAAI,kBAAkB,EAAE;QACxB,IAAI,WAAW,EAAE;QACjB,IAAI,mBAAmB,EAAE;QACzB,IAAI,gBAAgB,EAAE;QACtB,IAAI,eAAe,EAAE;QACrB,IAAI,oBAAoB,EAAE;QAC1B,IAAI,eAAe,EAAE;QACrB,IAAI,uBAAuB,EAAE;QAC7B,IAAI,uBAAuB,EAAE;QAC7B,QAAQ;QACR,IAAI,yBAAyB,EAAE;QAC/B,IAAI,wBAAwB,EAAE;QAC9B,IAAI,gCAAgC,EAAE;QACtC,gBAAgB;QAChB,IAAI,oBAAoB,EAAE;QAC1B,IAAI,yBAAyB,EAAE;QAC/B,IAAI,iBAAiB,EAAE;QACvB,IAAI,wBAAwB,EAAE;QAC9B,IAAI,oBAAoB,EAAE;QAC1B,IAAI,mBAAmB,EAAE;QACzB,IAAI,oBAAoB,EAAE;QAC1B,IAAI,cAAc,EAAE;QACpB,IAAI,qBAAqB,EAAE;QAC3B,IAAI,oBAAoB,EAAE;QAC1B,SAAS;QACT,IAAI,oBAAoB,EAAE;QAC1B,IAAI,kBAAkB,EAAE;QACxB,IAAI,oBAAoB,EAAE;QAC1B,IAAI,wBAAwB,EAAE;QAC9B,IAAI,uBAAuB,EAAE;QAC7B,IAAI,wBAAwB,EAAE;QAC9B,IAAI,wBAAwB,EAAE;QAC9B,IAAI,oBAAoB,EAAE;QAC1B,IAAI,sBAAsB,EAAE;QAC5B,IAAI,oBAAoB,EAAE;QAC1B,IAAI,sBAAsB,EAAE;QAC5B,IAAI,oBAAoB,EAAE;QAC1B,IAAI,wBAAwB,EAAE;QAC9B,IAAI,2BAA2B,EAAE;QACjC,IAAI,sBAAsB,EAAE;QAC5B,IAAI,oBAAoB,EAAE;QAC1B,kBAAkB;QAClB,IAAI,kBAAkB,EAAE;QACxB,IAAI,kBAAkB,EAAE;QACxB,IAAI,kBAAkB,EAAE;QACxB,QAAQ;QACR,IAAI,mBAAmB,EAAE;QACzB,IAAI,oBAAoB,EAAE;QAC1B,OAAO;QACP,IAAI,gBAAgB,EAAE;QACtB,IAAI,sBAAsB,EAAE;QAC5B,IAAI,uBAAuB,EAAE;QAC7B,IAAI,sBAAsB,EAAE;QAC5B,MAAM;QACN,IAAI,mBAAmB,EAAE;KAC5B,CAAC;AACN,CAAC;AAgBD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,iBAAkC,EAAE;IAEpC,sBAAsB;IACtB,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC;QACxC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE,EAAE;KAChD,CAAC,CAAC;IAEH,+EAA+E;IAC/E,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAChE,MAAM,CAAC,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC5E,sBAAsB,EAAE;QACxB,eAAe,EAAE;QACjB,UAAU,CAAC,gBAAgB,EAAE;QAC7B,gBAAgB,EAAE;KACrB,CAAC,CAAC;IAEH,oCAAoC;IACpC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;QACxB,IAAI,oBAAoB,CAAC,eAAe,CAAC;QACzC,IAAI,iBAAiB,CAAC,aAAa,CAAC;QACpC,IAAI,kBAAkB,EAAE;QACxB,IAAI,kBAAkB,EAAE;QACxB,IAAI,mBAAmB,CAAC,WAAW,CAAC;QACpC,IAAI,mBAAmB,EAAE;QACzB,IAAI,mBAAmB,EAAE;QACzB,IAAI,uBAAuB,EAAE;QAC7B,IAAI,iBAAiB,EAAE;QACvB,IAAI,gBAAgB,CAAC,QAAQ,CAAC;QAC9B,IAAI,kBAAkB,CAAC,aAAa,CAAC;KACxC,CAAC,CAAC;IAEH,+DAA+D;IAC/D,MAAM,UAAU,GAAG,MAAM,eAAe,EAAE,CAAC;IAC3C,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,iBAAiB,CAAC,IAAI,EAAE,CAAC;IAE/B,sEAAsE;IACtE,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;IACxC,MAAM,kBAAkB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IAC1F,MAAM,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,+BAA+B;IAChE,MAAM,cAAc,GAAc,kBAAkB,CAAC,YAAY,EAAE,CAAC;IAEpE,iBAAiB;IACjB,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,eAAe,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;IAC5E,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC;IACtG,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAElD,qEAAqE;IACrE,eAAe,CAAC,QAAQ,CAAC,IAAI,qBAAqB,CAAC,cAAc,CAAC,CAAC,CAAC;IACpE,eAAe,CAAC,QAAQ,CAAC,IAAI,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC;IAEhE,uEAAuE;IACvE,MAAM,YAAY,GAAG,IAAI,iBAAiB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAEnE,OAAO;QACH,eAAe;QACf,OAAO;QACP,eAAe;QACf,MAAM;QACN,cAAc;QACd,MAAM;QACN,YAAY;QACZ,cAAc;KACjB,CAAC;AACN,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { CatalogNode } from './catalog-node.js';
2
+ export declare class UsageCatalogSource {
3
+ private models;
4
+ constructor(models: string[]);
5
+ getCatalogNodes(): CatalogNode[];
6
+ }
7
+ //# sourceMappingURL=usage-catalog-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-catalog-source.d.ts","sourceRoot":"","sources":["../../../src/feral/catalog/usage-catalog-source.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,MAAM,CAAW;gBAEb,MAAM,EAAE,MAAM,EAAE;IAI5B,eAAe,IAAI,WAAW,EAAE;CAqCnC"}
@@ -0,0 +1,48 @@
1
+ // ─────────────────────────────────────────────────────────────────────────────
2
+ // Feral CCF — Usage Catalog Source
3
+ //
4
+ // Pre-configured CatalogNodes for querying and charting LLM token usage.
5
+ // Generates a "query all" node plus per-model query nodes dynamically.
6
+ // ─────────────────────────────────────────────────────────────────────────────
7
+ export class UsageCatalogSource {
8
+ models;
9
+ constructor(models) {
10
+ this.models = models;
11
+ }
12
+ getCatalogNodes() {
13
+ const nodes = [
14
+ // Query all models (aggregate daily totals)
15
+ {
16
+ key: 'query_all_token_usage',
17
+ nodeCodeKey: 'query_token_usage',
18
+ name: 'Query All Token Usage',
19
+ group: 'data',
20
+ description: 'Queries total LLM token usage across all models for the last 30 days. Stores daily totals in context.',
21
+ configuration: { model: 'all', days: '30', context_path: 'token_usage' },
22
+ },
23
+ // Chart token usage (reads from context after a query node)
24
+ {
25
+ key: 'chart_all_token_usage',
26
+ nodeCodeKey: 'chart_token_usage',
27
+ name: 'Chart Token Usage',
28
+ group: 'data',
29
+ description: 'Renders an SVG bar chart of token usage data. Must run after a query_token_usage node. Outputs chart HTML to context.',
30
+ configuration: { context_path: 'token_usage', chart_output: 'chart_html', title: 'Token Usage (Last 30 Days)' },
31
+ },
32
+ ];
33
+ // Per-model query nodes
34
+ for (const model of this.models) {
35
+ const safeKey = model.replace(/[^a-z0-9]/gi, '_').toLowerCase();
36
+ nodes.push({
37
+ key: `query_${safeKey}_usage`,
38
+ nodeCodeKey: 'query_token_usage',
39
+ name: `Query ${model} Usage`,
40
+ group: 'data',
41
+ description: `Queries token usage for model "${model}" over the last 30 days.`,
42
+ configuration: { model, days: '30', context_path: 'token_usage' },
43
+ });
44
+ }
45
+ return nodes;
46
+ }
47
+ }
48
+ //# sourceMappingURL=usage-catalog-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-catalog-source.js","sourceRoot":"","sources":["../../../src/feral/catalog/usage-catalog-source.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,mCAAmC;AACnC,EAAE;AACF,yEAAyE;AACzE,uEAAuE;AACvE,gFAAgF;AAIhF,MAAM,OAAO,kBAAkB;IACnB,MAAM,CAAW;IAEzB,YAAY,MAAgB;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,eAAe;QACX,MAAM,KAAK,GAAkB;YACzB,4CAA4C;YAC5C;gBACI,GAAG,EAAE,uBAAuB;gBAC5B,WAAW,EAAE,mBAAmB;gBAChC,IAAI,EAAE,uBAAuB;gBAC7B,KAAK,EAAE,MAAM;gBACb,WAAW,EAAE,uGAAuG;gBACpH,aAAa,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE;aAC3E;YACD,4DAA4D;YAC5D;gBACI,GAAG,EAAE,uBAAuB;gBAC5B,WAAW,EAAE,mBAAmB;gBAChC,IAAI,EAAE,mBAAmB;gBACzB,KAAK,EAAE,MAAM;gBACb,WAAW,EAAE,uHAAuH;gBACpI,aAAa,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,4BAA4B,EAAE;aAClH;SACJ,CAAC;QAEF,wBAAwB;QACxB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;YAChE,KAAK,CAAC,IAAI,CAAC;gBACP,GAAG,EAAE,SAAS,OAAO,QAAQ;gBAC7B,WAAW,EAAE,mBAAmB;gBAChC,IAAI,EAAE,SAAS,KAAK,QAAQ;gBAC5B,KAAK,EAAE,MAAM;gBACb,WAAW,EAAE,kCAAkC,KAAK,0BAA0B;gBAC9E,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE;aACpE,CAAC,CAAC;QACP,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ"}
@@ -0,0 +1,11 @@
1
+ import type { Context } from '../../context/context.js';
2
+ import type { Result } from '../../result/result.js';
3
+ import type { ConfigurationDescription } from '../../configuration/configuration-description.js';
4
+ import { AbstractNodeCode } from '../abstract-node-code.js';
5
+ export declare class ChartTokenUsageNodeCode extends AbstractNodeCode {
6
+ static readonly configDescriptions: ConfigurationDescription[];
7
+ constructor();
8
+ process(context: Context): Promise<Result>;
9
+ private renderChart;
10
+ }
11
+ //# sourceMappingURL=chart-token-usage-node-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-token-usage-node-code.d.ts","sourceRoot":"","sources":["../../../../src/feral/node-code/data/chart-token-usage-node-code.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kDAAkD,CAAC;AACjG,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI5D,qBAAa,uBAAwB,SAAQ,gBAAgB;IACzD,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,wBAAwB,EAAE,CAI5D;;IAWI,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBhD,OAAO,CAAC,WAAW;CAwGtB"}
@@ -0,0 +1,130 @@
1
+ // ─────────────────────────────────────────────────────────────────────────────
2
+ // Feral CCF — Chart Token Usage NodeCode
3
+ //
4
+ // Reads token usage data from context and produces an SVG bar chart.
5
+ // The chart is stored in context as HTML that the web client renders inline.
6
+ // ─────────────────────────────────────────────────────────────────────────────
7
+ import { ResultStatus } from '../../result/result.js';
8
+ import { AbstractNodeCode } from '../abstract-node-code.js';
9
+ import { NodeCodeCategory } from '../node-code.js';
10
+ export class ChartTokenUsageNodeCode extends AbstractNodeCode {
11
+ static configDescriptions = [
12
+ { key: 'context_path', name: 'Context Path', description: 'Context key holding the UsageSummary[] data.', type: 'string', default: 'token_usage' },
13
+ { key: 'chart_output', name: 'Chart Output', description: 'Context key to store the rendered chart HTML.', type: 'string', default: 'chart_html' },
14
+ { key: 'title', name: 'Title', description: 'Chart title.', type: 'string', default: 'Token Usage' },
15
+ ];
16
+ constructor() {
17
+ super('chart_token_usage', 'Chart Token Usage', 'Renders a bar chart of token usage data as inline SVG.', NodeCodeCategory.DATA);
18
+ }
19
+ async process(context) {
20
+ const contextPath = this.getRequiredConfigValue('context_path', 'token_usage');
21
+ const chartOutput = this.getRequiredConfigValue('chart_output', 'chart_html');
22
+ const title = this.getRequiredConfigValue('title', 'Token Usage');
23
+ const usage = context.get(contextPath);
24
+ if (!usage || usage.length === 0) {
25
+ const emptyMsg = `<p style="color:#888;font-style:italic;">No token usage data available yet.</p>`;
26
+ context.set(chartOutput, emptyMsg);
27
+ return this.result(ResultStatus.OK, 'No usage data to chart.');
28
+ }
29
+ // Also check for per-model breakdown
30
+ const allByModel = context.get('all_usage_by_model');
31
+ const chart = this.renderChart(usage, allByModel || [], title);
32
+ context.set(chartOutput, chart);
33
+ return this.result(ResultStatus.OK, `Chart rendered with ${usage.length} data points.`);
34
+ }
35
+ renderChart(dailyTotals, allByModel, title) {
36
+ // Build daily totals bar chart
37
+ const W = 600;
38
+ const H = 280;
39
+ const PAD_LEFT = 60;
40
+ const PAD_RIGHT = 20;
41
+ const PAD_TOP = 40;
42
+ const PAD_BOTTOM = 60;
43
+ const chartW = W - PAD_LEFT - PAD_RIGHT;
44
+ const chartH = H - PAD_TOP - PAD_BOTTOM;
45
+ const maxTokens = Math.max(...dailyTotals.map(d => d.totalTokens), 1);
46
+ const barCount = dailyTotals.length;
47
+ const barGap = 2;
48
+ const barW = Math.max(4, (chartW - barGap * barCount) / barCount);
49
+ // Color palette for models
50
+ const MODEL_COLORS = {};
51
+ const PALETTE = ['#6366f1', '#f59e0b', '#10b981', '#f43f5e', '#8b5cf6', '#06b6d4', '#ec4899', '#84cc16'];
52
+ const models = [...new Set(allByModel.map(u => u.model))].sort();
53
+ models.forEach((m, i) => { MODEL_COLORS[m] = PALETTE[i % PALETTE.length]; });
54
+ // Build per-day per-model stacks
55
+ const dayMap = new Map();
56
+ for (const entry of allByModel) {
57
+ if (!dayMap.has(entry.date))
58
+ dayMap.set(entry.date, new Map());
59
+ const existing = dayMap.get(entry.date).get(entry.model) || 0;
60
+ dayMap.get(entry.date).set(entry.model, existing + entry.totalTokens);
61
+ }
62
+ let bars = '';
63
+ for (let i = 0; i < barCount; i++) {
64
+ const d = dailyTotals[i];
65
+ const x = PAD_LEFT + i * (barW + barGap);
66
+ const modelBreakdown = dayMap.get(d.date);
67
+ if (modelBreakdown && models.length > 1) {
68
+ // Stacked bar
69
+ let yOffset = 0;
70
+ for (const model of models) {
71
+ const tokens = modelBreakdown.get(model) || 0;
72
+ const segH = (tokens / maxTokens) * chartH;
73
+ const y = PAD_TOP + chartH - yOffset - segH;
74
+ bars += `<rect x="${x}" y="${y}" width="${barW}" height="${segH}" fill="${MODEL_COLORS[model]}" rx="1">` +
75
+ `<title>${d.date}\n${model}: ${tokens.toLocaleString()} tokens</title></rect>`;
76
+ yOffset += segH;
77
+ }
78
+ }
79
+ else {
80
+ // Single bar
81
+ const barH = (d.totalTokens / maxTokens) * chartH;
82
+ const y = PAD_TOP + chartH - barH;
83
+ bars += `<rect x="${x}" y="${y}" width="${barW}" height="${barH}" fill="#6366f1" rx="1">` +
84
+ `<title>${d.date}: ${d.totalTokens.toLocaleString()} tokens (${d.calls} calls)</title></rect>`;
85
+ }
86
+ // X-axis labels (every few bars to avoid crowding)
87
+ const labelInterval = Math.max(1, Math.floor(barCount / 7));
88
+ if (i % labelInterval === 0 || i === barCount - 1) {
89
+ const label = d.date.slice(5); // MM-DD
90
+ bars += `<text x="${x + barW / 2}" y="${H - PAD_BOTTOM + 16}" text-anchor="middle" ` +
91
+ `fill="#888" font-size="10" font-family="sans-serif">${label}</text>`;
92
+ }
93
+ }
94
+ // Y-axis labels
95
+ const ySteps = 4;
96
+ let yLabels = '';
97
+ for (let i = 0; i <= ySteps; i++) {
98
+ const val = Math.round((maxTokens / ySteps) * i);
99
+ const y = PAD_TOP + chartH - (i / ySteps) * chartH;
100
+ const label = val >= 1000000 ? (val / 1000000).toFixed(1) + 'M'
101
+ : val >= 1000 ? (val / 1000).toFixed(0) + 'k'
102
+ : String(val);
103
+ yLabels += `<text x="${PAD_LEFT - 8}" y="${y + 4}" text-anchor="end" fill="#888" font-size="10" font-family="sans-serif">${label}</text>`;
104
+ yLabels += `<line x1="${PAD_LEFT}" y1="${y}" x2="${W - PAD_RIGHT}" y2="${y}" stroke="#333" stroke-width="0.5"/>`;
105
+ }
106
+ // Legend (if multiple models)
107
+ let legend = '';
108
+ if (models.length > 1) {
109
+ const legendY = H - 10;
110
+ let legendX = PAD_LEFT;
111
+ for (const model of models) {
112
+ legend += `<rect x="${legendX}" y="${legendY - 8}" width="10" height="10" fill="${MODEL_COLORS[model]}" rx="2"/>`;
113
+ legend += `<text x="${legendX + 14}" y="${legendY}" fill="#ccc" font-size="10" font-family="sans-serif">${model}</text>`;
114
+ legendX += 14 + model.length * 6 + 16;
115
+ }
116
+ }
117
+ // Summary stats
118
+ const totalTokens = dailyTotals.reduce((s, d) => s + d.totalTokens, 0);
119
+ const totalCalls = dailyTotals.reduce((s, d) => s + d.calls, 0);
120
+ const avgPerDay = Math.round(totalTokens / (barCount || 1));
121
+ const svg = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${W} ${H + (models.length > 1 ? 20 : 0)}" ` +
122
+ `style="width:100%;max-width:${W}px;background:#111;border-radius:8px;padding:4px;">` +
123
+ `<text x="${W / 2}" y="24" text-anchor="middle" fill="#e8e8ef" font-size="14" font-weight="600" font-family="sans-serif">${title}</text>` +
124
+ yLabels + bars + legend +
125
+ `</svg>`;
126
+ const stats = `**${totalTokens.toLocaleString()}** total tokens | **${totalCalls.toLocaleString()}** API calls | **${avgPerDay.toLocaleString()}** avg/day`;
127
+ return svg + '\n\n' + stats;
128
+ }
129
+ }
130
+ //# sourceMappingURL=chart-token-usage-node-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-token-usage-node-code.js","sourceRoot":"","sources":["../../../../src/feral/node-code/data/chart-token-usage-node-code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Context } from '../../context/context.js';
2
+ import type { Result } from '../../result/result.js';
3
+ import type { ConfigurationDescription } from '../../configuration/configuration-description.js';
4
+ import { AbstractNodeCode } from '../abstract-node-code.js';
5
+ export declare class QueryTokenUsageNodeCode extends AbstractNodeCode {
6
+ static readonly configDescriptions: ConfigurationDescription[];
7
+ constructor();
8
+ process(context: Context): Promise<Result>;
9
+ }
10
+ //# sourceMappingURL=query-token-usage-node-code.d.ts.map