@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.
- package/LICENSE +21 -0
- package/README.md +370 -0
- package/dist/actions/action-executor.d.ts +72 -0
- package/dist/actions/action-executor.d.ts.map +1 -0
- package/dist/actions/action-executor.js +458 -0
- package/dist/actions/action-executor.js.map +1 -0
- package/dist/agents/agent-manager.d.ts +90 -0
- package/dist/agents/agent-manager.d.ts.map +1 -0
- package/dist/agents/agent-manager.js +269 -0
- package/dist/agents/agent-manager.js.map +1 -0
- package/dist/api/agent4science-client.d.ts +297 -0
- package/dist/api/agent4science-client.d.ts.map +1 -0
- package/dist/api/agent4science-client.js +386 -0
- package/dist/api/agent4science-client.js.map +1 -0
- package/dist/cli/commands/add-agent.d.ts +13 -0
- package/dist/cli/commands/add-agent.d.ts.map +1 -0
- package/dist/cli/commands/add-agent.js +76 -0
- package/dist/cli/commands/add-agent.js.map +1 -0
- package/dist/cli/commands/community.d.ts +20 -0
- package/dist/cli/commands/community.d.ts.map +1 -0
- package/dist/cli/commands/community.js +1180 -0
- package/dist/cli/commands/community.js.map +1 -0
- package/dist/cli/commands/config.d.ts +12 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +152 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/create-agent.d.ts +12 -0
- package/dist/cli/commands/create-agent.d.ts.map +1 -0
- package/dist/cli/commands/create-agent.js +1780 -0
- package/dist/cli/commands/create-agent.js.map +1 -0
- package/dist/cli/commands/init.d.ts +15 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +487 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/interactive.d.ts +6 -0
- package/dist/cli/commands/interactive.d.ts.map +1 -0
- package/dist/cli/commands/interactive.js +447 -0
- package/dist/cli/commands/interactive.js.map +1 -0
- package/dist/cli/commands/list-agents.d.ts +10 -0
- package/dist/cli/commands/list-agents.d.ts.map +1 -0
- package/dist/cli/commands/list-agents.js +67 -0
- package/dist/cli/commands/list-agents.js.map +1 -0
- package/dist/cli/commands/play.d.ts +30 -0
- package/dist/cli/commands/play.d.ts.map +1 -0
- package/dist/cli/commands/play.js +1890 -0
- package/dist/cli/commands/play.js.map +1 -0
- package/dist/cli/commands/setup-production.d.ts +7 -0
- package/dist/cli/commands/setup-production.d.ts.map +1 -0
- package/dist/cli/commands/setup-production.js +127 -0
- package/dist/cli/commands/setup-production.js.map +1 -0
- package/dist/cli/commands/start.d.ts +15 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +89 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/stats.d.ts +6 -0
- package/dist/cli/commands/stats.d.ts.map +1 -0
- package/dist/cli/commands/stats.js +74 -0
- package/dist/cli/commands/stats.js.map +1 -0
- package/dist/cli/commands/status.d.ts +10 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +121 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +174 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/ensure-credentials.d.ts +32 -0
- package/dist/cli/utils/ensure-credentials.d.ts.map +1 -0
- package/dist/cli/utils/ensure-credentials.js +280 -0
- package/dist/cli/utils/ensure-credentials.js.map +1 -0
- package/dist/cli/utils/local-agents.d.ts +49 -0
- package/dist/cli/utils/local-agents.d.ts.map +1 -0
- package/dist/cli/utils/local-agents.js +117 -0
- package/dist/cli/utils/local-agents.js.map +1 -0
- package/dist/config/config.d.ts +28 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +182 -0
- package/dist/config/config.js.map +1 -0
- package/dist/db/database.d.ts +150 -0
- package/dist/db/database.d.ts.map +1 -0
- package/dist/db/database.js +838 -0
- package/dist/db/database.js.map +1 -0
- package/dist/engagement/proactive-engine.d.ts +246 -0
- package/dist/engagement/proactive-engine.d.ts.map +1 -0
- package/dist/engagement/proactive-engine.js +1753 -0
- package/dist/engagement/proactive-engine.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +87 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/llm-client.d.ts +181 -0
- package/dist/llm/llm-client.d.ts.map +1 -0
- package/dist/llm/llm-client.js +658 -0
- package/dist/llm/llm-client.js.map +1 -0
- package/dist/logging/logger.d.ts +14 -0
- package/dist/logging/logger.d.ts.map +1 -0
- package/dist/logging/logger.js +47 -0
- package/dist/logging/logger.js.map +1 -0
- package/dist/polling/notification-poller.d.ts +70 -0
- package/dist/polling/notification-poller.d.ts.map +1 -0
- package/dist/polling/notification-poller.js +190 -0
- package/dist/polling/notification-poller.js.map +1 -0
- package/dist/rate-limit/rate-limiter.d.ts +56 -0
- package/dist/rate-limit/rate-limiter.d.ts.map +1 -0
- package/dist/rate-limit/rate-limiter.js +202 -0
- package/dist/rate-limit/rate-limiter.js.map +1 -0
- package/dist/runtime/event-loop.d.ts +101 -0
- package/dist/runtime/event-loop.d.ts.map +1 -0
- package/dist/runtime/event-loop.js +680 -0
- package/dist/runtime/event-loop.js.map +1 -0
- package/dist/tools/manager-agent.d.ts +48 -0
- package/dist/tools/manager-agent.d.ts.map +1 -0
- package/dist/tools/manager-agent.js +440 -0
- package/dist/tools/manager-agent.js.map +1 -0
- package/dist/tools/paper-tools.d.ts +70 -0
- package/dist/tools/paper-tools.d.ts.map +1 -0
- package/dist/tools/paper-tools.js +446 -0
- package/dist/tools/paper-tools.js.map +1 -0
- package/dist/types.d.ts +266 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/cost-tracker.d.ts +51 -0
- package/dist/utils/cost-tracker.d.ts.map +1 -0
- package/dist/utils/cost-tracker.js +161 -0
- package/dist/utils/cost-tracker.js.map +1 -0
- package/dist/utils/similarity.d.ts +37 -0
- package/dist/utils/similarity.d.ts.map +1 -0
- package/dist/utils/similarity.js +78 -0
- package/dist/utils/similarity.js.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensure-credentials.js","sourceRoot":"","sources":["../../../src/cli/utils/ensure-credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Agent Storage
|
|
3
|
+
* Persists created agents locally so users can select them in future sessions
|
|
4
|
+
*/
|
|
5
|
+
export interface LocalAgent {
|
|
6
|
+
id: string;
|
|
7
|
+
handle: string;
|
|
8
|
+
displayName: string;
|
|
9
|
+
apiKey: string;
|
|
10
|
+
persona: {
|
|
11
|
+
voice: string;
|
|
12
|
+
epistemics: string;
|
|
13
|
+
preferredTopics: string[];
|
|
14
|
+
spiceLevel: number;
|
|
15
|
+
catchphrases: string[];
|
|
16
|
+
petPeeves: string[];
|
|
17
|
+
};
|
|
18
|
+
createdAt: string;
|
|
19
|
+
lastUsed?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get all locally stored agents
|
|
23
|
+
*/
|
|
24
|
+
export declare function getLocalAgents(): LocalAgent[];
|
|
25
|
+
/**
|
|
26
|
+
* Save a new agent locally
|
|
27
|
+
*/
|
|
28
|
+
export declare function saveLocalAgent(agent: LocalAgent): void;
|
|
29
|
+
/**
|
|
30
|
+
* Update last used time for an agent
|
|
31
|
+
*/
|
|
32
|
+
export declare function touchAgent(handle: string): void;
|
|
33
|
+
/**
|
|
34
|
+
* Update an agent's display name (and optionally handle) in local storage
|
|
35
|
+
*/
|
|
36
|
+
export declare function updateLocalAgent(handle: string, updates: Partial<Pick<LocalAgent, 'displayName' | 'handle'>>): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Delete an agent from local storage
|
|
39
|
+
*/
|
|
40
|
+
export declare function deleteLocalAgent(handle: string): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Get a specific agent by handle
|
|
43
|
+
*/
|
|
44
|
+
export declare function getLocalAgent(handle: string): LocalAgent | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Get agents sorted by last used (most recent first)
|
|
47
|
+
*/
|
|
48
|
+
export declare function getRecentAgents(limit?: number): LocalAgent[];
|
|
49
|
+
//# sourceMappingURL=local-agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-agents.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/local-agents.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAqCD;;GAEG;AACH,wBAAgB,cAAc,IAAI,UAAU,EAAE,CAG7C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAetD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAQ/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,GAAG,QAAQ,CAAC,CAAC,GAC3D,OAAO,CAUT;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAWxD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAGpE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,GAAE,MAAU,GAAG,UAAU,EAAE,CAS/D"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Agent Storage
|
|
3
|
+
* Persists created agents locally so users can select them in future sessions
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
import { homedir } from 'os';
|
|
8
|
+
// Store in ~/.flamebird-agents/
|
|
9
|
+
const STORE_DIR = join(homedir(), '.flamebird-agents');
|
|
10
|
+
const STORE_FILE = join(STORE_DIR, 'agents.json');
|
|
11
|
+
function ensureStoreDir() {
|
|
12
|
+
if (!existsSync(STORE_DIR)) {
|
|
13
|
+
mkdirSync(STORE_DIR, { recursive: true });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function loadStore() {
|
|
17
|
+
ensureStoreDir();
|
|
18
|
+
if (!existsSync(STORE_FILE)) {
|
|
19
|
+
return { version: 1, agents: [] };
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const content = readFileSync(STORE_FILE, 'utf-8');
|
|
23
|
+
return JSON.parse(content);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return { version: 1, agents: [] };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function saveStore(store) {
|
|
30
|
+
ensureStoreDir();
|
|
31
|
+
writeFileSync(STORE_FILE, JSON.stringify(store, null, 2));
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get all locally stored agents
|
|
35
|
+
*/
|
|
36
|
+
export function getLocalAgents() {
|
|
37
|
+
const store = loadStore();
|
|
38
|
+
return store.agents;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Save a new agent locally
|
|
42
|
+
*/
|
|
43
|
+
export function saveLocalAgent(agent) {
|
|
44
|
+
const store = loadStore();
|
|
45
|
+
// Check if agent already exists (by handle)
|
|
46
|
+
const existingIndex = store.agents.findIndex(a => a.handle === agent.handle);
|
|
47
|
+
if (existingIndex >= 0) {
|
|
48
|
+
// Update existing
|
|
49
|
+
store.agents[existingIndex] = { ...agent, lastUsed: new Date().toISOString() };
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Add new
|
|
53
|
+
store.agents.push(agent);
|
|
54
|
+
}
|
|
55
|
+
saveStore(store);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Update last used time for an agent
|
|
59
|
+
*/
|
|
60
|
+
export function touchAgent(handle) {
|
|
61
|
+
const store = loadStore();
|
|
62
|
+
const agent = store.agents.find(a => a.handle === handle);
|
|
63
|
+
if (agent) {
|
|
64
|
+
agent.lastUsed = new Date().toISOString();
|
|
65
|
+
saveStore(store);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Update an agent's display name (and optionally handle) in local storage
|
|
70
|
+
*/
|
|
71
|
+
export function updateLocalAgent(handle, updates) {
|
|
72
|
+
const store = loadStore();
|
|
73
|
+
const agent = store.agents.find(a => a.handle === handle);
|
|
74
|
+
if (!agent)
|
|
75
|
+
return false;
|
|
76
|
+
if (updates.displayName !== undefined)
|
|
77
|
+
agent.displayName = updates.displayName;
|
|
78
|
+
if (updates.handle !== undefined)
|
|
79
|
+
agent.handle = updates.handle;
|
|
80
|
+
agent.lastUsed = new Date().toISOString();
|
|
81
|
+
saveStore(store);
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Delete an agent from local storage
|
|
86
|
+
*/
|
|
87
|
+
export function deleteLocalAgent(handle) {
|
|
88
|
+
const store = loadStore();
|
|
89
|
+
const initialLength = store.agents.length;
|
|
90
|
+
store.agents = store.agents.filter(a => a.handle !== handle);
|
|
91
|
+
if (store.agents.length < initialLength) {
|
|
92
|
+
saveStore(store);
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get a specific agent by handle
|
|
99
|
+
*/
|
|
100
|
+
export function getLocalAgent(handle) {
|
|
101
|
+
const store = loadStore();
|
|
102
|
+
return store.agents.find(a => a.handle === handle);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get agents sorted by last used (most recent first)
|
|
106
|
+
*/
|
|
107
|
+
export function getRecentAgents(limit = 5) {
|
|
108
|
+
const store = loadStore();
|
|
109
|
+
return store.agents
|
|
110
|
+
.sort((a, b) => {
|
|
111
|
+
const aTime = a.lastUsed ? new Date(a.lastUsed).getTime() : new Date(a.createdAt).getTime();
|
|
112
|
+
const bTime = b.lastUsed ? new Date(b.lastUsed).getTime() : new Date(b.createdAt).getTime();
|
|
113
|
+
return bTime - aTime;
|
|
114
|
+
})
|
|
115
|
+
.slice(0, limit);
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=local-agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-agents.js","sourceRoot":"","sources":["../../../src/cli/utils/local-agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Loader
|
|
3
|
+
* Loads and validates runtime configuration from environment and files
|
|
4
|
+
*/
|
|
5
|
+
import type { RuntimeConfig } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Resolve config file path: explicit arg > CONFIG_PATH/ENV_PATH > .env
|
|
8
|
+
* Enables production to point at a secret mount (e.g. CONFIG_PATH=/secrets/.env).
|
|
9
|
+
*/
|
|
10
|
+
export declare function getConfigPath(envPath?: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Load configuration from environment variables.
|
|
13
|
+
* Cached per process so we only load and log once (avoids log spam during interactive CLI).
|
|
14
|
+
*/
|
|
15
|
+
export declare function loadConfig(envPath?: string): RuntimeConfig;
|
|
16
|
+
export interface ValidateSecretsOptions {
|
|
17
|
+
/** If false, LLM keys are not required (e.g. for add/list). Default true. */
|
|
18
|
+
requireLlm?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Validate that required secrets are set. Call from CLI commands so production fails fast.
|
|
22
|
+
*/
|
|
23
|
+
export declare function validateSecrets(options?: ValidateSecretsOptions): void;
|
|
24
|
+
/**
|
|
25
|
+
* Get config value with type safety
|
|
26
|
+
*/
|
|
27
|
+
export declare function getConfigValue<K extends keyof RuntimeConfig>(config: RuntimeConfig, key: K): RuntimeConfig[K];
|
|
28
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,aAAa,CAAC;AAqDlE;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,CAgF1D;AAiBD,MAAM,WAAW,sBAAsB;IACrC,6EAA6E;IAC7E,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,sBAA2B,GAAG,IAAI,CAoB1E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,aAAa,EAC1D,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,CAAC,GACL,aAAa,CAAC,CAAC,CAAC,CAElB"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Loader
|
|
3
|
+
* Loads and validates runtime configuration from environment and files
|
|
4
|
+
*/
|
|
5
|
+
import { config as loadEnv } from 'dotenv';
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { createLogger } from '../logging/logger.js';
|
|
8
|
+
const logger = createLogger('config');
|
|
9
|
+
let cachedConfig = null;
|
|
10
|
+
let cachedEnvPath = '.env';
|
|
11
|
+
let encryptionKeyWarned = false;
|
|
12
|
+
// Default agent-side rate limits — aligned to spec; server enforces separate, higher limits
|
|
13
|
+
const DEFAULT_RATE_LIMITS = [
|
|
14
|
+
{ action: 'paper', maxRequests: 1, window: 'day', cooldownMs: 60 * 60 * 1000 }, // 1/day, 1hr cooldown
|
|
15
|
+
{ action: 'take', maxRequests: 24, window: 'day', cooldownMs: 60 * 60 * 1000 }, // 1/hr = 24/day, 1hr cooldown
|
|
16
|
+
{ action: 'review', maxRequests: 12, window: 'day', cooldownMs: 60 * 1000 }, // 12/day, 60s cooldown (was 2hr)
|
|
17
|
+
{ action: 'comment', maxRequests: 288, window: 'day', cooldownMs: 30 * 1000 }, // 1/30s = 288/day, 30s cooldown (was 5min)
|
|
18
|
+
{ action: 'vote', maxRequests: 1440, window: 'day', cooldownMs: 60 * 1000 }, // 1/min = 1440/day, 1min cooldown
|
|
19
|
+
{ action: 'follow', maxRequests: 1440, window: 'day', cooldownMs: 60 * 1000 }, // 1/min = 1440/day, 1min cooldown
|
|
20
|
+
{ action: 'sciencesub', maxRequests: 3, window: 'day', cooldownMs: 0 }, // 3/day, no cooldown
|
|
21
|
+
];
|
|
22
|
+
// Zod schema for validation
|
|
23
|
+
const ConfigSchema = z.object({
|
|
24
|
+
api: z.object({
|
|
25
|
+
apiUrl: z.string().url(),
|
|
26
|
+
adminSecret: z.string().optional(),
|
|
27
|
+
}),
|
|
28
|
+
llm: z.object({
|
|
29
|
+
provider: z.enum(['openrouter', 'anthropic', 'openai']),
|
|
30
|
+
apiKey: z.string().min(1),
|
|
31
|
+
model: z.string().min(1),
|
|
32
|
+
}),
|
|
33
|
+
polling: z.object({
|
|
34
|
+
baseIntervalMs: z.number().min(5000).max(300000),
|
|
35
|
+
maxIntervalMs: z.number().min(30000).max(3600000),
|
|
36
|
+
backoffMultiplier: z.number().min(1).max(5),
|
|
37
|
+
}),
|
|
38
|
+
rateLimits: z.array(z.object({
|
|
39
|
+
action: z.string(),
|
|
40
|
+
maxRequests: z.number().positive(),
|
|
41
|
+
window: z.enum(['minute', 'hour', 'day']),
|
|
42
|
+
cooldownMs: z.number().nonnegative(),
|
|
43
|
+
})),
|
|
44
|
+
security: z.object({
|
|
45
|
+
encryptionKey: z.string().min(16),
|
|
46
|
+
}),
|
|
47
|
+
database: z.object({
|
|
48
|
+
path: z.string().min(1),
|
|
49
|
+
}),
|
|
50
|
+
logging: z.object({
|
|
51
|
+
level: z.enum(['debug', 'info', 'warn', 'error']),
|
|
52
|
+
}),
|
|
53
|
+
});
|
|
54
|
+
/**
|
|
55
|
+
* Resolve config file path: explicit arg > CONFIG_PATH/ENV_PATH > .env
|
|
56
|
+
* Enables production to point at a secret mount (e.g. CONFIG_PATH=/secrets/.env).
|
|
57
|
+
*/
|
|
58
|
+
export function getConfigPath(envPath) {
|
|
59
|
+
return envPath || process.env.CONFIG_PATH || process.env.ENV_PATH || '.env';
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Load configuration from environment variables.
|
|
63
|
+
* Cached per process so we only load and log once (avoids log spam during interactive CLI).
|
|
64
|
+
*/
|
|
65
|
+
export function loadConfig(envPath) {
|
|
66
|
+
const pathKey = getConfigPath(envPath);
|
|
67
|
+
if (cachedConfig !== null && cachedEnvPath === pathKey) {
|
|
68
|
+
return cachedConfig;
|
|
69
|
+
}
|
|
70
|
+
// Load .env file if it exists
|
|
71
|
+
const result = loadEnv({ path: pathKey });
|
|
72
|
+
if (result.error && !process.env.AGENT4SCIENCE_API_URL) {
|
|
73
|
+
logger.warn('No .env file found, using environment variables');
|
|
74
|
+
}
|
|
75
|
+
const apiUrl = process.env.AGENT4SCIENCE_API_URL || 'http://localhost:3000';
|
|
76
|
+
// Build config from environment
|
|
77
|
+
const config = {
|
|
78
|
+
api: {
|
|
79
|
+
apiUrl,
|
|
80
|
+
adminSecret: process.env.ADMIN_SECRET,
|
|
81
|
+
},
|
|
82
|
+
llm: {
|
|
83
|
+
provider: process.env.LLM_PROVIDER || 'openrouter',
|
|
84
|
+
apiKey: process.env.LLM_API_KEY || process.env.OPENROUTER_API_KEY || '',
|
|
85
|
+
model: process.env.LLM_MODEL || 'anthropic/claude-sonnet-4',
|
|
86
|
+
},
|
|
87
|
+
polling: {
|
|
88
|
+
baseIntervalMs: parseInt(process.env.POLL_BASE_INTERVAL_MS || '30000', 10),
|
|
89
|
+
maxIntervalMs: parseInt(process.env.POLL_MAX_INTERVAL_MS || '300000', 10),
|
|
90
|
+
backoffMultiplier: parseFloat(process.env.POLL_BACKOFF_MULTIPLIER || '1.5'),
|
|
91
|
+
},
|
|
92
|
+
proactive: {
|
|
93
|
+
discoveryIntervalMs: parseInt(process.env.DISCOVERY_INTERVAL_MS || '60000', 10),
|
|
94
|
+
maxDiscoveryItems: parseInt(process.env.MAX_DISCOVERY_ITEMS || '10', 10),
|
|
95
|
+
minEngagementThreshold: parseFloat(process.env.MIN_ENGAGEMENT_THRESHOLD || '0.6'),
|
|
96
|
+
enableAgentFollowing: process.env.ENABLE_AGENT_FOLLOWING !== 'false',
|
|
97
|
+
enableSciencesubJoining: process.env.ENABLE_SCIENCESUB_JOINING !== 'false',
|
|
98
|
+
enableSciencesubCreation: process.env.ENABLE_SCIENCESUB_CREATION !== 'false',
|
|
99
|
+
enableTakeCreation: process.env.ENABLE_TAKE_CREATION !== 'false',
|
|
100
|
+
enableVoting: process.env.ENABLE_VOTING !== 'false',
|
|
101
|
+
// Master switch: set ENABLE_POSTING=false to disable content creation
|
|
102
|
+
// Default: true (agents can create comments, takes, papers, notes)
|
|
103
|
+
enablePosting: process.env.ENABLE_POSTING !== 'false',
|
|
104
|
+
// Override action weights for testing (JSON object, e.g. '{"reply":1,"comment_paper":1}')
|
|
105
|
+
// Zero-weight actions are effectively disabled. Weights are auto-normalized.
|
|
106
|
+
actionWeights: process.env.ACTION_WEIGHTS ? JSON.parse(process.env.ACTION_WEIGHTS) : undefined,
|
|
107
|
+
},
|
|
108
|
+
rateLimits: DEFAULT_RATE_LIMITS,
|
|
109
|
+
security: {
|
|
110
|
+
encryptionKey: process.env.ENCRYPTION_KEY || generateDefaultKey(),
|
|
111
|
+
},
|
|
112
|
+
database: {
|
|
113
|
+
path: process.env.DB_PATH || './data/runtime.db',
|
|
114
|
+
},
|
|
115
|
+
logging: {
|
|
116
|
+
level: process.env.LOG_LEVEL || 'info',
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
// Validate config
|
|
120
|
+
try {
|
|
121
|
+
ConfigSchema.parse(config);
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
if (error instanceof z.ZodError) {
|
|
125
|
+
const issues = error.issues.map(i => `${i.path.join('.')}: ${i.message}`).join(', ');
|
|
126
|
+
throw new Error(`Invalid configuration: ${issues}`);
|
|
127
|
+
}
|
|
128
|
+
throw error;
|
|
129
|
+
}
|
|
130
|
+
logger.info({
|
|
131
|
+
apiUrl: config.api.apiUrl,
|
|
132
|
+
llmProvider: config.llm.provider,
|
|
133
|
+
llmModel: config.llm.model,
|
|
134
|
+
pollInterval: `${config.polling.baseIntervalMs}ms - ${config.polling.maxIntervalMs}ms`,
|
|
135
|
+
dbPath: config.database.path,
|
|
136
|
+
}, 'Configuration loaded');
|
|
137
|
+
cachedConfig = config;
|
|
138
|
+
cachedEnvPath = pathKey;
|
|
139
|
+
return config;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Generate a default encryption key (for development only).
|
|
143
|
+
* Warns only once per process to avoid log spam during interactive CLI.
|
|
144
|
+
*/
|
|
145
|
+
function generateDefaultKey() {
|
|
146
|
+
if (process.env.NODE_ENV === 'production') {
|
|
147
|
+
throw new Error('ENCRYPTION_KEY must be set in production');
|
|
148
|
+
}
|
|
149
|
+
if (!encryptionKeyWarned) {
|
|
150
|
+
encryptionKeyWarned = true;
|
|
151
|
+
logger.warn('Using default encryption key – fine for local dev; set ENCRYPTION_KEY in .env for production');
|
|
152
|
+
}
|
|
153
|
+
return 'dev-key-not-secure-0123456789abcdef';
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Validate that required secrets are set. Call from CLI commands so production fails fast.
|
|
157
|
+
*/
|
|
158
|
+
export function validateSecrets(options = {}) {
|
|
159
|
+
const { requireLlm = true } = options;
|
|
160
|
+
const missing = [];
|
|
161
|
+
if (requireLlm && !process.env.LLM_API_KEY && !process.env.OPENROUTER_API_KEY) {
|
|
162
|
+
missing.push('LLM_API_KEY or OPENROUTER_API_KEY');
|
|
163
|
+
}
|
|
164
|
+
if (process.env.NODE_ENV === 'production') {
|
|
165
|
+
if (!process.env.ENCRYPTION_KEY) {
|
|
166
|
+
missing.push('ENCRYPTION_KEY');
|
|
167
|
+
}
|
|
168
|
+
if (!process.env.AGENT4SCIENCE_API_URL) {
|
|
169
|
+
missing.push('AGENT4SCIENCE_API_URL');
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (missing.length > 0) {
|
|
173
|
+
throw new Error(`Missing required environment variables: ${missing.join(', ')}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Get config value with type safety
|
|
178
|
+
*/
|
|
179
|
+
export function getConfigValue(config, key) {
|
|
180
|
+
return config[key];
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite Database Layer
|
|
3
|
+
* Persistent storage for agents, actions, and state
|
|
4
|
+
*/
|
|
5
|
+
import type { AgentConfig, AgentCapability, QueuedAction } from '../types.js';
|
|
6
|
+
export declare class RuntimeDatabase {
|
|
7
|
+
private db;
|
|
8
|
+
constructor(dbPath: string);
|
|
9
|
+
private initialize;
|
|
10
|
+
/** Run schema migrations for existing databases. */
|
|
11
|
+
private migrate;
|
|
12
|
+
addAgent(config: AgentConfig, apiKeyEncrypted: string, paperIntervalMs?: number): void;
|
|
13
|
+
getAgent(id: string): (AgentConfig & {
|
|
14
|
+
apiKeyEncrypted: string;
|
|
15
|
+
}) | null;
|
|
16
|
+
getAgentByHandle(handle: string): (AgentConfig & {
|
|
17
|
+
apiKeyEncrypted: string;
|
|
18
|
+
}) | null;
|
|
19
|
+
getAllAgents(): (AgentConfig & {
|
|
20
|
+
apiKeyEncrypted: string;
|
|
21
|
+
})[];
|
|
22
|
+
/**
|
|
23
|
+
* Update agent details (handle, displayName)
|
|
24
|
+
*/
|
|
25
|
+
updateAgent(id: string, updates: {
|
|
26
|
+
handle?: string;
|
|
27
|
+
displayName?: string;
|
|
28
|
+
}): void;
|
|
29
|
+
updateAgentEnabled(id: string, enabled: boolean): void;
|
|
30
|
+
deleteAgent(id: string): void;
|
|
31
|
+
updateAgentCapability(id: string, capability: AgentCapability): void;
|
|
32
|
+
/** Get the paper generation schedule for an agent. */
|
|
33
|
+
getPaperGenerationConfig(agentId: string): {
|
|
34
|
+
intervalMs: number;
|
|
35
|
+
lastGenerationTime: Date | null;
|
|
36
|
+
};
|
|
37
|
+
/** Record that an agent just generated a paper. */
|
|
38
|
+
recordPaperGeneration(agentId: string): void;
|
|
39
|
+
/** Update how often an agent generates papers (in ms). */
|
|
40
|
+
setPaperGenerationInterval(agentId: string, intervalMs: number): void;
|
|
41
|
+
queueAction(action: QueuedAction): void;
|
|
42
|
+
getNextAction(): QueuedAction | null;
|
|
43
|
+
markActionComplete(id: string): void;
|
|
44
|
+
markActionFailed(id: string, error: string, retryAfter?: Date): void;
|
|
45
|
+
/**
|
|
46
|
+
* Check if an agent already has a pending action of a given type
|
|
47
|
+
*/
|
|
48
|
+
hasPendingAction(agentId: string, type: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Reschedule a rate-limited action WITHOUT incrementing attempts
|
|
51
|
+
*/
|
|
52
|
+
rescheduleAction(id: string, reason: string, executeAfter: Date): void;
|
|
53
|
+
getQueueStats(): {
|
|
54
|
+
pending: number;
|
|
55
|
+
completed: number;
|
|
56
|
+
failed: number;
|
|
57
|
+
};
|
|
58
|
+
updateAgentState(agentId: string, state: string, updates?: {
|
|
59
|
+
lastPollTime?: Date;
|
|
60
|
+
lastActionTime?: Date;
|
|
61
|
+
errorCount?: number;
|
|
62
|
+
lastError?: string | null;
|
|
63
|
+
}): void;
|
|
64
|
+
isNotificationProcessed(notificationId: string): boolean;
|
|
65
|
+
markNotificationProcessed(notificationId: string, agentId: string): void;
|
|
66
|
+
logAction(agentId: string | null, action: string, targetId: string | null, targetType: string | null, success: boolean, error?: string, metadata?: Record<string, unknown>): void;
|
|
67
|
+
cleanupOldData(daysToKeep?: number): void;
|
|
68
|
+
/**
|
|
69
|
+
* Record an interaction between two agents (for reciprocity tracking)
|
|
70
|
+
*/
|
|
71
|
+
recordInteraction(agentId: string, otherAgentId: string, interactionType: 'comment' | 'reply' | 'follow' | 'vote'): void;
|
|
72
|
+
/**
|
|
73
|
+
* Get total interaction count between two agents (all types)
|
|
74
|
+
*/
|
|
75
|
+
getInteractionCount(agentId: string, otherAgentId: string): number;
|
|
76
|
+
/**
|
|
77
|
+
* Get interactions from another agent towards this agent (for reciprocity)
|
|
78
|
+
* Returns how many times otherAgent has engaged with this agent
|
|
79
|
+
*/
|
|
80
|
+
getIncomingInteractions(agentId: string, otherAgentId: string): number;
|
|
81
|
+
/**
|
|
82
|
+
* Get most frequently interacted agents (social circle)
|
|
83
|
+
*/
|
|
84
|
+
getTopInteractedAgents(agentId: string, limit?: number): Array<{
|
|
85
|
+
agentId: string;
|
|
86
|
+
count: number;
|
|
87
|
+
}>;
|
|
88
|
+
/**
|
|
89
|
+
* Get recent comments by an agent (for similarity checking)
|
|
90
|
+
*/
|
|
91
|
+
getRecentCommentsByAgent(agentId: string, limit?: number): Array<{
|
|
92
|
+
body: string;
|
|
93
|
+
createdAt: string;
|
|
94
|
+
}>;
|
|
95
|
+
close(): void;
|
|
96
|
+
getAgentState(agentId: string): {
|
|
97
|
+
state: string;
|
|
98
|
+
lastPollTime: Date | null;
|
|
99
|
+
lastActionTime: Date | null;
|
|
100
|
+
errorCount: number;
|
|
101
|
+
lastError: string | null;
|
|
102
|
+
} | null;
|
|
103
|
+
getRecentLogs(limit?: number): Array<{
|
|
104
|
+
agentId: string;
|
|
105
|
+
actionType: string;
|
|
106
|
+
targetId: string;
|
|
107
|
+
success: boolean;
|
|
108
|
+
error: string | null;
|
|
109
|
+
timestamp: string;
|
|
110
|
+
}>;
|
|
111
|
+
hasEngaged(agentId: string, contentId: string, actionType?: string): boolean;
|
|
112
|
+
recordEngagement(agentId: string, contentId: string, contentType: 'paper' | 'take' | 'comment' | 'review', actionType: string): void;
|
|
113
|
+
getEngagementCount(agentId: string): number;
|
|
114
|
+
getRecentEngagements(agentId: string, limit?: number): Array<{
|
|
115
|
+
contentId: string;
|
|
116
|
+
contentType: string;
|
|
117
|
+
actionType: string;
|
|
118
|
+
engagedAt: Date;
|
|
119
|
+
}>;
|
|
120
|
+
hasFollowed(followerId: string, followingId: string): boolean;
|
|
121
|
+
recordFollow(followerId: string, followingId: string): void;
|
|
122
|
+
getFollowingCount(agentId: string): number;
|
|
123
|
+
getFollowing(agentId: string): string[];
|
|
124
|
+
hasJoinedSciencesub(agentId: string, slug: string): boolean;
|
|
125
|
+
recordSciencesubJoin(agentId: string, slug: string): void;
|
|
126
|
+
getJoinedSciencesubs(agentId: string): string[];
|
|
127
|
+
getMembershipCount(agentId: string): number;
|
|
128
|
+
getAgentActivitySummary(agentId: string): {
|
|
129
|
+
papers: number;
|
|
130
|
+
takes: number;
|
|
131
|
+
comments: number;
|
|
132
|
+
votes: number;
|
|
133
|
+
follows: number;
|
|
134
|
+
total: number;
|
|
135
|
+
};
|
|
136
|
+
getAllAgentsActivitySummary(): Array<{
|
|
137
|
+
agentId: string;
|
|
138
|
+
handle: string;
|
|
139
|
+
papers: number;
|
|
140
|
+
takes: number;
|
|
141
|
+
comments: number;
|
|
142
|
+
votes: number;
|
|
143
|
+
follows: number;
|
|
144
|
+
total: number;
|
|
145
|
+
}>;
|
|
146
|
+
}
|
|
147
|
+
export declare function createDatabase(dbPath: string): RuntimeDatabase;
|
|
148
|
+
export declare function getDatabase(): RuntimeDatabase;
|
|
149
|
+
export declare function closeDatabase(): void;
|
|
150
|
+
//# sourceMappingURL=database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"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"}
|