kbs 0.0.1 → 0.1.0

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 (86) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/deploy-github-pages.yml +52 -0
  3. data/CHANGELOG.md +68 -2
  4. data/README.md +235 -334
  5. data/docs/DOCUMENTATION_STATUS.md +158 -0
  6. data/docs/advanced/custom-persistence.md +775 -0
  7. data/docs/advanced/debugging.md +726 -0
  8. data/docs/advanced/index.md +8 -0
  9. data/docs/advanced/performance.md +832 -0
  10. data/docs/advanced/testing.md +691 -0
  11. data/docs/api/blackboard.md +1157 -0
  12. data/docs/api/engine.md +978 -0
  13. data/docs/api/facts.md +1212 -0
  14. data/docs/api/index.md +12 -0
  15. data/docs/api/rules.md +1034 -0
  16. data/docs/architecture/blackboard.md +553 -0
  17. data/docs/architecture/index.md +277 -0
  18. data/docs/architecture/network-structure.md +343 -0
  19. data/docs/architecture/rete-algorithm.md +737 -0
  20. data/docs/assets/css/custom.css +83 -0
  21. data/docs/assets/images/blackboard-architecture.svg +136 -0
  22. data/docs/assets/images/compiled-network.svg +101 -0
  23. data/docs/assets/images/fact-assertion-flow.svg +117 -0
  24. data/docs/assets/images/kbs.jpg +0 -0
  25. data/docs/assets/images/pattern-matching-trace.svg +136 -0
  26. data/docs/assets/images/rete-network-layers.svg +96 -0
  27. data/docs/assets/images/system-layers.svg +69 -0
  28. data/docs/assets/images/trading-signal-network.svg +139 -0
  29. data/docs/assets/js/mathjax.js +17 -0
  30. data/docs/examples/expert-systems.md +1031 -0
  31. data/docs/examples/index.md +9 -0
  32. data/docs/examples/multi-agent.md +1335 -0
  33. data/docs/examples/stock-trading.md +488 -0
  34. data/docs/guides/blackboard-memory.md +558 -0
  35. data/docs/guides/dsl.md +1321 -0
  36. data/docs/guides/facts.md +652 -0
  37. data/docs/guides/getting-started.md +383 -0
  38. data/docs/guides/index.md +23 -0
  39. data/docs/guides/negation.md +529 -0
  40. data/docs/guides/pattern-matching.md +561 -0
  41. data/docs/guides/persistence.md +451 -0
  42. data/docs/guides/variable-binding.md +491 -0
  43. data/docs/guides/writing-rules.md +755 -0
  44. data/docs/index.md +157 -0
  45. data/docs/installation.md +156 -0
  46. data/docs/quick-start.md +228 -0
  47. data/examples/README.md +2 -2
  48. data/examples/advanced_example.rb +2 -2
  49. data/examples/advanced_example_dsl.rb +224 -0
  50. data/examples/ai_enhanced_kbs.rb +1 -1
  51. data/examples/ai_enhanced_kbs_dsl.rb +538 -0
  52. data/examples/blackboard_demo_dsl.rb +50 -0
  53. data/examples/car_diagnostic.rb +1 -1
  54. data/examples/car_diagnostic_dsl.rb +54 -0
  55. data/examples/concurrent_inference_demo.rb +5 -5
  56. data/examples/concurrent_inference_demo_dsl.rb +363 -0
  57. data/examples/csv_trading_system.rb +1 -1
  58. data/examples/csv_trading_system_dsl.rb +525 -0
  59. data/examples/knowledge_base.db +0 -0
  60. data/examples/portfolio_rebalancing_system.rb +2 -2
  61. data/examples/portfolio_rebalancing_system_dsl.rb +613 -0
  62. data/examples/redis_trading_demo_dsl.rb +177 -0
  63. data/examples/run_all.rb +50 -0
  64. data/examples/run_all_dsl.rb +49 -0
  65. data/examples/stock_trading_advanced.rb +1 -1
  66. data/examples/stock_trading_advanced_dsl.rb +404 -0
  67. data/examples/temp.txt +7693 -0
  68. data/examples/temp_dsl.txt +8447 -0
  69. data/examples/timestamped_trading.rb +1 -1
  70. data/examples/timestamped_trading_dsl.rb +258 -0
  71. data/examples/trading_demo.rb +1 -1
  72. data/examples/trading_demo_dsl.rb +322 -0
  73. data/examples/working_demo.rb +1 -1
  74. data/examples/working_demo_dsl.rb +160 -0
  75. data/lib/kbs/blackboard/engine.rb +3 -3
  76. data/lib/kbs/blackboard/fact.rb +1 -1
  77. data/lib/kbs/condition.rb +1 -1
  78. data/lib/kbs/dsl/knowledge_base.rb +1 -1
  79. data/lib/kbs/dsl/variable.rb +1 -1
  80. data/lib/kbs/{rete_engine.rb → engine.rb} +1 -1
  81. data/lib/kbs/fact.rb +1 -1
  82. data/lib/kbs/version.rb +1 -1
  83. data/lib/kbs.rb +2 -2
  84. data/mkdocs.yml +181 -0
  85. metadata +66 -6
  86. data/examples/stock_trading_system.rb.bak +0 -563
