@neuroverseos/governance 0.3.1 → 0.3.3

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 (132) hide show
  1. package/.well-known/ai-plugin.json +34 -9
  2. package/AGENTS.md +72 -24
  3. package/README.md +343 -248
  4. package/dist/adapters/autoresearch.cjs +1345 -0
  5. package/dist/adapters/autoresearch.d.cts +111 -0
  6. package/dist/adapters/autoresearch.d.ts +111 -0
  7. package/dist/adapters/autoresearch.js +12 -0
  8. package/dist/adapters/deep-agents.cjs +1528 -0
  9. package/dist/adapters/deep-agents.d.cts +181 -0
  10. package/dist/adapters/deep-agents.d.ts +181 -0
  11. package/dist/adapters/deep-agents.js +17 -0
  12. package/dist/adapters/express.cjs +1253 -0
  13. package/dist/adapters/express.d.cts +66 -0
  14. package/dist/adapters/express.d.ts +66 -0
  15. package/dist/adapters/express.js +12 -0
  16. package/dist/adapters/index.cjs +2112 -0
  17. package/dist/adapters/index.d.cts +8 -0
  18. package/dist/adapters/index.d.ts +8 -0
  19. package/dist/adapters/index.js +68 -0
  20. package/dist/adapters/langchain.cjs +1315 -0
  21. package/dist/adapters/langchain.d.cts +89 -0
  22. package/dist/adapters/langchain.d.ts +89 -0
  23. package/dist/adapters/langchain.js +17 -0
  24. package/dist/adapters/openai.cjs +1345 -0
  25. package/dist/adapters/openai.d.cts +99 -0
  26. package/dist/adapters/openai.d.ts +99 -0
  27. package/dist/adapters/openai.js +17 -0
  28. package/dist/adapters/openclaw.cjs +1337 -0
  29. package/dist/adapters/openclaw.d.cts +99 -0
  30. package/dist/adapters/openclaw.d.ts +99 -0
  31. package/dist/adapters/openclaw.js +17 -0
  32. package/dist/add-ROOZLU62.js +314 -0
  33. package/dist/behavioral-MJO34S6Q.js +118 -0
  34. package/dist/bootstrap-CQRZVOXK.js +116 -0
  35. package/dist/bootstrap-emitter-Q7UIJZ2O.js +7 -0
  36. package/dist/bootstrap-parser-EEF36XDU.js +7 -0
  37. package/dist/browser.global.js +941 -0
  38. package/dist/build-QKOBBC23.js +341 -0
  39. package/dist/chunk-3WQLXYTP.js +91 -0
  40. package/dist/chunk-4FLICVVA.js +119 -0
  41. package/dist/chunk-4NGDRRQH.js +10 -0
  42. package/dist/chunk-5TPFNWRU.js +215 -0
  43. package/dist/chunk-5U2MQO5P.js +57 -0
  44. package/dist/chunk-6CZSKEY5.js +164 -0
  45. package/dist/chunk-6S5CFQXY.js +624 -0
  46. package/dist/chunk-7P3S7MAY.js +1090 -0
  47. package/dist/chunk-A5W4GNQO.js +130 -0
  48. package/dist/chunk-A7GKPPU7.js +226 -0
  49. package/dist/chunk-AKW5YVCE.js +96 -0
  50. package/dist/chunk-B6OXJLJ5.js +622 -0
  51. package/dist/chunk-BNKJPUPQ.js +113 -0
  52. package/dist/chunk-BQZMOEML.js +43 -0
  53. package/dist/chunk-CNSO6XW5.js +207 -0
  54. package/dist/chunk-CTZHONLA.js +135 -0
  55. package/dist/chunk-D2UCV5AK.js +326 -0
  56. package/dist/chunk-EMQDLDAF.js +458 -0
  57. package/dist/chunk-F66BVUYB.js +340 -0
  58. package/dist/chunk-G7DJ6VOD.js +101 -0
  59. package/dist/chunk-I3RRAYK2.js +11 -0
  60. package/dist/chunk-IS4WUH6Y.js +363 -0
  61. package/dist/chunk-MH7BT4VH.js +15 -0
  62. package/dist/chunk-O5ABKEA7.js +304 -0
  63. package/dist/chunk-OT6PXH54.js +61 -0
  64. package/dist/chunk-PVTQQS3Y.js +186 -0
  65. package/dist/chunk-Q6O7ZLO2.js +62 -0
  66. package/dist/chunk-QLPTHTVB.js +253 -0
  67. package/dist/chunk-QWGCMQQD.js +16 -0
  68. package/dist/chunk-QXBFT7NI.js +201 -0
  69. package/dist/chunk-TG6SEF24.js +246 -0
  70. package/dist/chunk-U6U7EJZL.js +177 -0
  71. package/dist/chunk-W7LLXRGY.js +830 -0
  72. package/dist/chunk-ZJTDUCC2.js +194 -0
  73. package/dist/chunk-ZWI3NIXK.js +314 -0
  74. package/dist/cli/neuroverse.cjs +14191 -0
  75. package/dist/cli/neuroverse.d.cts +1 -0
  76. package/dist/cli/neuroverse.d.ts +1 -0
  77. package/dist/cli/neuroverse.js +227 -0
  78. package/dist/cli/plan.cjs +2439 -0
  79. package/dist/cli/plan.d.cts +20 -0
  80. package/dist/cli/plan.d.ts +20 -0
  81. package/dist/cli/plan.js +353 -0
  82. package/dist/cli/run.cjs +2001 -0
  83. package/dist/cli/run.d.cts +20 -0
  84. package/dist/cli/run.d.ts +20 -0
  85. package/dist/cli/run.js +143 -0
  86. package/dist/configure-ai-6TZ3MCSI.js +132 -0
  87. package/dist/decision-flow-M63D47LO.js +61 -0
  88. package/dist/demo-G43RLCPK.js +469 -0
  89. package/dist/derive-FJZVIPUZ.js +153 -0
  90. package/dist/doctor-6BC6X2VO.js +173 -0
  91. package/dist/equity-penalties-SG5IZQ7I.js +244 -0
  92. package/dist/explain-RHBU2GBR.js +51 -0
  93. package/dist/guard-AJCCGZMF.js +92 -0
  94. package/dist/guard-contract-DqFcTScd.d.cts +821 -0
  95. package/dist/guard-contract-DqFcTScd.d.ts +821 -0
  96. package/dist/guard-engine-PNR6MHCM.js +10 -0
  97. package/dist/impact-3XVDSCBU.js +59 -0
  98. package/dist/improve-TQP4ECSY.js +66 -0
  99. package/dist/index.cjs +7591 -0
  100. package/dist/index.d.cts +2195 -0
  101. package/dist/index.d.ts +2195 -0
  102. package/dist/index.js +472 -0
  103. package/dist/infer-world-IFXCACJ5.js +543 -0
  104. package/dist/init-FYPV4SST.js +144 -0
  105. package/dist/init-world-TI7ARHBT.js +223 -0
  106. package/dist/mcp-server-5Y3ZM7TV.js +13 -0
  107. package/dist/model-adapter-VXEKB4LS.js +11 -0
  108. package/dist/playground-VZBNPPBO.js +560 -0
  109. package/dist/redteam-MZPZD3EF.js +357 -0
  110. package/dist/session-JYOARW54.js +15 -0
  111. package/dist/shared-7RLUHNMU.js +16 -0
  112. package/dist/shared-B8dvUUD8.d.cts +60 -0
  113. package/dist/shared-Dr5Wiay8.d.ts +60 -0
  114. package/dist/simulate-LJXYBC6M.js +83 -0
  115. package/dist/test-BOOR4A5F.js +217 -0
  116. package/dist/trace-PKV4KX56.js +166 -0
  117. package/dist/validate-RALX7CZS.js +81 -0
  118. package/dist/validate-engine-7ZXFVGF2.js +7 -0
  119. package/dist/viz/assets/index-B8SaeJZZ.js +23 -0
  120. package/dist/viz/index.html +23 -0
  121. package/dist/world-BIP4GZBZ.js +376 -0
  122. package/dist/world-loader-Y6HMQH2D.js +13 -0
  123. package/dist/worlds/autoresearch.nv-world.md +230 -0
  124. package/dist/worlds/coding-agent.nv-world.md +211 -0
  125. package/dist/worlds/derivation-world.nv-world.md +278 -0
  126. package/dist/worlds/research-agent.nv-world.md +169 -0
  127. package/dist/worlds/social-media.nv-world.md +198 -0
  128. package/dist/worlds/trading-agent.nv-world.md +218 -0
  129. package/examples/social-media-sim/bridge.py +209 -0
  130. package/examples/social-media-sim/simulation.py +927 -0
  131. package/package.json +16 -3
  132. package/simulate.html +4 -336
