@piagent/platform 1.47.0 → 1.48.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.
Files changed (103) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +16 -3
  3. package/README.vi.md +16 -3
  4. package/docs/command-reference-vietnamese.md +4 -4
  5. package/docs/company-dev-commands.md +4 -4
  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/security-threat-model.md +3 -1
  12. package/docs/team-onboarding.md +2 -2
  13. package/docs-site/architecture.html +1 -1
  14. package/docs-site/assets/search-en.json +1 -1
  15. package/docs-site/assets/search-vi.json +1 -1
  16. package/docs-site/benchmark.html +1 -1
  17. package/docs-site/commands.html +1 -1
  18. package/docs-site/context-engine.html +1 -1
  19. package/docs-site/ecosystem.html +1 -1
  20. package/docs-site/en/architecture.html +1 -1
  21. package/docs-site/en/benchmark.html +1 -1
  22. package/docs-site/en/commands.html +1 -1
  23. package/docs-site/en/context-engine.html +1 -1
  24. package/docs-site/en/ecosystem.html +1 -1
  25. package/docs-site/en/index.html +15 -15
  26. package/docs-site/en/mcp-approval.html +1 -1
  27. package/docs-site/en/mcp-auth.html +1 -1
  28. package/docs-site/en/mcp-servers.html +1 -1
  29. package/docs-site/en/mcp.html +1 -1
  30. package/docs-site/en/permissions.html +1 -1
  31. package/docs-site/en/profiles.html +1 -1
  32. package/docs-site/en/quickstart.html +1 -1
  33. package/docs-site/en/runtime.html +1 -1
  34. package/docs-site/en/scope.html +1 -1
  35. package/docs-site/en/security.html +1 -1
  36. package/docs-site/en/team.html +1 -1
  37. package/docs-site/en/update.html +3 -3
  38. package/docs-site/en/whats-new.html +58 -31
  39. package/docs-site/en/windows.html +1 -1
  40. package/docs-site/en/workflows.html +1 -1
  41. package/docs-site/index.html +15 -15
  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/releases.json +87 -0
  50. package/docs-site/runtime.html +1 -1
  51. package/docs-site/scope.html +1 -1
  52. package/docs-site/security.html +1 -1
  53. package/docs-site/team.html +1 -1
  54. package/docs-site/update.html +3 -3
  55. package/docs-site/whats-new.html +58 -31
  56. package/docs-site/windows.html +1 -1
  57. package/docs-site/workflows.html +1 -1
  58. package/evals/private-holdout-v1/public-exposure.v2.json +2 -2
  59. package/package.json +2 -1
  60. package/packages/piagent-core/extensions/guard-types.ts +10 -2
  61. package/packages/piagent-core/extensions/piagent-guard.ts +110 -24
  62. package/packages/piagent-core/extensions/policy-core.js +7 -7
  63. package/packages/piagent-core/extensions/shell-ast.js +85 -0
  64. package/packages/piagent-core/extensions/shell-command-words.js +19 -0
  65. package/packages/piagent-core/managed/command-tools.mjs +54 -24
  66. package/packages/piagent-core/managed/fetch-guard.mjs +3 -3
  67. package/packages/piagent-core/managed/host-command.mjs +15 -7
  68. package/packages/piagent-core/managed/member-mcp.mjs +34 -9
  69. package/packages/piagent-core/managed/permission.mjs +19 -12
  70. package/packages/piagent-core/managed/repository-operation.mjs +1 -1
  71. package/packages/piagent-core/managed/session.mjs +2 -2
  72. package/packages/piagent-core/package.json +1 -1
  73. package/packages/piagent-core/runtime/hooks/session-start-hook.ts +1 -1
  74. package/packages/piagent-core/runtime/inspection/approval-broker.ts +33 -16
  75. package/packages/piagent-core/runtime/inspection/runtime-event-store.ts +5 -1
  76. package/packages/piagent-core/runtime/policy/handoff-policy.mjs +144 -0
  77. package/packages/piagent-core/runtime/registration/permission-commands.ts +2 -2
  78. package/packages/piagent-core/runtime/solver/runtime-features.ts +52 -10
  79. package/packages/piagent-webui/dist/client/assets/{App-CiwY9VpU.js → App-fZeIRoaD.js} +1 -1
  80. package/packages/piagent-webui/dist/client/assets/{GatewayApp-DrNJW3v_.js → GatewayApp-CpC4lgYK.js} +17 -15
  81. package/packages/piagent-webui/dist/client/assets/{InspectionApp-BBiwSaV0.js → InspectionApp-pD-BqBXm.js} +1 -1
  82. package/packages/piagent-webui/dist/client/assets/{SessionAgentWorkspace-DwyPebIX.js → SessionAgentWorkspace-3tM7Q6HH.js} +1 -1
  83. package/packages/piagent-webui/dist/client/assets/{SessionInspectorDrawer-CpVzaf_G.js → SessionInspectorDrawer-BJ94aQ6y.js} +2 -2
  84. package/packages/piagent-webui/dist/client/assets/SettingsNavigation-BFfqMcuL.js +3 -0
  85. package/packages/piagent-webui/dist/client/assets/SettingsPage-CxpZ7cdM.js +1 -0
  86. package/packages/piagent-webui/dist/client/assets/{TerminalPanel-B8j_r6-y.js → TerminalPanel-CtZyb0tj.js} +1 -1
  87. package/packages/piagent-webui/dist/client/assets/{WorkspaceCodeEditor-BDTPvq-0.js → WorkspaceCodeEditor-BS_ZrjPN.js} +1 -1
  88. package/packages/piagent-webui/dist/client/assets/{WorkspaceExplorer-DVsNU0eu.js → WorkspaceExplorer-CkFBpcM7.js} +3 -3
  89. package/packages/piagent-webui/dist/client/assets/{index-uhJMXxqD.js → index-CNdhIouM.js} +2 -2
  90. package/packages/piagent-webui/dist/client/assets/{index-Dqb2hNan.css → index-CjM70M7D.css} +1 -1
  91. package/packages/piagent-webui/dist/client/assets/transcript-view-model-CpEMY1xb.js +3 -0
  92. package/packages/piagent-webui/dist/client/index.html +2 -2
  93. package/packages/piagent-webui/gateway/gateway-events.ts +5 -1
  94. package/packages/piagent-webui/gateway/session-inspection-registry.ts +9 -4
  95. package/packages/piagent-webui/server/gateway-websocket.ts +5 -1
  96. package/schemas/piagent-webui/approval-v1.schema.json +3 -1
  97. package/schemas/project-profile.schema.json +16 -0
  98. package/scripts/company-terminal.mjs +5 -5
  99. package/scripts/verify-release-identity.mjs +1 -1
  100. package/packages/piagent-core/runtime/policy/bypass-policy.mjs +0 -42
  101. package/packages/piagent-webui/dist/client/assets/SettingsNavigation-C-tO5iXn.js +0 -3
  102. package/packages/piagent-webui/dist/client/assets/SettingsPage-Ca-qRSZa.js +0 -1
  103. package/packages/piagent-webui/dist/client/assets/transcript-view-model-Bq0nkxyu.js +0 -3