@@ -0,0 +1,160 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/kbs/dsl'
4
+ include KBS::DSL::ConditionHelpers
5
+
6
+ # Define the knowledge base with rules
7
+ kb = KBS.knowledge_base do
8
+ # Rule 1: Simple stock momentum
9
+ rule "momentum_buy" do
10
+ on :stock, symbol: "AAPL"
11
+
12
+ perform do |facts, bindings|
13
+ stock = facts.find { |f| f.type == :stock }
14
+ puts "🚀 MOMENTUM SIGNAL: #{stock[:symbol]}"
15
+ puts " Price: $#{stock[:price]}"
16
+ puts " Volume: #{stock[:volume].to_s.reverse.scan(/\d{1,3}/).join(',').reverse}"
17
+ puts " Recommendation: BUY"
18
+ end
19
+ end
20
+
21
+ # Rule 2: High volume alert
22
+ rule "high_volume" do
23
+ on :stock do
24
+ volume greater_than(1000000)
25
+ end
26
+
27
+ perform do |facts, bindings|
28
+ stock = facts.find { |f| f.type == :stock }
29
+ puts "📊 HIGH VOLUME ALERT: #{stock[:symbol]}"
30
+ puts " Volume: #{stock[:volume].to_s.reverse.scan(/\d{1,3}/).join(',').reverse}"
31
+ puts " Above 1M shares traded"
32
+ end
33
+ end
34
+
35
+ # Rule 3: Price movement
36
+ rule "price_movement" do
37
+ on :stock do
38
+ price_change satisfies { |p| p && p.abs > 2 }
39
+ end
40
+
41
+ perform do |facts, bindings|
42
+ stock = facts.find { |f| f.type == :stock }
43
+ direction = stock[:price_change] > 0 ? "UP" : "DOWN"
44
+ puts "📈 SIGNIFICANT MOVE: #{stock[:symbol]} #{direction}"
45
+ puts " Change: #{stock[:price_change] > 0 ? '+' : ''}#{stock[:price_change]}%"
46
+ end
47
+ end
48
+
49
+ # Rule 4: RSI signals
50
+ rule "rsi_signal" do
51
+ on :stock do
52
+ rsi satisfies { |r| r && (r < 30 || r > 70) }
53
+ end
54
+
55
+ perform do |facts, bindings|
56
+ stock = facts.find { |f| f.type == :stock }
57
+ condition = stock[:rsi] < 30 ? "OVERSOLD" : "OVERBOUGHT"
58
+ action = stock[:rsi] < 30 ? "BUY" : "SELL"
59
+ puts "⚡ RSI SIGNAL: #{stock[:symbol]} #{condition}"
60
+ puts " RSI: #{stock[:rsi].round(1)}"
61
+ puts " Recommendation: #{action}"
62
+ end
63
+ end
64
+
65
+ # Rule 5: Multi-condition golden cross
66
+ rule "golden_cross_complete" do
67
+ on :stock, symbol: "AAPL"
68
+ on :ma_signal, type: "golden_cross"
69
+
70
+ perform do |facts, bindings|
71
+ stock = facts.find { |f| f.type == :stock }
72
+ signal = facts.find { |f| f.type == :ma_signal }
73
+ puts "🌟 GOLDEN CROSS CONFIRMED: #{stock[:symbol]}"
74
+ puts " 50-day MA crossed above 200-day MA"
75
+ puts " Price: $#{stock[:price]}"
76
+ puts " Recommendation: STRONG BUY"
77
+ end
78
+ end
79
+ end
80
+
81
+ def run_scenarios(kb)
82
+ puts "🏦 STOCK TRADING EXPERT SYSTEM"
83
+ puts "=" * 50
84
+
85
+ # Scenario 1: Apple momentum
86
+ puts "\n📊 SCENARIO 1: Apple with High Volume"
87
+ puts "-" * 30
88
+ kb.reset
89
+ kb.fact :stock, {
90
+ symbol: "AAPL",
91
+ price: 185.50,
92
+ volume: 1_500_000,
93
+ price_change: 3.2,
94
+ rsi: 68
95
+ }
96
+ kb.run
97
+
98
+ # Scenario 2: Google big move
99
+ puts "\n📊 SCENARIO 2: Google Big Price Move"
100
+ puts "-" * 30
101
+ kb.reset
102
+ kb.fact :stock, {
103
+ symbol: "GOOGL",
104
+ price: 142.80,
105
+ volume: 800_000,
106
+ price_change: -4.1,
107
+ rsi: 75
108
+ }
109
+ kb.run
110
+
111
+ # Scenario 3: Tesla oversold
112
+ puts "\n📊 SCENARIO 3: Tesla Oversold"
113
+ puts "-" * 30
114
+ kb.reset
115
+ kb.fact :stock, {
116
+ symbol: "TSLA",
117
+ price: 195.40,
118
+ volume: 2_200_000,
119
+ price_change: -1.8,
120
+ rsi: 25
121
+ }
122
+ kb.run
123
+
124
+ # Scenario 4: Apple Golden Cross
125
+ puts "\n📊 SCENARIO 4: Apple Golden Cross"
126
+ puts "-" * 30
127
+ kb.reset
128
+ kb.fact :stock, {
129
+ symbol: "AAPL",
130
+ price: 190.25,
131
+ volume: 1_100_000,
132
+ price_change: 2.1,
133
+ rsi: 55
134
+ }
135
+ kb.fact :ma_signal, {
136
+ symbol: "AAPL",
137
+ type: "golden_cross"
138
+ }
139
+ kb.run
140
+
141
+ # Scenario 5: Multiple signals
142
+ puts "\n📊 SCENARIO 5: NVIDIA Multiple Signals"
143
+ puts "-" * 30
144
+ kb.reset
145
+ kb.fact :stock, {
146
+ symbol: "NVDA",
147
+ price: 425.80,
148
+ volume: 3_500_000,
149
+ price_change: 8.7,
150
+ rsi: 78
151
+ }
152
+ kb.run
153
+
154
+ puts "\n" + "=" * 50
155
+ puts "DEMONSTRATION COMPLETE"
156
+ end
157
+
158
+ if __FILE__ == $0
159
+ run_scenarios(kb)
160
+ end
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../rete_engine'
3
+ require_relative '../engine'
4
4
  require_relative 'memory'