@@ -0,0 +1,326 @@
1
+ // src/engine/decision-flow-engine.ts
2
+ function generateDecisionFlow(events) {
3
+ if (events.length === 0) {
4
+ return emptyFlow();
5
+ }
6
+ const intentMap = /* @__PURE__ */ new Map();
7
+ for (const e of events) {
8
+ const intentKey = normalizeIntent(e.intent);
9
+ const entry = intentMap.get(intentKey) ?? { agents: /* @__PURE__ */ new Set(), count: 0 };
10
+ entry.count++;
11
+ entry.agents.add(e.actor ?? "unknown");
12
+ intentMap.set(intentKey, entry);
13
+ }
14
+ const maxCount = Math.max(...[...intentMap.values()].map((v) => v.count), 1);
15
+ const intents = [...intentMap.entries()].map(([intent, data]) => ({
16
+ intent,
17
+ agentCount: data.count,
18
+ intensity: data.count / maxCount,
19
+ agents: [...data.agents]
20
+ })).sort((a, b) => b.agentCount - a.agentCount);
21
+ const ruleMap = /* @__PURE__ */ new Map();
22
+ for (const e of events) {
23
+ if (!e.ruleId && e.guardsMatched.length === 0) continue;
24
+ const ruleIds = [e.ruleId, ...e.guardsMatched].filter(Boolean);
25
+ for (const rId of new Set(ruleIds)) {
26
+ const existing = ruleMap.get(rId) ?? {
27
+ ruleId: rId,
28
+ label: rId,
29
+ interceptCount: 0,
30
+ enforcements: { blocked: 0, modified: 0, penalized: 0, paused: 0, rewarded: 0 }
31
+ };
32
+ existing.interceptCount++;
33
+ switch (e.decision) {
34
+ case "BLOCK":
35
+ existing.enforcements.blocked++;
36
+ break;
37
+ case "PAUSE":
38
+ existing.enforcements.paused++;
39
+ break;
40
+ case "MODIFY":
41
+ existing.enforcements.modified++;
42
+ break;
43
+ case "PENALIZE":
44
+ existing.enforcements.penalized++;
45
+ break;
46
+ case "REWARD":
47
+ existing.enforcements.rewarded++;
48
+ break;
49
+ }
50
+ ruleMap.set(rId, existing);
51
+ }
52
+ }
53
+ const rules = [...ruleMap.values()].sort((a, b) => b.interceptCount - a.interceptCount);
54
+ const outcomeMap = /* @__PURE__ */ new Map();
55
+ for (const e of events) {
56
+ const key = e.decision;
57
+ const entry = outcomeMap.get(key) ?? { agents: /* @__PURE__ */ new Set(), count: 0 };
58
+ entry.count++;
59
+ entry.agents.add(e.actor ?? "unknown");
60
+ outcomeMap.set(key, entry);
61
+ }
62
+ const outcomes = [...outcomeMap.entries()].map(([enforcement, data]) => ({
63
+ enforcement,
64
+ agentCount: data.count,
65
+ agents: [...data.agents],
66
+ style: enforcementToStyle(enforcement)
67
+ })).sort((a, b) => b.agentCount - a.agentCount);
68
+ const paths = events.map((e) => ({
69
+ intent: normalizeIntent(e.intent),
70
+ ruleId: e.ruleId ?? e.guardsMatched[0],
71
+ enforcement: e.decision,
72
+ agentId: e.actor ?? "unknown",
73
+ originalAction: e.intent,
74
+ finalAction: e.decision === "ALLOW" ? e.intent : e.decision === "BLOCK" ? "blocked" : e.decision === "PENALIZE" ? "blocked + penalized" : e.decision === "REWARD" ? e.intent + " (rewarded)" : e.decision === "MODIFY" ? "modified" : e.decision === "NEUTRAL" ? e.intent : "paused"
75
+ }));
76
+ const totalIntents = events.length;
77
+ const allowed = events.filter((e) => e.decision === "ALLOW" || e.decision === "REWARD" || e.decision === "NEUTRAL").length;
78
+ const totalRedirected = totalIntents - allowed;
79
+ const totalPenalties = events.filter((e) => e.decision === "PENALIZE").length;
80
+ const totalRewards = events.filter((e) => e.decision === "REWARD").length;
81
+ const byEnforcement = {};
82
+ for (const e of events) {
83
+ byEnforcement[e.decision] = (byEnforcement[e.decision] ?? 0) + 1;
84
+ }
85
+ const metrics = {
86
+ totalIntents,
87
+ totalRedirected,
88
+ redirectionRate: totalIntents > 0 ? totalRedirected / totalIntents : 0,
89
+ byEnforcement,
90
+ totalPenalties,
91
+ totalRewards,
92
+ netBehavioralPressure: totalRewards - totalPenalties
93
+ };
94
+ return {
95
+ intents,
96
+ rules,
97
+ outcomes,
98
+ paths,
99
+ metrics,
100
+ periodStart: events[0]?.timestamp ?? "",
101
+ periodEnd: events[events.length - 1]?.timestamp ?? "",
102
+ worldName: events[0]?.worldName ?? "unknown"
103
+ };
104
+ }
105
+ function createAgentState(agentId) {
106
+ return {
107
+ agentId,
108
+ cooldownRemaining: 0,
109
+ influence: 1,
110
+ rewardMultiplier: 1,
111
+ totalPenalties: 0,
112
+ totalRewards: 0,
113
+ consequenceHistory: [],
114
+ rewardHistory: []
115
+ };
116
+ }
117
+ function applyConsequence(state, consequence, ruleId) {
118
+ const updated = { ...state };
119
+ updated.totalPenalties++;
120
+ updated.consequenceHistory = [
121
+ ...state.consequenceHistory,
122
+ { ruleId, consequence, appliedAt: Date.now() }
123
+ ];
124
+ switch (consequence.type) {
125
+ case "freeze":
126
+ case "cooldown":
127
+ updated.cooldownRemaining = Math.max(
128
+ state.cooldownRemaining,
129
+ consequence.rounds ?? 1
130
+ );
131
+ break;
132
+ case "reduce_influence":
133
+ updated.influence = Math.max(0, state.influence - (consequence.magnitude ?? 0.1));
134
+ break;
135
+ case "increase_risk":
136
+ break;
137
+ case "custom":
138
+ break;
139
+ }
140
+ return updated;
141
+ }
142
+ function applyReward(state, reward, ruleId) {
143
+ const updated = { ...state };
144
+ updated.totalRewards++;
145
+ updated.rewardHistory = [
146
+ ...state.rewardHistory,
147
+ { ruleId, reward, appliedAt: Date.now() }
148
+ ];
149
+ switch (reward.type) {
150
+ case "boost_influence":
151
+ updated.influence = Math.min(2, state.influence + (reward.magnitude ?? 0.1));
152
+ break;
153
+ case "weight_increase":
154
+ updated.rewardMultiplier = Math.min(3, state.rewardMultiplier + (reward.magnitude ?? 0.1));
155
+ break;
156
+ case "priority":
157
+ case "faster_execution":
158
+ break;
159
+ case "custom":
160
+ break;
161
+ }
162
+ return updated;
163
+ }
164
+ function tickAgentStates(states) {
165
+ const updated = /* @__PURE__ */ new Map();
166
+ for (const [id, state] of states) {
167
+ updated.set(id, {
168
+ ...state,
169
+ cooldownRemaining: Math.max(0, state.cooldownRemaining - 1)
170
+ });
171
+ }
172
+ return updated;
173
+ }
174
+ function renderDecisionFlow(flow) {
175
+ const lines = [];
176
+ lines.push("DECISION FLOW \u2014 Intent \u2192 Rule \u2192 Outcome");
177
+ lines.push("\u2550".repeat(60));
178
+ lines.push("");
179
+ lines.push(` World: ${flow.worldName}`);
180
+ lines.push(` Period: ${flow.periodStart.split("T")[0] ?? "\u2014"} \u2192 ${flow.periodEnd.split("T")[0] ?? "\u2014"}`);
181
+ lines.push("");
182
+ lines.push(` "${(flow.metrics.redirectionRate * 100).toFixed(1)}% of agent intent was redirected by governance"`);
183
+ lines.push("");
184
+ lines.push("INTENT POOL (what agents wanted)");
185
+ lines.push("\u2500".repeat(60));
186
+ for (const cluster of flow.intents.slice(0, 15)) {
187
+ const bar = "\u2588".repeat(Math.max(1, Math.round(cluster.intensity * 20)));
188
+ lines.push(` ${cluster.intent.padEnd(25)} ${String(cluster.agentCount).padStart(5)} agents ${bar}`);
189
+ }
190
+ lines.push("");
191
+ lines.push("RULE OBSTACLES (what intercepted)");
192
+ lines.push("\u2500".repeat(60));
193
+ for (const rule of flow.rules.slice(0, 10)) {
194
+ const parts = [];
195
+ if (rule.enforcements.blocked > 0) parts.push(`${rule.enforcements.blocked} blocked`);
196
+ if (rule.enforcements.modified > 0) parts.push(`${rule.enforcements.modified} modified`);
197
+ if (rule.enforcements.penalized > 0) parts.push(`${rule.enforcements.penalized} penalized`);
198
+ if (rule.enforcements.paused > 0) parts.push(`${rule.enforcements.paused} paused`);
199
+ if (rule.enforcements.rewarded > 0) parts.push(`${rule.enforcements.rewarded} rewarded`);
200
+ lines.push(` ${rule.ruleId.padEnd(30)} ${String(rule.interceptCount).padStart(5)} intercepts (${parts.join(", ")})`);
201
+ }
202
+ lines.push("");
203
+ lines.push("OUTCOME POOL (what actually happened)");
204
+ lines.push("\u2500".repeat(60));
205
+ for (const outcome of flow.outcomes) {
206
+ const icon = outcomeIcon(outcome.enforcement);
207
+ lines.push(` ${icon} ${outcome.enforcement.padEnd(12)} ${String(outcome.agentCount).padStart(5)} agents`);
208
+ }
209
+ lines.push("");
210
+ if (flow.metrics.totalPenalties > 0 || flow.metrics.totalRewards > 0) {
211
+ lines.push("BEHAVIORAL ECONOMY");
212
+ lines.push("\u2500".repeat(60));
213
+ lines.push(` Penalties applied: ${flow.metrics.totalPenalties}`);
214
+ lines.push(` Rewards applied: ${flow.metrics.totalRewards}`);
215
+ lines.push(` Net behavioral pressure: ${flow.metrics.netBehavioralPressure > 0 ? "+" : ""}${flow.metrics.netBehavioralPressure}`);
216
+ lines.push("");
217
+ }
218
+ lines.push("ENFORCEMENT BREAKDOWN");
219
+ lines.push("\u2500".repeat(60));
220
+ for (const [enforcement, count] of Object.entries(flow.metrics.byEnforcement)) {
221
+ const pct = (count / flow.metrics.totalIntents * 100).toFixed(1);
222
+ lines.push(` ${enforcement.padEnd(12)} ${String(count).padStart(5)} (${pct}%)`);
223
+ }
224
+ lines.push("");
225
+ return lines.join("\n");
226
+ }
227
+ function normalizeIntent(intent) {
228
+ const lower = intent.toLowerCase().trim();
229
+ const verbs = [
230
+ "sell",
231
+ "buy",
232
+ "trade",
233
+ "publish",
234
+ "delete",
235
+ "create",
236
+ "modify",
237
+ "send",
238
+ "withdraw",
239
+ "transfer",
240
+ "attack",
241
+ "deploy",
242
+ "execute",
243
+ "read",
244
+ "write",
245
+ "hold",
246
+ "stake",
247
+ "approve",
248
+ "reject",
249
+ "escalate"
250
+ ];
251
+ for (const verb of verbs) {
252
+ if (lower.startsWith(verb) || lower.includes(verb)) {
253
+ return verb;
254
+ }
255
+ }
256
+ return lower.split(/\s+/)[0] ?? lower;
257
+ }
258
+ function enforcementToStyle(enforcement) {
259
+ switch (enforcement) {
260
+ case "ALLOW":
261
+ return "green";
262
+ case "MODIFY":
263
+ return "yellow";
264
+ case "BLOCK":
265
+ return "red";
266
+ case "PENALIZE":
267
+ return "gray";
268
+ case "REWARD":
269
+ return "blue";
270
+ case "NEUTRAL":
271
+ return "white";
272
+ case "PAUSE":
273
+ return "yellow";
274
+ default:
275
+ return "white";
276
+ }
277
+ }
278
+ function outcomeIcon(enforcement) {
279
+ switch (enforcement) {
280
+ case "ALLOW":
281
+ return "\u25CF";
282
+ case "MODIFY":
283
+ return "\u25D0";
284
+ case "BLOCK":
285
+ return "\u25CB";
286
+ case "PENALIZE":
287
+ return "\u25CC";
288
+ case "REWARD":
289
+ return "\u25C9";
290
+ case "NEUTRAL":
291
+ return "\u25EF";
292
+ case "PAUSE":
293
+ return "\u25D1";
294
+ default:
295
+ return "\xB7";
296
+ }
297
+ }
298
+ function emptyFlow() {
299
+ return {
300
+ intents: [],
301
+ rules: [],
302
+ outcomes: [],
303
+ paths: [],
304
+ metrics: {
305
+ totalIntents: 0,
306
+ totalRedirected: 0,
307
+ redirectionRate: 0,
308
+ byEnforcement: {},
309
+ totalPenalties: 0,
310
+ totalRewards: 0,
311
+ netBehavioralPressure: 0
312
+ },
313
+ periodStart: "",
314
+ periodEnd: "",
315
+ worldName: "unknown"
316
+ };
317
+ }
318
+
319
+ export {
320
+ generateDecisionFlow,
321
+ createAgentState,
322
+ applyConsequence,
323
+ applyReward,
324
+ tickAgentStates,
325
+ renderDecisionFlow
326
+ };