htm 0.0.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.
Files changed (155) hide show
  1. checksums.yaml +7 -0
  2. data/.architecture/decisions/adrs/001-use-postgresql-timescaledb-storage.md +227 -0
  3. data/.architecture/decisions/adrs/002-two-tier-memory-architecture.md +322 -0
  4. data/.architecture/decisions/adrs/003-ollama-default-embedding-provider.md +339 -0
  5. data/.architecture/decisions/adrs/004-multi-robot-shared-memory-hive-mind.md +374 -0
  6. data/.architecture/decisions/adrs/005-rag-based-retrieval-with-hybrid-search.md +443 -0
  7. data/.architecture/decisions/adrs/006-context-assembly-strategies.md +444 -0
  8. data/.architecture/decisions/adrs/007-working-memory-eviction-strategy.md +461 -0
  9. data/.architecture/decisions/adrs/008-robot-identification-system.md +550 -0
  10. data/.architecture/decisions/adrs/009-never-forget-explicit-deletion-only.md +570 -0
  11. data/.architecture/decisions/adrs/010-redis-working-memory-rejected.md +323 -0
  12. data/.architecture/decisions/adrs/011-database-side-embedding-generation-with-pgai.md +585 -0
  13. data/.architecture/decisions/adrs/012-llm-driven-ontology-topic-extraction.md +583 -0
  14. data/.architecture/decisions/adrs/013-activerecord-orm-and-many-to-many-tagging.md +299 -0
  15. data/.architecture/decisions/adrs/014-client-side-embedding-generation-workflow.md +569 -0
  16. data/.architecture/decisions/adrs/015-hierarchical-tag-ontology-and-llm-extraction.md +701 -0
  17. data/.architecture/decisions/adrs/016-async-embedding-and-tag-generation.md +694 -0
  18. data/.architecture/members.yml +144 -0
  19. data/.architecture/reviews/2025-10-29-llm-configuration-and-async-processing-review.md +1137 -0
  20. data/.architecture/reviews/initial-system-analysis.md +330 -0
  21. data/.envrc +32 -0
  22. data/.irbrc +145 -0
  23. data/CHANGELOG.md +150 -0
  24. data/COMMITS.md +196 -0
  25. data/LICENSE +21 -0
  26. data/README.md +1347 -0
  27. data/Rakefile +51 -0
  28. data/SETUP.md +268 -0
  29. data/config/database.yml +67 -0
  30. data/db/migrate/20250101000001_enable_extensions.rb +14 -0
  31. data/db/migrate/20250101000002_create_robots.rb +14 -0
  32. data/db/migrate/20250101000003_create_nodes.rb +42 -0
  33. data/db/migrate/20250101000005_create_tags.rb +38 -0
  34. data/db/migrate/20250101000007_add_node_vector_indexes.rb +30 -0
  35. data/db/schema.sql +473 -0
  36. data/db/seed_data/README.md +100 -0
  37. data/db/seed_data/presidents.md +136 -0
  38. data/db/seed_data/states.md +151 -0
  39. data/db/seeds.rb +208 -0
  40. data/dbdoc/README.md +173 -0
  41. data/dbdoc/public.node_stats.md +48 -0
  42. data/dbdoc/public.node_stats.svg +41 -0
  43. data/dbdoc/public.node_tags.md +40 -0
  44. data/dbdoc/public.node_tags.svg +112 -0
  45. data/dbdoc/public.nodes.md +54 -0
  46. data/dbdoc/public.nodes.svg +118 -0
  47. data/dbdoc/public.nodes_tags.md +39 -0
  48. data/dbdoc/public.nodes_tags.svg +112 -0
  49. data/dbdoc/public.ontology_structure.md +48 -0
  50. data/dbdoc/public.ontology_structure.svg +38 -0
  51. data/dbdoc/public.operations_log.md +42 -0
  52. data/dbdoc/public.operations_log.svg +130 -0
  53. data/dbdoc/public.relationships.md +39 -0
  54. data/dbdoc/public.relationships.svg +41 -0
  55. data/dbdoc/public.robot_activity.md +46 -0
  56. data/dbdoc/public.robot_activity.svg +35 -0
  57. data/dbdoc/public.robots.md +35 -0
  58. data/dbdoc/public.robots.svg +90 -0
  59. data/dbdoc/public.schema_migrations.md +29 -0
  60. data/dbdoc/public.schema_migrations.svg +26 -0
  61. data/dbdoc/public.tags.md +35 -0
  62. data/dbdoc/public.tags.svg +60 -0
  63. data/dbdoc/public.topic_relationships.md +45 -0
  64. data/dbdoc/public.topic_relationships.svg +32 -0
  65. data/dbdoc/schema.json +1437 -0
  66. data/dbdoc/schema.svg +154 -0
  67. data/docs/api/database.md +806 -0
  68. data/docs/api/embedding-service.md +532 -0
  69. data/docs/api/htm.md +797 -0
  70. data/docs/api/index.md +259 -0
  71. data/docs/api/long-term-memory.md +1096 -0
  72. data/docs/api/working-memory.md +665 -0
  73. data/docs/architecture/adrs/001-postgresql-timescaledb.md +314 -0
  74. data/docs/architecture/adrs/002-two-tier-memory.md +411 -0
  75. data/docs/architecture/adrs/003-ollama-embeddings.md +421 -0
  76. data/docs/architecture/adrs/004-hive-mind.md +437 -0
  77. data/docs/architecture/adrs/005-rag-retrieval.md +531 -0
  78. data/docs/architecture/adrs/006-context-assembly.md +496 -0
  79. data/docs/architecture/adrs/007-eviction-strategy.md +645 -0
  80. data/docs/architecture/adrs/008-robot-identification.md +625 -0
  81. data/docs/architecture/adrs/009-never-forget.md +648 -0
  82. data/docs/architecture/adrs/010-redis-working-memory-rejected.md +323 -0
  83. data/docs/architecture/adrs/011-pgai-integration.md +494 -0
  84. data/docs/architecture/adrs/index.md +215 -0
  85. data/docs/architecture/hive-mind.md +736 -0
  86. data/docs/architecture/index.md +351 -0
  87. data/docs/architecture/overview.md +538 -0
  88. data/docs/architecture/two-tier-memory.md +873 -0
  89. data/docs/assets/css/custom.css +83 -0
  90. data/docs/assets/images/htm-core-components.svg +63 -0
  91. data/docs/assets/images/htm-database-schema.svg +93 -0
  92. data/docs/assets/images/htm-hive-mind-architecture.svg +125 -0
  93. data/docs/assets/images/htm-importance-scoring-framework.svg +83 -0
  94. data/docs/assets/images/htm-layered-architecture.svg +71 -0
  95. data/docs/assets/images/htm-long-term-memory-architecture.svg +115 -0
  96. data/docs/assets/images/htm-working-memory-architecture.svg +120 -0
  97. data/docs/assets/images/htm.jpg +0 -0
  98. data/docs/assets/images/htm_demo.gif +0 -0
  99. data/docs/assets/js/mathjax.js +18 -0
  100. data/docs/assets/videos/htm_video.mp4 +0 -0
  101. data/docs/database_rake_tasks.md +322 -0
  102. data/docs/development/contributing.md +787 -0
  103. data/docs/development/index.md +336 -0
  104. data/docs/development/schema.md +596 -0
  105. data/docs/development/setup.md +719 -0
  106. data/docs/development/testing.md +819 -0
  107. data/docs/guides/adding-memories.md +824 -0
  108. data/docs/guides/context-assembly.md +1009 -0
  109. data/docs/guides/getting-started.md +577 -0
  110. data/docs/guides/index.md +118 -0
  111. data/docs/guides/long-term-memory.md +941 -0
  112. data/docs/guides/multi-robot.md +866 -0
  113. data/docs/guides/recalling-memories.md +927 -0
  114. data/docs/guides/search-strategies.md +953 -0
  115. data/docs/guides/working-memory.md +717 -0
  116. data/docs/index.md +214 -0
  117. data/docs/installation.md +477 -0
  118. data/docs/multi_framework_support.md +519 -0
  119. data/docs/quick-start.md +655 -0
  120. data/docs/setup_local_database.md +302 -0
  121. data/docs/using_rake_tasks_in_your_app.md +383 -0
  122. data/examples/basic_usage.rb +93 -0
  123. data/examples/cli_app/README.md +317 -0
  124. data/examples/cli_app/htm_cli.rb +270 -0
  125. data/examples/custom_llm_configuration.rb +183 -0
  126. data/examples/example_app/Rakefile +71 -0
  127. data/examples/example_app/app.rb +206 -0
  128. data/examples/sinatra_app/Gemfile +21 -0
  129. data/examples/sinatra_app/app.rb +335 -0
  130. data/lib/htm/active_record_config.rb +113 -0
  131. data/lib/htm/configuration.rb +342 -0
  132. data/lib/htm/database.rb +594 -0
  133. data/lib/htm/embedding_service.rb +115 -0
  134. data/lib/htm/errors.rb +34 -0
  135. data/lib/htm/job_adapter.rb +154 -0
  136. data/lib/htm/jobs/generate_embedding_job.rb +65 -0
  137. data/lib/htm/jobs/generate_tags_job.rb +82 -0
  138. data/lib/htm/long_term_memory.rb +965 -0
  139. data/lib/htm/models/node.rb +109 -0
  140. data/lib/htm/models/node_tag.rb +33 -0
  141. data/lib/htm/models/robot.rb +52 -0
  142. data/lib/htm/models/tag.rb +76 -0
  143. data/lib/htm/railtie.rb +76 -0
  144. data/lib/htm/sinatra.rb +157 -0
  145. data/lib/htm/tag_service.rb +135 -0
  146. data/lib/htm/tasks.rb +38 -0
  147. data/lib/htm/version.rb +5 -0
  148. data/lib/htm/working_memory.rb +182 -0
  149. data/lib/htm.rb +400 -0
  150. data/lib/tasks/db.rake +19 -0
  151. data/lib/tasks/htm.rake +147 -0
  152. data/lib/tasks/jobs.rake +312 -0
  153. data/mkdocs.yml +190 -0
  154. data/scripts/install_local_database.sh +309 -0
  155. metadata +341 -0