5
5
 
6
6
  module KBS
7
7
  module Blackboard
8
- # RETE engine integrated with Blackboard memory
9
- class Engine < ReteEngine
8
+ # KBS engine integrated with Blackboard memory
9
+ class Engine < KBS::Engine
10
10
  attr_reader :blackboard
11
11
 
12
12
  def initialize(db_path: ':memory:', store: nil)
@@ -39,7 +39,7 @@ module KBS
39
39
 
40
40
  if value.is_a?(Proc)
41
41
  return false unless @attributes[key] && value.call(@attributes[key])
42
- elsif value.is_a?(Symbol) && value.to_s.start_with?('?')
42
+ elsif value.is_a?(Symbol) && value.to_s.end_with?('?')
43
43
  next
44
44
  else
45
45
  return false unless @attributes[key] == value
data/lib/kbs/condition.rb CHANGED
@@ -16,7 +16,7 @@ module KBS
16
16
  def extract_variables(pattern)
17
17
  vars = {}
18
18
  pattern.each do |key, value|
19
- if value.is_a?(Symbol) && value.to_s.start_with?('?')
19
+ if value.is_a?(Symbol) && value.to_s.end_with?('?')
20
20
  vars[value] = key
21
21
  end
22
22
  end
@@ -6,7 +6,7 @@ module KBS
6
6
  attr_reader :engine, :rules
