@agents-uni/core 0.1.0

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 (186) hide show
  1. package/DESIGN.md +283 -0
  2. package/LICENSE +21 -0
  3. package/README.en.md +589 -0
  4. package/README.md +589 -0
  5. package/dist/bridge/config-sync.d.ts +24 -0
  6. package/dist/bridge/config-sync.d.ts.map +1 -0
  7. package/dist/bridge/config-sync.js +39 -0
  8. package/dist/bridge/config-sync.js.map +1 -0
  9. package/dist/bridge/index.d.ts +7 -0
  10. package/dist/bridge/index.d.ts.map +1 -0
  11. package/dist/bridge/index.js +7 -0
  12. package/dist/bridge/index.js.map +1 -0
  13. package/dist/bridge/openclaw-adapter.d.ts +49 -0
  14. package/dist/bridge/openclaw-adapter.d.ts.map +1 -0
  15. package/dist/bridge/openclaw-adapter.js +151 -0
  16. package/dist/bridge/openclaw-adapter.js.map +1 -0
  17. package/dist/bridge/soul-generator.d.ts +34 -0
  18. package/dist/bridge/soul-generator.d.ts.map +1 -0
  19. package/dist/bridge/soul-generator.js +149 -0
  20. package/dist/bridge/soul-generator.js.map +1 -0
  21. package/dist/bridge/task-dispatcher.d.ts +107 -0
  22. package/dist/bridge/task-dispatcher.d.ts.map +1 -0
  23. package/dist/bridge/task-dispatcher.js +217 -0
  24. package/dist/bridge/task-dispatcher.js.map +1 -0
  25. package/dist/bridge/uni-registry.d.ts +82 -0
  26. package/dist/bridge/uni-registry.d.ts.map +1 -0
  27. package/dist/bridge/uni-registry.js +261 -0
  28. package/dist/bridge/uni-registry.js.map +1 -0
  29. package/dist/bridge/workspace-io.d.ts +64 -0
  30. package/dist/bridge/workspace-io.d.ts.map +1 -0
  31. package/dist/bridge/workspace-io.js +99 -0
  32. package/dist/bridge/workspace-io.js.map +1 -0
  33. package/dist/cli/commands/deploy.d.ts +6 -0
  34. package/dist/cli/commands/deploy.d.ts.map +1 -0
  35. package/dist/cli/commands/deploy.js +48 -0
  36. package/dist/cli/commands/deploy.js.map +1 -0
  37. package/dist/cli/commands/init.d.ts +2 -0
  38. package/dist/cli/commands/init.d.ts.map +1 -0
  39. package/dist/cli/commands/init.js +137 -0
  40. package/dist/cli/commands/init.js.map +1 -0
  41. package/dist/cli/commands/inspect.d.ts +4 -0
  42. package/dist/cli/commands/inspect.d.ts.map +1 -0
  43. package/dist/cli/commands/inspect.js +77 -0
  44. package/dist/cli/commands/inspect.js.map +1 -0
  45. package/dist/cli/commands/validate.d.ts +2 -0
  46. package/dist/cli/commands/validate.d.ts.map +1 -0
  47. package/dist/cli/commands/validate.js +30 -0
  48. package/dist/cli/commands/validate.js.map +1 -0
  49. package/dist/cli/commands/visualize.d.ts +2 -0
  50. package/dist/cli/commands/visualize.d.ts.map +1 -0
  51. package/dist/cli/commands/visualize.js +69 -0
  52. package/dist/cli/commands/visualize.js.map +1 -0
  53. package/dist/cli/index.d.ts +6 -0
  54. package/dist/cli/index.d.ts.map +1 -0
  55. package/dist/cli/index.js +132 -0
  56. package/dist/cli/index.js.map +1 -0
  57. package/dist/core/agent-registry.d.ts +37 -0
  58. package/dist/core/agent-registry.d.ts.map +1 -0
  59. package/dist/core/agent-registry.js +97 -0
  60. package/dist/core/agent-registry.js.map +1 -0
  61. package/dist/core/event-bus.d.ts +34 -0
  62. package/dist/core/event-bus.d.ts.map +1 -0
  63. package/dist/core/event-bus.js +96 -0
  64. package/dist/core/event-bus.js.map +1 -0
  65. package/dist/core/index.d.ts +8 -0
  66. package/dist/core/index.d.ts.map +1 -0
  67. package/dist/core/index.js +8 -0
  68. package/dist/core/index.js.map +1 -0
  69. package/dist/core/permission-matrix.d.ts +35 -0
  70. package/dist/core/permission-matrix.d.ts.map +1 -0
  71. package/dist/core/permission-matrix.js +95 -0
  72. package/dist/core/permission-matrix.js.map +1 -0
  73. package/dist/core/relationship-graph.d.ts +50 -0
  74. package/dist/core/relationship-graph.d.ts.map +1 -0
  75. package/dist/core/relationship-graph.js +150 -0
  76. package/dist/core/relationship-graph.js.map +1 -0
  77. package/dist/core/resource-pool.d.ts +48 -0
  78. package/dist/core/resource-pool.d.ts.map +1 -0
  79. package/dist/core/resource-pool.js +205 -0
  80. package/dist/core/resource-pool.js.map +1 -0
  81. package/dist/core/state-machine.d.ts +47 -0
  82. package/dist/core/state-machine.d.ts.map +1 -0
  83. package/dist/core/state-machine.js +110 -0
  84. package/dist/core/state-machine.js.map +1 -0
  85. package/dist/core/universe.d.ts +38 -0
  86. package/dist/core/universe.d.ts.map +1 -0
  87. package/dist/core/universe.js +101 -0
  88. package/dist/core/universe.js.map +1 -0
  89. package/dist/dashboard/api.d.ts +10 -0
  90. package/dist/dashboard/api.d.ts.map +1 -0
  91. package/dist/dashboard/api.js +237 -0
  92. package/dist/dashboard/api.js.map +1 -0
  93. package/dist/dashboard/index.d.ts +3 -0
  94. package/dist/dashboard/index.d.ts.map +1 -0
  95. package/dist/dashboard/index.js +3 -0
  96. package/dist/dashboard/index.js.map +1 -0
  97. package/dist/dashboard/server.d.ts +31 -0
  98. package/dist/dashboard/server.d.ts.map +1 -0
  99. package/dist/dashboard/server.js +44 -0
  100. package/dist/dashboard/server.js.map +1 -0
  101. package/dist/dashboard/templates.d.ts +47 -0
  102. package/dist/dashboard/templates.d.ts.map +1 -0
  103. package/dist/dashboard/templates.js +1481 -0
  104. package/dist/dashboard/templates.js.map +1 -0
  105. package/dist/evolution/index.d.ts +5 -0
  106. package/dist/evolution/index.d.ts.map +1 -0
  107. package/dist/evolution/index.js +5 -0
  108. package/dist/evolution/index.js.map +1 -0
  109. package/dist/evolution/memory-consolidator.d.ts +28 -0
  110. package/dist/evolution/memory-consolidator.d.ts.map +1 -0
  111. package/dist/evolution/memory-consolidator.js +84 -0
  112. package/dist/evolution/memory-consolidator.js.map +1 -0
  113. package/dist/evolution/performance-tracker.d.ts +29 -0
  114. package/dist/evolution/performance-tracker.d.ts.map +1 -0
  115. package/dist/evolution/performance-tracker.js +90 -0
  116. package/dist/evolution/performance-tracker.js.map +1 -0
  117. package/dist/evolution/promotion-engine.d.ts +32 -0
  118. package/dist/evolution/promotion-engine.d.ts.map +1 -0
  119. package/dist/evolution/promotion-engine.js +117 -0
  120. package/dist/evolution/promotion-engine.js.map +1 -0
  121. package/dist/evolution/relationship-evolver.d.ts +40 -0
  122. package/dist/evolution/relationship-evolver.d.ts.map +1 -0
  123. package/dist/evolution/relationship-evolver.js +105 -0
  124. package/dist/evolution/relationship-evolver.js.map +1 -0
  125. package/dist/index.d.ts +20 -0
  126. package/dist/index.d.ts.map +1 -0
  127. package/dist/index.js +23 -0
  128. package/dist/index.js.map +1 -0
  129. package/dist/schema/index.d.ts +13 -0
  130. package/dist/schema/index.d.ts.map +1 -0
  131. package/dist/schema/index.js +18 -0
  132. package/dist/schema/index.js.map +1 -0
  133. package/dist/schema/universe.schema.json +214 -0
  134. package/dist/spec/compiler.d.ts +16 -0
  135. package/dist/spec/compiler.d.ts.map +1 -0
  136. package/dist/spec/compiler.js +26 -0
  137. package/dist/spec/compiler.js.map +1 -0
  138. package/dist/spec/index.d.ts +4 -0
  139. package/dist/spec/index.d.ts.map +1 -0
  140. package/dist/spec/index.js +4 -0
  141. package/dist/spec/index.js.map +1 -0
  142. package/dist/spec/parser.d.ts +11 -0
  143. package/dist/spec/parser.d.ts.map +1 -0
  144. package/dist/spec/parser.js +89 -0
  145. package/dist/spec/parser.js.map +1 -0
  146. package/dist/spec/validator.d.ts +9 -0
  147. package/dist/spec/validator.d.ts.map +1 -0
  148. package/dist/spec/validator.js +105 -0
  149. package/dist/spec/validator.js.map +1 -0
  150. package/dist/types/agent.d.ts +56 -0
  151. package/dist/types/agent.d.ts.map +1 -0
  152. package/dist/types/agent.js +8 -0
  153. package/dist/types/agent.js.map +1 -0
  154. package/dist/types/event.d.ts +34 -0
  155. package/dist/types/event.d.ts.map +1 -0
  156. package/dist/types/event.js +11 -0
  157. package/dist/types/event.js.map +1 -0
  158. package/dist/types/governance.d.ts +48 -0
  159. package/dist/types/governance.d.ts.map +1 -0
  160. package/dist/types/governance.js +9 -0
  161. package/dist/types/governance.js.map +1 -0
  162. package/dist/types/index.d.ts +9 -0
  163. package/dist/types/index.d.ts.map +1 -0
  164. package/dist/types/index.js +9 -0
  165. package/dist/types/index.js.map +1 -0
  166. package/dist/types/memory.d.ts +73 -0
  167. package/dist/types/memory.d.ts.map +1 -0
  168. package/dist/types/memory.js +9 -0
  169. package/dist/types/memory.js.map +1 -0
  170. package/dist/types/protocol.d.ts +48 -0
  171. package/dist/types/protocol.d.ts.map +1 -0
  172. package/dist/types/protocol.js +9 -0
  173. package/dist/types/protocol.js.map +1 -0
  174. package/dist/types/relationship.d.ts +40 -0
  175. package/dist/types/relationship.d.ts.map +1 -0
  176. package/dist/types/relationship.js +9 -0
  177. package/dist/types/relationship.js.map +1 -0
  178. package/dist/types/resource.d.ts +52 -0
  179. package/dist/types/resource.d.ts.map +1 -0
  180. package/dist/types/resource.js +9 -0
  181. package/dist/types/resource.js.map +1 -0
  182. package/dist/types/universe.d.ts +71 -0
  183. package/dist/types/universe.d.ts.map +1 -0
  184. package/dist/types/universe.js +9 -0
  185. package/dist/types/universe.js.map +1 -0
  186. package/package.json +68 -0
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Relationship Graph — the social fabric of a Universe.
3
+ *
4
+ * A directed multigraph where agents are nodes and relationships are edges.
5
+ * Supports traversal algorithms for finding communication paths,
6
+ * influence chains, and organizational distance.
7
+ */
8
+ import type { RelationshipDefinition, RelationshipType, LiveRelationship } from '../types/index.js';
9
+ export declare class RelationshipGraph {
10
+ /** adjacency list: agentId → [outgoing relationships] */
11
+ private outgoing;
12
+ /** reverse adjacency: agentId → [incoming relationships] */
13
+ private incoming;
14
+ constructor(relationships: RelationshipDefinition[]);
15
+ /** Add a new relationship */
16
+ addRelationship(rel: RelationshipDefinition): void;
17
+ /** Get all outgoing relationships from an agent */
18
+ getOutgoing(agentId: string): LiveRelationship[];
19
+ /** Get all incoming relationships to an agent */
20
+ getIncoming(agentId: string): LiveRelationship[];
21
+ /** Get direct relationships between two agents (both directions) */
22
+ getBetween(fromId: string, toId: string): LiveRelationship[];
23
+ /** Get all agents that have a specific relationship type with the given agent */
24
+ getRelatedAgents(agentId: string, type: RelationshipType, direction?: 'outgoing' | 'incoming' | 'both'): string[];
25
+ /** Get superiors (agents with 'superior' relationship to this agent) */
26
+ getSuperiors(agentId: string): string[];
27
+ /** Get subordinates */
28
+ getSubordinates(agentId: string): string[];
29
+ /** Get peers */
30
+ getPeers(agentId: string): string[];
31
+ /** Get competitors */
32
+ getCompetitors(agentId: string): string[];
33
+ /** Get allies */
34
+ getAllies(agentId: string): string[];
35
+ /** Get rivals */
36
+ getRivals(agentId: string): string[];
37
+ /** Find shortest path between two agents (BFS) */
38
+ findPath(fromId: string, toId: string): string[] | null;
39
+ /** Update a relationship's weight (for evolution) */
40
+ updateWeight(fromId: string, toId: string, type: RelationshipType, newWeight: number, reason: string): boolean;
41
+ /** Get all unique agent IDs in the graph */
42
+ getAllAgentIds(): string[];
43
+ /** Export as adjacency list for visualization */
44
+ toAdjacencyList(): Record<string, Array<{
45
+ to: string;
46
+ type: RelationshipType;
47
+ weight: number;
48
+ }>>;
49
+ }
50
+ //# sourceMappingURL=relationship-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationship-graph.d.ts","sourceRoot":"","sources":["../../src/core/relationship-graph.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEpG,qBAAa,iBAAiB;IAC5B,yDAAyD;IACzD,OAAO,CAAC,QAAQ,CAAkC;IAClD,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAAkC;gBAEtC,aAAa,EAAE,sBAAsB,EAAE;IASnD,6BAA6B;IAC7B,eAAe,CAAC,GAAG,EAAE,sBAAsB,GAAG,IAAI;IAiBlD,mDAAmD;IACnD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAIhD,iDAAiD;IACjD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAIhD,oEAAoE;IACpE,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAM5D,iFAAiF;IACjF,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,GAAE,UAAU,GAAG,UAAU,GAAG,MAAe,GAAG,MAAM,EAAE;IAkBzH,wEAAwE;IACxE,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAIvC,uBAAuB;IACvB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAI1C,gBAAgB;IAChB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAInC,sBAAsB;IACtB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAIzC,iBAAiB;IACjB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAIpC,iBAAiB;IACjB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAIpC,kDAAkD;IAClD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAwBvD,qDAAqD;IACrD,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAiB9G,4CAA4C;IAC5C,cAAc,IAAI,MAAM,EAAE;IAS1B,iDAAiD;IACjD,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,gBAAgB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAOjG"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Relationship Graph — the social fabric of a Universe.
3
+ *
4
+ * A directed multigraph where agents are nodes and relationships are edges.
5
+ * Supports traversal algorithms for finding communication paths,
6
+ * influence chains, and organizational distance.
7
+ */
8
+ export class RelationshipGraph {
9
+ /** adjacency list: agentId → [outgoing relationships] */
10
+ outgoing;
11
+ /** reverse adjacency: agentId → [incoming relationships] */
12
+ incoming;
13
+ constructor(relationships) {
14
+ this.outgoing = new Map();
15
+ this.incoming = new Map();
16
+ for (const rel of relationships) {
17
+ this.addRelationship(rel);
18
+ }
19
+ }
20
+ /** Add a new relationship */
21
+ addRelationship(rel) {
22
+ const live = {
23
+ ...rel,
24
+ currentWeight: rel.weight ?? 0.5,
25
+ establishedAt: new Date().toISOString(),
26
+ history: [],
27
+ };
28
+ const out = this.outgoing.get(rel.from) ?? [];
29
+ out.push(live);
30
+ this.outgoing.set(rel.from, out);
31
+ const inc = this.incoming.get(rel.to) ?? [];
32
+ inc.push(live);
33
+ this.incoming.set(rel.to, inc);
34
+ }
35
+ /** Get all outgoing relationships from an agent */
36
+ getOutgoing(agentId) {
37
+ return this.outgoing.get(agentId) ?? [];
38
+ }
39
+ /** Get all incoming relationships to an agent */
40
+ getIncoming(agentId) {
41
+ return this.incoming.get(agentId) ?? [];
42
+ }
43
+ /** Get direct relationships between two agents (both directions) */
44
+ getBetween(fromId, toId) {
45
+ const out = this.getOutgoing(fromId).filter(r => r.to === toId);
46
+ const inc = this.getOutgoing(toId).filter(r => r.to === fromId);
47
+ return [...out, ...inc];
48
+ }
49
+ /** Get all agents that have a specific relationship type with the given agent */
50
+ getRelatedAgents(agentId, type, direction = 'both') {
51
+ const results = new Set();
52
+ if (direction === 'outgoing' || direction === 'both') {
53
+ for (const rel of this.getOutgoing(agentId)) {
54
+ if (rel.type === type)
55
+ results.add(rel.to);
56
+ }
57
+ }
58
+ if (direction === 'incoming' || direction === 'both') {
59
+ for (const rel of this.getIncoming(agentId)) {
60
+ if (rel.type === type)
61
+ results.add(rel.from);
62
+ }
63
+ }
64
+ return [...results];
65
+ }
66
+ /** Get superiors (agents with 'superior' relationship to this agent) */
67
+ getSuperiors(agentId) {
68
+ return this.getRelatedAgents(agentId, 'superior', 'incoming');
69
+ }
70
+ /** Get subordinates */
71
+ getSubordinates(agentId) {
72
+ return this.getRelatedAgents(agentId, 'superior', 'outgoing');
73
+ }
74
+ /** Get peers */
75
+ getPeers(agentId) {
76
+ return this.getRelatedAgents(agentId, 'peer', 'both');
77
+ }
78
+ /** Get competitors */
79
+ getCompetitors(agentId) {
80
+ return this.getRelatedAgents(agentId, 'competitive', 'both');
81
+ }
82
+ /** Get allies */
83
+ getAllies(agentId) {
84
+ return this.getRelatedAgents(agentId, 'ally', 'both');
85
+ }
86
+ /** Get rivals */
87
+ getRivals(agentId) {
88
+ return this.getRelatedAgents(agentId, 'rival', 'both');
89
+ }
90
+ /** Find shortest path between two agents (BFS) */
91
+ findPath(fromId, toId) {
92
+ if (fromId === toId)
93
+ return [fromId];
94
+ const visited = new Set();
95
+ const queue = [
96
+ { node: fromId, path: [fromId] },
97
+ ];
98
+ while (queue.length > 0) {
99
+ const { node, path } = queue.shift();
100
+ if (visited.has(node))
101
+ continue;
102
+ visited.add(node);
103
+ for (const rel of this.getOutgoing(node)) {
104
+ if (rel.to === toId)
105
+ return [...path, toId];
106
+ if (!visited.has(rel.to)) {
107
+ queue.push({ node: rel.to, path: [...path, rel.to] });
108
+ }
109
+ }
110
+ }
111
+ return null;
112
+ }
113
+ /** Update a relationship's weight (for evolution) */
114
+ updateWeight(fromId, toId, type, newWeight, reason) {
115
+ const rels = this.getOutgoing(fromId).filter(r => r.to === toId && r.type === type);
116
+ if (rels.length === 0)
117
+ return false;
118
+ for (const rel of rels) {
119
+ if (!rel.mutable)
120
+ continue;
121
+ rel.history.push({
122
+ timestamp: new Date().toISOString(),
123
+ previousWeight: rel.currentWeight,
124
+ newWeight,
125
+ reason,
126
+ });
127
+ rel.currentWeight = Math.max(0, Math.min(1, newWeight));
128
+ }
129
+ return true;
130
+ }
131
+ /** Get all unique agent IDs in the graph */
132
+ getAllAgentIds() {
133
+ const ids = new Set();
134
+ for (const [from, rels] of this.outgoing) {
135
+ ids.add(from);
136
+ for (const rel of rels)
137
+ ids.add(rel.to);
138
+ }
139
+ return [...ids];
140
+ }
141
+ /** Export as adjacency list for visualization */
142
+ toAdjacencyList() {
143
+ const result = {};
144
+ for (const [from, rels] of this.outgoing) {
145
+ result[from] = rels.map(r => ({ to: r.to, type: r.type, weight: r.currentWeight }));
146
+ }
147
+ return result;
148
+ }
149
+ }
150
+ //# sourceMappingURL=relationship-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationship-graph.js","sourceRoot":"","sources":["../../src/core/relationship-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Resource Pool — manages finite, renewable, and positional resources.
3
+ *
4
+ * Resources are the alignment mechanism: agents optimize for resource
5
+ * acquisition, so designing the resource structure aligns agent behavior
6
+ * with organizational goals.
7
+ */
8
+ import type { ResourceDefinition, ResourceTransfer, DistributionStrategy } from '../types/index.js';
9
+ export declare class ResourcePool {
10
+ private definitions;
11
+ /** Map: resourceName → Map<agentId, amount> */
12
+ private allocations;
13
+ private transferLog;
14
+ constructor(resources: ResourceDefinition[]);
15
+ /** Get a resource definition */
16
+ getDefinition(name: string): ResourceDefinition | undefined;
17
+ /** Get all resource definitions */
18
+ getAllDefinitions(): ResourceDefinition[];
19
+ /** Get current allocation for an agent */
20
+ getBalance(agentId: string, resourceName: string): number;
21
+ /** Get all balances for an agent */
22
+ getAllBalances(agentId: string): Record<string, number>;
23
+ /** Get total allocated amount for a resource */
24
+ getTotalAllocated(resourceName: string): number;
25
+ /** Get remaining unallocated amount */
26
+ getRemaining(resourceName: string): number;
27
+ /** Allocate resource to an agent (from system pool) */
28
+ allocate(agentId: string, resourceName: string, amount: number, reason: string): boolean;
29
+ /** Transfer resource between agents */
30
+ transfer(fromId: string, toId: string, resourceName: string, amount: number, reason: string): boolean;
31
+ /** Revoke resource from an agent (back to system pool) */
32
+ revoke(agentId: string, resourceName: string, amount: number, reason: string): boolean;
33
+ /** Apply decay to a resource (for finite resources with decay) */
34
+ applyDecay(resourceName: string): ResourceTransfer[];
35
+ /** Distribute resource according to strategy */
36
+ distribute(resourceName: string, agentIds: string[], strategy: DistributionStrategy, rankMap?: Record<string, number>, performanceMap?: Record<string, number>): void;
37
+ /** Get leaderboard for a resource */
38
+ getLeaderboard(resourceName: string): Array<{
39
+ agentId: string;
40
+ amount: number;
41
+ }>;
42
+ /** Get transfer history */
43
+ getTransferLog(limit?: number): ResourceTransfer[];
44
+ /** Export current state */
45
+ snapshot(): Record<string, Record<string, number>>;
46
+ private setBalance;
47
+ }
48
+ //# sourceMappingURL=resource-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-pool.d.ts","sourceRoot":"","sources":["../../src/core/resource-pool.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAElB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAkC;IACrD,+CAA+C;IAC/C,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,WAAW,CAAqB;gBAE5B,SAAS,EAAE,kBAAkB,EAAE;IAW3C,gCAAgC;IAChC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAI3D,mCAAmC;IACnC,iBAAiB,IAAI,kBAAkB,EAAE;IAIzC,0CAA0C;IAC1C,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAIzD,oCAAoC;IACpC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQvD,gDAAgD;IAChD,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAQ/C,uCAAuC;IACvC,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAM1C,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAmBxF,uCAAuC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAoBrG,0DAA0D;IAC1D,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAkBtF,kEAAkE;IAClE,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,EAAE;IA2BpD,gDAAgD;IAChD,UAAU,CACR,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAAE,EAClB,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,IAAI;IAwCP,qCAAqC;IACrC,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAShF,2BAA2B;IAC3B,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAKlD,2BAA2B;IAC3B,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAQlD,OAAO,CAAC,UAAU;CAGnB"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Resource Pool — manages finite, renewable, and positional resources.
3
+ *
4
+ * Resources are the alignment mechanism: agents optimize for resource
5
+ * acquisition, so designing the resource structure aligns agent behavior
6
+ * with organizational goals.
7
+ */
8
+ export class ResourcePool {
9
+ definitions;
10
+ /** Map: resourceName → Map<agentId, amount> */
11
+ allocations;
12
+ transferLog;
13
+ constructor(resources) {
14
+ this.definitions = new Map();
15
+ this.allocations = new Map();
16
+ this.transferLog = [];
17
+ for (const res of resources) {
18
+ this.definitions.set(res.name, res);
19
+ this.allocations.set(res.name, new Map());
20
+ }
21
+ }
22
+ /** Get a resource definition */
23
+ getDefinition(name) {
24
+ return this.definitions.get(name);
25
+ }
26
+ /** Get all resource definitions */
27
+ getAllDefinitions() {
28
+ return [...this.definitions.values()];
29
+ }
30
+ /** Get current allocation for an agent */
31
+ getBalance(agentId, resourceName) {
32
+ return this.allocations.get(resourceName)?.get(agentId) ?? 0;
33
+ }
34
+ /** Get all balances for an agent */
35
+ getAllBalances(agentId) {
36
+ const balances = {};
37
+ for (const [name] of this.definitions) {
38
+ balances[name] = this.getBalance(agentId, name);
39
+ }
40
+ return balances;
41
+ }
42
+ /** Get total allocated amount for a resource */
43
+ getTotalAllocated(resourceName) {
44
+ const allocs = this.allocations.get(resourceName);
45
+ if (!allocs)
46
+ return 0;
47
+ let total = 0;
48
+ for (const amount of allocs.values())
49
+ total += amount;
50
+ return total;
51
+ }
52
+ /** Get remaining unallocated amount */
53
+ getRemaining(resourceName) {
54
+ const def = this.definitions.get(resourceName);
55
+ if (!def)
56
+ return 0;
57
+ return def.total - this.getTotalAllocated(resourceName);
58
+ }
59
+ /** Allocate resource to an agent (from system pool) */
60
+ allocate(agentId, resourceName, amount, reason) {
61
+ const remaining = this.getRemaining(resourceName);
62
+ if (amount > remaining)
63
+ return false;
64
+ const current = this.getBalance(agentId, resourceName);
65
+ this.allocations.get(resourceName).set(agentId, current + amount);
66
+ this.transferLog.push({
67
+ from: 'system',
68
+ to: agentId,
69
+ resource: resourceName,
70
+ amount,
71
+ reason,
72
+ timestamp: new Date().toISOString(),
73
+ });
74
+ return true;
75
+ }
76
+ /** Transfer resource between agents */
77
+ transfer(fromId, toId, resourceName, amount, reason) {
78
+ const fromBalance = this.getBalance(fromId, resourceName);
79
+ if (amount > fromBalance)
80
+ return false;
81
+ const resAllocs = this.allocations.get(resourceName);
82
+ resAllocs.set(fromId, fromBalance - amount);
83
+ resAllocs.set(toId, this.getBalance(toId, resourceName) + amount);
84
+ this.transferLog.push({
85
+ from: fromId,
86
+ to: toId,
87
+ resource: resourceName,
88
+ amount,
89
+ reason,
90
+ timestamp: new Date().toISOString(),
91
+ });
92
+ return true;
93
+ }
94
+ /** Revoke resource from an agent (back to system pool) */
95
+ revoke(agentId, resourceName, amount, reason) {
96
+ const balance = this.getBalance(agentId, resourceName);
97
+ if (amount > balance)
98
+ return false;
99
+ this.allocations.get(resourceName).set(agentId, balance - amount);
100
+ this.transferLog.push({
101
+ from: agentId,
102
+ to: 'system',
103
+ resource: resourceName,
104
+ amount,
105
+ reason,
106
+ timestamp: new Date().toISOString(),
107
+ });
108
+ return true;
109
+ }
110
+ /** Apply decay to a resource (for finite resources with decay) */
111
+ applyDecay(resourceName) {
112
+ const def = this.definitions.get(resourceName);
113
+ if (!def || !def.decayRate || def.decayRate <= 0)
114
+ return [];
115
+ const transfers = [];
116
+ const allocs = this.allocations.get(resourceName);
117
+ for (const [agentId, amount] of allocs) {
118
+ const decayAmount = Math.floor(amount * def.decayRate);
119
+ if (decayAmount > 0) {
120
+ allocs.set(agentId, amount - decayAmount);
121
+ const transfer = {
122
+ from: agentId,
123
+ to: 'system',
124
+ resource: resourceName,
125
+ amount: decayAmount,
126
+ reason: 'decay',
127
+ timestamp: new Date().toISOString(),
128
+ };
129
+ transfers.push(transfer);
130
+ this.transferLog.push(transfer);
131
+ }
132
+ }
133
+ return transfers;
134
+ }
135
+ /** Distribute resource according to strategy */
136
+ distribute(resourceName, agentIds, strategy, rankMap, performanceMap) {
137
+ const def = this.definitions.get(resourceName);
138
+ if (!def)
139
+ return;
140
+ const total = def.total;
141
+ switch (strategy) {
142
+ case 'equal': {
143
+ const share = Math.floor(total / agentIds.length);
144
+ for (const id of agentIds) {
145
+ this.setBalance(id, resourceName, share);
146
+ }
147
+ break;
148
+ }
149
+ case 'hierarchy': {
150
+ if (!rankMap)
151
+ break;
152
+ const totalRank = agentIds.reduce((sum, id) => sum + (rankMap[id] ?? 0), 0);
153
+ if (totalRank === 0)
154
+ break;
155
+ for (const id of agentIds) {
156
+ const share = Math.floor(total * ((rankMap[id] ?? 0) / totalRank));
157
+ this.setBalance(id, resourceName, share);
158
+ }
159
+ break;
160
+ }
161
+ case 'merit': {
162
+ if (!performanceMap)
163
+ break;
164
+ const totalPerf = agentIds.reduce((sum, id) => sum + (performanceMap[id] ?? 0), 0);
165
+ if (totalPerf === 0)
166
+ break;
167
+ for (const id of agentIds) {
168
+ const share = Math.floor(total * ((performanceMap[id] ?? 0) / totalPerf));
169
+ this.setBalance(id, resourceName, share);
170
+ }
171
+ break;
172
+ }
173
+ case 'competitive':
174
+ // Competitive distribution is handled by external competition engine
175
+ break;
176
+ }
177
+ }
178
+ /** Get leaderboard for a resource */
179
+ getLeaderboard(resourceName) {
180
+ const allocs = this.allocations.get(resourceName);
181
+ if (!allocs)
182
+ return [];
183
+ return [...allocs.entries()]
184
+ .map(([agentId, amount]) => ({ agentId, amount }))
185
+ .sort((a, b) => b.amount - a.amount);
186
+ }
187
+ /** Get transfer history */
188
+ getTransferLog(limit) {
189
+ if (limit)
190
+ return this.transferLog.slice(-limit);
191
+ return [...this.transferLog];
192
+ }
193
+ /** Export current state */
194
+ snapshot() {
195
+ const result = {};
196
+ for (const [name, allocs] of this.allocations) {
197
+ result[name] = Object.fromEntries(allocs);
198
+ }
199
+ return result;
200
+ }
201
+ setBalance(agentId, resourceName, amount) {
202
+ this.allocations.get(resourceName)?.set(agentId, Math.max(0, amount));
203
+ }
204
+ }
205
+ //# sourceMappingURL=resource-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-pool.js","sourceRoot":"","sources":["../../src/core/resource-pool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Generic State Machine — the universal primitive for organizational workflows.
3
+ *
4
+ * Supports role-gated transitions, guard expressions, and actions.
5
+ * Any multi-step workflow can be modeled as a finite state machine.
6
+ */
7
+ import type { ProtocolDefinition, StateDefinition, TransitionRule } from '../types/index.js';
8
+ export interface StateMachineInstance {
9
+ /** Protocol this instance follows */
10
+ protocol: string;
11
+ /** Current state name */
12
+ currentState: string;
13
+ /** Transition history */
14
+ history: TransitionRecord[];
15
+ /** When this instance was created */
16
+ createdAt: string;
17
+ }
18
+ export interface TransitionRecord {
19
+ from: string;
20
+ to: string;
21
+ triggeredBy: string;
22
+ timestamp: string;
23
+ guard?: string;
24
+ }
25
+ export declare class StateMachine {
26
+ private protocol;
27
+ private stateMap;
28
+ private transitionMap;
29
+ constructor(protocol: ProtocolDefinition);
30
+ /** Create a new instance starting at the first non-terminal state */
31
+ createInstance(): StateMachineInstance;
32
+ /** Get the current state definition */
33
+ getState(stateName: string): StateDefinition | undefined;
34
+ /** Get all valid transitions from the current state */
35
+ getAvailableTransitions(instance: StateMachineInstance): TransitionRule[];
36
+ /** Check if a specific transition is valid */
37
+ canTransition(instance: StateMachineInstance, targetState: string, actorRole?: string, context?: Record<string, unknown>): boolean;
38
+ /** Execute a transition */
39
+ transition(instance: StateMachineInstance, targetState: string, actorRole: string, context?: Record<string, unknown>): StateMachineInstance;
40
+ /** Check if the current state is terminal */
41
+ isTerminal(instance: StateMachineInstance): boolean;
42
+ /** Get the protocol definition */
43
+ getProtocol(): ProtocolDefinition;
44
+ /** Get all state names */
45
+ getStateNames(): string[];
46
+ }
47
+ //# sourceMappingURL=state-machine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-machine.d.ts","sourceRoot":"","sources":["../../src/core/state-machine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE7F,MAAM,WAAW,oBAAoB;IACnC,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,YAAY;IAIX,OAAO,CAAC,QAAQ;IAH5B,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,aAAa,CAAgC;gBAEjC,QAAQ,EAAE,kBAAkB;IAYhD,qEAAqE;IACrE,cAAc,IAAI,oBAAoB;IAatC,uCAAuC;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIxD,uDAAuD;IACvD,uBAAuB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,cAAc,EAAE;IAIzE,8CAA8C;IAC9C,aAAa,CACX,QAAQ,EAAE,oBAAoB,EAC9B,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO;IAUV,2BAA2B;IAC3B,UAAU,CACR,QAAQ,EAAE,oBAAoB,EAC9B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,oBAAoB;IA0BvB,6CAA6C;IAC7C,UAAU,CAAC,QAAQ,EAAE,oBAAoB,GAAG,OAAO;IAKnD,kCAAkC;IAClC,WAAW,IAAI,kBAAkB;IAIjC,0BAA0B;IAC1B,aAAa,IAAI,MAAM,EAAE;CAG1B"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Generic State Machine — the universal primitive for organizational workflows.
3
+ *
4
+ * Supports role-gated transitions, guard expressions, and actions.
5
+ * Any multi-step workflow can be modeled as a finite state machine.
6
+ */
7
+ export class StateMachine {
8
+ protocol;
9
+ stateMap;
10
+ transitionMap;
11
+ constructor(protocol) {
12
+ this.protocol = protocol;
13
+ this.stateMap = new Map(protocol.states.map(s => [s.name, s]));
14
+ this.transitionMap = new Map();
15
+ // Index transitions by source state
16
+ for (const t of protocol.transitions) {
17
+ const existing = this.transitionMap.get(t.from) ?? [];
18
+ existing.push(t);
19
+ this.transitionMap.set(t.from, existing);
20
+ }
21
+ }
22
+ /** Create a new instance starting at the first non-terminal state */
23
+ createInstance() {
24
+ const initialState = this.protocol.states[0];
25
+ if (!initialState) {
26
+ throw new Error(`Protocol "${this.protocol.name}" has no states`);
27
+ }
28
+ return {
29
+ protocol: this.protocol.name,
30
+ currentState: initialState.name,
31
+ history: [],
32
+ createdAt: new Date().toISOString(),
33
+ };
34
+ }
35
+ /** Get the current state definition */
36
+ getState(stateName) {
37
+ return this.stateMap.get(stateName);
38
+ }
39
+ /** Get all valid transitions from the current state */
40
+ getAvailableTransitions(instance) {
41
+ return this.transitionMap.get(instance.currentState) ?? [];
42
+ }
43
+ /** Check if a specific transition is valid */
44
+ canTransition(instance, targetState, actorRole, context) {
45
+ const transitions = this.getAvailableTransitions(instance);
46
+ return transitions.some(t => {
47
+ if (t.to !== targetState)
48
+ return false;
49
+ if (t.requiredRole && actorRole !== t.requiredRole)
50
+ return false;
51
+ if (t.guard && !evaluateGuard(t.guard, context ?? {}))
52
+ return false;
53
+ return true;
54
+ });
55
+ }
56
+ /** Execute a transition */
57
+ transition(instance, targetState, actorRole, context) {
58
+ if (!this.canTransition(instance, targetState, actorRole, context)) {
59
+ throw new Error(`Invalid transition: ${instance.currentState} → ${targetState} ` +
60
+ `(actor: ${actorRole}, protocol: ${this.protocol.name})`);
61
+ }
62
+ const matchingTransition = this.getAvailableTransitions(instance)
63
+ .find(t => t.to === targetState);
64
+ const record = {
65
+ from: instance.currentState,
66
+ to: targetState,
67
+ triggeredBy: actorRole,
68
+ timestamp: new Date().toISOString(),
69
+ guard: matchingTransition?.guard,
70
+ };
71
+ return {
72
+ ...instance,
73
+ currentState: targetState,
74
+ history: [...instance.history, record],
75
+ };
76
+ }
77
+ /** Check if the current state is terminal */
78
+ isTerminal(instance) {
79
+ const state = this.stateMap.get(instance.currentState);
80
+ return state?.terminal === true;
81
+ }
82
+ /** Get the protocol definition */
83
+ getProtocol() {
84
+ return this.protocol;
85
+ }
86
+ /** Get all state names */
87
+ getStateNames() {
88
+ return this.protocol.states.map(s => s.name);
89
+ }
90
+ }
91
+ /**
92
+ * Simple guard expression evaluator.
93
+ * Supports: "key.subkey", "value > N", "value == 'string'"
94
+ */
95
+ function evaluateGuard(guard, context) {
96
+ // Simple dot-notation lookup: "review.approved" → context.review?.approved
97
+ const parts = guard.split('.');
98
+ let value = context;
99
+ for (const part of parts) {
100
+ if (value && typeof value === 'object') {
101
+ value = value[part];
102
+ }
103
+ else {
104
+ return false;
105
+ }
106
+ }
107
+ // Truthy check
108
+ return Boolean(value);
109
+ }
110
+ //# sourceMappingURL=state-machine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-machine.js","sourceRoot":"","sources":["../../src/core/state-machine.ts"],"names":[],"mappings":"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"}