@hailer/mcp 0.0.1

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 (163) hide show
  1. package/.claude/commands/tool-builder.md +37 -0
  2. package/.claude/commands/ws-pull.md +44 -0
  3. package/.claude/settings.json +8 -0
  4. package/.claude/settings.local.json +49 -0
  5. package/.claude/skills/activity-api/SKILL.md +96 -0
  6. package/.claude/skills/activity-api/references/activity-endpoints.md +845 -0
  7. package/.claude/skills/add-app-member-skill/SKILL.md +977 -0
  8. package/.claude/skills/agent-building/SKILL.md +243 -0
  9. package/.claude/skills/agent-building/references/architecture-patterns.md +446 -0
  10. package/.claude/skills/agent-building/references/code-examples.md +587 -0
  11. package/.claude/skills/agent-building/references/implementation-guide.md +619 -0
  12. package/.claude/skills/app-api/SKILL.md +219 -0
  13. package/.claude/skills/app-api/references/app-endpoints.md +759 -0
  14. package/.claude/skills/building-hailer-apps-skill/SKILL.md +548 -0
  15. package/.claude/skills/create-app-skill/SKILL.md +1101 -0
  16. package/.claude/skills/create-insight-skill/SKILL.md +1317 -0
  17. package/.claude/skills/get-insight-data-skill/SKILL.md +1053 -0
  18. package/.claude/skills/hailer-api/SKILL.md +283 -0
  19. package/.claude/skills/hailer-api/references/activities.md +620 -0
  20. package/.claude/skills/hailer-api/references/authentication.md +216 -0
  21. package/.claude/skills/hailer-api/references/datasets.md +437 -0
  22. package/.claude/skills/hailer-api/references/files.md +301 -0
  23. package/.claude/skills/hailer-api/references/insights.md +469 -0
  24. package/.claude/skills/hailer-api/references/workflows.md +720 -0
  25. package/.claude/skills/hailer-api/references/workspaces-users.md +445 -0
  26. package/.claude/skills/insight-api/SKILL.md +185 -0
  27. package/.claude/skills/insight-api/references/insight-endpoints.md +514 -0
  28. package/.claude/skills/install-workflow-skill/SKILL.md +1056 -0
  29. package/.claude/skills/list-apps-skill/SKILL.md +1010 -0
  30. package/.claude/skills/list-workflows-minimal-skill/SKILL.md +992 -0
  31. package/.claude/skills/local-first-skill/SKILL.md +570 -0
  32. package/.claude/skills/mcp-tools/SKILL.md +419 -0
  33. package/.claude/skills/mcp-tools/references/api-endpoints.md +499 -0
  34. package/.claude/skills/mcp-tools/references/data-structures.md +554 -0
  35. package/.claude/skills/mcp-tools/references/implementation-patterns.md +717 -0
  36. package/.claude/skills/preview-insight-skill/SKILL.md +1290 -0
  37. package/.claude/skills/publish-hailer-app-skill/SKILL.md +453 -0
  38. package/.claude/skills/remove-app-member-skill/SKILL.md +671 -0
  39. package/.claude/skills/remove-app-skill/SKILL.md +985 -0
  40. package/.claude/skills/remove-insight-skill/SKILL.md +1011 -0
  41. package/.claude/skills/remove-workflow-skill/SKILL.md +920 -0
  42. package/.claude/skills/scaffold-hailer-app-skill/SKILL.md +1034 -0
  43. package/.claude/skills/skill-testing/README.md +137 -0
  44. package/.claude/skills/skill-testing/SKILL.md +348 -0
  45. package/.claude/skills/skill-testing/references/test-patterns.md +705 -0
  46. package/.claude/skills/skill-testing/references/testing-guide.md +603 -0
  47. package/.claude/skills/skill-testing/references/validation-checklist.md +537 -0
  48. package/.claude/skills/tool-builder/SKILL.md +328 -0
  49. package/.claude/skills/update-app-skill/SKILL.md +970 -0
  50. package/.claude/skills/update-workflow-field-skill/SKILL.md +1098 -0
  51. package/.env.example +81 -0
  52. package/.mcp.json +13 -0
  53. package/README.md +297 -0
  54. package/dist/app.d.ts +4 -0
  55. package/dist/app.js +74 -0
  56. package/dist/cli.d.ts +3 -0
  57. package/dist/cli.js +5 -0
  58. package/dist/client/adaptive-documentation-bot.d.ts +108 -0
  59. package/dist/client/adaptive-documentation-bot.js +475 -0
  60. package/dist/client/adaptive-documentation-types.d.ts +66 -0
  61. package/dist/client/adaptive-documentation-types.js +9 -0
  62. package/dist/client/agent-activity-bot.d.ts +51 -0
  63. package/dist/client/agent-activity-bot.js +166 -0
  64. package/dist/client/agent-tracker.d.ts +499 -0
  65. package/dist/client/agent-tracker.js +659 -0
  66. package/dist/client/description-updater.d.ts +56 -0
  67. package/dist/client/description-updater.js +259 -0
  68. package/dist/client/log-parser.d.ts +72 -0
  69. package/dist/client/log-parser.js +387 -0
  70. package/dist/client/mcp-client.d.ts +50 -0
  71. package/dist/client/mcp-client.js +532 -0
  72. package/dist/client/message-processor.d.ts +35 -0
  73. package/dist/client/message-processor.js +352 -0
  74. package/dist/client/multi-bot-manager.d.ts +24 -0
  75. package/dist/client/multi-bot-manager.js +74 -0
  76. package/dist/client/providers/anthropic-provider.d.ts +19 -0
  77. package/dist/client/providers/anthropic-provider.js +631 -0
  78. package/dist/client/providers/llm-provider.d.ts +47 -0
  79. package/dist/client/providers/llm-provider.js +367 -0
  80. package/dist/client/providers/openai-provider.d.ts +23 -0
  81. package/dist/client/providers/openai-provider.js +621 -0
  82. package/dist/client/simple-llm-caller.d.ts +19 -0
  83. package/dist/client/simple-llm-caller.js +100 -0
  84. package/dist/client/skill-generator.d.ts +81 -0
  85. package/dist/client/skill-generator.js +386 -0
  86. package/dist/client/test-adaptive-bot.d.ts +9 -0
  87. package/dist/client/test-adaptive-bot.js +82 -0
  88. package/dist/client/token-pricing.d.ts +38 -0
  89. package/dist/client/token-pricing.js +127 -0
  90. package/dist/client/token-tracker.d.ts +232 -0
  91. package/dist/client/token-tracker.js +457 -0
  92. package/dist/client/token-usage-bot.d.ts +53 -0
  93. package/dist/client/token-usage-bot.js +153 -0
  94. package/dist/client/tool-executor.d.ts +69 -0
  95. package/dist/client/tool-executor.js +159 -0
  96. package/dist/client/tool-schema-loader.d.ts +60 -0
  97. package/dist/client/tool-schema-loader.js +178 -0
  98. package/dist/client/types.d.ts +69 -0
  99. package/dist/client/types.js +7 -0
  100. package/dist/config.d.ts +162 -0
  101. package/dist/config.js +296 -0
  102. package/dist/core.d.ts +26 -0
  103. package/dist/core.js +147 -0
  104. package/dist/lib/context-manager.d.ts +111 -0
  105. package/dist/lib/context-manager.js +431 -0
  106. package/dist/lib/logger.d.ts +74 -0
  107. package/dist/lib/logger.js +277 -0
  108. package/dist/lib/materialize.d.ts +3 -0
  109. package/dist/lib/materialize.js +101 -0
  110. package/dist/lib/normalizedName.d.ts +7 -0
  111. package/dist/lib/normalizedName.js +48 -0
  112. package/dist/lib/prompt-length-manager.d.ts +81 -0
  113. package/dist/lib/prompt-length-manager.js +457 -0
  114. package/dist/lib/terminal-prompt.d.ts +9 -0
  115. package/dist/lib/terminal-prompt.js +108 -0
  116. package/dist/mcp/UserContextCache.d.ts +56 -0
  117. package/dist/mcp/UserContextCache.js +163 -0
  118. package/dist/mcp/auth.d.ts +2 -0
  119. package/dist/mcp/auth.js +29 -0
  120. package/dist/mcp/hailer-clients.d.ts +42 -0
  121. package/dist/mcp/hailer-clients.js +246 -0
  122. package/dist/mcp/signal-handler.d.ts +45 -0
  123. package/dist/mcp/signal-handler.js +317 -0
  124. package/dist/mcp/tool-registry.d.ts +100 -0
  125. package/dist/mcp/tool-registry.js +306 -0
  126. package/dist/mcp/tools/activity.d.ts +15 -0
  127. package/dist/mcp/tools/activity.js +955 -0
  128. package/dist/mcp/tools/app.d.ts +20 -0
  129. package/dist/mcp/tools/app.js +1488 -0
  130. package/dist/mcp/tools/discussion.d.ts +19 -0
  131. package/dist/mcp/tools/discussion.js +950 -0
  132. package/dist/mcp/tools/file.d.ts +15 -0
  133. package/dist/mcp/tools/file.js +119 -0
  134. package/dist/mcp/tools/insight.d.ts +17 -0
  135. package/dist/mcp/tools/insight.js +806 -0
  136. package/dist/mcp/tools/skill.d.ts +10 -0
  137. package/dist/mcp/tools/skill.js +279 -0
  138. package/dist/mcp/tools/user.d.ts +10 -0
  139. package/dist/mcp/tools/user.js +108 -0
  140. package/dist/mcp/tools/workflow-template.d.ts +19 -0
  141. package/dist/mcp/tools/workflow-template.js +822 -0
  142. package/dist/mcp/tools/workflow.d.ts +18 -0
  143. package/dist/mcp/tools/workflow.js +1362 -0
  144. package/dist/mcp/utils/api-errors.d.ts +45 -0
  145. package/dist/mcp/utils/api-errors.js +160 -0
  146. package/dist/mcp/utils/data-transformers.d.ts +102 -0
  147. package/dist/mcp/utils/data-transformers.js +194 -0
  148. package/dist/mcp/utils/file-upload.d.ts +33 -0
  149. package/dist/mcp/utils/file-upload.js +148 -0
  150. package/dist/mcp/utils/hailer-api-client.d.ts +120 -0
  151. package/dist/mcp/utils/hailer-api-client.js +323 -0
  152. package/dist/mcp/utils/index.d.ts +13 -0
  153. package/dist/mcp/utils/index.js +39 -0
  154. package/dist/mcp/utils/logger.d.ts +42 -0
  155. package/dist/mcp/utils/logger.js +103 -0
  156. package/dist/mcp/utils/types.d.ts +286 -0
  157. package/dist/mcp/utils/types.js +7 -0
  158. package/dist/mcp/workspace-cache.d.ts +42 -0
  159. package/dist/mcp/workspace-cache.js +97 -0
  160. package/dist/mcp-server.d.ts +42 -0
  161. package/dist/mcp-server.js +280 -0
  162. package/package.json +56 -0
  163. package/tsconfig.json +23 -0
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ /**
3
+ * Token Pricing Utility
4
+ *
5
+ * Calculates cost estimates for LLM API usage based on token consumption.
6
+ * Pricing data is accurate as of January 2025 and should be updated periodically.
7
+ *
8
+ * Anthropic pricing: https://www.anthropic.com/pricing
9
+ * OpenAI pricing: https://openai.com/pricing
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.calculateTokenCost = calculateTokenCost;
13
+ /**
14
+ * Pricing table for supported models
15
+ * All prices are per 1 million tokens in USD
16
+ */
17
+ const MODEL_PRICING = {
18
+ // Anthropic Claude models
19
+ 'claude-3-5-sonnet-20241022': {
20
+ input: 3.00,
21
+ output: 15.00,
22
+ cacheWrite: 3.75,
23
+ cacheRead: 0.30,
24
+ },
25
+ 'claude-3-5-sonnet-20240620': {
26
+ input: 3.00,
27
+ output: 15.00,
28
+ cacheWrite: 3.75,
29
+ cacheRead: 0.30,
30
+ },
31
+ 'claude-sonnet-4-20250514': {
32
+ input: 3.00,
33
+ output: 15.00,
34
+ cacheWrite: 3.75,
35
+ cacheRead: 0.30,
36
+ },
37
+ 'claude-3-5-haiku-20241022': {
38
+ input: 0.80,
39
+ output: 4.00,
40
+ cacheWrite: 1.00,
41
+ cacheRead: 0.08,
42
+ },
43
+ 'claude-3-opus-20240229': {
44
+ input: 15.00,
45
+ output: 75.00,
46
+ cacheWrite: 18.75,
47
+ cacheRead: 1.50,
48
+ },
49
+ // OpenAI GPT-4 models
50
+ 'gpt-4o': {
51
+ input: 2.50,
52
+ output: 10.00,
53
+ },
54
+ 'gpt-4o-mini': {
55
+ input: 0.15,
56
+ output: 0.60,
57
+ },
58
+ 'gpt-4-turbo': {
59
+ input: 10.00,
60
+ output: 30.00,
61
+ },
62
+ 'gpt-4': {
63
+ input: 30.00,
64
+ output: 60.00,
65
+ },
66
+ // Default fallback pricing (conservative estimate)
67
+ 'default': {
68
+ input: 3.00,
69
+ output: 15.00,
70
+ },
71
+ };
72
+ /**
73
+ * Normalize model name to match pricing table
74
+ * Handles version suffixes and aliases
75
+ */
76
+ function normalizeModelName(model) {
77
+ const normalized = model.toLowerCase();
78
+ // Check for exact match first
79
+ if (MODEL_PRICING[normalized]) {
80
+ return normalized;
81
+ }
82
+ // Check for partial matches (e.g., "claude-3-5-sonnet" matches "claude-3-5-sonnet-20241022")
83
+ for (const pricingModel of Object.keys(MODEL_PRICING)) {
84
+ if (normalized.includes(pricingModel) || pricingModel.includes(normalized)) {
85
+ return pricingModel;
86
+ }
87
+ }
88
+ return 'default';
89
+ }
90
+ /**
91
+ * Calculate the cost of token usage for a specific model
92
+ *
93
+ * @param usage - Token usage from API response
94
+ * @param model - Model identifier (e.g., "claude-sonnet-4-20250514")
95
+ * @returns Estimated cost in USD
96
+ *
97
+ * @example
98
+ * ```typescript
99
+ * const usage = {
100
+ * input_tokens: 24567,
101
+ * output_tokens: 412,
102
+ * cache_read_input_tokens: 22000
103
+ * };
104
+ * const cost = calculateTokenCost(usage, 'claude-sonnet-4-20250514');
105
+ * // Returns: 0.038
106
+ * ```
107
+ */
108
+ function calculateTokenCost(usage, model) {
109
+ const modelKey = normalizeModelName(model);
110
+ const pricing = MODEL_PRICING[modelKey];
111
+ // Base input/output costs
112
+ const inputCost = (usage.input_tokens / 1_000_000) * pricing.input;
113
+ const outputCost = (usage.output_tokens / 1_000_000) * pricing.output;
114
+ // Cache costs (if applicable)
115
+ let cacheWriteCost = 0;
116
+ let cacheReadCost = 0;
117
+ if (usage.cache_creation_input_tokens && pricing.cacheWrite) {
118
+ cacheWriteCost = (usage.cache_creation_input_tokens / 1_000_000) * pricing.cacheWrite;
119
+ }
120
+ if (usage.cache_read_input_tokens && pricing.cacheRead) {
121
+ cacheReadCost = (usage.cache_read_input_tokens / 1_000_000) * pricing.cacheRead;
122
+ }
123
+ const totalCost = inputCost + outputCost + cacheWriteCost + cacheReadCost;
124
+ // Round to 4 decimal places (tenth of a cent)
125
+ return Math.round(totalCost * 10000) / 10000;
126
+ }
127
+ //# sourceMappingURL=token-pricing.js.map
@@ -0,0 +1,232 @@
1
+ /**
2
+ * Token Usage Tracker
3
+ *
4
+ * Dedicated tracking system for token usage and costs across all bots.
5
+ * Optimized for both human readability and LLM analysis.
6
+ *
7
+ * Use Cases:
8
+ * - Monitor per-bot token budgets
9
+ * - Identify expensive tools/operations
10
+ * - Feed data to optimizer agents
11
+ * - Generate cost reports
12
+ */
13
+ import { Logger } from '../lib/logger';
14
+ /**
15
+ * Token usage event - raw data point
16
+ */
17
+ export interface TokenUsageEvent {
18
+ timestamp: string;
19
+ botId: string;
20
+ botName?: string;
21
+ provider: string;
22
+ conversationId: string;
23
+ toolsCalled: string[];
24
+ tokens: {
25
+ input: number;
26
+ output: number;
27
+ total: number;
28
+ cacheCreation?: number;
29
+ cacheRead?: number;
30
+ cost: number;
31
+ };
32
+ duration: number;
33
+ success: boolean;
34
+ }
35
+ /**
36
+ * Per-bot usage statistics
37
+ */
38
+ export interface BotUsageStats {
39
+ botId: string;
40
+ botName?: string;
41
+ totalCost: number;
42
+ totalTokens: number;
43
+ conversations: number;
44
+ averageCostPerConversation: number;
45
+ averageTokensPerConversation: number;
46
+ tools: Record<string, {
47
+ calls: number;
48
+ tokens: number;
49
+ cost: number;
50
+ }>;
51
+ cacheEfficiency?: {
52
+ totalCacheRead: number;
53
+ totalCacheCreation: number;
54
+ savingsPercent: number;
55
+ };
56
+ firstSeen: string;
57
+ lastSeen: string;
58
+ }
59
+ /**
60
+ * Per-tool usage statistics
61
+ */
62
+ export interface ToolUsageStats {
63
+ toolName: string;
64
+ totalCost: number;
65
+ totalTokens: number;
66
+ calls: number;
67
+ averageCostPerCall: number;
68
+ averageTokensPerCall: number;
69
+ usedByBots: string[];
70
+ }
71
+ /**
72
+ * Daily usage summary
73
+ */
74
+ export interface DailySummary {
75
+ date: string;
76
+ cost: number;
77
+ tokens: number;
78
+ conversations: number;
79
+ uniqueBots: number;
80
+ topBot: string;
81
+ topTool: string;
82
+ }
83
+ /**
84
+ * Root token usage data structure
85
+ * Optimized for LLM consumption and human readability
86
+ */
87
+ export interface TokenUsageData {
88
+ /** High-level summary for quick overview */
89
+ summary: {
90
+ totalCost: number;
91
+ totalTokens: number;
92
+ totalConversations: number;
93
+ totalBots: number;
94
+ totalTools: number;
95
+ mostExpensiveBot: string | null;
96
+ mostExpensiveTool: string | null;
97
+ period: {
98
+ start: string;
99
+ end: string;
100
+ };
101
+ lastUpdated: string;
102
+ };
103
+ /** Per-bot detailed statistics */
104
+ bots: Record<string, BotUsageStats>;
105
+ /** Per-tool detailed statistics */
106
+ tools: Record<string, ToolUsageStats>;
107
+ /** Daily rollup summaries for trend analysis */
108
+ dailySummaries: DailySummary[];
109
+ /** Recent events (last 100) for context */
110
+ recentEvents: TokenUsageEvent[];
111
+ }
112
+ /**
113
+ * Token Usage Tracker
114
+ *
115
+ * Tracks token usage across all bots and tools for cost optimization.
116
+ * Data is stored in a structured format for easy analysis by humans and agents.
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * const tracker = new TokenTracker();
121
+ *
122
+ * // Log bot activity
123
+ * tracker.logUsage({
124
+ * botId: 'bot_sales_789',
125
+ * botName: 'Sales Bot',
126
+ * provider: 'anthropic',
127
+ * conversationId: 'disc_123',
128
+ * toolsCalled: ['list_activities', 'create_activity'],
129
+ * tokens: {
130
+ * input: 24567,
131
+ * output: 412,
132
+ * total: 24979,
133
+ * cacheRead: 22000,
134
+ * cost: 0.038
135
+ * },
136
+ * duration: 2450,
137
+ * success: true
138
+ * });
139
+ *
140
+ * // Query for analyzer agent
141
+ * const botUsage = tracker.getBotUsage('bot_sales_789');
142
+ * const expensiveTools = tracker.getMostExpensiveTools(5);
143
+ * ```
144
+ */
145
+ export declare class TokenTracker {
146
+ private logger;
147
+ private dataFilePath;
148
+ private data;
149
+ private maxRecentEvents;
150
+ private maxDailySummaries;
151
+ constructor(logger?: Logger, logDir?: string);
152
+ /**
153
+ * Load existing data or initialize new structure
154
+ */
155
+ private loadData;
156
+ /**
157
+ * Save data to disk
158
+ */
159
+ private saveData;
160
+ /**
161
+ * Log a token usage event from a bot interaction
162
+ */
163
+ logUsage(event: Omit<TokenUsageEvent, 'timestamp'>): void;
164
+ /**
165
+ * Update per-bot statistics
166
+ */
167
+ private updateBotStats;
168
+ /**
169
+ * Update per-tool statistics
170
+ */
171
+ private updateToolStats;
172
+ /**
173
+ * Update daily summary
174
+ */
175
+ private updateDailySummary;
176
+ /**
177
+ * Update global summary statistics
178
+ */
179
+ private updateGlobalSummary;
180
+ /**
181
+ * Get usage statistics for a specific bot
182
+ * Useful for analyzer agents to investigate specific bots
183
+ */
184
+ getBotUsage(botId: string): BotUsageStats | null;
185
+ /**
186
+ * Get usage statistics for a specific tool
187
+ */
188
+ getToolUsage(toolName: string): ToolUsageStats | null;
189
+ /**
190
+ * Get N most expensive bots
191
+ */
192
+ getMostExpensiveBots(limit?: number): BotUsageStats[];
193
+ /**
194
+ * Get N most expensive tools
195
+ */
196
+ getMostExpensiveTools(limit?: number): ToolUsageStats[];
197
+ /**
198
+ * Get daily summaries for a date range
199
+ */
200
+ getDailySummaries(startDate?: string, endDate?: string): DailySummary[];
201
+ /**
202
+ * Get full data dump for analyzer agents
203
+ * This gives the agent complete context
204
+ */
205
+ getFullData(): TokenUsageData;
206
+ /**
207
+ * Get summary statistics
208
+ */
209
+ getSummary(): {
210
+ totalCost: number;
211
+ totalTokens: number;
212
+ totalConversations: number;
213
+ totalBots: number;
214
+ totalTools: number;
215
+ mostExpensiveBot: string | null;
216
+ mostExpensiveTool: string | null;
217
+ period: {
218
+ start: string;
219
+ end: string;
220
+ };
221
+ lastUpdated: string;
222
+ };
223
+ /**
224
+ * Generate human-readable report
225
+ */
226
+ generateReport(): string;
227
+ }
228
+ /**
229
+ * Factory function to create a new TokenTracker instance
230
+ */
231
+ export declare function createTokenTracker(logger?: Logger, logDir?: string): TokenTracker;
232
+ //# sourceMappingURL=token-tracker.d.ts.map