@hazeljs/organism 2.0.6
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/README.md +205 -0
- package/dist/__tests__/organism.embedding.test.d.ts +2 -0
- package/dist/__tests__/organism.embedding.test.d.ts.map +1 -0
- package/dist/__tests__/organism.embedding.test.js +166 -0
- package/dist/__tests__/organism.embedding.test.js.map +1 -0
- package/dist/__tests__/organism.phase1.test.d.ts +2 -0
- package/dist/__tests__/organism.phase1.test.d.ts.map +1 -0
- package/dist/__tests__/organism.phase1.test.js +375 -0
- package/dist/__tests__/organism.phase1.test.js.map +1 -0
- package/dist/__tests__/organism.phase2-3.test.d.ts +2 -0
- package/dist/__tests__/organism.phase2-3.test.d.ts.map +1 -0
- package/dist/__tests__/organism.phase2-3.test.js +320 -0
- package/dist/__tests__/organism.phase2-3.test.js.map +1 -0
- package/dist/__tests__/organism.phase4.test.d.ts +2 -0
- package/dist/__tests__/organism.phase4.test.d.ts.map +1 -0
- package/dist/__tests__/organism.phase4.test.js +217 -0
- package/dist/__tests__/organism.phase4.test.js.map +1 -0
- package/dist/bridge/signal-bridge.d.ts +46 -0
- package/dist/bridge/signal-bridge.d.ts.map +1 -0
- package/dist/bridge/signal-bridge.js +75 -0
- package/dist/bridge/signal-bridge.js.map +1 -0
- package/dist/core/capability-registry.d.ts +16 -0
- package/dist/core/capability-registry.d.ts.map +1 -0
- package/dist/core/capability-registry.js +71 -0
- package/dist/core/capability-registry.js.map +1 -0
- package/dist/core/clock.d.ts +17 -0
- package/dist/core/clock.d.ts.map +1 -0
- package/dist/core/clock.js +63 -0
- package/dist/core/clock.js.map +1 -0
- package/dist/core/mission.d.ts +4 -0
- package/dist/core/mission.d.ts.map +1 -0
- package/dist/core/mission.js +74 -0
- package/dist/core/mission.js.map +1 -0
- package/dist/core/organism-context.d.ts +139 -0
- package/dist/core/organism-context.d.ts.map +1 -0
- package/dist/core/organism-context.js +62 -0
- package/dist/core/organism-context.js.map +1 -0
- package/dist/core/organism-runtime.d.ts +199 -0
- package/dist/core/organism-runtime.d.ts.map +1 -0
- package/dist/core/organism-runtime.js +1016 -0
- package/dist/core/organism-runtime.js.map +1 -0
- package/dist/decorators/index.d.ts +39 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/dist/decorators/index.js +165 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/economy/market-engine.d.ts +57 -0
- package/dist/economy/market-engine.d.ts.map +1 -0
- package/dist/economy/market-engine.js +258 -0
- package/dist/economy/market-engine.js.map +1 -0
- package/dist/economy/resource-allocator.d.ts +39 -0
- package/dist/economy/resource-allocator.d.ts.map +1 -0
- package/dist/economy/resource-allocator.js +153 -0
- package/dist/economy/resource-allocator.js.map +1 -0
- package/dist/economy/utility-engine.d.ts +16 -0
- package/dist/economy/utility-engine.d.ts.map +1 -0
- package/dist/economy/utility-engine.js +80 -0
- package/dist/economy/utility-engine.js.map +1 -0
- package/dist/economy/utility-forecaster.d.ts +24 -0
- package/dist/economy/utility-forecaster.d.ts.map +1 -0
- package/dist/economy/utility-forecaster.js +60 -0
- package/dist/economy/utility-forecaster.js.map +1 -0
- package/dist/errors/organism.errors.d.ts +23 -0
- package/dist/errors/organism.errors.d.ts.map +1 -0
- package/dist/errors/organism.errors.js +50 -0
- package/dist/errors/organism.errors.js.map +1 -0
- package/dist/events/organism-events.d.ts +61 -0
- package/dist/events/organism-events.d.ts.map +1 -0
- package/dist/events/organism-events.js +95 -0
- package/dist/events/organism-events.js.map +1 -0
- package/dist/evolution/evolution-engine.d.ts +41 -0
- package/dist/evolution/evolution-engine.d.ts.map +1 -0
- package/dist/evolution/evolution-engine.js +135 -0
- package/dist/evolution/evolution-engine.js.map +1 -0
- package/dist/evolution/mutation-engine.d.ts +21 -0
- package/dist/evolution/mutation-engine.d.ts.map +1 -0
- package/dist/evolution/mutation-engine.js +84 -0
- package/dist/evolution/mutation-engine.js.map +1 -0
- package/dist/genealogy/genealogy-manager.d.ts +18 -0
- package/dist/genealogy/genealogy-manager.d.ts.map +1 -0
- package/dist/genealogy/genealogy-manager.js +64 -0
- package/dist/genealogy/genealogy-manager.js.map +1 -0
- package/dist/governance/constitution.d.ts +20 -0
- package/dist/governance/constitution.d.ts.map +1 -0
- package/dist/governance/constitution.js +109 -0
- package/dist/governance/constitution.js.map +1 -0
- package/dist/host/organism-host-registry.d.ts +24 -0
- package/dist/host/organism-host-registry.d.ts.map +1 -0
- package/dist/host/organism-host-registry.js +65 -0
- package/dist/host/organism-host-registry.js.map +1 -0
- package/dist/host/organism-host.d.ts +32 -0
- package/dist/host/organism-host.d.ts.map +1 -0
- package/dist/host/organism-host.js +64 -0
- package/dist/host/organism-host.js.map +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +117 -0
- package/dist/index.js.map +1 -0
- package/dist/integration/create-ops-organism.d.ts +34 -0
- package/dist/integration/create-ops-organism.d.ts.map +1 -0
- package/dist/integration/create-ops-organism.js +43 -0
- package/dist/integration/create-ops-organism.js.map +1 -0
- package/dist/lifecycle/birth-engine.d.ts +41 -0
- package/dist/lifecycle/birth-engine.d.ts.map +1 -0
- package/dist/lifecycle/birth-engine.js +182 -0
- package/dist/lifecycle/birth-engine.js.map +1 -0
- package/dist/lifecycle/decision-engine.d.ts +19 -0
- package/dist/lifecycle/decision-engine.d.ts.map +1 -0
- package/dist/lifecycle/decision-engine.js +137 -0
- package/dist/lifecycle/decision-engine.js.map +1 -0
- package/dist/lifecycle/reproduction-engine.d.ts +58 -0
- package/dist/lifecycle/reproduction-engine.d.ts.map +1 -0
- package/dist/lifecycle/reproduction-engine.js +207 -0
- package/dist/lifecycle/reproduction-engine.js.map +1 -0
- package/dist/lifecycle/survival-engine.d.ts +17 -0
- package/dist/lifecycle/survival-engine.d.ts.map +1 -0
- package/dist/lifecycle/survival-engine.js +83 -0
- package/dist/lifecycle/survival-engine.js.map +1 -0
- package/dist/observability/metrics.d.ts +37 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +80 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/perception/perception-engine.d.ts +40 -0
- package/dist/perception/perception-engine.d.ts.map +1 -0
- package/dist/perception/perception-engine.js +126 -0
- package/dist/perception/perception-engine.js.map +1 -0
- package/dist/persistence/in-memory-organism-repository.d.ts +2 -0
- package/dist/persistence/in-memory-organism-repository.d.ts.map +1 -0
- package/dist/persistence/in-memory-organism-repository.js +18 -0
- package/dist/persistence/in-memory-organism-repository.js.map +1 -0
- package/dist/persistence/organism-repository.d.ts +42 -0
- package/dist/persistence/organism-repository.d.ts.map +1 -0
- package/dist/persistence/organism-repository.js +105 -0
- package/dist/persistence/organism-repository.js.map +1 -0
- package/dist/types/organism.types.d.ts +482 -0
- package/dist/types/organism.types.d.ts.map +1 -0
- package/dist/types/organism.types.js +45 -0
- package/dist/types/organism.types.js.map +1 -0
- package/examples/ecommerce-organism/run.ts +245 -0
- package/package.json +73 -0
- package/src/bridge/signal-bridge.ts +116 -0
- package/src/core/capability-registry.ts +72 -0
- package/src/core/clock.ts +58 -0
- package/src/core/mission.ts +83 -0
- package/src/core/organism-context.ts +176 -0
- package/src/core/organism-runtime.ts +1369 -0
- package/src/decorators/index.ts +180 -0
- package/src/economy/market-engine.ts +324 -0
- package/src/economy/resource-allocator.ts +188 -0
- package/src/economy/utility-engine.ts +103 -0
- package/src/economy/utility-forecaster.ts +88 -0
- package/src/errors/organism.errors.ts +47 -0
- package/src/events/organism-events.ts +122 -0
- package/src/evolution/evolution-engine.ts +167 -0
- package/src/evolution/mutation-engine.ts +110 -0
- package/src/genealogy/genealogy-manager.ts +70 -0
- package/src/governance/constitution.ts +120 -0
- package/src/host/organism-host-registry.ts +72 -0
- package/src/host/organism-host.ts +103 -0
- package/src/index.ts +78 -0
- package/src/integration/create-ops-organism.ts +80 -0
- package/src/lifecycle/birth-engine.ts +225 -0
- package/src/lifecycle/decision-engine.ts +158 -0
- package/src/lifecycle/reproduction-engine.ts +289 -0
- package/src/lifecycle/survival-engine.ts +95 -0
- package/src/observability/metrics.ts +120 -0
- package/src/perception/perception-engine.ts +140 -0
- package/src/persistence/in-memory-organism-repository.ts +1 -0
- package/src/persistence/organism-repository.ts +134 -0
- package/src/types/organism.types.ts +591 -0
- package/tsconfig.jest.json +8 -0
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const index_1 = require("../index");
|
|
4
|
+
async function createOrg(overrides = {}) {
|
|
5
|
+
return (0, index_1.createOrganism)({
|
|
6
|
+
mission: {
|
|
7
|
+
id: 'm',
|
|
8
|
+
objective: 'Operate with adaptive specialists',
|
|
9
|
+
},
|
|
10
|
+
genes: [
|
|
11
|
+
{
|
|
12
|
+
id: 'commerce-generalist',
|
|
13
|
+
capabilities: ['commerce', 'customer-support', 'analytics'],
|
|
14
|
+
reproduction: { enabled: true, maxChildren: 3 },
|
|
15
|
+
mutation: { enabled: true },
|
|
16
|
+
initialPrompt: 'You are a commerce generalist.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: 'no-repro',
|
|
20
|
+
capabilities: ['research'],
|
|
21
|
+
reproduction: { enabled: false },
|
|
22
|
+
mutation: { enabled: false },
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
resources: {
|
|
26
|
+
tokenBudget: 500000,
|
|
27
|
+
monthlyBudget: { amount: 200, currency: 'USD' },
|
|
28
|
+
},
|
|
29
|
+
limits: {
|
|
30
|
+
maxAgents: 10,
|
|
31
|
+
maxGenerationDepth: 3,
|
|
32
|
+
maxChildrenPerAgent: 2,
|
|
33
|
+
maxSpawnRatePerMinute: 20,
|
|
34
|
+
maxTotalCostPerHour: 50,
|
|
35
|
+
},
|
|
36
|
+
reproduction: { cooldownMs: 0 },
|
|
37
|
+
simulation: true,
|
|
38
|
+
debug: false,
|
|
39
|
+
...overrides,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
describe('phase 2 reproduction', () => {
|
|
43
|
+
beforeEach(() => {
|
|
44
|
+
(0, index_1.resetAgentSeqForTests)();
|
|
45
|
+
});
|
|
46
|
+
it('reproduces a specialized child with parent lineage', async () => {
|
|
47
|
+
const organism = await createOrg();
|
|
48
|
+
await organism.start();
|
|
49
|
+
const parent = await organism.spawnAgent({
|
|
50
|
+
reason: 'seed',
|
|
51
|
+
objective: 'Handle commerce',
|
|
52
|
+
needId: 'commerce',
|
|
53
|
+
requiredCapabilities: ['commerce', 'analytics'],
|
|
54
|
+
geneId: 'commerce-generalist',
|
|
55
|
+
tokens: 100000,
|
|
56
|
+
});
|
|
57
|
+
const child = await organism.reproduceAgent(parent.id, {
|
|
58
|
+
reason: 'Need Swedish VAT expertise',
|
|
59
|
+
specialization: ['swedish-tax', 'vat'],
|
|
60
|
+
tokens: 20000,
|
|
61
|
+
});
|
|
62
|
+
expect(child.parentAgentId).toBe(parent.id);
|
|
63
|
+
expect(child.generation).toBe(2);
|
|
64
|
+
expect(child.capabilities).toEqual(expect.arrayContaining(['commerce', 'analytics', 'swedish-tax', 'vat']));
|
|
65
|
+
expect(child.permissions.every((p) => parent.permissions.includes(p))).toBe(true);
|
|
66
|
+
const tree = await organism.formatGenealogy();
|
|
67
|
+
expect(tree).toContain(parent.id);
|
|
68
|
+
expect(tree).toContain(child.id);
|
|
69
|
+
const gene = await organism.getGenealogy();
|
|
70
|
+
const parentGene = gene.find((g) => g.agentId === parent.id);
|
|
71
|
+
expect(parentGene?.children).toContain(child.id);
|
|
72
|
+
await organism.terminate();
|
|
73
|
+
});
|
|
74
|
+
it('enforces maxChildrenPerAgent', async () => {
|
|
75
|
+
const organism = await createOrg({
|
|
76
|
+
limits: {
|
|
77
|
+
maxAgents: 10,
|
|
78
|
+
maxGenerationDepth: 5,
|
|
79
|
+
maxChildrenPerAgent: 1,
|
|
80
|
+
maxSpawnRatePerMinute: 20,
|
|
81
|
+
maxTotalCostPerHour: 50,
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
await organism.start();
|
|
85
|
+
const parent = await organism.spawnAgent({
|
|
86
|
+
reason: 'seed',
|
|
87
|
+
objective: 'parent',
|
|
88
|
+
needId: 'p',
|
|
89
|
+
requiredCapabilities: ['commerce'],
|
|
90
|
+
geneId: 'commerce-generalist',
|
|
91
|
+
tokens: 80000,
|
|
92
|
+
});
|
|
93
|
+
await organism.reproduceAgent(parent.id, {
|
|
94
|
+
reason: 'first child',
|
|
95
|
+
specialization: ['returns'],
|
|
96
|
+
});
|
|
97
|
+
await expect(organism.reproduceAgent(parent.id, {
|
|
98
|
+
reason: 'second child',
|
|
99
|
+
specialization: ['vat'],
|
|
100
|
+
})).rejects.toThrow(/maxChildrenPerAgent/);
|
|
101
|
+
await organism.terminate();
|
|
102
|
+
});
|
|
103
|
+
it('enforces maxGenerationDepth', async () => {
|
|
104
|
+
const organism = await createOrg({
|
|
105
|
+
limits: {
|
|
106
|
+
maxAgents: 10,
|
|
107
|
+
maxGenerationDepth: 2,
|
|
108
|
+
maxChildrenPerAgent: 3,
|
|
109
|
+
maxSpawnRatePerMinute: 20,
|
|
110
|
+
maxTotalCostPerHour: 50,
|
|
111
|
+
},
|
|
112
|
+
reproduction: { cooldownMs: 0 },
|
|
113
|
+
});
|
|
114
|
+
await organism.start();
|
|
115
|
+
const a1 = await organism.spawnAgent({
|
|
116
|
+
reason: 'seed',
|
|
117
|
+
objective: 'g1',
|
|
118
|
+
needId: 'g1',
|
|
119
|
+
requiredCapabilities: ['commerce'],
|
|
120
|
+
geneId: 'commerce-generalist',
|
|
121
|
+
tokens: 100000,
|
|
122
|
+
});
|
|
123
|
+
const a2 = await organism.reproduceAgent(a1.id, {
|
|
124
|
+
reason: 'g2',
|
|
125
|
+
specialization: ['vat'],
|
|
126
|
+
});
|
|
127
|
+
await expect(organism.reproduceAgent(a2.id, {
|
|
128
|
+
reason: 'g3',
|
|
129
|
+
specialization: ['deep'],
|
|
130
|
+
})).rejects.toThrow(/maxGenerationDepth/);
|
|
131
|
+
await organism.terminate();
|
|
132
|
+
});
|
|
133
|
+
it('blocks reproduction when gene disables it', async () => {
|
|
134
|
+
const organism = await createOrg();
|
|
135
|
+
await organism.start();
|
|
136
|
+
const parent = await organism.spawnAgent({
|
|
137
|
+
reason: 'seed',
|
|
138
|
+
objective: 'research',
|
|
139
|
+
needId: 'r',
|
|
140
|
+
requiredCapabilities: ['research'],
|
|
141
|
+
geneId: 'no-repro',
|
|
142
|
+
tokens: 10000,
|
|
143
|
+
});
|
|
144
|
+
await expect(organism.reproduceAgent(parent.id, { reason: 'should fail', specialization: ['x'] })).rejects.toThrow(index_1.OrganismLimitError);
|
|
145
|
+
await organism.terminate();
|
|
146
|
+
});
|
|
147
|
+
it('inherits resource fraction from parent wallet', async () => {
|
|
148
|
+
const organism = await createOrg();
|
|
149
|
+
await organism.start();
|
|
150
|
+
const parent = await organism.spawnAgent({
|
|
151
|
+
reason: 'seed',
|
|
152
|
+
objective: 'commerce',
|
|
153
|
+
needId: 'c',
|
|
154
|
+
requiredCapabilities: ['commerce'],
|
|
155
|
+
geneId: 'commerce-generalist',
|
|
156
|
+
tokens: 100000,
|
|
157
|
+
});
|
|
158
|
+
// Force parent-wallet transfer path (no request.tokens and parent has tokens)
|
|
159
|
+
const child = await organism.reproduceAgent(parent.id, {
|
|
160
|
+
reason: 'split budget',
|
|
161
|
+
specialization: ['pricing'],
|
|
162
|
+
inheritance: {
|
|
163
|
+
...index_1.DEFAULT_INHERITANCE_POLICY,
|
|
164
|
+
resources: { transferFraction: 0.5 },
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
const refreshedParent = (await organism.listAgents()).find((a) => a.id === parent.id);
|
|
168
|
+
// When poolWallet is used because request.tokens undefined but we still may allocate...
|
|
169
|
+
// Reproduce without tokens uses parent transfer when parentTokens > 0 and !request.tokens
|
|
170
|
+
expect(child.wallet.tokensRemaining ?? 0).toBeGreaterThan(0);
|
|
171
|
+
expect((refreshedParent.wallet.tokensRemaining ?? 0) + (child.wallet.tokensRemaining ?? 0)).toBeLessThanOrEqual(100000 + 25000);
|
|
172
|
+
await organism.terminate();
|
|
173
|
+
});
|
|
174
|
+
it('exposes reproduce on agent context', async () => {
|
|
175
|
+
const organism = await createOrg();
|
|
176
|
+
await organism.start();
|
|
177
|
+
const parent = await organism.spawnAgent({
|
|
178
|
+
reason: 'seed',
|
|
179
|
+
objective: 'commerce',
|
|
180
|
+
needId: 'c',
|
|
181
|
+
requiredCapabilities: ['commerce'],
|
|
182
|
+
geneId: 'commerce-generalist',
|
|
183
|
+
tokens: 80000,
|
|
184
|
+
});
|
|
185
|
+
const ctx = organism.createAgentContext(parent.id);
|
|
186
|
+
const child = await ctx.reproduce({
|
|
187
|
+
reason: 'Need sizing expertise',
|
|
188
|
+
specialization: ['sizing'],
|
|
189
|
+
});
|
|
190
|
+
expect(child.parentAgentId).toBe(parent.id);
|
|
191
|
+
await organism.terminate();
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
describe('phase 3 evolution', () => {
|
|
195
|
+
beforeEach(() => {
|
|
196
|
+
(0, index_1.resetAgentSeqForTests)();
|
|
197
|
+
});
|
|
198
|
+
it('mutates strategy config and records audit history', async () => {
|
|
199
|
+
const organism = await createOrg();
|
|
200
|
+
await organism.start();
|
|
201
|
+
const agent = await organism.spawnAgent({
|
|
202
|
+
reason: 'seed',
|
|
203
|
+
objective: 'pricing',
|
|
204
|
+
needId: 'pricing',
|
|
205
|
+
requiredCapabilities: ['commerce'],
|
|
206
|
+
geneId: 'commerce-generalist',
|
|
207
|
+
});
|
|
208
|
+
const mutated = await organism.mutateAgent(agent.id, {
|
|
209
|
+
reason: 'Try lower temperature planning',
|
|
210
|
+
mutation: {
|
|
211
|
+
modelConfig: { temperature: 0.2 },
|
|
212
|
+
strategyConfig: { planning: 'decompose-first' },
|
|
213
|
+
promptChanges: ['Prefer stepwise plans'],
|
|
214
|
+
addedCapabilities: ['experimentation'],
|
|
215
|
+
},
|
|
216
|
+
});
|
|
217
|
+
expect(mutated.modelConfig.temperature).toBe(0.2);
|
|
218
|
+
expect(mutated.strategyConfig.planning).toBe('decompose-first');
|
|
219
|
+
expect(mutated.capabilities).toContain('experimentation');
|
|
220
|
+
expect(mutated.mutations).toHaveLength(1);
|
|
221
|
+
expect(mutated.systemPrompt).toContain('Prefer stepwise plans');
|
|
222
|
+
await organism.terminate();
|
|
223
|
+
});
|
|
224
|
+
it('rejects mutation when gene disables it', async () => {
|
|
225
|
+
const organism = await createOrg();
|
|
226
|
+
await organism.start();
|
|
227
|
+
const agent = await organism.spawnAgent({
|
|
228
|
+
reason: 'seed',
|
|
229
|
+
objective: 'research',
|
|
230
|
+
needId: 'r',
|
|
231
|
+
requiredCapabilities: ['research'],
|
|
232
|
+
geneId: 'no-repro',
|
|
233
|
+
});
|
|
234
|
+
await expect(organism.mutateAgent(agent.id, {
|
|
235
|
+
reason: 'x',
|
|
236
|
+
mutation: { promptChanges: ['nope'] },
|
|
237
|
+
})).rejects.toThrow(/mutation disabled/);
|
|
238
|
+
await organism.terminate();
|
|
239
|
+
});
|
|
240
|
+
it('evaluates a generation and selects a winner', async () => {
|
|
241
|
+
const organism = await createOrg();
|
|
242
|
+
await organism.start();
|
|
243
|
+
const v1 = await organism.spawnAgent({
|
|
244
|
+
reason: 'v1',
|
|
245
|
+
objective: 'pricing-v1',
|
|
246
|
+
needId: 'pricing-v1',
|
|
247
|
+
requiredCapabilities: ['commerce'],
|
|
248
|
+
geneId: 'commerce-generalist',
|
|
249
|
+
});
|
|
250
|
+
const v2 = await organism.spawnAgent({
|
|
251
|
+
reason: 'v2',
|
|
252
|
+
objective: 'pricing-v2',
|
|
253
|
+
needId: 'pricing-v2',
|
|
254
|
+
requiredCapabilities: ['commerce'],
|
|
255
|
+
geneId: 'commerce-generalist',
|
|
256
|
+
});
|
|
257
|
+
const v3 = await organism.spawnAgent({
|
|
258
|
+
reason: 'v3',
|
|
259
|
+
objective: 'pricing-v3',
|
|
260
|
+
needId: 'pricing-v3',
|
|
261
|
+
requiredCapabilities: ['commerce'],
|
|
262
|
+
geneId: 'commerce-generalist',
|
|
263
|
+
});
|
|
264
|
+
await organism.reportOutcome(v1.id, {
|
|
265
|
+
result: 'ok',
|
|
266
|
+
metrics: { valueGenerated: 100, cost: 10, confidence: 0.5 },
|
|
267
|
+
});
|
|
268
|
+
await organism.reportOutcome(v2.id, {
|
|
269
|
+
result: 'great',
|
|
270
|
+
metrics: { valueGenerated: 2000, cost: 5, confidence: 0.95 },
|
|
271
|
+
});
|
|
272
|
+
await organism.reportOutcome(v3.id, {
|
|
273
|
+
result: 'meh',
|
|
274
|
+
metrics: { valueGenerated: 50, cost: 20, confidence: 0.4 },
|
|
275
|
+
});
|
|
276
|
+
const result = await organism.evaluateGeneration({
|
|
277
|
+
population: [v1.id, v2.id, v3.id],
|
|
278
|
+
populationId: 'pricing',
|
|
279
|
+
});
|
|
280
|
+
expect(result.winner).toBe(v2.id);
|
|
281
|
+
expect(result.scores[v2.id]).toBeGreaterThan(result.scores[v1.id]);
|
|
282
|
+
expect(organism.getEvolutionaryHistory()).toHaveLength(1);
|
|
283
|
+
await organism.terminate();
|
|
284
|
+
});
|
|
285
|
+
it('promotes winning strategy into losers when requested', async () => {
|
|
286
|
+
const organism = await createOrg();
|
|
287
|
+
await organism.start();
|
|
288
|
+
const a = await organism.spawnAgent({
|
|
289
|
+
reason: 'a',
|
|
290
|
+
objective: 'a',
|
|
291
|
+
needId: 'a',
|
|
292
|
+
requiredCapabilities: ['commerce'],
|
|
293
|
+
geneId: 'commerce-generalist',
|
|
294
|
+
});
|
|
295
|
+
const b = await organism.spawnAgent({
|
|
296
|
+
reason: 'b',
|
|
297
|
+
objective: 'b',
|
|
298
|
+
needId: 'b',
|
|
299
|
+
requiredCapabilities: ['commerce'],
|
|
300
|
+
geneId: 'commerce-generalist',
|
|
301
|
+
});
|
|
302
|
+
await organism.reportOutcome(a.id, {
|
|
303
|
+
result: 'win',
|
|
304
|
+
metrics: { valueGenerated: 5000, cost: 1, confidence: 0.99 },
|
|
305
|
+
});
|
|
306
|
+
await organism.reportOutcome(b.id, {
|
|
307
|
+
result: 'lose',
|
|
308
|
+
metrics: { valueGenerated: 1, cost: 10, confidence: 0.2 },
|
|
309
|
+
});
|
|
310
|
+
await organism.evaluateGeneration({
|
|
311
|
+
population: [a.id, b.id],
|
|
312
|
+
promoteToLosers: true,
|
|
313
|
+
});
|
|
314
|
+
const loser = (await organism.listAgents()).find((x) => x.id === b.id);
|
|
315
|
+
expect(loser.mutations.length).toBeGreaterThan(0);
|
|
316
|
+
expect(String(loser.strategyConfig.promotedFrom)).toBe(a.id);
|
|
317
|
+
await organism.terminate();
|
|
318
|
+
});
|
|
319
|
+
});
|
|
320
|
+
//# sourceMappingURL=organism.phase2-3.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organism.phase2-3.test.js","sourceRoot":"","sources":["../../src/__tests__/organism.phase2-3.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organism.phase4.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/organism.phase4.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const index_1 = require("../index");
|
|
4
|
+
async function createOrg(overrides = {}) {
|
|
5
|
+
return (0, index_1.createOrganism)({
|
|
6
|
+
mission: { id: 'econ', objective: 'Allocate scarce resources efficiently' },
|
|
7
|
+
genes: [
|
|
8
|
+
{
|
|
9
|
+
id: 'ops',
|
|
10
|
+
capabilities: ['operations', 'analytics'],
|
|
11
|
+
reproduction: { enabled: true },
|
|
12
|
+
mutation: { enabled: true },
|
|
13
|
+
},
|
|
14
|
+
],
|
|
15
|
+
resources: {
|
|
16
|
+
tokenBudget: 100000,
|
|
17
|
+
monthlyBudget: { amount: 100, currency: 'USD' },
|
|
18
|
+
},
|
|
19
|
+
limits: {
|
|
20
|
+
maxAgents: 10,
|
|
21
|
+
maxGenerationDepth: 3,
|
|
22
|
+
maxChildrenPerAgent: 2,
|
|
23
|
+
maxSpawnRatePerMinute: 20,
|
|
24
|
+
maxTotalCostPerHour: 50,
|
|
25
|
+
},
|
|
26
|
+
market: { minNetExpectedValue: 0, priceWeight: 0.2 },
|
|
27
|
+
simulation: true,
|
|
28
|
+
debug: false,
|
|
29
|
+
...overrides,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
describe('phase 4 agent economy', () => {
|
|
33
|
+
beforeEach(() => {
|
|
34
|
+
(0, index_1.resetAgentSeqForTests)();
|
|
35
|
+
(0, index_1.resetBidSeqForTests)();
|
|
36
|
+
});
|
|
37
|
+
it('forecasts utility with opportunity cost under scarcity', async () => {
|
|
38
|
+
const organism = await createOrg({
|
|
39
|
+
resources: {
|
|
40
|
+
tokenBudget: 100000,
|
|
41
|
+
monthlyBudget: { amount: 100, currency: 'USD' },
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
await organism.start();
|
|
45
|
+
// Drain most of the pool to raise scarcity
|
|
46
|
+
const agent = await organism.spawnAgent({
|
|
47
|
+
reason: 'seed',
|
|
48
|
+
objective: 'ops',
|
|
49
|
+
needId: 'ops',
|
|
50
|
+
requiredCapabilities: ['operations'],
|
|
51
|
+
tokens: 90000,
|
|
52
|
+
});
|
|
53
|
+
const forecast = await organism.forecastUtility({
|
|
54
|
+
agentId: agent.id,
|
|
55
|
+
requested: { tokens: 5000 },
|
|
56
|
+
expectedValue: 50,
|
|
57
|
+
confidence: 0.8,
|
|
58
|
+
});
|
|
59
|
+
expect(forecast.opportunityCost).toBeGreaterThan(0);
|
|
60
|
+
expect(forecast.reasoningSummary).toContain('scarcity=');
|
|
61
|
+
await organism.terminate();
|
|
62
|
+
});
|
|
63
|
+
it('clears a market and awards the higher-value bid', async () => {
|
|
64
|
+
const organism = await createOrg();
|
|
65
|
+
await organism.start();
|
|
66
|
+
const a = await organism.spawnAgent({
|
|
67
|
+
reason: 'a',
|
|
68
|
+
objective: 'a',
|
|
69
|
+
needId: 'a',
|
|
70
|
+
requiredCapabilities: ['operations'],
|
|
71
|
+
tokens: 1000,
|
|
72
|
+
});
|
|
73
|
+
const b = await organism.spawnAgent({
|
|
74
|
+
reason: 'b',
|
|
75
|
+
objective: 'b',
|
|
76
|
+
needId: 'b',
|
|
77
|
+
requiredCapabilities: ['analytics'],
|
|
78
|
+
tokens: 1000,
|
|
79
|
+
});
|
|
80
|
+
organism.placeBid({
|
|
81
|
+
agentId: a.id,
|
|
82
|
+
reason: 'low value sim',
|
|
83
|
+
requested: { tokens: 40000 },
|
|
84
|
+
expectedValue: 10,
|
|
85
|
+
confidence: 0.4,
|
|
86
|
+
urgency: 0.2,
|
|
87
|
+
});
|
|
88
|
+
organism.placeBid({
|
|
89
|
+
agentId: b.id,
|
|
90
|
+
reason: 'high value analysis',
|
|
91
|
+
requested: { tokens: 40000 },
|
|
92
|
+
expectedValue: 5000,
|
|
93
|
+
confidence: 0.9,
|
|
94
|
+
urgency: 0.8,
|
|
95
|
+
});
|
|
96
|
+
const cleared = await organism.clearMarket();
|
|
97
|
+
expect(cleared.awarded.some((w) => w.agentId === b.id)).toBe(true);
|
|
98
|
+
const winner = (await organism.listAgents()).find((x) => x.id === b.id);
|
|
99
|
+
expect(winner.wallet.tokensRemaining ?? 0).toBeGreaterThan(1000);
|
|
100
|
+
await organism.terminate();
|
|
101
|
+
});
|
|
102
|
+
it('denies low-forecast direct resource requests', async () => {
|
|
103
|
+
const organism = await createOrg({
|
|
104
|
+
resources: {
|
|
105
|
+
tokenBudget: 50000,
|
|
106
|
+
monthlyBudget: { amount: 10, currency: 'USD' },
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
await organism.start();
|
|
110
|
+
const agent = await organism.spawnAgent({
|
|
111
|
+
reason: 'seed',
|
|
112
|
+
objective: 'ops',
|
|
113
|
+
needId: 'ops',
|
|
114
|
+
requiredCapabilities: ['operations'],
|
|
115
|
+
tokens: 40000,
|
|
116
|
+
});
|
|
117
|
+
const result = await organism.requestResourcesForAgent(agent.id, {
|
|
118
|
+
reason: 'wasteful',
|
|
119
|
+
requested: { tokens: 5000 },
|
|
120
|
+
expectedValue: 0.01,
|
|
121
|
+
confidence: 0.1,
|
|
122
|
+
});
|
|
123
|
+
expect(result.approved).toBe(false);
|
|
124
|
+
expect(result.forecast).toBeDefined();
|
|
125
|
+
await organism.terminate();
|
|
126
|
+
});
|
|
127
|
+
it('negotiates peer resource transfer when forecast is positive', async () => {
|
|
128
|
+
const organism = await createOrg();
|
|
129
|
+
await organism.start();
|
|
130
|
+
const donor = await organism.spawnAgent({
|
|
131
|
+
reason: 'donor',
|
|
132
|
+
objective: 'donor',
|
|
133
|
+
needId: 'd',
|
|
134
|
+
requiredCapabilities: ['operations'],
|
|
135
|
+
tokens: 50000,
|
|
136
|
+
});
|
|
137
|
+
const receiver = await organism.spawnAgent({
|
|
138
|
+
reason: 'receiver',
|
|
139
|
+
objective: 'receiver',
|
|
140
|
+
needId: 'r',
|
|
141
|
+
requiredCapabilities: ['analytics'],
|
|
142
|
+
tokens: 1000,
|
|
143
|
+
});
|
|
144
|
+
const result = await organism.negotiate({
|
|
145
|
+
fromAgentId: donor.id,
|
|
146
|
+
toAgentId: receiver.id,
|
|
147
|
+
reason: 'Fund analytics burst',
|
|
148
|
+
transfer: { tokens: 10000 },
|
|
149
|
+
expectedValue: 2000,
|
|
150
|
+
confidence: 0.85,
|
|
151
|
+
});
|
|
152
|
+
expect(result.approved).toBe(true);
|
|
153
|
+
const agents = await organism.listAgents();
|
|
154
|
+
const d = agents.find((x) => x.id === donor.id);
|
|
155
|
+
const r = agents.find((x) => x.id === receiver.id);
|
|
156
|
+
expect(d.wallet.tokensRemaining).toBe(40000);
|
|
157
|
+
expect(r.wallet.tokensRemaining).toBe(11000);
|
|
158
|
+
await organism.terminate();
|
|
159
|
+
});
|
|
160
|
+
it('exposes bidding and negotiation on agent context', async () => {
|
|
161
|
+
const organism = await createOrg();
|
|
162
|
+
await organism.start();
|
|
163
|
+
const a = await organism.spawnAgent({
|
|
164
|
+
reason: 'a',
|
|
165
|
+
objective: 'a',
|
|
166
|
+
needId: 'a',
|
|
167
|
+
requiredCapabilities: ['operations'],
|
|
168
|
+
tokens: 20000,
|
|
169
|
+
});
|
|
170
|
+
const b = await organism.spawnAgent({
|
|
171
|
+
reason: 'b',
|
|
172
|
+
objective: 'b',
|
|
173
|
+
needId: 'b',
|
|
174
|
+
requiredCapabilities: ['analytics'],
|
|
175
|
+
tokens: 1000,
|
|
176
|
+
});
|
|
177
|
+
const ctx = organism.createAgentContext(a.id);
|
|
178
|
+
ctx.placeBid({
|
|
179
|
+
reason: 'need burst',
|
|
180
|
+
requested: { tokens: 5000 },
|
|
181
|
+
expectedValue: 800,
|
|
182
|
+
confidence: 0.7,
|
|
183
|
+
});
|
|
184
|
+
expect(organism.listOpenBids().length).toBe(1);
|
|
185
|
+
const nego = await ctx.negotiate({
|
|
186
|
+
toAgentId: b.id,
|
|
187
|
+
reason: 'share tokens',
|
|
188
|
+
transfer: { tokens: 2000 },
|
|
189
|
+
expectedValue: 500,
|
|
190
|
+
confidence: 0.8,
|
|
191
|
+
});
|
|
192
|
+
expect(nego.approved).toBe(true);
|
|
193
|
+
await organism.terminate();
|
|
194
|
+
});
|
|
195
|
+
it('requestResources with useMarket clears bids', async () => {
|
|
196
|
+
const organism = await createOrg();
|
|
197
|
+
await organism.start();
|
|
198
|
+
const agent = await organism.spawnAgent({
|
|
199
|
+
reason: 'seed',
|
|
200
|
+
objective: 'ops',
|
|
201
|
+
needId: 'ops',
|
|
202
|
+
requiredCapabilities: ['operations'],
|
|
203
|
+
tokens: 1000,
|
|
204
|
+
});
|
|
205
|
+
const result = await organism.requestResourcesForAgent(agent.id, {
|
|
206
|
+
reason: 'market path',
|
|
207
|
+
requested: { tokens: 10000 },
|
|
208
|
+
expectedValue: 3000,
|
|
209
|
+
confidence: 0.9,
|
|
210
|
+
useMarket: true,
|
|
211
|
+
});
|
|
212
|
+
expect(result.approved).toBe(true);
|
|
213
|
+
expect(result.reason).toMatch(/market/i);
|
|
214
|
+
await organism.terminate();
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
//# sourceMappingURL=organism.phase4.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organism.phase4.test.js","sourceRoot":"","sources":["../../src/__tests__/organism.phase4.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signal / outcome bridge helpers for embedding organism in product platforms.
|
|
3
|
+
* Keep organism generic — callers map industry payloads into these shapes.
|
|
4
|
+
*/
|
|
5
|
+
import type { AgentOutcomeReport, EnvironmentSignal, SignalNeedMapping } from '../types/organism.types';
|
|
6
|
+
export type ExternalSignalLike = {
|
|
7
|
+
id?: string;
|
|
8
|
+
type: string;
|
|
9
|
+
source: string;
|
|
10
|
+
timestamp?: Date | string | number;
|
|
11
|
+
severity?: number;
|
|
12
|
+
confidence?: number;
|
|
13
|
+
relevance?: number;
|
|
14
|
+
data?: unknown;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Normalize an external/product signal into an EnvironmentSignal.
|
|
18
|
+
* Strips tenancy / vertical fields — those belong outside organism.
|
|
19
|
+
*/
|
|
20
|
+
export declare function toEnvironmentSignal(input: ExternalSignalLike): EnvironmentSignal;
|
|
21
|
+
/** Observe-ready signal when an incident is opened by an outer detection layer. */
|
|
22
|
+
export declare function toIncidentEnvironmentSignal(input: {
|
|
23
|
+
incidentType: string;
|
|
24
|
+
source?: string;
|
|
25
|
+
severity?: number;
|
|
26
|
+
data?: Record<string, unknown>;
|
|
27
|
+
id?: string;
|
|
28
|
+
}): EnvironmentSignal;
|
|
29
|
+
/**
|
|
30
|
+
* Build SignalNeedMapping entries that route incident.<type> into investigation needs.
|
|
31
|
+
* Domain detectors stay outside organism; this only wires need→capability after detection.
|
|
32
|
+
*/
|
|
33
|
+
export declare function incidentNeedMappings(incidentTypes: string[], requiredCapabilities: string[], opts?: {
|
|
34
|
+
urgency?: number;
|
|
35
|
+
confidence?: number;
|
|
36
|
+
}): SignalNeedMapping[];
|
|
37
|
+
export type OutcomeVerdictLike = 'successful' | 'partially_successful' | 'neutral' | 'unsuccessful' | string;
|
|
38
|
+
/** Map an outer outcome evaluation into AgentOutcomeReport for utility/reputation. */
|
|
39
|
+
export declare function toAgentOutcomeReport(input: {
|
|
40
|
+
verdict: OutcomeVerdictLike;
|
|
41
|
+
confidence?: number;
|
|
42
|
+
cost?: number;
|
|
43
|
+
summary?: string;
|
|
44
|
+
missionMetricUpdates?: Record<string, number>;
|
|
45
|
+
}): AgentOutcomeReport;
|
|
46
|
+
//# sourceMappingURL=signal-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal-bridge.d.ts","sourceRoot":"","sources":["../../src/bridge/signal-bridge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,iBAAiB,CAiBhF;AAED,mFAAmF;AACnF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,GAAG,iBAAiB,CAQpB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,MAAM,EAAE,EACvB,oBAAoB,EAAE,MAAM,EAAE,EAC9B,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C,iBAAiB,EAAE,CAQrB;AAED,MAAM,MAAM,kBAAkB,GAC1B,YAAY,GACZ,sBAAsB,GACtB,SAAS,GACT,cAAc,GACd,MAAM,CAAC;AAEX,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,OAAO,EAAE,kBAAkB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/C,GAAG,kBAAkB,CAqBrB"}
|