data/dbdoc/schema.svg ADDED
@@ -0,0 +1,154 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <!-- Generated by graphviz version 12.1.2 (20240928.0832)
5
+ -->
6
+ <!-- Title: htm_development Pages: 1 -->
7
+ <svg width="1099pt" height="1093pt"
8
+ viewBox="0.00 0.00 1099.20 1092.80" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
+ <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1088.8)">
10
+ <title>htm_development</title>
11
+ <polygon fill="white" stroke="none" points="-4,4 -4,-1088.8 1095.2,-1088.8 1095.2,4 -4,4"/>
12
+ <!-- public.node_tags -->
13
+ <g id="node1" class="node">
14
+ <title>public.node_tags</title>
15
+ <polygon fill="#efefef" stroke="none" points="354.55,-1006 354.55,-1041.6 615.51,-1041.6 615.51,-1006 354.55,-1006"/>
16
+ <polygon fill="none" stroke="black" points="354.55,-1006 354.55,-1041.6 615.51,-1041.6 615.51,-1006 354.55,-1006"/>
17
+ <text text-anchor="start" x="361.55" y="-1019.4" font-family="Arial Bold" font-size="18.00">public.node_tags</text>
18
+ <text text-anchor="start" x="484.02" y="-1019.4" font-family="Arial" font-size="14.00">    </text>
19
+ <text text-anchor="start" x="515.14" y="-1019.4" font-family="Arial" font-size="14.00" fill="#666666">[BASE TABLE]</text>
20
+ <polygon fill="none" stroke="black" points="354.55,-975.2 354.55,-1006 615.51,-1006 615.51,-975.2 354.55,-975.2"/>
21
+ <text text-anchor="start" x="361.55" y="-987.4" font-family="Arial" font-size="14.00">id </text>
22
+ <text text-anchor="start" x="376.33" y="-987.4" font-family="Arial" font-size="14.00" fill="#666666">[bigint]</text>
23
+ <polygon fill="none" stroke="black" points="354.55,-944.4 354.55,-975.2 615.51,-975.2 615.51,-944.4 354.55,-944.4"/>
24
+ <text text-anchor="start" x="361.55" y="-956.6" font-family="Arial" font-size="14.00">node_id </text>
25
+ <text text-anchor="start" x="415.26" y="-956.6" font-family="Arial" font-size="14.00" fill="#666666">[bigint]</text>
26
+ <polygon fill="none" stroke="black" points="354.55,-913.6 354.55,-944.4 615.51,-944.4 615.51,-913.6 354.55,-913.6"/>
27
+ <text text-anchor="start" x="361.55" y="-925.8" font-family="Arial" font-size="14.00">tag_id </text>
28
+ <text text-anchor="start" x="403.58" y="-925.8" font-family="Arial" font-size="14.00" fill="#666666">[bigint]</text>
29
+ <polygon fill="none" stroke="black" points="354.55,-882.8 354.55,-913.6 615.51,-913.6 615.51,-882.8 354.55,-882.8"/>
30
+ <text text-anchor="start" x="361.55" y="-895" font-family="Arial" font-size="14.00">created_at </text>
31
+ <text text-anchor="start" x="431.59" y="-895" font-family="Arial" font-size="14.00" fill="#666666">[timestamp with time zone]</text>
32
+ </g>
33
+ <!-- public.nodes -->
34
+ <g id="node4" class="node">
35
+ <title>public.nodes</title>
36
+ <polygon fill="#efefef" stroke="none" points="166.86,-724.8 166.86,-760.4 439.19,-760.4 439.19,-724.8 166.86,-724.8"/>
37
+ <polygon fill="none" stroke="black" points="166.86,-724.8 166.86,-760.4 439.19,-760.4 439.19,-724.8 166.86,-724.8"/>
38
+ <text text-anchor="start" x="195.04" y="-738.2" font-family="Arial Bold" font-size="18.00">public.nodes</text>
39
+ <text text-anchor="start" x="286.53" y="-738.2" font-family="Arial" font-size="14.00">    </text>
40
+ <text text-anchor="start" x="317.64" y="-738.2" font-family="Arial" font-size="14.00" fill="#666666">[BASE TABLE]</text>
41
+ <polygon fill="none" stroke="black" points="166.86,-694 166.86,-724.8 439.19,-724.8 439.19,-694 166.86,-694"/>
42
+ <text text-anchor="start" x="173.86" y="-706.2" font-family="Arial" font-size="14.00">id </text>
43
+ <text text-anchor="start" x="188.65" y="-706.2" font-family="Arial" font-size="14.00" fill="#666666">[bigint]</text>
44
+ <polygon fill="none" stroke="black" points="166.86,-663.2 166.86,-694 439.19,-694 439.19,-663.2 166.86,-663.2"/>
45
+ <text text-anchor="start" x="173.86" y="-675.4" font-family="Arial" font-size="14.00">content </text>
46
+ <text text-anchor="start" x="223.68" y="-675.4" font-family="Arial" font-size="14.00" fill="#666666">[text]</text>
47
+ <polygon fill="none" stroke="black" points="166.86,-632.4 166.86,-663.2 439.19,-663.2 439.19,-632.4 166.86,-632.4"/>
48
+ <text text-anchor="start" x="173.86" y="-644.6" font-family="Arial" font-size="14.00">source </text>
49
+ <text text-anchor="start" x="219.77" y="-644.6" font-family="Arial" font-size="14.00" fill="#666666">[text]</text>
50
+ <polygon fill="none" stroke="black" points="166.86,-601.6 166.86,-632.4 439.19,-632.4 439.19,-601.6 166.86,-601.6"/>
51
+ <text text-anchor="start" x="173.86" y="-613.8" font-family="Arial" font-size="14.00">access_count </text>
52
+ <text text-anchor="start" x="263.36" y="-613.8" font-family="Arial" font-size="14.00" fill="#666666">[integer]</text>
53
+ <polygon fill="none" stroke="black" points="166.86,-570.8 166.86,-601.6 439.19,-601.6 439.19,-570.8 166.86,-570.8"/>
54
+ <text text-anchor="start" x="173.86" y="-583" font-family="Arial" font-size="14.00">created_at </text>
55
+ <text text-anchor="start" x="243.91" y="-583" font-family="Arial" font-size="14.00" fill="#666666">[timestamp with time zone]</text>
56
+ <polygon fill="none" stroke="black" points="166.86,-540 166.86,-570.8 439.19,-570.8 439.19,-540 166.86,-540"/>
57
+ <text text-anchor="start" x="173.86" y="-552.2" font-family="Arial" font-size="14.00">updated_at </text>
58
+ <text text-anchor="start" x="247.82" y="-552.2" font-family="Arial" font-size="14.00" fill="#666666">[timestamp with time zone]</text>
59
+ <polygon fill="none" stroke="black" points="166.86,-509.2 166.86,-540 439.19,-540 439.19,-509.2 166.86,-509.2"/>
60
+ <text text-anchor="start" x="173.86" y="-521.4" font-family="Arial" font-size="14.00">last_accessed </text>
61
+ <text text-anchor="start" x="266.47" y="-521.4" font-family="Arial" font-size="14.00" fill="#666666">[timestamp with time zone]</text>
62
+ <polygon fill="none" stroke="black" points="166.86,-478.4 166.86,-509.2 439.19,-509.2 439.19,-478.4 166.86,-478.4"/>
63
+ <text text-anchor="start" x="173.86" y="-490.6" font-family="Arial" font-size="14.00">token_count </text>
64
+ <text text-anchor="start" x="254.04" y="-490.6" font-family="Arial" font-size="14.00" fill="#666666">[integer]</text>
65
+ <polygon fill="none" stroke="black" points="166.86,-447.6 166.86,-478.4 439.19,-478.4 439.19,-447.6 166.86,-447.6"/>
66
+ <text text-anchor="start" x="173.86" y="-459.8" font-family="Arial" font-size="14.00">in_working_memory </text>
67
+ <text text-anchor="start" x="303.02" y="-459.8" font-family="Arial" font-size="14.00" fill="#666666">[boolean]</text>
68
+ <polygon fill="none" stroke="black" points="166.86,-416.8 166.86,-447.6 439.19,-447.6 439.19,-416.8 166.86,-416.8"/>
69
+ <text text-anchor="start" x="173.86" y="-429" font-family="Arial" font-size="14.00">robot_id </text>
70
+ <text text-anchor="start" x="228.35" y="-429" font-family="Arial" font-size="14.00" fill="#666666">[bigint]</text>
71
+ <polygon fill="none" stroke="black" points="166.86,-386 166.86,-416.8 439.19,-416.8 439.19,-386 166.86,-386"/>
72
+ <text text-anchor="start" x="173.86" y="-398.2" font-family="Arial" font-size="14.00">embedding </text>
73
+ <text text-anchor="start" x="247.03" y="-398.2" font-family="Arial" font-size="14.00" fill="#666666">[vector(2000)]</text>
74
+ <polygon fill="none" stroke="black" points="166.86,-355.2 166.86,-386 439.19,-386 439.19,-355.2 166.86,-355.2"/>
75
+ <text text-anchor="start" x="173.86" y="-367.4" font-family="Arial" font-size="14.00">embedding_dimension </text>
76
+ <text text-anchor="start" x="318.63" y="-367.4" font-family="Arial" font-size="14.00" fill="#666666">[integer]</text>
77
+ </g>
78
+ <!-- public.node_tags&#45;&gt;public.nodes -->
79
+ <g id="edge1" class="edge">
80
+ <title>public.node_tags:node_id&#45;&gt;public.nodes:id</title>
81
+ <path fill="none" stroke="black" d="M343.41,-958.71C303.63,-949.3 326.97,-880.91 354.55,-839.6 377.24,-805.6 416.46,-837.58 439.19,-803.6 462.48,-768.8 482.06,-709.4 440.19,-709.4"/>
82
+ <polygon fill="black" stroke="black" points="343.27,-958.7 352.73,-964.24 348.57,-959.27 352.88,-959.73 352.88,-959.73 352.88,-959.73 348.57,-959.27 353.69,-955.29 343.27,-958.7"/>
83
+ <text text-anchor="start" x="7" y="-969.8" font-family="Arial" font-size="10.00">FOREIGN KEY (node_id) REFERENCES nodes(id) ON DELETE CASCADE</text>
84
+ </g>
85
+ <!-- public.tags -->
86
+ <g id="node5" class="node">
87
+ <title>public.tags</title>
88
+ <polygon fill="#efefef" stroke="none" points="543.14,-586.2 543.14,-621.8 792.91,-621.8 792.91,-586.2 543.14,-586.2"/>
89
+ <polygon fill="none" stroke="black" points="543.14,-586.2 543.14,-621.8 792.91,-621.8 792.91,-586.2 543.14,-586.2"/>
90
+ <text text-anchor="start" x="566.54" y="-599.6" font-family="Arial Bold" font-size="18.00">public.tags</text>
91
+ <text text-anchor="start" x="645.03" y="-599.6" font-family="Arial" font-size="14.00">    </text>
92
+ <text text-anchor="start" x="676.14" y="-599.6" font-family="Arial" font-size="14.00" fill="#666666">[BASE TABLE]</text>
93
+ <polygon fill="none" stroke="black" points="543.14,-555.4 543.14,-586.2 792.91,-586.2 792.91,-555.4 543.14,-555.4"/>
94
+ <text text-anchor="start" x="550.14" y="-567.6" font-family="Arial" font-size="14.00">id </text>
95
+ <text text-anchor="start" x="564.93" y="-567.6" font-family="Arial" font-size="14.00" fill="#666666">[bigint]</text>
96
+ <polygon fill="none" stroke="black" points="543.14,-524.6 543.14,-555.4 792.91,-555.4 792.91,-524.6 543.14,-524.6"/>
97
+ <text text-anchor="start" x="550.14" y="-536.8" font-family="Arial" font-size="14.00">name </text>
98
+ <text text-anchor="start" x="589.05" y="-536.8" font-family="Arial" font-size="14.00" fill="#666666">[text]</text>
99
+ <polygon fill="none" stroke="black" points="543.14,-493.8 543.14,-524.6 792.91,-524.6 792.91,-493.8 543.14,-493.8"/>
100
+ <text text-anchor="start" x="550.14" y="-506" font-family="Arial" font-size="14.00">created_at </text>
101
+ <text text-anchor="start" x="620.19" y="-506" font-family="Arial" font-size="14.00" fill="#666666">[timestamp with time zone]</text>
102
+ </g>
103
+ <!-- public.node_tags&#45;&gt;public.tags -->
104
+ <g id="edge2" class="edge">
105
+ <title>public.node_tags:tag_id&#45;&gt;public.tags:id</title>
106
+ <path fill="none" stroke="black" d="M626.63,-928.47C761.44,-913.09 383.2,-570.8 542.14,-570.8"/>
107
+ <polygon fill="black" stroke="black" points="626.83,-928.46 616.61,-924.49 621.5,-928.74 617.18,-928.96 617.18,-928.96 617.18,-928.96 621.5,-928.74 617.08,-933.48 626.83,-928.46"/>
108
+ <text text-anchor="start" x="286.65" y="-939" font-family="Arial" font-size="10.00">FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE</text>
109
+ </g>
110
+ <!-- public.schema_migrations -->
111
+ <g id="node2" class="node">
112
+ <title>public.schema_migrations</title>
113
+ <polygon fill="#efefef" stroke="none" points="720.06,-959.8 720.06,-995.4 1048,-995.4 1048,-959.8 720.06,-959.8"/>
114
+ <polygon fill="none" stroke="black" points="720.06,-959.8 720.06,-995.4 1048,-995.4 1048,-959.8 720.06,-959.8"/>
115
+ <text text-anchor="start" x="727.06" y="-973.2" font-family="Arial Bold" font-size="18.00">public.schema_migrations</text>
116
+ <text text-anchor="start" x="916.51" y="-973.2" font-family="Arial" font-size="14.00">    </text>
117
+ <text text-anchor="start" x="947.63" y="-973.2" font-family="Arial" font-size="14.00" fill="#666666">[BASE TABLE]</text>
118
+ <polygon fill="none" stroke="black" points="720.06,-929 720.06,-959.8 1048,-959.8 1048,-929 720.06,-929"/>
119
+ <text text-anchor="start" x="727.06" y="-941.2" font-family="Arial" font-size="14.00">version </text>
120
+ <text text-anchor="start" x="776.08" y="-941.2" font-family="Arial" font-size="14.00" fill="#666666">[varchar]</text>
121
+ </g>
122
+ <!-- public.robots -->
123
+ <g id="node3" class="node">
124
+ <title>public.robots</title>
125
+ <polygon fill="#efefef" stroke="none" points="178.14,-197.2 178.14,-232.8 427.91,-232.8 427.91,-197.2 178.14,-197.2"/>
126
+ <polygon fill="none" stroke="black" points="178.14,-197.2 178.14,-232.8 427.91,-232.8 427.91,-197.2 178.14,-197.2"/>
127
+ <text text-anchor="start" x="193.54" y="-210.6" font-family="Arial Bold" font-size="18.00">public.robots</text>
128
+ <text text-anchor="start" x="288.03" y="-210.6" font-family="Arial" font-size="14.00">    </text>
129
+ <text text-anchor="start" x="319.15" y="-210.6" font-family="Arial" font-size="14.00" fill="#666666">[BASE TABLE]</text>
130
+ <polygon fill="none" stroke="black" points="178.14,-166.4 178.14,-197.2 427.91,-197.2 427.91,-166.4 178.14,-166.4"/>
131
+ <text text-anchor="start" x="185.14" y="-178.6" font-family="Arial" font-size="14.00">id </text>
132
+ <text text-anchor="start" x="199.93" y="-178.6" font-family="Arial" font-size="14.00" fill="#666666">[bigint]</text>
133
+ <polygon fill="none" stroke="black" points="178.14,-135.6 178.14,-166.4 427.91,-166.4 427.91,-135.6 178.14,-135.6"/>
134
+ <text text-anchor="start" x="185.14" y="-147.8" font-family="Arial" font-size="14.00">name </text>
135
+ <text text-anchor="start" x="224.05" y="-147.8" font-family="Arial" font-size="14.00" fill="#666666">[text]</text>
136
+ <polygon fill="none" stroke="black" points="178.14,-104.8 178.14,-135.6 427.91,-135.6 427.91,-104.8 178.14,-104.8"/>
137
+ <text text-anchor="start" x="185.14" y="-117" font-family="Arial" font-size="14.00">created_at </text>
138
+ <text text-anchor="start" x="255.19" y="-117" font-family="Arial" font-size="14.00" fill="#666666">[timestamp with time zone]</text>
139
+ <polygon fill="none" stroke="black" points="178.14,-74 178.14,-104.8 427.91,-104.8 427.91,-74 178.14,-74"/>
140
+ <text text-anchor="start" x="185.14" y="-86.2" font-family="Arial" font-size="14.00">last_active </text>
141
+ <text text-anchor="start" x="255.18" y="-86.2" font-family="Arial" font-size="14.00" fill="#666666">[timestamp with time zone]</text>
142
+ <polygon fill="none" stroke="black" points="178.14,-43.2 178.14,-74 427.91,-74 427.91,-43.2 178.14,-43.2"/>
143
+ <text text-anchor="start" x="185.14" y="-55.4" font-family="Arial" font-size="14.00">metadata </text>
144
+ <text text-anchor="start" x="247.4" y="-55.4" font-family="Arial" font-size="14.00" fill="#666666">[jsonb]</text>
145
+ </g>
146
+ <!-- public.nodes&#45;&gt;public.robots -->
147
+ <g id="edge3" class="edge">
148
+ <title>public.nodes:robot_id&#45;&gt;public.robots:id</title>
149
+ <path fill="none" stroke="black" d="M450.13,-429.21C494.26,-400.96 481.02,-181.8 428.91,-181.8"/>
150
+ <polygon fill="black" stroke="black" points="450.09,-429.23 439.22,-427.79 444.98,-430.76 440.83,-432.01 440.83,-432.01 440.83,-432.01 444.98,-430.76 441.81,-436.41 450.09,-429.23"/>
151
+ <text text-anchor="start" x="447.19" y="-416.2" font-family="Arial" font-size="10.00">FOREIGN KEY (robot_id) REFERENCES robots(id) ON DELETE CASCADE</text>
152
+ </g>
153
+ </g>
154
+ </svg>