@piagent/platform 1.16.3 → 1.18.0

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.
Files changed (75) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +1 -1
  3. package/README.vi.md +1 -1
  4. package/catalog/claude-model-additions.json +49 -2
  5. package/docs/command-reference-vietnamese.md +2 -2
  6. package/docs/distribution-standard.md +6 -6
  7. package/docs/languages.json +2 -2
  8. package/docs/operator-manual-vietnamese.md +7 -7
  9. package/docs/publishing-for-teams.md +2 -0
  10. package/docs/release-install-policy.md +2 -2
  11. package/docs/team-onboarding.md +2 -2
  12. package/docs-site/architecture.html +1 -1
  13. package/docs-site/benchmark.html +1 -1
  14. package/docs-site/commands.html +1 -1
  15. package/docs-site/content/en/index.html +4 -4
  16. package/docs-site/content/en/whats-new.html +12 -0
  17. package/docs-site/content/index.html +4 -4
  18. package/docs-site/content/whats-new.html +12 -0
  19. package/docs-site/context-engine.html +1 -1
  20. package/docs-site/ecosystem.html +1 -1
  21. package/docs-site/en/architecture.html +1 -1
  22. package/docs-site/en/benchmark.html +1 -1
  23. package/docs-site/en/commands.html +1 -1
  24. package/docs-site/en/context-engine.html +1 -1
  25. package/docs-site/en/ecosystem.html +1 -1
  26. package/docs-site/en/index.html +5 -5
  27. package/docs-site/en/mcp-approval.html +1 -1
  28. package/docs-site/en/mcp-auth.html +1 -1
  29. package/docs-site/en/mcp-servers.html +1 -1
  30. package/docs-site/en/mcp.html +1 -1
  31. package/docs-site/en/permissions.html +1 -1
  32. package/docs-site/en/profiles.html +1 -1
  33. package/docs-site/en/quickstart.html +1 -1
  34. package/docs-site/en/runtime.html +1 -1
  35. package/docs-site/en/scope.html +1 -1
  36. package/docs-site/en/security.html +1 -1
  37. package/docs-site/en/team.html +1 -1
  38. package/docs-site/en/whats-new.html +13 -1
  39. package/docs-site/en/windows.html +1 -1
  40. package/docs-site/en/workflows.html +1 -1
  41. package/docs-site/index.html +5 -5
  42. package/docs-site/mcp-approval.html +1 -1
  43. package/docs-site/mcp-auth.html +1 -1
  44. package/docs-site/mcp-servers.html +1 -1
  45. package/docs-site/mcp.html +1 -1
  46. package/docs-site/permissions.html +1 -1
  47. package/docs-site/profiles.html +1 -1
  48. package/docs-site/quickstart.html +1 -1
  49. package/docs-site/runtime.html +1 -1
  50. package/docs-site/scope.html +1 -1
  51. package/docs-site/security.html +1 -1
  52. package/docs-site/team.html +1 -1
  53. package/docs-site/whats-new.html +13 -1
  54. package/docs-site/windows.html +1 -1
  55. package/docs-site/workflows.html +1 -1
  56. package/evals/private-holdout-v1/public-exposure.v2.json +3 -3
  57. package/evals/runtime-conformance-v1/runner.mjs +13 -17
  58. package/package.json +1 -1
  59. package/packages/piagent-core/managed/native-catalog.mjs +14 -1
  60. package/packages/piagent-core/managed/request-stream.mjs +28 -0
  61. package/packages/piagent-core/managed/session.mjs +2 -1
  62. package/packages/piagent-core/package.json +1 -1
  63. package/packages/piagent-webui/dist/client/assets/{MarkdownMessage-BDdLJYnZ.js → MarkdownMessage-DlbuyiQ3.js} +1 -1
  64. package/packages/piagent-webui/dist/client/assets/{index-DJGByyfL.js → index-BGxsZHB5.js} +14 -14
  65. package/packages/piagent-webui/dist/client/index.html +1 -1
  66. package/packages/piagent-webui/gateway/gateway-service.ts +26 -0
  67. package/packages/piagent-webui/gateway/git-branches.ts +94 -0
  68. package/packages/piagent-webui/gateway/git-head.ts +52 -0
  69. package/packages/piagent-webui/gateway/session-catalog.ts +8 -2
  70. package/packages/piagent-webui/gateway/session-operation-lifecycle.ts +10 -3
  71. package/packages/piagent-webui/server/loopback-server.ts +9 -2
  72. package/packages/piagent-webui/server/member-routes.ts +38 -0
  73. package/schemas/piagent-webui/session-catalog-v1.schema.json +3 -0
  74. package/scripts/configure-model-scope.sh +1 -0
  75. package/templates/global/settings.json +2 -1
