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
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metrics - KPIs and OKRs for autonomous agents
|
|
3
|
+
*
|
|
4
|
+
* Track key performance indicators and objectives/key results to measure
|
|
5
|
+
* agent and team performance.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import type { KPI, OKR, KeyResult } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Create a KPI (Key Performance Indicator)
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { kpi } from 'autonomous-agents'
|
|
16
|
+
*
|
|
17
|
+
* const revenueKPI = kpi({
|
|
18
|
+
* name: 'Monthly Recurring Revenue',
|
|
19
|
+
* description: 'Total MRR from subscriptions',
|
|
20
|
+
* value: 125000,
|
|
21
|
+
* target: 150000,
|
|
22
|
+
* unit: 'USD',
|
|
23
|
+
* frequency: 'monthly',
|
|
24
|
+
* trend: 'up',
|
|
25
|
+
* })
|
|
26
|
+
*
|
|
27
|
+
* // Update the value
|
|
28
|
+
* revenueKPI.update(130000)
|
|
29
|
+
*
|
|
30
|
+
* // Add historical data
|
|
31
|
+
* revenueKPI.addHistory(125000)
|
|
32
|
+
*
|
|
33
|
+
* // Get progress
|
|
34
|
+
* const progress = revenueKPI.getProgress() // 86.67%
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function kpi(config: {
|
|
38
|
+
name: string;
|
|
39
|
+
description?: string;
|
|
40
|
+
value: number | string;
|
|
41
|
+
target?: number | string;
|
|
42
|
+
unit?: string;
|
|
43
|
+
frequency?: 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'yearly';
|
|
44
|
+
}): KPIInstance;
|
|
45
|
+
/**
|
|
46
|
+
* KPI instance with methods
|
|
47
|
+
*/
|
|
48
|
+
export interface KPIInstance extends KPI {
|
|
49
|
+
/** Update the current value */
|
|
50
|
+
update(value: number | string): void;
|
|
51
|
+
/** Add historical data point */
|
|
52
|
+
addHistory(value: number | string, timestamp?: Date): void;
|
|
53
|
+
/** Get progress towards target */
|
|
54
|
+
getProgress(): number | null;
|
|
55
|
+
/** Get trend direction */
|
|
56
|
+
getTrend(): 'up' | 'down' | 'stable';
|
|
57
|
+
/** Get historical data */
|
|
58
|
+
getHistory(): Array<{
|
|
59
|
+
timestamp: Date;
|
|
60
|
+
value: number | string;
|
|
61
|
+
}>;
|
|
62
|
+
/** Convert to plain JSON */
|
|
63
|
+
toJSON(): KPI;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Create multiple KPIs
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```ts
|
|
70
|
+
* import { kpis } from 'autonomous-agents'
|
|
71
|
+
*
|
|
72
|
+
* const metrics = kpis([
|
|
73
|
+
* { name: 'Revenue', value: 100000, target: 150000, unit: 'USD' },
|
|
74
|
+
* { name: 'Active Users', value: 5000, target: 10000, unit: 'users' },
|
|
75
|
+
* { name: 'NPS Score', value: 72, target: 80, unit: 'points' },
|
|
76
|
+
* ])
|
|
77
|
+
*
|
|
78
|
+
* // Access individual KPIs
|
|
79
|
+
* metrics.revenue.update(110000)
|
|
80
|
+
*
|
|
81
|
+
* // Get all KPIs
|
|
82
|
+
* const all = metrics.getAll()
|
|
83
|
+
*
|
|
84
|
+
* // Get progress summary
|
|
85
|
+
* const summary = metrics.getSummary()
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
export declare function kpis(configs: Array<{
|
|
89
|
+
name: string;
|
|
90
|
+
description?: string;
|
|
91
|
+
value: number | string;
|
|
92
|
+
target?: number | string;
|
|
93
|
+
unit?: string;
|
|
94
|
+
frequency?: 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'yearly';
|
|
95
|
+
}>): KPIsCollection;
|
|
96
|
+
/**
|
|
97
|
+
* KPIs collection with dynamic access
|
|
98
|
+
*/
|
|
99
|
+
export interface KPIsCollection {
|
|
100
|
+
/** Get all KPIs */
|
|
101
|
+
getAll(): KPIInstance[];
|
|
102
|
+
/** Get a specific KPI by name */
|
|
103
|
+
get(name: string): KPIInstance | undefined;
|
|
104
|
+
/** Get summary of all KPIs */
|
|
105
|
+
getSummary(): {
|
|
106
|
+
total: number;
|
|
107
|
+
onTrack: number;
|
|
108
|
+
atRisk: number;
|
|
109
|
+
averageProgress: number;
|
|
110
|
+
};
|
|
111
|
+
/** Convert all KPIs to JSON */
|
|
112
|
+
toJSON(): KPI[];
|
|
113
|
+
/** Dynamic access to KPIs by name */
|
|
114
|
+
[key: string]: KPIInstance | ((...args: any[]) => any);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Create an OKR (Objectives and Key Results)
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* ```ts
|
|
121
|
+
* import { okr } from 'autonomous-agents'
|
|
122
|
+
*
|
|
123
|
+
* const growthOKR = okr({
|
|
124
|
+
* objective: 'Accelerate revenue growth',
|
|
125
|
+
* description: 'Drive sustainable revenue growth through product expansion and market penetration',
|
|
126
|
+
* keyResults: [
|
|
127
|
+
* {
|
|
128
|
+
* id: 'kr1',
|
|
129
|
+
* description: 'Increase MRR from $100k to $150k',
|
|
130
|
+
* current: 100000,
|
|
131
|
+
* target: 150000,
|
|
132
|
+
* unit: 'USD',
|
|
133
|
+
* },
|
|
134
|
+
* {
|
|
135
|
+
* id: 'kr2',
|
|
136
|
+
* description: 'Launch in 3 new markets',
|
|
137
|
+
* current: 0,
|
|
138
|
+
* target: 3,
|
|
139
|
+
* unit: 'markets',
|
|
140
|
+
* },
|
|
141
|
+
* ],
|
|
142
|
+
* period: 'Q1 2024',
|
|
143
|
+
* owner: 'CEO',
|
|
144
|
+
* })
|
|
145
|
+
*
|
|
146
|
+
* // Update a key result
|
|
147
|
+
* growthOKR.updateKeyResult('kr1', { current: 125000 })
|
|
148
|
+
*
|
|
149
|
+
* // Get overall progress
|
|
150
|
+
* const progress = growthOKR.getProgress() // 58.33%
|
|
151
|
+
* ```
|
|
152
|
+
*/
|
|
153
|
+
export declare function okr(config: {
|
|
154
|
+
objective: string;
|
|
155
|
+
description?: string;
|
|
156
|
+
keyResults: KeyResult[];
|
|
157
|
+
period?: string;
|
|
158
|
+
owner?: string;
|
|
159
|
+
}): OKRInstance;
|
|
160
|
+
/**
|
|
161
|
+
* OKR instance with methods
|
|
162
|
+
*/
|
|
163
|
+
export interface OKRInstance extends OKR {
|
|
164
|
+
/** Update a key result */
|
|
165
|
+
updateKeyResult(keyResultId: string, updates: Partial<Omit<KeyResult, 'id'>>): void;
|
|
166
|
+
/** Get overall progress */
|
|
167
|
+
getProgress(): number;
|
|
168
|
+
/** Get a specific key result */
|
|
169
|
+
getKeyResult(keyResultId: string): KeyResult | undefined;
|
|
170
|
+
/** Get all key results */
|
|
171
|
+
getKeyResults(): KeyResult[];
|
|
172
|
+
/** Get OKR status */
|
|
173
|
+
getStatus(): 'active' | 'completed' | 'at-risk' | 'cancelled';
|
|
174
|
+
/** Convert to plain JSON */
|
|
175
|
+
toJSON(): OKR;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Create multiple OKRs
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```ts
|
|
182
|
+
* import { okrs } from 'autonomous-agents'
|
|
183
|
+
*
|
|
184
|
+
* const objectives = okrs([
|
|
185
|
+
* {
|
|
186
|
+
* objective: 'Accelerate revenue growth',
|
|
187
|
+
* keyResults: [
|
|
188
|
+
* { id: 'kr1', description: 'Increase MRR to $150k', current: 100000, target: 150000 },
|
|
189
|
+
* ],
|
|
190
|
+
* },
|
|
191
|
+
* {
|
|
192
|
+
* objective: 'Improve product quality',
|
|
193
|
+
* keyResults: [
|
|
194
|
+
* { id: 'kr2', description: 'Reduce bug count to 10', current: 25, target: 10 },
|
|
195
|
+
* ],
|
|
196
|
+
* },
|
|
197
|
+
* ])
|
|
198
|
+
*
|
|
199
|
+
* const all = objectives.getAll()
|
|
200
|
+
* const summary = objectives.getSummary()
|
|
201
|
+
* ```
|
|
202
|
+
*/
|
|
203
|
+
export declare function okrs(configs: Array<{
|
|
204
|
+
objective: string;
|
|
205
|
+
description?: string;
|
|
206
|
+
keyResults: KeyResult[];
|
|
207
|
+
period?: string;
|
|
208
|
+
owner?: string;
|
|
209
|
+
}>): OKRsCollection;
|
|
210
|
+
/**
|
|
211
|
+
* OKRs collection
|
|
212
|
+
*/
|
|
213
|
+
export interface OKRsCollection {
|
|
214
|
+
/** Get all OKRs */
|
|
215
|
+
getAll(): OKRInstance[];
|
|
216
|
+
/** Get a specific OKR by ID */
|
|
217
|
+
get(id: string): OKRInstance | undefined;
|
|
218
|
+
/** Get OKRs by owner */
|
|
219
|
+
getByOwner(owner: string): OKRInstance[];
|
|
220
|
+
/** Get summary of all OKRs */
|
|
221
|
+
getSummary(): {
|
|
222
|
+
total: number;
|
|
223
|
+
onTrack: number;
|
|
224
|
+
atRisk: number;
|
|
225
|
+
completed: number;
|
|
226
|
+
averageProgress: number;
|
|
227
|
+
};
|
|
228
|
+
/** Convert all OKRs to JSON */
|
|
229
|
+
toJSON(): OKR[];
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Update key result status based on progress
|
|
233
|
+
*/
|
|
234
|
+
export declare function updateKeyResultStatus(kr: KeyResult): void;
|
|
235
|
+
/**
|
|
236
|
+
* Create a key result
|
|
237
|
+
*/
|
|
238
|
+
export declare function createKeyResult(config: {
|
|
239
|
+
id: string;
|
|
240
|
+
description: string;
|
|
241
|
+
current: number | string;
|
|
242
|
+
target: number | string;
|
|
243
|
+
unit?: string;
|
|
244
|
+
}): KeyResult;
|
|
245
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,GAAG,CAAC,MAAM,EAAE;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAA;CACpE,GAAG,WAAW,CAkGd;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,GAAG;IACtC,+BAA+B;IAC/B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IACpC,gCAAgC;IAChC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;IAC1D,kCAAkC;IAClC,WAAW,IAAI,MAAM,GAAG,IAAI,CAAA;IAC5B,0BAA0B;IAC1B,QAAQ,IAAI,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAA;IACpC,0BAA0B;IAC1B,UAAU,IAAI,KAAK,CAAC;QAAE,SAAS,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC,CAAA;IAChE,4BAA4B;IAC5B,MAAM,IAAI,GAAG,CAAA;CACd;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAA;CACpE,CAAC,GAAG,cAAc,CAiElB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mBAAmB;IACnB,MAAM,IAAI,WAAW,EAAE,CAAA;IACvB,iCAAiC;IACjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAA;IAC1C,8BAA8B;IAC9B,UAAU,IAAI;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,EAAE,MAAM,CAAA;QACd,eAAe,EAAE,MAAM,CAAA;KACxB,CAAA;IACD,+BAA+B;IAC/B,MAAM,IAAI,GAAG,EAAE,CAAA;IACf,qCAAqC;IACrC,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,CAAA;CACvD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,GAAG,CAAC,MAAM,EAAE;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,WAAW,CA4Fd;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,GAAG;IACtC,0BAA0B;IAC1B,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAA;IACnF,2BAA2B;IAC3B,WAAW,IAAI,MAAM,CAAA;IACrB,gCAAgC;IAChC,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAA;IACxD,0BAA0B;IAC1B,aAAa,IAAI,SAAS,EAAE,CAAA;IAC5B,qBAAqB;IACrB,SAAS,IAAI,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,CAAA;IAC7D,4BAA4B;IAC5B,MAAM,IAAI,GAAG,CAAA;CACd;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAC,GAAG,cAAc,CA+BlB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mBAAmB;IACnB,MAAM,IAAI,WAAW,EAAE,CAAA;IACvB,+BAA+B;IAC/B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAA;IACxC,wBAAwB;IACxB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAAA;IACxC,8BAA8B;IAC9B,UAAU,IAAI;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,EAAE,MAAM,CAAA;QACjB,eAAe,EAAE,MAAM,CAAA;KACxB,CAAA;IACD,+BAA+B;IAC/B,MAAM,IAAI,GAAG,EAAE,CAAA;CAChB;AA0BD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,CAYzD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,GAAG,SAAS,CAiBZ"}
|
package/dist/metrics.js
ADDED
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metrics - KPIs and OKRs for autonomous agents
|
|
3
|
+
*
|
|
4
|
+
* Track key performance indicators and objectives/key results to measure
|
|
5
|
+
* agent and team performance.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Create a KPI (Key Performance Indicator)
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* import { kpi } from 'autonomous-agents'
|
|
15
|
+
*
|
|
16
|
+
* const revenueKPI = kpi({
|
|
17
|
+
* name: 'Monthly Recurring Revenue',
|
|
18
|
+
* description: 'Total MRR from subscriptions',
|
|
19
|
+
* value: 125000,
|
|
20
|
+
* target: 150000,
|
|
21
|
+
* unit: 'USD',
|
|
22
|
+
* frequency: 'monthly',
|
|
23
|
+
* trend: 'up',
|
|
24
|
+
* })
|
|
25
|
+
*
|
|
26
|
+
* // Update the value
|
|
27
|
+
* revenueKPI.update(130000)
|
|
28
|
+
*
|
|
29
|
+
* // Add historical data
|
|
30
|
+
* revenueKPI.addHistory(125000)
|
|
31
|
+
*
|
|
32
|
+
* // Get progress
|
|
33
|
+
* const progress = revenueKPI.getProgress() // 86.67%
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export function kpi(config) {
|
|
37
|
+
const state = {
|
|
38
|
+
id: generateKPIId(config.name),
|
|
39
|
+
name: config.name,
|
|
40
|
+
description: config.description,
|
|
41
|
+
value: config.value,
|
|
42
|
+
target: config.target,
|
|
43
|
+
unit: config.unit,
|
|
44
|
+
frequency: config.frequency,
|
|
45
|
+
history: [],
|
|
46
|
+
};
|
|
47
|
+
return {
|
|
48
|
+
...state,
|
|
49
|
+
update,
|
|
50
|
+
addHistory,
|
|
51
|
+
getProgress,
|
|
52
|
+
getTrend,
|
|
53
|
+
getHistory,
|
|
54
|
+
toJSON,
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Update the current value
|
|
58
|
+
*/
|
|
59
|
+
function update(newValue) {
|
|
60
|
+
// Store old value in history
|
|
61
|
+
if (state.value !== undefined) {
|
|
62
|
+
addHistory(state.value);
|
|
63
|
+
}
|
|
64
|
+
state.value = newValue;
|
|
65
|
+
state.trend = calculateTrend();
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Add a historical data point
|
|
69
|
+
*/
|
|
70
|
+
function addHistory(value, timestamp) {
|
|
71
|
+
if (!state.history) {
|
|
72
|
+
state.history = [];
|
|
73
|
+
}
|
|
74
|
+
state.history.push({
|
|
75
|
+
timestamp: timestamp || new Date(),
|
|
76
|
+
value,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get progress towards target
|
|
81
|
+
*/
|
|
82
|
+
function getProgress() {
|
|
83
|
+
if (!state.target)
|
|
84
|
+
return null;
|
|
85
|
+
if (typeof state.value === 'number' && typeof state.target === 'number') {
|
|
86
|
+
return Math.min(100, (state.value / state.target) * 100);
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get trend direction
|
|
92
|
+
*/
|
|
93
|
+
function getTrend() {
|
|
94
|
+
return state.trend || calculateTrend();
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Calculate trend from history
|
|
98
|
+
*/
|
|
99
|
+
function calculateTrend() {
|
|
100
|
+
if (!state.history || state.history.length < 2)
|
|
101
|
+
return 'stable';
|
|
102
|
+
const recent = state.history.slice(-2);
|
|
103
|
+
const prev = recent[0].value;
|
|
104
|
+
const curr = recent[1].value;
|
|
105
|
+
if (typeof prev === 'number' && typeof curr === 'number') {
|
|
106
|
+
if (curr > prev)
|
|
107
|
+
return 'up';
|
|
108
|
+
if (curr < prev)
|
|
109
|
+
return 'down';
|
|
110
|
+
}
|
|
111
|
+
return 'stable';
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get historical data
|
|
115
|
+
*/
|
|
116
|
+
function getHistory() {
|
|
117
|
+
return state.history || [];
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Convert to plain JSON
|
|
121
|
+
*/
|
|
122
|
+
function toJSON() {
|
|
123
|
+
return { ...state };
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Create multiple KPIs
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```ts
|
|
131
|
+
* import { kpis } from 'autonomous-agents'
|
|
132
|
+
*
|
|
133
|
+
* const metrics = kpis([
|
|
134
|
+
* { name: 'Revenue', value: 100000, target: 150000, unit: 'USD' },
|
|
135
|
+
* { name: 'Active Users', value: 5000, target: 10000, unit: 'users' },
|
|
136
|
+
* { name: 'NPS Score', value: 72, target: 80, unit: 'points' },
|
|
137
|
+
* ])
|
|
138
|
+
*
|
|
139
|
+
* // Access individual KPIs
|
|
140
|
+
* metrics.revenue.update(110000)
|
|
141
|
+
*
|
|
142
|
+
* // Get all KPIs
|
|
143
|
+
* const all = metrics.getAll()
|
|
144
|
+
*
|
|
145
|
+
* // Get progress summary
|
|
146
|
+
* const summary = metrics.getSummary()
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
export function kpis(configs) {
|
|
150
|
+
const kpiMap = new Map();
|
|
151
|
+
// Create KPI instances
|
|
152
|
+
configs.forEach(config => {
|
|
153
|
+
const instance = kpi(config);
|
|
154
|
+
const key = config.name.toLowerCase().replace(/\s+/g, '');
|
|
155
|
+
kpiMap.set(key, instance);
|
|
156
|
+
});
|
|
157
|
+
// Create proxy for direct access
|
|
158
|
+
const proxy = new Proxy({}, {
|
|
159
|
+
get(_target, prop) {
|
|
160
|
+
if (prop === 'getAll')
|
|
161
|
+
return getAll;
|
|
162
|
+
if (prop === 'get')
|
|
163
|
+
return get;
|
|
164
|
+
if (prop === 'getSummary')
|
|
165
|
+
return getSummary;
|
|
166
|
+
if (prop === 'toJSON')
|
|
167
|
+
return toJSON;
|
|
168
|
+
return kpiMap.get(prop);
|
|
169
|
+
},
|
|
170
|
+
});
|
|
171
|
+
function getAll() {
|
|
172
|
+
return Array.from(kpiMap.values());
|
|
173
|
+
}
|
|
174
|
+
function get(name) {
|
|
175
|
+
return kpiMap.get(name.toLowerCase().replace(/\s+/g, ''));
|
|
176
|
+
}
|
|
177
|
+
function getSummary() {
|
|
178
|
+
const all = getAll();
|
|
179
|
+
const withTargets = all.filter(k => k.target !== undefined);
|
|
180
|
+
const onTrack = withTargets.filter(k => {
|
|
181
|
+
const progress = k.getProgress();
|
|
182
|
+
return progress !== null && progress >= 70;
|
|
183
|
+
});
|
|
184
|
+
const atRisk = withTargets.filter(k => {
|
|
185
|
+
const progress = k.getProgress();
|
|
186
|
+
return progress !== null && progress < 70;
|
|
187
|
+
});
|
|
188
|
+
const totalProgress = withTargets.reduce((sum, k) => {
|
|
189
|
+
const progress = k.getProgress();
|
|
190
|
+
return sum + (progress || 0);
|
|
191
|
+
}, 0);
|
|
192
|
+
return {
|
|
193
|
+
total: all.length,
|
|
194
|
+
onTrack: onTrack.length,
|
|
195
|
+
atRisk: atRisk.length,
|
|
196
|
+
averageProgress: withTargets.length > 0 ? totalProgress / withTargets.length : 0,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
function toJSON() {
|
|
200
|
+
return getAll().map(k => k.toJSON());
|
|
201
|
+
}
|
|
202
|
+
return proxy;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Create an OKR (Objectives and Key Results)
|
|
206
|
+
*
|
|
207
|
+
* @example
|
|
208
|
+
* ```ts
|
|
209
|
+
* import { okr } from 'autonomous-agents'
|
|
210
|
+
*
|
|
211
|
+
* const growthOKR = okr({
|
|
212
|
+
* objective: 'Accelerate revenue growth',
|
|
213
|
+
* description: 'Drive sustainable revenue growth through product expansion and market penetration',
|
|
214
|
+
* keyResults: [
|
|
215
|
+
* {
|
|
216
|
+
* id: 'kr1',
|
|
217
|
+
* description: 'Increase MRR from $100k to $150k',
|
|
218
|
+
* current: 100000,
|
|
219
|
+
* target: 150000,
|
|
220
|
+
* unit: 'USD',
|
|
221
|
+
* },
|
|
222
|
+
* {
|
|
223
|
+
* id: 'kr2',
|
|
224
|
+
* description: 'Launch in 3 new markets',
|
|
225
|
+
* current: 0,
|
|
226
|
+
* target: 3,
|
|
227
|
+
* unit: 'markets',
|
|
228
|
+
* },
|
|
229
|
+
* ],
|
|
230
|
+
* period: 'Q1 2024',
|
|
231
|
+
* owner: 'CEO',
|
|
232
|
+
* })
|
|
233
|
+
*
|
|
234
|
+
* // Update a key result
|
|
235
|
+
* growthOKR.updateKeyResult('kr1', { current: 125000 })
|
|
236
|
+
*
|
|
237
|
+
* // Get overall progress
|
|
238
|
+
* const progress = growthOKR.getProgress() // 58.33%
|
|
239
|
+
* ```
|
|
240
|
+
*/
|
|
241
|
+
export function okr(config) {
|
|
242
|
+
const state = {
|
|
243
|
+
id: generateOKRId(config.objective),
|
|
244
|
+
objective: config.objective,
|
|
245
|
+
description: config.description,
|
|
246
|
+
keyResults: config.keyResults,
|
|
247
|
+
period: config.period,
|
|
248
|
+
owner: config.owner,
|
|
249
|
+
status: 'active',
|
|
250
|
+
};
|
|
251
|
+
return {
|
|
252
|
+
...state,
|
|
253
|
+
updateKeyResult,
|
|
254
|
+
getProgress,
|
|
255
|
+
getKeyResult,
|
|
256
|
+
getKeyResults,
|
|
257
|
+
getStatus,
|
|
258
|
+
toJSON,
|
|
259
|
+
};
|
|
260
|
+
/**
|
|
261
|
+
* Update a key result
|
|
262
|
+
*/
|
|
263
|
+
function updateKeyResult(keyResultId, updates) {
|
|
264
|
+
const kr = state.keyResults.find(k => k.id === keyResultId);
|
|
265
|
+
if (!kr) {
|
|
266
|
+
throw new Error(`Key result with id ${keyResultId} not found`);
|
|
267
|
+
}
|
|
268
|
+
Object.assign(kr, updates);
|
|
269
|
+
// Recalculate progress
|
|
270
|
+
kr.progress = calculateKeyResultProgress(kr);
|
|
271
|
+
state.progress = calculateOKRProgress();
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Get overall OKR progress
|
|
275
|
+
*/
|
|
276
|
+
function getProgress() {
|
|
277
|
+
if (state.progress !== undefined)
|
|
278
|
+
return state.progress;
|
|
279
|
+
return calculateOKRProgress();
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Calculate OKR progress from key results
|
|
283
|
+
*/
|
|
284
|
+
function calculateOKRProgress() {
|
|
285
|
+
if (state.keyResults.length === 0)
|
|
286
|
+
return 0;
|
|
287
|
+
const totalProgress = state.keyResults.reduce((sum, kr) => {
|
|
288
|
+
return sum + (kr.progress || calculateKeyResultProgress(kr));
|
|
289
|
+
}, 0);
|
|
290
|
+
return totalProgress / state.keyResults.length;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Get a specific key result
|
|
294
|
+
*/
|
|
295
|
+
function getKeyResult(keyResultId) {
|
|
296
|
+
return state.keyResults.find(k => k.id === keyResultId);
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Get all key results
|
|
300
|
+
*/
|
|
301
|
+
function getKeyResults() {
|
|
302
|
+
return [...state.keyResults];
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Get OKR status
|
|
306
|
+
*/
|
|
307
|
+
function getStatus() {
|
|
308
|
+
if (state.status)
|
|
309
|
+
return state.status;
|
|
310
|
+
const progress = getProgress();
|
|
311
|
+
if (progress >= 100)
|
|
312
|
+
return 'completed';
|
|
313
|
+
if (progress < 50)
|
|
314
|
+
return 'at-risk';
|
|
315
|
+
return 'active';
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Convert to plain JSON
|
|
319
|
+
*/
|
|
320
|
+
function toJSON() {
|
|
321
|
+
return { ...state };
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Create multiple OKRs
|
|
326
|
+
*
|
|
327
|
+
* @example
|
|
328
|
+
* ```ts
|
|
329
|
+
* import { okrs } from 'autonomous-agents'
|
|
330
|
+
*
|
|
331
|
+
* const objectives = okrs([
|
|
332
|
+
* {
|
|
333
|
+
* objective: 'Accelerate revenue growth',
|
|
334
|
+
* keyResults: [
|
|
335
|
+
* { id: 'kr1', description: 'Increase MRR to $150k', current: 100000, target: 150000 },
|
|
336
|
+
* ],
|
|
337
|
+
* },
|
|
338
|
+
* {
|
|
339
|
+
* objective: 'Improve product quality',
|
|
340
|
+
* keyResults: [
|
|
341
|
+
* { id: 'kr2', description: 'Reduce bug count to 10', current: 25, target: 10 },
|
|
342
|
+
* ],
|
|
343
|
+
* },
|
|
344
|
+
* ])
|
|
345
|
+
*
|
|
346
|
+
* const all = objectives.getAll()
|
|
347
|
+
* const summary = objectives.getSummary()
|
|
348
|
+
* ```
|
|
349
|
+
*/
|
|
350
|
+
export function okrs(configs) {
|
|
351
|
+
const okrList = configs.map(config => okr(config));
|
|
352
|
+
return {
|
|
353
|
+
getAll() {
|
|
354
|
+
return okrList;
|
|
355
|
+
},
|
|
356
|
+
get(id) {
|
|
357
|
+
return okrList.find(o => o.id === id);
|
|
358
|
+
},
|
|
359
|
+
getByOwner(owner) {
|
|
360
|
+
return okrList.filter(o => o.owner === owner);
|
|
361
|
+
},
|
|
362
|
+
getSummary() {
|
|
363
|
+
const totalProgress = okrList.reduce((sum, o) => sum + o.getProgress(), 0);
|
|
364
|
+
return {
|
|
365
|
+
total: okrList.length,
|
|
366
|
+
onTrack: okrList.filter(o => o.getProgress() >= 70).length,
|
|
367
|
+
atRisk: okrList.filter(o => o.getProgress() < 50).length,
|
|
368
|
+
completed: okrList.filter(o => o.status === 'completed').length,
|
|
369
|
+
averageProgress: okrList.length > 0 ? totalProgress / okrList.length : 0,
|
|
370
|
+
};
|
|
371
|
+
},
|
|
372
|
+
toJSON() {
|
|
373
|
+
return okrList.map(o => o.toJSON());
|
|
374
|
+
},
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Generate a KPI ID from name
|
|
379
|
+
*/
|
|
380
|
+
function generateKPIId(name) {
|
|
381
|
+
return `kpi-${name.toLowerCase().replace(/\s+/g, '-')}`;
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Generate an OKR ID from objective
|
|
385
|
+
*/
|
|
386
|
+
function generateOKRId(objective) {
|
|
387
|
+
return `okr-${objective.toLowerCase().replace(/\s+/g, '-').slice(0, 30)}`;
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Calculate progress for a key result
|
|
391
|
+
*/
|
|
392
|
+
function calculateKeyResultProgress(kr) {
|
|
393
|
+
if (typeof kr.current === 'number' && typeof kr.target === 'number') {
|
|
394
|
+
return Math.min(100, (kr.current / kr.target) * 100);
|
|
395
|
+
}
|
|
396
|
+
return 0;
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Update key result status based on progress
|
|
400
|
+
*/
|
|
401
|
+
export function updateKeyResultStatus(kr) {
|
|
402
|
+
const progress = kr.progress || calculateKeyResultProgress(kr);
|
|
403
|
+
if (progress >= 100) {
|
|
404
|
+
kr.status = 'completed';
|
|
405
|
+
}
|
|
406
|
+
else if (progress >= 70) {
|
|
407
|
+
kr.status = 'on-track';
|
|
408
|
+
}
|
|
409
|
+
else if (progress >= 30) {
|
|
410
|
+
kr.status = 'at-risk';
|
|
411
|
+
}
|
|
412
|
+
else {
|
|
413
|
+
kr.status = 'off-track';
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Create a key result
|
|
418
|
+
*/
|
|
419
|
+
export function createKeyResult(config) {
|
|
420
|
+
const kr = {
|
|
421
|
+
id: config.id,
|
|
422
|
+
description: config.description,
|
|
423
|
+
current: config.current,
|
|
424
|
+
target: config.target,
|
|
425
|
+
unit: config.unit,
|
|
426
|
+
progress: calculateKeyResultProgress({
|
|
427
|
+
id: config.id,
|
|
428
|
+
description: config.description,
|
|
429
|
+
current: config.current,
|
|
430
|
+
target: config.target,
|
|
431
|
+
}),
|
|
432
|
+
};
|
|
433
|
+
updateKeyResultStatus(kr);
|
|
434
|
+
return kr;
|
|
435
|
+
}
|
|
436
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
|