@neuroverseos/governance 0.3.1 → 0.3.4

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 (133) 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-ZHPMX5AZ.js +342 -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-7P3S7MAY.js +1090 -0
  46. package/dist/chunk-A5W4GNQO.js +130 -0
  47. package/dist/chunk-A7GKPPU7.js +226 -0
  48. package/dist/chunk-AKW5YVCE.js +96 -0
  49. package/dist/chunk-B6OXJLJ5.js +622 -0
  50. package/dist/chunk-BNKJPUPQ.js +113 -0
  51. package/dist/chunk-BQZMOEML.js +43 -0
  52. package/dist/chunk-CNSO6XW5.js +207 -0
  53. package/dist/chunk-CTZHONLA.js +135 -0
  54. package/dist/chunk-D2UCV5AK.js +326 -0
  55. package/dist/chunk-EMQDLDAF.js +458 -0
  56. package/dist/chunk-F66BVUYB.js +340 -0
  57. package/dist/chunk-FMSTRBBS.js +17 -0
  58. package/dist/chunk-G7DJ6VOD.js +101 -0
  59. package/dist/chunk-I3RRAYK2.js +11 -0
  60. package/dist/chunk-INWQHLPS.js +47 -0
  61. package/dist/chunk-IS4WUH6Y.js +363 -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-QLPTHTVB.js +253 -0
  66. package/dist/chunk-QWGCMQQD.js +16 -0
  67. package/dist/chunk-QXBFT7NI.js +201 -0
  68. package/dist/chunk-TG6SEF24.js +246 -0
  69. package/dist/chunk-U6U7EJZL.js +177 -0
  70. package/dist/chunk-VXHSMA3I.js +166 -0
  71. package/dist/chunk-W7LLXRGY.js +830 -0
  72. package/dist/chunk-YEKMVDWK.js +624 -0
  73. package/dist/chunk-ZJTDUCC2.js +194 -0
  74. package/dist/chunk-ZWI3NIXK.js +314 -0
  75. package/dist/cli/neuroverse.cjs +14379 -0
  76. package/dist/cli/neuroverse.d.cts +1 -0
  77. package/dist/cli/neuroverse.d.ts +1 -0
  78. package/dist/cli/neuroverse.js +227 -0
  79. package/dist/cli/plan.cjs +2439 -0
  80. package/dist/cli/plan.d.cts +20 -0
  81. package/dist/cli/plan.d.ts +20 -0
  82. package/dist/cli/plan.js +353 -0
  83. package/dist/cli/run.cjs +2001 -0
  84. package/dist/cli/run.d.cts +20 -0
  85. package/dist/cli/run.d.ts +20 -0
  86. package/dist/cli/run.js +143 -0
  87. package/dist/configure-ai-5MP5DWTT.js +134 -0
  88. package/dist/decision-flow-M63D47LO.js +61 -0
  89. package/dist/demo-G43RLCPK.js +469 -0
  90. package/dist/derive-LMDUTXDD.js +154 -0
  91. package/dist/doctor-6BC6X2VO.js +173 -0
  92. package/dist/equity-penalties-SG5IZQ7I.js +244 -0
  93. package/dist/explain-RHBU2GBR.js +51 -0
  94. package/dist/guard-AEEJNWLD.js +126 -0
  95. package/dist/guard-contract-B7lplwm9.d.cts +837 -0
  96. package/dist/guard-contract-B7lplwm9.d.ts +837 -0
  97. package/dist/guard-engine-PNR6MHCM.js +10 -0
  98. package/dist/impact-3XVDSCBU.js +59 -0
  99. package/dist/improve-TQP4ECSY.js +66 -0
  100. package/dist/index.cjs +7738 -0
  101. package/dist/index.d.cts +2350 -0
  102. package/dist/index.d.ts +2350 -0
  103. package/dist/index.js +479 -0
  104. package/dist/infer-world-IFXCACJ5.js +543 -0
  105. package/dist/init-FYPV4SST.js +144 -0
  106. package/dist/init-world-TI7ARHBT.js +223 -0
  107. package/dist/mcp-server-5Y3ZM7TV.js +13 -0
  108. package/dist/model-adapter-VXEKB4LS.js +11 -0
  109. package/dist/playground-VZBNPPBO.js +560 -0
  110. package/dist/redteam-MZPZD3EF.js +357 -0
  111. package/dist/session-JYOARW54.js +15 -0
  112. package/dist/shared-7RLUHNMU.js +16 -0
  113. package/dist/shared-C_zpdvBm.d.cts +60 -0
  114. package/dist/shared-Cf7yxx4-.d.ts +60 -0
  115. package/dist/simulate-LJXYBC6M.js +83 -0
  116. package/dist/test-BOOR4A5F.js +217 -0
  117. package/dist/trace-PKV4KX56.js +166 -0
  118. package/dist/validate-RALX7CZS.js +81 -0
  119. package/dist/validate-engine-7ZXFVGF2.js +7 -0
  120. package/dist/viz/assets/index-B8SaeJZZ.js +23 -0
  121. package/dist/viz/index.html +23 -0
  122. package/dist/world-BIP4GZBZ.js +376 -0
  123. package/dist/world-loader-Y6HMQH2D.js +13 -0
  124. package/dist/worlds/autoresearch.nv-world.md +230 -0
  125. package/dist/worlds/coding-agent.nv-world.md +211 -0
  126. package/dist/worlds/derivation-world.nv-world.md +278 -0
  127. package/dist/worlds/research-agent.nv-world.md +169 -0
  128. package/dist/worlds/social-media.nv-world.md +198 -0
  129. package/dist/worlds/trading-agent.nv-world.md +218 -0
  130. package/examples/social-media-sim/bridge.py +209 -0
  131. package/examples/social-media-sim/simulation.py +927 -0
  132. package/package.json +16 -3
  133. package/simulate.html +4 -336