7
7
 
8
8
  def initialize
9
- @engine = ReteEngine.new
9
+ @engine = Engine.new
10
10
  @rules = {}
11
11
  @rule_builders = {}
12
12
  end
@@ -7,7 +7,7 @@ module KBS
7
7
 
8
8
  def initialize(name)
9
9
  name_str = name.to_s
10
- @name = name_str.start_with?('?') ? name_str.to_sym : "?#{name_str}".to_sym
10
+ @name = name_str.end_with?('?') ? name_str.to_sym : "#{name_str}?".to_sym
11
11
  end
12
12
 
13
13
  def to_sym
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KBS
4
- class ReteEngine
4
+ class Engine
5
5
  attr_reader :working_memory, :rules, :alpha_memories, :production_nodes
6
6
 
7
7
  def initialize
data/lib/kbs/fact.rb CHANGED
@@ -26,7 +26,7 @@ module KBS
26
26
 
27
27
  if value.is_a?(Proc)
28
28
  return false unless @attributes[key] && value.call(@attributes[key])
29
- elsif value.is_a?(Symbol) && value.to_s.start_with?('?')
29
+ elsif value.is_a?(Symbol) && value.to_s.end_with?('?')
30
30
  next
31
31
  else
32
32
  return false unless @attributes[key] == value
data/lib/kbs/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KBS
4
- VERSION = "0.0.1"
4
+ VERSION = "0.1.0"
5
5
  end
data/lib/kbs.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  require_relative "kbs/version"
4
4
 
5
- # Core RETE II classes
5
+ # Core RETE classes
6
6
  require_relative "kbs/fact"
7
7
  require_relative "kbs/working_memory"
8
8
  require_relative "kbs/token"
@@ -13,7 +13,7 @@ require_relative "kbs/negation_node"
13
13
  require_relative "kbs/production_node"
14
14
  require_relative "kbs/condition"
15
15
  require_relative "kbs/rule"
16
- require_relative "kbs/rete_engine"
16
+ require_relative "kbs/engine"
17
17
 
18
18
  module KBS
19
19
  class Error < StandardError; end