@@ -37,7 +37,7 @@
37
37
  <span class="brand-mark"><img src="/assets/piagent-logo.svg" alt="" width="28" height="28" /></span>
38
38
  <span class="brand-name"><b>Piagent</b> <span>Platform</span></span>
39
39
  </a>
40
- <a class="version-badge" href="/whats-new" data-docs-version="v1.47.0" title="v1.47.0 docs · VI"><span class="dot"></span>v1.47.0</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.1" title="v1.48.1 docs · VI"><span class="dot"></span>v1.48.1</a>
41
41
  <nav class="top-nav" aria-label="Tài liệu">
42
42
  <a href="/quickstart">Tài liệu</a>
43
43
  <a href="/whats-new">Changelog</a>
@@ -37,7 +37,7 @@
37
37
  <span class="brand-mark"><img src="/assets/piagent-logo.svg" alt="" width="28" height="28" /></span>
38
38
  <span class="brand-name"><b>Piagent</b> <span>Platform</span></span>
39
39
  </a>
40
- <a class="version-badge" href="/whats-new" data-docs-version="v1.47.0" title="v1.47.0 docs · VI"><span class="dot"></span>v1.47.0</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.1" title="v1.48.1 docs · VI"><span class="dot"></span>v1.48.1</a>
41
41
  <nav class="top-nav" aria-label="Tài liệu">
42
42
  <a href="/quickstart" aria-current="page">Tài liệu</a>
43
43
  <a href="/whats-new">Changelog</a>
