@piagent/platform 1.46.4 → 1.48.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 (111) 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 +6 -5
  6. package/docs/distribution-standard.md +6 -6
  7. package/docs/languages.json +2 -2
  8. package/docs/mcp-and-tools.md +21 -1
  9. package/docs/operator-manual-vietnamese.md +7 -7
  10. package/docs/publishing-for-teams.md +2 -0
  11. package/docs/release-install-policy.md +2 -2
  12. package/docs/security-threat-model.md +3 -1
  13. package/docs/team-onboarding.md +2 -2
  14. package/docs-site/architecture.html +1 -1
  15. package/docs-site/assets/search-en.json +1 -1
  16. package/docs-site/assets/search-vi.json +1 -1
  17. package/docs-site/benchmark.html +1 -1
  18. package/docs-site/commands.html +1 -1
  19. package/docs-site/content/en/mcp.html +8 -0
  20. package/docs-site/content/mcp.html +8 -0
  21. package/docs-site/context-engine.html +1 -1
  22. package/docs-site/ecosystem.html +1 -1
  23. package/docs-site/en/architecture.html +1 -1
  24. package/docs-site/en/benchmark.html +1 -1
  25. package/docs-site/en/commands.html +1 -1
  26. package/docs-site/en/context-engine.html +1 -1
  27. package/docs-site/en/ecosystem.html +1 -1
  28. package/docs-site/en/index.html +15 -15
  29. package/docs-site/en/mcp-approval.html +1 -1
  30. package/docs-site/en/mcp-auth.html +1 -1
  31. package/docs-site/en/mcp-servers.html +1 -1
  32. package/docs-site/en/mcp.html +9 -1
  33. package/docs-site/en/permissions.html +1 -1
  34. package/docs-site/en/profiles.html +1 -1
  35. package/docs-site/en/quickstart.html +1 -1
  36. package/docs-site/en/runtime.html +1 -1
  37. package/docs-site/en/scope.html +1 -1
  38. package/docs-site/en/security.html +1 -1
  39. package/docs-site/en/team.html +1 -1
  40. package/docs-site/en/update.html +3 -3
  41. package/docs-site/en/whats-new.html +59 -32
  42. package/docs-site/en/windows.html +1 -1
  43. package/docs-site/en/workflows.html +1 -1
  44. package/docs-site/index.html +15 -15
  45. package/docs-site/mcp-approval.html +1 -1
  46. package/docs-site/mcp-auth.html +1 -1
  47. package/docs-site/mcp-servers.html +1 -1
  48. package/docs-site/mcp.html +9 -1
  49. package/docs-site/permissions.html +1 -1
  50. package/docs-site/profiles.html +1 -1
  51. package/docs-site/quickstart.html +1 -1
  52. package/docs-site/releases.json +87 -0
  53. package/docs-site/runtime.html +1 -1
  54. package/docs-site/scope.html +1 -1
  55. package/docs-site/security.html +1 -1
  56. package/docs-site/team.html +1 -1
  57. package/docs-site/update.html +3 -3
  58. package/docs-site/whats-new.html +59 -32
  59. package/docs-site/windows.html +1 -1
  60. package/docs-site/workflows.html +1 -1
  61. package/evals/private-holdout-v1/public-exposure.v2.json +2 -2
  62. package/package.json +2 -1
  63. package/packages/piagent-core/extensions/guard-types.ts +10 -2
  64. package/packages/piagent-core/extensions/piagent-guard.ts +106 -169
  65. package/packages/piagent-core/extensions/policy-core.js +7 -7
  66. package/packages/piagent-core/extensions/shell-ast.js +85 -0
  67. package/packages/piagent-core/extensions/shell-command-words.js +19 -0
  68. package/packages/piagent-core/managed/command-tools.mjs +70 -26
  69. package/packages/piagent-core/managed/fetch-guard.mjs +3 -3
  70. package/packages/piagent-core/managed/host-command.mjs +15 -7
  71. package/packages/piagent-core/managed/member-mcp.mjs +96 -0
  72. package/packages/piagent-core/managed/memory-lessons.mjs +1 -1
  73. package/packages/piagent-core/managed/permission.mjs +19 -12
  74. package/packages/piagent-core/managed/repository-operation.mjs +1 -1
  75. package/packages/piagent-core/managed/resource-loader.mjs +19 -7
  76. package/packages/piagent-core/managed/sandbox-diagnostic.mjs +4 -0
  77. package/packages/piagent-core/managed/session.mjs +4 -4
  78. package/packages/piagent-core/managed/simulator-commands.mjs +117 -0
  79. package/packages/piagent-core/mcp/mcp-server-catalog.js +18 -1
  80. package/packages/piagent-core/package.json +1 -1
  81. package/packages/piagent-core/runtime/hooks/session-start-hook.ts +1 -1
  82. package/packages/piagent-core/runtime/inspection/approval-broker.ts +33 -16
  83. package/packages/piagent-core/runtime/mcp-repository-gate.d.mts +10 -0
  84. package/packages/piagent-core/runtime/mcp-repository-gate.mjs +150 -0
  85. package/packages/piagent-core/runtime/policy/handoff-policy.mjs +144 -0
  86. package/packages/piagent-core/runtime/registration/permission-commands.ts +2 -2
  87. package/packages/piagent-webui/dist/client/assets/{App-CiwY9VpU.js → App-fZeIRoaD.js} +1 -1
  88. package/packages/piagent-webui/dist/client/assets/{GatewayApp-DrNJW3v_.js → GatewayApp-CpC4lgYK.js} +17 -15
  89. package/packages/piagent-webui/dist/client/assets/{InspectionApp-BBiwSaV0.js → InspectionApp-pD-BqBXm.js} +1 -1
  90. package/packages/piagent-webui/dist/client/assets/{SessionAgentWorkspace-DwyPebIX.js → SessionAgentWorkspace-3tM7Q6HH.js} +1 -1
  91. package/packages/piagent-webui/dist/client/assets/{SessionInspectorDrawer-CpVzaf_G.js → SessionInspectorDrawer-BJ94aQ6y.js} +2 -2
  92. package/packages/piagent-webui/dist/client/assets/SettingsNavigation-BFfqMcuL.js +3 -0
  93. package/packages/piagent-webui/dist/client/assets/SettingsPage-CxpZ7cdM.js +1 -0
  94. package/packages/piagent-webui/dist/client/assets/{TerminalPanel-B8j_r6-y.js → TerminalPanel-CtZyb0tj.js} +1 -1
  95. package/packages/piagent-webui/dist/client/assets/{WorkspaceCodeEditor-BDTPvq-0.js → WorkspaceCodeEditor-BS_ZrjPN.js} +1 -1
  96. package/packages/piagent-webui/dist/client/assets/{WorkspaceExplorer-DVsNU0eu.js → WorkspaceExplorer-CkFBpcM7.js} +3 -3
  97. package/packages/piagent-webui/dist/client/assets/{index-uhJMXxqD.js → index-CNdhIouM.js} +2 -2
  98. package/packages/piagent-webui/dist/client/assets/{index-Dqb2hNan.css → index-CjM70M7D.css} +1 -1
  99. package/packages/piagent-webui/dist/client/assets/transcript-view-model-CpEMY1xb.js +3 -0
  100. package/packages/piagent-webui/dist/client/index.html +2 -2
  101. package/packages/piagent-webui/gateway/gateway-events.ts +5 -1
  102. package/packages/piagent-webui/server/gateway-websocket.ts +5 -1
  103. package/schemas/piagent-webui/approval-v1.schema.json +3 -1
  104. package/schemas/project-profile.schema.json +16 -0
  105. package/scripts/company-terminal.mjs +5 -5
  106. package/scripts/setup.sh +1 -1
  107. package/scripts/verify-release-identity.mjs +1 -1
  108. package/packages/piagent-core/runtime/policy/bypass-policy.mjs +0 -42
  109. package/packages/piagent-webui/dist/client/assets/SettingsNavigation-C-tO5iXn.js +0 -3
  110. package/packages/piagent-webui/dist/client/assets/SettingsPage-Ca-qRSZa.js +0 -1
  111. 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="/en/whats-new" data-docs-version="v1.46.4" title="v1.46.4 docs · EN"><span class="dot"></span>v1.46.4</a>
