@cef-ai/cli 0.2.1 → 0.2.3
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/README.md +2 -2
- package/dist/commands/dev/server.js +34 -6
- package/dist/commands/dev/{ui.js → static/app.js} +50 -401
- package/dist/commands/dev/static/index.html +205 -0
- package/dist/commands/dev/static/static/app.js +633 -0
- package/dist/commands/dev/static/static/index.html +205 -0
- package/dist/commands/dev/static/static/style.css +184 -0
- package/dist/commands/dev/static/style.css +184 -0
- package/dist/lib/config.js +14 -1
- package/dist/lib/runtime/agent-router.js +2 -13
- package/dist/lib/runtime/index.js +2 -4
- package/dist/lib/transpile.d.ts +1 -0
- package/dist/lib/transpile.js +9 -0
- package/example/.env.example +2 -2
- package/package.json +6 -5
- package/dist/commands/dev/ui.d.ts +0 -1
|
@@ -0,0 +1,205 @@
|
|
|
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>CEF Dev</title>
|
|
7
|
+
<link rel="stylesheet" href="/style.css">
|
|
8
|
+
<script src="https://unpkg.com/vis-network@9.1.9/standalone/umd/vis-network.min.js"></script>
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
<div class="top-accent"></div>
|
|
12
|
+
<div id="app">
|
|
13
|
+
<div id="header">
|
|
14
|
+
<div class="header-brand">
|
|
15
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M12 2L21 7.5V16.5L12 22L3 16.5V7.5L12 2Z" stroke="var(--accent)" stroke-width="1.5" fill="var(--accent)" fill-opacity="0.1"/><path d="M12 7L17 9.75V15.25L12 18L7 15.25V9.75L12 7Z" stroke="var(--accent)" stroke-width="1.2" fill="var(--accent)" fill-opacity="0.18"/></svg>
|
|
16
|
+
<div class="header-title"><span class="ht-main"><span>CEF</span> AI</span><span class="ht-sub">Dev Console</span></div>
|
|
17
|
+
</div>
|
|
18
|
+
<span class="version-pill">v0.9.0</span>
|
|
19
|
+
<span class="pill" id="status-pill"><span class="status-dot err" id="status-dot"></span>connecting</span>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<div id="sidebar"></div>
|
|
23
|
+
|
|
24
|
+
<div id="main">
|
|
25
|
+
<div class="empty-state" id="empty-state">
|
|
26
|
+
<div class="empty-hero">
|
|
27
|
+
<svg width="48" height="48" viewBox="0 0 48 48" fill="none">
|
|
28
|
+
<path d="M24 4L42 14V34L24 44L6 34V14L24 4Z" stroke="var(--accent)" stroke-width="1.5" fill="var(--accent)" fill-opacity="0.08"/>
|
|
29
|
+
<path d="M24 16L32 20.5V29.5L24 34L16 29.5V20.5L24 16Z" stroke="var(--accent)" stroke-width="1.5" fill="var(--accent)" fill-opacity="0.15"/>
|
|
30
|
+
</svg>
|
|
31
|
+
<div class="empty-title">CEF AI Dev Console</div>
|
|
32
|
+
<div class="empty-subtitle">Select an engagement, agent, or cubby from the sidebar to begin testing</div>
|
|
33
|
+
</div>
|
|
34
|
+
<div class="empty-stats" id="empty-stats"></div>
|
|
35
|
+
<div class="empty-shortcuts">
|
|
36
|
+
<div class="shortcut-item"><span class="shortcut-key">Engagements</span><span class="shortcut-desc">Trigger execution flows with payloads</span></div>
|
|
37
|
+
<div class="shortcut-item"><span class="shortcut-key">Agent Tasks</span><span class="shortcut-desc">Call individual agent functions directly</span></div>
|
|
38
|
+
<div class="shortcut-item"><span class="shortcut-key">Cubbies</span><span class="shortcut-desc">Browse tables, run SQL, visualize graphs</span></div>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<div class="panel" id="panel-engagement">
|
|
43
|
+
<div class="panel-title"><span class="s-dot s-dot-eng"></span> <span id="eng-name"></span> <span style="font-size:10px;font-weight:400;color:var(--text3);background:var(--surface2);border:1px solid var(--border);border-radius:4px;padding:2px 7px;margin-left:4px">engagement</span></div>
|
|
44
|
+
<div id="eng-desc" style="font-size:11px;color:var(--text3);margin-bottom:14px"></div>
|
|
45
|
+
<div id="eng-schema-hints"></div>
|
|
46
|
+
<div class="field">
|
|
47
|
+
<label class="field-label">Payload</label>
|
|
48
|
+
<textarea id="eng-payload" rows="4">{}</textarea>
|
|
49
|
+
</div>
|
|
50
|
+
<div style="display:flex;gap:8px;align-items:flex-end;margin-bottom:10px;flex-wrap:wrap">
|
|
51
|
+
<div style="display:flex;gap:6px;align-items:flex-end">
|
|
52
|
+
<div class="field" style="margin:0">
|
|
53
|
+
<label class="field-label">Repeat</label>
|
|
54
|
+
<input type="number" id="eng-repeat" value="1" min="1" max="999" style="width:70px;padding:6px 8px">
|
|
55
|
+
</div>
|
|
56
|
+
<div class="field" style="margin:0">
|
|
57
|
+
<label class="field-label">Delay ms</label>
|
|
58
|
+
<input type="number" id="eng-delay" value="300" min="0" style="width:80px;padding:6px 8px">
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
<div class="field" style="margin:0;flex:1;min-width:180px">
|
|
62
|
+
<label class="field-label">or blast from file (JSON array)</label>
|
|
63
|
+
<input type="file" id="eng-file-blast" accept=".json" style="width:100%;padding:5px 0;font-size:11px;color:var(--text2);background:none;border:none;cursor:pointer">
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
<div class="btn-row">
|
|
67
|
+
<button class="btn-primary" id="eng-start">Start</button>
|
|
68
|
+
<button class="btn-danger" id="eng-stop" style="display:none">Stop</button>
|
|
69
|
+
</div>
|
|
70
|
+
<div id="eng-result"></div>
|
|
71
|
+
<div class="stream-area" id="eng-stream-area" style="display:none">
|
|
72
|
+
<div class="panel-title" style="font-size:14px">Stream Data</div>
|
|
73
|
+
<div class="tab-bar">
|
|
74
|
+
<div class="tab active" data-stab="single">Single</div>
|
|
75
|
+
<div class="tab" data-stab="bulk">Bulk</div>
|
|
76
|
+
<div class="tab" data-stab="file">File</div>
|
|
77
|
+
</div>
|
|
78
|
+
<div id="stream-single">
|
|
79
|
+
<div class="field">
|
|
80
|
+
<label class="field-label">Packet</label>
|
|
81
|
+
<textarea id="eng-stream-payload" rows="3">{ }</textarea>
|
|
82
|
+
</div>
|
|
83
|
+
<button class="btn-primary" id="eng-push">Push</button>
|
|
84
|
+
</div>
|
|
85
|
+
<div id="stream-bulk" style="display:none">
|
|
86
|
+
<div class="field">
|
|
87
|
+
<label class="field-label">JSON Lines (one event per line) or JSON array</label>
|
|
88
|
+
<textarea id="eng-bulk-payload" rows="6">{ }
|
|
89
|
+
{ }</textarea>
|
|
90
|
+
</div>
|
|
91
|
+
<div style="display:flex;align-items:center;gap:10px;margin-bottom:10px">
|
|
92
|
+
<label class="field-label" style="margin:0;white-space:nowrap">Delay (ms)</label>
|
|
93
|
+
<input type="text" id="eng-bulk-delay" value="100" style="width:70px;padding:6px 8px">
|
|
94
|
+
</div>
|
|
95
|
+
<div class="btn-row" style="margin-top:0">
|
|
96
|
+
<button class="btn-primary" id="eng-bulk-send">Send All</button>
|
|
97
|
+
<button class="btn-danger" id="eng-bulk-stop" style="display:none">Stop</button>
|
|
98
|
+
</div>
|
|
99
|
+
<div id="eng-bulk-progress"></div>
|
|
100
|
+
</div>
|
|
101
|
+
<div id="stream-file" style="display:none">
|
|
102
|
+
<div id="file-drop-zone" style="border:2px dashed var(--border);border-radius:var(--radius);padding:28px;text-align:center;cursor:pointer;transition:border-color .15s;margin-bottom:12px">
|
|
103
|
+
<div style="color:var(--text3);font-size:12px">Drop a <strong>.json</strong> or <strong>.jsonl</strong> file here, or click to browse</div>
|
|
104
|
+
<input type="file" id="eng-file-input" accept=".json,.jsonl" style="display:none">
|
|
105
|
+
<div id="file-info" style="margin-top:8px;font:11px var(--mono);color:var(--text2)"></div>
|
|
106
|
+
</div>
|
|
107
|
+
<div style="display:flex;align-items:center;gap:10px;margin-bottom:10px">
|
|
108
|
+
<label class="field-label" style="margin:0;white-space:nowrap">Delay (ms)</label>
|
|
109
|
+
<input type="text" id="eng-file-delay" value="100" style="width:70px;padding:6px 8px">
|
|
110
|
+
</div>
|
|
111
|
+
<div class="btn-row" style="margin-top:0">
|
|
112
|
+
<button class="btn-primary" id="eng-file-send" disabled>Send File</button>
|
|
113
|
+
<button class="btn-danger" id="eng-file-stop" style="display:none">Stop</button>
|
|
114
|
+
</div>
|
|
115
|
+
<div id="eng-file-progress"></div>
|
|
116
|
+
</div>
|
|
117
|
+
<div id="eng-push-result"></div>
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
|
|
121
|
+
<div class="panel" id="panel-agent">
|
|
122
|
+
<div class="panel-title"><span class="s-dot s-dot-agent"></span> <span id="agent-label"></span> <span style="font-size:10px;font-weight:400;color:var(--text3);background:var(--surface2);border:1px solid var(--border);border-radius:4px;padding:2px 7px;margin-left:4px">agent task</span></div>
|
|
123
|
+
<div id="agent-desc" style="font-size:11px;color:var(--text3);margin-bottom:14px"></div>
|
|
124
|
+
<div id="agent-schema-hints"></div>
|
|
125
|
+
<div class="field">
|
|
126
|
+
<label class="field-label">Payload</label>
|
|
127
|
+
<textarea id="agent-payload" rows="5">{}</textarea>
|
|
128
|
+
</div>
|
|
129
|
+
<div class="btn-row">
|
|
130
|
+
<button class="btn-primary" id="agent-call">Call</button>
|
|
131
|
+
<button class="btn-secondary" id="agent-batch" style="display:none">Run Batch</button>
|
|
132
|
+
</div>
|
|
133
|
+
<div id="agent-result"></div>
|
|
134
|
+
</div>
|
|
135
|
+
|
|
136
|
+
<div class="panel" id="panel-cubby">
|
|
137
|
+
<div class="panel-title"><span class="s-dot s-dot-cubby"></span> <span id="cubby-label"></span></div>
|
|
138
|
+
<div class="tab-bar">
|
|
139
|
+
<div class="tab active" data-tab="browse">Browse</div>
|
|
140
|
+
<div class="tab" data-tab="sql">SQL</div>
|
|
141
|
+
<div class="tab" data-tab="graph" id="graph-tab" style="display:none">Graph</div>
|
|
142
|
+
</div>
|
|
143
|
+
<div id="cubby-browse"><div id="cubby-tables"></div></div>
|
|
144
|
+
<div id="cubby-sql" style="display:none">
|
|
145
|
+
<div style="display:flex;gap:8px;align-items:flex-end;margin-bottom:10px">
|
|
146
|
+
<div class="field" style="flex:1;margin:0">
|
|
147
|
+
<label class="field-label">Saved Queries</label>
|
|
148
|
+
<select id="query-select" style="width:100%;background:var(--surface2);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);padding:7px 10px;font-size:12px;outline:none">
|
|
149
|
+
<option value="">— select a saved query —</option>
|
|
150
|
+
</select>
|
|
151
|
+
</div>
|
|
152
|
+
<button class="btn-ghost" id="query-delete" title="Delete selected query" style="display:none;padding:7px 10px">✕</button>
|
|
153
|
+
</div>
|
|
154
|
+
<div class="field">
|
|
155
|
+
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:6px">
|
|
156
|
+
<label class="field-label" style="margin:0">Query</label>
|
|
157
|
+
<div style="display:flex;gap:6px;align-items:center">
|
|
158
|
+
<input type="text" id="query-name" placeholder="Name to save as..." style="width:160px;padding:4px 8px;font-size:11px;border-radius:5px;background:var(--surface2);border:1px solid var(--border);color:var(--text)">
|
|
159
|
+
<button class="btn-ghost" id="query-save" style="padding:4px 10px;font-size:11px">Save</button>
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
<textarea id="cubby-sql-input" rows="4">SELECT * FROM </textarea>
|
|
163
|
+
</div>
|
|
164
|
+
<button class="btn-primary" id="cubby-run">Run</button>
|
|
165
|
+
<div id="cubby-sql-result"></div>
|
|
166
|
+
</div>
|
|
167
|
+
<div id="cubby-graph">
|
|
168
|
+
<div id="graph-stats"></div>
|
|
169
|
+
<div style="position:relative">
|
|
170
|
+
<div id="graph-canvas"></div>
|
|
171
|
+
<div id="graph-detail">
|
|
172
|
+
<div id="gd-type-badge" class="gd-type"></div>
|
|
173
|
+
<div id="gd-attrs"></div>
|
|
174
|
+
</div>
|
|
175
|
+
<div id="graph-legend">
|
|
176
|
+
<div class="gl-row"><div class="gl-dot" style="background:#6366f1"></div>artifact</div>
|
|
177
|
+
<div class="gl-row"><div class="gl-dot" style="background:#f59e0b"></div>work</div>
|
|
178
|
+
<div class="gl-row"><div class="gl-dot" style="background:#22c55e"></div>operator</div>
|
|
179
|
+
<div class="gl-row"><div class="gl-dot" style="background:#ec4899"></div>eval</div>
|
|
180
|
+
<div class="gl-row"><div class="gl-dot" style="background:#71717a"></div>artifact_map</div>
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
</div>
|
|
184
|
+
</div>
|
|
185
|
+
</div>
|
|
186
|
+
|
|
187
|
+
<div id="bottom" style="height:220px">
|
|
188
|
+
<div id="resize-handle"></div>
|
|
189
|
+
<div class="bottom-bar">
|
|
190
|
+
<div class="btab active" data-btab="logs">Logs</div>
|
|
191
|
+
<div class="btab" data-btab="flow">Flow</div>
|
|
192
|
+
<div class="bottom-actions">
|
|
193
|
+
<input type="text" id="log-filter" placeholder="Filter...">
|
|
194
|
+
<button class="icon-btn" id="btn-clear" title="Clear">✕</button>
|
|
195
|
+
<button class="icon-btn" id="btn-collapse" title="Collapse">▼</button>
|
|
196
|
+
</div>
|
|
197
|
+
</div>
|
|
198
|
+
<div id="log-container"></div>
|
|
199
|
+
<div id="flow-container" style="display:none"></div>
|
|
200
|
+
</div>
|
|
201
|
+
</div>
|
|
202
|
+
|
|
203
|
+
<script src="/app.js"></script>
|
|
204
|
+
</body>
|
|
205
|
+
</html>
|