@agentforscience/flamebird 0.1.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.
Files changed (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +370 -0
  3. package/dist/actions/action-executor.d.ts +72 -0
  4. package/dist/actions/action-executor.d.ts.map +1 -0
  5. package/dist/actions/action-executor.js +458 -0
  6. package/dist/actions/action-executor.js.map +1 -0
  7. package/dist/agents/agent-manager.d.ts +90 -0
  8. package/dist/agents/agent-manager.d.ts.map +1 -0
  9. package/dist/agents/agent-manager.js +269 -0
  10. package/dist/agents/agent-manager.js.map +1 -0
  11. package/dist/api/agent4science-client.d.ts +297 -0
  12. package/dist/api/agent4science-client.d.ts.map +1 -0
  13. package/dist/api/agent4science-client.js +386 -0
  14. package/dist/api/agent4science-client.js.map +1 -0
  15. package/dist/cli/commands/add-agent.d.ts +13 -0
  16. package/dist/cli/commands/add-agent.d.ts.map +1 -0
  17. package/dist/cli/commands/add-agent.js +76 -0
  18. package/dist/cli/commands/add-agent.js.map +1 -0
  19. package/dist/cli/commands/community.d.ts +20 -0
  20. package/dist/cli/commands/community.d.ts.map +1 -0
  21. package/dist/cli/commands/community.js +1180 -0
  22. package/dist/cli/commands/community.js.map +1 -0
  23. package/dist/cli/commands/config.d.ts +12 -0
  24. package/dist/cli/commands/config.d.ts.map +1 -0
  25. package/dist/cli/commands/config.js +152 -0
  26. package/dist/cli/commands/config.js.map +1 -0
  27. package/dist/cli/commands/create-agent.d.ts +12 -0
  28. package/dist/cli/commands/create-agent.d.ts.map +1 -0
  29. package/dist/cli/commands/create-agent.js +1780 -0
  30. package/dist/cli/commands/create-agent.js.map +1 -0
  31. package/dist/cli/commands/init.d.ts +15 -0
  32. package/dist/cli/commands/init.d.ts.map +1 -0
  33. package/dist/cli/commands/init.js +487 -0
  34. package/dist/cli/commands/init.js.map +1 -0
  35. package/dist/cli/commands/interactive.d.ts +6 -0
  36. package/dist/cli/commands/interactive.d.ts.map +1 -0
  37. package/dist/cli/commands/interactive.js +447 -0
  38. package/dist/cli/commands/interactive.js.map +1 -0
  39. package/dist/cli/commands/list-agents.d.ts +10 -0
  40. package/dist/cli/commands/list-agents.d.ts.map +1 -0
  41. package/dist/cli/commands/list-agents.js +67 -0
  42. package/dist/cli/commands/list-agents.js.map +1 -0
  43. package/dist/cli/commands/play.d.ts +30 -0
  44. package/dist/cli/commands/play.d.ts.map +1 -0
  45. package/dist/cli/commands/play.js +1890 -0
  46. package/dist/cli/commands/play.js.map +1 -0
  47. package/dist/cli/commands/setup-production.d.ts +7 -0
  48. package/dist/cli/commands/setup-production.d.ts.map +1 -0
  49. package/dist/cli/commands/setup-production.js +127 -0
  50. package/dist/cli/commands/setup-production.js.map +1 -0
  51. package/dist/cli/commands/start.d.ts +15 -0
  52. package/dist/cli/commands/start.d.ts.map +1 -0
  53. package/dist/cli/commands/start.js +89 -0
  54. package/dist/cli/commands/start.js.map +1 -0
  55. package/dist/cli/commands/stats.d.ts +6 -0
  56. package/dist/cli/commands/stats.d.ts.map +1 -0
  57. package/dist/cli/commands/stats.js +74 -0
  58. package/dist/cli/commands/stats.js.map +1 -0
  59. package/dist/cli/commands/status.d.ts +10 -0
  60. package/dist/cli/commands/status.d.ts.map +1 -0
  61. package/dist/cli/commands/status.js +121 -0
  62. package/dist/cli/commands/status.js.map +1 -0
  63. package/dist/cli/index.d.ts +13 -0
  64. package/dist/cli/index.d.ts.map +1 -0
  65. package/dist/cli/index.js +174 -0
  66. package/dist/cli/index.js.map +1 -0
  67. package/dist/cli/utils/ensure-credentials.d.ts +32 -0
  68. package/dist/cli/utils/ensure-credentials.d.ts.map +1 -0
  69. package/dist/cli/utils/ensure-credentials.js +280 -0
  70. package/dist/cli/utils/ensure-credentials.js.map +1 -0
  71. package/dist/cli/utils/local-agents.d.ts +49 -0
  72. package/dist/cli/utils/local-agents.d.ts.map +1 -0
  73. package/dist/cli/utils/local-agents.js +117 -0
  74. package/dist/cli/utils/local-agents.js.map +1 -0
  75. package/dist/config/config.d.ts +28 -0
  76. package/dist/config/config.d.ts.map +1 -0
  77. package/dist/config/config.js +182 -0
  78. package/dist/config/config.js.map +1 -0
  79. package/dist/db/database.d.ts +150 -0
  80. package/dist/db/database.d.ts.map +1 -0
  81. package/dist/db/database.js +838 -0
  82. package/dist/db/database.js.map +1 -0
  83. package/dist/engagement/proactive-engine.d.ts +246 -0
  84. package/dist/engagement/proactive-engine.d.ts.map +1 -0
  85. package/dist/engagement/proactive-engine.js +1753 -0
  86. package/dist/engagement/proactive-engine.js.map +1 -0
  87. package/dist/index.d.ts +6 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +87 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/llm/llm-client.d.ts +181 -0
  92. package/dist/llm/llm-client.d.ts.map +1 -0
  93. package/dist/llm/llm-client.js +658 -0
  94. package/dist/llm/llm-client.js.map +1 -0
  95. package/dist/logging/logger.d.ts +14 -0
  96. package/dist/logging/logger.d.ts.map +1 -0
  97. package/dist/logging/logger.js +47 -0
  98. package/dist/logging/logger.js.map +1 -0
  99. package/dist/polling/notification-poller.d.ts +70 -0
  100. package/dist/polling/notification-poller.d.ts.map +1 -0
  101. package/dist/polling/notification-poller.js +190 -0
  102. package/dist/polling/notification-poller.js.map +1 -0
  103. package/dist/rate-limit/rate-limiter.d.ts +56 -0
  104. package/dist/rate-limit/rate-limiter.d.ts.map +1 -0
  105. package/dist/rate-limit/rate-limiter.js +202 -0
  106. package/dist/rate-limit/rate-limiter.js.map +1 -0
  107. package/dist/runtime/event-loop.d.ts +101 -0
  108. package/dist/runtime/event-loop.d.ts.map +1 -0
  109. package/dist/runtime/event-loop.js +680 -0
  110. package/dist/runtime/event-loop.js.map +1 -0
  111. package/dist/tools/manager-agent.d.ts +48 -0
  112. package/dist/tools/manager-agent.d.ts.map +1 -0
  113. package/dist/tools/manager-agent.js +440 -0
  114. package/dist/tools/manager-agent.js.map +1 -0
  115. package/dist/tools/paper-tools.d.ts +70 -0
  116. package/dist/tools/paper-tools.d.ts.map +1 -0
  117. package/dist/tools/paper-tools.js +446 -0
  118. package/dist/tools/paper-tools.js.map +1 -0
  119. package/dist/types.d.ts +266 -0
  120. package/dist/types.d.ts.map +1 -0
  121. package/dist/types.js +5 -0
  122. package/dist/types.js.map +1 -0
  123. package/dist/utils/cost-tracker.d.ts +51 -0
  124. package/dist/utils/cost-tracker.d.ts.map +1 -0
  125. package/dist/utils/cost-tracker.js +161 -0
  126. package/dist/utils/cost-tracker.js.map +1 -0
  127. package/dist/utils/similarity.d.ts +37 -0
  128. package/dist/utils/similarity.d.ts.map +1 -0
  129. package/dist/utils/similarity.js +78 -0
  130. package/dist/utils/similarity.js.map +1 -0
  131. package/package.json +79 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-client.js","sourceRoot":"","sources":["../../src/llm/llm-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Logger
3
+ * Structured logging with pino
4
+ */
5
+ import pino from 'pino';
6
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
7
+ export interface LoggerConfig {
8
+ level: LogLevel;
9
+ pretty?: boolean;
10
+ }
11
+ export declare function initializeLogger(config: LoggerConfig): pino.Logger;
12
+ export declare function createLogger(name: string): pino.Logger;
13
+ export declare function getLogger(): pino.Logger;
14
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logging/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC,MAAM,CAkBlE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAiBtD;AAED,wBAAgB,SAAS,IAAI,IAAI,CAAC,MAAM,CAKvC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Logger
3
+ * Structured logging with pino
4
+ */
5
+ import pino from 'pino';
6
+ let rootLogger = null;
7
+ export function initializeLogger(config) {
8
+ const transport = config.pretty
9
+ ? {
10
+ target: 'pino-pretty',
11
+ options: {
12
+ colorize: true,
13
+ translateTime: 'SYS:standard',
14
+ ignore: 'pid,hostname',
15
+ },
16
+ }
17
+ : undefined;
18
+ rootLogger = pino({
19
+ level: config.level,
20
+ transport,
21
+ });
22
+ return rootLogger;
23
+ }
24
+ export function createLogger(name) {
25
+ if (!rootLogger) {
26
+ // Default logger if not initialized
27
+ rootLogger = pino({
28
+ level: 'info',
29
+ transport: {
30
+ target: 'pino-pretty',
31
+ options: {
32
+ colorize: true,
33
+ translateTime: 'SYS:standard',
34
+ ignore: 'pid,hostname',
35
+ },
36
+ },
37
+ });
38
+ }
39
+ return rootLogger.child({ module: name });
40
+ }
41
+ export function getLogger() {
42
+ if (!rootLogger) {
43
+ return createLogger('default');
44
+ }
45
+ return rootLogger;
46
+ }
47
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logging/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,IAAI,UAAU,GAAuB,IAAI,CAAC;AAS1C,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM;QAC7B,CAAC,CAAC;YACE,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE;gBACP,QAAQ,EAAE,IAAI;gBACd,aAAa,EAAE,cAAc;gBAC7B,MAAM,EAAE,cAAc;aACvB;SACF;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,UAAU,GAAG,IAAI,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS;KACV,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,oCAAoC;QACpC,UAAU,GAAG,IAAI,CAAC;YAChB,KAAK,EAAE,MAAM;YACb,SAAS,EAAE;gBACT,MAAM,EAAE,aAAa;gBACrB,OAAO,EAAE;oBACP,QAAQ,EAAE,IAAI;oBACd,aAAa,EAAE,cAAc;oBAC7B,MAAM,EAAE,cAAc;iBACvB;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Notification Poller
3
+ * Smart polling with exponential backoff for Agent4Science notifications
4
+ */
5
+ import type { Agent4ScienceNotification } from '../types.js';
6
+ export interface PollerConfig {
7
+ baseIntervalMs: number;
8
+ maxIntervalMs: number;
9
+ backoffMultiplier: number;
10
+ jitterPercent: number;
11
+ }
12
+ export declare const DEFAULT_POLLER_CONFIG: PollerConfig;
13
+ export declare class NotificationPoller {
14
+ private config;
15
+ private agentStates;
16
+ constructor(config?: PollerConfig);
17
+ /**
18
+ * Initialize poll state for an agent
19
+ */
20
+ initAgent(agentId: string): void;
21
+ /**
22
+ * Remove an agent from polling
23
+ */
24
+ removeAgent(agentId: string): void;
25
+ /**
26
+ * Calculate next poll time with jitter
27
+ */
28
+ private getNextPollDelay;
29
+ /**
30
+ * Adjust interval based on poll results
31
+ */
32
+ private adjustInterval;
33
+ /**
34
+ * Poll notifications for a single agent
35
+ */
36
+ pollAgent(agentId: string): Promise<Agent4ScienceNotification[]>;
37
+ /**
38
+ * Mark a notification as processed
39
+ */
40
+ markProcessed(notificationId: string, agentId: string): void;
41
+ /**
42
+ * Get time until next poll for an agent (in ms)
43
+ */
44
+ getTimeUntilNextPoll(agentId: string): number;
45
+ /**
46
+ * Check if agent should poll now
47
+ */
48
+ shouldPollNow(agentId: string): boolean;
49
+ /**
50
+ * Get polling status for all agents
51
+ */
52
+ getStatus(): Array<{
53
+ agentId: string;
54
+ currentIntervalMs: number;
55
+ lastPollTime: Date | null;
56
+ consecutiveEmptyPolls: number;
57
+ nextPollIn: number;
58
+ }>;
59
+ /**
60
+ * Reset polling state for an agent (e.g., after error recovery)
61
+ */
62
+ resetAgent(agentId: string): void;
63
+ /**
64
+ * Force immediate poll (resets backoff)
65
+ */
66
+ forceImmediatePoll(agentId: string): void;
67
+ }
68
+ export declare function createNotificationPoller(config?: PollerConfig): NotificationPoller;
69
+ export declare function getNotificationPoller(): NotificationPoller;
70
+ //# sourceMappingURL=notification-poller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-poller.d.ts","sourceRoot":"","sources":["../../src/polling/notification-poller.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAQ7D,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,qBAAqB,EAAE,YAKnC,CAAC;AASF,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,WAAW,CAA0C;gBAEjD,MAAM,GAAE,YAAoC;IAIxD;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAWhC;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAoEtE;;OAEG;IACH,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAK5D;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAW7C;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIvC;;OAEG;IACH,SAAS,IAAI,KAAK,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;QAC1B,qBAAqB,EAAE,MAAM,CAAC;QAC9B,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IAUF;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IASjC;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAO1C;AAKD,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,kBAAkB,CAGlF;AAED,wBAAgB,qBAAqB,IAAI,kBAAkB,CAK1D"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Notification Poller
3
+ * Smart polling with exponential backoff for Agent4Science notifications
4
+ */
5
+ import { getAgent4ScienceClient } from '../api/agent4science-client.js';
6
+ import { getAgentManager } from '../agents/agent-manager.js';
7
+ import { getDatabase } from '../db/database.js';
8
+ import { createLogger } from '../logging/logger.js';
9
+ const logger = createLogger('poller');
10
+ export const DEFAULT_POLLER_CONFIG = {
11
+ baseIntervalMs: 30_000, // 30 seconds
12
+ maxIntervalMs: 300_000, // 5 minutes
13
+ backoffMultiplier: 1.5,
14
+ jitterPercent: 0.1,
15
+ };
16
+ export class NotificationPoller {
17
+ config;
18
+ agentStates = new Map();
19
+ constructor(config = DEFAULT_POLLER_CONFIG) {
20
+ this.config = config;
21
+ }
22
+ /**
23
+ * Initialize poll state for an agent
24
+ */
25
+ initAgent(agentId) {
26
+ if (!this.agentStates.has(agentId)) {
27
+ this.agentStates.set(agentId, {
28
+ agentId,
29
+ currentIntervalMs: this.config.baseIntervalMs,
30
+ lastPollTime: null,
31
+ consecutiveEmptyPolls: 0,
32
+ });
33
+ }
34
+ }
35
+ /**
36
+ * Remove an agent from polling
37
+ */
38
+ removeAgent(agentId) {
39
+ this.agentStates.delete(agentId);
40
+ }
41
+ /**
42
+ * Calculate next poll time with jitter
43
+ */
44
+ getNextPollDelay(state) {
45
+ const jitter = (Math.random() - 0.5) * 2 * this.config.jitterPercent * state.currentIntervalMs;
46
+ return Math.max(1000, state.currentIntervalMs + jitter);
47
+ }
48
+ /**
49
+ * Adjust interval based on poll results
50
+ */
51
+ adjustInterval(state, hasNotifications) {
52
+ if (hasNotifications) {
53
+ // Activity detected - reset to base interval
54
+ state.currentIntervalMs = this.config.baseIntervalMs;
55
+ state.consecutiveEmptyPolls = 0;
56
+ logger.debug(`Agent ${state.agentId}: Activity detected, reset to ${state.currentIntervalMs}ms`);
57
+ }
58
+ else {
59
+ // No activity - increase interval (backoff)
60
+ state.consecutiveEmptyPolls++;
61
+ state.currentIntervalMs = Math.min(state.currentIntervalMs * this.config.backoffMultiplier, this.config.maxIntervalMs);
62
+ logger.debug(`Agent ${state.agentId}: No activity (${state.consecutiveEmptyPolls}x), backoff to ${state.currentIntervalMs}ms`);
63
+ }
64
+ }
65
+ /**
66
+ * Poll notifications for a single agent
67
+ */
68
+ async pollAgent(agentId) {
69
+ const manager = getAgentManager();
70
+ const apiKey = manager.getApiKey(agentId);
71
+ if (!apiKey) {
72
+ logger.warn(`No API key for agent ${agentId}`);
73
+ return [];
74
+ }
75
+ let state = this.agentStates.get(agentId);
76
+ if (!state) {
77
+ this.initAgent(agentId);
78
+ state = this.agentStates.get(agentId);
79
+ }
80
+ const client = getAgent4ScienceClient();
81
+ const db = getDatabase();
82
+ try {
83
+ // Poll since last poll time
84
+ const result = await client.getNotifications(apiKey, state.lastPollTime ?? undefined);
85
+ if (!result.success || !result.data) {
86
+ logger.error(`Failed to poll notifications for ${agentId}: ${result.error}`);
87
+ // Still update state to prevent tight retry loop
88
+ state.lastPollTime = new Date();
89
+ this.adjustInterval(state, false);
90
+ return [];
91
+ }
92
+ const notifications = result.data;
93
+ // Filter out already processed notifications
94
+ const newNotifications = notifications.filter(n => !db.isNotificationProcessed(n.id));
95
+ // Mark all fetched notifications as read on the server after every GET
96
+ if (notifications.length > 0) {
97
+ client.markNotificationsRead(apiKey, { markAllRead: true }).catch(err => {
98
+ logger.warn({ err, agentId }, 'Failed to mark notifications as read');
99
+ });
100
+ }
101
+ // Update state
102
+ state.lastPollTime = new Date();
103
+ this.adjustInterval(state, newNotifications.length > 0);
104
+ // Record poll in agent manager
105
+ manager.recordPoll(agentId);
106
+ if (newNotifications.length > 0) {
107
+ logger.info(`Agent ${agentId}: Received ${newNotifications.length} new notifications`);
108
+ }
109
+ return newNotifications;
110
+ }
111
+ catch (error) {
112
+ logger.error({ err: error, agentId }, 'Poll error for agent');
113
+ // Apply backoff on error to prevent tight retry loop
114
+ state.lastPollTime = new Date();
115
+ state.currentIntervalMs = Math.min(state.currentIntervalMs * this.config.backoffMultiplier, this.config.maxIntervalMs);
116
+ return [];
117
+ }
118
+ }
119
+ /**
120
+ * Mark a notification as processed
121
+ */
122
+ markProcessed(notificationId, agentId) {
123
+ const db = getDatabase();
124
+ db.markNotificationProcessed(notificationId, agentId);
125
+ }
126
+ /**
127
+ * Get time until next poll for an agent (in ms)
128
+ */
129
+ getTimeUntilNextPoll(agentId) {
130
+ const state = this.agentStates.get(agentId);
131
+ if (!state || !state.lastPollTime) {
132
+ return 0; // Poll immediately
133
+ }
134
+ const elapsed = Date.now() - state.lastPollTime.getTime();
135
+ const delay = this.getNextPollDelay(state);
136
+ return Math.max(0, delay - elapsed);
137
+ }
138
+ /**
139
+ * Check if agent should poll now
140
+ */
141
+ shouldPollNow(agentId) {
142
+ return this.getTimeUntilNextPoll(agentId) <= 0;
143
+ }
144
+ /**
145
+ * Get polling status for all agents
146
+ */
147
+ getStatus() {
148
+ return Array.from(this.agentStates.values()).map(state => ({
149
+ agentId: state.agentId,
150
+ currentIntervalMs: state.currentIntervalMs,
151
+ lastPollTime: state.lastPollTime,
152
+ consecutiveEmptyPolls: state.consecutiveEmptyPolls,
153
+ nextPollIn: this.getTimeUntilNextPoll(state.agentId),
154
+ }));
155
+ }
156
+ /**
157
+ * Reset polling state for an agent (e.g., after error recovery)
158
+ */
159
+ resetAgent(agentId) {
160
+ const state = this.agentStates.get(agentId);
161
+ if (state) {
162
+ state.currentIntervalMs = this.config.baseIntervalMs;
163
+ state.consecutiveEmptyPolls = 0;
164
+ state.lastPollTime = null;
165
+ }
166
+ }
167
+ /**
168
+ * Force immediate poll (resets backoff)
169
+ */
170
+ forceImmediatePoll(agentId) {
171
+ const state = this.agentStates.get(agentId);
172
+ if (state) {
173
+ state.lastPollTime = null;
174
+ state.currentIntervalMs = this.config.baseIntervalMs;
175
+ }
176
+ }
177
+ }
178
+ // Singleton
179
+ let instance = null;
180
+ export function createNotificationPoller(config) {
181
+ instance = new NotificationPoller(config);
182
+ return instance;
183
+ }
184
+ export function getNotificationPoller() {
185
+ if (!instance) {
186
+ instance = new NotificationPoller();
187
+ }
188
+ return instance;
189
+ }
190
+ //# sourceMappingURL=notification-poller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-poller.js","sourceRoot":"","sources":["../../src/polling/notification-poller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Rate Limiter
3
+ * Enforces Agent4Science's rate limits per agent with token bucket algorithm
4
+ */
5
+ import type { ActionType, RateLimitConfig } from '../types.js';
6
+ export declare const DEFAULT_RATE_LIMITS: RateLimitConfig[];
7
+ export declare class RateLimiter {
8
+ private buckets;
9
+ private limits;
10
+ constructor(config?: RateLimitConfig[]);
11
+ /**
12
+ * Get or create bucket for an agent+action pair
13
+ */
14
+ private getBucket;
15
+ /**
16
+ * Refill tokens based on elapsed time
17
+ */
18
+ private refillBucket;
19
+ /**
20
+ * Check if an action can be performed (doesn't consume)
21
+ */
22
+ canPerform(agentId: string, action: ActionType | 'paper' | 'sciencesub'): boolean;
23
+ /**
24
+ * Try to consume a token for an action
25
+ * Returns true if successful, false if rate limited
26
+ */
27
+ tryConsume(agentId: string, action: ActionType | 'paper' | 'sciencesub'): boolean;
28
+ /**
29
+ * Get time until action is allowed (in ms)
30
+ */
31
+ getTimeUntilAllowed(agentId: string, action: ActionType | 'paper' | 'sciencesub'): number;
32
+ /**
33
+ * Get remaining quota for an agent+action
34
+ */
35
+ getRemainingQuota(agentId: string, action: ActionType | 'paper' | 'sciencesub'): number;
36
+ /**
37
+ * Get all rate limit status for an agent
38
+ */
39
+ getAgentStatus(agentId: string): Record<string, {
40
+ remaining: number;
41
+ max: number;
42
+ cooldownMs: number;
43
+ nextAllowedIn: number;
44
+ }>;
45
+ /**
46
+ * Reset rate limits for an agent (useful for testing)
47
+ */
48
+ resetAgent(agentId: string): void;
49
+ /**
50
+ * Reset all rate limits
51
+ */
52
+ resetAll(): void;
53
+ }
54
+ export declare function createRateLimiter(config?: RateLimitConfig[]): RateLimiter;
55
+ export declare function getRateLimiter(): RateLimiter;
56
+ //# sourceMappingURL=rate-limiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/rate-limit/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAmB,MAAM,aAAa,CAAC;AAGhF,eAAO,MAAM,mBAAmB,EAAE,eAAe,EAehD,CAAC;AAuBF,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,MAAM,CAA2C;gBAE7C,MAAM,GAAE,eAAe,EAAwB;IAM3D;;OAEG;IACH,OAAO,CAAC,SAAS;IAmBjB;;OAEG;IACH,OAAO,CAAC,YAAY;IAkBpB;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO;IAoBjF;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO;IA2BjF;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,GAAG,YAAY,GAAG,MAAM;IA+BzF;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,GAAG,YAAY,GAAG,MAAM;IAYvF;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE;QAC9C,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IAoBF;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC;;OAEG;IACH,QAAQ,IAAI,IAAI;CAGjB;AAKD,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,GAAG,WAAW,CAGzE;AAED,wBAAgB,cAAc,IAAI,WAAW,CAK5C"}
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Rate Limiter
3
+ * Enforces Agent4Science's rate limits per agent with token bucket algorithm
4
+ */
5
+ // Agent default rate limits — match server-side caps and per-agent policy
6
+ export const DEFAULT_RATE_LIMITS = [
7
+ // 1/day, 1hr cooldown
8
+ { action: 'paper', maxRequests: 1, window: 'day', cooldownMs: 60 * 60 * 1000 },
9
+ // 1/hr = 24/day, 1hr cooldown
10
+ { action: 'take', maxRequests: 24, window: 'day', cooldownMs: 60 * 60 * 1000 },
11
+ // 1/30min = 48/day, 30min cooldown
12
+ { action: 'review', maxRequests: 48, window: 'day', cooldownMs: 30 * 60 * 1000 },
13
+ // 1/5min = 288/day, 5min cooldown
14
+ { action: 'comment', maxRequests: 288, window: 'day', cooldownMs: 5 * 60 * 1000 },
15
+ // server unlimited; agent throttled to 1/min
16
+ { action: 'vote', maxRequests: 1440, window: 'day', cooldownMs: 60 * 1000 },
17
+ // server unlimited; agent throttled to 1/min
18
+ { action: 'follow', maxRequests: 1440, window: 'day', cooldownMs: 60 * 1000 },
19
+ // 3/day join, no cooldown
20
+ { action: 'sciencesub', maxRequests: 3, window: 'day', cooldownMs: 0 },
21
+ ];
22
+ function getWindowMs(window) {
23
+ switch (window) {
24
+ case 'minute':
25
+ return 60_000;
26
+ case 'hour':
27
+ return 3_600_000;
28
+ case 'day':
29
+ return 86_400_000;
30
+ }
31
+ }
32
+ export class RateLimiter {
33
+ buckets = new Map();
34
+ limits = new Map();
35
+ constructor(config = DEFAULT_RATE_LIMITS) {
36
+ for (const limit of config) {
37
+ this.limits.set(limit.action, limit);
38
+ }
39
+ }
40
+ /**
41
+ * Get or create bucket for an agent+action pair
42
+ */
43
+ getBucket(agentId, action) {
44
+ let agentBuckets = this.buckets.get(agentId);
45
+ if (!agentBuckets) {
46
+ agentBuckets = {};
47
+ this.buckets.set(agentId, agentBuckets);
48
+ }
49
+ if (!agentBuckets[action]) {
50
+ const limit = this.limits.get(action);
51
+ agentBuckets[action] = {
52
+ tokens: limit?.maxRequests ?? 10,
53
+ lastRefill: Date.now(),
54
+ lastAction: 0,
55
+ };
56
+ }
57
+ return agentBuckets[action];
58
+ }
59
+ /**
60
+ * Refill tokens based on elapsed time
61
+ */
62
+ refillBucket(bucket, limit) {
63
+ const now = Date.now();
64
+ const windowMs = getWindowMs(limit.window);
65
+ const elapsed = now - bucket.lastRefill;
66
+ // If a full window has passed, reset to max
67
+ if (elapsed >= windowMs) {
68
+ bucket.tokens = limit.maxRequests;
69
+ bucket.lastRefill = now;
70
+ }
71
+ // Otherwise, add tokens proportionally (for smoother rate limiting)
72
+ else {
73
+ const tokensToAdd = (elapsed / windowMs) * limit.maxRequests;
74
+ bucket.tokens = Math.min(limit.maxRequests, bucket.tokens + tokensToAdd);
75
+ bucket.lastRefill = now;
76
+ }
77
+ }
78
+ /**
79
+ * Check if an action can be performed (doesn't consume)
80
+ */
81
+ canPerform(agentId, action) {
82
+ const limit = this.limits.get(action);
83
+ if (!limit) {
84
+ // No limit configured, allow
85
+ return true;
86
+ }
87
+ const bucket = this.getBucket(agentId, action);
88
+ this.refillBucket(bucket, limit);
89
+ // Check cooldown
90
+ const now = Date.now();
91
+ if (bucket.lastAction > 0 && now - bucket.lastAction < limit.cooldownMs) {
92
+ return false;
93
+ }
94
+ // Check tokens
95
+ return bucket.tokens >= 1;
96
+ }
97
+ /**
98
+ * Try to consume a token for an action
99
+ * Returns true if successful, false if rate limited
100
+ */
101
+ tryConsume(agentId, action) {
102
+ const limit = this.limits.get(action);
103
+ if (!limit) {
104
+ return true;
105
+ }
106
+ const bucket = this.getBucket(agentId, action);
107
+ this.refillBucket(bucket, limit);
108
+ const now = Date.now();
109
+ // Check cooldown
110
+ if (bucket.lastAction > 0 && now - bucket.lastAction < limit.cooldownMs) {
111
+ return false;
112
+ }
113
+ // Check tokens
114
+ if (bucket.tokens < 1) {
115
+ return false;
116
+ }
117
+ // Consume
118
+ bucket.tokens -= 1;
119
+ bucket.lastAction = now;
120
+ return true;
121
+ }
122
+ /**
123
+ * Get time until action is allowed (in ms)
124
+ */
125
+ getTimeUntilAllowed(agentId, action) {
126
+ const limit = this.limits.get(action);
127
+ if (!limit) {
128
+ return 0;
129
+ }
130
+ const bucket = this.getBucket(agentId, action);
131
+ this.refillBucket(bucket, limit);
132
+ const now = Date.now();
133
+ // Check cooldown first
134
+ if (bucket.lastAction > 0) {
135
+ const cooldownRemaining = limit.cooldownMs - (now - bucket.lastAction);
136
+ if (cooldownRemaining > 0) {
137
+ return cooldownRemaining;
138
+ }
139
+ }
140
+ // Check tokens
141
+ if (bucket.tokens >= 1) {
142
+ return 0;
143
+ }
144
+ // Calculate time until next token
145
+ const windowMs = getWindowMs(limit.window);
146
+ const tokenRate = limit.maxRequests / windowMs; // tokens per ms
147
+ const tokensNeeded = 1 - bucket.tokens;
148
+ return Math.ceil(tokensNeeded / tokenRate);
149
+ }
150
+ /**
151
+ * Get remaining quota for an agent+action
152
+ */
153
+ getRemainingQuota(agentId, action) {
154
+ const limit = this.limits.get(action);
155
+ if (!limit) {
156
+ return Infinity;
157
+ }
158
+ const bucket = this.getBucket(agentId, action);
159
+ this.refillBucket(bucket, limit);
160
+ return Math.floor(bucket.tokens);
161
+ }
162
+ /**
163
+ * Get all rate limit status for an agent
164
+ */
165
+ getAgentStatus(agentId) {
166
+ const status = {};
167
+ for (const [action, limit] of this.limits) {
168
+ status[action] = {
169
+ remaining: this.getRemainingQuota(agentId, action),
170
+ max: limit.maxRequests,
171
+ cooldownMs: limit.cooldownMs,
172
+ nextAllowedIn: this.getTimeUntilAllowed(agentId, action),
173
+ };
174
+ }
175
+ return status;
176
+ }
177
+ /**
178
+ * Reset rate limits for an agent (useful for testing)
179
+ */
180
+ resetAgent(agentId) {
181
+ this.buckets.delete(agentId);
182
+ }
183
+ /**
184
+ * Reset all rate limits
185
+ */
186
+ resetAll() {
187
+ this.buckets.clear();
188
+ }
189
+ }
190
+ // Singleton
191
+ let instance = null;
192
+ export function createRateLimiter(config) {
193
+ instance = new RateLimiter(config);
194
+ return instance;
195
+ }
196
+ export function getRateLimiter() {
197
+ if (!instance) {
198
+ instance = new RateLimiter();
199
+ }
200
+ return instance;
201
+ }
202
+ //# sourceMappingURL=rate-limiter.js.map