40
+ <a class="version-badge" href="/en/whats-new" data-docs-version="v1.48.0" title="v1.48.0 docs · EN"><span class="dot"></span>v1.48.0</a>
41
41
  <nav class="top-nav" aria-label="Documentation">
42
42
  <a href="/en/quickstart">Docs</a>
43
43
  <a href="/en/whats-new" aria-current="page">Changelog</a>
@@ -108,7 +108,36 @@
108
108
  <div class="release-filter" role="toolbar" aria-label="Filter by kind of change"><button type="button" data-filter-kind="all" aria-pressed="true">All</button><button type="button" data-filter-kind="new" aria-pressed="false">New</button><button type="button" data-filter-kind="improved" aria-pressed="false">Improved</button><button type="button" data-filter-kind="fixed" aria-pressed="false">Fixed</button><button type="button" data-filter-kind="security" aria-pressed="false">Security</button></div>
109
109
  <section class="section releases" data-releases>
110
110
  <h2 id="latest" class="sr-only">Latest</h2>
111
- <article class="release latest" id="v1-46-4" data-release>
111
+ <article class="release latest" id="v1-48-0" data-release>
112
+ <div class="release-meta"><a class="release-version" href="#v1-48-0">v1.48.0</a><time class="release-date" datetime="2026-10-30">Oct 30, 2026</time></div>
113
+ <div class="release-body">
114
+ <h3 data-toc-skip id="v1-48-0-title">Bypass stops at the handoff: every mode asks before work leaves the machine</h3>
115
+ <p>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.</p>
116
+ <ul class="release-items">
117
+ <li data-kind="new"><span class="kind kind-new">New</span><span>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.</span></li>
118
+ <li data-kind="new"><span class="kind kind-new">New</span><span>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.</span></li>
119
+ <li data-kind="improved"><span class="kind kind-improved">Improved</span><span>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.</span></li>
120
+ <li data-kind="fixed"><span class="kind kind-fixed">Fixed</span><span>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.</span></li>
121
+ <li data-kind="security"><span class="kind kind-security">Security</span><span>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.</span></li>
122
+ <li data-kind="security"><span class="kind kind-security">Security</span><span>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.</span></li>
123
+ <li data-kind="security"><span class="kind kind-security">Security</span><span>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.</span></li>
124
+ </ul>
125
+ </div>
126
+ </article>
127
+ <article class="release" id="v1-47-0" data-release>
128
+ <div class="release-meta"><a class="release-version" href="#v1-47-0">v1.47.0</a><time class="release-date" datetime="2026-10-29">Oct 29, 2026</time></div>
129
+ <div class="release-body">
130
+ <h3 data-toc-skip id="v1-47-0-title">Company sessions use your MCP servers and drive iOS and Android simulators</h3>
131
+ <p>Jira, GitHub and every MCP server you set up for Piagent now work in company sessions, and the agent builds, runs, screenshots and tests mobile apps on simulators itself.</p>
132
+ <ul class="release-items">
133
+ <li data-kind="new"><span class="kind kind-new">New</span><span>Company sessions load the MCP servers set up for personal Piagent, with the same logins. Repository-defined servers still need approval; results reach the agent as data.</span></li>
134
+ <li data-kind="new"><span class="kind kind-new">New</span><span>The atlassian preset adds Jira and Confluence Cloud: piagent-mcp --preset atlassian, then /mcp-auth atlassian with your own Atlassian login.</span></li>
135
+ <li data-kind="new"><span class="kind kind-new">New</span><span>run_on_simulator boots simulators, builds, installs and launches apps, runs XCUITest, takes screenshots and reads logs: xcrun simctl, xcodebuild, adb, emulator, gradlew, flutter, expo.</span></li>
136
+ <li data-kind="security"><span class="kind kind-security">Security</span><span>run_on_simulator refuses other programs, ;, &amp;, $( ) and files outside the project. Full access and Bypass run it, but still ask when a command reaches credentials.</span></li>
137
+ </ul>
138
+ </div>
139
+ </article>
140
+ <article class="release" id="v1-46-4" data-release>
112
141
  <div class="release-meta"><a class="release-version" href="#v1-46-4">v1.46.4</a><time class="release-date" datetime="2026-10-29">Oct 29, 2026</time></div>
