decision_agent 0.2.0 → 1.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 (126) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +313 -8
  3. data/bin/decision_agent +104 -0
  4. data/lib/decision_agent/agent.rb +72 -1
  5. data/lib/decision_agent/context.rb +1 -0
  6. data/lib/decision_agent/data_enrichment/cache/memory_adapter.rb +86 -0
  7. data/lib/decision_agent/data_enrichment/cache_adapter.rb +49 -0
  8. data/lib/decision_agent/data_enrichment/circuit_breaker.rb +135 -0
  9. data/lib/decision_agent/data_enrichment/client.rb +220 -0
  10. data/lib/decision_agent/data_enrichment/config.rb +78 -0
  11. data/lib/decision_agent/data_enrichment/errors.rb +36 -0
  12. data/lib/decision_agent/decision.rb +102 -2
  13. data/lib/decision_agent/dmn/adapter.rb +135 -0
  14. data/lib/decision_agent/dmn/cache.rb +306 -0
  15. data/lib/decision_agent/dmn/decision_graph.rb +327 -0
  16. data/lib/decision_agent/dmn/decision_tree.rb +192 -0
  17. data/lib/decision_agent/dmn/errors.rb +30 -0
  18. data/lib/decision_agent/dmn/exporter.rb +217 -0
  19. data/lib/decision_agent/dmn/feel/evaluator.rb +819 -0
  20. data/lib/decision_agent/dmn/feel/functions.rb +420 -0
  21. data/lib/decision_agent/dmn/feel/parser.rb +349 -0
  22. data/lib/decision_agent/dmn/feel/simple_parser.rb +276 -0
  23. data/lib/decision_agent/dmn/feel/transformer.rb +372 -0
  24. data/lib/decision_agent/dmn/feel/types.rb +276 -0
  25. data/lib/decision_agent/dmn/importer.rb +77 -0
  26. data/lib/decision_agent/dmn/model.rb +197 -0
  27. data/lib/decision_agent/dmn/parser.rb +191 -0
  28. data/lib/decision_agent/dmn/testing.rb +333 -0
  29. data/lib/decision_agent/dmn/validator.rb +315 -0
  30. data/lib/decision_agent/dmn/versioning.rb +229 -0
  31. data/lib/decision_agent/dmn/visualizer.rb +513 -0
  32. data/lib/decision_agent/dsl/condition_evaluator.rb +984 -838
  33. data/lib/decision_agent/dsl/schema_validator.rb +53 -14
  34. data/lib/decision_agent/evaluators/dmn_evaluator.rb +308 -0
  35. data/lib/decision_agent/evaluators/json_rule_evaluator.rb +69 -9
  36. data/lib/decision_agent/explainability/condition_trace.rb +83 -0
  37. data/lib/decision_agent/explainability/explainability_result.rb +52 -0
  38. data/lib/decision_agent/explainability/rule_trace.rb +39 -0
  39. data/lib/decision_agent/explainability/trace_collector.rb +24 -0
  40. data/lib/decision_agent/monitoring/alert_manager.rb +5 -1
  41. data/lib/decision_agent/simulation/errors.rb +18 -0
  42. data/lib/decision_agent/simulation/impact_analyzer.rb +498 -0
  43. data/lib/decision_agent/simulation/monte_carlo_simulator.rb +635 -0
  44. data/lib/decision_agent/simulation/replay_engine.rb +486 -0
  45. data/lib/decision_agent/simulation/scenario_engine.rb +318 -0
  46. data/lib/decision_agent/simulation/scenario_library.rb +163 -0
  47. data/lib/decision_agent/simulation/shadow_test_engine.rb +287 -0
  48. data/lib/decision_agent/simulation/what_if_analyzer.rb +1002 -0
  49. data/lib/decision_agent/simulation.rb +17 -0
  50. data/lib/decision_agent/version.rb +1 -1
  51. data/lib/decision_agent/versioning/activerecord_adapter.rb +23 -8
  52. data/lib/decision_agent/web/dmn_editor.rb +426 -0
  53. data/lib/decision_agent/web/public/app.js +119 -0
  54. data/lib/decision_agent/web/public/dmn-editor.css +596 -0
  55. data/lib/decision_agent/web/public/dmn-editor.html +250 -0
  56. data/lib/decision_agent/web/public/dmn-editor.js +553 -0
  57. data/lib/decision_agent/web/public/index.html +52 -0
  58. data/lib/decision_agent/web/public/simulation.html +130 -0
  59. data/lib/decision_agent/web/public/simulation_impact.html +478 -0
  60. data/lib/decision_agent/web/public/simulation_replay.html +551 -0
  61. data/lib/decision_agent/web/public/simulation_shadow.html +546 -0
  62. data/lib/decision_agent/web/public/simulation_whatif.html +532 -0
  63. data/lib/decision_agent/web/public/styles.css +86 -0
  64. data/lib/decision_agent/web/server.rb +1059 -23
  65. data/lib/decision_agent.rb +60 -2
  66. metadata +105 -61
  67. data/spec/ab_testing/ab_test_assignment_spec.rb +0 -253
  68. data/spec/ab_testing/ab_test_manager_spec.rb +0 -612
  69. data/spec/ab_testing/ab_test_spec.rb +0 -270
  70. data/spec/ab_testing/ab_testing_agent_spec.rb +0 -481
  71. data/spec/ab_testing/storage/adapter_spec.rb +0 -64
  72. data/spec/ab_testing/storage/memory_adapter_spec.rb +0 -485
  73. data/spec/activerecord_thread_safety_spec.rb +0 -553
  74. data/spec/advanced_operators_spec.rb +0 -3150
  75. data/spec/agent_spec.rb +0 -289
  76. data/spec/api_contract_spec.rb +0 -430
  77. data/spec/audit_adapters_spec.rb +0 -92
  78. data/spec/auth/access_audit_logger_spec.rb +0 -394
  79. data/spec/auth/authenticator_spec.rb +0 -112
  80. data/spec/auth/password_reset_spec.rb +0 -294
  81. data/spec/auth/permission_checker_spec.rb +0 -207
  82. data/spec/auth/permission_spec.rb +0 -73
  83. data/spec/auth/rbac_adapter_spec.rb +0 -550
  84. data/spec/auth/rbac_config_spec.rb +0 -82
  85. data/spec/auth/role_spec.rb +0 -51
  86. data/spec/auth/session_manager_spec.rb +0 -172
  87. data/spec/auth/session_spec.rb +0 -112
  88. data/spec/auth/user_spec.rb +0 -130
  89. data/spec/comprehensive_edge_cases_spec.rb +0 -1777
  90. data/spec/context_spec.rb +0 -127
  91. data/spec/decision_agent_spec.rb +0 -96
  92. data/spec/decision_spec.rb +0 -423
  93. data/spec/dsl/condition_evaluator_spec.rb +0 -774
  94. data/spec/dsl_validation_spec.rb +0 -648
  95. data/spec/edge_cases_spec.rb +0 -353
  96. data/spec/evaluation_spec.rb +0 -364
  97. data/spec/evaluation_validator_spec.rb +0 -165
  98. data/spec/examples/feedback_aware_evaluator_spec.rb +0 -460
  99. data/spec/examples.txt +0 -1633
  100. data/spec/issue_verification_spec.rb +0 -759
  101. data/spec/json_rule_evaluator_spec.rb +0 -587
  102. data/spec/monitoring/alert_manager_spec.rb +0 -378
  103. data/spec/monitoring/metrics_collector_spec.rb +0 -499
  104. data/spec/monitoring/monitored_agent_spec.rb +0 -222
  105. data/spec/monitoring/prometheus_exporter_spec.rb +0 -242
  106. data/spec/monitoring/storage/activerecord_adapter_spec.rb +0 -498
  107. data/spec/monitoring/storage/base_adapter_spec.rb +0 -61
  108. data/spec/monitoring/storage/memory_adapter_spec.rb +0 -247
  109. data/spec/performance_optimizations_spec.rb +0 -486
  110. data/spec/replay_edge_cases_spec.rb +0 -699
  111. data/spec/replay_spec.rb +0 -210
  112. data/spec/rfc8785_canonicalization_spec.rb +0 -215
  113. data/spec/scoring_spec.rb +0 -225
  114. data/spec/spec_helper.rb +0 -60
  115. data/spec/testing/batch_test_importer_spec.rb +0 -693
  116. data/spec/testing/batch_test_runner_spec.rb +0 -307
  117. data/spec/testing/test_coverage_analyzer_spec.rb +0 -292
  118. data/spec/testing/test_result_comparator_spec.rb +0 -392
  119. data/spec/testing/test_scenario_spec.rb +0 -113
  120. data/spec/thread_safety_spec.rb +0 -482
  121. data/spec/thread_safety_spec.rb.broken +0 -878
  122. data/spec/versioning/adapter_spec.rb +0 -156
  123. data/spec/versioning_spec.rb +0 -1030
  124. data/spec/web/middleware/auth_middleware_spec.rb +0 -133
  125. data/spec/web/middleware/permission_middleware_spec.rb +0 -247
  126. data/spec/web_ui_rack_spec.rb +0 -1840