@@ -1,4 +1,91 @@
1
1
  [
2
+ {
3
+ "version": "1.48.1",
4
+ "date": "2026-10-30",
5
+ "status": "stable",
6
+ "title": {
7
+ "en": "Faster first replies on the dashboard and an instant Enter in the Terminal",
8
+ "vi": "Dashboard trả lời nhanh hơn, Enter trong Terminal hiện tin nhắn ngay"
9
+ },
10
+ "summary": {
11
+ "en": "New dashboard conversations start on the model and thinking level you use in the Terminal, and sending a message no longer waits on repository checks or disk flushes.",
12
+ "vi": "Cuộc trò chuyện mới trên dashboard dùng đúng model và mức suy nghĩ bạn dùng ở Terminal, và gửi tin nhắn không còn phải chờ kiểm tra repository hay ghi đĩa."
13
+ },
14
+ "requires": null,
15
+ "items": [
16
+ {
17
+ "kind": "fixed",
18
+ "en": "A new dashboard conversation starts on the model and thinking level set in the Terminal, instead of always the highest reasoning model, so a short question gets a short wait.",
19
+ "vi": "Cuộc trò chuyện mới trên dashboard bắt đầu bằng model và mức suy nghĩ đã chọn ở Terminal, thay vì luôn dùng model suy nghĩ cao nhất, nên câu hỏi ngắn được trả lời nhanh."
20
+ },
21
+ {
22
+ "kind": "fixed",
23
+ "en": "The first message of a new dashboard conversation is always sent, including on models without a thinking mode; it no longer stays behind a \"session was created\" notice.",
24
+ "vi": "Tin nhắn đầu tiên của cuộc trò chuyện mới trên dashboard luôn được gửi, kể cả với model không có chế độ suy nghĩ; không còn kẹt ở thông báo \"Session đã được tạo\"."
25
+ },
26
+ {
27
+ "kind": "improved",
28
+ "en": "Pressing Enter shows your message right away: repository status is read in the background between turns, not while the message waits to appear.",
29
+ "vi": "Nhấn Enter là tin nhắn hiện ngay: trạng thái repository được đọc ở nền giữa các lượt, không còn chặn lúc tin nhắn chờ hiển thị."
30
+ },
31
+ {
32
+ "kind": "improved",
33
+ "en": "Live session events are written without a disk flush per event, which removes a pause before each message and each streamed update.",
34
+ "vi": "Sự kiện của phiên được ghi mà không ép ghi đĩa cho từng sự kiện, bỏ một nhịp chờ trước mỗi tin nhắn và mỗi đoạn stream."
35
+ }
36
+ ]
37
+ },
38
+ {
39
+ "version": "1.48.0",
40
+ "date": "2026-10-30",
41
+ "status": "stable",
42
+ "title": {
43
+ "en": "Bypass stops at the handoff: every mode asks before work leaves the machine",
44
+ "vi": "Bypass dừng ở bước bàn giao: mọi chế độ hỏi trước khi việc rời khỏi máy"
45
+ },
46
+ "summary": {
47
+ "en": "Pushes, pull requests, publishes and deploys are always approved by you, commands are checked against a full shell syntax tree, approvals gain session and stop answers, and the dashboard streams more smoothly.",
48
+ "vi": "Push, pull request, publish và deploy luôn do bạn duyệt, lệnh được kiểm tra bằng cây cú pháp shell đầy đủ, thẻ duyệt có thêm lựa chọn cho cả session và dừng lượt, dashboard stream mượt hơn."
49
+ },
50
+ "requires": null,
51
+ "items": [
52
+ {
53
+ "kind": "security",
54
+ "en": "Every access mode asks before work leaves this machine: git push in any spelling, pull requests and merges, releases, publish, deploy, registry push, ssh and cloud tools, uploads.",
55
+ "vi": "Mọi chế độ truy cập đều hỏi trước khi việc rời khỏi máy: git push dù viết kiểu nào, pull request và merge, release, publish, deploy, push registry, ssh và tool cloud, upload."
56
+ },
57
+ {
58
+ "kind": "security",
59
+ "en": "Bypass runs the work without asking and stops at the handoff, in personal and company sessions alike, including run_on_host with your sign-in and MCP tools that write outside.",
60
+ "vi": "Bypass chạy việc không hỏi và dừng ở bước bàn giao, ở cả phiên cá nhân lẫn công ty, kể cả run_on_host dùng tài khoản của bạn và công cụ MCP ghi ra ngoài."
61
+ },
62
+ {
63
+ "kind": "security",
64
+ "en": "Commands are read by the policy scanner and a shell syntax tree: a push or a destructive delete inside if/then, a function, case, bash -c, eval or a heredoc is caught.",
65
+ "vi": "Lệnh được đọc bằng bộ quét của policy và cây cú pháp shell: push hay lệnh xoá nguy hiểm nằm trong if/then, function, case, bash -c, eval hay heredoc đều bị bắt."
66
+ },
67
+ {
68
+ "kind": "new",
69
+ "en": "Approvals offer four answers: allow once, allow the same exact action for the session, deny, and deny and stop the turn. A handoff is always approved one at a time.",
70
+ "vi": "Thẻ duyệt có bốn lựa chọn: cho phép một lần, cho lệnh giống hệt chạy cả session, từ chối, và từ chối rồi dừng lượt. Việc bàn giao luôn duyệt từng lần."
71
+ },
72
+ {
73
+ "kind": "new",
74
+ "en": "Projects can refuse commands with autoDeny in .pi/piagent-profile.json. The rules hold in every mode, Bypass included; terminate also ends the agent's turn.",
75
+ "vi": "Project có thể chặn hẳn lệnh bằng autoDeny trong .pi/piagent-profile.json. Luật áp dụng ở mọi chế độ, kể cả Bypass; terminate kết thúc luôn lượt của agent."
76
+ },
77
+ {
78
+ "kind": "improved",
79
+ "en": "Smoother dashboard: a streaming answer redraws only its last paragraph, sidebar rows redraw only when they change, and a dropped connection is noticed and restored sooner.",
80
+ "vi": "Dashboard mượt hơn: câu trả lời đang stream chỉ vẽ lại đoạn cuối, sidebar chỉ vẽ lại dòng thay đổi, kết nối bị rớt được phát hiện và nối lại sớm hơn."
81
+ },
82
+ {
83
+ "kind": "fixed",
84
+ "en": "Approval cards, the dashboard, the terminal and the docs describe each access mode exactly as it behaves; personal sessions are no longer labelled as sandboxed.",
85
+ "vi": "Thẻ duyệt, dashboard, terminal và tài liệu mô tả đúng cách từng chế độ truy cập hoạt động; phiên cá nhân không còn bị ghi là chạy trong sandbox."
86
+ }
87
+ ]
88
+ },
2
89
  {
3
90
  "version": "1.47.0",
4
91
  "date": "2026-10-29",
@@ -37,7 +37,7 @@
37
37
  <span class="brand-mark"><img src="/assets/piagent-logo.svg" alt="" width="28" height="28" /></span>
38
38
  <span class="brand-name"><b>Piagent</b> <span>Platform</span></span>
39
39
  </a>
40
- <a class="version-badge" href="/whats-new" data-docs-version="v1.47.0" title="v1.47.0 docs · VI"><span class="dot"></span>v1.47.0</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.1" title="v1.48.1 docs · VI"><span class="dot"></span>v1.48.1</a>
41
41
  <nav class="top-nav" aria-label="Tài liệu">
42
42
  <a href="/quickstart">Tài liệu</a>
43
43
  <a href="/whats-new">Changelog</a>
@@ -37,7 +37,7 @@
37
37
  <span class="brand-mark"><img src="/assets/piagent-logo.svg" alt="" width="28" height="28" /></span>
38
38
  <span class="brand-name"><b>Piagent</b> <span>Platform</span></span>
39
39
  </a>
40
- <a class="version-badge" href="/whats-new" data-docs-version="v1.47.0" title="v1.47.0 docs · VI"><span class="dot"></span>v1.47.0</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.1" title="v1.48.1 docs · VI"><span class="dot"></span>v1.48.1</a>
41
41
  <nav class="top-nav" aria-label="Tài liệu">
42
42
  <a href="/quickstart">Tài liệu</a>
43
43
  <a href="/whats-new">Changelog</a>
@@ -37,7 +37,7 @@
37
37
  <span class="brand-mark"><img src="/assets/piagent-logo.svg" alt="" width="28" height="28" /></span>
38
38
  <span class="brand-name"><b>Piagent</b> <span>Platform</span></span>
39
39
  </a>
40
- <a class="version-badge" href="/whats-new" data-docs-version="v1.47.0" title="v1.47.0 docs · VI"><span class="dot"></span>v1.47.0</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.1" title="v1.48.1 docs · VI"><span class="dot"></span>v1.48.1</a>
41
41
  <nav class="top-nav" aria-label="Tài liệu">
42
42
  <a href="/quickstart">Tài liệu</a>
43
43
  <a href="/whats-new">Changelog</a>
@@ -37,7 +37,7 @@
37
37
  <span class="brand-mark"><img src="/assets/piagent-logo.svg" alt="" width="28" height="28" /></span>
38
38
  <span class="brand-name"><b>Piagent</b> <span>Platform</span></span>
39
39
  </a>
40
- <a class="version-badge" href="/whats-new" data-docs-version="v1.47.0" title="v1.47.0 docs · VI"><span class="dot"></span>v1.47.0</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.1" title="v1.48.1 docs · VI"><span class="dot"></span>v1.48.1</a>
41
41
  <nav class="top-nav" aria-label="Tài liệu">
42
42
  <a href="/quickstart">Tài liệu</a>
43
43
  <a href="/whats-new">Changelog</a>
@@ -37,7 +37,7 @@
37
37
  <span class="brand-mark"><img src="/assets/piagent-logo.svg" alt="" width="28" height="28" /></span>
38
38
  <span class="brand-name"><b>Piagent</b> <span>Platform</span></span>
39
39
  </a>
40
- <a class="version-badge" href="/whats-new" data-docs-version="v1.47.0" title="v1.47.0 docs · VI"><span class="dot"></span>v1.47.0</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.1" title="v1.48.1 docs · VI"><span class="dot"></span>v1.48.1</a>
41
41
  <nav class="top-nav" aria-label="Tài liệu">
42
42
  <a href="/quickstart">Tài liệu</a>
43
43
  <a href="/whats-new">Changelog</a>
@@ -145,9 +145,9 @@
145
145
  <h2 id="pin-cho-team">Pin một bản cho cả team</h2>
146
146
  <p>Khi rollout cho team, cài đúng bản Pi host và đúng bản platform, rồi chạy installer ở chế độ stable. Bước <code>--dry-run</code> in ra những gì sẽ đổi.</p>
147
147
  <div class="command-card">
148
- <header><span>Cài pin theo bản</span><button class="clip-btn" data-clip="npm install -g --ignore-scripts @earendil-works/pi-coding-agent@1.3.0&#10;npm install -g --ignore-scripts @piagent/platform@1.47.0&#10;piagent-install --stable --dry-run&#10;piagent-install --stable">Lấy lệnh</button></header>
148
+ <header><span>Cài pin theo bản</span><button class="clip-btn" data-clip="npm install -g --ignore-scripts @earendil-works/pi-coding-agent@1.3.0&#10;npm install -g --ignore-scripts @piagent/platform@1.48.1&#10;piagent-install --stable --dry-run&#10;piagent-install --stable">Lấy lệnh</button></header>
149
149
  <pre><code>npm install -g --ignore-scripts @earendil-works/pi-coding-agent@1.3.0
150
- npm install -g --ignore-scripts @piagent/platform@1.47.0
150
+ npm install -g --ignore-scripts @piagent/platform@1.48.1
151
151
  piagent-install --stable --dry-run
152
152
  piagent-install --stable</code></pre>
153
153
  </div>
@@ -37,7 +37,7 @@
37
37
  <span class="brand-mark"><img src="/assets/piagent-logo.svg" alt="" width="28" height="28" /></span>
38
38
  <span class="brand-name"><b>Piagent</b> <span>Platform</span></span>
39
39
  </a>
40
- <a class="version-badge" href="/whats-new" data-docs-version="v1.47.0" title="v1.47.0 docs · VI"><span class="dot"></span>v1.47.0</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.1" title="v1.48.1 docs · VI"><span class="dot"></span>v1.48.1</a>
41
41
  <nav class="top-nav" aria-label="Tài liệu">
42
42
  <a href="/quickstart">Tài liệu</a>
43
43
  <a href="/whats-new" aria-current="page">Changelog</a>
@@ -108,7 +108,36 @@
108
108
  <div class="release-filter" role="toolbar" aria-label="Lọc theo loại thay đổi"><button type="button" data-filter-kind="all" aria-pressed="true">Tất cả</button><button type="button" data-filter-kind="new" aria-pressed="false">Mới</button><button type="button" data-filter-kind="improved" aria-pressed="false">Cải thiện</button><button type="button" data-filter-kind="fixed" aria-pressed="false">Sửa lỗi</button><button type="button" data-filter-kind="security" aria-pressed="false">Bảo mật</button></div>
109
109
  <section class="section releases" data-releases>
110
110
  <h2 id="latest" class="sr-only">Mới nhất</h2>
111
- <article class="release latest" id="v1-47-0" data-release>
111
+ <article class="release latest" id="v1-48-1" data-release>
112
+ <div class="release-meta"><a class="release-version" href="#v1-48-1">v1.48.1</a><time class="release-date" datetime="2026-10-30">30/10/2026</time></div>
113
+ <div class="release-body">
114
+ <h3 data-toc-skip id="v1-48-1-title">Dashboard trả lời nhanh hơn, Enter trong Terminal hiện tin nhắn ngay</h3>
115
+ <p>Cuộc trò chuyện mới trên dashboard dùng đúng model và mức suy nghĩ bạn dùng ở Terminal, và gửi tin nhắn không còn phải chờ kiểm tra repository hay ghi đĩa.</p>
116
+ <ul class="release-items">
117
+ <li data-kind="improved"><span class="kind kind-improved">Cải thiện</span><span>Nhấn Enter là tin nhắn hiện ngay: trạng thái repository được đọc ở nền giữa các lượt, không còn chặn lúc tin nhắn chờ hiển thị.</span></li>
118
+ <li data-kind="improved"><span class="kind kind-improved">Cải thiện</span><span>Sự kiện của phiên được ghi mà không ép ghi đĩa cho từng sự kiện, bỏ một nhịp chờ trước mỗi tin nhắn và mỗi đoạn stream.</span></li>
119
+ <li data-kind="fixed"><span class="kind kind-fixed">Sửa lỗi</span><span>Cuộc trò chuyện mới trên dashboard bắt đầu bằng model và mức suy nghĩ đã chọn ở Terminal, thay vì luôn dùng model suy nghĩ cao nhất, nên câu hỏi ngắn được trả lời nhanh.</span></li>
120
+ <li data-kind="fixed"><span class="kind kind-fixed">Sửa lỗi</span><span>Tin nhắn đầu tiên của cuộc trò chuyện mới trên dashboard luôn được gửi, kể cả với model không có chế độ suy nghĩ; không còn kẹt ở thông báo &quot;Session đã được tạo&quot;.</span></li>
121
+ </ul>
122
+ </div>
123
+ </article>
124
+ <article class="release" id="v1-48-0" data-release>
125
+ <div class="release-meta"><a class="release-version" href="#v1-48-0">v1.48.0</a><time class="release-date" datetime="2026-10-30">30/10/2026</time></div>
126
+ <div class="release-body">
127
+ <h3 data-toc-skip id="v1-48-0-title">Bypass dừng ở bước bàn giao: mọi chế độ hỏi trước khi việc rời khỏi máy</h3>
128
+ <p>Push, pull request, publish và deploy luôn do bạn duyệt, lệnh được kiểm tra bằng cây cú pháp shell đầy đủ, thẻ duyệt có thêm lựa chọn cho cả session và dừng lượt, dashboard stream mượt hơn.</p>
129
+ <ul class="release-items">
130
+ <li data-kind="new"><span class="kind kind-new">Mới</span><span>Thẻ duyệt có bốn lựa chọn: cho phép một lần, cho lệnh giống hệt chạy cả session, từ chối, và từ chối rồi dừng lượt. Việc bàn giao luôn duyệt từng lần.</span></li>
131
+ <li data-kind="new"><span class="kind kind-new">Mới</span><span>Project có thể chặn hẳn lệnh bằng autoDeny trong .pi/piagent-profile.json. Luật áp dụng ở mọi chế độ, kể cả Bypass; terminate kết thúc luôn lượt của agent.</span></li>
132
+ <li data-kind="improved"><span class="kind kind-improved">Cải thiện</span><span>Dashboard mượt hơn: câu trả lời đang stream chỉ vẽ lại đoạn cuối, sidebar chỉ vẽ lại dòng thay đổi, kết nối bị rớt được phát hiện và nối lại sớm hơn.</span></li>
133
+ <li data-kind="fixed"><span class="kind kind-fixed">Sửa lỗi</span><span>Thẻ duyệt, dashboard, terminal và tài liệu mô tả đúng cách từng chế độ truy cập hoạt động; phiên cá nhân không còn bị ghi là chạy trong sandbox.</span></li>
134
+ <li data-kind="security"><span class="kind kind-security">Bảo mật</span><span>Mọi chế độ truy cập đều hỏi trước khi việc rời khỏi máy: git push dù viết kiểu nào, pull request và merge, release, publish, deploy, push registry, ssh và tool cloud, upload.</span></li>
135
+ <li data-kind="security"><span class="kind kind-security">Bảo mật</span><span>Bypass chạy việc không hỏi và dừng ở bước bàn giao, ở cả phiên cá nhân lẫn công ty, kể cả run_on_host dùng tài khoản của bạn và công cụ MCP ghi ra ngoài.</span></li>
136
+ <li data-kind="security"><span class="kind kind-security">Bảo mật</span><span>Lệnh được đọc bằng bộ quét của policy và cây cú pháp shell: push hay lệnh xoá nguy hiểm nằm trong if/then, function, case, bash -c, eval hay heredoc đều bị bắt.</span></li>
137
+ </ul>
138
+ </div>
139
+ </article>
140
+ <article class="release" id="v1-47-0" data-release>
112
141
  <div class="release-meta"><a class="release-version" href="#v1-47-0">v1.47.0</a><time class="release-date" datetime="2026-10-29">29/10/2026</time></div>
113
142
  <div class="release-body">
114
143
  <h3 data-toc-skip id="v1-47-0-title">Phiên công ty dùng MCP server của bạn và điều khiển simulator iOS, Android</h3>
@@ -390,40 +419,38 @@
390
419
  </ul>
391
420
  </div>
392
421
  </article>
393
- <article class="release" id="v1-42-1" data-release>
394
- <div class="release-meta"><a class="release-version" href="#v1-42-1">v1.42.1</a><time class="release-date" datetime="2026-10-25">25/10/2026</time></div>
395
- <div class="release-body">
396
- <h3 data-toc-skip id="v1-42-1-title">Dashboard tải nhanh hơn, hash workspace dùng ít bộ nhớ hơn</h3>
397
- <p>Mã và CSS tĩnh được nén khi truyền; giao diện phụ tải khi cần, có cách phục hồi khi tải lỗi.</p>
398
- <ul class="release-items">
399
- <li data-kind="improved"><span class="kind kind-improved">Cải thiện</span><span>Dashboard local gửi JS/CSS gzip khi trình duyệt hỗ trợ, dùng lại dữ liệu đã nén.</span></li>
400
- <li data-kind="improved"><span class="kind kind-improved">Cải thiện</span><span>Gateway và giao diện inspection tải riêng; lỗi tải Settings nằm trong dialog có thể đóng. Theme và tùy chọn trên server được giữ nguyên.</span></li>
401
- <li data-kind="improved"><span class="kind kind-improved">Cải thiện</span><span>Hash file workspace nhỏ dùng buffer theo kích thước file, vẫn kiểm tra toàn bộ nội dung và định danh file.</span></li>
402
- <li data-kind="fixed"><span class="kind kind-fixed">Sửa lỗi</span><span>Gateway khởi động trên Windows native và lưu receipt workspace có chữ ký mà không áp kiểm tra quyền POSIX hoặc fsync thư mục lên file Windows.</span></li>
403
- </ul>
404
- </div>
405
- </article>
406
- <article class="release" id="v1-42-0" data-release>
407
- <div class="release-meta"><a class="release-version" href="#v1-42-0">v1.42.0</a><time class="release-date" datetime="2026-10-25">25/10/2026</time></div>
408
- <div class="release-body">
409
- <h3 data-toc-skip id="v1-42-0-title">Dashboard thiết kế lại, tin cũ tải mà không nhảy trang</h3>
410
- <p>Dashboard có một thang thiết kế và mọi theme tô tới mọi khung; tin cũ tự tải khi cuộn lên và tin bạn đang đọc đứng yên.</p>
411
- <ul class="release-items">
412
- <li data-kind="new"><span class="kind kind-new">Mới</span><span>Tin cũ tự tải khi cuộn gần đầu, và tin đang đọc không còn bị đẩy đi khi có trang mới chèn phía trên.</span></li>
413
- <li data-kind="improved"><span class="kind kind-improved">Cải thiện</span><span>Cả 13 theme giờ tô tới diff, thẻ duyệt, câu hỏi và tài liệu; header, sidebar, ô soạn tin và trang tạo mới được thiết kế lại.</span></li>
414
- <li data-kind="improved"><span class="kind kind-improved">Cải thiện</span><span>Một lượt đang chạy chỉ có một hiệu ứng chạy: spinner của bước, con trỏ khi chữ đang về, hoặc spinner khi agent đang nghĩ.</span></li>
415
- <li data-kind="improved"><span class="kind kind-improved">Cải thiện</span><span>Website và README mới, có hướng dẫn Cập nhật và gỡ; ghi chú phát hành giờ từ một file duy nhất, file này sinh luôn <code>CHANGELOG.md</code>.</span></li>
416
- <li data-kind="fixed"><span class="kind kind-fixed">Sửa lỗi</span><span>Lịch sử từng hiện markdown thô rồi co lại; giờ hiện đúng định dạng ngay từ đầu.</span></li>
417
- <li data-kind="fixed"><span class="kind kind-fixed">Sửa lỗi</span><span>Tải nhiều trang tin cũ từng làm mất tin mới nhất mà không báo; cửa sổ giờ giữ 1.000 mục và có nút về tin mới nhất.</span></li>
418
- </ul>
419
- </div>
420
- </article>
421
422
  </section>
422
423
  <section class="section archive">
423
424
  <h2 id="archive">Các bản trước</h2>
424
425
  <p class="section-lead">Bản cũ hơn, gom theo tháng. Mở một tháng để xem từng thay đổi.</p>
425
426
  <details class="release-archive">
426
- <summary><span>Tháng 10/2026</span><span class="archive-count">62</span></summary>
427
+ <summary><span>Tháng 10/2026</span><span class="archive-count">64</span></summary>
428
+ <div class="archive-row" id="v1-42-1">
429
+ <div class="archive-head"><a class="release-version" href="#v1-42-1">v1.42.1</a> <span class="release-date">25/10/2026</span></div>
430
+ <div class="archive-body">
431
+ <p><strong>Dashboard tải nhanh hơn, hash workspace dùng ít bộ nhớ hơn</strong> — Mã và CSS tĩnh được nén khi truyền; giao diện phụ tải khi cần, có cách phục hồi khi tải lỗi.</p>
432
+ <ul class="release-items">
433
+ <li data-kind="improved"><span class="kind kind-improved">Cải thiện</span><span>Dashboard local gửi JS/CSS gzip khi trình duyệt hỗ trợ, dùng lại dữ liệu đã nén.</span></li>
434
+ <li data-kind="improved"><span class="kind kind-improved">Cải thiện</span><span>Gateway và giao diện inspection tải riêng; lỗi tải Settings nằm trong dialog có thể đóng. Theme và tùy chọn trên server được giữ nguyên.</span></li>
435
+ <li data-kind="improved"><span class="kind kind-improved">Cải thiện</span><span>Hash file workspace nhỏ dùng buffer theo kích thước file, vẫn kiểm tra toàn bộ nội dung và định danh file.</span></li>
436
+ <li data-kind="fixed"><span class="kind kind-fixed">Sửa lỗi</span><span>Gateway khởi động trên Windows native và lưu receipt workspace có chữ ký mà không áp kiểm tra quyền POSIX hoặc fsync thư mục lên file Windows.</span></li>
437
+ </ul>
438
+ </div>
439
+ </div>
440
+ <div class="archive-row" id="v1-42-0">
441
+ <div class="archive-head"><a class="release-version" href="#v1-42-0">v1.42.0</a> <span class="release-date">25/10/2026</span></div>
442
+ <div class="archive-body">
443
+ <p><strong>Dashboard thiết kế lại, tin cũ tải mà không nhảy trang</strong> — Dashboard có một thang thiết kế và mọi theme tô tới mọi khung; tin cũ tự tải khi cuộn lên và tin bạn đang đọc đứng yên.</p>
444
+ <ul class="release-items">
445
+ <li data-kind="new"><span class="kind kind-new">Mới</span><span>Tin cũ tự tải khi cuộn gần đầu, và tin đang đọc không còn bị đẩy đi khi có trang mới chèn phía trên.</span></li>
446
+ <li data-kind="improved"><span class="kind kind-improved">Cải thiện</span><span>Cả 13 theme giờ tô tới diff, thẻ duyệt, câu hỏi và tài liệu; header, sidebar, ô soạn tin và trang tạo mới được thiết kế lại.</span></li>
447
+ <li data-kind="improved"><span class="kind kind-improved">Cải thiện</span><span>Một lượt đang chạy chỉ có một hiệu ứng chạy: spinner của bước, con trỏ khi chữ đang về, hoặc spinner khi agent đang nghĩ.</span></li>
448
+ <li data-kind="improved"><span class="kind kind-improved">Cải thiện</span><span>Website và README mới, có hướng dẫn Cập nhật và gỡ; ghi chú phát hành giờ từ một file duy nhất, file này sinh luôn <code>CHANGELOG.md</code>.</span></li>
449
+ <li data-kind="fixed"><span class="kind kind-fixed">Sửa lỗi</span><span>Lịch sử từng hiện markdown thô rồi co lại; giờ hiện đúng định dạng ngay từ đầu.</span></li>
450
+ <li data-kind="fixed"><span class="kind kind-fixed">Sửa lỗi</span><span>Tải nhiều trang tin cũ từng làm mất tin mới nhất mà không báo; cửa sổ giờ giữ 1.000 mục và có nút về tin mới nhất.</span></li>
451
+ </ul>
452
+ </div>
453
+ </div>
427
454
  <div class="archive-row" id="v1-41-0">
428
455
  <div class="archive-head"><a class="release-version" href="#v1-41-0">v1.41.0</a> <span class="release-date">24/10/2026</span></div>
429
456
  <div class="archive-body">
@@ -37,7 +37,7 @@
37
37
  <span class="brand-mark"><img src="/assets/piagent-logo.svg" alt="" width="28" height="28" /></span>
38
38
  <span class="brand-name"><b>Piagent</b> <span>Platform</span></span>
39
39
  </a>
40
- <a class="version-badge" href="/whats-new" data-docs-version="v1.47.0" title="v1.47.0 docs · VI"><span class="dot"></span>v1.47.0</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.1" title="v1.48.1 docs · VI"><span class="dot"></span>v1.48.1</a>
41
41
  <nav class="top-nav" aria-label="Tài liệu">
42
42
  <a href="/quickstart">Tài liệu</a>
43
43
  <a href="/whats-new">Changelog</a>
@@ -37,7 +37,7 @@
37
37
  <span class="brand-mark"><img src="/assets/piagent-logo.svg" alt="" width="28" height="28" /></span>
38
38
  <span class="brand-name"><b>Piagent</b> <span>Platform</span></span>
39
39
  </a>
40
- <a class="version-badge" href="/whats-new" data-docs-version="v1.47.0" title="v1.47.0 docs · VI"><span class="dot"></span>v1.47.0</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.1" title="v1.48.1 docs · VI"><span class="dot"></span>v1.48.1</a>
41
41
  <nav class="top-nav" aria-label="Tài liệu">
42
42
  <a href="/quickstart">Tài liệu</a>
43
43
  <a href="/whats-new">Changelog</a>
@@ -256,8 +256,8 @@
256
256
  },
257
257
  {
258
258
  "path": "tests",
259
- "fileCount": 638,
260
- "sha256": "74109d76ee46eeb519070b53699a7e582a3705c74030e9ca067242566afbb5df"
259
+ "fileCount": 641,
260
+ "sha256": "b39f3983ab8feac820d9e23dffd2841a9b11a9b3b85fb997e36681b1aeadbff1"
261
261
  }
262
262
  ],