@@ -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.3 docs · EN</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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>
@@ -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.3 docs · EN</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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.3 docs · EN</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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>
@@ -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.3 docs · EN</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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.3 docs · EN</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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,18 @@
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.18.0 · 2026-10-08</p>
109
+ <h2 id="v1-18-0">Switch the Git branch from the dashboard, retries for passing failures, Claude Haiku 5.5</h2>
110
+ <p class="section-lead">Click the branch under the chat title or in the status bar to choose another branch or create one. The dashboard does not switch while a conversation in the folder runs, and shows Git's reason when it refuses (for example, uncommitted changes it would overwrite). When a model's answer fails for a passing reason (a cut stream, a model or Studio gateway that does not answer), Piagent asks again up to twice before showing the failure; quota, key and policy failures still show at once. Claude Haiku 5.5, Anthropic's fastest model, can be chosen in company and personal sessions.</p>
111
+ </section>
112
+
113
+ <section class="section">
114
+ <p class="section-kicker">v1.17.0 · 2026-10-08</p>
115
+ <h2 id="v1-17-0">The dashboard shows each project's Git branch</h2>
116
+ <p class="section-lead">Under the chat title, in the status bar and beside each project group in the sidebar, the dashboard shows the Git branch the project is on, worktrees included. A detached HEAD shows its short commit in the warning colour. A branch switched in a Terminal shows when you come back to the tab.</p>
117
+ </section>
118
+
107
119
  <section class="section">
108
120
  <p class="section-kicker">v1.16.3 · 2026-10-08</p>
109
121
  <h2 id="v1-16-3">An updated dashboard keeps checking for releases</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.3 docs · EN</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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.3 docs · EN</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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>
@@ -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.3 docs · VI</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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.3</p>
97
+ <p class="eyebrow">Piagent 1.18.0</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.3</a>
111
+ <a class="button" href="/whats-new">Có gì mới trong 1.18.0</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.3</span>
187
+ <span class="card-kicker">Bản 1.18.0</span>
188
188
  <h3>Có gì mới</h3>
