autonomous-agents 0.1.0 → 2.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.
- package/.turbo/turbo-build.log +5 -0
- package/CHANGELOG.md +9 -0
- package/README.md +260 -96
- package/dist/actions.d.ts +136 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +303 -0
- package/dist/actions.js.map +1 -0
- package/dist/agent.d.ts +49 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +452 -0
- package/dist/agent.js.map +1 -0
- package/dist/goals.d.ts +138 -0
- package/dist/goals.d.ts.map +1 -0
- package/dist/goals.js +342 -0
- package/dist/goals.js.map +1 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +60 -0
- package/dist/index.js.map +1 -0
- package/dist/metrics.d.ts +245 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +436 -0
- package/dist/metrics.js.map +1 -0
- package/dist/role.d.ts +122 -0
- package/dist/role.d.ts.map +1 -0
- package/dist/role.js +393 -0
- package/dist/role.js.map +1 -0
- package/dist/team.d.ts +152 -0
- package/dist/team.d.ts.map +1 -0
- package/dist/team.js +347 -0
- package/dist/team.js.map +1 -0
- package/dist/types.d.ts +327 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/package.json +27 -36
- package/src/actions.ts +366 -0
- package/src/agent.ts +548 -0
- package/src/goals.ts +435 -0
- package/src/index.ts +135 -0
- package/src/metrics.ts +591 -0
- package/src/role.ts +422 -0
- package/src/team.ts +466 -0
- package/src/types.ts +356 -0
- package/test/actions.test.ts +522 -0
- package/test/agent.test.ts +490 -0
- package/test/goals.test.ts +570 -0
- package/test/metrics.test.ts +707 -0
- package/test/role.test.ts +423 -0
- package/test/team.test.ts +708 -0
- package/tsconfig.json +9 -0
package/dist/goals.js
ADDED
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Goals - Define and track goals for agents and teams
|
|
3
|
+
*
|
|
4
|
+
* Goals provide direction and measurable outcomes for autonomous agents
|
|
5
|
+
* and teams to work towards.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Create a goals configuration
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* import { Goals } from 'autonomous-agents'
|
|
15
|
+
*
|
|
16
|
+
* const goals = Goals({
|
|
17
|
+
* goals: [
|
|
18
|
+
* {
|
|
19
|
+
* id: 'revenue-q1',
|
|
20
|
+
* description: 'Increase Q1 revenue by 20%',
|
|
21
|
+
* target: 120000,
|
|
22
|
+
* progress: 45000,
|
|
23
|
+
* priority: 'high',
|
|
24
|
+
* deadline: new Date('2024-03-31'),
|
|
25
|
+
* status: 'active',
|
|
26
|
+
* },
|
|
27
|
+
* {
|
|
28
|
+
* id: 'feature-launch',
|
|
29
|
+
* description: 'Launch new AI features',
|
|
30
|
+
* target: '100%',
|
|
31
|
+
* progress: '60%',
|
|
32
|
+
* priority: 'high',
|
|
33
|
+
* deadline: new Date('2024-02-15'),
|
|
34
|
+
* status: 'active',
|
|
35
|
+
* subgoals: [
|
|
36
|
+
* {
|
|
37
|
+
* id: 'feature-design',
|
|
38
|
+
* description: 'Complete feature designs',
|
|
39
|
+
* target: '100%',
|
|
40
|
+
* progress: '100%',
|
|
41
|
+
* status: 'completed',
|
|
42
|
+
* },
|
|
43
|
+
* {
|
|
44
|
+
* id: 'feature-dev',
|
|
45
|
+
* description: 'Implement features',
|
|
46
|
+
* target: '100%',
|
|
47
|
+
* progress: '80%',
|
|
48
|
+
* status: 'active',
|
|
49
|
+
* },
|
|
50
|
+
* ],
|
|
51
|
+
* },
|
|
52
|
+
* ],
|
|
53
|
+
* strategy: 'Focus on high-impact features that drive revenue growth',
|
|
54
|
+
* timeHorizon: 'Q1 2024',
|
|
55
|
+
* })
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export function Goals(config) {
|
|
59
|
+
const state = {
|
|
60
|
+
goals: config.goals,
|
|
61
|
+
strategy: config.strategy,
|
|
62
|
+
timeHorizon: config.timeHorizon,
|
|
63
|
+
};
|
|
64
|
+
return {
|
|
65
|
+
...state,
|
|
66
|
+
addGoal,
|
|
67
|
+
removeGoal,
|
|
68
|
+
getGoal,
|
|
69
|
+
getGoals,
|
|
70
|
+
getActiveGoals,
|
|
71
|
+
getCompletedGoals,
|
|
72
|
+
getBlockedGoals,
|
|
73
|
+
getGoalsByPriority,
|
|
74
|
+
updateGoal,
|
|
75
|
+
updateProgress,
|
|
76
|
+
markCompleted,
|
|
77
|
+
markBlocked,
|
|
78
|
+
getProgress,
|
|
79
|
+
getOverallProgress,
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Add a new goal
|
|
83
|
+
*/
|
|
84
|
+
function addGoal(goal) {
|
|
85
|
+
state.goals.push(goal);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Remove a goal
|
|
89
|
+
*/
|
|
90
|
+
function removeGoal(goalId) {
|
|
91
|
+
const index = state.goals.findIndex(g => g.id === goalId);
|
|
92
|
+
if (index === -1)
|
|
93
|
+
return false;
|
|
94
|
+
state.goals.splice(index, 1);
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get a specific goal
|
|
99
|
+
*/
|
|
100
|
+
function getGoal(goalId) {
|
|
101
|
+
return findGoalRecursive(state.goals, goalId);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get all goals
|
|
105
|
+
*/
|
|
106
|
+
function getGoals() {
|
|
107
|
+
return [...state.goals];
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Get active goals
|
|
111
|
+
*/
|
|
112
|
+
function getActiveGoals() {
|
|
113
|
+
return state.goals.filter(g => g.status === 'active');
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get completed goals
|
|
117
|
+
*/
|
|
118
|
+
function getCompletedGoals() {
|
|
119
|
+
return state.goals.filter(g => g.status === 'completed');
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get blocked goals
|
|
123
|
+
*/
|
|
124
|
+
function getBlockedGoals() {
|
|
125
|
+
return state.goals.filter(g => g.status === 'blocked');
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get goals by priority
|
|
129
|
+
*/
|
|
130
|
+
function getGoalsByPriority(priority) {
|
|
131
|
+
return state.goals.filter(g => g.priority === priority);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Update a goal
|
|
135
|
+
*/
|
|
136
|
+
function updateGoal(goalId, updates) {
|
|
137
|
+
const goal = findGoalRecursive(state.goals, goalId);
|
|
138
|
+
if (!goal) {
|
|
139
|
+
throw new Error(`Goal with id ${goalId} not found`);
|
|
140
|
+
}
|
|
141
|
+
Object.assign(goal, updates);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Update goal progress
|
|
145
|
+
*/
|
|
146
|
+
function updateProgress(goalId, progress) {
|
|
147
|
+
const goal = findGoalRecursive(state.goals, goalId);
|
|
148
|
+
if (!goal) {
|
|
149
|
+
throw new Error(`Goal with id ${goalId} not found`);
|
|
150
|
+
}
|
|
151
|
+
goal.progress = progress;
|
|
152
|
+
// Auto-complete if progress reaches target
|
|
153
|
+
if (isGoalComplete(goal)) {
|
|
154
|
+
goal.status = 'completed';
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Mark goal as completed
|
|
159
|
+
*/
|
|
160
|
+
function markCompleted(goalId) {
|
|
161
|
+
const goal = findGoalRecursive(state.goals, goalId);
|
|
162
|
+
if (!goal) {
|
|
163
|
+
throw new Error(`Goal with id ${goalId} not found`);
|
|
164
|
+
}
|
|
165
|
+
goal.status = 'completed';
|
|
166
|
+
goal.progress = goal.target;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Mark goal as blocked
|
|
170
|
+
*/
|
|
171
|
+
function markBlocked(goalId, reason) {
|
|
172
|
+
const goal = findGoalRecursive(state.goals, goalId);
|
|
173
|
+
if (!goal) {
|
|
174
|
+
throw new Error(`Goal with id ${goalId} not found`);
|
|
175
|
+
}
|
|
176
|
+
goal.status = 'blocked';
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get progress for a specific goal
|
|
180
|
+
*/
|
|
181
|
+
function getProgress(goalId) {
|
|
182
|
+
const goal = findGoalRecursive(state.goals, goalId);
|
|
183
|
+
if (!goal)
|
|
184
|
+
return 0;
|
|
185
|
+
return calculateProgress(goal);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get overall progress across all goals
|
|
189
|
+
*/
|
|
190
|
+
function getOverallProgress() {
|
|
191
|
+
if (state.goals.length === 0)
|
|
192
|
+
return 0;
|
|
193
|
+
const totalProgress = state.goals.reduce((sum, goal) => sum + calculateProgress(goal), 0);
|
|
194
|
+
return totalProgress / state.goals.length;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Find a goal recursively (including subgoals)
|
|
199
|
+
*/
|
|
200
|
+
function findGoalRecursive(goals, goalId) {
|
|
201
|
+
for (const goal of goals) {
|
|
202
|
+
if (goal.id === goalId)
|
|
203
|
+
return goal;
|
|
204
|
+
if (goal.subgoals) {
|
|
205
|
+
const found = findGoalRecursive(goal.subgoals, goalId);
|
|
206
|
+
if (found)
|
|
207
|
+
return found;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return undefined;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Calculate progress percentage for a goal
|
|
214
|
+
*/
|
|
215
|
+
function calculateProgress(goal) {
|
|
216
|
+
// If no progress set, return 0
|
|
217
|
+
if (goal.progress === undefined)
|
|
218
|
+
return 0;
|
|
219
|
+
// If goal is completed, return 100
|
|
220
|
+
if (goal.status === 'completed')
|
|
221
|
+
return 100;
|
|
222
|
+
// Handle numeric progress
|
|
223
|
+
if (typeof goal.progress === 'number' && typeof goal.target === 'number') {
|
|
224
|
+
return Math.min(100, (goal.progress / goal.target) * 100);
|
|
225
|
+
}
|
|
226
|
+
// Handle percentage strings
|
|
227
|
+
if (typeof goal.progress === 'string' && typeof goal.target === 'string') {
|
|
228
|
+
const progressMatch = goal.progress.match(/(\d+)%?/);
|
|
229
|
+
const targetMatch = goal.target.match(/(\d+)%?/);
|
|
230
|
+
if (progressMatch && targetMatch) {
|
|
231
|
+
const progressNum = parseInt(progressMatch[1], 10);
|
|
232
|
+
const targetNum = parseInt(targetMatch[1], 10);
|
|
233
|
+
return Math.min(100, (progressNum / targetNum) * 100);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// If we have subgoals, calculate from them
|
|
237
|
+
if (goal.subgoals && goal.subgoals.length > 0) {
|
|
238
|
+
const subgoalProgress = goal.subgoals.reduce((sum, subgoal) => sum + calculateProgress(subgoal), 0);
|
|
239
|
+
return subgoalProgress / goal.subgoals.length;
|
|
240
|
+
}
|
|
241
|
+
return 0;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Check if a goal is complete
|
|
245
|
+
*/
|
|
246
|
+
function isGoalComplete(goal) {
|
|
247
|
+
// Check status
|
|
248
|
+
if (goal.status === 'completed')
|
|
249
|
+
return true;
|
|
250
|
+
// Check numeric progress vs target
|
|
251
|
+
if (typeof goal.progress === 'number' && typeof goal.target === 'number') {
|
|
252
|
+
return goal.progress >= goal.target;
|
|
253
|
+
}
|
|
254
|
+
// Check percentage strings
|
|
255
|
+
if (typeof goal.progress === 'string' && typeof goal.target === 'string') {
|
|
256
|
+
const progressMatch = goal.progress.match(/(\d+)%?/);
|
|
257
|
+
const targetMatch = goal.target.match(/(\d+)%?/);
|
|
258
|
+
if (progressMatch && targetMatch) {
|
|
259
|
+
return parseInt(progressMatch[1], 10) >= parseInt(targetMatch[1], 10);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// Check subgoals
|
|
263
|
+
if (goal.subgoals && goal.subgoals.length > 0) {
|
|
264
|
+
return goal.subgoals.every(subgoal => isGoalComplete(subgoal));
|
|
265
|
+
}
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Create a simple goal
|
|
270
|
+
*/
|
|
271
|
+
export function createGoal(config) {
|
|
272
|
+
return {
|
|
273
|
+
id: config.id,
|
|
274
|
+
description: config.description,
|
|
275
|
+
target: config.target,
|
|
276
|
+
priority: config.priority || 'medium',
|
|
277
|
+
deadline: config.deadline,
|
|
278
|
+
status: 'active',
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Create a goal with subgoals
|
|
283
|
+
*/
|
|
284
|
+
export function createGoalWithSubgoals(config) {
|
|
285
|
+
return {
|
|
286
|
+
id: config.id,
|
|
287
|
+
description: config.description,
|
|
288
|
+
target: config.target,
|
|
289
|
+
subgoals: config.subgoals,
|
|
290
|
+
priority: config.priority || 'medium',
|
|
291
|
+
deadline: config.deadline,
|
|
292
|
+
status: 'active',
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Check if a goal is overdue
|
|
297
|
+
*/
|
|
298
|
+
export function isGoalOverdue(goal) {
|
|
299
|
+
if (!goal.deadline)
|
|
300
|
+
return false;
|
|
301
|
+
return new Date() > goal.deadline && goal.status !== 'completed';
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Get goals that are overdue
|
|
305
|
+
*/
|
|
306
|
+
export function getOverdueGoals(goals) {
|
|
307
|
+
return goals.filter(isGoalOverdue);
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Get goals due soon (within specified days)
|
|
311
|
+
*/
|
|
312
|
+
export function getGoalsDueSoon(goals, days = 7) {
|
|
313
|
+
const now = new Date();
|
|
314
|
+
const threshold = new Date(now.getTime() + days * 24 * 60 * 60 * 1000);
|
|
315
|
+
return goals.filter(goal => {
|
|
316
|
+
if (!goal.deadline || goal.status === 'completed')
|
|
317
|
+
return false;
|
|
318
|
+
return goal.deadline <= threshold && goal.deadline > now;
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Get goals by status
|
|
323
|
+
*/
|
|
324
|
+
export function getGoalsByStatus(goals, status) {
|
|
325
|
+
return goals.filter(g => g.status === status);
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Calculate time remaining until deadline
|
|
329
|
+
*/
|
|
330
|
+
export function getTimeRemaining(goal) {
|
|
331
|
+
if (!goal.deadline)
|
|
332
|
+
return null;
|
|
333
|
+
const now = new Date();
|
|
334
|
+
const diff = goal.deadline.getTime() - now.getTime();
|
|
335
|
+
if (diff < 0)
|
|
336
|
+
return { days: 0, hours: 0, minutes: 0 };
|
|
337
|
+
const days = Math.floor(diff / (1000 * 60 * 60 * 24));
|
|
338
|
+
const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
|
|
339
|
+
const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
|
|
340
|
+
return { days, hours, minutes };
|
|
341
|
+
}
|
|
342
|
+
//# sourceMappingURL=goals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goals.js","sourceRoot":"","sources":["../src/goals.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* autonomous-agents - Primitives for building and orchestrating autonomous AI agents
|
|
3
|
+
*
|
|
4
|
+
* This package provides primitives for creating autonomous AI agents that can:
|
|
5
|
+
* - Execute tasks and make decisions
|
|
6
|
+
* - Work in teams with other agents and humans
|
|
7
|
+
* - Track goals and metrics (KPIs, OKRs)
|
|
8
|
+
* - Request approvals and human oversight
|
|
9
|
+
* - Operate within defined roles and responsibilities
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* import { Agent, Role, Team, Goals } from 'autonomous-agents'
|
|
14
|
+
*
|
|
15
|
+
* // Create a role
|
|
16
|
+
* const productManager = Role({
|
|
17
|
+
* name: 'Product Manager',
|
|
18
|
+
* description: 'Manages product strategy and roadmap',
|
|
19
|
+
* skills: ['product strategy', 'user research', 'roadmap planning'],
|
|
20
|
+
* })
|
|
21
|
+
*
|
|
22
|
+
* // Create an agent
|
|
23
|
+
* const agent = Agent({
|
|
24
|
+
* name: 'ProductAgent',
|
|
25
|
+
* role: productManager,
|
|
26
|
+
* mode: 'autonomous',
|
|
27
|
+
* goals: [
|
|
28
|
+
* { id: 'g1', description: 'Define Q1 roadmap', target: '100%' }
|
|
29
|
+
* ],
|
|
30
|
+
* })
|
|
31
|
+
*
|
|
32
|
+
* // Execute tasks
|
|
33
|
+
* const result = await agent.do('Create product brief for feature X')
|
|
34
|
+
*
|
|
35
|
+
* // Make decisions
|
|
36
|
+
* const choice = await agent.decide(['A', 'B', 'C'], 'Which feature to prioritize?')
|
|
37
|
+
*
|
|
38
|
+
* // Request approval
|
|
39
|
+
* const approval = await agent.approve({
|
|
40
|
+
* title: 'Budget Request',
|
|
41
|
+
* description: 'Request $50k for research',
|
|
42
|
+
* data: { amount: 50000 },
|
|
43
|
+
* })
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @packageDocumentation
|
|
47
|
+
*/
|
|
48
|
+
export type { Agent as AgentType, AgentConfig, AgentMode, AgentStatus, AgentHistoryEntry, Role as RoleType, Team as TeamType, TeamMember, Goal, GoalsConfig, KPI, OKR, KeyResult, Priority, ApprovalRequest, ApprovalResult, ApprovalStatus, NotificationOptions, CommunicationChannel, } from './types.js';
|
|
49
|
+
export { Agent } from './agent.js';
|
|
50
|
+
export { Role, Roles, hasPermission, hasSkill, getPermissions, getSkills, mergeRoles, } from './role.js';
|
|
51
|
+
export { Team, type TeamInstance, createTeamMember, teamMemberFromAgent, calculateTeamCapacity, getTeamSkills, teamHasSkill, findBestMemberForTask, } from './team.js';
|
|
52
|
+
export { Goals, type GoalsInstance, createGoal, createGoalWithSubgoals, isGoalOverdue, getOverdueGoals, getGoalsDueSoon, getGoalsByStatus, getTimeRemaining, } from './goals.js';
|
|
53
|
+
export { do, doAction, ask, decide, approve, generate, is, notify, } from './actions.js';
|
|
54
|
+
export { kpi, kpis, okr, okrs, type KPIInstance, type KPIsCollection, type OKRInstance, type OKRsCollection, createKeyResult, updateKeyResultStatus, } from './metrics.js';
|
|
55
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAGH,YAAY,EACV,KAAK,IAAI,SAAS,EAClB,WAAW,EACX,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,IAAI,IAAI,QAAQ,EAChB,IAAI,IAAI,QAAQ,EAChB,UAAU,EACV,IAAI,EACJ,WAAW,EACX,GAAG,EACH,GAAG,EACH,SAAS,EACT,QAAQ,EACR,eAAe,EACf,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAGlC,OAAO,EACL,IAAI,EACJ,KAAK,EACL,aAAa,EACb,QAAQ,EACR,cAAc,EACd,SAAS,EACT,UAAU,GACX,MAAM,WAAW,CAAA;AAGlB,OAAO,EACL,IAAI,EACJ,KAAK,YAAY,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,qBAAqB,GACtB,MAAM,WAAW,CAAA;AAGlB,OAAO,EACL,KAAK,EACL,KAAK,aAAa,EAClB,UAAU,EACV,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,YAAY,CAAA;AAGnB,OAAO,EACL,EAAE,EACF,QAAQ,EACR,GAAG,EACH,MAAM,EACN,OAAO,EACP,QAAQ,EACR,EAAE,EACF,MAAM,GACP,MAAM,cAAc,CAAA;AAGrB,OAAO,EACL,GAAG,EACH,IAAI,EACJ,GAAG,EACH,IAAI,EACJ,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,eAAe,EACf,qBAAqB,GACtB,MAAM,cAAc,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* autonomous-agents - Primitives for building and orchestrating autonomous AI agents
|
|
3
|
+
*
|
|
4
|
+
* This package provides primitives for creating autonomous AI agents that can:
|
|
5
|
+
* - Execute tasks and make decisions
|
|
6
|
+
* - Work in teams with other agents and humans
|
|
7
|
+
* - Track goals and metrics (KPIs, OKRs)
|
|
8
|
+
* - Request approvals and human oversight
|
|
9
|
+
* - Operate within defined roles and responsibilities
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* import { Agent, Role, Team, Goals } from 'autonomous-agents'
|
|
14
|
+
*
|
|
15
|
+
* // Create a role
|
|
16
|
+
* const productManager = Role({
|
|
17
|
+
* name: 'Product Manager',
|
|
18
|
+
* description: 'Manages product strategy and roadmap',
|
|
19
|
+
* skills: ['product strategy', 'user research', 'roadmap planning'],
|
|
20
|
+
* })
|
|
21
|
+
*
|
|
22
|
+
* // Create an agent
|
|
23
|
+
* const agent = Agent({
|
|
24
|
+
* name: 'ProductAgent',
|
|
25
|
+
* role: productManager,
|
|
26
|
+
* mode: 'autonomous',
|
|
27
|
+
* goals: [
|
|
28
|
+
* { id: 'g1', description: 'Define Q1 roadmap', target: '100%' }
|
|
29
|
+
* ],
|
|
30
|
+
* })
|
|
31
|
+
*
|
|
32
|
+
* // Execute tasks
|
|
33
|
+
* const result = await agent.do('Create product brief for feature X')
|
|
34
|
+
*
|
|
35
|
+
* // Make decisions
|
|
36
|
+
* const choice = await agent.decide(['A', 'B', 'C'], 'Which feature to prioritize?')
|
|
37
|
+
*
|
|
38
|
+
* // Request approval
|
|
39
|
+
* const approval = await agent.approve({
|
|
40
|
+
* title: 'Budget Request',
|
|
41
|
+
* description: 'Request $50k for research',
|
|
42
|
+
* data: { amount: 50000 },
|
|
43
|
+
* })
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @packageDocumentation
|
|
47
|
+
*/
|
|
48
|
+
// Agent creation and management
|
|
49
|
+
export { Agent } from './agent.js';
|
|
50
|
+
// Role definitions
|
|
51
|
+
export { Role, Roles, hasPermission, hasSkill, getPermissions, getSkills, mergeRoles, } from './role.js';
|
|
52
|
+
// Team collaboration
|
|
53
|
+
export { Team, createTeamMember, teamMemberFromAgent, calculateTeamCapacity, getTeamSkills, teamHasSkill, findBestMemberForTask, } from './team.js';
|
|
54
|
+
// Goals and objectives
|
|
55
|
+
export { Goals, createGoal, createGoalWithSubgoals, isGoalOverdue, getOverdueGoals, getGoalsDueSoon, getGoalsByStatus, getTimeRemaining, } from './goals.js';
|
|
56
|
+
// Action primitives
|
|
57
|
+
export { do, doAction, ask, decide, approve, generate, is, notify, } from './actions.js';
|
|
58
|
+
// Metrics and performance tracking
|
|
59
|
+
export { kpi, kpis, okr, okrs, createKeyResult, updateKeyResultStatus, } from './metrics.js';
|
|
60
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAyBH,gCAAgC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,mBAAmB;AACnB,OAAO,EACL,IAAI,EACJ,KAAK,EACL,aAAa,EACb,QAAQ,EACR,cAAc,EACd,SAAS,EACT,UAAU,GACX,MAAM,WAAW,CAAA;AAElB,qBAAqB;AACrB,OAAO,EACL,IAAI,EAEJ,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,qBAAqB,GACtB,MAAM,WAAW,CAAA;AAElB,uBAAuB;AACvB,OAAO,EACL,KAAK,EAEL,UAAU,EACV,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,YAAY,CAAA;AAEnB,oBAAoB;AACpB,OAAO,EACL,EAAE,EACF,QAAQ,EACR,GAAG,EACH,MAAM,EACN,OAAO,EACP,QAAQ,EACR,EAAE,EACF,MAAM,GACP,MAAM,cAAc,CAAA;AAErB,mCAAmC;AACnC,OAAO,EACL,GAAG,EACH,IAAI,EACJ,GAAG,EACH,IAAI,EAKJ,eAAe,EACf,qBAAqB,GACtB,MAAM,cAAc,CAAA"}
|