agent99 0.0.4 → 0.0.5
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.
- checksums.yaml +4 -4
- data/A2A_SPEC-dev.md +1829 -0
- data/CHANGELOG.md +31 -0
- data/COMMITS.md +196 -0
- data/DOCS.md +96 -0
- data/README.md +200 -78
- data/Rakefile +62 -0
- data/docs/AI/htm.md +215 -0
- data/docs/AI/htm.rb +141 -0
- data/docs/AI/htm_demo.db +0 -0
- data/docs/AI/notes_on_htm_implementation.md +1319 -0
- data/docs/AI/some_code.rb +692 -0
- data/docs/advanced-topics/a2a-protocol.md +13 -0
- data/docs/{control_actions.md → advanced-topics/control-actions.md} +2 -0
- data/docs/advanced-topics/model-context-protocol.md +4 -0
- data/docs/advanced-topics/multi-agent-processing.md +674 -0
- data/docs/agent-development/request-response-handling.md +512 -0
- data/docs/api-reference/agent99-base.md +463 -0
- data/docs/api-reference/message-clients.md +495 -0
- data/docs/api-reference/registry-client.md +470 -0
- data/docs/api-reference/schemas.md +518 -0
- data/docs/assets/css/custom.css +27 -0
- data/docs/assets/images/agent-lifecycle.svg +73 -0
- data/docs/assets/images/agent-registry-process.svg +86 -0
- data/docs/assets/images/agent-registry-processes.svg +114 -0
- data/docs/assets/images/agent-types-overview.svg +51 -0
- data/docs/assets/images/agent99-architecture.svg +85 -0
- data/docs/assets/images/agent99_logo.png +0 -0
- data/docs/assets/images/control-actions-state.svg +83 -0
- data/docs/assets/images/knowledge-graph.svg +77 -0
- data/docs/assets/images/message-processing-flow.svg +148 -0
- data/docs/assets/images/multi-agent-system.svg +66 -0
- data/docs/assets/images/proxy-pattern-sequence.svg +48 -0
- data/docs/assets/images/request-flow.svg +97 -0
- data/docs/assets/images/request-processing-lifecycle.svg +50 -0
- data/docs/assets/images/request-response-sequence.svg +39 -0
- data/docs/{agent_lifecycle.md → core-concepts/agent-lifecycle.md} +2 -0
- data/docs/core-concepts/agent-types.md +255 -0
- data/docs/{architecture.md → core-concepts/architecture.md} +5 -5
- data/docs/{what_is_an_agent.md → core-concepts/what-is-an-agent.md} +1 -1
- data/docs/diagrams/message-flow-sequence.svg +198 -0
- data/docs/diagrams/p2p-network-topology.svg +181 -0
- data/docs/diagrams/smart-transport-routing.svg +165 -0
- data/docs/diagrams/three-layer-architecture.svg +77 -0
- data/docs/diagrams/transport-extension-api.svg +309 -0
- data/docs/diagrams/transport-extension-architecture.svg +234 -0
- data/docs/diagrams/transport-selection-flowchart.svg +264 -0
- data/docs/examples/advanced-examples.md +951 -0
- data/docs/examples/basic-examples.md +268 -0
- data/docs/{agent_registry_processes.md → framework-components/agent-registry.md} +1 -1
- data/docs/{message_processing.md → framework-components/message-processing.md} +3 -1
- data/docs/getting-started/basic-example.md +306 -0
- data/docs/getting-started/installation.md +160 -0
- data/docs/getting-started/overview.md +64 -0
- data/docs/getting-started/quick-start.md +179 -0
- data/docs/index.md +97 -0
- data/examples/DEMO.md +148 -0
- data/examples/README.md +50 -0
- data/examples/bad_agent.rb +32 -0
- data/examples/registry.rb +0 -8
- data/examples/run_demo.rb +433 -0
- data/lib/agent99/amqp_message_client.rb +2 -2
- data/lib/agent99/base.rb +1 -1
- data/lib/agent99/message_processing.rb +6 -12
- data/lib/agent99/registry_client.rb +4 -1
- data/lib/agent99/version.rb +1 -1
- data/lib/agent99.rb +1 -1
- data/mkdocs.yml +195 -0
- data/p2p_plan.md +533 -0
- data/p2p_roadmap.md +299 -0
- data/registry_plan.md +1818 -0
- metadata +89 -32
- data/docs/README.md +0 -57
- data/docs/diagrams/agent_registry_processes.dot +0 -42
- data/docs/diagrams/agent_registry_processes.png +0 -0
- data/docs/diagrams/high_level_architecture.dot +0 -26
- data/docs/diagrams/high_level_architecture.png +0 -0
- data/docs/diagrams/request_flow.dot +0 -42
- data/docs/diagrams/request_flow.png +0 -0
- /data/docs/{advanced_features.md → advanced-topics/advanced-features.md} +0 -0
- /data/docs/{extending_the_framework.md → advanced-topics/extending-the-framework.md} +0 -0
- /data/docs/{custom_agent_implementation.md → agent-development/custom-agent-implementation.md} +0 -0
- /data/docs/{error_handling_and_logging.md → agent-development/error-handling-and-logging.md} +0 -0
- /data/docs/{schema_definition.md → agent-development/schema-definition.md} +0 -0
- /data/docs/{api_reference.md → api-reference/overview.md} +0 -0
- /data/docs/{agent_discovery.md → framework-components/agent-discovery.md} +0 -0
- /data/docs/{messaging_system.md → framework-components/messaging-system.md} +0 -0
- /data/docs/{breaking_change_v0.0.4.md → operations/breaking-changes.md} +0 -0
- /data/docs/{configuration.md → operations/configuration.md} +0 -0
- /data/docs/{preformance_considerations.md → operations/performance-considerations.md} +0 -0
- /data/docs/{security.md → operations/security.md} +0 -0
- /data/docs/{troubleshooting.md → operations/troubleshooting.md} +0 -0
@@ -0,0 +1,86 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 500" style="background: transparent;">
|
2
|
+
<defs>
|
3
|
+
<marker id="arrow-reg" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
|
4
|
+
<path d="M0,0 L10,5 L0,10" fill="none" stroke="#66b3ff" stroke-width="1.5"/>
|
5
|
+
</marker>
|
6
|
+
</defs>
|
7
|
+
|
8
|
+
<!-- Title -->
|
9
|
+
<text x="450" y="30" text-anchor="middle" font-family="monospace" font-size="18" fill="#e0e0e0" font-weight="bold">Central Registry Operations</text>
|
10
|
+
|
11
|
+
<!-- Registration Flow -->
|
12
|
+
<g id="registration">
|
13
|
+
<text x="150" y="70" text-anchor="middle" font-family="monospace" font-size="14" fill="#66ff99" font-weight="bold">1. Registration</text>
|
14
|
+
|
15
|
+
<rect x="50" y="90" width="100" height="40" rx="5" fill="#2a2a3e" stroke="#66ff99" stroke-width="2"/>
|
16
|
+
<text x="100" y="115" text-anchor="middle" font-family="monospace" font-size="12" fill="#e0e0e0">Agent</text>
|
17
|
+
|
18
|
+
<rect x="150" y="90" width="100" height="40" rx="5" fill="#2a2a3e" stroke="#9966ff" stroke-width="2"/>
|
19
|
+
<text x="200" y="115" text-anchor="middle" font-family="monospace" font-size="12" fill="#e0e0e0">Registry</text>
|
20
|
+
|
21
|
+
<path d="M 100 130 L 100 160" stroke="#444" stroke-width="1" stroke-dasharray="3,2"/>
|
22
|
+
<path d="M 200 130 L 200 160" stroke="#444" stroke-width="1" stroke-dasharray="3,2"/>
|
23
|
+
|
24
|
+
<path d="M 100 170 L 190 170" stroke="#66ff99" stroke-width="2" marker-end="url(#arrow-reg)"/>
|
25
|
+
<text x="145" y="165" text-anchor="middle" font-family="monospace" font-size="9" fill="#99ffcc">POST /register</text>
|
26
|
+
<text x="145" y="185" text-anchor="middle" font-family="monospace" font-size="8" fill="#66ff99">{name, capabilities}</text>
|
27
|
+
|
28
|
+
<path d="M 200 210 L 110 210" stroke="#66b3ff" stroke-width="2" marker-end="url(#arrow-reg)"/>
|
29
|
+
<text x="155" y="205" text-anchor="middle" font-family="monospace" font-size="9" fill="#99ccff">agent_id</text>
|
30
|
+
</g>
|
31
|
+
|
32
|
+
<!-- Discovery Flow -->
|
33
|
+
<g id="discovery" transform="translate(300, 0)">
|
34
|
+
<text x="150" y="70" text-anchor="middle" font-family="monospace" font-size="14" fill="#66b3ff" font-weight="bold">2. Discovery</text>
|
35
|
+
|
36
|
+
<rect x="50" y="90" width="100" height="40" rx="5" fill="#2a2a3e" stroke="#66b3ff" stroke-width="2"/>
|
37
|
+
<text x="100" y="115" text-anchor="middle" font-family="monospace" font-size="12" fill="#e0e0e0">Client</text>
|
38
|
+
|
39
|
+
<rect x="150" y="90" width="100" height="40" rx="5" fill="#2a2a3e" stroke="#9966ff" stroke-width="2"/>
|
40
|
+
<text x="200" y="115" text-anchor="middle" font-family="monospace" font-size="12" fill="#e0e0e0">Registry</text>
|
41
|
+
|
42
|
+
<path d="M 100 130 L 100 160" stroke="#444" stroke-width="1" stroke-dasharray="3,2"/>
|
43
|
+
<path d="M 200 130 L 200 160" stroke="#444" stroke-width="1" stroke-dasharray="3,2"/>
|
44
|
+
|
45
|
+
<path d="M 100 170 L 190 170" stroke="#66b3ff" stroke-width="2" marker-end="url(#arrow-reg)"/>
|
46
|
+
<text x="145" y="165" text-anchor="middle" font-family="monospace" font-size="9" fill="#99ccff">GET /discover</text>
|
47
|
+
<text x="145" y="185" text-anchor="middle" font-family="monospace" font-size="8" fill="#66b3ff">?capabilities=weather</text>
|
48
|
+
|
49
|
+
<path d="M 200 210 L 110 210" stroke="#66ff99" stroke-width="2" marker-end="url(#arrow-reg)"/>
|
50
|
+
<text x="155" y="205" text-anchor="middle" font-family="monospace" font-size="9" fill="#99ffcc">[agents]</text>
|
51
|
+
</g>
|
52
|
+
|
53
|
+
<!-- Withdrawal Flow -->
|
54
|
+
<g id="withdrawal" transform="translate(600, 0)">
|
55
|
+
<text x="150" y="70" text-anchor="middle" font-family="monospace" font-size="14" fill="#ff9966" font-weight="bold">3. Withdrawal</text>
|
56
|
+
|
57
|
+
<rect x="50" y="90" width="100" height="40" rx="5" fill="#2a2a3e" stroke="#ff9966" stroke-width="2"/>
|
58
|
+
<text x="100" y="115" text-anchor="middle" font-family="monospace" font-size="12" fill="#e0e0e0">Agent</text>
|
59
|
+
|
60
|
+
<rect x="150" y="90" width="100" height="40" rx="5" fill="#2a2a3e" stroke="#9966ff" stroke-width="2"/>
|
61
|
+
<text x="200" y="115" text-anchor="middle" font-family="monospace" font-size="12" fill="#e0e0e0">Registry</text>
|
62
|
+
|
63
|
+
<path d="M 100 130 L 100 160" stroke="#444" stroke-width="1" stroke-dasharray="3,2"/>
|
64
|
+
<path d="M 200 130 L 200 160" stroke="#444" stroke-width="1" stroke-dasharray="3,2"/>
|
65
|
+
|
66
|
+
<path d="M 100 170 L 190 170" stroke="#ff9966" stroke-width="2" marker-end="url(#arrow-reg)"/>
|
67
|
+
<text x="145" y="165" text-anchor="middle" font-family="monospace" font-size="9" fill="#ffcc99">DELETE /withdraw</text>
|
68
|
+
<text x="145" y="185" text-anchor="middle" font-family="monospace" font-size="8" fill="#ff9966">/{agent_id}</text>
|
69
|
+
|
70
|
+
<path d="M 200 210 L 110 210" stroke="#66ff99" stroke-width="2" marker-end="url(#arrow-reg)"/>
|
71
|
+
<text x="155" y="205" text-anchor="middle" font-family="monospace" font-size="9" fill="#99ffcc">success</text>
|
72
|
+
</g>
|
73
|
+
|
74
|
+
<!-- Data Store -->
|
75
|
+
<rect x="300" y="320" width="300" height="120" rx="10" fill="#1a1a2e" stroke="#9966ff" stroke-width="3"/>
|
76
|
+
<text x="450" y="350" text-anchor="middle" font-family="monospace" font-size="16" fill="#cc99ff" font-weight="bold">Registry Data Store</text>
|
77
|
+
|
78
|
+
<rect x="330" y="370" width="240" height="50" rx="5" fill="#2a2a3e" stroke="#666" stroke-width="1"/>
|
79
|
+
<text x="450" y="390" text-anchor="middle" font-family="monospace" font-size="11" fill="#999">agent_id → {name, capabilities,</text>
|
80
|
+
<text x="450" y="408" text-anchor="middle" font-family="monospace" font-size="11" fill="#999">timestamp, status, metadata}</text>
|
81
|
+
|
82
|
+
<!-- Connections to data store -->
|
83
|
+
<path d="M 200 240 L 400 320" stroke="#9966ff" stroke-width="1" stroke-dasharray="3,2" opacity="0.5"/>
|
84
|
+
<path d="M 500 240 L 450 320" stroke="#9966ff" stroke-width="1" stroke-dasharray="3,2" opacity="0.5"/>
|
85
|
+
<path d="M 800 240 L 500 320" stroke="#9966ff" stroke-width="1" stroke-dasharray="3,2" opacity="0.5"/>
|
86
|
+
</svg>
|
@@ -0,0 +1,114 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 700" style="background: transparent;">
|
2
|
+
<defs>
|
3
|
+
<marker id="arrow-reg-proc" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
|
4
|
+
<path d="M0,0 L10,5 L0,10 L5,5 z" fill="#66b3ff"/>
|
5
|
+
</marker>
|
6
|
+
<linearGradient id="grad-reg" x1="0%" y1="0%" x2="100%" y2="100%">
|
7
|
+
<stop offset="0%" style="stop-color:#2a2a3e;stop-opacity:1" />
|
8
|
+
<stop offset="100%" style="stop-color:#1a1a2e;stop-opacity:1" />
|
9
|
+
</linearGradient>
|
10
|
+
<filter id="shadow">
|
11
|
+
<feGaussianBlur in="SourceAlpha" stdDeviation="2"/>
|
12
|
+
<feOffset dx="1" dy="1" result="offsetblur"/>
|
13
|
+
<feComponentTransfer>
|
14
|
+
<feFuncA type="linear" slope="0.3"/>
|
15
|
+
</feComponentTransfer>
|
16
|
+
<feMerge>
|
17
|
+
<feMergeNode/>
|
18
|
+
<feMergeNode in="SourceGraphic"/>
|
19
|
+
</feMerge>
|
20
|
+
</filter>
|
21
|
+
</defs>
|
22
|
+
|
23
|
+
<!-- Title -->
|
24
|
+
<text x="500" y="30" text-anchor="middle" font-family="monospace" font-size="18" fill="#e0e0e0" font-weight="bold">Agent Registry Processes</text>
|
25
|
+
|
26
|
+
<!-- Main Components -->
|
27
|
+
<rect x="50" y="80" width="120" height="60" rx="8" fill="url(#grad-reg)" stroke="#66b3ff" stroke-width="2" filter="url(#shadow)"/>
|
28
|
+
<text x="110" y="115" text-anchor="middle" font-family="monospace" font-size="14" fill="#99ccff" font-weight="bold">MyAgent</text>
|
29
|
+
|
30
|
+
<rect x="300" y="80" width="140" height="60" rx="8" fill="url(#grad-reg)" stroke="#9966ff" stroke-width="2" filter="url(#shadow)"/>
|
31
|
+
<text x="370" y="115" text-anchor="middle" font-family="monospace" font-size="14" fill="#cc99ff" font-weight="bold">RegistryClient</text>
|
32
|
+
|
33
|
+
<rect x="600" y="80" width="160" height="80" rx="8" fill="url(#grad-reg)" stroke="#ff9966" stroke-width="2" filter="url(#shadow)"/>
|
34
|
+
<text x="680" y="110" text-anchor="middle" font-family="monospace" font-size="14" fill="#ffcc99" font-weight="bold">Central Registry</text>
|
35
|
+
<text x="680" y="130" text-anchor="middle" font-family="monospace" font-size="11" fill="#ff9966">(Sinatra Server)</text>
|
36
|
+
|
37
|
+
<!-- Registration Process -->
|
38
|
+
<g id="registration-process">
|
39
|
+
<rect x="50" y="200" width="900" height="140" rx="10" fill="#2a2a3e" stroke="#66ff99" stroke-width="2" stroke-dasharray="5,3" opacity="0.1"/>
|
40
|
+
<text x="70" y="220" font-family="monospace" font-size="14" fill="#66ff99" font-weight="bold">Registration Process</text>
|
41
|
+
|
42
|
+
<!-- Step 1 -->
|
43
|
+
<path d="M 170 250 L 290 250" stroke="#66ff99" stroke-width="2" marker-end="url(#arrow-reg-proc)"/>
|
44
|
+
<text x="230" y="240" text-anchor="middle" font-family="monospace" font-size="10" fill="#66ff99">1. initialize</text>
|
45
|
+
|
46
|
+
<!-- Step 2 -->
|
47
|
+
<path d="M 440 250 L 590 250" stroke="#66ff99" stroke-width="2" marker-end="url(#arrow-reg-proc)"/>
|
48
|
+
<text x="515" y="240" text-anchor="middle" font-family="monospace" font-size="9" fill="#66ff99">2. POST /register</text>
|
49
|
+
<text x="515" y="255" text-anchor="middle" font-family="monospace" font-size="8" fill="#99ffcc">{name, capabilities}</text>
|
50
|
+
|
51
|
+
<!-- Step 3 -->
|
52
|
+
<path d="M 590 290 L 450 290" stroke="#66ff99" stroke-width="2" marker-end="url(#arrow-reg-proc)"/>
|
53
|
+
<text x="520" y="280" text-anchor="middle" font-family="monospace" font-size="9" fill="#66ff99">3. 201 Created</text>
|
54
|
+
<text x="520" y="305" text-anchor="middle" font-family="monospace" font-size="8" fill="#99ffcc">{uuid}</text>
|
55
|
+
|
56
|
+
<!-- Step 4 -->
|
57
|
+
<path d="M 290 290 L 180 290" stroke="#66ff99" stroke-width="2" marker-end="url(#arrow-reg-proc)"/>
|
58
|
+
<text x="235" y="280" text-anchor="middle" font-family="monospace" font-size="10" fill="#66ff99">4. Return uuid</text>
|
59
|
+
</g>
|
60
|
+
|
61
|
+
<!-- Discovery Process -->
|
62
|
+
<g id="discovery-process">
|
63
|
+
<rect x="50" y="370" width="900" height="140" rx="10" fill="#2a2a3e" stroke="#66b3ff" stroke-width="2" stroke-dasharray="5,3" opacity="0.1"/>
|
64
|
+
<text x="70" y="390" font-family="monospace" font-size="14" fill="#66b3ff" font-weight="bold">Discovery Process</text>
|
65
|
+
|
66
|
+
<!-- Step 5 -->
|
67
|
+
<path d="M 170 420 L 290 420" stroke="#66b3ff" stroke-width="2" marker-end="url(#arrow-reg-proc)"/>
|
68
|
+
<text x="230" y="410" text-anchor="middle" font-family="monospace" font-size="9" fill="#66b3ff">5. discover(capability)</text>
|
69
|
+
|
70
|
+
<!-- Step 6 -->
|
71
|
+
<path d="M 440 420 L 590 420" stroke="#66b3ff" stroke-width="2" marker-end="url(#arrow-reg-proc)"/>
|
72
|
+
<text x="515" y="405" text-anchor="middle" font-family="monospace" font-size="8" fill="#66b3ff">6. GET /discover</text>
|
73
|
+
<text x="515" y="420" text-anchor="middle" font-family="monospace" font-size="8" fill="#99ccff">?capability=...</text>
|
74
|
+
|
75
|
+
<!-- Step 7 -->
|
76
|
+
<path d="M 590 460 L 450 460" stroke="#66b3ff" stroke-width="2" marker-end="url(#arrow-reg-proc)"/>
|
77
|
+
<text x="520" y="445" text-anchor="middle" font-family="monospace" font-size="8" fill="#66b3ff">7. 200 OK</text>
|
78
|
+
<text x="520" y="460" text-anchor="middle" font-family="monospace" font-size="8" fill="#99ccff">[matching agents]</text>
|
79
|
+
|
80
|
+
<!-- Step 8 -->
|
81
|
+
<path d="M 290 460 L 180 460" stroke="#66b3ff" stroke-width="2" marker-end="url(#arrow-reg-proc)"/>
|
82
|
+
<text x="235" y="445" text-anchor="middle" font-family="monospace" font-size="8" fill="#66b3ff">8. Return matching</text>
|
83
|
+
<text x="235" y="460" text-anchor="middle" font-family="monospace" font-size="8" fill="#99ccff">agents</text>
|
84
|
+
</g>
|
85
|
+
|
86
|
+
<!-- Withdrawal Process -->
|
87
|
+
<g id="withdrawal-process">
|
88
|
+
<rect x="50" y="540" width="900" height="140" rx="10" fill="#2a2a3e" stroke="#ff99ff" stroke-width="2" stroke-dasharray="5,3" opacity="0.1"/>
|
89
|
+
<text x="70" y="560" font-family="monospace" font-size="14" fill="#ff99ff" font-weight="bold">Withdrawal Process</text>
|
90
|
+
|
91
|
+
<!-- Step 9 -->
|
92
|
+
<path d="M 170 590 L 290 590" stroke="#ff99ff" stroke-width="2" marker-end="url(#arrow-reg-proc)"/>
|
93
|
+
<text x="230" y="580" text-anchor="middle" font-family="monospace" font-size="9" fill="#ff99ff">9. withdraw(uuid)</text>
|
94
|
+
|
95
|
+
<!-- Step 10 -->
|
96
|
+
<path d="M 440 590 L 590 590" stroke="#ff99ff" stroke-width="2" marker-end="url(#arrow-reg-proc)"/>
|
97
|
+
<text x="515" y="580" text-anchor="middle" font-family="monospace" font-size="8" fill="#ff99ff">10. DELETE</text>
|
98
|
+
<text x="515" y="595" text-anchor="middle" font-family="monospace" font-size="8" fill="#ffccff">/withdraw/:uuid</text>
|
99
|
+
|
100
|
+
<!-- Step 11 -->
|
101
|
+
<path d="M 590 630 L 450 630" stroke="#ff99ff" stroke-width="2" marker-end="url(#arrow-reg-proc)"/>
|
102
|
+
<text x="520" y="620" text-anchor="middle" font-family="monospace" font-size="8" fill="#ff99ff">11. 204 No Content</text>
|
103
|
+
|
104
|
+
<!-- Step 12 -->
|
105
|
+
<path d="M 290 630 L 180 630" stroke="#ff99ff" stroke-width="2" marker-end="url(#arrow-reg-proc)"/>
|
106
|
+
<text x="235" y="620" text-anchor="middle" font-family="monospace" font-size="8" fill="#ff99ff">12. Confirm</text>
|
107
|
+
<text x="235" y="635" text-anchor="middle" font-family="monospace" font-size="8" fill="#ffccff">withdrawal</text>
|
108
|
+
</g>
|
109
|
+
|
110
|
+
<!-- Vertical connecting lines -->
|
111
|
+
<path d="M 110 140 L 110 540" stroke="#666" stroke-width="1" stroke-dasharray="3,2" opacity="0.5"/>
|
112
|
+
<path d="M 370 140 L 370 540" stroke="#666" stroke-width="1" stroke-dasharray="3,2" opacity="0.5"/>
|
113
|
+
<path d="M 680 160 L 680 540" stroke="#666" stroke-width="1" stroke-dasharray="3,2" opacity="0.5"/>
|
114
|
+
</svg>
|
@@ -0,0 +1,51 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 300" style="background: transparent;">
|
2
|
+
<defs>
|
3
|
+
<marker id="arrow" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto" markerUnits="strokeWidth">
|
4
|
+
<path d="M0,0 L10,5 L0,10 L5,5 z" fill="#66b3ff"/>
|
5
|
+
</marker>
|
6
|
+
<filter id="shadow">
|
7
|
+
<feGaussianBlur in="SourceAlpha" stdDeviation="3"/>
|
8
|
+
<feOffset dx="2" dy="2" result="offsetblur"/>
|
9
|
+
<feComponentTransfer>
|
10
|
+
<feFuncA type="linear" slope="0.3"/>
|
11
|
+
</feComponentTransfer>
|
12
|
+
<feMerge>
|
13
|
+
<feMergeNode/>
|
14
|
+
<feMergeNode in="SourceGraphic"/>
|
15
|
+
</feMerge>
|
16
|
+
</filter>
|
17
|
+
</defs>
|
18
|
+
|
19
|
+
<!-- Client Agent -->
|
20
|
+
<rect x="30" y="40" width="140" height="60" rx="8" fill="#2a2a3e" stroke="#66b3ff" stroke-width="2" filter="url(#shadow)"/>
|
21
|
+
<text x="100" y="75" text-anchor="middle" font-family="monospace" font-size="14" fill="#e0e0e0">Client Agent</text>
|
22
|
+
|
23
|
+
<!-- Server Agent -->
|
24
|
+
<rect x="330" y="40" width="140" height="60" rx="8" fill="#2a2a3e" stroke="#66b3ff" stroke-width="2" filter="url(#shadow)"/>
|
25
|
+
<text x="400" y="75" text-anchor="middle" font-family="monospace" font-size="14" fill="#e0e0e0">Server Agent</text>
|
26
|
+
|
27
|
+
<!-- Hybrid Agent -->
|
28
|
+
<rect x="180" y="180" width="140" height="60" rx="8" fill="#2a2a3e" stroke="#ff9966" stroke-width="2" filter="url(#shadow)"/>
|
29
|
+
<text x="250" y="215" text-anchor="middle" font-family="monospace" font-size="14" fill="#e0e0e0">Hybrid Agent</text>
|
30
|
+
|
31
|
+
<!-- Any Agent -->
|
32
|
+
<rect x="480" y="180" width="140" height="60" rx="8" fill="#2a2a3e" stroke="#ff9966" stroke-width="2" filter="url(#shadow)"/>
|
33
|
+
<text x="550" y="215" text-anchor="middle" font-family="monospace" font-size="14" fill="#e0e0e0">Any Agent</text>
|
34
|
+
|
35
|
+
<!-- Arrows with labels -->
|
36
|
+
<!-- Client to Server -->
|
37
|
+
<path d="M 170 70 L 330 70" stroke="#66b3ff" stroke-width="2" marker-end="url(#arrow)"/>
|
38
|
+
<text x="250" y="60" text-anchor="middle" font-family="monospace" font-size="11" fill="#99ccff">sends requests</text>
|
39
|
+
|
40
|
+
<!-- Server to Client -->
|
41
|
+
<path d="M 330 90 L 170 90" stroke="#66b3ff" stroke-width="2" marker-end="url(#arrow)"/>
|
42
|
+
<text x="250" y="105" text-anchor="middle" font-family="monospace" font-size="11" fill="#99ccff">sends responses</text>
|
43
|
+
|
44
|
+
<!-- Hybrid to Any -->
|
45
|
+
<path d="M 320 200 L 480 200" stroke="#ff9966" stroke-width="2" marker-end="url(#arrow)"/>
|
46
|
+
<text x="400" y="190" text-anchor="middle" font-family="monospace" font-size="11" fill="#ffcc99">can send & receive</text>
|
47
|
+
|
48
|
+
<!-- Any to Hybrid -->
|
49
|
+
<path d="M 480 220 L 320 220" stroke="#ff9966" stroke-width="2" marker-end="url(#arrow)"/>
|
50
|
+
<text x="400" y="235" text-anchor="middle" font-family="monospace" font-size="11" fill="#ffcc99">can send & receive</text>
|
51
|
+
</svg>
|
@@ -0,0 +1,85 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 600" style="background: transparent;">
|
2
|
+
<defs>
|
3
|
+
<linearGradient id="grad-arch" x1="0%" y1="0%" x2="100%" y2="100%">
|
4
|
+
<stop offset="0%" style="stop-color:#2a2a3e;stop-opacity:1" />
|
5
|
+
<stop offset="100%" style="stop-color:#1a1a2e;stop-opacity:1" />
|
6
|
+
</linearGradient>
|
7
|
+
<filter id="glow">
|
8
|
+
<feGaussianBlur stdDeviation="3" result="coloredBlur"/>
|
9
|
+
<feMerge>
|
10
|
+
<feMergeNode in="coloredBlur"/>
|
11
|
+
<feMergeNode in="SourceGraphic"/>
|
12
|
+
</feMerge>
|
13
|
+
</filter>
|
14
|
+
<marker id="arrow-arch" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
|
15
|
+
<path d="M0,0 L10,5 L0,10 L5,5 z" fill="#66b3ff"/>
|
16
|
+
</marker>
|
17
|
+
</defs>
|
18
|
+
|
19
|
+
<!-- Title -->
|
20
|
+
<text x="450" y="30" text-anchor="middle" font-family="monospace" font-size="20" fill="#e0e0e0" font-weight="bold">Agent99 Framework Architecture</text>
|
21
|
+
|
22
|
+
<!-- Central Registry -->
|
23
|
+
<rect x="350" y="80" width="200" height="100" rx="10" fill="url(#grad-arch)" stroke="#9966ff" stroke-width="3" filter="url(#glow)"/>
|
24
|
+
<text x="450" y="110" text-anchor="middle" font-family="monospace" font-size="16" fill="#cc99ff" font-weight="bold">Central Registry</text>
|
25
|
+
<text x="450" y="135" text-anchor="middle" font-family="monospace" font-size="11" fill="#b388ff">• Agent Registration</text>
|
26
|
+
<text x="450" y="155" text-anchor="middle" font-family="monospace" font-size="11" fill="#b388ff">• Service Discovery</text>
|
27
|
+
<text x="450" y="175" text-anchor="middle" font-family="monospace" font-size="11" fill="#b388ff">• Capability Tracking</text>
|
28
|
+
|
29
|
+
<!-- Message Broker -->
|
30
|
+
<rect x="350" y="250" width="200" height="100" rx="10" fill="url(#grad-arch)" stroke="#ff9966" stroke-width="3" filter="url(#glow)"/>
|
31
|
+
<text x="450" y="280" text-anchor="middle" font-family="monospace" font-size="16" fill="#ffcc99" font-weight="bold">Message Broker</text>
|
32
|
+
<text x="450" y="305" text-anchor="middle" font-family="monospace" font-size="11" fill="#ffb380">• AMQP/NATS</text>
|
33
|
+
<text x="450" y="325" text-anchor="middle" font-family="monospace" font-size="11" fill="#ffb380">• Request Routing</text>
|
34
|
+
<text x="450" y="345" text-anchor="middle" font-family="monospace" font-size="11" fill="#ffb380">• Response Delivery</text>
|
35
|
+
|
36
|
+
<!-- Server Agent -->
|
37
|
+
<rect x="50" y="420" width="150" height="120" rx="8" fill="#2a2a3e" stroke="#66ff99" stroke-width="2"/>
|
38
|
+
<text x="125" y="450" text-anchor="middle" font-family="monospace" font-size="14" fill="#99ffcc" font-weight="bold">Server Agent</text>
|
39
|
+
<text x="125" y="475" text-anchor="middle" font-family="monospace" font-size="10" fill="#66ff99">• Process Requests</text>
|
40
|
+
<text x="125" y="495" text-anchor="middle" font-family="monospace" font-size="10" fill="#66ff99">• Send Responses</text>
|
41
|
+
<text x="125" y="515" text-anchor="middle" font-family="monospace" font-size="10" fill="#66ff99">• Register Capabilities</text>
|
42
|
+
|
43
|
+
<!-- Client Agent -->
|
44
|
+
<rect x="250" y="420" width="150" height="120" rx="8" fill="#2a2a3e" stroke="#66b3ff" stroke-width="2"/>
|
45
|
+
<text x="325" y="450" text-anchor="middle" font-family="monospace" font-size="14" fill="#99ccff" font-weight="bold">Client Agent</text>
|
46
|
+
<text x="325" y="475" text-anchor="middle" font-family="monospace" font-size="10" fill="#66b3ff">• Send Requests</text>
|
47
|
+
<text x="325" y="495" text-anchor="middle" font-family="monospace" font-size="10" fill="#66b3ff">• Handle Responses</text>
|
48
|
+
<text x="325" y="515" text-anchor="middle" font-family="monospace" font-size="10" fill="#66b3ff">• Discover Services</text>
|
49
|
+
|
50
|
+
<!-- Hybrid Agent -->
|
51
|
+
<rect x="500" y="420" width="150" height="120" rx="8" fill="#2a2a3e" stroke="#ff66ff" stroke-width="2"/>
|
52
|
+
<text x="575" y="450" text-anchor="middle" font-family="monospace" font-size="14" fill="#ff99ff" font-weight="bold">Hybrid Agent</text>
|
53
|
+
<text x="575" y="475" text-anchor="middle" font-family="monospace" font-size="10" fill="#ff66ff">• Proxy Requests</text>
|
54
|
+
<text x="575" y="495" text-anchor="middle" font-family="monospace" font-size="10" fill="#ff66ff">• Cache Responses</text>
|
55
|
+
<text x="575" y="515" text-anchor="middle" font-family="monospace" font-size="10" fill="#ff66ff">• Load Balance</text>
|
56
|
+
|
57
|
+
<!-- External Service -->
|
58
|
+
<rect x="700" y="420" width="150" height="120" rx="8" fill="#2a2a3e" stroke="#ffcc66" stroke-width="2"/>
|
59
|
+
<text x="775" y="450" text-anchor="middle" font-family="monospace" font-size="14" fill="#ffdd99" font-weight="bold">External Service</text>
|
60
|
+
<text x="775" y="475" text-anchor="middle" font-family="monospace" font-size="10" fill="#ffcc66">• REST APIs</text>
|
61
|
+
<text x="775" y="495" text-anchor="middle" font-family="monospace" font-size="10" fill="#ffcc66">• Databases</text>
|
62
|
+
<text x="775" y="515" text-anchor="middle" font-family="monospace" font-size="10" fill="#ffcc66">• Third-party APIs</text>
|
63
|
+
|
64
|
+
<!-- Connections -->
|
65
|
+
<!-- Registry connections -->
|
66
|
+
<path d="M 350 130 L 200 420" stroke="#9966ff" stroke-width="1.5" stroke-dasharray="3,2" opacity="0.7" marker-end="url(#arrow-arch)"/>
|
67
|
+
<path d="M 400 180 L 325 420" stroke="#9966ff" stroke-width="1.5" stroke-dasharray="3,2" opacity="0.7" marker-end="url(#arrow-arch)"/>
|
68
|
+
<path d="M 500 180 L 575 420" stroke="#9966ff" stroke-width="1.5" stroke-dasharray="3,2" opacity="0.7" marker-end="url(#arrow-arch)"/>
|
69
|
+
|
70
|
+
<!-- Broker connections -->
|
71
|
+
<path d="M 350 300 L 200 420" stroke="#ff9966" stroke-width="1.5" opacity="0.7" marker-end="url(#arrow-arch)"/>
|
72
|
+
<path d="M 400 350 L 325 420" stroke="#ff9966" stroke-width="1.5" opacity="0.7" marker-end="url(#arrow-arch)"/>
|
73
|
+
<path d="M 500 350 L 575 420" stroke="#ff9966" stroke-width="1.5" opacity="0.7" marker-end="url(#arrow-arch)"/>
|
74
|
+
|
75
|
+
<!-- Hybrid to External -->
|
76
|
+
<path d="M 650 480 L 700 480" stroke="#ffcc66" stroke-width="2" marker-end="url(#arrow-arch)"/>
|
77
|
+
|
78
|
+
<!-- Registry to Broker -->
|
79
|
+
<path d="M 450 180 L 450 250" stroke="#ccccff" stroke-width="2" stroke-dasharray="5,3" marker-end="url(#arrow-arch)"/>
|
80
|
+
|
81
|
+
<!-- Labels -->
|
82
|
+
<text x="280" y="250" font-family="monospace" font-size="9" fill="#9966ff">Register</text>
|
83
|
+
<text x="280" y="380" font-family="monospace" font-size="9" fill="#ff9966">Messaging</text>
|
84
|
+
<text x="675" y="475" font-family="monospace" font-size="9" fill="#ffcc66">API</text>
|
85
|
+
</svg>
|
Binary file
|
@@ -0,0 +1,83 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 500" style="background: transparent;">
|
2
|
+
<defs>
|
3
|
+
<marker id="arrow-ctrl" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
|
4
|
+
<path d="M0,0 L10,5 L0,10 L5,5 z" fill="#66b3ff"/>
|
5
|
+
</marker>
|
6
|
+
<filter id="glow">
|
7
|
+
<feGaussianBlur stdDeviation="2" result="coloredBlur"/>
|
8
|
+
<feMerge>
|
9
|
+
<feMergeNode in="coloredBlur"/>
|
10
|
+
<feMergeNode in="SourceGraphic"/>
|
11
|
+
</feMerge>
|
12
|
+
</filter>
|
13
|
+
</defs>
|
14
|
+
|
15
|
+
<!-- Title -->
|
16
|
+
<text x="400" y="30" text-anchor="middle" font-family="monospace" font-size="18" fill="#e0e0e0" font-weight="bold">Agent Control State Machine</text>
|
17
|
+
|
18
|
+
<!-- States -->
|
19
|
+
<!-- Running -->
|
20
|
+
<rect x="300" y="80" width="200" height="80" rx="10" fill="#2a2a3e" stroke="#66ff99" stroke-width="3" filter="url(#glow)"/>
|
21
|
+
<text x="400" y="110" text-anchor="middle" font-family="monospace" font-size="16" fill="#99ffcc" font-weight="bold">RUNNING</text>
|
22
|
+
<text x="400" y="135" text-anchor="middle" font-family="monospace" font-size="11" fill="#66ff99">• Processing messages</text>
|
23
|
+
<text x="400" y="150" text-anchor="middle" font-family="monospace" font-size="11" fill="#66ff99">• Active state</text>
|
24
|
+
|
25
|
+
<!-- Paused -->
|
26
|
+
<rect x="50" y="250" width="200" height="80" rx="10" fill="#2a2a3e" stroke="#ffcc66" stroke-width="3" filter="url(#glow)"/>
|
27
|
+
<text x="150" y="280" text-anchor="middle" font-family="monospace" font-size="16" fill="#ffdd99" font-weight="bold">PAUSED</text>
|
28
|
+
<text x="150" y="305" text-anchor="middle" font-family="monospace" font-size="11" fill="#ffcc66">• Messages queued</text>
|
29
|
+
<text x="150" y="320" text-anchor="middle" font-family="monospace" font-size="11" fill="#ffcc66">• Suspended state</text>
|
30
|
+
|
31
|
+
<!-- Config Update -->
|
32
|
+
<rect x="550" y="250" width="200" height="80" rx="10" fill="#2a2a3e" stroke="#ff99ff" stroke-width="3" filter="url(#glow)"/>
|
33
|
+
<text x="650" y="280" text-anchor="middle" font-family="monospace" font-size="16" fill="#ffccff" font-weight="bold">CONFIG UPDATE</text>
|
34
|
+
<text x="650" y="305" text-anchor="middle" font-family="monospace" font-size="11" fill="#ff99ff">• Apply new settings</text>
|
35
|
+
<text x="650" y="320" text-anchor="middle" font-family="monospace" font-size="11" fill="#ff99ff">• Transient state</text>
|
36
|
+
|
37
|
+
<!-- Shutdown -->
|
38
|
+
<rect x="300" y="400" width="200" height="80" rx="10" fill="#2a2a3e" stroke="#ff6666" stroke-width="3" filter="url(#glow)"/>
|
39
|
+
<text x="400" y="430" text-anchor="middle" font-family="monospace" font-size="16" fill="#ff9999" font-weight="bold">SHUTDOWN</text>
|
40
|
+
<text x="400" y="455" text-anchor="middle" font-family="monospace" font-size="11" fill="#ff6666">• Cleanup resources</text>
|
41
|
+
<text x="400" y="470" text-anchor="middle" font-family="monospace" font-size="11" fill="#ff6666">• Terminal state</text>
|
42
|
+
|
43
|
+
<!-- Transitions -->
|
44
|
+
<!-- Running to Paused -->
|
45
|
+
<path d="M 300 120 L 250 250" stroke="#ffcc66" stroke-width="2" marker-end="url(#arrow-ctrl)"/>
|
46
|
+
<text x="240" y="180" text-anchor="middle" font-family="monospace" font-size="11" fill="#ffcc66">pause()</text>
|
47
|
+
|
48
|
+
<!-- Paused to Running -->
|
49
|
+
<path d="M 250 290 L 300 160" stroke="#66ff99" stroke-width="2" marker-end="url(#arrow-ctrl)"/>
|
50
|
+
<text x="280" y="230" text-anchor="middle" font-family="monospace" font-size="11" fill="#66ff99">resume()</text>
|
51
|
+
|
52
|
+
<!-- Running to Config -->
|
53
|
+
<path d="M 500 120 L 550 250" stroke="#ff99ff" stroke-width="2" marker-end="url(#arrow-ctrl)"/>
|
54
|
+
<text x="540" y="180" text-anchor="middle" font-family="monospace" font-size="11" fill="#ff99ff">update_config()</text>
|
55
|
+
|
56
|
+
<!-- Config to Running -->
|
57
|
+
<path d="M 550 290 L 500 160" stroke="#66ff99" stroke-width="2" marker-end="url(#arrow-ctrl)"/>
|
58
|
+
<text x="520" y="230" text-anchor="middle" font-family="monospace" font-size="11" fill="#66ff99">apply()</text>
|
59
|
+
|
60
|
+
<!-- Running to Shutdown -->
|
61
|
+
<path d="M 400 160 L 400 400" stroke="#ff6666" stroke-width="2" marker-end="url(#arrow-ctrl)"/>
|
62
|
+
<text x="430" y="280" font-family="monospace" font-size="11" fill="#ff6666">shutdown()</text>
|
63
|
+
|
64
|
+
<!-- Paused to Shutdown -->
|
65
|
+
<path d="M 150 330 L 300 400" stroke="#ff6666" stroke-width="2" marker-end="url(#arrow-ctrl)"/>
|
66
|
+
<text x="210" y="370" font-family="monospace" font-size="11" fill="#ff6666">shutdown()</text>
|
67
|
+
|
68
|
+
<!-- Config to Shutdown -->
|
69
|
+
<path d="M 650 330 L 500 400" stroke="#ff6666" stroke-width="2" marker-end="url(#arrow-ctrl)"/>
|
70
|
+
<text x="590" y="370" font-family="monospace" font-size="11" fill="#ff6666">shutdown()</text>
|
71
|
+
|
72
|
+
<!-- Status check (self loop) -->
|
73
|
+
<path d="M 400 80 Q 400 40 400 80" stroke="#66b3ff" stroke-width="1.5" marker-end="url(#arrow-ctrl)" fill="none"/>
|
74
|
+
<text x="400" y="55" text-anchor="middle" font-family="monospace" font-size="10" fill="#99ccff">status()</text>
|
75
|
+
|
76
|
+
<!-- Legend -->
|
77
|
+
<rect x="620" y="60" width="150" height="100" rx="5" fill="#1a1a2e" stroke="#666" stroke-width="1" opacity="0.8"/>
|
78
|
+
<text x="695" y="80" text-anchor="middle" font-family="monospace" font-size="11" fill="#999" font-weight="bold">Control Actions</text>
|
79
|
+
<text x="630" y="100" font-family="monospace" font-size="9" fill="#ffcc66">• pause</text>
|
80
|
+
<text x="630" y="115" font-family="monospace" font-size="9" fill="#66ff99">• resume</text>
|
81
|
+
<text x="630" y="130" font-family="monospace" font-size="9" fill="#ff99ff">• update_config</text>
|
82
|
+
<text x="630" y="145" font-family="monospace" font-size="9" fill="#ff6666">• shutdown</text>
|
83
|
+
</svg>
|
@@ -0,0 +1,77 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 400" style="background: transparent;">
|
2
|
+
<defs>
|
3
|
+
<marker id="arrow-kg" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
|
4
|
+
<path d="M0,0 L10,5 L0,10 L5,5 z" fill="#66b3ff"/>
|
5
|
+
</marker>
|
6
|
+
<radialGradient id="node-grad" cx="50%" cy="50%" r="50%">
|
7
|
+
<stop offset="0%" style="stop-color:#3a3a5e;stop-opacity:1" />
|
8
|
+
<stop offset="100%" style="stop-color:#2a2a3e;stop-opacity:1" />
|
9
|
+
</radialGradient>
|
10
|
+
<filter id="glow">
|
11
|
+
<feGaussianBlur stdDeviation="2" result="coloredBlur"/>
|
12
|
+
<feMerge>
|
13
|
+
<feMergeNode in="coloredBlur"/>
|
14
|
+
<feMergeNode in="SourceGraphic"/>
|
15
|
+
</feMerge>
|
16
|
+
</filter>
|
17
|
+
</defs>
|
18
|
+
|
19
|
+
<!-- Title -->
|
20
|
+
<text x="300" y="30" text-anchor="middle" font-family="monospace" font-size="18" fill="#e0e0e0" font-weight="bold">Knowledge Graph Example</text>
|
21
|
+
|
22
|
+
<!-- Science Node -->
|
23
|
+
<circle cx="150" cy="120" r="40" fill="url(#node-grad)" stroke="#66ff99" stroke-width="3" filter="url(#glow)"/>
|
24
|
+
<text x="150" y="125" text-anchor="middle" font-family="monospace" font-size="12" fill="#99ffcc" font-weight="bold">Science</text>
|
25
|
+
|
26
|
+
<!-- Physics Node -->
|
27
|
+
<circle cx="350" cy="120" r="40" fill="url(#node-grad)" stroke="#66b3ff" stroke-width="3" filter="url(#glow)"/>
|
28
|
+
<text x="350" y="125" text-anchor="middle" font-family="monospace" font-size="12" fill="#99ccff" font-weight="bold">Physics</text>
|
29
|
+
|
30
|
+
<!-- Quantum Mechanics Node -->
|
31
|
+
<circle cx="500" cy="200" r="50" fill="url(#node-grad)" stroke="#ff9966" stroke-width="3" filter="url(#glow)"/>
|
32
|
+
<text x="500" y="195" text-anchor="middle" font-family="monospace" font-size="11" fill="#ffcc99" font-weight="bold">Quantum</text>
|
33
|
+
<text x="500" y="210" text-anchor="middle" font-family="monospace" font-size="11" fill="#ffcc99" font-weight="bold">Mechanics</text>
|
34
|
+
|
35
|
+
<!-- Mathematics Node -->
|
36
|
+
<circle cx="150" cy="280" r="40" fill="url(#node-grad)" stroke="#ff66ff" stroke-width="3" filter="url(#glow)"/>
|
37
|
+
<text x="150" y="285" text-anchor="middle" font-family="monospace" font-size="11" fill="#ff99ff" font-weight="bold">Mathematics</text>
|
38
|
+
|
39
|
+
<!-- Computer Science Node -->
|
40
|
+
<circle cx="350" cy="280" r="45" fill="url(#node-grad)" stroke="#ffcc66" stroke-width="3" filter="url(#glow)"/>
|
41
|
+
<text x="350" y="275" text-anchor="middle" font-family="monospace" font-size="10" fill="#ffdd99" font-weight="bold">Computer</text>
|
42
|
+
<text x="350" y="290" text-anchor="middle" font-family="monospace" font-size="10" fill="#ffdd99" font-weight="bold">Science</text>
|
43
|
+
|
44
|
+
<!-- Edges -->
|
45
|
+
<!-- Science -> Physics -->
|
46
|
+
<path d="M 190 120 L 310 120" stroke="#66b3ff" stroke-width="2" marker-end="url(#arrow-kg)" filter="url(#glow)"/>
|
47
|
+
<text x="250" y="115" text-anchor="middle" font-family="monospace" font-size="9" fill="#99ccff">contains</text>
|
48
|
+
|
49
|
+
<!-- Physics -> Quantum Mechanics -->
|
50
|
+
<path d="M 380 140 L 470 180" stroke="#66b3ff" stroke-width="2" marker-end="url(#arrow-kg)" filter="url(#glow)"/>
|
51
|
+
<text x="430" y="155" text-anchor="middle" font-family="monospace" font-size="9" fill="#99ccff">includes</text>
|
52
|
+
|
53
|
+
<!-- Science -> Mathematics -->
|
54
|
+
<path d="M 150 160 L 150 240" stroke="#66b3ff" stroke-width="2" marker-end="url(#arrow-kg)" filter="url(#glow)"/>
|
55
|
+
<text x="170" y="200" font-family="monospace" font-size="9" fill="#99ccff">uses</text>
|
56
|
+
|
57
|
+
<!-- Science -> Computer Science -->
|
58
|
+
<path d="M 180 140 L 320 260" stroke="#66b3ff" stroke-width="2" marker-end="url(#arrow-kg)" filter="url(#glow)"/>
|
59
|
+
<text x="250" y="200" text-anchor="middle" font-family="monospace" font-size="9" fill="#99ccff">enabled by</text>
|
60
|
+
|
61
|
+
<!-- Mathematics -> Computer Science -->
|
62
|
+
<path d="M 190 280 L 305 280" stroke="#ff66ff" stroke-width="2" marker-end="url(#arrow-kg)" filter="url(#glow)"/>
|
63
|
+
<text x="247" y="270" text-anchor="middle" font-family="monospace" font-size="9" fill="#ff99ff">foundations</text>
|
64
|
+
|
65
|
+
<!-- Legend -->
|
66
|
+
<rect x="50" y="340" width="200" height="50" rx="5" fill="#1a1a2e" stroke="#666" stroke-width="1" opacity="0.8"/>
|
67
|
+
<text x="150" y="360" text-anchor="middle" font-family="monospace" font-size="11" fill="#ccc" font-weight="bold">Ruby Graph Libraries</text>
|
68
|
+
<text x="60" y="375" font-family="monospace" font-size="9" fill="#99ffcc">• GraphViz (ruby-graphviz)</text>
|
69
|
+
<text x="60" y="385" font-family="monospace" font-size="9" fill="#99ffcc">• RGL (Ruby Graph Library)</text>
|
70
|
+
|
71
|
+
<!-- Example code snippet -->
|
72
|
+
<rect x="300" y="320" width="280" height="70" rx="5" fill="#1a1a2e" stroke="#666" stroke-width="1" opacity="0.8"/>
|
73
|
+
<text x="440" y="340" text-anchor="middle" font-family="monospace" font-size="10" fill="#ccc" font-weight="bold">Example Usage</text>
|
74
|
+
<text x="310" y="355" font-family="monospace" font-size="8" fill="#66ff99">graph.add_nodes("Science")</text>
|
75
|
+
<text x="310" y="365" font-family="monospace" font-size="8" fill="#66ff99">graph.add_nodes("Physics")</text>
|
76
|
+
<text x="310" y="375" font-family="monospace" font-size="8" fill="#66b3ff">graph.add_edges(node1, node2)</text>
|
77
|
+
</svg>
|