189
- <p>Dashboard cập nhật xong vẫn tự kiểm tra bản mới; ở 1.16.2: 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>
189
+ <p>Đổi nhánh Git trên dashboard, tự thử lại khi lỗi tạm thời, Claude Haiku 5.5; ở 1.17.0: dashboard hiện nhánh Git của project; ở 1.16.3: dashboard cập nhật xong vẫn tự kiểm tra bản mới; ở 1.16.2: 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.3 docs · VI</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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>
@@ -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.3 docs · VI</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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.3 docs · VI</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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>
@@ -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.3 docs · VI</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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.3 docs · VI</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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>
@@ -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.3 docs · VI</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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.3 docs · VI</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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>
@@ -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.3 docs · VI</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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>
@@ -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.3 docs · VI</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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>
@@ -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.3 docs · VI</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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>
@@ -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.3 docs · VI</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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>
@@ -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.3 docs · VI</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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,18 @@
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.18.0 · 2026-10-08</p>
109
+ <h2 id="v1-18-0">Đổi nhánh Git trên dashboard, tự thử lại khi lỗi tạm thời, Claude Haiku 5.5</h2>
110
+ <p class="section-lead">Bấm vào tên nhánh dưới tên cuộc trò chuyện hoặc ở thanh trạng thái để chọn nhánh khác hoặc tạo nhánh mới. Dashboard không cho đổi khi còn cuộc trò chuyện đang chạy trong folder, và báo đúng lý do khi Git từ chối (ví dụ thay đổi chưa commit sẽ bị ghi đè). Khi câu trả lời của model hỏng vì lý do tạm thời (stream bị cắt, model hoặc gateway của Studio không trả lời), Piagent tự hỏi lại tối đa 2 lần trước khi báo lỗi; lỗi quota, key hay chính sách vẫn báo ngay. Claude Haiku 5.5, model nhanh nhất của Anthropic, có thể chọn ở chế độ công ty và cá nhân.</p>
111
+ </section>
112
+
113
+ <section class="section">
114
+ <p class="section-kicker">v1.17.0 · 2026-10-08</p>
115
+ <h2 id="v1-17-0">Dashboard hiện nhánh Git của project</h2>
116
+ <p class="section-lead">Dưới tên cuộc trò chuyện, ở thanh trạng thái và cạnh từng nhóm project trong sidebar, dashboard hiện project đang đứng ở nhánh Git nào, kể cả worktree. Khi Git không ở nhánh nào (detached HEAD), dashboard hiện mã commit ngắn bằng màu cảnh báo. Đổi nhánh trong Terminal thì dashboard cập nhật khi bạn quay lại tab.</p>
117
+ </section>
118
+
107
119
  <section class="section">
108
120
  <p class="section-kicker">v1.16.3 · 2026-10-08</p>
109
121
  <h2 id="v1-16-3">Dashboard cập nhật xong vẫn tự kiểm tra bản mới</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.3 docs · VI</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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>
@@ -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.3 docs · VI</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.18.0 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>
@@ -247,7 +247,7 @@
247
247
  {
248
248
  "path": "evals/runtime-conformance-v1",
249
249
  "fileCount": 5,
250
- "sha256": "f3ac30a6faef3bcae91314847f0a26b6fa74e2dbadd85b11740ebc854cbef4ce"
250
+ "sha256": "e5ec03530b09c3397f60ef247ce408bea2d21f36fcf5d5ec3ee1393431233f44"
251
251
  },
252
252
  {
253
253
  "path": "evals/scenarios",
@@ -256,8 +256,8 @@
256
256
  },
257
257
  {
258
258
  "path": "tests",
259
- "fileCount": 526,
260
- "sha256": "a2bee4948da9a966f6e5d6d54a46cdfcf3a104503f82b40eec01f61de9cc885b"
259
+ "fileCount": 527,
260
+ "sha256": "0af093aea0e49917dc63c09c71888c178bccfe842069d34d681ef7d04a61fba3"
261
261
  }
262
262
  ],
263
263
  "custodianComparisonRules": {
@@ -262,27 +262,23 @@ runCase("context-orphan-protocol-fail-closed", "adaptive-context-governor", () =
262
262
  });
263
263
 