@@ -0,0 +1,166 @@
1
+ import {
2
+ createProvider
3
+ } from "./chunk-INWQHLPS.js";
4
+ import {
5
+ evaluateGuard
6
+ } from "./chunk-W7LLXRGY.js";
7
+
8
+ // src/engine/intent-classifier.ts
9
+ function buildSystemPrompt(knownIntents) {
10
+ let prompt = `You are an intent classifier for an AI governance system. Your job is to analyze structured content fields and produce a clean, semantic intent label.
11
+
12
+ CRITICAL RULES:
13
+ 1. Distinguish WHO is performing the action. If the AI agent says "I am escalating your request", that is the AI being polite \u2014 NOT the customer demanding escalation.
14
+ 2. Focus on the CUSTOMER'S actual intent, not the AI's response language.
15
+ 3. Return a short, snake_case intent label (e.g. "shipping_inquiry", "complaint_escalation", "password_reset").
16
+ 4. Assess the actor: who initiated this action? The customer, the AI agent, or the system?
17
+
18
+ You must respond with ONLY valid JSON in this exact format:
19
+ {"intent": "<label>", "confidence": <0-1>, "actor": "<customer|ai_agent|system|unknown>", "reasoning": "<one sentence>"}`;
20
+ if (knownIntents && knownIntents.length > 0) {
21
+ prompt += `
22
+
23
+ Preferred intent labels (use these when applicable, but you may create new ones if none fit):
24
+ ${knownIntents.map((i) => `- ${i}`).join("\n")}`;
25
+ }
26
+ return prompt;
27
+ }
28
+ function buildUserPrompt(fields) {
29
+ const parts = [];
30
+ if (fields.customer_input) {
31
+ parts.push(`CUSTOMER INPUT:
32
+ ${fields.customer_input}`);
33
+ }
34
+ if (fields.draft_reply) {
35
+ parts.push(`AI DRAFT REPLY:
36
+ ${fields.draft_reply}`);
37
+ }
38
+ if (fields.tool) {
39
+ parts.push(`TOOL: ${fields.tool}`);
40
+ }
41
+ if (fields.context) {
42
+ parts.push(`CONTEXT: ${fields.context}`);
43
+ }
44
+ if (fields.raw && parts.length === 0) {
45
+ parts.push(`RAW TEXT:
46
+ ${fields.raw}`);
47
+ }
48
+ return parts.join("\n\n");
49
+ }
50
+ async function classifyIntentWithAI(fields, options) {
51
+ const provider = createProvider(options.ai);
52
+ const systemPrompt = buildSystemPrompt(options.knownIntents);
53
+ const userPrompt = buildUserPrompt(fields);
54
+ const response = await provider.complete(systemPrompt, userPrompt);
55
+ const jsonMatch = response.match(/\{[\s\S]*\}/);
56
+ if (!jsonMatch) {
57
+ throw new Error("Intent classifier returned non-JSON response");
58
+ }
59
+ const parsed = JSON.parse(jsonMatch[0]);
60
+ if (!parsed.intent || typeof parsed.intent !== "string") {
61
+ throw new Error("Intent classifier returned invalid intent label");
62
+ }
63
+ return {
64
+ intent: parsed.intent,
65
+ confidence: typeof parsed.confidence === "number" ? parsed.confidence : 0.5,
66
+ actor: ["customer", "ai_agent", "system", "unknown"].includes(
67
+ parsed.actor
68
+ ) ? parsed.actor : "unknown",
69
+ reasoning: parsed.reasoning ?? ""
70
+ };
71
+ }
72
+ var OUTPUT_CONTENT_FIELDS = /* @__PURE__ */ new Set([
73
+ "draft_reply",
74
+ "content",
75
+ "body",
76
+ "message",
77
+ "text",
78
+ "reply",
79
+ "response",
80
+ "output",
81
+ "html",
82
+ "template"
83
+ ]);
84
+ function extractContentFields(intent, args) {
85
+ if (!args) {
86
+ return { raw: intent };
87
+ }
88
+ const fields = {};
89
+ let hasStructuredContent = false;
90
+ for (const [key, value] of Object.entries(args)) {
91
+ if (typeof value !== "string") continue;
92
+ const lowerKey = key.toLowerCase();
93
+ if (OUTPUT_CONTENT_FIELDS.has(lowerKey)) {
94
+ fields.draft_reply = fields.draft_reply ? `${fields.draft_reply}
95
+
96
+ ${value}` : value;
97
+ hasStructuredContent = true;
98
+ }
99
+ }
100
+ if (hasStructuredContent) {
101
+ fields.customer_input = intent;
102
+ } else {
103
+ fields.raw = intent;
104
+ }
105
+ return fields;
106
+ }
107
+
108
+ // src/engine/ai-guard.ts
109
+ async function evaluateGuardWithAI(event, world, options = {}) {
110
+ if (!options.ai) {
111
+ const verdict = evaluateGuard(event, world, options);
112
+ verdict.intent_source = "raw";
113
+ return verdict;
114
+ }
115
+ const fallbackOnError = options.fallbackOnError ?? true;
116
+ const originalIntent = event.intent;
117
+ const knownIntents = options.knownIntents ?? extractKnownIntents(world);
118
+ const contentFields = options.contentFields ?? extractContentFields(event.intent, event.args);
119
+ try {
120
+ const classification = await classifyIntentWithAI(contentFields, {
121
+ ai: options.ai,
122
+ knownIntents
123
+ });
124
+ const classifiedEvent = {
125
+ ...event,
126
+ intent: classification.intent
127
+ };
128
+ const verdict = evaluateGuard(classifiedEvent, world, options);
129
+ verdict.intent_source = "ai";
130
+ verdict.classification = classification;
131
+ verdict.originalIntent = originalIntent;
132
+ return verdict;
133
+ } catch (err) {
134
+ if (fallbackOnError) {
135
+ const verdict = evaluateGuard(event, world, options);
136
+ verdict.intent_source = "fallback";
137
+ verdict.originalIntent = originalIntent;
138
+ return verdict;
139
+ }
140
+ throw err;
141
+ }
142
+ }
143
+ function extractKnownIntents(world) {
144
+ const vocab = world.guards?.intent_vocabulary;
145
+ if (!vocab) return [];
146
+ return Object.keys(vocab);
147
+ }
148
+
149
+ // src/contracts/guard-contract.ts
150
+ var GUARD_EXIT_CODES = {
151
+ ALLOW: 0,
152
+ BLOCK: 1,
153
+ PAUSE: 2,
154
+ ERROR: 3,
155
+ MODIFY: 4,
156
+ PENALIZE: 5,
157
+ REWARD: 6,
158
+ NEUTRAL: 7
159
+ };
160
+
161
+ export {
162
+ classifyIntentWithAI,
163
+ extractContentFields,
164
+ evaluateGuardWithAI,
165
+ GUARD_EXIT_CODES
166
+ };