syntaxmatrix 2.5.5.5__py3-none-any.whl → 2.6.2__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.
Files changed (44) hide show
  1. syntaxmatrix/__init__.py +3 -2
  2. syntaxmatrix/agentic/agents.py +1220 -169
  3. syntaxmatrix/agentic/agents_orchestrer.py +326 -0
  4. syntaxmatrix/agentic/code_tools_registry.py +27 -32
  5. syntaxmatrix/auth.py +142 -5
  6. syntaxmatrix/commentary.py +16 -16
  7. syntaxmatrix/core.py +192 -84
  8. syntaxmatrix/db.py +460 -4
  9. syntaxmatrix/{display.py → display_html.py} +2 -6
  10. syntaxmatrix/gpt_models_latest.py +1 -1
  11. syntaxmatrix/media/__init__.py +0 -0
  12. syntaxmatrix/media/media_pixabay.py +277 -0
  13. syntaxmatrix/models.py +1 -1
  14. syntaxmatrix/page_builder_defaults.py +183 -0
  15. syntaxmatrix/page_builder_generation.py +1122 -0
  16. syntaxmatrix/page_layout_contract.py +644 -0
  17. syntaxmatrix/page_patch_publish.py +1471 -0
  18. syntaxmatrix/preface.py +670 -0
  19. syntaxmatrix/profiles.py +28 -10
  20. syntaxmatrix/routes.py +1941 -593
  21. syntaxmatrix/selftest_page_templates.py +360 -0
  22. syntaxmatrix/settings/client_items.py +28 -0
  23. syntaxmatrix/settings/model_map.py +1022 -207
  24. syntaxmatrix/settings/prompts.py +328 -130
  25. syntaxmatrix/static/assets/hero-default.svg +22 -0
  26. syntaxmatrix/static/icons/bot-icon.png +0 -0
  27. syntaxmatrix/static/icons/favicon.png +0 -0
  28. syntaxmatrix/static/icons/logo.png +0 -0
  29. syntaxmatrix/static/icons/logo3.png +0 -0
  30. syntaxmatrix/templates/admin_branding.html +104 -0
  31. syntaxmatrix/templates/admin_features.html +63 -0
  32. syntaxmatrix/templates/admin_secretes.html +108 -0
  33. syntaxmatrix/templates/change_password.html +124 -0
  34. syntaxmatrix/templates/dashboard.html +296 -131
  35. syntaxmatrix/templates/dataset_resize.html +535 -0
  36. syntaxmatrix/templates/edit_page.html +2535 -0
  37. syntaxmatrix/utils.py +2728 -2835
  38. {syntaxmatrix-2.5.5.5.dist-info → syntaxmatrix-2.6.2.dist-info}/METADATA +6 -2
  39. {syntaxmatrix-2.5.5.5.dist-info → syntaxmatrix-2.6.2.dist-info}/RECORD +42 -25
  40. syntaxmatrix/generate_page.py +0 -634
  41. syntaxmatrix/static/icons/hero_bg.jpg +0 -0
  42. {syntaxmatrix-2.5.5.5.dist-info → syntaxmatrix-2.6.2.dist-info}/WHEEL +0 -0
  43. {syntaxmatrix-2.5.5.5.dist-info → syntaxmatrix-2.6.2.dist-info}/licenses/LICENSE.txt +0 -0
  44. {syntaxmatrix-2.5.5.5.dist-info → syntaxmatrix-2.6.2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,63 @@
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>Feature toggles</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
+ .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;}
16
+ .hint{color:#9ca3af;font-size:.78rem;line-height:1.35;margin-top:8px;}
17
+ .row{display:flex;align-items:flex-start;gap:10px;padding:10px 0;border-top:1px solid rgba(148,163,184,.15);}
18
+ .row:first-child{border-top:none;}
19
+ .label{font-weight:750;}
20
+ input[type="checkbox"]{transform: translateY(2px); width:16px; height:16px;}
21
+ </style>
22
+ </head>
23
+ <body>
24
+ <div class="wrap">
25
+ <div class="top">
26
+ <h1>Feature toggles</h1>
27
+ <a class="btn" href="{{ url_for('admin_panel') }}#system">Back to Admin</a>
28
+ </div>
29
+
30
+ {% with messages = get_flashed_messages(with_categories=False) %}
31
+ {% if messages %}
32
+ {% for m in messages %}
33
+ <div class="flash">{{ m }}</div>
34
+ {% endfor %}
35
+ {% endif %}
36
+ {% endwith %}
37
+
38
+ <div class="card">
39
+ <form method="post">
40
+ <div class="row">
41
+ <input type="checkbox" id="stream_mode" name="stream_mode" {% if stream_mode %}checked{% endif %}>
42
+ <div>
43
+ <div class="label">Enable stream mode</div>
44
+ <div class="hint">Streams assistant responses in real time (SSE). Applies to the chat UI immediately.</div>
45
+ </div>
46
+ </div>
47
+
48
+ <div class="row">
49
+ <input type="checkbox" id="user_files" name="user_files" {% if user_files %}checked{% endif %}>
50
+ <div>
51
+ <div class="label">Enable user files</div>
52
+ <div class="hint">Shows the “➕” upload icon and allows users to upload PDFs for that chat session.</div>
53
+ </div>
54
+ </div>
55
+
56
+ <div style="margin-top:12px;display:flex;justify-content:flex-end;gap:10px;">
57
+ <button class="btn" type="submit">Save</button>
58
+ </div>
59
+ </form>
60
+ </div>
61
+ </div>
62
+ </body>
63
+ </html>
@@ -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>
@@ -0,0 +1,124 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <title>Change Password – SyntaxMatrix</title>
6
+ <style>
7
+ :root {
8
+ --bg: #f4f7f9;
9
+ --text: #333;
10
+ --primary: #007acc;
11
+ --primary-txt: #fff;
12
+ --card-bg: #fff;
13
+ --card-shadow: rgba(0,0,0,0.1);
14
+ }
15
+ body {
16
+ margin: 0;
17
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
18
+ background: var(--bg);
19
+ color: var(--text);
20
+ }
21
+ .auth-container {
22
+ max-width: 380px;
23
+ margin: 5vh auto;
24
+ padding: 2rem;
25
+ background: var(--card-bg);
26
+ border-radius: 8px;
27
+ box-shadow: 0 4px 12px var(--card-shadow);
28
+ }
29
+ .auth-container h1 {
30
+ text-align: center;
31
+ color: var(--primary);
32
+ margin-bottom: 1.5rem;
33
+ }
34
+ .auth-container label {
35
+ display: block;
36
+ font-size: 0.9rem;
37
+ margin-bottom: 0.25rem;
38
+ font-weight: 600;
39
+ }
40
+ .auth-container input[type="password"] {
41
+ width: 100%;
42
+ padding: 0.5rem 0.75rem;
43
+ margin-bottom: 0.75rem;
44
+ border-radius: 4px;
45
+ border: 1px solid #ccc;
46
+ font-size: 0.95rem;
47
+ box-sizing: border-box;
48
+ }
49
+ .auth-container button {
50
+ width: 100%;
51
+ padding: 0.6rem 1rem;
52
+ border-radius: 4px;
53
+ border: none;
54
+ background: var(--primary);
55
+ color: var(--primary-txt);
56
+ font-weight: 600;
57
+ font-size: 0.95rem;
58
+ cursor: pointer;
59
+ }
60
+ .auth-container button:hover {
61
+ opacity: 0.9;
62
+ }
63
+ .flash {
64
+ margin-bottom: 0.75rem;
65
+ padding: 0.5rem 0.75rem;
66
+ border-radius: 4px;
67
+ font-size: 0.85rem;
68
+ }
69
+ .flash.error {
70
+ background: #ffe6e6;
71
+ color: #a00;
72
+ }
73
+ .flash.message {
74
+ background: #e6f7ff;
75
+ color: #004f80;
76
+ }
77
+ .auth-container p {
78
+ text-align: center;
79
+ margin-top: 1rem;
80
+ font-size: 0.9rem;
81
+ }
82
+ .auth-container a {
83
+ color: var(--primary);
84
+ text-decoration: none;
85
+ font-weight: 600;
86
+ }
87
+ .auth-container a:hover {
88
+ text-decoration: underline;
89
+ }
90
+ </style>
91
+ </head>
92
+ <body>
93
+ <div class="auth-container">
94
+ <h1>Change Password</h1>
95
+
96
+ {% with messages = get_flashed_messages(with_categories=true) %}
97
+ {% if messages %}
98
+ {% for category, msg in messages %}
99
+ {% if category == 'error' %}
100
+ <div class="flash error">{{ msg }}</div>
101
+ {% else %}
102
+ <div class="flash message">{{ msg }}</div>
103
+ {% endif %}
104
+ {% endfor %}
105
+ {% endif %}
106
+ {% endwith %}
107
+
108
+ <form method="post" action="{{ url_for('change_password') }}">
109
+ <label for="current_password">Current password</label>
110
+ <input type="password" id="current_password" name="current_password" required autofocus>
111
+
112
+ <label for="new_password">New password</label>
113
+ <input type="password" id="new_password" name="new_password" required>
114
+
115
+ <label for="confirm_password">Confirm new password</label>
116
+ <input type="password" id="confirm_password" name="confirm_password" required>
117
+
118
+ <button type="submit">Update password</button>
119
+ </form>
120
+
121
+ <p><a href="{{ url_for('dashboard') }}">Back to dashboard</a></p>
122
+ </div>
123
+ </body>
124
+ </html>