264
264
  runCase("operation-pristine-retry-bounded", "webui-operation-lifecycle", () => {
265
- assert.deepEqual(sessionOperationRetryPolicy(), { maximumAttempts: 1, maximumDelayMs: 8_000 });
265
+ assert.deepEqual(sessionOperationRetryPolicy(), { maximumAttempts: 2, maximumDelayMs: 8_000 });
266
266
  const lifecycle = new SessionOperationLifecycle({ operationRef: "operation-pristine" });
267
267
  lifecycle.observe({ type: "agent_start", operationRef: "operation-pristine" });
268
- const first = lifecycle.observe({
269
- type: "auto_retry_start",
270
- operationRef: "operation-pristine",
271
- attempt: 1,
272
- delayMs: 100
273
- });
268
+ const retry = (attempt) => lifecycle.observe({ type: "auto_retry_start", operationRef: "operation-pristine", attempt, delayMs: 100 });
269
+ const ended = (attempt) => lifecycle.observe({ type: "auto_retry_end", operationRef: "operation-pristine", attempt, success: false });
270
+ const first = retry(1);
274
271
  assert.equal(first.retry, "allowed");
275
272
  metrics.operations.pristineRetriesAllowed += 1;
276
- lifecycle.observe({ type: "auto_retry_end", operationRef: "operation-pristine", attempt: 1, success: false });
277
- const second = lifecycle.observe({
278
- type: "auto_retry_start",
279
- operationRef: "operation-pristine",
280
- attempt: 2,
281
- delayMs: 100
282
- });
283
- assert.equal(second.retry, "abort");
284
- assert.equal(second.reasonCode, "automatic-retry-attempt-limit");
285
- return { maximumAttempts: lifecycle.retryPolicy.maximumAttempts, firstRetry: first.retry, secondRetry: second.retry };
273
+ ended(1);
274
+ const second = retry(2);
275
+ assert.equal(second.retry, "allowed");
276
+ metrics.operations.pristineRetriesAllowed += 1;
277
+ ended(2);
278
+ const third = retry(3);
279
+ assert.equal(third.retry, "abort");
280
+ assert.equal(third.reasonCode, "automatic-retry-attempt-limit");
281
+ return { maximumAttempts: lifecycle.retryPolicy.maximumAttempts, firstRetry: first.retry, secondRetry: second.retry, thirdRetry: third.retry };
286
282
  });
287
283
 
288
284
  runCase("operation-replay-unsafe-and-exactly-once", "webui-operation-lifecycle", () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@piagent/platform",
3
- "version": "1.16.3",
3
+ "version": "1.18.0",
4
4
  "license": "MIT",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -12,6 +12,19 @@ const sonnet55 = {
12
12
  compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsStrictTools: true, supportsMidConvoEffort: true },
13
13
  promptCache: { short: 300, long: 3600 },
14
14
  };
15
+ // Claude Haiku 5.5, released 2026-10-07, checked 2026-10-08: 1M context,
16
+ // 128k output, adaptive thinking with effort; $0.10/$0.50 per 1M, cache read
17
+ // $0.01, 5m cache write $0.125, all five times above 100k input tokens.
18
+ // https://platform.claude.com/docs/en/models/haiku-5-5/overview
19
+ const haiku55 = {
20
+ id: 'claude-haiku-5-5', provider: 'anthropic', api: 'anthropic-messages',
21
+ name: 'Claude Haiku 5.5', reasoning: true, input: ['text', 'image'],
22
+ contextWindow: 1000000, maxTokens: 128000,
23
+ cost: { input: 0.1, output: 0.5, cacheRead: 0.01, cacheWrite: 0.125, tiers: [{ inputTokensAbove: 100000, input: 0.5, output: 2.5, cacheRead: 0.05, cacheWrite: 0.625 }] },
24
+ thinkingLevelMap: { off: null, minimal: null, low: 'low', medium: 'medium', high: 'high', xhigh: 'xhigh', max: 'max' },
25
+ compat: { forceAdaptiveThinking: true, supportsTemperature: false, supportsStrictTools: true, supportsMidConvoEffort: true },
26
+ promptCache: { short: 300, long: 3600 },
27
+ };
15
28
  // GPT-6.1 Sol through Codex, checked 2026-10-01: Codex keeps the 272k window
16
29
  // of its pricing tier (the API model has 1.05M); 128k output; efforts low to
17
30
  // max, no none/minimal; $2/$10 per 1M, cached $0.10, doubled above 272k.
@@ -27,7 +40,7 @@ const sol61 = {
27
40
  compat: { supportsOpenAIGrammarTools: true, supportsAdditionalTools: true, supportsToolSearch: true, supportsMidConvoSystemMessages: true },
28
41
  inputLimits: { images: { resize: { maxWidth: 2000, maxHeight: 2000, maxBytes: 4718592, jpegQuality: 80 } } },
29
42
  };
30
- const GAPS = { anthropic: [sonnet55], 'openai-codex': [sol61] };
43
+ const GAPS = { anthropic: [sonnet55, haiku55], 'openai-codex': [sol61] };
31
44
  // Studio's providers: the Claude and Codex subscriptions, or an API-key