263
263
  "custodianComparisonRules": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@piagent/platform",
3
- "version": "1.47.0",
3
+ "version": "1.48.1",
4
4
  "license": "MIT",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -141,6 +141,7 @@
141
141
  }
142
142
  },
143
143
  "dependencies": {
144
+ "@aliou/sh": "0.3.4",
144
145
  "@babel/parser": "7.29.8",
145
146
  "ws": "8.21.3"
146
147
  },
@@ -29,6 +29,7 @@ export type ProjectProfile = {
29
29
  memory?: MemorySettings;
30
30
  contextIndex?: ContextIndexSettings;
31
31
  runtimePolicy?: RuntimePolicySettings;
32
+ autoDeny?: AutoDenyRule[];
32
33
  orchestration?: OrchestrationPolicySettings;
33
34
  techStack?: ProjectTechStackReference;
34
35
  };
@@ -322,8 +323,9 @@ export type ResolvedOrchestrationPolicy = {
322
323
  rules: string[];
323
324
  };
324
325
 
325
- // "bypass": personal sessions only; no Piagent gate asks or blocks (as Codex's
326
- // --dangerously-bypass-approvals-and-sandbox). Output redaction and turn checkpoints still run.
326
+ // "bypass": personal sessions only; no Piagent gate asks or blocks the work. The
327
+ // handoff (runtime/policy/handoff-policy.mjs) is still asked; output redaction
328
+ // and turn checkpoints still run.
327
329
  export type PermissionProfileMode = "read-only" | "workspace-write" | "trusted-full-access" | "bypass";
328
330
 
329
331
  export type PermissionProfilesConfig = {
@@ -459,8 +461,14 @@ export type CommandRule = {
459
461
  ignoreSearchArguments?: boolean;
460
462
  value: string | string[];
461
463
  reason: string;
464
+ // A forbid that also ends the agent's turn, so it does not retry.
465
+ terminate?: boolean;
462
466
  };
463
467
 
468
+ // A project's own refusals (profile `autoDeny`): matched like an exec rule,
469
+ // refused in every permission mode, Bypass included.
470
+ export type AutoDenyRule = { pattern: string; match?: "contains" | "regex" | "prefix"; reason: string; terminate?: boolean };
471
+
464
472
  export type ExecPolicyConfig = {
465
473
  defaultMode?: "advisory" | "enforce";
466
474
  bannedPrefixSuggestions?: string[][];