data/mkdocs.yml ADDED
@@ -0,0 +1,181 @@
1
+ # MkDocs Configuration for KBS Documentation
2
+ site_name: KBS - Knowledge-Based Systems for Ruby
3
+ site_description: A Ruby implementation of the RETE algorithm for production rule systems with persistent blackboard memory
4
+ site_author: Dewayne VanHoozer
5
+ site_url: https://madbomber.github.io/kbs
6
+ copyright: Copyright &copy; 2024 Dewayne VanHoozer
7
+
8
+ # Repository information
9
+ repo_name: madbomber/kbs
10
+ repo_url: https://github.com/madbomber/kbs
11
+ edit_uri: edit/main/docs/
12
+
13
+ # Configuration
14
+ theme:
15
+ name: material
16
+
17
+ # Color scheme - Default to light mode
18
+ palette:
19
+ # Palette toggle for light mode (default)
20
+ - scheme: default
21
+ primary: deep purple
22
+ accent: purple
23
+ toggle:
24
+ icon: material/brightness-7
25
+ name: Switch to dark mode
26
+
27
+ # Palette toggle for dark mode
28
+ - scheme: slate
29
+ primary: deep purple
30
+ accent: purple
31
+ toggle:
32
+ icon: material/brightness-4
33
+ name: Switch to light mode
34
+
35
+ # Typography
36
+ font:
37
+ text: Roboto
38
+ code: Roboto Mono
39
+
40
+ # Theme features
41
+ features:
42
+ # Navigation
43
+ - navigation.instant
44
+ - navigation.tracking
45
+ - navigation.tabs
46
+ - navigation.tabs.sticky
47
+ - navigation.sections
48
+ - navigation.path
49
+ - navigation.indexes
50
+ - navigation.top
51
+
52
+ # Table of contents
53
+ - toc.follow
54
+
55
+ # Search
56
+ - search.suggest
57
+ - search.highlight
58
+ - search.share
59
+
60
+ # Header
61
+ - header.autohide
62
+
63
+ # Content
64
+ - content.code.copy
65
+ - content.code.annotate
66
+ - content.tabs.link
67
+ - content.tooltips
68
+ - content.action.edit
69
+ - content.action.view
70
+
71
+ # Plugins
72
+ plugins:
73
+ - search:
74
+ separator: '[\s\-,:!=\[\]()"`/]+|\.(?!\d)|&[lg]t;|(?!\b)(?=[A-Z][a-z])'
75
+
76
+ # Extensions
77
+ markdown_extensions:
78
+ # Python Markdown
79
+ - abbr
80
+ - admonition
81
+ - attr_list
82
+ - def_list
83
+ - footnotes
84
+ - md_in_html
85
+ - toc:
86
+ permalink: true
87
+ title: On this page
88
+
89
+ # Python Markdown Extensions
90
+ - pymdownx.arithmatex:
91
+ generic: true
92
+ - pymdownx.betterem:
93
+ smart_enable: all
94
+ - pymdownx.caret
95
+ - pymdownx.details
96
+ - pymdownx.emoji:
97
+ emoji_generator: !!python/name:material.extensions.emoji.to_svg
98
+ emoji_index: !!python/name:material.extensions.emoji.twemoji
99
+ - pymdownx.highlight:
100
+ anchor_linenums: true
101
+ line_spans: __span
102
+ pygments_lang_class: true
103
+ - pymdownx.inlinehilite
104
+ - pymdownx.keys
105
+ - pymdownx.magiclink:
106
+ repo_url_shorthand: true
107
+ user: madbomber
108
+ repo: kbs
109
+ - pymdownx.mark
110
+ - pymdownx.smartsymbols
111
+ - pymdownx.superfences:
112
+ custom_fences:
113
+ - name: mermaid
114
+ class: mermaid
115
+ format: !!python/name:pymdownx.superfences.fence_code_format
116
+ - pymdownx.tabbed:
117
+ alternate_style: true
118
+ - pymdownx.tasklist:
119
+ custom_checkbox: true
120
+ - pymdownx.tilde
121
+
122
+ # Extra CSS and JavaScript
123
+ extra_css:
124
+ - assets/css/custom.css
125
+
126
+ extra_javascript:
127
+ - assets/js/mathjax.js
128
+ - https://polyfill.io/v3/polyfill.min.js?features=es6
129
+ - https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js
130
+
131
+ # Social media and extra configuration
132
+ extra:
133
+ social:
134
+ - icon: fontawesome/brands/github
135
+ link: https://github.com/madbomber/kbs
136
+ name: KBS on GitHub
137
+ - icon: fontawesome/solid/gem
138
+ link: https://rubygems.org/gems/kbs
139
+ name: KBS on RubyGems
140
+
141
+ version:
142
+ provider: mike
143
+
144
+ # Navigation
145
+ nav:
146
+ - Home: index.md
147
+ - Installation: installation.md
148
+ - Quick Start: quick-start.md
149
+ - Architecture:
150
+ - architecture/index.md
151
+ - RETE Algorithm: architecture/rete-algorithm.md
152
+ - Blackboard System: architecture/blackboard.md
153
+ - Network Structure: architecture/network-structure.md
154
+ - Guides:
155
+ - guides/index.md
156
+ - Getting Started: guides/getting-started.md
157
+ - Writing Rules: guides/writing-rules.md
158
+ - DSL Reference: guides/dsl.md
159
+ - Working with Facts: guides/facts.md
160
+ - Pattern Matching: guides/pattern-matching.md
161
+ - Variable Binding: guides/variable-binding.md
162
+ - Negation: guides/negation.md
163
+ - Blackboard Memory: guides/blackboard-memory.md
164
+ - Persistence Options: guides/persistence.md
165
+ - Examples:
166
+ - examples/index.md
167
+ - Stock Trading: examples/stock-trading.md
168
+ - Expert Systems: examples/expert-systems.md
169
+ - Multi-Agent Systems: examples/multi-agent.md
170
+ - Advanced:
171
+ - advanced/index.md
172
+ - Performance Tuning: advanced/performance.md
173
+ - Custom Persistence: advanced/custom-persistence.md
174
+ - Debugging: advanced/debugging.md
175
+ - Testing Rules: advanced/testing.md
176
+ - API Reference:
177
+ - api/index.md
178
+ - ReteEngine: api/engine.md
179
+ - Facts: api/facts.md
180
+ - Rules: api/rules.md
181
+ - Blackboard: api/blackboard.md
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kbs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dewayne VanHoozer
@@ -68,7 +68,7 @@ dependencies:
68
68
  description: |
