syntaxmatrix 2.5.8.2__py3-none-any.whl → 2.6.1__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.
- syntaxmatrix/agentic/agents.py +1149 -54
- syntaxmatrix/agentic/agents_orchestrer.py +326 -0
- syntaxmatrix/agentic/code_tools_registry.py +27 -32
- syntaxmatrix/commentary.py +16 -16
- syntaxmatrix/core.py +145 -75
- syntaxmatrix/db.py +416 -4
- syntaxmatrix/{display.py → display_html.py} +2 -6
- syntaxmatrix/gpt_models_latest.py +1 -1
- syntaxmatrix/media/__init__.py +0 -0
- syntaxmatrix/media/media_pixabay.py +277 -0
- syntaxmatrix/models.py +1 -1
- syntaxmatrix/page_builder_defaults.py +183 -0
- syntaxmatrix/page_builder_generation.py +1122 -0
- syntaxmatrix/page_layout_contract.py +644 -0
- syntaxmatrix/page_patch_publish.py +1471 -0
- syntaxmatrix/preface.py +128 -8
- syntaxmatrix/profiles.py +26 -13
- syntaxmatrix/routes.py +1475 -429
- syntaxmatrix/selftest_page_templates.py +360 -0
- syntaxmatrix/settings/client_items.py +28 -0
- syntaxmatrix/settings/model_map.py +1022 -208
- syntaxmatrix/settings/prompts.py +328 -130
- syntaxmatrix/static/assets/hero-default.svg +22 -0
- syntaxmatrix/static/icons/bot-icon.png +0 -0
- syntaxmatrix/static/icons/favicon.png +0 -0
- syntaxmatrix/static/icons/logo.png +0 -0
- syntaxmatrix/static/icons/logo3.png +0 -0
- syntaxmatrix/templates/admin_branding.html +104 -0
- syntaxmatrix/templates/admin_secretes.html +108 -0
- syntaxmatrix/templates/dashboard.html +116 -72
- syntaxmatrix/templates/edit_page.html +2535 -0
- syntaxmatrix/utils.py +2365 -2411
- {syntaxmatrix-2.5.8.2.dist-info → syntaxmatrix-2.6.1.dist-info}/METADATA +6 -2
- {syntaxmatrix-2.5.8.2.dist-info → syntaxmatrix-2.6.1.dist-info}/RECORD +37 -24
- syntaxmatrix/generate_page.py +0 -644
- syntaxmatrix/static/icons/hero_bg.jpg +0 -0
- {syntaxmatrix-2.5.8.2.dist-info → syntaxmatrix-2.6.1.dist-info}/WHEEL +0 -0
- {syntaxmatrix-2.5.8.2.dist-info → syntaxmatrix-2.6.1.dist-info}/licenses/LICENSE.txt +0 -0
- {syntaxmatrix-2.5.8.2.dist-info → syntaxmatrix-2.6.1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,108 @@
|
|
|
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">
|
|
6
|
+
<title>Manage secretes</title>
|
|
7
|
+
<style>
|
|
8
|
+
body{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;margin:0;background:#0b1224;color:#e5e7eb;}
|
|
9
|
+
.wrap{max-width:980px;margin:0 auto;padding:18px;}
|
|
10
|
+
.top{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px;}
|
|
11
|
+
.top h1{margin:0;font-size:1.1rem;}
|
|
12
|
+
.btn{display:inline-block;padding:8px 12px;border-radius:999px;border:1px solid rgba(148,163,184,.35);color:#e5e7eb;text-decoration:none;background:transparent;cursor:pointer;font-weight:650;font-size:.85rem;}
|
|
13
|
+
.btn:hover{border-color:rgba(56,189,248,.6);color:#38bdf8;}
|
|
14
|
+
.card{background:rgba(2,6,23,.65);border:1px solid rgba(148,163,184,.25);border-radius:14px;padding:14px;box-shadow:0 18px 36px rgba(15,23,42,.6);margin-bottom:12px;}
|
|
15
|
+
label{display:block;font-size:.78rem;font-weight:750;margin-bottom:6px;color:#d1d5db;}
|
|
16
|
+
input{width:100%;padding:10px 11px;border-radius:12px;border:1px solid rgba(148,163,184,.25);background:rgba(2,6,23,.8);color:#e5e7eb;outline:none;}
|
|
17
|
+
input:focus{border-color:rgba(56,189,248,.65);box-shadow:0 0 0 1px rgba(56,189,248,.25);}
|
|
18
|
+
.row{display:grid;grid-template-columns:1fr 1.2fr;gap:10px;}
|
|
19
|
+
@media (max-width:760px){.row{grid-template-columns:1fr;}}
|
|
20
|
+
.hint{color:#9ca3af;font-size:.78rem;line-height:1.35;margin-top:8px;}
|
|
21
|
+
table{width:100%;border-collapse:collapse;margin-top:10px;}
|
|
22
|
+
th,td{border-bottom:1px solid rgba(148,163,184,.18);padding:10px 6px;text-align:left;font-size:.85rem;}
|
|
23
|
+
th{color:#cbd5e1;font-size:.78rem;}
|
|
24
|
+
.name{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;}
|
|
25
|
+
.actions{display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap;}
|
|
26
|
+
.danger{border-color:rgba(239,68,68,.55);color:#fecaca;}
|
|
27
|
+
.danger:hover{border-color:rgba(239,68,68,.9);color:#fff;}
|
|
28
|
+
.flash{background:rgba(34,197,94,.12);border:1px solid rgba(34,197,94,.35);padding:10px;border-radius:12px;margin-bottom:10px;color:#bbf7d0;font-size:.85rem;}
|
|
29
|
+
.flash.warn{background:rgba(239,68,68,.10);border-color:rgba(239,68,68,.30);color:#fecaca;}
|
|
30
|
+
</style>
|
|
31
|
+
</head>
|
|
32
|
+
<body>
|
|
33
|
+
<div class="wrap">
|
|
34
|
+
<div class="top">
|
|
35
|
+
<h1>Manage secretes</h1>
|
|
36
|
+
<a class="btn" href="{{ url_for('admin_panel') }}#system">Back to Admin</a>
|
|
37
|
+
</div>
|
|
38
|
+
|
|
39
|
+
{% with messages = get_flashed_messages() %}
|
|
40
|
+
{% if messages %}
|
|
41
|
+
{% for m in messages %}
|
|
42
|
+
<div class="flash">{{ m }}</div>
|
|
43
|
+
{% endfor %}
|
|
44
|
+
{% endif %}
|
|
45
|
+
{% endwith %}
|
|
46
|
+
|
|
47
|
+
<div class="card">
|
|
48
|
+
<h2 style="margin:0 0 10px;font-size:.95rem;">Add / update secret</h2>
|
|
49
|
+
<form method="post">
|
|
50
|
+
<input type="hidden" name="action" value="save_secret">
|
|
51
|
+
|
|
52
|
+
<div class="row">
|
|
53
|
+
<div>
|
|
54
|
+
<label for="secret_name">Name</label>
|
|
55
|
+
<input id="secret_name" name="secret_name" placeholder="PIXABAY_API_KEY" required>
|
|
56
|
+
<div class="hint">Use uppercase with underscores. Example: <span class="name">PIXABAY_API_KEY</span></div>
|
|
57
|
+
</div>
|
|
58
|
+
<div>
|
|
59
|
+
<label for="secret_value">Value</label>
|
|
60
|
+
<input id="secret_value" name="secret_value" placeholder="Paste the key/token here" required>
|
|
61
|
+
<div class="hint">Values are never displayed again after saving.</div>
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
|
|
65
|
+
<div style="margin-top:10px;display:flex;justify-content:flex-end;">
|
|
66
|
+
<button class="btn" type="submit">Save</button>
|
|
67
|
+
</div>
|
|
68
|
+
</form>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<div class="card">
|
|
72
|
+
<h2 style="margin:0 0 10px;font-size:.95rem;">Stored secret names</h2>
|
|
73
|
+
|
|
74
|
+
{% if not secret_names %}
|
|
75
|
+
<div class="hint">No secretes saved yet.</div>
|
|
76
|
+
{% else %}
|
|
77
|
+
<table>
|
|
78
|
+
<thead>
|
|
79
|
+
<tr>
|
|
80
|
+
<th>Name</th>
|
|
81
|
+
<th style="text-align:right;">Action</th>
|
|
82
|
+
</tr>
|
|
83
|
+
</thead>
|
|
84
|
+
<tbody>
|
|
85
|
+
{% for n in secret_names %}
|
|
86
|
+
<tr>
|
|
87
|
+
<td class="name">{{ n }}</td>
|
|
88
|
+
<td>
|
|
89
|
+
<div class="actions">
|
|
90
|
+
<form method="post" onsubmit="return confirm('Delete {{ n }}?');">
|
|
91
|
+
<input type="hidden" name="action" value="delete_secret">
|
|
92
|
+
<input type="hidden" name="secret_name" value="{{ n }}">
|
|
93
|
+
<button class="btn danger" type="submit">Delete</button>
|
|
94
|
+
</form>
|
|
95
|
+
</div>
|
|
96
|
+
</td>
|
|
97
|
+
</tr>
|
|
98
|
+
{% endfor %}
|
|
99
|
+
</tbody>
|
|
100
|
+
</table>
|
|
101
|
+
<div class="hint" style="margin-top:10px;">
|
|
102
|
+
To update a value, just re-save using the same name.
|
|
103
|
+
</div>
|
|
104
|
+
{% endif %}
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
</body>
|
|
108
|
+
</html>
|
|
@@ -11,45 +11,7 @@
|
|
|
11
11
|
margin: 0;
|
|
12
12
|
padding: 0;
|
|
13
13
|
}
|
|
14
|
-
|
|
15
|
-
position: fixed;
|
|
16
|
-
top: 0; left: 0;
|
|
17
|
-
width: 200px; height: 100vh;
|
|
18
|
-
background: #a3a4a5ff;
|
|
19
|
-
border-right: 1px solid #ccc;
|
|
20
|
-
padding: 26px 10px 10px 14px;
|
|
21
|
-
box-sizing: border-box;
|
|
22
|
-
overflow-y: auto;
|
|
23
|
-
z-index: 100;
|
|
24
|
-
font-size: clamp(0.95rem, 2vw, 1.09rem);
|
|
25
|
-
}
|
|
26
|
-
.dashboard-sidebar h2 {
|
|
27
|
-
font-size: clamp(1.12rem, 3vw, 1.28rem);
|
|
28
|
-
color: #007acc;
|
|
29
|
-
margin-top: 0;
|
|
30
|
-
margin-bottom: 32px;
|
|
31
|
-
font-weight: bold;
|
|
32
|
-
letter-spacing: 1px;
|
|
33
|
-
}
|
|
34
|
-
.sidebar-links {
|
|
35
|
-
margin-top: 22px;
|
|
36
|
-
}
|
|
37
|
-
.sidebar-links a {
|
|
38
|
-
display: block;
|
|
39
|
-
padding: 12px 10px 12px 0;
|
|
40
|
-
color: #333;
|
|
41
|
-
text-decoration: none;
|
|
42
|
-
font-size: clamp(0.93rem, 2vw, 1.08rem);
|
|
43
|
-
border-radius: 6px;
|
|
44
|
-
margin-bottom: 6px;
|
|
45
|
-
transition: background 0.2s, color 0.2s;
|
|
46
|
-
}
|
|
47
|
-
.sidebar-links a.active,
|
|
48
|
-
.sidebar-links a:hover {
|
|
49
|
-
background: #e0e5ee;
|
|
50
|
-
color: #007acc;
|
|
51
|
-
font-weight: bold;
|
|
52
|
-
}
|
|
14
|
+
|
|
53
15
|
.dashboard-main {
|
|
54
16
|
margin-left: 220px;
|
|
55
17
|
padding: 36px 40px 30px 10px;
|
|
@@ -99,6 +61,46 @@
|
|
|
99
61
|
textarea#askai{
|
|
100
62
|
background: #e5e5e5cd;
|
|
101
63
|
}
|
|
64
|
+
|
|
65
|
+
.dashboard-sidebar {
|
|
66
|
+
position: fixed;
|
|
67
|
+
top: 0; left: 0;
|
|
68
|
+
width: 200px; height: 100vh;
|
|
69
|
+
background: #a3a4a5ff;
|
|
70
|
+
border-right: 1px solid #ccc;
|
|
71
|
+
padding: 26px 10px 10px 14px;
|
|
72
|
+
box-sizing: border-box;
|
|
73
|
+
overflow-y: auto;
|
|
74
|
+
z-index: 100;
|
|
75
|
+
font-size: clamp(0.95rem, 2vw, 1.09rem);
|
|
76
|
+
}
|
|
77
|
+
.dashboard-sidebar h2 {
|
|
78
|
+
font-size: clamp(1.12rem, 3vw, 1.28rem);
|
|
79
|
+
color: #007acc;
|
|
80
|
+
margin-top: 0;
|
|
81
|
+
margin-bottom: 32px;
|
|
82
|
+
font-weight: bold;
|
|
83
|
+
letter-spacing: 1px;
|
|
84
|
+
}
|
|
85
|
+
.sidebar-links {
|
|
86
|
+
margin-top: 22px;
|
|
87
|
+
}
|
|
88
|
+
.sidebar-links a {
|
|
89
|
+
display: block;
|
|
90
|
+
padding: 12px 10px 12px 0;
|
|
91
|
+
color: #333;
|
|
92
|
+
text-decoration: none;
|
|
93
|
+
font-size: clamp(0.93rem, 2vw, 1.08rem);
|
|
94
|
+
border-radius: 6px;
|
|
95
|
+
margin-bottom: 6px;
|
|
96
|
+
transition: background 0.2s, color 0.2s;
|
|
97
|
+
}
|
|
98
|
+
.sidebar-links a.active,
|
|
99
|
+
.sidebar-links a:hover {
|
|
100
|
+
background: #e0e5ee;
|
|
101
|
+
color: #007acc;
|
|
102
|
+
font-weight: bold;
|
|
103
|
+
}
|
|
102
104
|
|
|
103
105
|
.smx-table {
|
|
104
106
|
padding: clamp(3px, 1vw, 9px) clamp(4px, 2vw, 13px);
|
|
@@ -197,8 +199,8 @@
|
|
|
197
199
|
.dashboard-sidebar {
|
|
198
200
|
position: fixed !important;
|
|
199
201
|
inset: 0 auto 0 0;
|
|
200
|
-
width:
|
|
201
|
-
max-width:
|
|
202
|
+
width: 48vw !important; /* drawer width */
|
|
203
|
+
max-width: 200px;
|
|
202
204
|
transform: translateX(-100%);
|
|
203
205
|
transition: transform .28s ease;
|
|
204
206
|
z-index: 1000;
|
|
@@ -582,7 +584,7 @@
|
|
|
582
584
|
.smx-stat h4{ color: #64748b !important; }
|
|
583
585
|
</style>
|
|
584
586
|
<style>
|
|
585
|
-
div.li
|
|
587
|
+
div.li li {
|
|
586
588
|
margin-left: 35px;
|
|
587
589
|
}
|
|
588
590
|
/* 1. Style the arrow specifically */
|
|
@@ -606,39 +608,68 @@
|
|
|
606
608
|
display: none;
|
|
607
609
|
}
|
|
608
610
|
|
|
609
|
-
/*
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
border-radius: 999px;
|
|
615
|
-
border: 2px solid currentColor;
|
|
616
|
-
border-top-color: transparent;
|
|
617
|
-
border-right-color: transparent;
|
|
618
|
-
animation: edaBtnSpin 0.7s linear infinite;
|
|
619
|
-
margin-left: 0; /* was 0.5rem */
|
|
620
|
-
vertical-align: middle;
|
|
621
|
-
box-sizing: border-box;
|
|
611
|
+
/* Thinking dots that sit inside the Explore Data submit button */
|
|
612
|
+
/* Submit button: keep size constant while swapping text for dots */
|
|
613
|
+
.eda-submit-btn {
|
|
614
|
+
position: relative;
|
|
615
|
+
overflow: hidden;
|
|
622
616
|
}
|
|
617
|
+
|
|
623
618
|
.eda-btn-label {
|
|
624
619
|
display: inline-block;
|
|
625
|
-
margin-right: 0.5rem; /* space between text and spinner when both are visible */
|
|
626
620
|
}
|
|
627
621
|
|
|
628
|
-
/*
|
|
622
|
+
/* Thinking dots overlay, centred in the button */
|
|
623
|
+
.eda-btn-spinner {
|
|
624
|
+
position: absolute;
|
|
625
|
+
top: 50%;
|
|
626
|
+
left: 50%;
|
|
627
|
+
transform: translate(-50%, -50%);
|
|
628
|
+
display: none; /* hidden until loading */
|
|
629
|
+
align-items: center;
|
|
630
|
+
justify-content: center;
|
|
631
|
+
gap: 0.15rem;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
.eda-btn-spinner .dot {
|
|
635
|
+
width: 0.28rem;
|
|
636
|
+
height: 0.28rem;
|
|
637
|
+
border-radius: 999px;
|
|
638
|
+
background: currentColor;
|
|
639
|
+
opacity: 0.2;
|
|
640
|
+
display: inline-block;
|
|
641
|
+
margin: 0 0.08rem;
|
|
642
|
+
animation: edaBtnDots 1s infinite ease-in-out;
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
.eda-btn-spinner .dot:nth-child(2) {
|
|
646
|
+
animation-delay: 0.15s;
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
.eda-btn-spinner .dot:nth-child(3) {
|
|
650
|
+
animation-delay: 0.30s;
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
/* While loading: keep label in layout, but hide it visually */
|
|
629
654
|
.eda-btn-loading .eda-btn-label {
|
|
630
|
-
|
|
655
|
+
visibility: hidden; /* keeps height and width */
|
|
631
656
|
}
|
|
632
657
|
|
|
633
658
|
.eda-btn-loading .eda-btn-spinner {
|
|
634
|
-
display: inline-
|
|
659
|
+
display: inline-flex;
|
|
635
660
|
}
|
|
636
661
|
|
|
637
|
-
@keyframes
|
|
638
|
-
|
|
639
|
-
|
|
662
|
+
@keyframes edaBtnDots {
|
|
663
|
+
0%, 60%, 100% {
|
|
664
|
+
opacity: 0.2;
|
|
665
|
+
transform: translateY(0);
|
|
666
|
+
}
|
|
667
|
+
30% {
|
|
668
|
+
opacity: 1;
|
|
669
|
+
transform: translateY(-0.16rem);
|
|
640
670
|
}
|
|
641
671
|
}
|
|
672
|
+
|
|
642
673
|
.sidebar-links {
|
|
643
674
|
margin-top: 22px;
|
|
644
675
|
}
|
|
@@ -679,7 +710,7 @@
|
|
|
679
710
|
<body>
|
|
680
711
|
<div id="sidebarScrim" class="sidebar-scrim" aria-hidden="true"></div>
|
|
681
712
|
<div class="dashboard-sidebar">
|
|
682
|
-
|
|
713
|
+
|
|
683
714
|
<h2>ML Lab</h2>
|
|
684
715
|
<a href="/">return to home</a>
|
|
685
716
|
<div class="sidebar-links">
|
|
@@ -755,8 +786,14 @@
|
|
|
755
786
|
type="submit"
|
|
756
787
|
class="btn btn-primary eda-submit-btn"
|
|
757
788
|
>
|
|
758
|
-
<span class="eda-btn-
|
|
759
|
-
|
|
789
|
+
<span class="eda-btn-content">
|
|
790
|
+
<span class="eda-btn-label">Submit</span>
|
|
791
|
+
<span class="eda-btn-spinner" aria-hidden="true">
|
|
792
|
+
<span class="dot"></span>
|
|
793
|
+
<span class="dot"></span>
|
|
794
|
+
<span class="dot"></span>
|
|
795
|
+
</span>
|
|
796
|
+
</span>
|
|
760
797
|
</button>
|
|
761
798
|
</form>
|
|
762
799
|
<div style="margin-bottom: 36px;">
|
|
@@ -784,16 +821,23 @@
|
|
|
784
821
|
{% endfor %}
|
|
785
822
|
{% endif %}
|
|
786
823
|
<br><br>
|
|
787
|
-
{% if
|
|
788
|
-
<b>
|
|
824
|
+
{% if TOKENS %}
|
|
825
|
+
<b>Refiner Agent: </b><span>{{ TOKENS['Refiner'][0] }} | {{ TOKENS['Refiner'][1] }}</span><br>
|
|
789
826
|
<b>Token Usage: </b>
|
|
790
|
-
<li>Input Tokens: {{
|
|
791
|
-
<li>Output Tokens: {{
|
|
792
|
-
<li>Total Tokens: {{
|
|
793
|
-
|
|
794
|
-
|
|
827
|
+
<li>Input Tokens: {{ TOKENS['Refiner'][2] }}</li>
|
|
828
|
+
<li>Output Tokens: {{ TOKENS['Refiner'][3] }}</li>
|
|
829
|
+
<li>Total Tokens: {{ TOKENS['Refiner'][4] }}</li>
|
|
830
|
+
<br>
|
|
831
|
+
|
|
832
|
+
<b>Coder Agent: </b><span>{{ TOKENS['Coder'][0] }} | {{ TOKENS['Coder'][1] }}</span><br>
|
|
833
|
+
<b>Token Usage: </b>
|
|
834
|
+
<li>Input Tokens: {{ TOKENS['Coder'][2] }}</li>
|
|
835
|
+
<li>Output Tokens: {{ TOKENS['Coder'][3] }}</li>
|
|
836
|
+
<li>Total Tokens: {{ TOKENS['Coder'][4] }}</li>
|
|
837
|
+
{% endif %}
|
|
795
838
|
</div>
|
|
796
839
|
</details>
|
|
840
|
+
</div>
|
|
797
841
|
{% endif %}
|
|
798
842
|
{% if ai_outputs %}
|
|
799
843
|
<div class="d-flex align-items-center justify-content-between" style="margin: 12px;">
|