@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,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,2 @@
1
+ export * from './organism-repository';
2
+ //# sourceMappingURL=in-memory-organism-repository.d.ts.map
@@ -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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"}