mop-agent 0.1.10 → 0.1.12

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.
@@ -127,7 +127,6 @@ export default function AssistantPage() {
127
127
  );
128
128
  }
129
129
 
130
- const selectStyle: CSSProperties = { color: "#2d4a3e", border: "1px solid rgba(45,74,62,.42)", padding: "6px 8px", background: "#fffdf2" };
131
130
  const assistantLogo: CSSProperties = { width: 86, height: 86, display: "grid", placeItems: "center" };
132
131
  const promptGrid: CSSProperties = { width: "min(100%, 650px)", display: "grid", gridTemplateColumns: "repeat(2,minmax(0,1fr))", gap: 10, marginTop: 28 };
133
132
  const promptCard: CSSProperties = { display: "flex", justifyContent: "space-between", padding: "14px 15px", border: "1px solid rgba(45,74,62,.38)", borderBottomWidth: 3, background: "#fffdf2", color: "#2d4a3e", cursor: "pointer", textAlign: "left" };
@@ -247,28 +247,35 @@ button {
247
247
  }
248
248
 
249
249
  .mop-nav-section nav { display: grid; gap: 4px; }
250
- .mop-nav-section a {
250
+ .mop-nav-section a,
251
+ .mop-nav-section button {
251
252
  display: flex;
252
253
  align-items: center;
253
254
  gap: 11px;
255
+ width: 100%;
254
256
  min-height: 43px;
255
257
  padding: 8px 12px;
256
258
  color: rgba(254, 249, 225, .78);
257
259
  border: 1px solid transparent;
260
+ background: transparent;
261
+ text-align: left;
258
262
  text-decoration: none;
259
263
  font-family: "SFMono-Regular", Consolas, monospace;
260
264
  font-size: 12px;
261
265
  font-weight: 800;
262
266
  letter-spacing: .055em;
263
267
  text-transform: uppercase;
268
+ cursor: pointer;
264
269
  }
265
270
 
266
- .mop-nav-section a:hover {
271
+ .mop-nav-section a:hover,
272
+ .mop-nav-section button:hover {
267
273
  color: var(--mop-cream);
268
274
  background: rgba(254, 249, 225, .07);
269
275
  }
270
276
 
271
- .mop-nav-section a.is-active {
277
+ .mop-nav-section a.is-active,
278
+ .mop-nav-section button.is-active {
272
279
  color: #ff8a3d;
273
280
  border-color: rgba(254, 249, 225, .18);
274
281
  background: rgba(254, 249, 225, .09);
@@ -378,15 +385,53 @@ button {
378
385
  flex-direction: column;
379
386
  }
380
387
 
388
+ /* Toolbar lives inside the dark maroon topbar, so its text is light. */
381
389
  .mop-assistant-toolbar {
382
- min-height: 55px;
390
+ width: 100%;
383
391
  display: flex;
384
392
  align-items: center;
385
393
  justify-content: space-between;
386
394
  gap: 16px;
387
- padding: 9px 22px;
388
- border-bottom: 1px solid rgba(45, 74, 62, .24);
389
- background: rgba(254, 249, 225, .78);
395
+ }
396
+ .mop-assistant-status {
397
+ display: flex;
398
+ align-items: center;
399
+ gap: 9px;
400
+ min-width: 0;
401
+ }
402
+ .mop-assistant-status strong {
403
+ font-family: "SFMono-Regular", Consolas, monospace;
404
+ font-size: 13px;
405
+ letter-spacing: .08em;
406
+ text-transform: uppercase;
407
+ color: var(--mop-cream);
408
+ }
409
+ .mop-assistant-provider {
410
+ overflow: hidden;
411
+ text-overflow: ellipsis;
412
+ white-space: nowrap;
413
+ color: rgba(254, 249, 225, .66);
414
+ font-size: 12px;
415
+ }
416
+ .mop-assistant-scope {
417
+ display: flex;
418
+ align-items: center;
419
+ gap: 8px;
420
+ flex: 0 0 auto;
421
+ color: rgba(254, 249, 225, .82);
422
+ font-family: "SFMono-Regular", Consolas, monospace;
423
+ font-size: 10px;
424
+ font-weight: 800;
425
+ letter-spacing: .12em;
426
+ text-transform: uppercase;
427
+ }
428
+ .mop-assistant-scope select {
429
+ color: var(--mop-green);
430
+ background: var(--mop-paper);
431
+ border: 1px solid rgba(254, 249, 225, .32);
432
+ padding: 6px 8px;
433
+ font-family: "SFMono-Regular", Consolas, monospace;
434
+ font-size: 12px;
390
435
  }
391
436
 
392
437
  .mop-assistant-conversation { flex: 1; overflow-y: auto; padding: 0 28px; }
@@ -417,26 +462,6 @@ button {
417
462
  }
418
463
 
419
464
 
420
- .mop-settings-nav { padding: 9px; }
421
- .mop-settings-nav button {
422
- width: 100%;
423
- display: flex;
424
- align-items: center;
425
- gap: 10px;
426
- padding: 12px;
427
- border: 1px solid transparent;
428
- background: transparent;
429
- color: var(--mop-green);
430
- text-align: left;
431
- cursor: pointer;
432
- }
433
-
434
- .mop-settings-nav button.is-active {
435
- color: var(--mop-cream);
436
- border-color: var(--mop-red);
437
- background: var(--mop-red);
438
- }
439
-
440
465
  .mop-settings-content { padding: clamp(18px, 3vw, 30px); }
441
466
  .mop-settings-content th,
442
467
  .mop-settings-content td {
@@ -498,41 +523,12 @@ button {
498
523
  }
499
524
  .mop-app-main { min-height: calc(100vh - 62px); }
500
525
  .mop-assistant-page { min-height: calc(100vh - 62px); }
501
- .mop-assistant-toolbar { align-items: flex-start; flex-direction: column; }
526
+ .mop-assistant-toolbar { gap: 9px; }
527
+ .mop-assistant-status { display: none; }
502
528
  .mop-assistant-conversation { padding: 0 16px; }
503
529
  .mop-assistant-composer-wrap { padding: 26px 12px 12px; }
504
530
  .mop-settings-grid { grid-template-columns: 1fr; }
505
- .mop-settings-nav { display: flex; gap: 7px; }
506
- .mop-settings-nav button { justify-content: center; }
507
531
  .mop-user-invite-form { grid-template-columns: 1fr !important; }
508
- .mop-settings-sidebar {
509
- position: fixed;
510
- top: 62px;
511
- left: 0;
512
- bottom: 0;
513
- width: min(82vw, 280px);
514
- height: auto;
515
- transform: translateX(-105%);
516
- transition: transform 160ms steps(4, end);
517
- display: flex !important;
518
- flex-direction: column !important;
519
- }
520
- .mop-settings-sidebar.is-open {
521
- transform: translateX(0);
522
- }
523
- }
524
-
525
- .mop-settings-sidebar {
526
- grid-area: sidebar;
527
- position: sticky;
528
- top: 70px;
529
- height: calc(100vh - 70px);
530
- z-index: 40;
531
- display: flex;
532
- flex-direction: column;
533
- overflow-y: auto;
534
- padding: 15px 9px 12px;
535
- border-right: 2px solid rgba(45, 74, 62, .46);
536
532
  }
537
533
 
538
534
  .mop-back-workspace-btn {
@@ -33,9 +33,6 @@ export function useMemoryCore() {
33
33
  return context;
34
34
  }
35
35
 
36
- const selectStyle = { color: "#2d4a3e", border: "1px solid rgba(45,74,62,.42)", padding: "6px 8px", background: "#fffdf2" };
37
-
38
-
39
36
  function pageTitle(pathname: string): string {
40
37
  if (pathname === "/assistant") return "Assistant";
41
38
  if (pathname === "/brain/graph") return "Knowledge Graph";
@@ -107,16 +104,17 @@ export function AppShell({ viewer, children }: { viewer: AppViewer; children: Re
107
104
 
108
105
  </button>
109
106
  {pathname === "/assistant" ? (
110
- <div className="mop-assistant-toolbar" style={{ border: 0, padding: 0, margin: 0, background: "transparent", width: "100%", display: "flex", justifyContent: "space-between", alignItems: "center" }}>
111
- <div>
112
- <strong style={{ fontFamily: '"SFMono-Regular", Consolas, monospace', color: "#742220" }}>LIVE ASSISTANT</strong>
113
- <span style={{ color: "rgba(45,74,62,.62)", marginLeft: 10, fontSize: 12 }}>
107
+ <div className="mop-assistant-toolbar">
108
+ <div className="mop-assistant-status">
109
+ <span className="mop-live-dot" />
110
+ <strong>LIVE ASSISTANT</strong>
111
+ <span className="mop-assistant-provider">
114
112
  {provider.configured ? `${provider.provider}${provider.model ? ` · ${provider.model}` : ""}` : "offline demo"}
115
113
  </span>
116
114
  </div>
117
- <label style={{ color: "#2d4a3e", fontSize: 12 }}>
118
- MEMORY SCOPE&nbsp;
119
- <select value={selectedProject} onChange={(e) => setSelectedProject(e.target.value)} style={selectStyle}>
115
+ <label className="mop-assistant-scope">
116
+ MEMORY SCOPE
117
+ <select value={selectedProject} onChange={(e) => setSelectedProject(e.target.value)}>
120
118
  <option value="">All memory</option>
121
119
  {projects.map((project) => <option key={project.id} value={project.id}>{project.name}</option>)}
122
120
  </select>
@@ -131,7 +129,7 @@ export function AppShell({ viewer, children }: { viewer: AppViewer; children: Re
131
129
  <div className="mop-topbar-center">MOP MEMORYCORE</div>
132
130
  <div className="mop-topbar-meta">
133
131
  <span>{isAdmin ? "ADMIN" : "MEMBER"}</span>
134
- <span className="mop-version">v0.1.10</span>
132
+ <span className="mop-version">v0.1.12</span>
135
133
  </div>
136
134
  </>
137
135
  )}
@@ -140,19 +138,21 @@ export function AppShell({ viewer, children }: { viewer: AppViewer; children: Re
140
138
 
141
139
  {menuOpen && <button className="mop-sidebar-scrim" aria-label="Close navigation" onClick={() => setMenuOpen(false)} />}
142
140
 
143
- <aside className={isSettings
144
- ? `mop-settings-nav mop-panel mop-settings-sidebar${menuOpen ? " is-open" : ""}`
145
- : `mop-app-sidebar${menuOpen ? " is-open" : ""}`}
146
- >
141
+ <aside className={`mop-app-sidebar${menuOpen ? " is-open" : ""}`}>
147
142
  {isSettings ? (
148
- <>
149
- <button className={settingsSection === "providers" ? "is-active" : ""} onClick={() => { selectSection("providers"); setMenuOpen(false); }}>
150
- <span>◇</span><strong>Providers</strong>
151
- </button>
152
- <button className={settingsSection === "users" ? "is-active" : ""} onClick={() => { selectSection("users"); setMenuOpen(false); }}>
153
- <span>♙</span><strong>Users</strong>
154
- </button>
155
- </>
143
+ <div className="mop-nav-section">
144
+ <p>SETTINGS</p>
145
+ <nav>
146
+ <button className={settingsSection === "providers" ? "is-active" : ""} onClick={() => { selectSection("providers"); setMenuOpen(false); }}>
147
+ <span className="mop-nav-icon">◇</span>
148
+ <span>Providers</span>
149
+ </button>
150
+ <button className={settingsSection === "users" ? "is-active" : ""} onClick={() => { selectSection("users"); setMenuOpen(false); }}>
151
+ <span className="mop-nav-icon">♙</span>
152
+ <span>Users</span>
153
+ </button>
154
+ </nav>
155
+ </div>
156
156
  ) : (
157
157
  <>
158
158
  <div className="mop-nav-section">
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "mop-agent",
3
- "version": "0.1.10",
3
+ "version": "0.1.12",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "mop-agent",
9
- "version": "0.1.10",
9
+ "version": "0.1.12",
10
10
  "license": "UNLICENSED",
11
11
  "workspaces": [
12
12
  "packages/*",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mop-agent",
3
- "version": "0.1.10",
3
+ "version": "0.1.12",
4
4
  "description": "Self-hosted AI assistant with persistent cross-project memory, installed with npx mop-agent.",
5
5
  "author": "BURHANDEV ENTERPRISE",
6
6
  "license": "UNLICENSED",