@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.
Files changed (170) hide show
  1. package/README.md +205 -0
  2. package/dist/__tests__/organism.embedding.test.d.ts +2 -0
  3. package/dist/__tests__/organism.embedding.test.d.ts.map +1 -0
  4. package/dist/__tests__/organism.embedding.test.js +166 -0
  5. package/dist/__tests__/organism.embedding.test.js.map +1 -0
  6. package/dist/__tests__/organism.phase1.test.d.ts +2 -0
  7. package/dist/__tests__/organism.phase1.test.d.ts.map +1 -0
  8. package/dist/__tests__/organism.phase1.test.js +375 -0
  9. package/dist/__tests__/organism.phase1.test.js.map +1 -0
  10. package/dist/__tests__/organism.phase2-3.test.d.ts +2 -0
  11. package/dist/__tests__/organism.phase2-3.test.d.ts.map +1 -0
  12. package/dist/__tests__/organism.phase2-3.test.js +320 -0
  13. package/dist/__tests__/organism.phase2-3.test.js.map +1 -0
  14. package/dist/__tests__/organism.phase4.test.d.ts +2 -0
  15. package/dist/__tests__/organism.phase4.test.d.ts.map +1 -0
  16. package/dist/__tests__/organism.phase4.test.js +217 -0
  17. package/dist/__tests__/organism.phase4.test.js.map +1 -0
  18. package/dist/bridge/signal-bridge.d.ts +46 -0
  19. package/dist/bridge/signal-bridge.d.ts.map +1 -0
  20. package/dist/bridge/signal-bridge.js +75 -0
  21. package/dist/bridge/signal-bridge.js.map +1 -0
  22. package/dist/core/capability-registry.d.ts +16 -0
  23. package/dist/core/capability-registry.d.ts.map +1 -0
  24. package/dist/core/capability-registry.js +71 -0
  25. package/dist/core/capability-registry.js.map +1 -0
  26. package/dist/core/clock.d.ts +17 -0
  27. package/dist/core/clock.d.ts.map +1 -0
  28. package/dist/core/clock.js +63 -0
  29. package/dist/core/clock.js.map +1 -0
  30. package/dist/core/mission.d.ts +4 -0
  31. package/dist/core/mission.d.ts.map +1 -0
  32. package/dist/core/mission.js +74 -0
  33. package/dist/core/mission.js.map +1 -0
  34. package/dist/core/organism-context.d.ts +139 -0
  35. package/dist/core/organism-context.d.ts.map +1 -0
  36. package/dist/core/organism-context.js +62 -0
  37. package/dist/core/organism-context.js.map +1 -0
  38. package/dist/core/organism-runtime.d.ts +199 -0
  39. package/dist/core/organism-runtime.d.ts.map +1 -0
  40. package/dist/core/organism-runtime.js +1016 -0
  41. package/dist/core/organism-runtime.js.map +1 -0
  42. package/dist/decorators/index.d.ts +39 -0
  43. package/dist/decorators/index.d.ts.map +1 -0
  44. package/dist/decorators/index.js +165 -0
  45. package/dist/decorators/index.js.map +1 -0
  46. package/dist/economy/market-engine.d.ts +57 -0
  47. package/dist/economy/market-engine.d.ts.map +1 -0
  48. package/dist/economy/market-engine.js +258 -0
  49. package/dist/economy/market-engine.js.map +1 -0
  50. package/dist/economy/resource-allocator.d.ts +39 -0
  51. package/dist/economy/resource-allocator.d.ts.map +1 -0
  52. package/dist/economy/resource-allocator.js +153 -0
  53. package/dist/economy/resource-allocator.js.map +1 -0
  54. package/dist/economy/utility-engine.d.ts +16 -0
  55. package/dist/economy/utility-engine.d.ts.map +1 -0
  56. package/dist/economy/utility-engine.js +80 -0
  57. package/dist/economy/utility-engine.js.map +1 -0
  58. package/dist/economy/utility-forecaster.d.ts +24 -0
  59. package/dist/economy/utility-forecaster.d.ts.map +1 -0
  60. package/dist/economy/utility-forecaster.js +60 -0
  61. package/dist/economy/utility-forecaster.js.map +1 -0
  62. package/dist/errors/organism.errors.d.ts +23 -0
  63. package/dist/errors/organism.errors.d.ts.map +1 -0
  64. package/dist/errors/organism.errors.js +50 -0
  65. package/dist/errors/organism.errors.js.map +1 -0
  66. package/dist/events/organism-events.d.ts +61 -0
  67. package/dist/events/organism-events.d.ts.map +1 -0
  68. package/dist/events/organism-events.js +95 -0
  69. package/dist/events/organism-events.js.map +1 -0
  70. package/dist/evolution/evolution-engine.d.ts +41 -0
  71. package/dist/evolution/evolution-engine.d.ts.map +1 -0
  72. package/dist/evolution/evolution-engine.js +135 -0
  73. package/dist/evolution/evolution-engine.js.map +1 -0
  74. package/dist/evolution/mutation-engine.d.ts +21 -0
  75. package/dist/evolution/mutation-engine.d.ts.map +1 -0
  76. package/dist/evolution/mutation-engine.js +84 -0
  77. package/dist/evolution/mutation-engine.js.map +1 -0
  78. package/dist/genealogy/genealogy-manager.d.ts +18 -0
  79. package/dist/genealogy/genealogy-manager.d.ts.map +1 -0
  80. package/dist/genealogy/genealogy-manager.js +64 -0
  81. package/dist/genealogy/genealogy-manager.js.map +1 -0
  82. package/dist/governance/constitution.d.ts +20 -0
  83. package/dist/governance/constitution.d.ts.map +1 -0
  84. package/dist/governance/constitution.js +109 -0
  85. package/dist/governance/constitution.js.map +1 -0
  86. package/dist/host/organism-host-registry.d.ts +24 -0
  87. package/dist/host/organism-host-registry.d.ts.map +1 -0
  88. package/dist/host/organism-host-registry.js +65 -0
  89. package/dist/host/organism-host-registry.js.map +1 -0
  90. package/dist/host/organism-host.d.ts +32 -0
  91. package/dist/host/organism-host.d.ts.map +1 -0
  92. package/dist/host/organism-host.js +64 -0
  93. package/dist/host/organism-host.js.map +1 -0
  94. package/dist/index.d.ts +43 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +117 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/integration/create-ops-organism.d.ts +34 -0
  99. package/dist/integration/create-ops-organism.d.ts.map +1 -0
  100. package/dist/integration/create-ops-organism.js +43 -0
  101. package/dist/integration/create-ops-organism.js.map +1 -0
  102. package/dist/lifecycle/birth-engine.d.ts +41 -0
  103. package/dist/lifecycle/birth-engine.d.ts.map +1 -0
  104. package/dist/lifecycle/birth-engine.js +182 -0
  105. package/dist/lifecycle/birth-engine.js.map +1 -0
  106. package/dist/lifecycle/decision-engine.d.ts +19 -0
  107. package/dist/lifecycle/decision-engine.d.ts.map +1 -0
  108. package/dist/lifecycle/decision-engine.js +137 -0
  109. package/dist/lifecycle/decision-engine.js.map +1 -0
  110. package/dist/lifecycle/reproduction-engine.d.ts +58 -0
  111. package/dist/lifecycle/reproduction-engine.d.ts.map +1 -0
  112. package/dist/lifecycle/reproduction-engine.js +207 -0
  113. package/dist/lifecycle/reproduction-engine.js.map +1 -0
  114. package/dist/lifecycle/survival-engine.d.ts +17 -0
  115. package/dist/lifecycle/survival-engine.d.ts.map +1 -0
  116. package/dist/lifecycle/survival-engine.js +83 -0
  117. package/dist/lifecycle/survival-engine.js.map +1 -0
  118. package/dist/observability/metrics.d.ts +37 -0
  119. package/dist/observability/metrics.d.ts.map +1 -0
  120. package/dist/observability/metrics.js +80 -0
  121. package/dist/observability/metrics.js.map +1 -0
  122. package/dist/perception/perception-engine.d.ts +40 -0
  123. package/dist/perception/perception-engine.d.ts.map +1 -0
  124. package/dist/perception/perception-engine.js +126 -0
  125. package/dist/perception/perception-engine.js.map +1 -0
  126. package/dist/persistence/in-memory-organism-repository.d.ts +2 -0
  127. package/dist/persistence/in-memory-organism-repository.d.ts.map +1 -0
  128. package/dist/persistence/in-memory-organism-repository.js +18 -0
  129. package/dist/persistence/in-memory-organism-repository.js.map +1 -0
  130. package/dist/persistence/organism-repository.d.ts +42 -0
  131. package/dist/persistence/organism-repository.d.ts.map +1 -0
  132. package/dist/persistence/organism-repository.js +105 -0
  133. package/dist/persistence/organism-repository.js.map +1 -0
  134. package/dist/types/organism.types.d.ts +482 -0
  135. package/dist/types/organism.types.d.ts.map +1 -0
  136. package/dist/types/organism.types.js +45 -0
  137. package/dist/types/organism.types.js.map +1 -0
  138. package/examples/ecommerce-organism/run.ts +245 -0
  139. package/package.json +73 -0
  140. package/src/bridge/signal-bridge.ts +116 -0
  141. package/src/core/capability-registry.ts +72 -0
  142. package/src/core/clock.ts +58 -0
  143. package/src/core/mission.ts +83 -0
  144. package/src/core/organism-context.ts +176 -0
  145. package/src/core/organism-runtime.ts +1369 -0
  146. package/src/decorators/index.ts +180 -0
  147. package/src/economy/market-engine.ts +324 -0
  148. package/src/economy/resource-allocator.ts +188 -0
  149. package/src/economy/utility-engine.ts +103 -0
  150. package/src/economy/utility-forecaster.ts +88 -0
  151. package/src/errors/organism.errors.ts +47 -0
  152. package/src/events/organism-events.ts +122 -0
  153. package/src/evolution/evolution-engine.ts +167 -0
  154. package/src/evolution/mutation-engine.ts +110 -0
  155. package/src/genealogy/genealogy-manager.ts +70 -0
  156. package/src/governance/constitution.ts +120 -0
  157. package/src/host/organism-host-registry.ts +72 -0
  158. package/src/host/organism-host.ts +103 -0
  159. package/src/index.ts +78 -0
  160. package/src/integration/create-ops-organism.ts +80 -0
  161. package/src/lifecycle/birth-engine.ts +225 -0
  162. package/src/lifecycle/decision-engine.ts +158 -0
  163. package/src/lifecycle/reproduction-engine.ts +289 -0
  164. package/src/lifecycle/survival-engine.ts +95 -0
  165. package/src/observability/metrics.ts +120 -0
  166. package/src/perception/perception-engine.ts +140 -0
  167. package/src/persistence/in-memory-organism-repository.ts +1 -0
  168. package/src/persistence/organism-repository.ts +134 -0
  169. package/src/types/organism.types.ts +591 -0
  170. 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":";;;AASA;;GAEG;AACH,MAAa,cAAc;IACzB,YAA6B,YAAgC;QAAhC,iBAAY,GAAZ,YAAY,CAAoB;IAAG,CAAC;IAEjE,MAAM,CAAC,KAMN;QACC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;QAEtE,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;QAC3F,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAChF,OAAO;gBACL,MAAM,EAAE,UAAU;gBAClB,gBAAgB,EAAE,iBAAiB,IAAI,CAAC,EAAE,mBAAmB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACnG,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBAClD,aAAa,EAAE,IAAI,CAAC,EAAE;gBACtB,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;gBAC/C,MAAM,EAAE,IAAI,CAAC,IAAI;aAClB,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;QAC3F,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;QAE/D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAC9C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAClF,CAAC;YACF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO;oBACL,MAAM,EAAE,SAAS;oBACjB,gBAAgB,EAAE,wBAAwB,IAAI,CAAC,IAAI,uBAAuB,gBAAgB,EAAE;oBAC5F,UAAU,EAAE,GAAG;oBACf,MAAM,EAAE,IAAI,CAAC,IAAI;iBAClB,CAAC;YACJ,CAAC;YACD,MAAM,QAAQ,GAAuB;gBACnC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,IAAI,CAAC,IAAI;gBACjB,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;gBAC/C,eAAe,EAAE,gBAAgB,IAAI,CAAC,IAAI,EAAE;gBAC5C,aAAa,EAAE,CAAC;gBAChB,eAAe,EAAE,IAAI,CAAC,OAAO;gBAC7B,mBAAmB,EAAE;oBACnB,QAAQ,IAAI,CAAC,IAAI,WAAW;oBAC5B,6CAA6C;oBAC7C,wCAAwC;iBACzC;gBACD,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,UAAU,EAAE,OAAO;gBACnB,aAAa,EAAE,MAAM,CAAC,EAAE;aACzB,CAAC;YACF,OAAO;gBACL,MAAM,EAAE,YAAY;gBACpB,gBAAgB,EAAE,iBAAiB,MAAM,CAAC,EAAE,gDAAgD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAChH,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,aAAa,EAAE,MAAM,CAAC,EAAE;gBACxB,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;gBAC/C,eAAe,EAAE,EAAE,MAAM,EAAE,KAAM,EAAE;gBACnC,aAAa,EAAE,QAAQ;gBACvB,MAAM,EAAE,IAAI,CAAC,IAAI;aAClB,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,gBAAgB,EAAE,wCAAwC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAChG,UAAU,EAAE,GAAG;gBACf,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;gBAC/C,MAAM,EAAE,IAAI,CAAC,IAAI;aAClB,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,gBAAgB,EAAE,QAAQ,IAAI,CAAC,IAAI,gCAAgC,gBAAgB,EAAE;gBACrF,UAAU,EAAE,GAAG;gBACf,MAAM,EAAE,IAAI,CAAC,IAAI;aAClB,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAuB;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,IAAI;YACjB,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,eAAe,EAAE,gBAAgB,IAAI,CAAC,IAAI,EAAE;YAC5C,aAAa,EAAE,CAAC;YAChB,eAAe,EAAE,IAAI,CAAC,OAAO;YAC7B,mBAAmB,EAAE;gBACnB,QAAQ,IAAI,CAAC,IAAI,WAAW;gBAC5B,6CAA6C;gBAC7C,wCAAwC;aACzC;YACD,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,UAAU,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAC1C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAChF;SACF,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,OAAO;YACf,gBAAgB,EAAE,wBAAwB,IAAI,CAAC,IAAI,wBAAwB,IAAI,CAAC,EAAE,EAAE;YACpF,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,eAAe,EAAE,EAAE,MAAM,EAAE,KAAM,EAAE;YACnC,aAAa,EAAE,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,IAAI;SAClB,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,QAAkB,EAAE,KAA4B;QACzD,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACpD,IAAI,IAAqC,CAAC;QAC1C,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;QACnB,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;QACnB,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACpE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACvD,MAAM,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACvD,MAAM,MAAM,GACV,KAAK,GAAG,SAAS;gBACjB,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,SAAS,CAAC;gBAC1C,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,UAAU,IAAI,CAAC,cAAc,CAAC,CAAC;YAChF,IAAI,MAAM,EAAE,CAAC;gBACX,SAAS,GAAG,KAAK,CAAC;gBAClB,SAAS,GAAG,KAAK,CAAC;gBAClB,cAAc,GAAG,UAAU,CAAC;gBAC5B,IAAI,GAAG,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;CACF;AAjJD,wCAiJC"}
@@ -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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"}