32
45
  // vendor (DeepSeek, Kimi, GLM, MiMo, Qwen, OpenCode, Grok) whose id is Pi's
33
46
  // own provider id; Studio runs vendors as OpenAI Chat Completions.
@@ -186,3 +186,31 @@ function capacityStatus(owner) {
186
186
  try { owner.session?.extensionRunner?.getUIContext?.()?.setWorkingMessage?.(wait ? `Agent Watch ${who}: waiting for a free company model account (${failureReason(wait.code)}). Esc stops.` : undefined); }
187
187
  catch { /* no Terminal */ }
188
188
  }
189
+
190
+ // A company answer that failed for a passing reason after Studio admitted it
191
+ // (the model's stream was cut or came back empty, the model or Studio's
192
+ // gateway did not answer, Studio could not be reached) is asked again by Pi's
193
+ // own turn retry: up to twice, 2 then 4 s apart, with the failed attempt left
194
+ // out of what the model sees. Tools run only after a whole answer, so nothing
195
+ // the agent did is repeated; the price is the request's input, billed again.
196
+ // Refusals before admission are asked again earlier, in wrapRoleStreams;
197
+ // everything else (quota, key, policy, a rejected or refused request, a closed
198
+ // run) fails at once, as before. Pi decides by the words of an error, which
199
+ // for a company failure would match "rate limited" or "timeout" in sentences
200
+ // that must not be retried; here it decides by Studio's code only.
201
+ export const TURN_RETRY_CODES = new Set(['upstream_interrupted', 'upstream_incomplete', 'upstream_timeout', 'upstream_unavailable',
202
+ 'connector_unavailable', 'connector_execution_failed', 'inference_unavailable', 'studio-unreachable']);
203
+ export const TURN_RETRY = { maxRetries: 2, baseDelayMs: 2_000 };
204
+
205
+ export function companyTurnRetryable(message) {
206
+ return message?.stopReason === 'error' && TURN_RETRY_CODES.has(failureCode(message.errorMessage));
207
+ }
208
+
209
+ // True when the session retries company failures by code. A Pi whose session
210
+ // no longer has the hook keeps retry off rather than retrying by words.
211
+ export function enableCompanyTurnRetry(session, settings) {
212
+ if (typeof session?._isRetryableError !== 'function') return false;
213
+ session._isRetryableError = companyTurnRetryable;
214
+ settings.applyOverrides({ retry: { enabled: true, ...TURN_RETRY } });
215
+ return true;
216
+ }
@@ -13,7 +13,7 @@ import { managedThinkingLevels, nearestLevel } from './capabilities.mjs';
13
13
  import { nativeManagedModel, isVendor, piProvider, studioAPI, studioPath } from './native-catalog.mjs';
14
14
  import { repositoryFetchPlan, executeRepositoryFetch } from './repository-operation.mjs';
15
15
  import { describeFailure, failureCode, failureText } from '../runtime/managed-failure.mjs';
16
- import { wrapRoleStreams } from './request-stream.mjs';
16
+ import { enableCompanyTurnRetry, wrapRoleStreams } from './request-stream.mjs';
17
17
  import { runHelper } from './helper-run.mjs';
18
18
  import { askTool } from './member-questions.mjs';
19
19
  import { setTimeout as sleep } from 'node:timers/promises';
@@ -191,6 +191,7 @@ export class ManagedSession {
191
191
  self.extensionsResult = result.extensionsResult;
192
192
  self.session = result.session;
193
193
  self.session.managedExecution = true;
194
+ self.turnRetry = enableCompanyTurnRetry(self.session, settings);
194
195
  // The member's access for this conversation: ask first, or Bypass (permission.mjs).
195
196
  self.permission = restorePermission(manager); self.session.managedSetPermission = permissionSetter(self, manager);
196
197
  // A helper's receipt (its tokens, the patch it read) is for the member's
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@piagent/core",
3
- "version": "1.16.3",
3
+ "version": "1.18.0",
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "license": "MIT",