agentlas 1.0.39 → 1.0.40
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/CHANGELOG.md +14 -0
- package/engine/ui/palette.cjs +1 -0
- package/engine/ui/pitui-shell.cjs +56 -0
- package/engine/ui/repl.cjs +8 -8
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.0.40 — 2026-08-11
|
|
4
|
+
|
|
5
|
+
Desktop surfaces reach the pi shell: dashboard and graph view.
|
|
6
|
+
|
|
7
|
+
- `/dashboard` (pi shell): agents/firms/telegram badges + automations panel
|
|
8
|
+
(enabled state, last run) from the local store — first of the thirteen
|
|
9
|
+
Desktop-only honest stops to be lifted.
|
|
10
|
+
- `/graph show <name>` (pi shell): the automation graph renders as Unicode
|
|
11
|
+
box art (grok-mermaid) — condition branches, loop-back edges, and Korean
|
|
12
|
+
labels align correctly. No canvas emulation; editing stays declarative.
|
|
13
|
+
- First-run onboarding now runs before the pi shell starts (sequential
|
|
14
|
+
readline → pi-tui, no stdin contention), so `AGENTLAS_TUI=pi` works for
|
|
15
|
+
brand-new installs too.
|
|
16
|
+
|
|
3
17
|
## 1.0.39 — 2026-08-11
|
|
4
18
|
|
|
5
19
|
pi-tui shell increment 2 + architecture mirror sync.
|
package/engine/ui/palette.cjs
CHANGED
|
@@ -24,6 +24,7 @@ const SLASH_COMMANDS = [
|
|
|
24
24
|
{ command: "/graph", args: "[run <이름>]", ko: "저장된 자동화 그래프", en: "Saved automation graphs" },
|
|
25
25
|
{ command: "/mcp", args: "", ko: "MCP 서버 목록", en: "MCP servers" },
|
|
26
26
|
{ command: "/doctor", args: "", ko: "런타임·데이터 점검", en: "Health check" },
|
|
27
|
+
{ command: "/dashboard", args: "", ko: "관제 대시보드 (pi 셸)", en: "Dashboard (pi shell)" },
|
|
27
28
|
{ command: "/runtime", args: "<kind>", ko: "새 세션 런타임 지정", en: "Set runtime for new sessions" },
|
|
28
29
|
{ command: "/model", args: "<id|default>", ko: "새 세션 모델 지정", en: "Set model for new sessions" },
|
|
29
30
|
{ command: "/effort", args: "<level|none>", ko: "새 세션 추론 강도 지정", en: "Set effort for new sessions" },
|
|
@@ -232,6 +232,62 @@ async function startPiShell(ctx, opts = {}) {
|
|
|
232
232
|
ui.line(palette.renderPalette(ctx.lang));
|
|
233
233
|
return;
|
|
234
234
|
}
|
|
235
|
+
// 그래프 보기 (Phase 4) — 캔버스를 흉내내지 않는다: mermaid → 유니코드 박스 아트.
|
|
236
|
+
if (cmd === "graph" && rest[0] === "show" && rest[1]) {
|
|
237
|
+
const name = rest.slice(1).join(" ");
|
|
238
|
+
const row = db.prepare(
|
|
239
|
+
"SELECT name, graph_json FROM automations WHERE name = ? AND graph_json IS NOT NULL").get(name);
|
|
240
|
+
if (row) {
|
|
241
|
+
try {
|
|
242
|
+
const g = JSON.parse(row.graph_json);
|
|
243
|
+
const esc = (s) => String(s || "").replace(/["[\]{}|<>]/g, " ").trim().slice(0, 28) || "·";
|
|
244
|
+
const lines = ["flowchart TD"];
|
|
245
|
+
for (const n of g.nodes || []) {
|
|
246
|
+
const label = esc(n.label || n.id);
|
|
247
|
+
lines.push(n.type === "condition" ? ` ${n.id}{${label}}` : ` ${n.id}[${label}]`);
|
|
248
|
+
}
|
|
249
|
+
for (const e of g.edges || []) {
|
|
250
|
+
const lbl = e.sourceHandle === "true" ? "|참|" : e.sourceHandle === "false" ? "|거짓|" : "";
|
|
251
|
+
lines.push(` ${e.source} -->${lbl} ${e.target}`);
|
|
252
|
+
}
|
|
253
|
+
const { render, toAnsi } = require("grok-mermaid");
|
|
254
|
+
const art = toAnsi(render(lines.join("\n")));
|
|
255
|
+
ui.ensureNl();
|
|
256
|
+
ui.line(ui.c.bold(row.name));
|
|
257
|
+
for (const rowLine of (Array.isArray(art) ? art : String(art).split("\n"))) ui.line(rowLine);
|
|
258
|
+
ui.line("");
|
|
259
|
+
return;
|
|
260
|
+
} catch { /* 렌더 실패 → 아래 클래식 폴스루가 텍스트로 보여준다 */ }
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// 대시보드 (Phase 3-2) — 데스크탑 정직 정지 13종 중 첫 해제. 로컬 DB 직조회.
|
|
264
|
+
if (cmd === "dashboard") {
|
|
265
|
+
const chip = (paint, s) => paint(` ${s} `);
|
|
266
|
+
const agents = db.prepare(
|
|
267
|
+
"SELECT COALESCE(NULLIF(entity_kind,''),'agent') k, builtin, COUNT(*) n FROM installed_agents WHERE COALESCE(visibility,'')!='background' GROUP BY k, builtin").all();
|
|
268
|
+
const firms = db.prepare("SELECT COUNT(*) n FROM firms").get().n;
|
|
269
|
+
const autos = db.prepare(
|
|
270
|
+
"SELECT name, enabled, last_run_at FROM automations ORDER BY COALESCE(last_run_at,'') DESC LIMIT 5").all();
|
|
271
|
+
const autoTotal = db.prepare("SELECT COUNT(*) n, SUM(enabled) e FROM automations").get();
|
|
272
|
+
const tg = db.prepare("SELECT COUNT(*) n FROM telegram_bindings").get().n;
|
|
273
|
+
ui.ensureNl();
|
|
274
|
+
ui.line(ui.c.bold(en ? "Dashboard" : "대시보드"));
|
|
275
|
+
const local = agents.filter(a => !a.builtin).reduce((s, a) => s + a.n, 0);
|
|
276
|
+
const builtin = agents.filter(a => a.builtin).reduce((s, a) => s + a.n, 0);
|
|
277
|
+
ui.line(` ${chip(ui.c.inverse, en ? `agents ${local}` : `에이전트 ${local}`)} ${chip(ui.c.dim, `builtin ${builtin}`)} ${chip(ui.c.inverse, en ? `firms ${firms}` : `회사 ${firms}`)} ${chip(ui.c.dim, `telegram ${tg}`)}`);
|
|
278
|
+
ui.line("");
|
|
279
|
+
ui.line(ui.c.bold(en ? `Automations ${autoTotal.e || 0}/${autoTotal.n} on` : `자동화 ${autoTotal.e || 0}/${autoTotal.n} 켜짐`));
|
|
280
|
+
for (const a of autos) {
|
|
281
|
+
const st = a.enabled ? ui.c.green("●") : ui.c.faint("○");
|
|
282
|
+
ui.line(` ${st} ${a.name}${a.last_run_at ? ui.c.dim(` · ${String(a.last_run_at).slice(0, 16)}`) : ""}`);
|
|
283
|
+
}
|
|
284
|
+
if (!autos.length) ui.line(ui.c.dim(en ? " (none — /automation add)" : " (없음 — /automation add)"));
|
|
285
|
+
ui.line("");
|
|
286
|
+
ui.line(ui.c.dim(en
|
|
287
|
+
? "details: /agents · /automation list · /usage · /sessions"
|
|
288
|
+
: "자세히: /agents · /automation list · /usage · /sessions"));
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
235
291
|
// 세션 관찰/전환 (증분 2b) — 기본 REPL과 같은 orch/renderer 배선
|
|
236
292
|
if (cmd === "sessions" || cmd === "tree") {
|
|
237
293
|
require("./repl.cjs").printSessions(shellCtx, orch);
|
package/engine/ui/repl.cjs
CHANGED
|
@@ -86,14 +86,6 @@ function pickProjectController(db, cwd = process.cwd()) {
|
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
async function startRepl(ctx, opts = {}) {
|
|
89
|
-
/*
|
|
90
|
-
* 실험 셸 opt-in (D3 Phase 2 증분 1): AGENTLAS_TUI=pi + TTY 일 때만.
|
|
91
|
-
* 기본 REPL 이 정본이며, 온보딩 전(prefs.onboarded=false)에는 켜지 않는다 —
|
|
92
|
-
* 마법사는 아직 readline 계약이다(Phase 2-2 에서 이전).
|
|
93
|
-
*/
|
|
94
|
-
if (process.env.AGENTLAS_TUI === "pi" && process.stdin.isTTY && ctx.prefs && ctx.prefs.onboarded) {
|
|
95
|
-
return require("./pitui-shell.cjs").startPiShell(ctx, opts);
|
|
96
|
-
}
|
|
97
89
|
// 마법사가 언어를 바꾸면 이 뒤의 문구도 따라가야 한다 — 아래 온보딩 블록에서 갱신한다.
|
|
98
90
|
let en = ctx.lang === "en";
|
|
99
91
|
const ui = ctx.uiInstance;
|
|
@@ -132,6 +124,14 @@ async function startRepl(ctx, opts = {}) {
|
|
|
132
124
|
}
|
|
133
125
|
}
|
|
134
126
|
|
|
127
|
+
/*
|
|
128
|
+
* 실험 셸 opt-in (D3 Phase 2): AGENTLAS_TUI=pi + TTY.
|
|
129
|
+
* 온보딩 마법사(위 readline 블록)가 먼저 끝난 뒤 진입한다 — 순차 실행이라
|
|
130
|
+
* stdin 경합이 없고, 첫 실행 사용자도 pi 셸을 쓸 수 있다(증분 2c).
|
|
131
|
+
*/
|
|
132
|
+
if (process.env.AGENTLAS_TUI === "pi" && process.stdin.isTTY) {
|
|
133
|
+
return require("./pitui-shell.cjs").startPiShell(ctx, opts);
|
|
134
|
+
}
|
|
135
135
|
const orch = new Orchestrator({ db, lang: ctx.lang });
|
|
136
136
|
const renderer = new Renderer(ui);
|
|
137
137
|
let permission = permissions.normalize(opts.permission || (ctx.prefs && ctx.prefs.permission) || "write");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentlas",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.40",
|
|
4
4
|
"description": "Agentlas project terminal — run project controllers and task-scoped agent teams from the terminal. Standalone: no desktop app process required.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"agentlas": "bin/agentlas.cjs"
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
"author": "Agentlas (https://agentlas.cloud)",
|
|
51
51
|
"license": "Apache-2.0",
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@earendil-works/pi-tui": "0.84.1"
|
|
53
|
+
"@earendil-works/pi-tui": "0.84.1",
|
|
54
|
+
"grok-mermaid": "0.2.2"
|
|
54
55
|
}
|
|
55
56
|
}
|