113
142
  <div class="release-body">
114
143
  <h3 data-toc-skip id="v1-46-4-title">One subagent instead of a refused request; update reads a commented models.json</h3>
@@ -390,41 +419,39 @@
390
419
  </ul>
391
420
  </div>
392
421
  </article>
393
- <article class="release" id="v1-42-0" data-release>
394
- <div class="release-meta"><a class="release-version" href="#v1-42-0">v1.42.0</a><time class="release-date" datetime="2026-10-25">Oct 25, 2026</time></div>
395
- <div class="release-body">
396
- <h3 data-toc-skip id="v1-42-0-title">A redesigned dashboard and older messages that load without jumping</h3>
397
- <p>The dashboard gets one design scale and every theme everywhere; older messages load as you scroll up and the message you are reading stays put.</p>
398
- <ul class="release-items">
399
- <li data-kind="new"><span class="kind kind-new">New</span><span>Older messages load on their own as you near the top, and the message being read no longer moves when a page is added above it.</span></li>
400
- <li data-kind="improved"><span class="kind kind-improved">Improved</span><span>All 13 colour themes now reach the diff, approval, question and document views; header, sidebar, composer and new chat page are redesigned.</span></li>
401
- <li data-kind="improved"><span class="kind kind-improved">Improved</span><span>A running turn shows one moving indicator at a time: the step's spinner, the streaming caret, or a thinking spinner.</span></li>
402
- <li data-kind="improved"><span class="kind kind-improved">Improved</span><span>New website and README with an Update &amp; uninstall guide; release notes now come from one file that also writes <code>CHANGELOG.md</code>.</span></li>
403
- <li data-kind="fixed"><span class="kind kind-fixed">Fixed</span><span>History showed raw markdown for a moment and then reflowed; it now appears formatted from the first frame.</span></li>
404
- <li data-kind="fixed"><span class="kind kind-fixed">Fixed</span><span>Loading many older pages silently dropped the newest messages; the window now holds 1,000 items and offers a way back to the newest.</span></li>
405
- </ul>
406
- </div>
407
- </article>
408
- <article class="release" id="v1-41-0" data-release>
409
- <div class="release-meta"><a class="release-version" href="#v1-41-0">v1.41.0</a><time class="release-date" datetime="2026-10-24">Oct 24, 2026</time></div>
410
- <div class="release-body">
411
- <h3 data-toc-skip id="v1-41-0-title">Front-end change reports with before/after screenshots</h3>
412
- <p>A new skill turns a front-end task into a report with framed before/after screenshots, business and logic changes and check results, shown in the dashboard.</p>
413
- <ul class="release-items">
414
- <li data-kind="new"><span class="kind kind-new">New</span><span>The <code>fe-change-report</code> skill captures old and new pages headless on the same data and frames each change with a numbered red box on both.</span></li>
415
- <li data-kind="new"><span class="kind kind-new">New</span><span>The agent runs the project's checks and full E2E headless, naming baseline failures, and writes what changed in business, logic and on screen.</span></li>
416
- <li data-kind="new"><span class="kind kind-new">New</span><span>Documents draws <code>reports/fe-change/&lt;slug&gt;/report.json</code> as the report, with zoom per frame, other screen sizes and a full-screen view.</span></li>
417
- <li data-kind="new"><span class="kind kind-new">New</span><span>The scripts use the project's own Playwright and add no dependency; they write one self-contained <code>report.html</code> with no scripts, to send to anyone.</span></li>
418
- <li data-kind="security"><span class="kind kind-security">Security</span><span>The report is drawn from data, never from the HTML file, and only its PNG screenshots are served, so the dashboard still renders no model markup.</span></li>
419
- </ul>
420
- </div>
421
- </article>
422
422
  </section>
