@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,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createEmptyWallet = exports.TerminationEngine = exports.BirthEngine = void 0;
|
|
4
|
+
exports.resetAgentSeqForTests = resetAgentSeqForTests;
|
|
5
|
+
const agent_1 = require("@hazeljs/agent");
|
|
6
|
+
const resource_allocator_1 = require("../economy/resource-allocator");
|
|
7
|
+
Object.defineProperty(exports, "createEmptyWallet", { enumerable: true, get: function () { return resource_allocator_1.createEmptyWallet; } });
|
|
8
|
+
const organism_events_1 = require("../events/organism-events");
|
|
9
|
+
let agentSeq = 0;
|
|
10
|
+
function nextAgentId() {
|
|
11
|
+
agentSeq += 1;
|
|
12
|
+
return `A${agentSeq}`;
|
|
13
|
+
}
|
|
14
|
+
function resetAgentSeqForTests() {
|
|
15
|
+
agentSeq = 0;
|
|
16
|
+
}
|
|
17
|
+
function defaultReputation(agentId) {
|
|
18
|
+
return {
|
|
19
|
+
agentId,
|
|
20
|
+
score: 0.5,
|
|
21
|
+
dimensions: {
|
|
22
|
+
usefulness: 0.5,
|
|
23
|
+
reliability: 0.5,
|
|
24
|
+
efficiency: 0.5,
|
|
25
|
+
policyCompliance: 1,
|
|
26
|
+
collaboration: 0.5,
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function defaultUtility() {
|
|
31
|
+
return {
|
|
32
|
+
score: 0.5,
|
|
33
|
+
valueGenerated: 0,
|
|
34
|
+
cost: 0,
|
|
35
|
+
riskPenalty: 0,
|
|
36
|
+
confidence: 0.5,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Birth engine — compiles gene + proposal into DNA and registers with AgentRuntime.
|
|
41
|
+
*/
|
|
42
|
+
class BirthEngine {
|
|
43
|
+
constructor(events, repo, capabilities, organismId, agentRuntime) {
|
|
44
|
+
this.events = events;
|
|
45
|
+
this.repo = repo;
|
|
46
|
+
this.capabilities = capabilities;
|
|
47
|
+
this.organismId = organismId;
|
|
48
|
+
this.agentRuntime = agentRuntime;
|
|
49
|
+
}
|
|
50
|
+
async spawn(input) {
|
|
51
|
+
const id = nextAgentId();
|
|
52
|
+
const generation = input.generation ?? 1;
|
|
53
|
+
const specialize = input.proposal.specialize ?? [];
|
|
54
|
+
const capabilities = Array.from(new Set([...input.gene.capabilities, ...specialize, ...input.proposal.requiredCapabilities]));
|
|
55
|
+
const nameHint = input.nameHint ??
|
|
56
|
+
`${input.proposal.needId
|
|
57
|
+
.split(/[-_]/)
|
|
58
|
+
.map((p) => p.charAt(0).toUpperCase() + p.slice(1))
|
|
59
|
+
.join('')}Agent`;
|
|
60
|
+
const dnaAgentName = `${nameHint}_${id}`;
|
|
61
|
+
const objective = input.proposal.expectedOutcome;
|
|
62
|
+
const dna = (0, agent_1.exportAgentDna)({
|
|
63
|
+
name: dnaAgentName,
|
|
64
|
+
description: input.gene.description ?? input.proposal.reason,
|
|
65
|
+
systemPrompt: input.gene.initialPrompt ??
|
|
66
|
+
`You are ${dnaAgentName}. Objective: ${objective}. Capabilities: ${capabilities.join(', ')}.`,
|
|
67
|
+
tools: [],
|
|
68
|
+
policies: input.gene.policies,
|
|
69
|
+
mission: { goal: objective },
|
|
70
|
+
metadata: {
|
|
71
|
+
capabilities,
|
|
72
|
+
organismId: this.organismId,
|
|
73
|
+
geneId: input.gene.id,
|
|
74
|
+
needId: input.proposal.needId,
|
|
75
|
+
terminationCriteria: input.proposal.terminationCriteria,
|
|
76
|
+
},
|
|
77
|
+
version: '1.0.0',
|
|
78
|
+
});
|
|
79
|
+
if (this.agentRuntime) {
|
|
80
|
+
const AgentClass = (0, agent_1.createAgentClassFromDna)(dna);
|
|
81
|
+
this.agentRuntime.registerAgent(AgentClass);
|
|
82
|
+
}
|
|
83
|
+
const agent = {
|
|
84
|
+
id,
|
|
85
|
+
name: nameHint,
|
|
86
|
+
objective,
|
|
87
|
+
capabilities,
|
|
88
|
+
geneId: input.gene.id,
|
|
89
|
+
parentAgentId: input.parentAgentId ?? input.proposal.parentAgentId,
|
|
90
|
+
generation,
|
|
91
|
+
status: 'active',
|
|
92
|
+
reputation: defaultReputation(id),
|
|
93
|
+
utility: defaultUtility(),
|
|
94
|
+
wallet: { ...input.wallet },
|
|
95
|
+
birthProposal: input.proposal,
|
|
96
|
+
terminationCriteria: input.proposal.terminationCriteria ?? [],
|
|
97
|
+
createdAt: new Date(),
|
|
98
|
+
evaluationCount: 0,
|
|
99
|
+
criticalResponsibility: false,
|
|
100
|
+
costConsumed: 0,
|
|
101
|
+
tokensConsumed: 0,
|
|
102
|
+
valueGenerated: 0,
|
|
103
|
+
specialize,
|
|
104
|
+
dnaAgentName,
|
|
105
|
+
systemPrompt: dna.systemPrompt,
|
|
106
|
+
permissions: [...capabilities],
|
|
107
|
+
strategyConfig: {},
|
|
108
|
+
modelConfig: {},
|
|
109
|
+
mutations: [],
|
|
110
|
+
strategyId: `${input.gene.id}:g${generation}`,
|
|
111
|
+
};
|
|
112
|
+
const genealogy = {
|
|
113
|
+
agentId: id,
|
|
114
|
+
parentAgentId: agent.parentAgentId,
|
|
115
|
+
rootGeneId: input.gene.id,
|
|
116
|
+
generation,
|
|
117
|
+
children: [],
|
|
118
|
+
createdAt: agent.createdAt,
|
|
119
|
+
};
|
|
120
|
+
await this.repo.saveAgent(this.organismId, agent);
|
|
121
|
+
await this.repo.saveGenealogy(this.organismId, genealogy);
|
|
122
|
+
if (agent.parentAgentId) {
|
|
123
|
+
const parentGene = (await this.repo.listGenealogy(this.organismId)).find((g) => g.agentId === agent.parentAgentId);
|
|
124
|
+
if (parentGene) {
|
|
125
|
+
parentGene.children = [...parentGene.children, id];
|
|
126
|
+
await this.repo.saveGenealogy(this.organismId, parentGene);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
this.capabilities.register(id, capabilities);
|
|
130
|
+
await this.events.emit(organism_events_1.OrganismEventType.ORGANISM_AGENT_BORN, this.organismId, {
|
|
131
|
+
organismId: this.organismId,
|
|
132
|
+
agentId: id,
|
|
133
|
+
parentAgentId: agent.parentAgentId,
|
|
134
|
+
reason: input.proposal.reason,
|
|
135
|
+
generation,
|
|
136
|
+
geneId: input.gene.id,
|
|
137
|
+
needId: input.proposal.needId,
|
|
138
|
+
name: nameHint,
|
|
139
|
+
});
|
|
140
|
+
return agent;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
exports.BirthEngine = BirthEngine;
|
|
144
|
+
/**
|
|
145
|
+
* Termination engine — release resources, retain genealogy, emit death event.
|
|
146
|
+
*/
|
|
147
|
+
class TerminationEngine {
|
|
148
|
+
constructor(events, repo, capabilities, organismId, releaseWallet) {
|
|
149
|
+
this.events = events;
|
|
150
|
+
this.repo = repo;
|
|
151
|
+
this.capabilities = capabilities;
|
|
152
|
+
this.organismId = organismId;
|
|
153
|
+
this.releaseWallet = releaseWallet;
|
|
154
|
+
}
|
|
155
|
+
async terminate(agentId, reason) {
|
|
156
|
+
const agent = await this.repo.getAgent(this.organismId, agentId);
|
|
157
|
+
if (!agent || agent.status === 'terminated')
|
|
158
|
+
return agent;
|
|
159
|
+
agent.status = 'termination-pending';
|
|
160
|
+
await this.repo.saveAgent(this.organismId, agent);
|
|
161
|
+
this.releaseWallet(agent);
|
|
162
|
+
this.capabilities.unregister(agentId);
|
|
163
|
+
agent.status = 'terminated';
|
|
164
|
+
agent.terminatedAt = new Date();
|
|
165
|
+
await this.repo.saveAgent(this.organismId, agent);
|
|
166
|
+
const genealogy = (await this.repo.listGenealogy(this.organismId)).find((g) => g.agentId === agentId);
|
|
167
|
+
if (genealogy) {
|
|
168
|
+
genealogy.terminatedAt = agent.terminatedAt;
|
|
169
|
+
await this.repo.saveGenealogy(this.organismId, genealogy);
|
|
170
|
+
}
|
|
171
|
+
await this.events.emit(organism_events_1.OrganismEventType.ORGANISM_AGENT_TERMINATED, this.organismId, {
|
|
172
|
+
agentId,
|
|
173
|
+
reason,
|
|
174
|
+
finalScore: agent.utility.score,
|
|
175
|
+
totalCost: agent.costConsumed,
|
|
176
|
+
totalValue: agent.valueGenerated,
|
|
177
|
+
});
|
|
178
|
+
return agent;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
exports.TerminationEngine = TerminationEngine;
|
|
182
|
+
//# sourceMappingURL=birth-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"birth-engine.js","sourceRoot":"","sources":["../../src/lifecycle/birth-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { DetectedNeed, OrganismDecision, RuntimeAgentRecord } from '../types/organism.types';
|
|
2
|
+
import { CapabilityRegistry } from '../core/capability-registry';
|
|
3
|
+
import type { AgentGeneDefinition } from '../types/organism.types';
|
|
4
|
+
/**
|
|
5
|
+
* Deterministic decision engine: reuse → specialize → spawn → observe.
|
|
6
|
+
*/
|
|
7
|
+
export declare class DecisionEngine {
|
|
8
|
+
private readonly capabilities;
|
|
9
|
+
constructor(capabilities: CapabilityRegistry);
|
|
10
|
+
decide(input: {
|
|
11
|
+
need: DetectedNeed;
|
|
12
|
+
liveAgents: RuntimeAgentRecord[];
|
|
13
|
+
genes: AgentGeneDefinition[];
|
|
14
|
+
canSpawn: boolean;
|
|
15
|
+
spawnBlockReason?: string;
|
|
16
|
+
}): OrganismDecision;
|
|
17
|
+
selectGene(required: string[], genes: AgentGeneDefinition[]): AgentGeneDefinition | undefined;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=decision-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision-engine.d.ts","sourceRoot":"","sources":["../../src/lifecycle/decision-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;GAEG;AACH,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,EAAE,kBAAkB;IAE7D,MAAM,CAAC,KAAK,EAAE;QACZ,IAAI,EAAE,YAAY,CAAC;QACnB,UAAU,EAAE,kBAAkB,EAAE,CAAC;QACjC,KAAK,EAAE,mBAAmB,EAAE,CAAC;QAC7B,QAAQ,EAAE,OAAO,CAAC;QAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,GAAG,gBAAgB;IA8GpB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,GAAG,mBAAmB,GAAG,SAAS;CA0B9F"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DecisionEngine = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Deterministic decision engine: reuse → specialize → spawn → observe.
|
|
6
|
+
*/
|
|
7
|
+
class DecisionEngine {
|
|
8
|
+
constructor(capabilities) {
|
|
9
|
+
this.capabilities = capabilities;
|
|
10
|
+
}
|
|
11
|
+
decide(input) {
|
|
12
|
+
const { need, liveAgents, genes, canSpawn, spawnBlockReason } = input;
|
|
13
|
+
const capable = this.capabilities.findCapableAgents(need.requiredCapabilities, liveAgents);
|
|
14
|
+
if (capable.length > 0) {
|
|
15
|
+
const best = capable.sort((a, b) => b.reputation.score - a.reputation.score)[0];
|
|
16
|
+
return {
|
|
17
|
+
action: 'delegate',
|
|
18
|
+
reasoningSummary: `Capable agent ${best.id} already covers ${need.requiredCapabilities.join(', ')}`,
|
|
19
|
+
confidence: Math.min(0.95, need.confidence + 0.05),
|
|
20
|
+
targetAgentId: best.id,
|
|
21
|
+
requiredCapabilities: need.requiredCapabilities,
|
|
22
|
+
needId: need.need,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
const partial = this.capabilities.findPartialAgents(need.requiredCapabilities, liveAgents);
|
|
26
|
+
const gene = this.selectGene(need.requiredCapabilities, genes);
|
|
27
|
+
if (partial.length > 0 && gene) {
|
|
28
|
+
const parent = partial[0];
|
|
29
|
+
const missing = need.requiredCapabilities.filter((c) => !parent.capabilities.map((x) => x.toLowerCase()).includes(c.toLowerCase()));
|
|
30
|
+
if (!canSpawn) {
|
|
31
|
+
return {
|
|
32
|
+
action: 'observe',
|
|
33
|
+
reasoningSummary: `Would specialize for ${need.need} but spawn blocked: ${spawnBlockReason}`,
|
|
34
|
+
confidence: 0.4,
|
|
35
|
+
needId: need.need,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const proposal = {
|
|
39
|
+
reason: need.reason,
|
|
40
|
+
needId: need.need,
|
|
41
|
+
requiredCapabilities: need.requiredCapabilities,
|
|
42
|
+
expectedOutcome: `Address need ${need.need}`,
|
|
43
|
+
estimatedCost: 1,
|
|
44
|
+
expectedUtility: need.urgency,
|
|
45
|
+
terminationCriteria: [
|
|
46
|
+
`Need ${need.need} resolved`,
|
|
47
|
+
'Utility score below 0.2 after 5 evaluations',
|
|
48
|
+
'No related tasks for evaluation window',
|
|
49
|
+
],
|
|
50
|
+
confidence: need.confidence,
|
|
51
|
+
geneId: gene.id,
|
|
52
|
+
specialize: missing,
|
|
53
|
+
parentAgentId: parent.id,
|
|
54
|
+
};
|
|
55
|
+
return {
|
|
56
|
+
action: 'specialize',
|
|
57
|
+
reasoningSummary: `Partial agent ${parent.id} exists; spawn specialized agent for missing ${missing.join(', ')}`,
|
|
58
|
+
confidence: need.confidence,
|
|
59
|
+
targetAgentId: parent.id,
|
|
60
|
+
requiredCapabilities: need.requiredCapabilities,
|
|
61
|
+
resourceRequest: { tokens: 50000 },
|
|
62
|
+
birthProposal: proposal,
|
|
63
|
+
needId: need.need,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
if (!gene) {
|
|
67
|
+
return {
|
|
68
|
+
action: 'observe',
|
|
69
|
+
reasoningSummary: `No gene covers required capabilities ${need.requiredCapabilities.join(', ')}`,
|
|
70
|
+
confidence: 0.5,
|
|
71
|
+
requiredCapabilities: need.requiredCapabilities,
|
|
72
|
+
needId: need.need,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
if (!canSpawn) {
|
|
76
|
+
return {
|
|
77
|
+
action: 'observe',
|
|
78
|
+
reasoningSummary: `Need ${need.need} requires spawn but blocked: ${spawnBlockReason}`,
|
|
79
|
+
confidence: 0.4,
|
|
80
|
+
needId: need.need,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
const proposal = {
|
|
84
|
+
reason: need.reason,
|
|
85
|
+
needId: need.need,
|
|
86
|
+
requiredCapabilities: need.requiredCapabilities,
|
|
87
|
+
expectedOutcome: `Address need ${need.need}`,
|
|
88
|
+
estimatedCost: 1,
|
|
89
|
+
expectedUtility: need.urgency,
|
|
90
|
+
terminationCriteria: [
|
|
91
|
+
`Need ${need.need} resolved`,
|
|
92
|
+
'Utility score below 0.2 after 5 evaluations',
|
|
93
|
+
'No related tasks for evaluation window',
|
|
94
|
+
],
|
|
95
|
+
confidence: need.confidence,
|
|
96
|
+
geneId: gene.id,
|
|
97
|
+
specialize: need.requiredCapabilities.filter((c) => !gene.capabilities.map((g) => g.toLowerCase()).includes(c.toLowerCase())),
|
|
98
|
+
};
|
|
99
|
+
return {
|
|
100
|
+
action: 'spawn',
|
|
101
|
+
reasoningSummary: `No capable agent for ${need.need}; spawning from gene ${gene.id}`,
|
|
102
|
+
confidence: need.confidence,
|
|
103
|
+
requiredCapabilities: need.requiredCapabilities,
|
|
104
|
+
resourceRequest: { tokens: 50000 },
|
|
105
|
+
birthProposal: proposal,
|
|
106
|
+
needId: need.need,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
selectGene(required, genes) {
|
|
110
|
+
if (!genes.length)
|
|
111
|
+
return undefined;
|
|
112
|
+
const needed = required.map((c) => c.toLowerCase());
|
|
113
|
+
let best;
|
|
114
|
+
let bestScore = -1;
|
|
115
|
+
let bestRatio = -1;
|
|
116
|
+
let bestPrimaryHit = false;
|
|
117
|
+
const primary = needed[0];
|
|
118
|
+
for (const gene of genes) {
|
|
119
|
+
const caps = new Set(gene.capabilities.map((c) => c.toLowerCase()));
|
|
120
|
+
const score = needed.filter((n) => caps.has(n)).length;
|
|
121
|
+
const ratio = score / Math.max(1, gene.capabilities.length);
|
|
122
|
+
const primaryHit = primary ? caps.has(primary) : false;
|
|
123
|
+
const better = score > bestScore ||
|
|
124
|
+
(score === bestScore && ratio > bestRatio) ||
|
|
125
|
+
(score === bestScore && ratio === bestRatio && primaryHit && !bestPrimaryHit);
|
|
126
|
+
if (better) {
|
|
127
|
+
bestScore = score;
|
|
128
|
+
bestRatio = ratio;
|
|
129
|
+
bestPrimaryHit = primaryHit;
|
|
130
|
+
best = gene;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return best ?? genes[0];
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
exports.DecisionEngine = DecisionEngine;
|
|
137
|
+
//# sourceMappingURL=decision-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision-engine.js","sourceRoot":"","sources":["../../src/lifecycle/decision-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 2 — parent→child reproduction with explicit inheritance policy.
|
|
3
|
+
*/
|
|
4
|
+
import type { AgentBirthProposal, AgentGeneDefinition, AgentResourceWallet, InheritancePolicy, OrganismLimits, ReproduceRequest, RuntimeAgentRecord } from '../types/organism.types';
|
|
5
|
+
import { OrganismEventEmitter } from '../events/organism-events';
|
|
6
|
+
import type { OrganismRepository } from '../persistence/organism-repository';
|
|
7
|
+
import { ConstitutionEnforcer } from '../governance/constitution';
|
|
8
|
+
import { BirthEngine } from '../lifecycle/birth-engine';
|
|
9
|
+
import { GenealogyManager } from '../genealogy/genealogy-manager';
|
|
10
|
+
export interface ReproductionConfig {
|
|
11
|
+
cooldownMs: number;
|
|
12
|
+
}
|
|
13
|
+
export declare const DEFAULT_REPRODUCTION_CONFIG: ReproductionConfig;
|
|
14
|
+
export declare class ReproductionEngine {
|
|
15
|
+
private readonly events;
|
|
16
|
+
private readonly repo;
|
|
17
|
+
private readonly birth;
|
|
18
|
+
private readonly genealogy;
|
|
19
|
+
private readonly constitution;
|
|
20
|
+
private readonly organismId;
|
|
21
|
+
private readonly now;
|
|
22
|
+
private readonly config;
|
|
23
|
+
constructor(events: OrganismEventEmitter, repo: OrganismRepository, birth: BirthEngine, genealogy: GenealogyManager, constitution: ConstitutionEnforcer, organismId: string, now?: () => Date, config?: ReproductionConfig);
|
|
24
|
+
resolveInheritance(partial?: InheritancePolicy): InheritancePolicy;
|
|
25
|
+
assertCanReproduce(input: {
|
|
26
|
+
parent: RuntimeAgentRecord;
|
|
27
|
+
gene: AgentGeneDefinition;
|
|
28
|
+
limits: OrganismLimits;
|
|
29
|
+
liveAgents: RuntimeAgentRecord[];
|
|
30
|
+
liveChildCount: number;
|
|
31
|
+
}): void;
|
|
32
|
+
/**
|
|
33
|
+
* Build child capabilities: parent caps + specialization.
|
|
34
|
+
* Permissions must remain a subset of the parent's permission grants.
|
|
35
|
+
*/
|
|
36
|
+
resolveChildCapabilities(parent: RuntimeAgentRecord, specialization: string[], policy: InheritancePolicy): {
|
|
37
|
+
capabilities: string[];
|
|
38
|
+
permissions: string[];
|
|
39
|
+
};
|
|
40
|
+
transferResources(parent: RuntimeAgentRecord, policy: InheritancePolicy, requestedTokens?: number): {
|
|
41
|
+
childWallet: AgentResourceWallet;
|
|
42
|
+
parentWallet: AgentResourceWallet;
|
|
43
|
+
};
|
|
44
|
+
buildProposal(parent: RuntimeAgentRecord, request: ReproduceRequest, capabilities: string[]): AgentBirthProposal;
|
|
45
|
+
reproduce(input: {
|
|
46
|
+
parent: RuntimeAgentRecord;
|
|
47
|
+
gene: AgentGeneDefinition;
|
|
48
|
+
request: ReproduceRequest;
|
|
49
|
+
limits: OrganismLimits;
|
|
50
|
+
liveAgents: RuntimeAgentRecord[];
|
|
51
|
+
/** When true, child wallet comes from organism pool allocation instead of parent. */
|
|
52
|
+
poolWallet?: AgentResourceWallet;
|
|
53
|
+
}): Promise<{
|
|
54
|
+
child: RuntimeAgentRecord;
|
|
55
|
+
parent: RuntimeAgentRecord;
|
|
56
|
+
}>;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=reproduction-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reproduction-engine.d.ts","sourceRoot":"","sources":["../../src/lifecycle/reproduction-engine.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,oBAAoB,EAAqB,MAAM,2BAA2B,CAAC;AACpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,2BAA2B,EAAE,kBAEzC,CAAC;AAEF,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAPN,MAAM,EAAE,oBAAoB,EAC5B,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,gBAAgB,EAC3B,YAAY,EAAE,oBAAoB,EAClC,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,MAAM,IAAuB,EAClC,MAAM,GAAE,kBAAgD;IAG3E,kBAAkB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,iBAAiB;IAmBlE,kBAAkB,CAAC,KAAK,EAAE;QACxB,MAAM,EAAE,kBAAkB,CAAC;QAC3B,IAAI,EAAE,mBAAmB,CAAC;QAC1B,MAAM,EAAE,cAAc,CAAC;QACvB,UAAU,EAAE,kBAAkB,EAAE,CAAC;QACjC,cAAc,EAAE,MAAM,CAAC;KACxB,GAAG,IAAI;IAmCR;;;OAGG;IACH,wBAAwB,CACtB,MAAM,EAAE,kBAAkB,EAC1B,cAAc,EAAE,MAAM,EAAE,EACxB,MAAM,EAAE,iBAAiB,GACxB;QAAE,YAAY,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE;IAYpD,iBAAiB,CACf,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,iBAAiB,EACzB,eAAe,CAAC,EAAE,MAAM,GACvB;QAAE,WAAW,EAAE,mBAAmB,CAAC;QAAC,YAAY,EAAE,mBAAmB,CAAA;KAAE;IA+B1E,aAAa,CACX,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,MAAM,EAAE,GACrB,kBAAkB;IAwBf,SAAS,CAAC,KAAK,EAAE;QACrB,MAAM,EAAE,kBAAkB,CAAC;QAC3B,IAAI,EAAE,mBAAmB,CAAC;QAC1B,OAAO,EAAE,gBAAgB,CAAC;QAC1B,MAAM,EAAE,cAAc,CAAC;QACvB,UAAU,EAAE,kBAAkB,EAAE,CAAC;QACjC,qFAAqF;QACrF,UAAU,CAAC,EAAE,mBAAmB,CAAC;KAClC,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,kBAAkB,CAAC;QAAC,MAAM,EAAE,kBAAkB,CAAA;KAAE,CAAC;CAgGvE"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Phase 2 — parent→child reproduction with explicit inheritance policy.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ReproductionEngine = exports.DEFAULT_REPRODUCTION_CONFIG = void 0;
|
|
7
|
+
const organism_types_1 = require("../types/organism.types");
|
|
8
|
+
const organism_errors_1 = require("../errors/organism.errors");
|
|
9
|
+
const organism_events_1 = require("../events/organism-events");
|
|
10
|
+
exports.DEFAULT_REPRODUCTION_CONFIG = {
|
|
11
|
+
cooldownMs: 30000,
|
|
12
|
+
};
|
|
13
|
+
class ReproductionEngine {
|
|
14
|
+
constructor(events, repo, birth, genealogy, constitution, organismId, now = () => new Date(), config = exports.DEFAULT_REPRODUCTION_CONFIG) {
|
|
15
|
+
this.events = events;
|
|
16
|
+
this.repo = repo;
|
|
17
|
+
this.birth = birth;
|
|
18
|
+
this.genealogy = genealogy;
|
|
19
|
+
this.constitution = constitution;
|
|
20
|
+
this.organismId = organismId;
|
|
21
|
+
this.now = now;
|
|
22
|
+
this.config = config;
|
|
23
|
+
}
|
|
24
|
+
resolveInheritance(partial) {
|
|
25
|
+
return {
|
|
26
|
+
...organism_types_1.DEFAULT_INHERITANCE_POLICY,
|
|
27
|
+
...partial,
|
|
28
|
+
memory: {
|
|
29
|
+
strategy: partial?.memory?.strategy ??
|
|
30
|
+
organism_types_1.DEFAULT_INHERITANCE_POLICY.memory?.strategy ??
|
|
31
|
+
'relevant-only',
|
|
32
|
+
maxItems: partial?.memory?.maxItems ?? organism_types_1.DEFAULT_INHERITANCE_POLICY.memory?.maxItems,
|
|
33
|
+
},
|
|
34
|
+
resources: {
|
|
35
|
+
transferFraction: partial?.resources?.transferFraction ??
|
|
36
|
+
organism_types_1.DEFAULT_INHERITANCE_POLICY.resources?.transferFraction,
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
assertCanReproduce(input) {
|
|
41
|
+
const { parent, gene, limits, liveAgents, liveChildCount } = input;
|
|
42
|
+
if (parent.status === 'terminated' || parent.status === 'failed') {
|
|
43
|
+
throw new organism_errors_1.OrganismStateError(`Parent ${parent.id} is not active`);
|
|
44
|
+
}
|
|
45
|
+
if (gene.reproduction && gene.reproduction.enabled === false) {
|
|
46
|
+
throw new organism_errors_1.OrganismLimitError(`Gene ${gene.id} has reproduction disabled`);
|
|
47
|
+
}
|
|
48
|
+
if (parent.generation >= limits.maxGenerationDepth) {
|
|
49
|
+
throw new organism_errors_1.OrganismLimitError(`maxGenerationDepth (${limits.maxGenerationDepth}) reached by parent`);
|
|
50
|
+
}
|
|
51
|
+
const geneMax = gene.reproduction?.maxChildren;
|
|
52
|
+
const maxChildren = geneMax != null ? Math.min(geneMax, limits.maxChildrenPerAgent) : limits.maxChildrenPerAgent;
|
|
53
|
+
if (liveChildCount >= maxChildren) {
|
|
54
|
+
throw new organism_errors_1.OrganismLimitError(`maxChildrenPerAgent (${maxChildren}) reached for parent ${parent.id}`);
|
|
55
|
+
}
|
|
56
|
+
if (liveAgents.length >= limits.maxAgents) {
|
|
57
|
+
throw new organism_errors_1.OrganismLimitError(`maxAgents (${limits.maxAgents}) reached`);
|
|
58
|
+
}
|
|
59
|
+
if (parent.lastReproductionAt) {
|
|
60
|
+
const elapsed = this.now().getTime() - parent.lastReproductionAt.getTime();
|
|
61
|
+
if (elapsed < this.config.cooldownMs) {
|
|
62
|
+
throw new organism_errors_1.OrganismLimitError(`Reproduction cooldown active (${elapsed}ms < ${this.config.cooldownMs}ms)`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Build child capabilities: parent caps + specialization.
|
|
68
|
+
* Permissions must remain a subset of the parent's permission grants.
|
|
69
|
+
*/
|
|
70
|
+
resolveChildCapabilities(parent, specialization, policy) {
|
|
71
|
+
const capabilities = Array.from(new Set([...parent.capabilities, ...specialization]));
|
|
72
|
+
let permissions;
|
|
73
|
+
if (policy.permissions === 'none') {
|
|
74
|
+
permissions = [];
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
// copy and subset both enforce ⊆ parent (never escalate)
|
|
78
|
+
permissions = [...parent.permissions];
|
|
79
|
+
}
|
|
80
|
+
return { capabilities, permissions };
|
|
81
|
+
}
|
|
82
|
+
transferResources(parent, policy, requestedTokens) {
|
|
83
|
+
const fraction = policy.resources?.transferFraction ?? 0.25;
|
|
84
|
+
const parentTokens = parent.wallet.tokensRemaining ?? 0;
|
|
85
|
+
const parentMoney = parent.wallet.moneyRemaining?.amount ?? 0;
|
|
86
|
+
const currency = parent.wallet.moneyRemaining?.currency ?? 'USD';
|
|
87
|
+
let tokens = Math.floor(parentTokens * fraction);
|
|
88
|
+
if (requestedTokens != null) {
|
|
89
|
+
tokens = Math.min(tokens, requestedTokens, parentTokens);
|
|
90
|
+
}
|
|
91
|
+
const money = Math.floor(parentMoney * fraction);
|
|
92
|
+
const childWallet = {
|
|
93
|
+
tokensRemaining: tokens,
|
|
94
|
+
moneyRemaining: { amount: money, currency },
|
|
95
|
+
computeUnitsRemaining: Math.floor((parent.wallet.computeUnitsRemaining ?? 0) * fraction),
|
|
96
|
+
toolCallsRemaining: Math.floor((parent.wallet.toolCallsRemaining ?? 0) * fraction),
|
|
97
|
+
};
|
|
98
|
+
const parentWallet = {
|
|
99
|
+
tokensRemaining: parentTokens - tokens,
|
|
100
|
+
moneyRemaining: { amount: parentMoney - money, currency },
|
|
101
|
+
computeUnitsRemaining: (parent.wallet.computeUnitsRemaining ?? 0) - (childWallet.computeUnitsRemaining ?? 0),
|
|
102
|
+
toolCallsRemaining: (parent.wallet.toolCallsRemaining ?? 0) - (childWallet.toolCallsRemaining ?? 0),
|
|
103
|
+
};
|
|
104
|
+
return { childWallet, parentWallet };
|
|
105
|
+
}
|
|
106
|
+
buildProposal(parent, request, capabilities) {
|
|
107
|
+
const specialization = request.specialization ?? [];
|
|
108
|
+
const needId = request.needId ?? `specialize-${specialization.join('-') || parent.id}`;
|
|
109
|
+
return {
|
|
110
|
+
reason: request.reason,
|
|
111
|
+
needId,
|
|
112
|
+
requiredCapabilities: capabilities,
|
|
113
|
+
expectedOutcome: request.objective ??
|
|
114
|
+
`Specialized descendant of ${parent.name} for ${specialization.join(', ') || 'focused work'}`,
|
|
115
|
+
estimatedCost: 1,
|
|
116
|
+
expectedUtility: parent.utility.score,
|
|
117
|
+
terminationCriteria: request.terminationCriteria ?? [
|
|
118
|
+
`Specialization ${specialization.join(', ') || needId} complete`,
|
|
119
|
+
'Utility score below 0.2 after 5 evaluations',
|
|
120
|
+
'No related tasks for evaluation window',
|
|
121
|
+
],
|
|
122
|
+
confidence: request.confidence ?? 0.8,
|
|
123
|
+
geneId: parent.geneId,
|
|
124
|
+
specialize: specialization,
|
|
125
|
+
parentAgentId: parent.id,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
async reproduce(input) {
|
|
129
|
+
const policy = this.resolveInheritance(input.request.inheritance);
|
|
130
|
+
const liveChildCount = await this.genealogy.countLiveChildren(input.parent.id, input.liveAgents);
|
|
131
|
+
this.assertCanReproduce({
|
|
132
|
+
parent: input.parent,
|
|
133
|
+
gene: input.gene,
|
|
134
|
+
limits: input.limits,
|
|
135
|
+
liveAgents: input.liveAgents,
|
|
136
|
+
liveChildCount,
|
|
137
|
+
});
|
|
138
|
+
this.constitution.assertAllows('reproduce', {});
|
|
139
|
+
const specialization = input.request.specialization ?? [];
|
|
140
|
+
const { capabilities, permissions } = this.resolveChildCapabilities(input.parent, specialization, policy);
|
|
141
|
+
let childWallet;
|
|
142
|
+
let parentWallet = input.parent.wallet;
|
|
143
|
+
if (input.poolWallet) {
|
|
144
|
+
childWallet = input.poolWallet;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
const transfer = this.transferResources(input.parent, policy, input.request.tokens);
|
|
148
|
+
childWallet = transfer.childWallet;
|
|
149
|
+
parentWallet = transfer.parentWallet;
|
|
150
|
+
}
|
|
151
|
+
const proposal = this.buildProposal(input.parent, input.request, capabilities);
|
|
152
|
+
const generation = input.parent.generation + 1;
|
|
153
|
+
input.parent.status = 'reproducing';
|
|
154
|
+
await this.repo.saveAgent(this.organismId, input.parent);
|
|
155
|
+
const child = await this.birth.spawn({
|
|
156
|
+
proposal,
|
|
157
|
+
gene: input.gene,
|
|
158
|
+
wallet: childWallet,
|
|
159
|
+
generation,
|
|
160
|
+
parentAgentId: input.parent.id,
|
|
161
|
+
nameHint: specialization.length
|
|
162
|
+
? `${specialization
|
|
163
|
+
.map((s) => s
|
|
164
|
+
.split(/[-_]/)
|
|
165
|
+
.map((p) => p.charAt(0).toUpperCase() + p.slice(1))
|
|
166
|
+
.join(''))
|
|
167
|
+
.join('')}Agent`
|
|
168
|
+
: `${input.parent.name}Child`,
|
|
169
|
+
});
|
|
170
|
+
// Apply inheritance overlays
|
|
171
|
+
child.permissions = permissions;
|
|
172
|
+
child.systemPrompt =
|
|
173
|
+
policy.strategies !== false
|
|
174
|
+
? [
|
|
175
|
+
input.parent.systemPrompt ?? input.gene.initialPrompt ?? '',
|
|
176
|
+
specialization.length ? `Specialization: ${specialization.join(', ')}` : '',
|
|
177
|
+
]
|
|
178
|
+
.filter(Boolean)
|
|
179
|
+
.join('\n')
|
|
180
|
+
: input.gene.initialPrompt;
|
|
181
|
+
if (policy.strategies !== false) {
|
|
182
|
+
child.strategyConfig = { ...input.parent.strategyConfig };
|
|
183
|
+
}
|
|
184
|
+
if (policy.modelSettings !== false) {
|
|
185
|
+
child.modelConfig = { ...input.parent.modelConfig };
|
|
186
|
+
}
|
|
187
|
+
child.strategyId = input.parent.strategyId
|
|
188
|
+
? `${input.parent.strategyId}:g${generation}`
|
|
189
|
+
: `${input.parent.geneId}:g${generation}`;
|
|
190
|
+
await this.repo.saveAgent(this.organismId, child);
|
|
191
|
+
input.parent.wallet = parentWallet;
|
|
192
|
+
input.parent.status = 'active';
|
|
193
|
+
input.parent.lastReproductionAt = this.now();
|
|
194
|
+
await this.repo.saveAgent(this.organismId, input.parent);
|
|
195
|
+
await this.events.emit(organism_events_1.OrganismEventType.ORGANISM_AGENT_REPRODUCED, this.organismId, {
|
|
196
|
+
parentAgentId: input.parent.id,
|
|
197
|
+
childAgentId: child.id,
|
|
198
|
+
generation,
|
|
199
|
+
specialization,
|
|
200
|
+
reason: input.request.reason,
|
|
201
|
+
inheritance: policy,
|
|
202
|
+
});
|
|
203
|
+
return { child, parent: input.parent };
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
exports.ReproductionEngine = ReproductionEngine;
|
|
207
|
+
//# sourceMappingURL=reproduction-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reproduction-engine.js","sourceRoot":"","sources":["../../src/lifecycle/reproduction-engine.ts"],"names":[],"mappings":"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"}
|