@@ -0,0 +1,250 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>DMN Editor - DecisionAgent</title>
7
+ <link rel="stylesheet" href="dmn-editor.css">
8
+ </head>
9
+ <body>
10
+ <div class="container">
11
+ <header>
12
+ <h1>DMN Editor</h1>
13
+ <div class="header-actions">
14
+ <button id="new-model-btn" class="btn btn-primary">New Model</button>
15
+ <button id="import-btn" class="btn btn-secondary">Import DMN</button>
16
+ <button id="export-btn" class="btn btn-secondary">Export DMN</button>
17
+ <button id="validate-btn" class="btn btn-secondary">Validate</button>
18
+ <a href="/" class="btn btn-link">Back to Main</a>
19
+ </div>
20
+ </header>
21
+
22
+ <div class="main-content">
23
+ <!-- Sidebar -->
24
+ <aside class="sidebar">
25
+ <h3>Models</h3>
26
+ <div id="model-list" class="model-list">
27
+ <p class="empty-state">No models yet. Create one to get started.</p>
28
+ </div>
29
+ </aside>
30
+
31
+ <!-- Editor Area -->
32
+ <main class="editor-area">
33
+ <div id="welcome-screen" class="welcome-screen">
34
+ <h2>Welcome to DMN Editor</h2>
35
+ <p>Create a new model or import an existing DMN file to get started.</p>
36
+ <button class="btn btn-primary btn-large" onclick="document.getElementById('new-model-btn').click()">
37
+ Create New Model
38
+ </button>
39
+ </div>
40
+
41
+ <div id="editor-container" class="editor-container" style="display: none;">
42
+ <!-- Model Info -->
43
+ <div class="model-info">
44
+ <h2 id="model-name">Model Name</h2>
45
+ <span id="model-id" class="model-id"></span>
46
+ <button id="add-decision-btn" class="btn btn-sm btn-primary">Add Decision</button>
47
+ </div>
48
+
49
+ <!-- Tabs -->
50
+ <div class="tabs">
51
+ <button class="tab-btn active" data-tab="table">Decision Table</button>
52
+ <button class="tab-btn" data-tab="tree">Decision Tree</button>
53
+ <button class="tab-btn" data-tab="graph">Decision Graph</button>
54
+ <button class="tab-btn" data-tab="xml">DMN XML</button>
55
+ </div>
56
+
57
+ <!-- Tab Content -->
58
+ <div class="tab-content">
59
+ <!-- Decision Table Tab -->
60
+ <div id="table-tab" class="tab-pane active">
61
+ <div class="decision-selector">
62
+ <label>Select Decision:</label>
63
+ <select id="decision-select" class="form-control">
64
+ <option value="">No decisions yet</option>
65
+ </select>
66
+ </div>
67
+
68
+ <div id="decision-table-editor" class="decision-table-editor">
69
+ <div class="table-controls">
70
+ <label>Hit Policy:</label>
71
+ <select id="hit-policy-select" class="form-control">
72
+ <option value="UNIQUE">UNIQUE</option>
73
+ <option value="FIRST" selected>FIRST</option>
74
+ <option value="PRIORITY">PRIORITY</option>
75
+ <option value="ANY">ANY</option>
76
+ <option value="COLLECT">COLLECT</option>
77
+ </select>
78
+ <button id="add-input-btn" class="btn btn-sm">Add Input</button>
79
+ <button id="add-output-btn" class="btn btn-sm">Add Output</button>
80
+ <button id="add-rule-btn" class="btn btn-sm btn-primary">Add Rule</button>
81
+ </div>
82
+
83
+ <div class="table-wrapper">
84
+ <table id="decision-table" class="decision-table">
85
+ <thead>
86
+ <tr id="table-headers">
87
+ <th class="rule-number">#</th>
88
+ <!-- Input/output headers will be added dynamically -->
89
+ <th class="actions-col">Actions</th>
90
+ </tr>
91
+ <tr id="table-types">
92
+ <th></th>
93
+ <!-- Type annotations will be added dynamically -->
94
+ <th></th>
95
+ </tr>
96
+ </thead>
97
+ <tbody id="table-body">
98
+ <tr class="empty-row">
99
+ <td colspan="2">No rules defined. Click "Add Rule" to create one.</td>
100
+ </tr>
101
+ </tbody>
102
+ </table>
103
+ </div>
104
+ </div>
105
+ </div>
106
+
107
+ <!-- Decision Tree Tab -->
108
+ <div id="tree-tab" class="tab-pane">
109
+ <div class="tree-controls">
110
+ <button id="add-tree-node-btn" class="btn btn-sm btn-primary">Add Node</button>
111
+ <button id="visualize-tree-btn" class="btn btn-sm">Visualize</button>
112
+ </div>
113
+ <div id="tree-editor" class="tree-editor">
114
+ <p class="empty-state">Decision tree builder coming soon...</p>
115
+ </div>
116
+ <div id="tree-visualization" class="visualization-area"></div>
117
+ </div>
118
+
119
+ <!-- Decision Graph Tab -->
120
+ <div id="graph-tab" class="tab-pane">
121
+ <div class="graph-controls">
122
+ <button id="visualize-graph-btn" class="btn btn-sm btn-primary">Generate Graph</button>
123
+ <select id="graph-format-select" class="form-control">
124
+ <option value="svg">SVG</option>
125
+ <option value="mermaid">Mermaid</option>
126
+ <option value="dot">DOT</option>
127
+ </select>
128
+ </div>
129
+ <div id="graph-visualization" class="visualization-area"></div>
130
+ </div>
131
+
132
+ <!-- XML Tab -->
133
+ <div id="xml-tab" class="tab-pane">
134
+ <div class="xml-controls">
135
+ <button id="copy-xml-btn" class="btn btn-sm">Copy XML</button>
136
+ <button id="download-xml-btn" class="btn btn-sm btn-primary">Download</button>
137
+ </div>
138
+ <pre id="xml-content" class="xml-content"><code></code></pre>
139
+ </div>
140
+ </div>
141
+ </div>
142
+ </main>
143
+ </div>
144
+ </div>
145
+
146
+ <!-- Modals -->
147
+ <div id="new-model-modal" class="modal">
148
+ <div class="modal-content">
149
+ <h3>Create New DMN Model</h3>
150
+ <form id="new-model-form">
151
+ <div class="form-group">
152
+ <label for="model-name-input">Model Name:</label>
153
+ <input type="text" id="model-name-input" class="form-control" required>
154
+ </div>
155
+ <div class="form-group">
156
+ <label for="model-namespace-input">Namespace (optional):</label>
157
+ <input type="text" id="model-namespace-input" class="form-control"
158
+ placeholder="http://example.com/dmn/model">
159
+ </div>
160
+ <div class="modal-actions">
161
+ <button type="submit" class="btn btn-primary">Create</button>
162
+ <button type="button" class="btn btn-secondary" onclick="closeModal('new-model-modal')">Cancel</button>
163
+ </div>
164
+ </form>
165
+ </div>
166
+ </div>
167
+
168
+ <div id="add-decision-modal" class="modal">
169
+ <div class="modal-content">
170
+ <h3>Add Decision</h3>
171
+ <form id="add-decision-form">
172
+ <div class="form-group">
173
+ <label for="decision-id-input">Decision ID:</label>
174
+ <input type="text" id="decision-id-input" class="form-control" required>
175
+ </div>
176
+ <div class="form-group">
177
+ <label for="decision-name-input">Decision Name:</label>
178
+ <input type="text" id="decision-name-input" class="form-control" required>
179
+ </div>
180
+ <div class="form-group">
181
+ <label for="decision-type-select">Type:</label>
182
+ <select id="decision-type-select" class="form-control">
183
+ <option value="decision_table">Decision Table</option>
184
+ <option value="decision_tree">Decision Tree</option>
185
+ <option value="literal">Literal Expression</option>
186
+ </select>
187
+ </div>
188
+ <div class="modal-actions">
189
+ <button type="submit" class="btn btn-primary">Add</button>
190
+ <button type="button" class="btn btn-secondary" onclick="closeModal('add-decision-modal')">Cancel</button>
191
+ </div>
192
+ </form>
193
+ </div>
194
+ </div>
195
+
196
+ <div id="add-column-modal" class="modal">
197
+ <div class="modal-content">
198
+ <h3 id="column-modal-title">Add Column</h3>
199
+ <form id="add-column-form">
200
+ <input type="hidden" id="column-type" value="">
201
+ <div class="form-group">
202
+ <label for="column-id-input">ID:</label>
203
+ <input type="text" id="column-id-input" class="form-control" required>
204
+ </div>
205
+ <div class="form-group">
206
+ <label for="column-label-input">Label:</label>
207
+ <input type="text" id="column-label-input" class="form-control" required>
208
+ </div>
209
+ <div class="form-group">
210
+ <label for="column-type-input">Data Type:</label>
211
+ <select id="column-type-input" class="form-control">
212
+ <option value="string">String</option>
213
+ <option value="number">Number</option>
214
+ <option value="boolean">Boolean</option>
215
+ <option value="date">Date</option>
216
+ </select>
217
+ </div>
218
+ <div class="form-group" id="expression-group">
219
+ <label for="column-expression-input">Expression:</label>
220
+ <input type="text" id="column-expression-input" class="form-control">
221
+ </div>
222
+ <div class="modal-actions">
223
+ <button type="submit" class="btn btn-primary">Add</button>
224
+ <button type="button" class="btn btn-secondary" onclick="closeModal('add-column-modal')">Cancel</button>
225
+ </div>
226
+ </form>
227
+ </div>
228
+ </div>
229
+
230
+ <div id="import-modal" class="modal">
231
+ <div class="modal-content">
232
+ <h3>Import DMN File</h3>
233
+ <form id="import-form">
234
+ <div class="form-group">
235
+ <label for="import-file-input">Select DMN XML File:</label>
236
+ <input type="file" id="import-file-input" class="form-control" accept=".dmn,.xml" required>
237
+ </div>
238
+ <div class="modal-actions">
239
+ <button type="submit" class="btn btn-primary">Import</button>
240
+ <button type="button" class="btn btn-secondary" onclick="closeModal('import-modal')">Cancel</button>
241
+ </div>
242
+ </form>
243
+ </div>
244
+ </div>
245
+
246
+ <div id="notification" class="notification"></div>
247
+
248
+ <script src="dmn-editor.js"></script>
249
+ </body>
250
+ </html>