423
423
  <section class="section archive">
424
424
  <h2 id="archive">Earlier releases</h2>
425
425
  <p class="section-lead">Older releases, grouped by month. Open a month to see every change.</p>
426
426
  <details class="release-archive">
427
- <summary><span>October 2026</span><span class="archive-count">61</span></summary>
427
+ <summary><span>October 2026</span><span class="archive-count">63</span></summary>
428
+ <div class="archive-row" id="v1-42-0">
429
+ <div class="archive-head"><a class="release-version" href="#v1-42-0">v1.42.0</a> <span class="release-date">Oct 25, 2026</span></div>
430
+ <div class="archive-body">
431
+ <p><strong>A redesigned dashboard and older messages that load without jumping</strong> — The dashboard gets one design scale and every theme everywhere; older messages load as you scroll up and the message you are reading stays put.</p>
432
+ <ul class="release-items">
433
+ <li data-kind="new"><span class="kind kind-new">New</span><span>Older messages load on their own as you near the top, and the message being read no longer moves when a page is added above it.</span></li>
434
+ <li data-kind="improved"><span class="kind kind-improved">Improved</span><span>All 13 colour themes now reach the diff, approval, question and document views; header, sidebar, composer and new chat page are redesigned.</span></li>
435
+ <li data-kind="improved"><span class="kind kind-improved">Improved</span><span>A running turn shows one moving indicator at a time: the step's spinner, the streaming caret, or a thinking spinner.</span></li>
436
+ <li data-kind="improved"><span class="kind kind-improved">Improved</span><span>New website and README with an Update &amp; uninstall guide; release notes now come from one file that also writes <code>CHANGELOG.md</code>.</span></li>
437
+ <li data-kind="fixed"><span class="kind kind-fixed">Fixed</span><span>History showed raw markdown for a moment and then reflowed; it now appears formatted from the first frame.</span></li>
438
+ <li data-kind="fixed"><span class="kind kind-fixed">Fixed</span><span>Loading many older pages silently dropped the newest messages; the window now holds 1,000 items and offers a way back to the newest.</span></li>
439
+ </ul>
440
+ </div>
441
+ </div>
442
+ <div class="archive-row" id="v1-41-0">
443
+ <div class="archive-head"><a class="release-version" href="#v1-41-0">v1.41.0</a> <span class="release-date">Oct 24, 2026</span></div>
444
+ <div class="archive-body">
445
+ <p><strong>Front-end change reports with before/after screenshots</strong> — A new skill turns a front-end task into a report with framed before/after screenshots, business and logic changes and check results, shown in the dashboard.</p>
446
+ <ul class="release-items">
447
+ <li data-kind="new"><span class="kind kind-new">New</span><span>The <code>fe-change-report</code> skill captures old and new pages headless on the same data and frames each change with a numbered red box on both.</span></li>
448
+ <li data-kind="new"><span class="kind kind-new">New</span><span>The agent runs the project's checks and full E2E headless, naming baseline failures, and writes what changed in business, logic and on screen.</span></li>
449
+ <li data-kind="new"><span class="kind kind-new">New</span><span>Documents draws <code>reports/fe-change/&lt;slug&gt;/report.json</code> as the report, with zoom per frame, other screen sizes and a full-screen view.</span></li>
450
+ <li data-kind="new"><span class="kind kind-new">New</span><span>The scripts use the project's own Playwright and add no dependency; they write one self-contained <code>report.html</code> with no scripts, to send to anyone.</span></li>
451
+ <li data-kind="security"><span class="kind kind-security">Security</span><span>The report is drawn from data, never from the HTML file, and only its PNG screenshots are served, so the dashboard still renders no model markup.</span></li>
452
+ </ul>
453
+ </div>
454
+ </div>
428
455
  <div class="archive-row" id="v1-40-0">
