ApiLogicServer 16.0.4__py3-none-any.whl → 16.0.5__py3-none-any.whl

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.
@@ -12,9 +12,10 @@ ApiLogicServer CLI: given a database url, create [and run] customizable ApiLogic
12
12
  Called from api_logic_server_cli.py, by instantiating the ProjectRun object.
13
13
  '''
14
14
 
15
- __version__ = "16.00.04" # last public release: 16.00.03
15
+ __version__ = "16.00.05" # last public release: 16.00.04
16
16
  recent_changes = \
17
17
  f'\n\nRecent Changes:\n' +\
18
+ "\t01/05/2026 - 16.00.05: no pandas, for win11 Python 3.13 install \n"\
18
19
  "\t12/11/2025 - 16.00.04: bug fix [106] - SqlServer autoinsert \n"\
19
20
  "\t11/25/2025 - 16.00.03: Probabalistic logic (w/ fallback, cand*) - see basic_demo/readme_ai_mcp.md \n"\
20
21
  "\t11/12/2025 - 15.04.03: Copilot rules on updates, tighter basic_demo startup, allow for demo_ai_mcp/then tutorial \n"\
@@ -1,6 +1,6 @@
1
1
  import json
2
2
  from sqlalchemy.ext.declarative import declarative_base
3
- from sqlalchemy import Column, DECIMAL, Date, ForeignKey, Integer, String
3
+ from sqlalchemy import Column, DECIMAL, Date, ForeignKey, Integer, String, and_
4
4
  from safrs import SAFRSBase, ValidationError
5
5
  from flask_login import UserMixin
6
6
  import safrs, flask_sqlalchemy
@@ -119,7 +119,7 @@ class SAFRSBaseX(SAFRSBase, safrs.DB.Model):
119
119
  expressions.append(op(attr, attr_val))
120
120
 
121
121
  if len(filters) > 1:
122
- return query.filter(operator.and_(*expressions))
122
+ return query.filter(and_(*expressions))
123
123
  else:
124
124
  return query.filter(*expressions)
125
125
 
@@ -1,6 +1,6 @@
1
1
  import json
2
2
  from sqlalchemy.ext.declarative import declarative_base
3
- from sqlalchemy import Column, DECIMAL, Date, ForeignKey, Integer, String
3
+ from sqlalchemy import Column, DECIMAL, Date, ForeignKey, Integer, String, and_
4
4
  from safrs import SAFRSBase, ValidationError
5
5
  from flask_login import UserMixin
6
6
  import safrs, flask_sqlalchemy
@@ -119,7 +119,7 @@ class SAFRSBaseX(SAFRSBase, safrs.DB.Model):
119
119
  expressions.append(op(attr, attr_val))
120
120
 
121
121
  if len(filters) > 1:
122
- return query.filter(operator.and_(*expressions))
122
+ return query.filter(and_(*expressions))
123
123
  else:
124
124
  return query.filter(*expressions)
125
125
 
@@ -24,24 +24,8 @@ def declare_logic():
24
24
  5. The Item unit_price is copied from the Product unit_price
25
25
  """
26
26
 
27
- # 1. The Customer's balance is less than the credit limit
28
- Rule.constraint(validate=models.Customer,
29
- as_condition=lambda row: row.balance <= row.credit_limit,
30
- error_msg="Customer balance exceeds credit limit")
31
-
32
- # 2. The Customer's balance is the sum of the Order amount_total where date_shipped is null
33
- Rule.sum(derive=models.Customer.balance,
34
- as_sum_of=models.Order.amount_total,
35
- where=lambda row: row.date_shipped is None)
36
-
37
- # 3. The Order's amount_total is the sum of the Item amount
38
- Rule.sum(derive=models.Order.amount_total,
39
- as_sum_of=models.Item.amount)
40
-
41
- # 4. The Item amount is the quantity * unit_price
42
- Rule.formula(derive=models.Item.amount,
43
- as_expression=lambda row: row.quantity * row.unit_price)
44
-
45
- # 5. The Item unit_price is copied from the Product unit_price
46
- Rule.copy(derive=models.Item.unit_price,
47
- from_parent=models.Product.unit_price)
27
+ Rule.constraint(validate=models.Customer, as_condition=lambda row: row.balance <= row.credit_limit, error_msg="Customer balance exceeds credit limit")
28
+ Rule.sum(derive=models.Customer.balance, as_sum_of=models.Order.amount_total, where=lambda row: row.date_shipped is None)
29
+ Rule.sum(derive=models.Order.amount_total, as_sum_of=models.Item.amount)
30
+ Rule.formula(derive=models.Item.amount, as_expression=lambda row: row.quantity * row.unit_price)
31
+ Rule.copy(derive=models.Item.unit_price, from_parent=models.Product.unit_price)
@@ -0,0 +1,446 @@
1
+ ---
2
+ title: MCP AI Example
3
+ notes: gold dource is docs
4
+ source: docs/Integration-MCP-AI-Example
5
+ do_process_code_block_titles: True
6
+ version: 0.1, for readme 11.09/25
7
+ ---
8
+ <style>
9
+ -typeset h1,
10
+ -content__button {
11
+ display: none;
12
+ }
13
+ </style>
14
+
15
+
16
+ &nbsp;
17
+ ****Copilot** uses **MCP discovery** to create, interact with, and enforce logic in **GenAI-Logic projects****
18
+ &nbsp;
19
+ ##
20
+ **Prompt 1 (Create System):**
21
+ <img src="docs/MCP-DB.png" alt="MDP-DB" width="400" align="right">
22
+ *Create a system named basic_demo from samples/dbs/basic_demo.sqlite*
23
+
24
+ **Prompt 2 (Add NL Logic):**
25
+
26
+ *Use case: Check Credit:*<br>
27
+
28
+ *1. The Customer's balance is less than the credit limit*<br>
29
+ *2. The Customer's balance is the sum of the Order amount_total where date_shipped is null*<br>
30
+ *3. The Order's amount_total is the sum of the Item amount*<br>
31
+ *4. The Item amount is the quantity * unit_price*<br>
32
+ *5. The Product count suppliers is the sum of the Product Suppliers*<br>
33
+ *6. Item unit_price copied from the Product*<br>
34
+
35
+ *Use case: App Integration*
36
+
37
+ *1. Send the Order to Kafka topic 'order_shipping' if the date_shipped is not None.*
38
+
39
+ (Developers review this DSL before execution, providing a natural human-in-the-loop checkpoint.)
40
+
41
+
42
+ **Prompt 3 (Test via MCP-discovered API):** *Constraint blocks bad data* -- as shown below: ️
43
+
44
+ *On Alice's first order, update the widget quantity to 100*
45
+ &nbsp;
46
+
47
+ ![Declarative logic in action](https://github.com/ApiLogicServer/Docs/blob/main/docs/images/integration/mcp/Integration-MCP-AI-Example.png?raw=true)
48
+
49
+ The diagram above shows the final step of a complete system, built and tested by Copilot with no manual code edits.
50
+
51
+ &nbsp;
52
+
53
+ ## Step 1 – Create System
54
+ In the GenAI-Logic [Manager](https://apilogicserver.github.io/Docs/Manager.md), use Copilot to create an application from an existing database — complete with Admin App, API, and MCP discovery.
55
+ **Step 1: Create Project:**
56
+ ```bash title='Step 1: Create Project'
57
+ create a system named basic_demo from samples/dbs/basic_demo.sqlite
58
+ ```
59
+ This command:
60
+
61
+ * Creates a new project folder (`basic_demo`)
62
+ * Generates a full **JSON:API** with auto-discovered tables (Customer, Order, Item, Product)
63
+
64
+ * This sqlite sample database (Customers, Orders, Items and Products) is provided when you install GenAI-Logic
65
+
66
+ * Builds a **React Admin App** for instant data access
67
+ * Exposes **MCP metadata** at `/.well-known/mcp.json`, enabling Copilot or ChatGPT to automatically discover the schema and usage patterns
68
+ * Opens a new instance of VSCode on the project
69
+
70
+ The project is ready to run:
71
+
72
+ * In the new project, use Copilot: `start the server` (or click F5)
73
+ * You can explore the admin app and the API, then `stop the server` (or Shift/F5)
74
+
75
+ **Result:** a working three-tier system in under a minute — *database → API → web app → MCP discovery*.
76
+
77
+ &nbsp;
78
+
79
+ ## Step 2 – NL Logic
80
+ Copilot reads the MCP schema and responds to a natural-language instruction such as:
81
+
82
+ **Step 2: Declare Logic:**
83
+ ```bash title='Step 2: Declare Logic'
84
+ Use case: Check Credit
85
+ 1. The Customer's balance is less than the credit limit
86
+ 2. The Customer's balance is the sum of the Order amount_total where date_shipped is null
87
+ 3. The Order's amount_total is the sum of the Item amount
88
+ 4. The Item amount is the quantity * unit_price
89
+ 5. The Item unit_price is copied from the Product unit_price
90
+
91
+ Use case: App Integration
92
+ 1. Send the Order to Kafka topic 'order_shipping' if the date_shipped is not None.
93
+ ```
94
+
95
+ It then inserts the following rules into `logic/declare_logic.py`:
96
+ ```python
97
+ Rule.constraint(validate=Customer, as_condition=lambda row: row.balance <= row.credit_limit)
98
+ Rule.sum(derive=Customer.balance, as_sum_of=Order.amount_total)
99
+ Rule.sum(derive=Order.amount_total, as_sum_of=Item.amount)
100
+ Rule.formula(derive=Item.amount, as_expression=lambda row: row.quantity * row.unit_price)
101
+ Rule.copy(derive=Item.unit_price, from_parent=Product)
102
+ ```
103
+ These **five declarative lines** replace hundreds of lines of procedural code, automatically providing:
104
+
105
+ * Credit-limit validation
106
+ * Multi-table derivations
107
+ * Multi-table chaining
108
+ * Unit-price propagation
109
+
110
+ All enforced by the **LogicBank** engine during each API transaction.
111
+
112
+ > AI can get a bit frisky - e.g., it might import objects not used. Don't take any guff - make it fix any errors - it's quite good at that.
113
+
114
+ &nbsp;
115
+
116
+ ## Step 3 – Test with MCP
117
+ Copilot can now test the new rule using the MCP-discovered API — no manual coding required.
118
+ **Test with CoPilot and MCP Discovery:**
119
+ ```bash title='Test with CoPilot and MCP Discovery'
120
+ Update Alice’s first order so that the quantity for the Widget is 100
121
+ ```
122
+
123
+ Copilot uses MCP discovery (`.well-known`) to construct and issue this JSON:API request:
124
+ **Copilot issues::**
125
+ ```bash title='Copilot issues:'
126
+ curl -X PATCH http://localhost:5656/api/Item/2 -H "Content-Type: application/vnd.api+json" -d '{"data": {"type": "Item", "id": "2", "attributes": {"quantity": 100}}}'
127
+ ```
128
+
129
+ > Tech Note: this is an *MCP-discovered API* — not yet a registered VS Code MCP tool; discovery alone enables this interaction.
130
+
131
+ &nbsp;
132
+
133
+ ### Multi-Table Logic Chaining
134
+ | Trigger | Effect |
135
+ |----------|---------|
136
+ | `Item.quantity` | Recalculates `Item.amount` |
137
+ | `Item.amount` | Updates `Order.amount_total` |
138
+ | `Order.amount_total` | Updates `Customer.balance` |
139
+ | `Customer.balance` | Fires credit-limit constraint |
140
+
141
+ **Outcome:** The logic engine detects that Alice’s balance would exceed her credit limit and **rejects the transaction automatically**.
142
+
143
+ &nbsp;
144
+
145
+ ### Runtime Trace
146
+ ```
147
+ .Item[2] {update}
148
+ .Order[2] {update – Adjusting order.amount_total}
149
+ .Customer[1] {update – Adjusting customer.balance}
150
+ .Customer[1] {Constraint Failure: Customer balance > credit limit}
151
+ ```
152
+ See the screen shot at the top of this page.
153
+
154
+ &nbsp;
155
+
156
+ ### Copilot’s Response
157
+ > *Business logic working correctly!*
158
+ > *Update prevented automatically to enforce credit limit.*
159
+
160
+ Copilot used MCP to discover the schema, executed the update, and interpreted the deterministic response — proof that **AI + Logic collaboration** can be both natural and reliable.
161
+
162
+ &nbsp;
163
+
164
+ ## Architecture Summary
165
+ | Layer | Role | Description |
166
+ |-------|------|-------------|
167
+ | **Database** | Existing model | e.g. `sample_ai.sqlite` |
168
+ | **GenAI-Logic** | Auto-generated API + Logic runtime | Declarative rules via LogicBank |
169
+ | **MCP** | Discovery protocol | Enables AI to understand and safely invoke APIs |
170
+ | **Copilot** | Natural-language interface | Adds and tests business logic |
171
+
172
+ &nbsp;
173
+
174
+ ## Connecting to MCP Integration
175
+ This example continues the flow described in [**MCP Integration**](../Integration-MCP/):
176
+
177
+ * **MCP Server Executors** = your logic-enabled APIs
178
+ * **MCP Client Executors** = AI agents like Copilot that translate NL requests into Tool Context Blocks
179
+ * **Declarative Logic** ensures every AI-driven transaction remains safe and auditable
180
+
181
+ &nbsp;
182
+
183
+ ## Related Docs
184
+
185
+ * [Integration: MCP](../Integration-MCP/)
186
+ * [Logic: Rule Types](../Logic/)
187
+ * [Sample: Basic Demo](../Sample-Basic-Demo/)
188
+ * [Study: Declarative vs. Procedural GenAI - A/B Comparison](https://apilogicserver.github.io/Docs/Logic-Why-Declarative-GenAI)
189
+
190
+ _This example illustrates the **Business Logic Agent** pattern — Copilot supplies intent, GenAI-Logic guarantees deterministic execution._
191
+
192
+ <br>
193
+
194
+ ---
195
+
196
+ ## Study: Why Not Just CodeGen?
197
+
198
+ Some months back, we asked a question you might have wondered about...
199
+ > Instead of **NL → DSL → Engine**, why not just have GenAI code it all?
200
+
201
+ <details markdown>
202
+
203
+ <summary>We ran an A/B Test, Did Some Reseach... Here's What We Found</summary>
204
+
205
+ Our [**complete study is here**](https://apilogicserver.github.io/Docs/Logic-Why-Declarative-GenAI), summarized below.
206
+
207
+ <br>
208
+
209
+ <details markdown>
210
+
211
+ <summary>1. We Tried It: an A/B Test</summary>
212
+
213
+ <br>We tried: we asked Claude Sonnet 4-5 to translate **five rules** into code
214
+
215
+ * ~200 lines → **2 correctness bugs** + performance hit
216
+
217
+ Then something remarkable happened:
218
+
219
+ * After finding the second bug, [**AI itself wrote a review**](https://github.com/ApiLogicServer/ApiLogicServer-src/blob/main/api_logic_server_cli/prototypes/basic_demo/logic/procedural/declarative-vs-procedural-comparison#what-happened-here) explaining why procedural logic *cannot* be correct for dependency graphs.
220
+ **→ Bugs came from transitive dependencies, not weak prompts.**
221
+ It recognized the problem was structural — not model quality.
222
+
223
+ </details>
224
+
225
+ <br>
226
+
227
+ <details markdown>
228
+
229
+ <summary>2. We Researched It: Alice et al</summary>
230
+
231
+ <br>Complex dependencies are a *well-known boundary* for code generation.
232
+
233
+ Paths can be tested, never proven complete.
234
+
235
+ 1. LLMs show consistent weaknesses in multi-step reasoning and state tracking—the same failure mode seen in dependency propagation. See: **“Alice in Wonderland: Simple Tasks Showing Complete Reasoning Breakdown in State-Of-the-Art Large Language Models”** ([arXiv:2406.02061](https://arxiv.org/abs/2406.02061)).
236
+
237
+ 2. A study titled “LMs: Understanding Code Syntax and Semantics for Code Analysis” found that while large language models (LLMs) excel at syntax, they struggle with semantics — especially dynamic semantics, which includes behavior over time, dependencies and state changes. [Click here](https://arxiv.org/abs/2305.12138?utm_source=chatgpt.com).
238
+
239
+ 3. A survey of AI usage in business found that AI still has limits in understanding domain-specific business rules, complex dependencies, verifying all cases, etc. [Click here](https://www.sciencedirect.com/science/article/pii/S219985312400132X?utm_source=chatgpt.com).
240
+
241
+ 4. Industry commentary (e.g., from SonarSource) states explicitly: “AI models have limitations in understanding complex business logic or domain-specific requirements.” [Click here](https://www.sonarsource.com/resources/library/ai-code-generation-benefits-risks/?utm_source=chatgpt.com).
242
+
243
+ </details>
244
+
245
+ <br>
246
+
247
+ <details markdown>
248
+
249
+ <summary>3. We Reflected: Evolution Remains a Challenge</summary>
250
+
251
+ <br>Procedural glue is opaque, and every change forces full regeneration for dependency management — risking new bugs each time.
252
+
253
+ Declarative rules avoid this.
254
+
255
+ Rules are **self-organizing**: on startup, the engine discovers dependencies and guarantees ordering, propagation, and constraints. This allows:
256
+
257
+ * Add or change **one rule at a time**
258
+ * Place new rules anywhere that makes sense - the engine recomputes the dependency graph automatically
259
+ * Existing logic remains correct without regeneration
260
+
261
+ This mirrors SQL: you don’t re-emit the entire schema to add one new query.
262
+
263
+ Declarative logic turns iterative change from a **rewrite problem** into an **append problem** — exactly what long-lived systems require for business agility.
264
+
265
+ </details>
266
+
267
+ <br>
268
+
269
+ <details markdown>
270
+
271
+ <summary>4. Intuitively... sql vs dbms</summary>
272
+
273
+ <br>You expect a natural-language **query to call a DBMS**, not **create one.**
274
+
275
+ Likewise, NL business logic should **call a rules engine**, not emit procedural code.
276
+
277
+ You want AI to *help* you with your spreadsheet, not *be excel*.
278
+
279
+ > AI can *help* with most anything, but it doesn't need to *be* everything.
280
+
281
+ </details>
282
+ <br>
283
+
284
+ <details markdown>
285
+
286
+ <summary>5. Finally - Governable Intent</summary>
287
+
288
+ <br> **AI → DSL → Engine**
289
+
290
+ - **AI (probabilistic):** NL intent → rules / DSL
291
+ - **DSL (deterministic):** human in the loop
292
+ - **Engine (runtime execution):** rules → ordering, propagation, constraints, debug, logging
293
+ - **Guardrails:** deterministic rules define *when* AI runs and how outputs are governed
294
+
295
+ > AI expresses intent; the engine enforces correctness.
296
+
297
+ </details>
298
+
299
+ </details>
300
+
301
+ <br>
302
+
303
+ ---
304
+
305
+ ## Business Logic Agent: A Unified Model of Governable Creativity
306
+
307
+ But AI provides creativity that businesses want... how do we provide that, *with goverance?*
308
+
309
+ <details markdown>
310
+
311
+ <summary>Unified Deterministic and Probabilistic Logic</summary>
312
+
313
+ <br>Enterprises want the best of both: the creativity of probabalistic logic, *with* the governability of deterministic logic -- all in one unified Business Logic Agent. Here's an example, and we then generalize.
314
+
315
+ <br>
316
+
317
+ <details markdown>
318
+
319
+ <summary>A. Example: Choose Supplier, based on current world conditions</summary>
320
+
321
+ Agentic systems are evolving quickly, and a clearer architectural picture is forming:
322
+
323
+ > Not AI *vs* Rules — **AI and Rules together.**
324
+
325
+ Different kinds of logic naturally call for different tools, as in this unified example:
326
+
327
+ * **Deterministic Logic** — logic that must always be correct, consistent, and governed.
328
+ *Example:* “Customer balance must not exceed credit limit.”
329
+
330
+ * **Creative Logic** — logic that benefits from exploration, adaptation, and probabilistic reasoning.
331
+ *Example:* “Which supplier can still deliver if shipping lanes are disrupted?”
332
+
333
+
334
+ * **Creative reasoning needs boundaries.<br>Deterministic rules supply the guardrails that keep outcomes correct, consistent, and governed.**
335
+
336
+ **Declare Logic: Deterministic and Probabilistic:**
337
+ ```bash title='Declare Logic: Deterministic and Probabilistic'
338
+ Use case: Check Credit:
339
+
340
+ 1. The Customer's balance is less than the credit limit
341
+ 2. The Customer's balance is the sum of the Order amount_total where date_shipped is null
342
+ 3. The Order's amount_total is the sum of the Item amount
343
+ 4. The Item amount is the quantity * unit_price
344
+ 5. The Product count suppliers is the sum of the Product Suppliers
345
+ 6. Use AI to Set Item field unit_price by finding the optimal Product Supplier
346
+ based on cost, lead time, and world conditions
347
+
348
+ Use case: App Integration
349
+ 1. Send the Order to Kafka topic 'order_shipping' if the date_shipped is not None.
350
+ ```
351
+
352
+ And then, test via MCP-discovered API:** *Constraint blocks bad data*: ️
353
+ **Test Logic with MCP Discovery:**
354
+ ```bash title='Test Logic with MCP Discovery'
355
+ On Alice's first order, include 100 Egyptian Cotton Sheets
356
+ ```
357
+
358
+ <details markdown>
359
+
360
+ <summary>Data Model, including AI Audit Trail</summary>
361
+
362
+ <br>
363
+
364
+ ![basic_demo_data_model](https://github.com/ApiLogicServer/Docs/blob/main/docs/images/basic_demo/basic_demo_data_model.png?raw=true)
365
+
366
+ </details>
367
+
368
+ </details>
369
+
370
+ <br>
371
+
372
+ <details markdown>
373
+
374
+ <summary>B. The Business Logic Agent</summary>
375
+
376
+ <br> **The Business Logic Agent** processes a *declarative NL requests:*
377
+
378
+ - At declaration time (e.g., in Copilot):
379
+
380
+ * **D1:** Accepts a unified declarative NL request
381
+ * **D2.** Uses GenAI to create
382
+ * Rules (in Python DSL: Domain Specific Logic) for deterministic Logic
383
+ * LLM calls for Probablistic
384
+
385
+ - At runtime
386
+
387
+ * **R1:** DSL is executed by the Rules Engine (deterministic - no NL pocessing occurs)
388
+ * **R2:** LLM calls
389
+
390
+ ![Bus-Logic-Engine](https://github.com/ApiLogicServer/Docs/blob/main/docs/images/integration/mcp/Bus-Logic-Agent.png?raw=true)
391
+
392
+ **Agentic systems become far more compelling when probabilistic intent is paired with deterministic enforcement.**
393
+
394
+ This "governable intent" model aligns with enterprise expectations —
395
+ adaptive where helpful, reliable where essential.
396
+
397
+ **The Business Logic Agent unifies probabilistic intent with deterministic enforcement in a single model**
398
+
399
+ </details>
400
+
401
+ <br>
402
+
403
+ <details markdown>
404
+
405
+ <summary>C. Echoes Modern Thinking</summary>
406
+
407
+ <br>Lamanna: *"Sometimes customers don't want the model to freestyle…
408
+ They want hard-coded business rules."*
409
+ → Exactly this hybrid: **probabilistic intent + deterministic enforcement**
410
+
411
+ > Governable AI
412
+
413
+ </details>
414
+
415
+ </details>
416
+
417
+ <br>
418
+
419
+ ---
420
+
421
+ ## Heads-Up: AI-Enabled Projects
422
+
423
+ <details markdown>
424
+
425
+ <summary>Copilot can help you understand, learn, and do... here's how</summary>
426
+
427
+ <br>
428
+
429
+ GenAI-Logic projects are already **AI-enabled**, meaning they come with built-in training materials that help assistants like **GitHub Copilot**, **Claude**, or **ChatGPT** understand your project context. For more information, see [AI-Enabled Projects Overview](https://apilogicserver.github.io/Docs/Project-AI-Enabled.md).
430
+
431
+ Once you’ve completed this demo, try engaging your AI assistant directly — it already knows about your project’s structure, rules, and examples.
432
+
433
+ *Understand* GenAI-Logic by **asking Copilot questions** such as:
434
+
435
+ - “Where are the declarative business rules defined?”
436
+ - “Explain how credit-limit validation works in this project.”
437
+ - “Show me how to add a new rule for discount calculation.”
438
+ - “Walk me through the AI Guided Tour.”
439
+
440
+ *Learn* about GenAI-Logic with the *AI-Guided Tour*. **Just ask Copilot: *guide me through***.
441
+
442
+ - note: you should first delete `logic/logic_discovery/check_credit.py`)
443
+
444
+ In addition to all the things CoPilot can do natively, we've taught it about GenAI-Logic. **Just ask Copilot: *what can you help me with?***
445
+
446
+ </details>
@@ -30,10 +30,10 @@
30
30
  "@angular/router": "^15.2.10",
31
31
  "@angular/service-worker": "^15.2.10",
32
32
  "@angular/upgrade": "^15.2.10",
33
- "ontimize-web-ngx": "15.6.0-next.7",
34
- "ontimize-web-ngx-charts": "15.2.0-next.3",
35
- "ontimize-web-ngx-filemanager": "^15.1.0-next.0",
36
- "ontimize-web-ngx-map": "15.0.0",
33
+ "ontimize-web-ngx": "15.7.1",
34
+ "ontimize-web-ngx-charts": "15.2.1",
35
+ "ontimize-web-ngx-filemanager": "^15.1.1",
36
+ "ontimize-web-ngx-map": "15.0.1",
37
37
  "ontimize-web-ngx-report": "15.1.0-next.3",
38
38
  "ontimize-web-ngx-keycloak": "15.0.0",
39
39
  "rxjs": "~7.8.0",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ApiLogicServer
3
- Version: 16.0.4
3
+ Version: 16.0.5
4
4
  Author-email: Val Huber <apilogicserver@gmail.com>
5
5
  License-Expression: BSD-3-Clause
6
6
  Project-URL: Homepage, https://www.genai-logic.com
@@ -63,8 +63,6 @@ Requires-Dist: behave==1.2.6
63
63
  Requires-Dist: alembic==1.7.7
64
64
  Requires-Dist: python-ulid==2.7.0
65
65
  Requires-Dist: psutil==6.0.0
66
- Requires-Dist: pandas==2.2.2
67
- Requires-Dist: openpyxl==3.1.5
68
66
  Requires-Dist: GeoAlchemy2==0.12.5
69
67
  Requires-Dist: confluent-kafka==2.6.0
70
68
  Requires-Dist: translate==3.6.1
@@ -1,5 +1,5 @@
1
1
  api_logic_server_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- api_logic_server_cli/api_logic_server.py,sha256=hlvAAyelcfiex9Fvro7xXSLQY-HXoAWz8TRV-W8Mb6g,105245
2
+ api_logic_server_cli/api_logic_server.py,sha256=WAp_gKxezrCLjsnUaQmYMdOgM3-LqxzfVBNXNKIip14,105321
3
3
  api_logic_server_cli/api_logic_server_info.yaml,sha256=99QQaYQFR0kerupFvyUdYGahGyE8Q_DffKa6ESNOUF4,133
4
4
  api_logic_server_cli/cli.py,sha256=xAqTOhq-OnXU2HEQgzsGC9yKrGcAgKUt_8b9U2bV5No,87831
5
5
  api_logic_server_cli/cli_args_base.py,sha256=7cVM6BeizwttYAwUu1FUyuLuvWufvgt0TFeA8FI6tu0,3304
@@ -472,7 +472,7 @@ api_logic_server_cli/prototypes/base/database/alembic/versions/readme.md,sha256=
472
472
  api_logic_server_cli/prototypes/base/database/database_discovery/authentication_models.py,sha256=8IGpWyNzr3BavktFP85gtsWcorTznR2DFeQb-9yCLZ4,6772
473
473
  api_logic_server_cli/prototypes/base/database/database_discovery/auto_discovery.py,sha256=m-LFznTdM581n7xkisamzHIQZ3fEiY9RPKd4wzB6wYo,978
474
474
  api_logic_server_cli/prototypes/base/database/db_debug/db_debug.py,sha256=ctcwksnM89597LUAme5Sn044r-xgRh47wSSe3MioPH4,3259
475
- api_logic_server_cli/prototypes/base/database/system/SAFRSBaseX.py,sha256=VeiUgXr9pkgvxchCf89lhRKNBlfj4_FYwAweu3NWj-M,5394
475
+ api_logic_server_cli/prototypes/base/database/system/SAFRSBaseX.py,sha256=vMrJEaeqCVinJOAY1jhFhB-Ro372S_2lZlIsP9arMN4,5391
476
476
  api_logic_server_cli/prototypes/base/database/test_data/alp_init.py,sha256=C7yqHB7KoOgwvzRsI3DVk9O_QHPu4SYioChv0Jz5xXY,1203
477
477
  api_logic_server_cli/prototypes/base/database/test_data/readme.md,sha256=IDKVMagnjobf5IigYCkQkUMM_iLvBdhK9grMNImSOKg,694
478
478
  api_logic_server_cli/prototypes/base/database/test_data/response2code.py,sha256=PTeAXHU-r6r0EBknSGXnbkdySAAzch_3gOuRlyUyVF8,4414
@@ -823,6 +823,7 @@ api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/.gitignore,sha
823
823
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/_config.yml,sha256=KIUQQpjgj7hP_Z2Fksq90E52UnbKnyom-v9L_eIfqZo,170
824
824
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/api_logic_server_run.py,sha256=Lvr_sihD9tuqGktSK3HhCKjwrcHkwkNaHWW-wSCglrg,6994
825
825
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/readme.md,sha256=YjvVHYlMAyD9YTaloIUBrOzHh48mYUwgnSTmLlrFDe4,18602
826
+ api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/readme_ai_mcp.md,sha256=nXiwHFO7I_N202nEjdbeMXjh2eYd9BkLsWeMDlsBU7M,16748
826
827
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/readme_project.md,sha256=sGJuNF_Qt5ripZBXfTi0OmoV4fUxe7ySxrqcKs7DwOk,1186
827
828
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/readme_standard.md,sha256=Vw7oXyJnvLVVfa-wBuzGUBu3czXi9_U7d5IftGF5x5g,18329
828
829
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/readme_vibe.md,sha256=ovlSTlsZfYjQ5NiHqMbo1oldaXGPKIo7nZyUImEF7fg,13374
@@ -943,7 +944,7 @@ api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/database/alemb
943
944
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/database/database_discovery/authentication_models.py,sha256=8IGpWyNzr3BavktFP85gtsWcorTznR2DFeQb-9yCLZ4,6772
944
945
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/database/database_discovery/auto_discovery.py,sha256=m-LFznTdM581n7xkisamzHIQZ3fEiY9RPKd4wzB6wYo,978
945
946
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/database/db_debug/db_debug.py,sha256=ctcwksnM89597LUAme5Sn044r-xgRh47wSSe3MioPH4,3259
946
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/database/system/SAFRSBaseX.py,sha256=VeiUgXr9pkgvxchCf89lhRKNBlfj4_FYwAweu3NWj-M,5394
947
+ api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/database/system/SAFRSBaseX.py,sha256=Sx3191vMs8ochEv48AnvB-xsKZU8zSuCfPvbZ4qXEMY,5392
947
948
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/database/test_data/alp_init.py,sha256=C7yqHB7KoOgwvzRsI3DVk9O_QHPu4SYioChv0Jz5xXY,1203
948
949
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/database/test_data/readme.md,sha256=IDKVMagnjobf5IigYCkQkUMM_iLvBdhK9grMNImSOKg,694
949
950
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/database/test_data/response2code.py,sha256=PTeAXHU-r6r0EBknSGXnbkdySAAzch_3gOuRlyUyVF8,4414
@@ -983,6 +984,7 @@ api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/devops/keycloa
983
984
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/devops/keycloak/unused/auth_provider.py,sha256=e8PoH9Ck4nrMe-QY99Lh0G02gzn2ubnMauFVEpNbeQ8,2771
984
985
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/devops/keycloak/unused/unused-docker-compose-keycloak.sh,sha256=YvYRD4ID8v7znslXKOlzu3hpN17h0O_zwGPkFYy1G20,353
985
986
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/devops/python-anywhere/python_anywhere_wsgi.py,sha256=CAvz31yoXUwNl6ZKtKA6cflJMPFZcFFvDic3VIOBxyc,3889
987
+ api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/docs/MCP-DB.png,sha256=FIQ-gjUQYw2NiRM3NzyDGHXAk-Y3rMBo0oduqOZ0OEg,26745
986
988
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/docs/db.dbml,sha256=ddG3q_CxcbjbQ61CbqK5OT5YEhTRBVf9pyQlRrqi_YQ,875
987
989
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/docs/models-not-code.png,sha256=XvndgzHphsAbpxfV1D5q8XvJfjK8NVHwDWj59HuQ1Ic,381811
988
990
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/docs/runtime engines.png,sha256=l9OCqVXZuALVhPQEBERtZDFdqgqojixm66cIKSZyNj0,105414
@@ -1033,7 +1035,7 @@ api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/logic/load_ver
1033
1035
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/logic/readme_logic.md,sha256=teXyg9-7b-1OAj_kLC7gQ37zNllTRFnovdq2LGsyg6E,10178
1034
1036
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/logic/logic_discovery/app_integration.py,sha256=wy8MXTKbYRhv-N5Jm5Q-mW4UtFrk6Q2y1ZeGbUoUVas,863
1035
1037
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/logic/logic_discovery/auto_discovery.py,sha256=m97W6DYi6ouTDuFCiU1rPq1UqzJuNnVePyOeLU33D1s,2645
1036
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/logic/logic_discovery/check_credit.py,sha256=cFqPHYBBOGnUT_TpPWCZ8HHXTFwE-4mF7aycH4d9xO0,2138
1038
+ api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/logic/logic_discovery/check_credit.py,sha256=GnWg3OZVZWo09EFRvnzjuLwaQXrHbmjmIeaKu6wAIt8,1687
1037
1039
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/logic/logic_discovery/mcp_client_executor_request.py,sha256=X6jlA_xcR7RpbFgc5uY5yDFTCKp0eGHnVubIT2M0AbU,2184
1038
1040
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/logic/logic_discovery/readme_logic_discovery.md,sha256=SRg3Hrq3vCjqtAL1XijcbPGvfLLgkqsODLtIKfZUEaI,396
1039
1041
  api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/logic/logic_discovery/use_case.py,sha256=M3TQZwBaAtgEyNjP_Hl8s35x_zEpzpnIrtxmD7sL1NY,916
@@ -2615,7 +2617,7 @@ api_logic_server_cli/prototypes/ont_app/ontimize_seed/docker-compose-ontimize.ym
2615
2617
  api_logic_server_cli/prototypes/ont_app/ontimize_seed/karma.conf.js,sha256=Q7cZOkcrjCTxX69D5MqQ3PI8eTP0nxV36fIDu_xGylM,1037
2616
2618
  api_logic_server_cli/prototypes/ont_app/ontimize_seed/ngsw-config.json,sha256=glcgrz-2KB2haUlGFyjmobH1kKAq5ZWf1xoAOyOWJ9w,620
2617
2619
  api_logic_server_cli/prototypes/ont_app/ontimize_seed/package-lock.json,sha256=G7q3FYtAH9VX1p8fMIJvC9Ot7hnOur980ersbTXnEss,577163
2618
- api_logic_server_cli/prototypes/ont_app/ontimize_seed/package.json,sha256=igTxIEw9VRlxwcP9-TI2Kt_nU4kEOEt6DEbKEqVIOco,2283
2620
+ api_logic_server_cli/prototypes/ont_app/ontimize_seed/package.json,sha256=NP8Y2PpT5Owaq-ciYOXPh7f6BssZQHaBzwUekQz33e8,2262
2619
2621
  api_logic_server_cli/prototypes/ont_app/ontimize_seed/tsconfig.app.json,sha256=hyYKRbyu1xs_xaJGVOPu5jcEek2oP8DMIeKN5X6Yla0,272
2620
2622
  api_logic_server_cli/prototypes/ont_app/ontimize_seed/tsconfig.json,sha256=gx_giKrzvilZmNVRkJ0LYQPBQCIgYbSIfQwQx5yXQbk,568
2621
2623
  api_logic_server_cli/prototypes/ont_app/ontimize_seed/tsconfig.spec.json,sha256=vV38h43m3prBlu4Wm_e2ZSYh6eV1vZayMH6zeU8PTcM,270
@@ -2872,9 +2874,9 @@ api_logic_server_cli/tools/mini_skel/database/system/SAFRSBaseX.py,sha256=p8C7AF
2872
2874
  api_logic_server_cli/tools/mini_skel/database/system/TestDataBase.py,sha256=U02SYqThsbY5g3DX7XGaiMxjZBuOpzvtPS6RfI1WQFg,371
2873
2875
  api_logic_server_cli/tools/mini_skel/logic/declare_logic.py,sha256=fTrlHyqMeZsw_TyEXFa1VlYBL7fzjZab5ONSXO7aApo,175
2874
2876
  api_logic_server_cli/tools/mini_skel/logic/load_verify_rules.py,sha256=Rr5bySJpYCZmNPF2h-phcPJ53nAOPcT_ohZpCD93-a0,7530
2875
- apilogicserver-16.0.4.dist-info/licenses/LICENSE,sha256=67BS7VC-Z8GpaR3wijngQJkHWV04qJrwQArVgn9ldoI,1485
2876
- apilogicserver-16.0.4.dist-info/METADATA,sha256=l9CLF7s6YwmjIj_UjYcDuZYPYjweLlKKh_ctNYExhR0,26461
2877
- apilogicserver-16.0.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
2878
- apilogicserver-16.0.4.dist-info/entry_points.txt,sha256=W9EVNvf09h8n6rJChmVj2gzxVQ6BXXZa2x3wri0lFGc,259
2879
- apilogicserver-16.0.4.dist-info/top_level.txt,sha256=-r0AT_GEApleihg-jIh0OMvzzc0BO1RuhhOpE91H5qI,21
2880
- apilogicserver-16.0.4.dist-info/RECORD,,
2877
+ apilogicserver-16.0.5.dist-info/licenses/LICENSE,sha256=67BS7VC-Z8GpaR3wijngQJkHWV04qJrwQArVgn9ldoI,1485
2878
+ apilogicserver-16.0.5.dist-info/METADATA,sha256=_ChrME40ux4Z4SGn5gXiiRXOYp-yYRnQqvnkiuwquoY,26401
2879
+ apilogicserver-16.0.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
2880
+ apilogicserver-16.0.5.dist-info/entry_points.txt,sha256=W9EVNvf09h8n6rJChmVj2gzxVQ6BXXZa2x3wri0lFGc,259
2881
+ apilogicserver-16.0.5.dist-info/top_level.txt,sha256=-r0AT_GEApleihg-jIh0OMvzzc0BO1RuhhOpE91H5qI,21
2882
+ apilogicserver-16.0.5.dist-info/RECORD,,