@piagent/platform 1.16.0 → 1.16.2
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 +32 -0
- package/README.md +1 -1
- package/README.vi.md +1 -1
- package/docs/command-reference-vietnamese.md +4 -2
- package/docs/distribution-standard.md +6 -6
- package/docs/languages.json +2 -2
- package/docs/operator-manual-vietnamese.md +7 -7
- package/docs/publishing-for-teams.md +3 -1
- package/docs/release-install-policy.md +2 -2
- package/docs/team-onboarding.md +2 -2
- package/docs-site/architecture.html +1 -1
- package/docs-site/benchmark.html +1 -1
- package/docs-site/commands.html +1 -1
- package/docs-site/content/en/index.html +4 -4
- package/docs-site/content/en/whats-new.html +24 -0
- package/docs-site/content/index.html +4 -4
- package/docs-site/content/whats-new.html +24 -0
- package/docs-site/context-engine.html +1 -1
- package/docs-site/ecosystem.html +1 -1
- package/docs-site/en/architecture.html +1 -1
- package/docs-site/en/benchmark.html +1 -1
- package/docs-site/en/commands.html +1 -1
- package/docs-site/en/context-engine.html +1 -1
- package/docs-site/en/ecosystem.html +1 -1
- package/docs-site/en/index.html +5 -5
- package/docs-site/en/mcp-approval.html +1 -1
- package/docs-site/en/mcp-auth.html +1 -1
- package/docs-site/en/mcp-servers.html +1 -1
- package/docs-site/en/mcp.html +1 -1
- package/docs-site/en/permissions.html +1 -1
- package/docs-site/en/profiles.html +1 -1
- package/docs-site/en/quickstart.html +1 -1
- package/docs-site/en/runtime.html +1 -1
- package/docs-site/en/scope.html +1 -1
- package/docs-site/en/security.html +1 -1
- package/docs-site/en/team.html +1 -1
- package/docs-site/en/whats-new.html +25 -1
- package/docs-site/en/windows.html +1 -1
- package/docs-site/en/workflows.html +1 -1
- package/docs-site/index.html +5 -5
- package/docs-site/mcp-approval.html +1 -1
- package/docs-site/mcp-auth.html +1 -1
- package/docs-site/mcp-servers.html +1 -1
- package/docs-site/mcp.html +1 -1
- package/docs-site/permissions.html +1 -1
- package/docs-site/profiles.html +1 -1
- package/docs-site/quickstart.html +1 -1
- package/docs-site/runtime.html +1 -1
- package/docs-site/scope.html +1 -1
- package/docs-site/security.html +1 -1
- package/docs-site/team.html +1 -1
- package/docs-site/whats-new.html +25 -1
- package/docs-site/windows.html +1 -1
- package/docs-site/workflows.html +1 -1
- package/evals/private-holdout-v1/public-exposure.v2.json +2 -2
- package/package.json +1 -1
- package/packages/piagent-core/extensions/piagent-guard.ts +3 -0
- package/packages/piagent-core/extensions/update-check.js +2 -2
- package/packages/piagent-core/managed/resource-loader.mjs +14 -2
- package/packages/piagent-core/managed/session.mjs +7 -5
- package/packages/piagent-core/package.json +1 -1
- package/packages/piagent-core/runtime/update/terminal-update-offer.d.mts +7 -0
- package/packages/piagent-core/runtime/update/terminal-update-offer.mjs +114 -0
- package/packages/piagent-webui/dist/client/assets/{MarkdownMessage-FBwt5TJv.js → MarkdownMessage-BDdLJYnZ.js} +1 -1
- package/packages/piagent-webui/dist/client/assets/index-DJGByyfL.js +228 -0
- package/packages/piagent-webui/dist/client/index.html +1 -1
- package/packages/piagent-webui/gateway/update-center.ts +3 -2
- package/packages/piagent-webui/server/loopback-server.ts +1 -0
- package/packages/piagent-webui/server/session-auth.ts +13 -2
- package/packages/piagent-webui/shared/company-copy.ts +99 -0
- package/packages/piagent-webui/shared/process-copy.ts +64 -0
- package/scripts/company-terminal.mjs +104 -0
- package/scripts/piagent-studio.mjs +13 -4
- package/packages/piagent-webui/dist/client/assets/index-Bj9Tlouu.js +0 -228
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · EN</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Language">
|
|
35
35
|
<a class="language-option" href="/runtime" hreflang="vi" lang="vi">VI</a>
|
|
36
36
|
<a class="language-option current" href="/en/runtime" hreflang="en" lang="en" aria-current="true">EN</a>
|
package/docs-site/en/scope.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · EN</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Language">
|
|
35
35
|
<a class="language-option" href="/scope" hreflang="vi" lang="vi">VI</a>
|
|
36
36
|
<a class="language-option current" href="/en/scope" hreflang="en" lang="en" aria-current="true">EN</a>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · EN</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Language">
|
|
35
35
|
<a class="language-option" href="/security" hreflang="vi" lang="vi">VI</a>
|
|
36
36
|
<a class="language-option current" href="/en/security" hreflang="en" lang="en" aria-current="true">EN</a>
|
package/docs-site/en/team.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · EN</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Language">
|
|
35
35
|
<a class="language-option" href="/team" hreflang="vi" lang="vi">VI</a>
|
|
36
36
|
<a class="language-option current" href="/en/team" hreflang="en" lang="en" aria-current="true">EN</a>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · EN</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Language">
|
|
35
35
|
<a class="language-option" href="/whats-new" hreflang="vi" lang="vi">VI</a>
|
|
36
36
|
<a class="language-option current" href="/en/whats-new" hreflang="en" lang="en" aria-current="true">EN</a>
|
|
@@ -104,6 +104,30 @@
|
|
|
104
104
|
<h1>1.9.0: ask in plain language, the team's Harness checks</h1>
|
|
105
105
|
<p>The task contract and workflow commands are gone. Company mode asks for checks and a review on its own; Stop, network commands on approval and clearer approval cards.</p>
|
|
106
106
|
</div>
|
|
107
|
+
<section class="section">
|
|
108
|
+
<p class="section-kicker">v1.16.2 · 2026-10-08</p>
|
|
109
|
+
<h2 id="v1-16-2">The Terminal says what the dashboard says</h2>
|
|
110
|
+
<p class="section-lead">When a new Piagent is out, the Terminal (<span class="inline-code">pi</span> and <span class="inline-code">piagent studio</span>) asks <strong>Update now</strong> or <strong>Later</strong> (asked again after an hour), only between turns, with a footer line; <span class="inline-code">/piagent-update</span> checks at once.</p>
|
|
111
|
+
<ul>
|
|
112
|
+
<li><span class="inline-code">/bypass</span> in <span class="inline-code">piagent studio</span> switches Bypass for the conversation, like the dashboard's switch; the footer shows "Bypass" while it is on.</li>
|
|
113
|
+
<li>A network command is confirmed with its reason, why Bypass still asks, and what allowing or declining does.</li>
|
|
114
|
+
<li>Failed requests, a company runtime that cannot start and the Harness's notes (checks, review, a subagent's objection, "your call") read in Vietnamese as on the dashboard.</li>
|
|
115
|
+
<li>With Agent Watch 0.15.2: when a Watch update needs Keychain access again, Watch asks in a dialog and refreshes Piagent's setup at once.</li>
|
|
116
|
+
</ul>
|
|
117
|
+
<p>This release changes the company launcher: Agent Watch refreshes the setup on its next sync (minutes). If <span class="inline-code">piagent studio</span> says the setup changed, open Agent Watch → Studio and import it for Piagent.</p>
|
|
118
|
+
</section>
|
|
119
|
+
|
|
120
|
+
<section class="section">
|
|
121
|
+
<p class="section-kicker">v1.16.1 · 2026-10-07</p>
|
|
122
|
+
<h2 id="v1-16-1">New releases are announced, checked every hour</h2>
|
|
123
|
+
<p class="section-lead">When a new Piagent is out, the dashboard opens a dialog with what will change and <strong>Update now</strong>; <strong>Later</strong> asks again after an hour. After the update, the restarted dashboard says it worked. The dashboard and the Terminal check for a new release every hour.</p>
|
|
124
|
+
<ul>
|
|
125
|
+
<li>A dashboard tab no longer loses its sign-in when another Piagent server on the machine (the company runtime, another launch) signs in.</li>
|
|
126
|
+
<li>A tab whose sign-in is gone (Piagent restarted, older than 8 hours) no longer retries with 401 errors; it says how to open Piagent again: <span class="inline-code">piagent dashboard</span> or Agent Watch.</li>
|
|
127
|
+
</ul>
|
|
128
|
+
<p>Updating from 1.16.0 needs no re-import in Agent Watch.</p>
|
|
129
|
+
</section>
|
|
130
|
+
|
|
107
131
|
<section class="section">
|
|
108
132
|
<p class="section-kicker">v1.16.0 · 2026-10-07</p>
|
|
109
133
|
<h2 id="v1-16-0">Bypass for company conversations</h2>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · EN</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Language">
|
|
35
35
|
<a class="language-option" href="/windows" hreflang="vi" lang="vi">VI</a>
|
|
36
36
|
<a class="language-option current" href="/en/windows" hreflang="en" lang="en" aria-current="true">EN</a>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · EN</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Language">
|
|
35
35
|
<a class="language-option" href="/workflows" hreflang="vi" lang="vi">VI</a>
|
|
36
36
|
<a class="language-option current" href="/en/workflows" hreflang="en" lang="en" aria-current="true">EN</a>
|
package/docs-site/index.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/" hreflang="en" lang="en">EN</a>
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
<main>
|
|
95
95
|
<div class="content-shell" data-article>
|
|
96
96
|
<section class="hero">
|
|
97
|
-
<p class="eyebrow">Piagent 1.16.
|
|
97
|
+
<p class="eyebrow">Piagent 1.16.2</p>
|
|
98
98
|
<h1>Coding agent cho cả team, kiểm tra từng bước.</h1>
|
|
99
99
|
<p>
|
|
100
100
|
Một dashboard cho Terminal và trình duyệt. Dùng model bằng tài khoản của bạn, hoặc model của công ty qua Agent Watch và Agent Studio. Guard kiểm tra từng tool call; ở chế độ công ty, Harness của team tự yêu cầu chạy check, cho subagent review và báo kết quả ngay dưới câu trả lời.
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
<div class="hero-actions">
|
|
109
109
|
<a class="button primary" href="/quickstart">Bắt đầu</a>
|
|
110
110
|
<a class="button" href="/ecosystem">Hệ sinh thái</a>
|
|
111
|
-
<a class="button" href="/whats-new">Có gì mới trong 1.16.
|
|
111
|
+
<a class="button" href="/whats-new">Có gì mới trong 1.16.2</a>
|
|
112
112
|
<a class="button" href="/commands">Xem command</a>
|
|
113
113
|
</div>
|
|
114
114
|
</section>
|
|
@@ -184,9 +184,9 @@ piagent-setup</code></pre>
|
|
|
184
184
|
<h2 id="bat-dau-tu-dau">Bắt đầu từ đâu</h2>
|
|
185
185
|
<div class="card-grid">
|
|
186
186
|
<a class="doc-card" href="/whats-new">
|
|
187
|
-
<span class="card-kicker">Bản 1.16.
|
|
187
|
+
<span class="card-kicker">Bản 1.16.2</span>
|
|
188
188
|
<h3>Có gì mới</h3>
|
|
189
|
-
<p>Bypass cho cuộc trò chuyện công ty, đổi Harness không làm gián đoạn; ở 1.15.2: cuộc trò chuyện dài tự thu gọn trở lại; ở 1.15.1: Studio thấy mỗi call của model dùng để làm gì, nhiều cuộc trò chuyện trong một folder không nhận nhầm thay đổi của nhau; ở 1.15.0: subagent bị từ chối nói đúng lý do; ở 1.14: cập nhật giữ model bạn đã chọn; ở 1.13: cuộc trò chuyện giữ chỗ đang đọc, chữ của agent có định dạng, Piagent trên Windows qua WSL2: sandbox công ty bằng bubblewrap và Agent Watch cho Windows; ở 1.12: @ chọn file và folder trên máy, skill và command dùng bằng /, nhánh cuộc trò chuyện công ty gửi được tin nhắn.</p>
|
|
189
|
+
<p>Terminal nói giống dashboard: hỏi cập nhật, /bypass, lỗi và ghi chú Harness bằng tiếng Việt; ở 1.16.1: bản mới được báo bằng dialog và kiểm tra mỗi giờ, tab dashboard không còn mất đăng nhập; ở 1.16.0: Bypass cho cuộc trò chuyện công ty, đổi Harness không làm gián đoạn; ở 1.15.2: cuộc trò chuyện dài tự thu gọn trở lại; ở 1.15.1: Studio thấy mỗi call của model dùng để làm gì, nhiều cuộc trò chuyện trong một folder không nhận nhầm thay đổi của nhau; ở 1.15.0: subagent bị từ chối nói đúng lý do; ở 1.14: cập nhật giữ model bạn đã chọn; ở 1.13: cuộc trò chuyện giữ chỗ đang đọc, chữ của agent có định dạng, Piagent trên Windows qua WSL2: sandbox công ty bằng bubblewrap và Agent Watch cho Windows; ở 1.12: @ chọn file và folder trên máy, skill và command dùng bằng /, nhánh cuộc trò chuyện công ty gửi được tin nhắn.</p>
|
|
190
190
|
</a>
|
|
191
191
|
<a class="doc-card" href="/ecosystem">
|
|
192
192
|
<span class="card-kicker">Get started</span>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/mcp-approval" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/mcp-approval" hreflang="en" lang="en">EN</a>
|
package/docs-site/mcp-auth.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/mcp-auth" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/mcp-auth" hreflang="en" lang="en">EN</a>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/mcp-servers" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/mcp-servers" hreflang="en" lang="en">EN</a>
|
package/docs-site/mcp.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/mcp" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/mcp" hreflang="en" lang="en">EN</a>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/permissions" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/permissions" hreflang="en" lang="en">EN</a>
|
package/docs-site/profiles.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/profiles" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/profiles" hreflang="en" lang="en">EN</a>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/quickstart" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/quickstart" hreflang="en" lang="en">EN</a>
|
package/docs-site/runtime.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/runtime" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/runtime" hreflang="en" lang="en">EN</a>
|
package/docs-site/scope.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/scope" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/scope" hreflang="en" lang="en">EN</a>
|
package/docs-site/security.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/security" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/security" hreflang="en" lang="en">EN</a>
|
package/docs-site/team.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/team" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/team" hreflang="en" lang="en">EN</a>
|
package/docs-site/whats-new.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/whats-new" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/whats-new" hreflang="en" lang="en">EN</a>
|
|
@@ -104,6 +104,30 @@
|
|
|
104
104
|
<h1>Bản 1.9.0: nói việc bằng lời, Harness của team kiểm tra</h1>
|
|
105
105
|
<p>Bỏ task contract và lệnh workflow. Chế độ công ty tự yêu cầu check và review; nút Dừng, lệnh có mạng theo lần duyệt và thẻ duyệt dễ đọc hơn.</p>
|
|
106
106
|
</div>
|
|
107
|
+
<section class="section">
|
|
108
|
+
<p class="section-kicker">v1.16.2 · 2026-10-08</p>
|
|
109
|
+
<h2 id="v1-16-2">Terminal nói giống dashboard</h2>
|
|
110
|
+
<p class="section-lead">Có bản Piagent mới thì Terminal (<span class="inline-code">pi</span> và <span class="inline-code">piagent studio</span>) hỏi <strong>Cập nhật ngay</strong> hoặc <strong>Để sau</strong> (nhắc lại sau 1 giờ), chỉ giữa các lượt, kèm một dòng dưới footer; <span class="inline-code">/piagent-update</span> kiểm tra ngay.</p>
|
|
111
|
+
<ul>
|
|
112
|
+
<li><span class="inline-code">/bypass</span> trong <span class="inline-code">piagent studio</span> bật/tắt Bypass cho cuộc trò chuyện, giống công tắc trên dashboard; footer hiện "Bypass" khi đang bật.</li>
|
|
113
|
+
<li>Lệnh cần internet được hỏi kèm lý do, lý do Bypass vẫn hỏi và hậu quả khi đồng ý hay từ chối.</li>
|
|
114
|
+
<li>Lỗi khi gửi, lỗi khi mở phiên công ty và ghi chú của Harness (check, review, phản biện của subagent, "bạn quyết định") hiện bằng tiếng Việt như trên dashboard.</li>
|
|
115
|
+
<li>Với Agent Watch 0.15.2: sau khi Watch cập nhật mà cần cấp lại quyền Keychain, Watch hỏi bằng dialog và cập nhật lại cấu hình Piagent ngay.</li>
|
|
116
|
+
</ul>
|
|
117
|
+
<p>Bản này đổi trình khởi chạy công ty: Agent Watch tự cập nhật cấu hình ở lần đồng bộ kế tiếp (vài phút). Nếu <span class="inline-code">piagent studio</span> báo cấu hình đã đổi, mở Agent Watch → Studio và nhập lại cấu hình cho Piagent.</p>
|
|
118
|
+
</section>
|
|
119
|
+
|
|
120
|
+
<section class="section">
|
|
121
|
+
<p class="section-kicker">v1.16.1 · 2026-10-07</p>
|
|
122
|
+
<h2 id="v1-16-1">Báo bản mới rõ ràng, kiểm tra mỗi giờ</h2>
|
|
123
|
+
<p class="section-lead">Khi có bản Piagent mới, dashboard mở một dialog ghi rõ sẽ đổi gì và nút <strong>Cập nhật ngay</strong>; chọn <strong>Để sau</strong> thì 1 giờ sau nhắc lại. Cập nhật xong, dashboard mở lại báo đã thành công. Dashboard và Terminal tự kiểm tra bản mới mỗi giờ.</p>
|
|
124
|
+
<ul>
|
|
125
|
+
<li>Tab dashboard không còn bị mất đăng nhập khi một server Piagent khác trên máy (runtime công ty, lần mở khác) đăng nhập.</li>
|
|
126
|
+
<li>Tab đã hết phiên (Piagent khởi động lại, quá 8 giờ) không còn gọi lại liên tục với lỗi 401 mà nói rõ cách mở lại: <span class="inline-code">piagent dashboard</span> hoặc Agent Watch.</li>
|
|
127
|
+
</ul>
|
|
128
|
+
<p>Cập nhật từ 1.16.0 không cần nhập lại cấu hình trong Agent Watch.</p>
|
|
129
|
+
</section>
|
|
130
|
+
|
|
107
131
|
<section class="section">
|
|
108
132
|
<p class="section-kicker">v1.16.0 · 2026-10-07</p>
|
|
109
133
|
<h2 id="v1-16-0">Bypass cho cuộc trò chuyện công ty</h2>
|
package/docs-site/windows.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/windows" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/windows" hreflang="en" lang="en">EN</a>
|
package/docs-site/workflows.html
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
<span>Pi Agent Platform</span>
|
|
31
31
|
</a>
|
|
32
32
|
<div class="top-actions">
|
|
33
|
-
<span class="pill"><span class="pill-dot"></span>v1.16.
|
|
33
|
+
<span class="pill"><span class="pill-dot"></span>v1.16.2 docs · VI</span>
|
|
34
34
|
<nav class="language-switch" aria-label="Ngôn ngữ">
|
|
35
35
|
<a class="language-option current" href="/workflows" hreflang="vi" lang="vi" aria-current="true">VI</a>
|
|
36
36
|
<a class="language-option" href="/en/workflows" hreflang="en" lang="en">EN</a>
|
|
@@ -256,8 +256,8 @@
|
|
|
256
256
|
},
|
|
257
257
|
{
|
|
258
258
|
"path": "tests",
|
|
259
|
-
"fileCount":
|
|
260
|
-
"sha256": "
|
|
259
|
+
"fileCount": 526,
|
|
260
|
+
"sha256": "01827d63b0b67a55437e498d6eb0a5ffa43806c88c02eb687b6bba945d37aa59"
|
|
261
261
|
}
|
|
262
262
|
],
|
|
263
263
|
"custodianComparisonRules": {
|
package/package.json
CHANGED
|
@@ -164,6 +164,7 @@ import { fallbackBasePolicy } from "./fallback-base-policy.ts";
|
|
|
164
164
|
import { prefixCompletions, registerPiagentTool as registerToolDefinition, registerRuntimeCommand, registerRuntimeTool } from "../runtime/registration/extension-registration.ts";
|
|
165
165
|
import { registerTaskEvidenceTools } from "../runtime/registration/task-evidence-tools.ts";
|
|
166
166
|
import { registerAgentResources } from "../runtime/registration/agent-resources.ts";
|
|
167
|
+
import { registerTerminalUpdateOffer } from "../runtime/update/terminal-update-offer.mjs";
|
|
167
168
|
import { userSkillFolders } from "../runtime/resources/agent-resources.mjs";
|
|
168
169
|
import { FRESH_COMMAND_ACTIONS, FRESH_COMMAND_HELP, ONBOARDING_COMMAND_ACTIONS, WORKFLOW_COMMAND_EXCLUSIONS } from "../runtime/registration/operator-catalogs.ts";
|
|
169
170
|
import { registerPiagentStatusCommand } from "../runtime/registration/runtime-model-status.ts";
|
|
@@ -4159,5 +4160,7 @@ export default function piagentGuard(pi: ExtensionAPI) {
|
|
|
4159
4160
|
// citations need a task id), so it is no longer registered at all.
|
|
4160
4161
|
registerTaskEvidenceTools(pi, registrationDeps);
|
|
4161
4162
|
registerAgentResources(pi);
|
|
4163
|
+
// A new release is asked about in the Terminal, as the dashboard does.
|
|
4164
|
+
registerTerminalUpdateOffer(pi, { installed: installedPlatformVersion(), packageRoot: PLATFORM_ROOT, restart: "pi" });
|
|
4162
4165
|
registerSessionCommands(pi, { ...registrationDeps, ...contextCommandApi });
|
|
4163
4166
|
}
|
|
@@ -6,7 +6,7 @@ import { fileURLToPath } from "node:url";
|
|
|
6
6
|
|
|
7
7
|
// Telling someone a new release exists is only useful if it costs them nothing.
|
|
8
8
|
// A session start that waits on the registry pays a network round trip every
|
|
9
|
-
// time Pi opens, for information that
|
|
9
|
+
// time Pi opens, for information that can change several times a day, so the check
|
|
10
10
|
// never runs in the session's path: the session reads a cache file and, when
|
|
11
11
|
// that cache is old, leaves a detached process behind to refresh it. The notice
|
|
12
12
|
// lands on this session if the cache already knew, and on the next one if it did
|
|
@@ -20,7 +20,7 @@ import { fileURLToPath } from "node:url";
|
|
|
20
20
|
|
|
21
21
|
const HELPER_PACKAGE = "@piagent/platform";
|
|
22
22
|
const CACHE_FILE = "piagent-update-check.json";
|
|
23
|
-
const CACHE_TTL_MS =
|
|
23
|
+
const CACHE_TTL_MS = 60 * 60 * 1000;
|
|
24
24
|
const PROBE_TIMEOUT_MS = 10_000;
|
|
25
25
|
const MAX_CACHE_BYTES = 4096;
|
|
26
26
|
const RELEASE_VERSION = /^(0|[1-9]\d{0,8})\.(0|[1-9]\d{0,8})\.(0|[1-9]\d{0,8})$/;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
+
import { pathToFileURL } from 'node:url';
|
|
3
4
|
|
|
4
5
|
const INSTRUCTION_FILES = ['AGENTS.override.md', 'AGENTS.md', 'AGENTS.MD', 'CLAUDE.md', 'CLAUDE.MD'];
|
|
5
6
|
// Project instructions from the project folder up to its repository root, as
|
|
@@ -24,8 +25,7 @@ export function projectInstructions(cwd, top = cwd) {
|
|
|
24
25
|
// Managed sessions never consult the personal trust store or execute resources
|
|
25
26
|
// discovered in a project. Skills and commands are text (agent-skills.mjs):
|
|
26
27
|
// what they ask for runs with the session's own tools.
|
|
27
|
-
export function managedResourceLoader(api, { systemPrompt, extensions = [], agentsFiles = [], skills = [], prompts = [] } = {}) {
|
|
28
|
-
const runtime = api.createExtensionRuntime();
|
|
28
|
+
export function managedResourceLoader(api, { systemPrompt, extensions = [], runtime = api.createExtensionRuntime(), agentsFiles = [], skills = [], prompts = [] } = {}) {
|
|
29
29
|
const empty = Object.freeze([]);
|
|
30
30
|
return Object.freeze({
|
|
31
31
|
getExtensions: () => ({ extensions, errors: empty, runtime }),
|
|
@@ -41,3 +41,15 @@ export function managedResourceLoader(api, { systemPrompt, extensions = [], agen
|
|
|
41
41
|
reload: async () => {},
|
|
42
42
|
});
|
|
43
43
|
}
|
|
44
|
+
|
|
45
|
+
// Extensions the company Terminal adds itself (its commands and how Harness
|
|
46
|
+
// notes read), built the way Pi builds an inline extension. Never project code.
|
|
47
|
+
export async function inlineExtensions(api, sdkRoot, cwd, factories = []) {
|
|
48
|
+
const runtime = api.createExtensionRuntime();
|
|
49
|
+
if (!factories.length) return { extensions: [], runtime };
|
|
50
|
+
const load = (file) => import(pathToFileURL(path.join(sdkRoot, 'dist', ...file.split('/'))).href);
|
|
51
|
+
const [{ loadExtensionFromFactory }, { createEventBus }] = await Promise.all([load('core/extensions/loader.js'), load('core/event-bus.js')]);
|
|
52
|
+
const bus = createEventBus(), extensions = [];
|
|
53
|
+
for (const [index, factory] of factories.entries()) extensions.push(await loadExtensionFromFactory(factory, cwd, bus, runtime, `<inline:company-terminal-${index + 1}>`));
|
|
54
|
+
return { extensions, runtime };
|
|
55
|
+
}
|
|
@@ -5,7 +5,7 @@ import { randomUUID, createHash } from 'node:crypto';
|
|
|
5
5
|
import { pathToFileURL, fileURLToPath } from 'node:url';
|
|
6
6
|
import { ManagedToolBoundary } from './tool-boundary.mjs';
|
|
7
7
|
import { ensureSearchTools, trustSystemCertificates } from './toolchain.mjs';
|
|
8
|
-
import { managedResourceLoader, projectInstructions } from './resource-loader.mjs';
|
|
8
|
+
import { inlineExtensions, managedResourceLoader, projectInstructions } from './resource-loader.mjs';
|
|
9
9
|
import { fetchPublicPage, fetchLimits } from './web-fetch.mjs';
|
|
10
10
|
import { searchForRole } from './web-search.mjs';
|
|
11
11
|
import { shareGrant, releaseGrant } from './grant-share.mjs';
|
|
@@ -84,7 +84,7 @@ export class ManagedSession {
|
|
|
84
84
|
// renewBroker/bindingRevision (optional) let a long-lived conversation follow
|
|
85
85
|
// a key or harness change: Agent Watch rewrites the binding's revision, and
|
|
86
86
|
// the conversation enrolls again before its next run.
|
|
87
|
-
static async create({ sdkRoot, cwd, origin, broker, protectedRoots = [], agentDir, sessionManager, renewBroker = null, bindingRevision = null }) {
|
|
87
|
+
static async create({ sdkRoot, cwd, origin, broker, protectedRoots = [], agentDir, sessionManager, renewBroker = null, bindingRevision = null, terminalExtensions = [] }) {
|
|
88
88
|
const sdk = fs.realpathSync(sdkRoot);
|
|
89
89
|
if (JSON.parse(fs.readFileSync(path.join(sdk, 'package.json'))).version !== '0.87.1') throw Error('managed-sdk-version-unqualified');
|
|
90
90
|
await trustSystemCertificates();
|
|
@@ -116,7 +116,7 @@ export class ManagedSession {
|
|
|
116
116
|
action:{kind:'external-provider-action',preconditionClass:'runtime-only',toolName:'fetch_origin',rawAction:plan,
|
|
117
117
|
targetPaths:[self.cwd],provider:'github',urlOrigin:'https://github.com',requestedScope:'fetch-origin-once',
|
|
118
118
|
reason:`Fetch origin branches from ${plan.repository}`,riskClass:'low',allowConsequence:'Download origin branches once; keep the current branch and working files unchanged.',denyConsequence:'No network request or credential read.'},
|
|
119
|
-
terminalConfirm:()=>ctx?.ui?.confirm?.('
|
|
119
|
+
terminalConfirm:()=>ctx?.ui?.confirm?.('Tải nhánh từ origin',`Tải các nhánh của ${plan.repository} về ${self.cwd} một lần.\n\nĐồng ý: chỉ tải nhánh; nhánh hiện tại và file đang làm không đổi.\nTừ chối: không gửi request mạng, không đọc thông tin đăng nhập.`)??Promise.resolve(false),
|
|
120
120
|
unavailableFallback:'terminal-confirm',recheck:()=>!signal?.aborted&&Boolean(self.grant)});
|
|
121
121
|
if(!decision.allowed||!decision.consume()||signal?.aborted)throw Error('managed-operation-denied');
|
|
122
122
|
return executeRepositoryFetch(self.boundary,plan,signal);
|
|
@@ -133,7 +133,7 @@ export class ManagedSession {
|
|
|
133
133
|
action:{kind:'external-provider-action',preconditionClass:'runtime-only',toolName:'run_with_network',rawAction:{command:args.command},commandPreview:String(args.command),
|
|
134
134
|
targetPaths:[self.cwd],provider:'network',urlOrigin:null,requestedScope:'network-command-once',reason:(confirm==='ask'?String(args.reason):`Bypass still asks: ${confirm}. ${args.reason}`).slice(0,300),riskClass:'medium',
|
|
135
135
|
allowConsequence:'Run this exact command once, with internet access; a server it starts accepts connections while it runs.',denyConsequence:'The command does not run; the agent is told you declined.'},
|
|
136
|
-
terminalConfirm:()=>ctx?.ui?.confirm?.('
|
|
136
|
+
terminalConfirm:()=>ctx?.ui?.confirm?.('Chạy lệnh có internet',`${args.command}\n\nLý do: ${args.reason}${confirm==='ask'?'':`\nBypass vẫn hỏi: ${confirm}`}\n\nĐồng ý: chạy đúng lệnh này một lần, có internet; server nó mở nhận kết nối trong lúc chạy.\nTừ chối: lệnh không chạy, agent được báo bạn đã từ chối.`)??Promise.resolve(false),
|
|
137
137
|
unavailableFallback:'terminal-confirm',recheck:()=>!signal?.aborted&&Boolean(self.grant)});
|
|
138
138
|
if(!decision.allowed||!decision.consume()||signal?.aborted)throw Error('managed-operation-denied');
|
|
139
139
|
let ok=false;
|
|
@@ -161,7 +161,7 @@ export class ManagedSession {
|
|
|
161
161
|
self.checks = repositoryChecks(agentsFiles, self.cwd, self.boundary.repositoryTop);
|
|
162
162
|
// The Harness workflow (possibly changed on a later enrollment) adds its process to the prompt.
|
|
163
163
|
const loader = managedResourceLoader(api, { systemPrompt: () => BASE_PROMPT + referencePrompt(self.boundary.userHome) + TEST_PROMPT + webPrompt(helperRoles(manifest)) + helperPrompt(helperRoles(self.manifest)) + workflowPrompt(workflowPolicy(self.manifest), self.checks), agentsFiles,
|
|
164
|
-
skills: self.resources.skills, prompts: self.resources.prompts });
|
|
164
|
+
skills: self.resources.skills, prompts: self.resources.prompts, ...await inlineExtensions(api, sdk, self.cwd, terminalExtensions) });
|
|
165
165
|
const settings = api.SettingsManager.inMemory({ retry: { enabled: false, provider: { maxRetries: 0 } }, cacheWarming: 'off', enableInstallTelemetry: false, enableAnalytics: false, enableSkillCommands: true });
|
|
166
166
|
const manager = sessionManager ?? api.SessionManager.inMemory(self.cwd);
|
|
167
167
|
const scope = scopeOf(self.origin, manifest);
|
|
@@ -229,6 +229,8 @@ export class ManagedSession {
|
|
|
229
229
|
};
|
|
230
230
|
const prompt = self.session.prompt.bind(self.session);
|
|
231
231
|
self.session.prompt = async (text, options) => {
|
|
232
|
+
// An extension command (/bypass, /piagent-update) runs here, never as a turn.
|
|
233
|
+
if (/^\/\S/.test(text) && self.session.extensionRunner?.getCommand(text.slice(1).split(/\s/)[0])) return prompt(text, options);
|
|
232
234
|
// /skill:name, /command: the run sees what the member asked for in full.
|
|
233
235
|
text = self.resources.expand(text);
|
|
234
236
|
if (self.starting) await self.starting;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export const SNOOZE_MS: number;
|
|
2
|
+
export function readSnooze(home?: string): { version: string | undefined; until: number };
|
|
3
|
+
export function snoozeUpdate(version: string, options?: { home?: string; now?: number }): void;
|
|
4
|
+
export function pendingUpdate(options: { installed: string | undefined; home?: string; now?: number }): string | null;
|
|
5
|
+
export function probeRegistry(options?: { wait?: boolean; spawnImpl?: unknown }): Promise<boolean>;
|
|
6
|
+
export function runPiagentUpdate(options: { packageRoot: string; version: string; home?: string; spawnImpl?: unknown }): Promise<{ ok: boolean; log: string }>;
|
|
7
|
+
export function registerTerminalUpdateOffer(pi: unknown, options: { installed: string | undefined; packageRoot: string; restart: string; home?: string; afterUpdate?: () => string | null; runUpdate?: (options: { packageRoot: string; version: string; home?: string }) => Promise<{ ok: boolean; log: string }>; probe?: (options?: { wait?: boolean }) => Promise<boolean> }): void;
|