@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,17 @@
|
|
|
1
|
+
import type { RuntimeAgentRecord, SurvivalConfig, SurvivalState } from '../types/organism.types';
|
|
2
|
+
export interface SurvivalVerdict {
|
|
3
|
+
agentId: string;
|
|
4
|
+
state: SurvivalState;
|
|
5
|
+
reason: string;
|
|
6
|
+
shouldTerminate: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Survival engine — never kill on a single poor outcome.
|
|
10
|
+
*/
|
|
11
|
+
export declare class SurvivalEngine {
|
|
12
|
+
private readonly config;
|
|
13
|
+
private readonly now;
|
|
14
|
+
constructor(config?: SurvivalConfig, now?: () => Date);
|
|
15
|
+
evaluate(agent: RuntimeAgentRecord): SurvivalVerdict;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=survival-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"survival-engine.d.ts","sourceRoot":"","sources":["../../src/lifecycle/survival-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGjG,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBADH,MAAM,GAAE,cAAwC,EAChD,GAAG,GAAE,MAAM,IAAuB;IAGrD,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG,eAAe;CA2ErD"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SurvivalEngine = void 0;
|
|
4
|
+
const organism_types_1 = require("../types/organism.types");
|
|
5
|
+
/**
|
|
6
|
+
* Survival engine — never kill on a single poor outcome.
|
|
7
|
+
*/
|
|
8
|
+
class SurvivalEngine {
|
|
9
|
+
constructor(config = organism_types_1.DEFAULT_SURVIVAL_CONFIG, now = () => new Date()) {
|
|
10
|
+
this.config = config;
|
|
11
|
+
this.now = now;
|
|
12
|
+
}
|
|
13
|
+
evaluate(agent) {
|
|
14
|
+
if (agent.status === 'terminated') {
|
|
15
|
+
return {
|
|
16
|
+
agentId: agent.id,
|
|
17
|
+
state: 'terminated',
|
|
18
|
+
reason: 'Already terminated',
|
|
19
|
+
shouldTerminate: false,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
if (agent.criticalResponsibility) {
|
|
23
|
+
return {
|
|
24
|
+
agentId: agent.id,
|
|
25
|
+
state: 'healthy',
|
|
26
|
+
reason: 'Critical responsibility protected',
|
|
27
|
+
shouldTerminate: false,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const ageMs = this.now().getTime() - agent.createdAt.getTime();
|
|
31
|
+
if (ageMs < this.config.minimumEvaluationAgeMs) {
|
|
32
|
+
return {
|
|
33
|
+
agentId: agent.id,
|
|
34
|
+
state: 'healthy',
|
|
35
|
+
reason: `Too young to evaluate (${ageMs}ms < ${this.config.minimumEvaluationAgeMs}ms)`,
|
|
36
|
+
shouldTerminate: false,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
if (agent.evaluationCount < this.config.minimumSampleSize) {
|
|
40
|
+
return {
|
|
41
|
+
agentId: agent.id,
|
|
42
|
+
state: 'watch',
|
|
43
|
+
reason: `Insufficient samples (${agent.evaluationCount} < ${this.config.minimumSampleSize})`,
|
|
44
|
+
shouldTerminate: false,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (agent.lastEvaluatedAt) {
|
|
48
|
+
const since = this.now().getTime() - agent.lastEvaluatedAt.getTime();
|
|
49
|
+
if (since < this.config.cooldownMs && agent.utility.score >= this.config.minimumUtility) {
|
|
50
|
+
return {
|
|
51
|
+
agentId: agent.id,
|
|
52
|
+
state: 'healthy',
|
|
53
|
+
reason: 'Within cooldown',
|
|
54
|
+
shouldTerminate: false,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (agent.utility.score < this.config.minimumUtility) {
|
|
59
|
+
return {
|
|
60
|
+
agentId: agent.id,
|
|
61
|
+
state: 'candidate-for-termination',
|
|
62
|
+
reason: `Utility ${agent.utility.score.toFixed(3)} below minimum ${this.config.minimumUtility}`,
|
|
63
|
+
shouldTerminate: true,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
if (agent.utility.score < this.config.minimumUtility + 0.15) {
|
|
67
|
+
return {
|
|
68
|
+
agentId: agent.id,
|
|
69
|
+
state: 'watch',
|
|
70
|
+
reason: 'Utility near threshold',
|
|
71
|
+
shouldTerminate: false,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
agentId: agent.id,
|
|
76
|
+
state: 'healthy',
|
|
77
|
+
reason: 'Utility healthy',
|
|
78
|
+
shouldTerminate: false,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.SurvivalEngine = SurvivalEngine;
|
|
83
|
+
//# sourceMappingURL=survival-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"survival-engine.js","sourceRoot":"","sources":["../../src/lifecycle/survival-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional OpenTelemetry-compatible metrics for organism runtime.
|
|
3
|
+
*/
|
|
4
|
+
export interface OrganismMetricsSnapshot {
|
|
5
|
+
activeAgents: number;
|
|
6
|
+
agentsSpawnedTotal: number;
|
|
7
|
+
agentsTerminatedTotal: number;
|
|
8
|
+
reproductionsTotal: number;
|
|
9
|
+
mutationsTotal: number;
|
|
10
|
+
tokenUsage: number;
|
|
11
|
+
cost: number;
|
|
12
|
+
missionProgress: number;
|
|
13
|
+
constitutionViolations: number;
|
|
14
|
+
}
|
|
15
|
+
export declare class OrganismMetrics {
|
|
16
|
+
private spawned;
|
|
17
|
+
private terminated;
|
|
18
|
+
private reproductions;
|
|
19
|
+
private mutations;
|
|
20
|
+
private tokens;
|
|
21
|
+
private cost;
|
|
22
|
+
private violations;
|
|
23
|
+
private active;
|
|
24
|
+
private missionProgress;
|
|
25
|
+
recordSpawn(): void;
|
|
26
|
+
recordReproduction(): void;
|
|
27
|
+
recordMutation(): void;
|
|
28
|
+
recordTermination(): void;
|
|
29
|
+
recordTokens(n: number): void;
|
|
30
|
+
recordCost(n: number): void;
|
|
31
|
+
recordViolation(): void;
|
|
32
|
+
setMissionProgress(ratio: number): void;
|
|
33
|
+
snapshot(): OrganismMetricsSnapshot;
|
|
34
|
+
/** Soft-bind to OpenTelemetry if available. */
|
|
35
|
+
exportToOtel(meterName?: string): void;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/observability/metrics.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,eAAe,CAAK;IAE5B,WAAW,IAAI,IAAI;IAKnB,kBAAkB,IAAI,IAAI;IAM1B,cAAc,IAAI,IAAI;IAItB,iBAAiB,IAAI,IAAI;IAKzB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAI7B,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAI3B,eAAe,IAAI,IAAI;IAIvB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIvC,QAAQ,IAAI,uBAAuB;IAcnC,+CAA+C;IAC/C,YAAY,CAAC,SAAS,SAAmB,GAAG,IAAI;CAyCjD"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Optional OpenTelemetry-compatible metrics for organism runtime.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.OrganismMetrics = void 0;
|
|
7
|
+
class OrganismMetrics {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.spawned = 0;
|
|
10
|
+
this.terminated = 0;
|
|
11
|
+
this.reproductions = 0;
|
|
12
|
+
this.mutations = 0;
|
|
13
|
+
this.tokens = 0;
|
|
14
|
+
this.cost = 0;
|
|
15
|
+
this.violations = 0;
|
|
16
|
+
this.active = 0;
|
|
17
|
+
this.missionProgress = 0;
|
|
18
|
+
}
|
|
19
|
+
recordSpawn() {
|
|
20
|
+
this.spawned += 1;
|
|
21
|
+
this.active += 1;
|
|
22
|
+
}
|
|
23
|
+
recordReproduction() {
|
|
24
|
+
this.reproductions += 1;
|
|
25
|
+
this.spawned += 1;
|
|
26
|
+
this.active += 1;
|
|
27
|
+
}
|
|
28
|
+
recordMutation() {
|
|
29
|
+
this.mutations += 1;
|
|
30
|
+
}
|
|
31
|
+
recordTermination() {
|
|
32
|
+
this.terminated += 1;
|
|
33
|
+
this.active = Math.max(0, this.active - 1);
|
|
34
|
+
}
|
|
35
|
+
recordTokens(n) {
|
|
36
|
+
this.tokens += n;
|
|
37
|
+
}
|
|
38
|
+
recordCost(n) {
|
|
39
|
+
this.cost += n;
|
|
40
|
+
}
|
|
41
|
+
recordViolation() {
|
|
42
|
+
this.violations += 1;
|
|
43
|
+
}
|
|
44
|
+
setMissionProgress(ratio) {
|
|
45
|
+
this.missionProgress = ratio;
|
|
46
|
+
}
|
|
47
|
+
snapshot() {
|
|
48
|
+
return {
|
|
49
|
+
activeAgents: this.active,
|
|
50
|
+
agentsSpawnedTotal: this.spawned,
|
|
51
|
+
agentsTerminatedTotal: this.terminated,
|
|
52
|
+
reproductionsTotal: this.reproductions,
|
|
53
|
+
mutationsTotal: this.mutations,
|
|
54
|
+
tokenUsage: this.tokens,
|
|
55
|
+
cost: this.cost,
|
|
56
|
+
missionProgress: this.missionProgress,
|
|
57
|
+
constitutionViolations: this.violations,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/** Soft-bind to OpenTelemetry if available. */
|
|
61
|
+
exportToOtel(meterName = 'hazel.organism') {
|
|
62
|
+
try {
|
|
63
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
64
|
+
const otel = require('@opentelemetry/api');
|
|
65
|
+
const meter = otel.metrics?.getMeter(meterName);
|
|
66
|
+
if (!meter)
|
|
67
|
+
return;
|
|
68
|
+
const snap = () => this.snapshot();
|
|
69
|
+
meter.createObservableGauge('hazel.organism.active_agents', { description: 'Active organism agents' }, (obs) => obs.observe(snap().activeAgents));
|
|
70
|
+
meter.createObservableGauge('hazel.organism.agents_spawned_total', { description: 'Total agents spawned' }, (obs) => obs.observe(snap().agentsSpawnedTotal));
|
|
71
|
+
meter.createObservableGauge('hazel.organism.token_usage', { description: 'Organism token usage' }, (obs) => obs.observe(snap().tokenUsage));
|
|
72
|
+
meter.createObservableGauge('hazel.organism.mission_progress', { description: 'Mission progress ratio' }, (obs) => obs.observe(snap().missionProgress));
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// optional peer
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.OrganismMetrics = OrganismMetrics;
|
|
80
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/observability/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { DetectedNeed, EnvironmentSignal, MissionDefinition, SignalNeedMapping } from '../types/organism.types';
|
|
2
|
+
export interface PerceptionResult {
|
|
3
|
+
accepted: boolean;
|
|
4
|
+
signal: EnvironmentSignal;
|
|
5
|
+
reason: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Normalize + relevance-filter environment signals.
|
|
9
|
+
*/
|
|
10
|
+
export declare class PerceptionEngine {
|
|
11
|
+
private readonly relevanceThreshold;
|
|
12
|
+
private readonly severityThreshold;
|
|
13
|
+
constructor(relevanceThreshold?: number, severityThreshold?: number);
|
|
14
|
+
normalize(raw: Partial<EnvironmentSignal> & Pick<EnvironmentSignal, 'type' | 'source'>): EnvironmentSignal;
|
|
15
|
+
filter(signal: EnvironmentSignal, mission: MissionDefinition): PerceptionResult;
|
|
16
|
+
private inferRelevance;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Deterministic need detector using configurable signal→need mappings.
|
|
20
|
+
*
|
|
21
|
+
* Domain-specific capability routing belongs in `signalNeedMappings`
|
|
22
|
+
* (e.g. ecommerce refund → analytics). The unmapped fallback only
|
|
23
|
+
* treats generic anomaly suffixes as needs and derives capability
|
|
24
|
+
* hints from the signal type subject tokens — never from a fixed
|
|
25
|
+
* industry vocabulary.
|
|
26
|
+
*/
|
|
27
|
+
export declare class NeedDetector {
|
|
28
|
+
private readonly mappings;
|
|
29
|
+
/** Tokens that describe change/anomaly, not a capability subject. */
|
|
30
|
+
private static readonly ANOMALY_TOKENS;
|
|
31
|
+
constructor(mappings?: SignalNeedMapping[]);
|
|
32
|
+
detect(signal: EnvironmentSignal, _mission: MissionDefinition): DetectedNeed | undefined;
|
|
33
|
+
private looksLikeAnomaly;
|
|
34
|
+
/**
|
|
35
|
+
* Derive capability hints from signal type subjects.
|
|
36
|
+
* e.g. `orders.fulfillment.delay` → `['orders', 'fulfillment']`
|
|
37
|
+
*/
|
|
38
|
+
private capabilitiesFromSignalType;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=perception-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perception-engine.d.ts","sourceRoot":"","sources":["../../src/perception/perception-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBADjB,kBAAkB,SAAM,EACxB,iBAAiB,SAAM;IAG1C,SAAS,CACP,GAAG,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,QAAQ,CAAC,GAC3E,iBAAiB;IAYpB,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,GAAG,gBAAgB;IAa/E,OAAO,CAAC,cAAc;CAUvB;AAED;;;;;;;;GAQG;AACH,qBAAa,YAAY;IAkBX,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAjBrC,qEAAqE;IACrE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAcnC;gBAE0B,QAAQ,GAAE,iBAAiB,EAAO;IAE/D,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,GAAG,YAAY,GAAG,SAAS;IAiCxF,OAAO,CAAC,gBAAgB;IAIxB;;;OAGG;IACH,OAAO,CAAC,0BAA0B;CAQnC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NeedDetector = exports.PerceptionEngine = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Normalize + relevance-filter environment signals.
|
|
6
|
+
*/
|
|
7
|
+
class PerceptionEngine {
|
|
8
|
+
constructor(relevanceThreshold = 0.3, severityThreshold = 0.2) {
|
|
9
|
+
this.relevanceThreshold = relevanceThreshold;
|
|
10
|
+
this.severityThreshold = severityThreshold;
|
|
11
|
+
}
|
|
12
|
+
normalize(raw) {
|
|
13
|
+
return {
|
|
14
|
+
id: raw.id ?? `sig_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
|
|
15
|
+
type: raw.type,
|
|
16
|
+
source: raw.source,
|
|
17
|
+
timestamp: raw.timestamp ?? new Date(),
|
|
18
|
+
data: raw.data ?? {},
|
|
19
|
+
severity: raw.severity,
|
|
20
|
+
relevance: raw.relevance,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
filter(signal, mission) {
|
|
24
|
+
const relevance = signal.relevance ?? this.inferRelevance(signal, mission);
|
|
25
|
+
const severity = signal.severity ?? 0.5;
|
|
26
|
+
const accepted = relevance >= this.relevanceThreshold || severity >= this.severityThreshold;
|
|
27
|
+
return {
|
|
28
|
+
accepted,
|
|
29
|
+
signal: { ...signal, relevance, severity },
|
|
30
|
+
reason: accepted
|
|
31
|
+
? `Accepted (relevance=${relevance.toFixed(2)}, severity=${severity.toFixed(2)})`
|
|
32
|
+
: `Ignored (relevance=${relevance.toFixed(2)}, severity=${severity.toFixed(2)})`,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
inferRelevance(signal, mission) {
|
|
36
|
+
const text = `${mission.objective} ${(mission.constraints ?? []).join(' ')}`.toLowerCase();
|
|
37
|
+
const typeParts = signal.type.toLowerCase().split(/[._-]/);
|
|
38
|
+
let hits = 0;
|
|
39
|
+
for (const part of typeParts) {
|
|
40
|
+
if (part.length > 2 && text.includes(part))
|
|
41
|
+
hits += 1;
|
|
42
|
+
}
|
|
43
|
+
if (hits === 0)
|
|
44
|
+
return 0.4;
|
|
45
|
+
return Math.min(1, 0.5 + hits * 0.15);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.PerceptionEngine = PerceptionEngine;
|
|
49
|
+
/**
|
|
50
|
+
* Deterministic need detector using configurable signal→need mappings.
|
|
51
|
+
*
|
|
52
|
+
* Domain-specific capability routing belongs in `signalNeedMappings`
|
|
53
|
+
* (e.g. ecommerce refund → analytics). The unmapped fallback only
|
|
54
|
+
* treats generic anomaly suffixes as needs and derives capability
|
|
55
|
+
* hints from the signal type subject tokens — never from a fixed
|
|
56
|
+
* industry vocabulary.
|
|
57
|
+
*/
|
|
58
|
+
class NeedDetector {
|
|
59
|
+
constructor(mappings = []) {
|
|
60
|
+
this.mappings = mappings;
|
|
61
|
+
}
|
|
62
|
+
detect(signal, _mission) {
|
|
63
|
+
const mapping = this.mappings.find((m) => m.signalType === signal.type);
|
|
64
|
+
if (!mapping) {
|
|
65
|
+
if (!this.looksLikeAnomaly(signal.type)) {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
const need = signal.type.replace(/\./g, '-');
|
|
69
|
+
return {
|
|
70
|
+
need,
|
|
71
|
+
reason: `Signal ${signal.type} indicates intervention may be required`,
|
|
72
|
+
requiredCapabilities: this.capabilitiesFromSignalType(signal.type),
|
|
73
|
+
urgency: signal.severity ?? 0.7,
|
|
74
|
+
confidence: 0.6,
|
|
75
|
+
signalId: signal.id,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
const data = signal.data;
|
|
79
|
+
let reason = `Signal ${signal.type} mapped to need ${mapping.need}`;
|
|
80
|
+
if (data?.baseline != null && data?.current != null) {
|
|
81
|
+
reason = `${mapping.need}: ${signal.type} from ${data.baseline} to ${data.current}`;
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
need: mapping.need,
|
|
85
|
+
reason,
|
|
86
|
+
requiredCapabilities: [...mapping.requiredCapabilities],
|
|
87
|
+
urgency: mapping.urgency ?? signal.severity ?? 0.7,
|
|
88
|
+
confidence: mapping.confidence ?? 0.9,
|
|
89
|
+
signalId: signal.id,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
looksLikeAnomaly(signalType) {
|
|
93
|
+
return /(increased|decreased|spike|drop|failure|shortage|delay)/i.test(signalType);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Derive capability hints from signal type subjects.
|
|
97
|
+
* e.g. `orders.fulfillment.delay` → `['orders', 'fulfillment']`
|
|
98
|
+
*/
|
|
99
|
+
capabilitiesFromSignalType(signalType) {
|
|
100
|
+
const parts = signalType
|
|
101
|
+
.toLowerCase()
|
|
102
|
+
.split(/[._-]/)
|
|
103
|
+
.filter((p) => p.length > 1 && !NeedDetector.ANOMALY_TOKENS.has(p));
|
|
104
|
+
if (parts.length === 0)
|
|
105
|
+
return ['general'];
|
|
106
|
+
return Array.from(new Set(parts));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
exports.NeedDetector = NeedDetector;
|
|
110
|
+
/** Tokens that describe change/anomaly, not a capability subject. */
|
|
111
|
+
NeedDetector.ANOMALY_TOKENS = new Set([
|
|
112
|
+
'increased',
|
|
113
|
+
'decreased',
|
|
114
|
+
'spike',
|
|
115
|
+
'drop',
|
|
116
|
+
'failure',
|
|
117
|
+
'failed',
|
|
118
|
+
'shortage',
|
|
119
|
+
'delay',
|
|
120
|
+
'delayed',
|
|
121
|
+
'rate',
|
|
122
|
+
'volume',
|
|
123
|
+
'high',
|
|
124
|
+
'low',
|
|
125
|
+
]);
|
|
126
|
+
//# sourceMappingURL=perception-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perception-engine.js","sourceRoot":"","sources":["../../src/perception/perception-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-organism-repository.d.ts","sourceRoot":"","sources":["../../src/persistence/in-memory-organism-repository.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./organism-repository"), exports);
|
|
18
|
+
//# sourceMappingURL=in-memory-organism-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-organism-repository.js","sourceRoot":"","sources":["../../src/persistence/in-memory-organism-repository.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistence abstractions for organism state.
|
|
3
|
+
*/
|
|
4
|
+
import type { AgentGenealogy, EnvironmentSignal, OrganismDecision, OrganismRecord, RuntimeAgentRecord } from '../types/organism.types';
|
|
5
|
+
export interface OrganismRepository {
|
|
6
|
+
saveOrganism(record: OrganismRecord): Promise<void>;
|
|
7
|
+
getOrganism(id: string): Promise<OrganismRecord | undefined>;
|
|
8
|
+
listOrganisms(): Promise<OrganismRecord[]>;
|
|
9
|
+
deleteOrganism(id: string): Promise<boolean>;
|
|
10
|
+
saveAgent(organismId: string, agent: RuntimeAgentRecord): Promise<void>;
|
|
11
|
+
getAgent(organismId: string, agentId: string): Promise<RuntimeAgentRecord | undefined>;
|
|
12
|
+
listAgents(organismId: string): Promise<RuntimeAgentRecord[]>;
|
|
13
|
+
deleteAgent(organismId: string, agentId: string): Promise<boolean>;
|
|
14
|
+
saveGenealogy(organismId: string, genealogy: AgentGenealogy): Promise<void>;
|
|
15
|
+
listGenealogy(organismId: string): Promise<AgentGenealogy[]>;
|
|
16
|
+
appendSignal(organismId: string, signal: EnvironmentSignal): Promise<void>;
|
|
17
|
+
listSignals(organismId: string, limit?: number): Promise<EnvironmentSignal[]>;
|
|
18
|
+
appendDecision(organismId: string, decision: OrganismDecision): Promise<void>;
|
|
19
|
+
listDecisions(organismId: string, limit?: number): Promise<OrganismDecision[]>;
|
|
20
|
+
}
|
|
21
|
+
export declare class InMemoryOrganismRepository implements OrganismRepository {
|
|
22
|
+
private organisms;
|
|
23
|
+
private agents;
|
|
24
|
+
private genealogy;
|
|
25
|
+
private signals;
|
|
26
|
+
private decisions;
|
|
27
|
+
saveOrganism(record: OrganismRecord): Promise<void>;
|
|
28
|
+
getOrganism(id: string): Promise<OrganismRecord | undefined>;
|
|
29
|
+
listOrganisms(): Promise<OrganismRecord[]>;
|
|
30
|
+
deleteOrganism(id: string): Promise<boolean>;
|
|
31
|
+
saveAgent(organismId: string, agent: RuntimeAgentRecord): Promise<void>;
|
|
32
|
+
getAgent(organismId: string, agentId: string): Promise<RuntimeAgentRecord | undefined>;
|
|
33
|
+
listAgents(organismId: string): Promise<RuntimeAgentRecord[]>;
|
|
34
|
+
deleteAgent(organismId: string, agentId: string): Promise<boolean>;
|
|
35
|
+
saveGenealogy(organismId: string, genealogy: AgentGenealogy): Promise<void>;
|
|
36
|
+
listGenealogy(organismId: string): Promise<AgentGenealogy[]>;
|
|
37
|
+
appendSignal(organismId: string, signal: EnvironmentSignal): Promise<void>;
|
|
38
|
+
listSignals(organismId: string, limit?: number): Promise<EnvironmentSignal[]>;
|
|
39
|
+
appendDecision(organismId: string, decision: OrganismDecision): Promise<void>;
|
|
40
|
+
listDecisions(organismId: string, limit?: number): Promise<OrganismDecision[]>;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=organism-repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organism-repository.d.ts","sourceRoot":"","sources":["../../src/persistence/organism-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Persistence abstractions for organism state.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.InMemoryOrganismRepository = void 0;
|
|
7
|
+
class InMemoryOrganismRepository {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.organisms = new Map();
|
|
10
|
+
this.agents = new Map();
|
|
11
|
+
this.genealogy = new Map();
|
|
12
|
+
this.signals = new Map();
|
|
13
|
+
this.decisions = new Map();
|
|
14
|
+
}
|
|
15
|
+
async saveOrganism(record) {
|
|
16
|
+
this.organisms.set(record.id, { ...record, updatedAt: new Date() });
|
|
17
|
+
if (!this.agents.has(record.id))
|
|
18
|
+
this.agents.set(record.id, new Map());
|
|
19
|
+
if (!this.genealogy.has(record.id))
|
|
20
|
+
this.genealogy.set(record.id, new Map());
|
|
21
|
+
if (!this.signals.has(record.id))
|
|
22
|
+
this.signals.set(record.id, []);
|
|
23
|
+
if (!this.decisions.has(record.id))
|
|
24
|
+
this.decisions.set(record.id, []);
|
|
25
|
+
}
|
|
26
|
+
async getOrganism(id) {
|
|
27
|
+
const record = this.organisms.get(id);
|
|
28
|
+
return record ? { ...record } : undefined;
|
|
29
|
+
}
|
|
30
|
+
async listOrganisms() {
|
|
31
|
+
return Array.from(this.organisms.values()).map((r) => ({ ...r }));
|
|
32
|
+
}
|
|
33
|
+
async deleteOrganism(id) {
|
|
34
|
+
this.agents.delete(id);
|
|
35
|
+
this.genealogy.delete(id);
|
|
36
|
+
this.signals.delete(id);
|
|
37
|
+
this.decisions.delete(id);
|
|
38
|
+
return this.organisms.delete(id);
|
|
39
|
+
}
|
|
40
|
+
async saveAgent(organismId, agent) {
|
|
41
|
+
let map = this.agents.get(organismId);
|
|
42
|
+
if (!map) {
|
|
43
|
+
map = new Map();
|
|
44
|
+
this.agents.set(organismId, map);
|
|
45
|
+
}
|
|
46
|
+
map.set(agent.id, { ...agent });
|
|
47
|
+
}
|
|
48
|
+
async getAgent(organismId, agentId) {
|
|
49
|
+
const agent = this.agents.get(organismId)?.get(agentId);
|
|
50
|
+
return agent ? { ...agent } : undefined;
|
|
51
|
+
}
|
|
52
|
+
async listAgents(organismId) {
|
|
53
|
+
const map = this.agents.get(organismId);
|
|
54
|
+
if (!map)
|
|
55
|
+
return [];
|
|
56
|
+
return Array.from(map.values()).map((a) => ({ ...a }));
|
|
57
|
+
}
|
|
58
|
+
async deleteAgent(organismId, agentId) {
|
|
59
|
+
return this.agents.get(organismId)?.delete(agentId) ?? false;
|
|
60
|
+
}
|
|
61
|
+
async saveGenealogy(organismId, genealogy) {
|
|
62
|
+
let map = this.genealogy.get(organismId);
|
|
63
|
+
if (!map) {
|
|
64
|
+
map = new Map();
|
|
65
|
+
this.genealogy.set(organismId, map);
|
|
66
|
+
}
|
|
67
|
+
map.set(genealogy.agentId, {
|
|
68
|
+
...genealogy,
|
|
69
|
+
children: [...genealogy.children],
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
async listGenealogy(organismId) {
|
|
73
|
+
const map = this.genealogy.get(organismId);
|
|
74
|
+
if (!map)
|
|
75
|
+
return [];
|
|
76
|
+
return Array.from(map.values()).map((g) => ({
|
|
77
|
+
...g,
|
|
78
|
+
children: [...g.children],
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
async appendSignal(organismId, signal) {
|
|
82
|
+
const list = this.signals.get(organismId) ?? [];
|
|
83
|
+
list.push({ ...signal });
|
|
84
|
+
if (list.length > 200)
|
|
85
|
+
list.splice(0, list.length - 200);
|
|
86
|
+
this.signals.set(organismId, list);
|
|
87
|
+
}
|
|
88
|
+
async listSignals(organismId, limit = 50) {
|
|
89
|
+
const list = this.signals.get(organismId) ?? [];
|
|
90
|
+
return list.slice(-limit).map((s) => ({ ...s }));
|
|
91
|
+
}
|
|
92
|
+
async appendDecision(organismId, decision) {
|
|
93
|
+
const list = this.decisions.get(organismId) ?? [];
|
|
94
|
+
list.push({ ...decision });
|
|
95
|
+
if (list.length > 200)
|
|
96
|
+
list.splice(0, list.length - 200);
|
|
97
|
+
this.decisions.set(organismId, list);
|
|
98
|
+
}
|
|
99
|
+
async listDecisions(organismId, limit = 50) {
|
|
100
|
+
const list = this.decisions.get(organismId) ?? [];
|
|
101
|
+
return list.slice(-limit).map((d) => ({ ...d }));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
exports.InMemoryOrganismRepository = InMemoryOrganismRepository;
|
|
105
|
+
//# sourceMappingURL=organism-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organism-repository.js","sourceRoot":"","sources":["../../src/persistence/organism-repository.ts"],"names":[],"mappings":"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"}
|