69
69
  A comprehensive Ruby implementation of a Knowledge-Based System featuring:
70
70
 
71
- • RETE II Algorithm: Optimized forward-chaining inference engine with unlinking optimization for high-performance pattern matching
71
+ • RETE Algorithm: Optimized forward-chaining inference engine with unlinking optimization for high-performance pattern matching
72
72
  • Declarative DSL: Readable, expressive syntax for rule definition with built-in condition helpers
73
73
  • Blackboard Architecture: Multi-agent coordination with message passing and knowledge source registration
74
74
  • Flexible Persistence: SQLite (durable), Redis (fast), and hybrid storage backends with audit trails
@@ -84,27 +84,86 @@ extensions: []
84
84
  extra_rdoc_files: []
85
85
  files:
86
86
  - ".envrc"
87
+ - ".github/workflows/deploy-github-pages.yml"
87
88
  - CHANGELOG.md
88
89
  - COMMITS.md
89
90
  - LICENSE.txt
90
91
  - README.md
91
92
  - Rakefile
93
+ - docs/DOCUMENTATION_STATUS.md
94
+ - docs/advanced/custom-persistence.md
95
+ - docs/advanced/debugging.md
96
+ - docs/advanced/index.md
97
+ - docs/advanced/performance.md
98
+ - docs/advanced/testing.md
99
+ - docs/api/blackboard.md
100
+ - docs/api/engine.md
101
+ - docs/api/facts.md
102
+ - docs/api/index.md
103
+ - docs/api/rules.md
104
+ - docs/architecture/blackboard.md
105
+ - docs/architecture/index.md
106
+ - docs/architecture/network-structure.md
107
+ - docs/architecture/rete-algorithm.md
108
+ - docs/assets/css/custom.css
109
+ - docs/assets/images/blackboard-architecture.svg
110
+ - docs/assets/images/compiled-network.svg
111
+ - docs/assets/images/fact-assertion-flow.svg
112
+ - docs/assets/images/kbs.jpg
113
+ - docs/assets/images/pattern-matching-trace.svg
114
+ - docs/assets/images/rete-network-layers.svg
115
+ - docs/assets/images/system-layers.svg
116
+ - docs/assets/images/trading-signal-network.svg
117
+ - docs/assets/js/mathjax.js
118
+ - docs/examples/expert-systems.md
119
+ - docs/examples/index.md
120
+ - docs/examples/multi-agent.md
121
+ - docs/examples/stock-trading.md
122
+ - docs/guides/blackboard-memory.md
123
+ - docs/guides/dsl.md
124
+ - docs/guides/facts.md
125
+ - docs/guides/getting-started.md
126
+ - docs/guides/index.md
127
+ - docs/guides/negation.md
128
+ - docs/guides/pattern-matching.md
129
+ - docs/guides/persistence.md
130
+ - docs/guides/variable-binding.md
131
+ - docs/guides/writing-rules.md
132
+ - docs/index.md
133
+ - docs/installation.md
134
+ - docs/quick-start.md
92
135
  - examples/README.md
