@minded-ai/mindedjs 3.0.4-beta.3 → 3.0.6-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +6 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/validateFlow.d.ts +47 -0
- package/dist/cli/validateFlow.d.ts.map +1 -0
- package/dist/cli/validateFlow.js +454 -0
- package/dist/cli/validateFlow.js.map +1 -0
- package/dist/playbooks/playbooks.d.ts +2 -1
- package/dist/playbooks/playbooks.d.ts.map +1 -1
- package/dist/playbooks/playbooks.js +8 -2
- package/dist/playbooks/playbooks.js.map +1 -1
- package/docs/.gitbook/assets/agent-lifecycle-security.svg +4 -0
- package/docs/.gitbook/assets/credentials-lifecycle.svg +4 -0
- package/docs/.gitbook/assets/rpa-execution-flow.svg +4 -0
- package/docs/.gitbook/assets/system-overview.svg +4 -0
- package/docs/.gitbook/assets/tenant-isolation-overview.svg +4 -0
- package/docs/SUMMARY.md +1 -0
- package/docs/platform/security-architecture.md +343 -0
- package/package.json +2 -1
- package/src/cli/index.ts +5 -1
- package/src/cli/validateFlow.ts +502 -0
- package/src/playbooks/playbooks.ts +10 -3
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!-- Do not edit this file with editors other than draw.io -->
|
|
3
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
4
|
+
<svg xmlns="http://www.w3.org/2000/svg" style="background: transparent; background-color: transparent; color-scheme: light dark;" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="641px" height="681px" viewBox="0 0 641 681" content="<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36" version="29.2.7"> <diagram name="Architecture Overview" id="lUb2Yy0VcGrDcHUANlMM"> <mxGraphModel dx="576" dy="683" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="qiHXacqECXXAYTJ9b62k-243" parent="1" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;align=center;spacingTop=10;fillColor=#f9f9f9;strokeColor=#333333;fontSize=16;labelBackgroundColor=none;" value="&lt;b&gt;MINDED INFRASTRUCTURE&lt;/b&gt;" vertex="1"> <mxGeometry height="680" width="640" x="1080" y="830" as="geometry" /> </mxCell> <mxCell id="qiHXacqECXXAYTJ9b62k-244" parent="1" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;align=left;spacingLeft=10;spacingTop=10;fillColor=#ffffff;strokeColor=#666666;fontSize=16;labelBackgroundColor=none;" value="&lt;b&gt;TENANT A (Customer A)&lt;/b&gt;" vertex="1"> <mxGeometry height="240" width="580" x="1110" y="880" as="geometry" /> </mxCell> <mxCell id="qiHXacqECXXAYTJ9b62k-245" parent="1" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=10;spacingTop=10;fillColor=#f5f5f5;fontSize=16;labelBackgroundColor=none;" value="&lt;b&gt;Namespace&lt;/b&gt;&lt;br&gt;tenant-a&lt;br&gt;&lt;br&gt;&lt;b&gt;Agent Pods:&lt;/b&gt;&lt;br&gt;- agent-a-1&lt;br&gt;- agent-a-2&lt;br&gt;&lt;br&gt;&lt;b&gt;Network:&lt;/b&gt;&lt;br&gt;- policy-a" vertex="1"> <mxGeometry height="190" width="220" x="1130" y="920" as="geometry" /> </mxCell> <mxCell id="qiHXacqECXXAYTJ9b62k-246" parent="1" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=10;spacingTop=10;fillColor=#f5f5f5;fontSize=16;labelBackgroundColor=none;" value="&lt;b&gt;Encryption&lt;/b&gt;&lt;br&gt;Key: key_a&lt;br&gt;&lt;br&gt;&lt;b&gt;Credentials DB:&lt;/b&gt;&lt;br&gt;- encrypted with key_a&lt;br&gt;- isolated schema&lt;br&gt;&lt;br&gt;&lt;b&gt;IP Whitelist:&lt;/b&gt;&lt;br&gt;- customer-a-ips.com" vertex="1"> <mxGeometry height="190" width="260" x="1410" y="920" as="geometry" /> </mxCell> <mxCell id="qiHXacqECXXAYTJ9b62k-247" connectable="0" parent="1" style="group;fontSize=16;labelBackgroundColor=none;" value="" vertex="1"> <mxGeometry height="40" width="580" x="1110" y="1140" as="geometry" /> </mxCell> <mxCell id="qiHXacqECXXAYTJ9b62k-248" edge="1" parent="qiHXacqECXXAYTJ9b62k-247" style="endArrow=none;html=1;strokeWidth=2;fontSize=16;labelBackgroundColor=none;" value=""> <mxGeometry height="50" relative="1" width="50" as="geometry"> <mxPoint y="10" as="sourcePoint" /> <mxPoint x="580" y="10" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="qiHXacqECXXAYTJ9b62k-249" parent="qiHXacqECXXAYTJ9b62k-247" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#666666;fontSize=16;labelBackgroundColor=none;" value="&lt;b&gt;ISOLATION BOUNDARY&lt;/b&gt;" vertex="1"> <mxGeometry height="30" width="580" y="5" as="geometry" /> </mxCell> <mxCell id="qiHXacqECXXAYTJ9b62k-250" edge="1" parent="qiHXacqECXXAYTJ9b62k-247" style="endArrow=none;html=1;strokeWidth=2;fontSize=16;labelBackgroundColor=none;" value=""> <mxGeometry height="50" relative="1" width="50" as="geometry"> <mxPoint y="30" as="sourcePoint" /> <mxPoint x="580" y="30" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="qiHXacqECXXAYTJ9b62k-251" parent="1" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;align=left;spacingLeft=10;spacingTop=10;fillColor=#ffffff;strokeColor=#666666;fontSize=16;labelBackgroundColor=none;" value="&lt;b&gt;TENANT B (Customer B)&lt;/b&gt;" vertex="1"> <mxGeometry height="240" width="580" x="1110" y="1200" as="geometry" /> </mxCell> <mxCell id="qiHXacqECXXAYTJ9b62k-252" parent="1" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=10;spacingTop=10;fillColor=#f5f5f5;fontSize=16;labelBackgroundColor=none;" value="&lt;b&gt;Namespace&lt;/b&gt;&lt;br&gt;tenant-b&lt;br&gt;&lt;br&gt;&lt;b&gt;Agent Pods:&lt;/b&gt;&lt;br&gt;- agent-b-1&lt;br&gt;- agent-b-2&lt;br&gt;&lt;br&gt;&lt;b&gt;Network:&lt;/b&gt;&lt;br&gt;- policy-b" vertex="1"> <mxGeometry height="190" width="220" x="1130" y="1240" as="geometry" /> </mxCell> <mxCell id="qiHXacqECXXAYTJ9b62k-253" parent="1" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=10;spacingTop=10;fillColor=#f5f5f5;fontSize=16;labelBackgroundColor=none;" value="&lt;b&gt;Encryption&lt;/b&gt;&lt;br&gt;Key: key_b&lt;br&gt;&lt;br&gt;&lt;b&gt;Credentials DB:&lt;/b&gt;&lt;br&gt;- encrypted with key_b&lt;br&gt;- isolated schema&lt;br&gt;&lt;br&gt;&lt;b&gt;IP Whitelist:&lt;/b&gt;&lt;br&gt;- customer-b-ips.net" vertex="1"> <mxGeometry height="190" width="260" x="1410" y="1240" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> </mxfile> "><defs/><g><g data-cell-id="0"><g data-cell-id="1"><g data-cell-id="qiHXacqECXXAYTJ9b62k-243"><g transform="translate(0.5,0.5)"><rect x="0" y="0" width="640" height="680" fill="#f9f9f9" stroke="#333333" pointer-events="all" style="fill: light-dark(rgb(249, 249, 249), rgb(23, 23, 23)); stroke: light-dark(rgb(51, 51, 51), rgb(193, 193, 193));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 638px; height: 1px; padding-top: 17px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #000000; "><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>MINDED INFRASTRUCTURE</b></div></div></div></foreignObject><text x="320" y="33" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="16px" text-anchor="middle">MINDED INFRASTRUCTURE</text></switch></g></g></g><g data-cell-id="qiHXacqECXXAYTJ9b62k-244"><g transform="translate(0.5,0.5)"><rect x="30" y="50" width="580" height="240" fill="#ffffff" stroke="#666666" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18)); stroke: light-dark(rgb(102, 102, 102), rgb(149, 149, 149));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 568px; height: 1px; padding-top: 67px; margin-left: 42px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #000000; "><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>TENANT A (Customer A)</b></div></div></div></foreignObject><text x="42" y="83" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="16px">TENANT A (Customer A)</text></switch></g></g></g><g data-cell-id="qiHXacqECXXAYTJ9b62k-245"><g transform="translate(0.5,0.5)"><rect x="50" y="90" width="220" height="190" fill="#f5f5f5" stroke="#000000" pointer-events="all" style="fill: light-dark(rgb(245, 245, 245), rgb(26, 26, 26)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 208px; height: 1px; padding-top: 190px; margin-left: 62px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #000000; "><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>Namespace</b><br />tenant-a<br /><br /><b>Agent Pods:</b><br />- agent-a-1<br />- agent-a-2<br /><br /><b>Network:</b><br />- policy-a</div></div></div></foreignObject><text x="62" y="195" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="16px">Namespace...</text></switch></g></g></g><g data-cell-id="qiHXacqECXXAYTJ9b62k-246"><g transform="translate(0.5,0.5)"><rect x="330" y="90" width="260" height="190" fill="#f5f5f5" stroke="#000000" pointer-events="all" style="fill: light-dark(rgb(245, 245, 245), rgb(26, 26, 26)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 248px; height: 1px; padding-top: 190px; margin-left: 342px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #000000; "><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>Encryption</b><br />Key: key_a<br /><br /><b>Credentials DB:</b><br />- encrypted with key_a<br />- isolated schema<br /><br /><b>IP Whitelist:</b><br />- customer-a-ips.com</div></div></div></foreignObject><text x="342" y="195" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="16px">Encryption...</text></switch></g></g></g><g data-cell-id="qiHXacqECXXAYTJ9b62k-247"><g transform="translate(0.5,0.5)"/><g data-cell-id="qiHXacqECXXAYTJ9b62k-248"><g><path d="M 30 320 L 610 320" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g><g data-cell-id="qiHXacqECXXAYTJ9b62k-249"><g transform="translate(0.5,0.5)"><rect x="30" y="315" width="580" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 578px; height: 1px; padding-top: 330px; margin-left: 31px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; color: #666666; "><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: light-dark(#666666, #959595); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>ISOLATION BOUNDARY</b></div></div></div></foreignObject><text x="320" y="335" fill="#666666" font-family="Helvetica" font-size="16px" text-anchor="middle">ISOLATION BOUNDARY</text></switch></g></g></g><g data-cell-id="qiHXacqECXXAYTJ9b62k-250"><g><path d="M 30 340 L 610 340" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke" style="stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g></g></g><g data-cell-id="qiHXacqECXXAYTJ9b62k-251"><g transform="translate(0.5,0.5)"><rect x="30" y="370" width="580" height="240" fill="#ffffff" stroke="#666666" pointer-events="all" style="fill: light-dark(rgb(255, 255, 255), rgb(18, 18, 18)); stroke: light-dark(rgb(102, 102, 102), rgb(149, 149, 149));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 568px; height: 1px; padding-top: 387px; margin-left: 42px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #000000; "><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>TENANT B (Customer B)</b></div></div></div></foreignObject><text x="42" y="403" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="16px">TENANT B (Customer B)</text></switch></g></g></g><g data-cell-id="qiHXacqECXXAYTJ9b62k-252"><g transform="translate(0.5,0.5)"><rect x="50" y="410" width="220" height="190" fill="#f5f5f5" stroke="#000000" pointer-events="all" style="fill: light-dark(rgb(245, 245, 245), rgb(26, 26, 26)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 208px; height: 1px; padding-top: 510px; margin-left: 62px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #000000; "><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>Namespace</b><br />tenant-b<br /><br /><b>Agent Pods:</b><br />- agent-b-1<br />- agent-b-2<br /><br /><b>Network:</b><br />- policy-b</div></div></div></foreignObject><text x="62" y="515" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="16px">Namespace...</text></switch></g></g></g><g data-cell-id="qiHXacqECXXAYTJ9b62k-253"><g transform="translate(0.5,0.5)"><rect x="330" y="410" width="260" height="190" fill="#f5f5f5" stroke="#000000" pointer-events="all" style="fill: light-dark(rgb(245, 245, 245), rgb(26, 26, 26)); stroke: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"/></g><g><g><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 248px; height: 1px; padding-top: 510px; margin-left: 342px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; color: #000000; "><div style="display: inline-block; font-size: 16px; font-family: Helvetica; color: light-dark(#000000, #ffffff); line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><b>Encryption</b><br />Key: key_b<br /><br /><b>Credentials DB:</b><br />- encrypted with key_b<br />- isolated schema<br /><br /><b>IP Whitelist:</b><br />- customer-b-ips.net</div></div></div></foreignObject><text x="342" y="515" fill="light-dark(#000000, #ffffff)" font-family="Helvetica" font-size="16px">Encryption...</text></switch></g></g></g></g></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
|
package/docs/SUMMARY.md
CHANGED
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
# **Minded Agent Security Architecture**
|
|
2
|
+
|
|
3
|
+
Minded AI agents automate complex workflows in customer environments while maintaining enterprise-grade security. This architecture enables powerful automation capabilities against your sensitive systems and data, with multiple layers of protection to ensure your infrastructure remains secure.
|
|
4
|
+
|
|
5
|
+
## **Security Approach**
|
|
6
|
+
|
|
7
|
+
Minded is designed to provide maximum automation power while maintaining zero-trust security. You can automate mission-critical workflows with confidence, while Minded ensures every action is verified, logged, and restricted through multiple security layers.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 🏗️ System Overview
|
|
12
|
+
|
|
13
|
+
<figure><img src="../.gitbook/assets/system-overview.svg" alt="Minded System Overview Diagram"></figure>
|
|
14
|
+
|
|
15
|
+
**Key Principles**:
|
|
16
|
+
|
|
17
|
+
- **Zero Trust**: Every action verified, logged, and restricted
|
|
18
|
+
- **Least Privilege**: Agents only access what they need, when they need it
|
|
19
|
+
- **Defense in Depth**: Multiple security layers protect against breaches
|
|
20
|
+
- **Tenant Isolation**: Complete separation between customer environments
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 🛡️ Security Layers
|
|
25
|
+
|
|
26
|
+
### Layer 1: Network Isolation
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
**VPC Configuration:**
|
|
31
|
+
|
|
32
|
+
- All inbound traffic: BLOCKED
|
|
33
|
+
- Outbound traffic: WHITELISTED IPs only
|
|
34
|
+
- Internal pod-to-pod: ISOLATED by tenant + namespace
|
|
35
|
+
|
|
36
|
+
**IP Whitelisting:**
|
|
37
|
+
|
|
38
|
+
- Customer provides allowed IP ranges
|
|
39
|
+
- Minded agent can ONLY connect to those IPs
|
|
40
|
+
- Dynamic IP updates via Minded platform
|
|
41
|
+
|
|
42
|
+
**Traffic Monitoring:**
|
|
43
|
+
|
|
44
|
+
- All network requests logged
|
|
45
|
+
- Alerts on unauthorized connection attempts
|
|
46
|
+
- Automatic blocking of suspicious patterns
|
|
47
|
+
|
|
48
|
+
### Layer 2: Authentication & Authorization
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
**Storage:**
|
|
53
|
+
|
|
54
|
+
- Credentials encrypted at rest (AES-256-GCM)
|
|
55
|
+
- Keys stored in AWS Key Management Service (KMS)
|
|
56
|
+
|
|
57
|
+
**Runtime:**
|
|
58
|
+
|
|
59
|
+
- Credentials decrypted only during execution
|
|
60
|
+
- Never stored in memory after use
|
|
61
|
+
- Automatic expiration/rotation
|
|
62
|
+
|
|
63
|
+
**Access Control:**
|
|
64
|
+
|
|
65
|
+
- Agent-specific credentials (not shared)
|
|
66
|
+
- MFA support for sensitive operations
|
|
67
|
+
- Role-based access control (RBAC)
|
|
68
|
+
- Immediate credential revocation capability
|
|
69
|
+
|
|
70
|
+
### Layer 3: RPA Security Controls
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
**URL Restrictions:**
|
|
75
|
+
|
|
76
|
+
- Whitelist of allowed URLs/domains
|
|
77
|
+
- Regex pattern matching for dynamic URLs
|
|
78
|
+
- Block attempts to modify URL parameters
|
|
79
|
+
- Prevent URL redirection attacks
|
|
80
|
+
|
|
81
|
+
**Action Limitations:**
|
|
82
|
+
|
|
83
|
+
- Predefined set of allowed actions
|
|
84
|
+
- Parameter validation against schemas
|
|
85
|
+
- Read-only mode for sensitive operations
|
|
86
|
+
- Block file upload/download outside scope
|
|
87
|
+
|
|
88
|
+
**Parameter Integrity:**
|
|
89
|
+
|
|
90
|
+
- Hash-based verification of parameters
|
|
91
|
+
- Signature validation for critical actions
|
|
92
|
+
- Block modification of flow-defined values
|
|
93
|
+
- Audit trail for all parameter changes
|
|
94
|
+
|
|
95
|
+
### Layer 4: Runtime Security
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
**Pod/Container Security:**
|
|
100
|
+
|
|
101
|
+
- Non-root user execution
|
|
102
|
+
- Read-only file system (except temp dirs)
|
|
103
|
+
- Resource limits (CPU, memory, network)
|
|
104
|
+
- Security context constraints
|
|
105
|
+
- Regular image scanning for vulnerabilities
|
|
106
|
+
|
|
107
|
+
**Process Monitoring:**
|
|
108
|
+
|
|
109
|
+
- Antivirus/antimalware scanning
|
|
110
|
+
- Behavioral analysis for anomalies
|
|
111
|
+
|
|
112
|
+
**Lifecycle Management:**
|
|
113
|
+
|
|
114
|
+
- Auto-shutdown when idle (configurable timeout)
|
|
115
|
+
- No persistent state on disk
|
|
116
|
+
- Fresh instance per execution (optional)
|
|
117
|
+
|
|
118
|
+
**Data Protection:**
|
|
119
|
+
|
|
120
|
+
- Encryption in transit (TLS 1.2)
|
|
121
|
+
- Encryption at rest (all storage volumes)
|
|
122
|
+
- Secure deletion of temporary data
|
|
123
|
+
|
|
124
|
+
### Layer 5: Monitoring & Audit
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
**Audit Logging:**
|
|
129
|
+
|
|
130
|
+
- Every action logged with timestamp
|
|
131
|
+
- User identity, agent ID, action type
|
|
132
|
+
- Input/output parameters (sanitized)
|
|
133
|
+
- Log retention policy (90 days default)
|
|
134
|
+
|
|
135
|
+
**Real-time Monitoring:**
|
|
136
|
+
|
|
137
|
+
- Dashboard for active agent sessions
|
|
138
|
+
- Resource utilization tracking
|
|
139
|
+
- Error rate and failure monitoring
|
|
140
|
+
- Network traffic analysis
|
|
141
|
+
|
|
142
|
+
**Alerting:**
|
|
143
|
+
|
|
144
|
+
- Unauthorized access attempts
|
|
145
|
+
- Unusual job triggers
|
|
146
|
+
- Credential access outside business hours
|
|
147
|
+
- Failed authentication attempts
|
|
148
|
+
- Suspicious parameter modifications
|
|
149
|
+
- Policy violations
|
|
150
|
+
|
|
151
|
+
**Integration:**
|
|
152
|
+
|
|
153
|
+
- Email/Slack alerts
|
|
154
|
+
- Customer SOC integration
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 1️⃣ Credential Lifecycle Flow
|
|
159
|
+
|
|
160
|
+
**How credentials are managed from creation to revocation**
|
|
161
|
+
|
|
162
|
+
<figure><img src="../.gitbook/assets/credentials-lifecycle.svg" alt="Minded Credentials Lifecycle Flow Diagram"></figure>
|
|
163
|
+
|
|
164
|
+
**Key Security Features**:
|
|
165
|
+
|
|
166
|
+
- Credentials never stored in plaintext
|
|
167
|
+
- Encryption keys managed separately from encrypted data
|
|
168
|
+
- Credentials only decrypted at runtime, never persisted
|
|
169
|
+
- Immediate revocation capability
|
|
170
|
+
- Complete audit trail
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## 2️⃣ RPA Execution Flow Security Controls
|
|
175
|
+
|
|
176
|
+
**How we run security checks for RPA action executions**
|
|
177
|
+
|
|
178
|
+
<figure><img src="../.gitbook/assets/rpa-execution-flow.svg" alt="Minded RPA Execution Flow Security Diagram"></figure>
|
|
179
|
+
|
|
180
|
+
**Default checklist for action verification**:
|
|
181
|
+
|
|
182
|
+
1. Is the URL on your allowed list?
|
|
183
|
+
2. Is this action permitted for this agent?
|
|
184
|
+
3. Are the parameters valid and properly formatted?
|
|
185
|
+
4. Have the parameters been tampered with?
|
|
186
|
+
5. Does the agent have permission to do this?
|
|
187
|
+
6. Log the request before running
|
|
188
|
+
7. Double-check the URL before making the request
|
|
189
|
+
8. Clean up any unsafe input
|
|
190
|
+
9. Block any attempts to inject code
|
|
191
|
+
10. Remove sensitive data from the response
|
|
192
|
+
11. Log the result after completion
|
|
193
|
+
|
|
194
|
+
**What happens when a check doesn't pass**:
|
|
195
|
+
|
|
196
|
+
1. The action is blocked immediately
|
|
197
|
+
2. All the details are logged
|
|
198
|
+
3. Extreme violations may suspend the agent until further investigation
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## 3️⃣ Agent Lifecycle Security
|
|
203
|
+
|
|
204
|
+
**From deployment to shutdown - security at every stage**
|
|
205
|
+
|
|
206
|
+
<figure><img src="../.gitbook/assets/agent-lifecycle-security.svg" alt="Minded Agent Lifecycle Security Diagram"></figure>
|
|
207
|
+
|
|
208
|
+
### Idle Timeout Configuration
|
|
209
|
+
|
|
210
|
+
Default: 30 minutes of inactivity
|
|
211
|
+
Options:
|
|
212
|
+
|
|
213
|
+
- Always-on (for critical agents)
|
|
214
|
+
- Custom timeout (5-120 minutes)
|
|
215
|
+
- Immediate shutdown after task
|
|
216
|
+
|
|
217
|
+
Benefits:
|
|
218
|
+
|
|
219
|
+
- Reduce attack surface
|
|
220
|
+
- Lower resource costs
|
|
221
|
+
- Fresh state for each execution
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## 4️⃣ Tenant Isolation Architecture
|
|
226
|
+
|
|
227
|
+
**Ensuring complete separation between customer environments**
|
|
228
|
+
|
|
229
|
+
<figure><img src="../.gitbook/assets/tenant-isolation-overview.svg" alt="Minded Tenant Isolation Architecture Diagram"></figure>
|
|
230
|
+
|
|
231
|
+
### Isolation Guarantees
|
|
232
|
+
|
|
233
|
+
**Network:**
|
|
234
|
+
|
|
235
|
+
- Separate K8s namespaces
|
|
236
|
+
- Network policies prevent cross-tenant traffic
|
|
237
|
+
- Separate VPCs (enterprise tier)
|
|
238
|
+
|
|
239
|
+
**Data:**
|
|
240
|
+
|
|
241
|
+
- Separate encryption keys per tenant
|
|
242
|
+
- Logical database isolation (schemas/tables)
|
|
243
|
+
- Physical database isolation (enterprise tier)
|
|
244
|
+
|
|
245
|
+
**Compute:**
|
|
246
|
+
|
|
247
|
+
- No pod sharing between tenants
|
|
248
|
+
- Resource quotas per tenant
|
|
249
|
+
- Dedicated nodes (enterprise tier)
|
|
250
|
+
|
|
251
|
+
**Credentials:**
|
|
252
|
+
|
|
253
|
+
- Cannot access other tenant's credentials
|
|
254
|
+
- Cannot list other tenant's agents
|
|
255
|
+
- Cannot execute actions on other tenant's behalf
|
|
256
|
+
|
|
257
|
+
**Audit Logs:**
|
|
258
|
+
|
|
259
|
+
- Separate log streams per tenant
|
|
260
|
+
- Cannot view other tenant's logs
|
|
261
|
+
- Cannot tamper with other tenant's logs
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## 5️⃣ Infrastructure Security
|
|
266
|
+
|
|
267
|
+
**How we protect the systems running your agents**
|
|
268
|
+
|
|
269
|
+
Think of each agent as running in its own secure, locked room. Here's what that means in practice:
|
|
270
|
+
|
|
271
|
+
- **No elevated privileges** - Agents run as standard users, never as administrators. They can't make system-level changes.
|
|
272
|
+
- **Nothing can be modified** - The agent's environment is read-only. Even if something tried to tamper with it, the changes wouldn't stick.
|
|
273
|
+
- **Complete isolation** - Agents can't see or touch the underlying infrastructure. They operate in their own sealed environment.
|
|
274
|
+
- **Guardrails on resources** - Each agent has strict limits on computing power and memory. They can't consume more than allocated.
|
|
275
|
+
- **Regularly checked for vulnerabilities** - We continuously scan our systems for security issues and patch them promptly.
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## 6️⃣ Agent Behavior Verification & Action Limits
|
|
280
|
+
|
|
281
|
+
**Ensuring agents only perform intended actions within defined boundaries**
|
|
282
|
+
|
|
283
|
+
### Webhook Security
|
|
284
|
+
|
|
285
|
+
Every webhook that triggers an agent is verified before processing:
|
|
286
|
+
|
|
287
|
+
- **Signed payloads** - All webhooks include an HMAC-SHA256 signature that we validate
|
|
288
|
+
- **Timestamp checks** - We reject webhooks older than 5 minutes to prevent replay attacks
|
|
289
|
+
- **Source validation** - Webhooks must come from whitelisted IPs with valid API keys
|
|
290
|
+
|
|
291
|
+
### What Gets Logged
|
|
292
|
+
|
|
293
|
+
Every agent action creates a complete audit trail:
|
|
294
|
+
|
|
295
|
+
- Unique ID for tracking the specific invocation
|
|
296
|
+
- Start and end timestamps
|
|
297
|
+
- How it was triggered (webhook, schedule, or manual)
|
|
298
|
+
- Input parameters (with sensitive data removed)
|
|
299
|
+
- All actions performed and their results
|
|
300
|
+
- Any resources that were created or modified
|
|
301
|
+
|
|
302
|
+
### Reconciliation
|
|
303
|
+
|
|
304
|
+
We continuously verify that agents only do what they're supposed to:
|
|
305
|
+
|
|
306
|
+
- Compare expected actions against actual actions
|
|
307
|
+
- Alert immediately if there are discrepancies
|
|
308
|
+
- Generate daily reconciliation reports for review
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## See Also
|
|
313
|
+
|
|
314
|
+
For more information on related security and operational topics, see:
|
|
315
|
+
|
|
316
|
+
- **[Secrets Management](secrets.md)** - Detailed guide on storing and managing credentials securely
|
|
317
|
+
- **[Operator Documentation](operator.md)** - Operational procedures and best practices for running agents
|
|
318
|
+
- **[On-Premise Deployment](on-prem.md)** - Security considerations for self-hosted Minded installations
|
|
319
|
+
- **[Browser Task (RPA)](browserTask.md)** - Technical details on RPA capabilities and configurations
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
## Security FAQs
|
|
324
|
+
|
|
325
|
+
### Q: What happens if an agent tries to access systems outside my whitelist?
|
|
326
|
+
|
|
327
|
+
The request is blocked immediately at multiple layers. First, our security gateway checks the URL against your whitelist. Even if that somehow fails, network policies at the infrastructure level block the connection. All attempts are logged, alerts are triggered, and repeated violations will suspend the agent automatically.
|
|
328
|
+
|
|
329
|
+
### Q: How do you protect my credentials?
|
|
330
|
+
|
|
331
|
+
Credentials are encrypted using AES-256 before storage, with encryption keys managed separately in AWS KMS. They're only decrypted in memory during execution and cleared immediately after use. Even if someone gained access to our database, they'd only find encrypted data that's useless without the keys.
|
|
332
|
+
|
|
333
|
+
### Q: Can one customer's agent access another customer's data?
|
|
334
|
+
|
|
335
|
+
No. Each customer operates in a completely isolated environment with separate namespaces, encryption keys, and network policies. There's no pathway for one tenant's agent to reach another tenant's resources - the infrastructure physically prevents it.
|
|
336
|
+
|
|
337
|
+
### Q: How do you prevent malicious code from running?
|
|
338
|
+
|
|
339
|
+
All action parameters are validated against schemas and checked for tampering using signatures. Inputs are sanitized to remove dangerous content. We scan all container images for vulnerabilities before deployment and monitor runtime behavior for anomalies.
|
|
340
|
+
|
|
341
|
+
### Q: What visibility do I have into agent activity?
|
|
342
|
+
|
|
343
|
+
Every action is logged with full details including timestamps, parameters, and results. You can access audit logs, set up alerts, and integrate with your existing monitoring tools. You'll know exactly what your agents are doing at all times.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@minded-ai/mindedjs",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.6-beta.1",
|
|
4
4
|
"description": "MindedJS is a TypeScript library for building agents.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -57,6 +57,7 @@
|
|
|
57
57
|
"@types/js-yaml": "^4.0.9",
|
|
58
58
|
"axios": "^1.9.0",
|
|
59
59
|
"chrome-remote-interface": "^0.33.3",
|
|
60
|
+
"cron-parser": "^5.4.0",
|
|
60
61
|
"ejs": "^3.1.10",
|
|
61
62
|
"flatted": "^3.3.3",
|
|
62
63
|
"js-yaml": "^4.1.0",
|
package/src/cli/index.ts
CHANGED
|
@@ -5,6 +5,7 @@ import * as path from 'path';
|
|
|
5
5
|
import { logger } from '../utils/logger';
|
|
6
6
|
import { execSync } from 'child_process';
|
|
7
7
|
import { setupLocalOperator, isLocalOperatorSetup } from './localOperatorSetup';
|
|
8
|
+
import { runValidateCommand } from './validateFlow';
|
|
8
9
|
|
|
9
10
|
const ENV_FILE = '.env';
|
|
10
11
|
|
|
@@ -174,9 +175,12 @@ async function main() {
|
|
|
174
175
|
console.info('✗ Local operator is not set up. Run: npx minded setup-local-operator');
|
|
175
176
|
process.exit(1);
|
|
176
177
|
}
|
|
178
|
+
} else if (command === 'validate') {
|
|
179
|
+
// Command to validate a flow YAML file
|
|
180
|
+
runValidateCommand();
|
|
177
181
|
} else {
|
|
178
182
|
logger.error({
|
|
179
|
-
msg: 'Unknown command. Available commands: token, setup-local-operator, check-local-operator, generate-lambda-ts-handler',
|
|
183
|
+
msg: 'Unknown command. Available commands: token, setup-local-operator, check-local-operator, generate-lambda-ts-handler, validate',
|
|
180
184
|
});
|
|
181
185
|
process.exit(1);
|
|
182
186
|
}
|