@agent-live/cli 0.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.
- package/bin.mjs +41 -0
- package/console-dist/assets/components-0p8SghrX.js +1 -0
- package/console-dist/assets/index-49jCgePm.js +1 -0
- package/console-dist/assets/index-BnLKN4xZ.css +1 -0
- package/console-dist/assets/index-jfHKGDWM.js +76 -0
- package/console-dist/assets/page-BRDi_757.js +1 -0
- package/console-dist/assets/page-BpIZP_o-.js +1 -0
- package/console-dist/assets/page-Byx3HD88.js +1 -0
- package/console-dist/assets/page-CEUp9Rfn.js +1 -0
- package/console-dist/assets/page-CmST3snz.js +1 -0
- package/console-dist/assets/page-DMYOtzYN.js +1 -0
- package/console-dist/index.html +4 -0
- package/package.json +19 -0
- package/server/demo/data.mjs +524 -0
- package/server/http.mjs +102 -0
- package/server/real/data.mjs +170 -0
package/bin.mjs
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { existsSync } from 'node:fs'
|
|
3
|
+
import { fileURLToPath } from 'node:url'
|
|
4
|
+
import { dirname, join } from 'node:path'
|
|
5
|
+
import { exec } from 'node:child_process'
|
|
6
|
+
|
|
7
|
+
const here = dirname(fileURLToPath(import.meta.url))
|
|
8
|
+
const assetsDir = join(here, 'console-dist')
|
|
9
|
+
const { createServer } = await import(join(here, 'server', 'http.mjs'))
|
|
10
|
+
const noOpen = process.argv.includes('--no-open')
|
|
11
|
+
const dbPath = process.env.AGENT_LIVE_DB || './.agent-live/agent-live.db'
|
|
12
|
+
const port = Number(process.env.PORT || 3848)
|
|
13
|
+
if (!Number.isInteger(port) || port < 0 || port > 65535) throw new Error('PORT must be an integer between 0 and 65535')
|
|
14
|
+
|
|
15
|
+
if (!existsSync(join(assetsDir, 'index.html'))) {
|
|
16
|
+
console.error('Bundled console assets are missing from this package — try reinstalling agent-live.')
|
|
17
|
+
process.exit(1)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const { server, dispose } = createServer({ mode: 'real', dbPath, assetsDir })
|
|
21
|
+
server.listen(port, '127.0.0.1', () => {
|
|
22
|
+
const url = `http://127.0.0.1:${server.address().port}`
|
|
23
|
+
console.log(`Agent Live running at ${url}`)
|
|
24
|
+
console.log(`Reading recorded data from ${dbPath}`)
|
|
25
|
+
if (!noOpen) {
|
|
26
|
+
const opener = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open'
|
|
27
|
+
exec(`${opener} ${url}`, () => {})
|
|
28
|
+
}
|
|
29
|
+
})
|
|
30
|
+
server.on('error', (error) => {
|
|
31
|
+
dispose()
|
|
32
|
+
console.error(error.message)
|
|
33
|
+
process.exitCode = 1
|
|
34
|
+
})
|
|
35
|
+
for (const signal of ['SIGINT', 'SIGTERM']) {
|
|
36
|
+
process.on(signal, () => {
|
|
37
|
+
dispose()
|
|
38
|
+
server.close()
|
|
39
|
+
server.closeAllConnections()
|
|
40
|
+
})
|
|
41
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as e,f as r,u as i,a as d}from"./index-jfHKGDWM.js";import{E as n,c,b as h}from"./index-49jCgePm.js";function m(){const t=i("agents"),{agentId:s,setAgent:l}=d();return e.jsxs("label",{children:["Agent ",e.jsxs("select",{className:"select",value:s,onChange:a=>l(a.target.value),disabled:t.isPending,children:[e.jsx("option",{value:"all",children:"All agents"}),s!=="all"&&!t.data?.agents.some(a=>a.id===s)&&e.jsx("option",{value:s,children:"Unknown agent"}),t.data?.agents.map(a=>e.jsx("option",{value:a.id,children:a.name},a.id))]}),t.error&&e.jsxs("span",{role:"alert",children:[" Agent list unavailable. ",e.jsx("button",{onClick:()=>{t.refetch()},children:"Retry"})]})]})}function x({items:t}){return t.length?e.jsx("div",{className:"bars",children:t.map(s=>e.jsxs("div",{className:"bar-row",children:[e.jsx("span",{children:s.channel}),e.jsx("progress",{"aria-label":`${s.channel}: ${s.pct}%`,value:s.pct,max:100}),e.jsx("span",{children:s.count})]},s.channel))}):e.jsx(n,{children:"Channel activity will appear when customers interact with agents."})}function j({runs:t}){return t.length?e.jsx(c,{label:"Agent runs",headers:["When","Summary","Agent","Customer","Status"],children:t.map(s=>e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx("time",{dateTime:s.startedAt,children:r(s.startedAt)})}),e.jsxs("td",{children:[s.summary,e.jsx("div",{className:"row-sub",children:s.channel})]}),e.jsx("td",{children:s.agentName}),e.jsxs("td",{children:[s.customerAlias,e.jsx("div",{className:"row-sub",children:s.customerHint})]}),e.jsx("td",{children:e.jsx(h,{status:s.status})})]},s.id))}):e.jsx(n,{children:"No runs match this view. Adjust the filters or wait for agent activity."})}export{m as A,x as C,j as R};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as e}from"./index-jfHKGDWM.js";function i({status:s}){const a=["completed","delivered","approved","idle"].includes(s)?"ok":["failed","degraded","blocked"].includes(s)?"danger":["running","busy","waiting","in_progress"].includes(s)?"warn":"quiet";return e.jsx("span",{className:`pill pill-${a}`,children:s.replaceAll("_"," ")})}function c({title:s,description:a,children:l}){return e.jsxs("div",{className:"page-head",children:[e.jsxs("div",{children:[e.jsx("h1",{children:s}),e.jsx("p",{children:a})]}),l&&e.jsx("div",{className:"filters",children:l})]})}function d({title:s,children:a}){return e.jsxs("section",{className:"card",children:[s&&e.jsx("div",{className:"card-h",children:e.jsx("h2",{children:s})}),a]})}function t({children:s}){return e.jsx("div",{className:"empty",children:s})}function o({pending:s,error:a,retry:l,children:n}){return s?e.jsx("div",{className:"loading",role:"status",children:"Loading this view…"}):e.jsxs(e.Fragment,{children:[a&&e.jsxs("div",{className:"error",role:"alert",children:["Could not update this view. ",e.jsx("button",{className:"select",onClick:l,children:"Retry"})]}),n]})}function x({label:s,headers:a,children:l}){return e.jsx("div",{className:"table-scroll",role:"region","aria-label":s,tabIndex:0,children:e.jsxs("table",{className:"table",children:[e.jsx("caption",{className:"sr-only",children:s}),e.jsx("thead",{children:e.jsx("tr",{children:a.map(n=>e.jsx("th",{scope:"col",children:n},n))})}),e.jsx("tbody",{children:l})]})})}function h({label:s,value:a,detail:l}){return e.jsxs("div",{className:"stat",children:[e.jsx("div",{className:"stat-label",children:s}),e.jsx("div",{className:"stat-value",children:a}),e.jsx("div",{className:"stat-sub",children:l})]})}export{o as D,t as E,c as P,h as S,d as a,i as b,x as c};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--al-bg: #f4f5f3;--al-surface: #ffffff;--al-ink: #121411;--al-muted: #5c6358;--al-line: #e3e6e0;--al-line-strong: #cfd4cb;--al-accent: #1dab61;--al-accent-soft: #e8f7ef;--al-warn: #b45309;--al-warn-soft: #fff7ed;--al-danger: #b42318;--al-danger-soft: #fef3f2;--al-info: #175cd3;--al-info-soft: #eff8ff;--al-sidebar: #0f1410;--al-sidebar-ink: #f3f5f1;--al-sidebar-muted: #9aa396;--al-radius: 14px;--al-radius-sm: 10px;--al-shadow: 0 1px 0 rgba(18,20,17,.04), 0 8px 24px rgba(18,20,17,.04);--al-font: "DM Sans", ui-sans-serif, system-ui, sans-serif;--al-mono: "IBM Plex Mono", ui-monospace, monospace;--al-sidebar-w: 248px}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:1rem;margin-bottom:1.25rem;flex-wrap:wrap}.page-head h1{margin:0;font-size:1.55rem;letter-spacing:-.03em;font-weight:700}.page-head p{margin:.35rem 0 0;color:var(--al-muted);font-size:.92rem;max-width:44rem}.filters{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center}.select{border:1px solid var(--al-line);background:var(--al-surface);border-radius:999px;padding:.55rem .9rem;color:var(--al-ink)}.grid-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.85rem;margin-bottom:1rem}.stat{background:var(--al-surface);border:1px solid var(--al-line);border-radius:var(--al-radius);padding:1rem 1.1rem;box-shadow:var(--al-shadow)}.stat-label{font-size:.75rem;color:var(--al-muted);text-transform:uppercase;letter-spacing:.04em}.stat-value{font-size:1.7rem;font-weight:700;letter-spacing:-.04em;margin-top:.25rem}.stat-sub{font-size:.8rem;color:var(--al-muted);margin-top:.2rem}.panels{display:grid;grid-template-columns:1.4fr 1fr;gap:.85rem}.card{background:var(--al-surface);border:1px solid var(--al-line);border-radius:var(--al-radius);box-shadow:var(--al-shadow);overflow:hidden}.card-h{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.95rem 1.1rem;border-bottom:1px solid var(--al-line)}.card-h h2{margin:0;font-size:.95rem;letter-spacing:-.01em}.card-b{padding:.4rem .45rem .65rem}.row{display:grid;grid-template-columns:1fr auto;gap:.75rem;align-items:start;padding:.8rem .7rem;border-radius:var(--al-radius-sm);width:100%;text-align:left;border:0;background:transparent;cursor:default;color:inherit}button.row{cursor:pointer}button.row:hover,button.row:focus-visible{background:#f7f8f5;outline:none}.row-title{font-size:.92rem;font-weight:550;letter-spacing:-.01em}.row-sub{font-size:.8rem;color:var(--al-muted);margin-top:.22rem;line-height:1.35}.pill{display:inline-flex;align-items:center;border-radius:999px;padding:.28rem .55rem;font-size:.68rem;text-transform:uppercase;letter-spacing:.03em;border:1px solid var(--al-line);white-space:nowrap}.pill-ok{color:#0f7a43;background:var(--al-accent-soft);border-color:#cfeedd}.pill-warn{color:var(--al-warn);background:var(--al-warn-soft);border-color:#f5e1c4}.pill-danger{color:var(--al-danger);background:var(--al-danger-soft);border-color:#f5d0cb}.pill-quiet{color:var(--al-muted);background:#f3f4f1}.pill-info{color:var(--al-info);background:var(--al-info-soft);border-color:#d1e9ff}.bars{display:flex;flex-direction:column;gap:.75rem;padding:1rem 1.1rem 1.2rem}.bar-row{display:grid;grid-template-columns:88px 1fr 40px;gap:.65rem;align-items:center;font-size:.85rem}.bar-track{height:8px;background:#eef0eb;border-radius:999px;overflow:hidden}.bar-fill{height:100%;background:var(--al-accent);border-radius:999px}.table{width:100%;border-collapse:collapse;font-size:.88rem}.table th{text-align:left;font-size:.72rem;text-transform:uppercase;letter-spacing:.04em;color:var(--al-muted);font-weight:600;padding:.75rem 1rem;border-bottom:1px solid var(--al-line)}.table td{padding:.85rem 1rem;border-bottom:1px solid var(--al-line);vertical-align:top}.table tr:last-child td{border-bottom:0}.mono{font-family:var(--al-mono);font-size:.78rem}.empty,.loading,.error{padding:2rem 1.25rem;text-align:center;color:var(--al-muted);font-size:.9rem}.error{color:var(--al-danger)}*{box-sizing:border-box}html,body{height:100%}body{margin:0;font-family:var(--al-font);color:var(--al-ink);background:var(--al-bg);-webkit-font-smoothing:antialiased}button,input{font:inherit}a{color:inherit;text-decoration:none}.app{display:grid;grid-template-columns:var(--al-sidebar-w) 1fr;min-height:100vh}.sidebar{background:var(--al-sidebar);color:var(--al-sidebar-ink);padding:1.25rem 1rem 1.5rem;display:flex;flex-direction:column;gap:1.5rem;position:sticky;top:0;height:100vh}.brand{display:flex;flex-direction:column;gap:.35rem;padding:.25rem .5rem}.brand-mark{font-weight:700;letter-spacing:-.03em;font-size:1.15rem}.brand-mark span{color:var(--al-accent)}.brand-org{font-size:.78rem;color:var(--al-sidebar-muted)}.nav{display:flex;flex-direction:column;gap:.2rem;flex:1}.nav a{appearance:none;border:0;background:transparent;color:var(--al-sidebar-muted);text-align:left;padding:.7rem .8rem;border-radius:10px;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:.75rem}.nav a:hover{background:#ffffff0d;color:var(--al-sidebar-ink)}.nav a.active{background:#1dab6129;color:#fff}.nav-badge{font-size:.68rem;font-family:var(--al-mono);background:#ffffff14;padding:.15rem .4rem;border-radius:999px;color:var(--al-sidebar-ink)}.nav a.active .nav-badge{background:var(--al-accent);color:#062616}.sidebar-foot{padding:.75rem .8rem;border:1px solid rgba(255,255,255,.08);border-radius:12px;font-size:.78rem;color:var(--al-sidebar-muted)}.sidebar-foot strong{display:block;color:var(--al-sidebar-ink);margin-bottom:.2rem;font-weight:600}.main{display:flex;flex-direction:column;min-width:0}.topbar{display:flex;align-items:center;gap:1rem;padding:.9rem 1.5rem;border-bottom:1px solid var(--al-line);background:#f4f5f3e0;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);position:sticky;top:0;z-index:5}.search{flex:1;max-width:420px;background:var(--al-surface);border:1px solid var(--al-line);border-radius:999px;padding:.65rem 1rem;color:var(--al-ink)}.search::placeholder{color:#8a9184}.live-pill,.user-pill{display:inline-flex;align-items:center;gap:.45rem;padding:.45rem .75rem;border-radius:999px;border:1px solid var(--al-line);background:var(--al-surface);font-size:.8rem;white-space:nowrap}.live-dot{width:7px;height:7px;border-radius:50%;background:var(--al-accent);box-shadow:0 0 0 4px #1dab612e}.content{padding:1.35rem 1.5rem 2.5rem}.agent-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.85rem}.agent-card{background:var(--al-surface);border:1px solid var(--al-line);border-radius:var(--al-radius);padding:1.1rem 1.15rem;box-shadow:var(--al-shadow);cursor:pointer;text-align:left;color:inherit;width:100%}.agent-card:hover,.agent-card:focus-visible{border-color:var(--al-accent);outline:none}.agent-card h2{margin:0;font-size:1.02rem;letter-spacing:-.02em}.agent-card p{margin:.4rem 0 .85rem;color:var(--al-muted);font-size:.85rem;line-height:1.4}.agent-meta{display:flex;gap:.5rem;flex-wrap:wrap;font-size:.78rem;color:var(--al-muted)}.menu-btn{display:none;border:1px solid var(--al-line);background:var(--al-surface);border-radius:10px;padding:.5rem .7rem}.toast{position:fixed;right:1rem;bottom:1rem;background:var(--al-sidebar);color:#fff;padding:.75rem 1rem;border-radius:12px;font-size:.85rem;box-shadow:0 12px 30px #0003;opacity:0;transform:translateY(8px);transition:.25s ease;pointer-events:none;z-index:20}.toast.show{opacity:1;transform:translateY(0)}@media(max-width:980px){.grid-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.panels,.agent-grid{grid-template-columns:1fr}}@media(max-width:820px){.app{grid-template-columns:1fr}.sidebar{position:fixed;inset:0 auto 0 0;width:min(86vw,280px);transform:translate(-105%);transition:transform .2s ease;z-index:30}.sidebar.open{transform:translate(0)}.menu-btn{display:inline-flex}.backdrop{display:none;position:fixed;inset:0;background:#00000059;z-index:25}.backdrop.show{display:block}}:focus-visible{outline:2px solid var(--al-info);outline-offset:3px}.nav a{font-size:.95rem}.nav a.active{color:var(--al-sidebar-ink)}.stack{display:grid;gap:1rem}.table-scroll{overflow-x:auto}.table{min-width:560px}.agent-title{display:flex;justify-content:space-between;align-items:center;gap:1rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.skip-link{position:fixed;top:-100px;left:1rem;z-index:100;padding:1rem;background:var(--al-surface)}.skip-link:focus{top:1rem}.refresh-banner{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.75rem;border:1px solid var(--al-line);border-radius:var(--al-radius-sm);margin-bottom:1rem}.live-pill{margin-left:auto}.live-pill[data-state=disconnected] .live-dot{background:var(--al-danger);box-shadow:none}.live-pill[data-state=connecting] .live-dot{background:var(--al-warn);box-shadow:none}.pill{font-size:.75rem}.stat-label,.table th{font-size:.8rem}.sidebar-close{display:none}progress{width:100%;accent-color:var(--al-accent)}@media(max-width:820px){.sidebar-close{display:inline-flex;align-self:flex-end}.topbar{padding:.75rem;gap:.5rem;flex-wrap:wrap}.content{padding:1rem}.search{min-width:0;width:100%}.user-pill{display:none}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition:none!important;animation:none!important}}
|