429
456
  <div class="archive-head"><a class="release-version" href="#v1-40-0">v1.40.0</a> <span class="release-date">Oct 24, 2026</span></div>
430
457
  <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="/en/whats-new" data-docs-version="v1.46.4" title="v1.46.4 docs · EN"><span class="dot"></span>v1.46.4</a>
40
+ <a class="version-badge" href="/en/whats-new" data-docs-version="v1.48.0" title="v1.48.0 docs · EN"><span class="dot"></span>v1.48.0</a>
41
41
  <nav class="top-nav" aria-label="Documentation">
42
42
  <a href="/en/quickstart">Docs</a>
43
43
  <a href="/en/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="/en/whats-new" data-docs-version="v1.46.4" title="v1.46.4 docs · EN"><span class="dot"></span>v1.46.4</a>
40
+ <a class="version-badge" href="/en/whats-new" data-docs-version="v1.48.0" title="v1.48.0 docs · EN"><span class="dot"></span>v1.48.0</a>
41
41
  <nav class="top-nav" aria-label="Documentation">
42
42
  <a href="/en/quickstart">Docs</a>
43
43
  <a href="/en/whats-new">Changelog</a>
@@ -36,7 +36,7 @@
36
36
  <span class="brand-mark"><img src="/assets/piagent-logo.svg" alt="" width="28" height="28" /></span>
37
37
  <span class="brand-name"><b>Piagent</b> <span>Platform</span></span>
38
38
  </a>
39
- <a class="version-badge" href="/whats-new" data-docs-version="v1.46.4" title="v1.46.4 docs · VI"><span class="dot"></span>v1.46.4</a>
39
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.0" title="v1.48.0 docs · VI"><span class="dot"></span>v1.48.0</a>
40
40
  <nav class="top-nav" aria-label="Tài liệu">
41
41
  <a href="/quickstart">Tài liệu</a>
42
42
  <a href="/whats-new">Changelog</a>
@@ -56,7 +56,7 @@
56
56
  <div class="hero-bg" aria-hidden="true"></div>
57
57
  <div class="hero-glow" aria-hidden="true"></div>
58
58
  <div class="home-wrap">
59
- <a class="hero-pill" href="/whats-new#v1-46-4"><b>v1.46.4</b><span>Một subagent thay vì bị chặn; bản cập nhật đọc được models.json có comment</span><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><use href="#icon-arrow-right"/></svg></a>
59
+ <a class="hero-pill" href="/whats-new#v1-48-0"><b>v1.48.0</b><span>Bypass dừng ở bước bàn giao: mọi chế độ hỏi trước khi việc rời khỏi máy</span><svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><use href="#icon-arrow-right"/></svg></a>
60
60
  <h1>Coding agent cho cả team, <span class="grad">kiểm tra từng bước.</span></h1>