93
136
  - examples/advanced_example.rb
137
+ - examples/advanced_example_dsl.rb
94
138
  - examples/ai_enhanced_kbs.rb
139
+ - examples/ai_enhanced_kbs_dsl.rb
95
140
  - examples/blackboard_demo.rb
141
+ - examples/blackboard_demo_dsl.rb
96
142
  - examples/car_diagnostic.rb
143
+ - examples/car_diagnostic_dsl.rb
97
144
  - examples/concurrent_inference_demo.rb
145
+ - examples/concurrent_inference_demo_dsl.rb
98
146
  - examples/csv_trading_system.rb
147
+ - examples/csv_trading_system_dsl.rb
99
148
  - examples/iot_demo_using_dsl.rb
149
+ - examples/knowledge_base.db
100
150
  - examples/portfolio_rebalancing_system.rb
151
+ - examples/portfolio_rebalancing_system_dsl.rb
101
152
  - examples/redis_trading_demo.rb
153
+ - examples/redis_trading_demo_dsl.rb
154
+ - examples/run_all.rb
155
+ - examples/run_all_dsl.rb
102
156
  - examples/sample_stock_data.csv
103
157
  - examples/stock_trading_advanced.rb
104
- - examples/stock_trading_system.rb.bak
158
+ - examples/stock_trading_advanced_dsl.rb
159
+ - examples/temp.txt
160
+ - examples/temp_dsl.txt
105
161
  - examples/timestamped_trading.rb
162
+ - examples/timestamped_trading_dsl.rb
106
163
  - examples/trading_demo.rb
164
+ - examples/trading_demo_dsl.rb
107
165
  - examples/working_demo.rb
166
+ - examples/working_demo_dsl.rb
108
167
  - lib/kbs.rb
109
168
  - lib/kbs/alpha_memory.rb
110
169
  - lib/kbs/beta_memory.rb
@@ -127,15 +186,16 @@ files:
127
186
  - lib/kbs/dsl/pattern_evaluator.rb
128
187
  - lib/kbs/dsl/rule_builder.rb
129
188
  - lib/kbs/dsl/variable.rb
189
+ - lib/kbs/engine.rb
130
190
  - lib/kbs/fact.rb
131
191
  - lib/kbs/join_node.rb
132
192
  - lib/kbs/negation_node.rb
133
193
  - lib/kbs/production_node.rb
134
- - lib/kbs/rete_engine.rb
135
194
  - lib/kbs/rule.rb
136
195
  - lib/kbs/token.rb
137
196
  - lib/kbs/version.rb
138
197
  - lib/kbs/working_memory.rb
198
+ - mkdocs.yml
139
199
  homepage: https://github.com/madbomber/kbs
140
200
  licenses:
141
201
  - MIT
@@ -159,6 +219,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
159
219
  requirements: []
160
220
  rubygems_version: 3.7.2
161
221
  specification_version: 4
162
- summary: Production-ready Knowledge-Based System with RETE II inference, Blackboard
163
- architecture, and AI integration
222
+ summary: Knowledge-Based System with RETE inference, Blackboard architecture, and
223
+ AI integration
164
224
  test_files: []