61
61
  <p class="hero-sub">Guard chặn tool call nguy hiểm trước khi chạy. Harness của team tự chạy check và cho subagent review. Một dashboard cho Terminal và trình duyệt, với model của bạn hoặc của công ty.</p>
62
62
  <div class="hero-cta">
@@ -99,7 +99,7 @@
99
99
  <div><strong><span data-count="54">54</span><em>/54</em></strong><span>task giải quyết trong benchmark production</span><small>codex-cli cùng model: 48/54</small></div>
100
100
  <div><strong>−<span data-count="61">61</span><em>%</em></strong><span>fresh token trên cùng workload</span><small>khoảng tin cậy 95%: ít nhất −51,6%</small></div>
101
101
  <div><strong><span data-count="52">52</span><em>/52</em></strong><span>mẫu secret bị che trong output</span><small>0/30 văn bản thường bị che nhầm</small></div>
102
- <div><strong><span data-count="129">129</span></strong><span>bản phát hành từ 21/07/2026</span><small>4.400+ test tự động trên macOS và Linux</small></div>
102
+ <div><strong><span data-count="131">131</span></strong><span>bản phát hành từ 21/07/2026</span><small>4.400+ test tự động trên macOS và Linux</small></div>
103
103
  </div>
104
104
  </div>
105
105
  </section>
@@ -280,22 +280,22 @@ pi # Terminal</code></pre></div></div>
280
280
  <p>Mỗi bản ghi thay đổi gì và cần bản nào của Studio hay Agent Watch. <a href="/whats-new">Xem toàn bộ changelog</a>.</p>
281
281
  </div>
282
282
  <div class="updates">
283
- <a class="update" href="/whats-new#v1-46-4" data-reveal>
284
- <span class="update-meta"><span class="release-version">v1.46.4</span>29/10/2026</span>
285
- <h3>Một subagent thay vì bị chặn; bản cập nhật đọc được models.json có comment</h3>
286
- <p>Session công ty không còn lặp lại lệnh gọi subagent bị chặn, và bản cập nhật không còn dừng khi file danh sách model của Pi có comment.</p>
283
+ <a class="update" href="/whats-new#v1-48-0" data-reveal>
284
+ <span class="update-meta"><span class="release-version">v1.48.0</span>30/10/2026</span>
285
+ <h3>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>
286
+ <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>
287
287
  <span class="update-more">Xem chi tiết <svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><use href="#icon-arrow-right"/></svg></span>
288
288
  </a>
289
- <a class="update" href="/whats-new#v1-46-2" data-reveal>
290
- <span class="update-meta"><span class="release-version">v1.46.2</span>29/10/2026</span>
291
- <h3>Tin gửi sau câu trả lời hiện ngay; WebUI hiện chữ dần</h3>
292
- <p>Terminal nhận tin tiếp theo ngay khi câu trả lời kết thúc, và WebUI hiện câu trả lời trong lúc model đang viết thay vì đợi hết đoạn.</p>
289
+ <a class="update" href="/whats-new#v1-47-0" data-reveal>
290
+ <span class="update-meta"><span class="release-version">v1.47.0</span>29/10/2026</span>
291
+ <h3>Phiên công ty dùng MCP server của bạn và điều khiển simulator iOS, Android</h3>
292
+ <p>Jira, GitHub và mọi MCP server bạn cài cho Piagent giờ dùng được trong phiên công ty, và agent tự build, chạy, chụp màn hình và test app mobile trên simulator.</p>
293
293
  <span class="update-more">Xem chi tiết <svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><use href="#icon-arrow-right"/></svg></span>
294
294
  </a>
295
- <a class="update" href="/whats-new#v1-46-1" data-reveal>
296
- <span class="update-meta"><span class="release-version">v1.46.1</span>28/10/2026</span>
297
- <h3>Phản biện có sổ ghi, review một nhịp, subagent song song khi được yêu cầu</h3>
298
- <p>Harness công ty ghi một sổ phản biện cùng quyết định của main, review một nhịp mỗi lượt, và chỉ chạy 2–3 helper cùng role song song khi member yêu cầu.</p>
295
+ <a class="update" href="/whats-new#v1-46-4" data-reveal>
296
+ <span class="update-meta"><span class="release-version">v1.46.4</span>29/10/2026</span>
297
+ <h3>Một subagent thay vì bị chặn; bản cập nhật đọc được models.json có comment</h3>
298
+ <p>Session công ty không còn lặp lại lệnh gọi subagent bị chặn, và bản cập nhật không còn dừng khi file danh sách model của Pi có comment.</p>
299
299
  <span class="update-more">Xem chi tiết <svg class="icon" viewBox="0 0 24 24" aria-hidden="true"><use href="#icon-arrow-right"/></svg></span>
300
300
  </a>
301
301
  </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.46.4" title="v1.46.4 docs · VI"><span class="dot"></span>v1.46.4</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.0" title="v1.48.0 docs · VI"><span class="dot"></span>v1.48.0</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.46.4" title="v1.46.4 docs · VI"><span class="dot"></span>v1.46.4</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.0" title="v1.48.0 docs · VI"><span class="dot"></span>v1.48.0</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.46.4" title="v1.46.4 docs · VI"><span class="dot"></span>v1.46.4</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.0" title="v1.48.0 docs · VI"><span class="dot"></span>v1.48.0</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.46.4" title="v1.46.4 docs · VI"><span class="dot"></span>v1.46.4</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.0" title="v1.48.0 docs · VI"><span class="dot"></span>v1.48.0</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>
@@ -203,6 +203,7 @@
203
203
  <tr><td><span class="inline-code">web</span></td><td>Context7, Chrome DevTools, Playwright</td><td>FE/web workflow</td></tr>
204
204
  <tr><td><span class="inline-code">core</span></td><td>Context7, Chrome DevTools, GitHub</td><td>Baseline mặc định của team</td></tr>
205
205
  <tr><td><span class="inline-code">popular</span></td><td>core + Playwright + Figma</td><td>Baseline nhiều team dev dùng</td></tr>
206
+ <tr><td><span class="inline-code">atlassian</span></td><td>Atlassian Rovo (Jira, Confluence Cloud)</td><td>Issue Jira và trang Confluence, đăng nhập bằng tài khoản Atlassian của dev</td></tr>
206
207
  <tr><td><span class="inline-code">all</span></td><td>popular + Figma desktop</td><td>Đầy đủ</td></tr>
207
208
  </tbody>
208
209
  </table>
@@ -216,6 +217,13 @@
216
217
  </div>
217
218
  </section>
218
219
 
220
+ <section class="section">
221
+ <h2 id="phien-cong-ty">Trong phiên công ty</h2>
222
+ <p>Phiên công ty (<span class="inline-code">piagent studio</span>, terminal và WebUI công ty) dùng chính các MCP server dev đã cài cho Piagent cá nhân: cùng <span class="inline-code">pi-mcp-adapter</span> trong <span class="inline-code">~/.piagent/agent</span>, cùng config và cùng login. Dev tự thêm server; Studio không quản lý danh sách này.</p>
223
+ <p>Với Jira: <span class="inline-code">piagent-mcp --preset atlassian</span>, rồi đăng nhập một lần bằng <span class="inline-code">/mcp-auth atlassian</span>.</p>
224
+ <p>Hai lớp bảo vệ vẫn giữ: server do repo khai báo chỉ chạy sau khi có người trên máy duyệt, và kết quả từ server tới agent dưới dạng dữ liệu trong vùng rào, không bao giờ là lệnh.</p>
225
+ </section>
226
+
219
227
  <section class="section">
220
228
  <h2 id="token">Token efficiency</h2>
221
229
  <p><span class="inline-code">pi-mcp-adapter</span> đưa mọi server qua một proxy tool duy nhất tên <span class="inline-code">mcp</span>, thay vì nạp toàn bộ tool schema vào context lúc start. Mặc định <span class="inline-code">directTools: false</span>, cộng với <span class="inline-code">outputGuard</span> và <span class="inline-code">idleTimeout</span>.</p>
@@ -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.46.4" title="v1.46.4 docs · VI"><span class="dot"></span>v1.46.4</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.0" title="v1.48.0 docs · VI"><span class="dot"></span>v1.48.0</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.46.4" title="v1.46.4 docs · VI"><span class="dot"></span>v1.46.4</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.0" title="v1.48.0 docs · VI"><span class="dot"></span>v1.48.0</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.46.4" title="v1.46.4 docs · VI"><span class="dot"></span>v1.46.4</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.0" title="v1.48.0 docs · VI"><span class="dot"></span>v1.48.0</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.0",
4
+ "date": "2026-10-30",
5
+ "status": "stable",
6
+ "title": {
7
+ "en": "Bypass stops at the handoff: every mode asks before work leaves the machine",
8
+ "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"
9
+ },
10
+ "summary": {
11
+ "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.",
12
+ "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."
13
+ },
14
+ "requires": null,
15
+ "items": [
16
+ {
17
+ "kind": "security",
18
+ "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.",
19
+ "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."
20
+ },
21
+ {
22
+ "kind": "security",
23
+ "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.",
24
+ "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."
25
+ },
26
+ {
27
+ "kind": "security",
28
+ "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.",
29
+ "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."
30
+ },
31
+ {
32
+ "kind": "new",
33
+ "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.",
34
+ "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."
35
+ },
36
+ {
37
+ "kind": "new",
38
+ "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.",
39
+ "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."
40
+ },
41
+ {
42
+ "kind": "improved",
43
+ "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.",
44
+ "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."
45
+ },
46
+ {
47
+ "kind": "fixed",
48
+ "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.",
49
+ "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."
50
+ }
51
+ ]
52
+ },
53
+ {
54
+ "version": "1.47.0",
55
+ "date": "2026-10-29",
56
+ "status": "stable",
57
+ "title": {
58
+ "en": "Company sessions use your MCP servers and drive iOS and Android simulators",
59
+ "vi": "Phiên công ty dùng MCP server của bạn và điều khiển simulator iOS, Android"
60
+ },
61
+ "summary": {
62
+ "en": "Jira, GitHub and every MCP server you set up for Piagent now work in company sessions, and the agent builds, runs, screenshots and tests mobile apps on simulators itself.",
63
+ "vi": "Jira, GitHub và mọi MCP server bạn cài cho Piagent giờ dùng được trong phiên công ty, và agent tự build, chạy, chụp màn hình và test app mobile trên simulator."
64
+ },
65
+ "requires": null,
66
+ "items": [
67
+ {
68
+ "kind": "new",
69
+ "en": "Company sessions load the MCP servers set up for personal Piagent, with the same logins. Repository-defined servers still need approval; results reach the agent as data.",
70
+ "vi": "Phiên công ty nạp các MCP server đã cài cho Piagent cá nhân, dùng chung login. Server do repo khai báo vẫn cần duyệt; kết quả tới agent dưới dạng dữ liệu."
71
+ },
72
+ {
73
+ "kind": "new",
74
+ "en": "The atlassian preset adds Jira and Confluence Cloud: piagent-mcp --preset atlassian, then /mcp-auth atlassian with your own Atlassian login.",
75
+ "vi": "Preset atlassian thêm Jira và Confluence Cloud: piagent-mcp --preset atlassian, rồi /mcp-auth atlassian bằng tài khoản Atlassian của bạn."
76
+ },
77
+ {
78
+ "kind": "new",
79
+ "en": "run_on_simulator boots simulators, builds, installs and launches apps, runs XCUITest, takes screenshots and reads logs: xcrun simctl, xcodebuild, adb, emulator, gradlew, flutter, expo.",
80
+ "vi": "run_on_simulator boot simulator, build, cài và mở app, chạy XCUITest, chụp màn hình, đọc log: xcrun simctl, xcodebuild, adb, emulator, gradlew, flutter, expo."
81
+ },
82
+ {
83
+ "kind": "security",
84
+ "en": "run_on_simulator refuses other programs, ;, &, $( ) and files outside the project. Full access and Bypass run it, but still ask when a command reaches credentials.",
85
+ "vi": "run_on_simulator từ chối chương trình khác, ;, &, $( ) và file ngoài project. Full access và Bypass chạy luôn, nhưng vẫn hỏi khi lệnh đụng tới credentials."
86
+ }
87
+ ]
88
+ },
2
89
  {
3
90
  "version": "1.46.4",
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.46.4" title="v1.46.4 docs · VI"><span class="dot"></span>v1.46.4</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.0" title="v1.48.0 docs · VI"><span class="dot"></span>v1.48.0</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.46.4" title="v1.46.4 docs · VI"><span class="dot"></span>v1.46.4</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.0" title="v1.48.0 docs · VI"><span class="dot"></span>v1.48.0</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.46.4" title="v1.46.4 docs · VI"><span class="dot"></span>v1.46.4</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.0" title="v1.48.0 docs · VI"><span class="dot"></span>v1.48.0</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.46.4" title="v1.46.4 docs · VI"><span class="dot"></span>v1.46.4</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.0" title="v1.48.0 docs · VI"><span class="dot"></span>v1.48.0</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.46.4" title="v1.46.4 docs · VI"><span class="dot"></span>v1.46.4</a>
40
+ <a class="version-badge" href="/whats-new" data-docs-version="v1.48.0" title="v1.48.0 docs · VI"><span class="dot"></span>v1.48.0</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.46.4&#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.0&#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.46.4
150
+ npm install -g --ignore-scripts @piagent/platform@1.48.0
151
151
  piagent-install --stable --dry-run
152
152
  piagent-install --stable</code></pre>
153
153
  </div>