@piagent/platform 1.37.0 → 1.38.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 (292) hide show
  1. package/CHANGELOG.md +70 -0
  2. package/README.md +5 -3
  3. package/README.vi.md +2 -2
  4. package/catalog/capabilities.json +2 -2
  5. package/docs/command-reference-vietnamese.md +4 -3
  6. package/docs/distribution-standard.md +6 -6
  7. package/docs/en/maintainer-guide.md +8 -0
  8. package/docs/en/workspace-editor.md +222 -0
  9. package/docs/languages.json +13 -4
  10. package/docs/operator-manual-vietnamese.md +7 -7
  11. package/docs/publishing-for-teams.md +3 -0
  12. package/docs/release-install-policy.md +2 -2
  13. package/docs/research/ide-m0-spike.md +101 -0
  14. package/docs/team-onboarding.md +2 -2
  15. package/docs/vi/maintainer-guide.md +8 -0
  16. package/docs/vi/workspace-editor.md +217 -0
  17. package/docs-site/architecture.html +1 -1
  18. package/docs-site/benchmark.html +1 -1
  19. package/docs-site/commands.html +1 -1
  20. package/docs-site/content/en/index.html +4 -4
  21. package/docs-site/content/en/whats-new.html +23 -0
  22. package/docs-site/content/index.html +4 -4
  23. package/docs-site/content/whats-new.html +23 -0
  24. package/docs-site/context-engine.html +1 -1
  25. package/docs-site/ecosystem.html +1 -1
  26. package/docs-site/en/architecture.html +1 -1
  27. package/docs-site/en/benchmark.html +1 -1
  28. package/docs-site/en/commands.html +1 -1
  29. package/docs-site/en/context-engine.html +1 -1
  30. package/docs-site/en/ecosystem.html +1 -1
  31. package/docs-site/en/index.html +5 -5
  32. package/docs-site/en/mcp-approval.html +1 -1
  33. package/docs-site/en/mcp-auth.html +1 -1
  34. package/docs-site/en/mcp-servers.html +1 -1
  35. package/docs-site/en/mcp.html +1 -1
  36. package/docs-site/en/permissions.html +1 -1
  37. package/docs-site/en/profiles.html +1 -1
  38. package/docs-site/en/quickstart.html +1 -1
  39. package/docs-site/en/runtime.html +1 -1
  40. package/docs-site/en/scope.html +1 -1
  41. package/docs-site/en/security.html +1 -1
  42. package/docs-site/en/team.html +1 -1
  43. package/docs-site/en/whats-new.html +24 -1
  44. package/docs-site/en/windows.html +1 -1
  45. package/docs-site/en/workflows.html +1 -1
  46. package/docs-site/index.html +5 -5
  47. package/docs-site/mcp-approval.html +1 -1
  48. package/docs-site/mcp-auth.html +1 -1
  49. package/docs-site/mcp-servers.html +1 -1
  50. package/docs-site/mcp.html +1 -1
  51. package/docs-site/permissions.html +1 -1
  52. package/docs-site/profiles.html +1 -1
  53. package/docs-site/quickstart.html +1 -1
  54. package/docs-site/runtime.html +1 -1
  55. package/docs-site/scope.html +1 -1
  56. package/docs-site/security.html +1 -1
  57. package/docs-site/team.html +1 -1
  58. package/docs-site/whats-new.html +24 -1
  59. package/docs-site/windows.html +1 -1
  60. package/docs-site/workflows.html +1 -1
  61. package/evals/fixtures/piagent-webui/checkpoint-v1.invalid.json +21 -0
  62. package/evals/fixtures/piagent-webui/checkpoint-v1.valid.json +20 -0
  63. package/evals/fixtures/piagent-webui/terminal-v1.invalid.json +17 -0
  64. package/evals/fixtures/piagent-webui/terminal-v1.valid.json +16 -0
  65. package/evals/fixtures/piagent-webui/workspace-file-v1.invalid.json +24 -0
  66. package/evals/fixtures/piagent-webui/workspace-file-v1.valid.json +23 -0
  67. package/evals/fixtures/piagent-webui/workspace-paths-v1.invalid.json +24 -0
  68. package/evals/fixtures/piagent-webui/workspace-paths-v1.valid.json +24 -0
  69. package/evals/fixtures/piagent-webui/workspace-search-v1.invalid.json +26 -0
  70. package/evals/fixtures/piagent-webui/workspace-search-v1.valid.json +26 -0
  71. package/evals/fixtures/piagent-webui/workspace-tree-v1.invalid.json +28 -0
  72. package/evals/fixtures/piagent-webui/workspace-tree-v1.valid.json +27 -0
  73. package/evals/fixtures/piagent-webui/workspace-write-v1.invalid.json +19 -0
  74. package/evals/fixtures/piagent-webui/workspace-write-v1.valid.json +19 -0
  75. package/evals/long-task-soak-v1/README.md +17 -0
  76. package/evals/long-task-soak-v1/lib/session-loop.mjs +19 -3
  77. package/evals/long-task-soak-v1/scenarios/ide-editor-terminal.json +19 -0
  78. package/evals/long-task-soak-v1/surfaces/webui-gateway.mjs +17 -2
  79. package/evals/long-task-soak-v1/surfaces/workspace-actions.mjs +95 -0
  80. package/evals/private-holdout-v1/public-exposure.v2.json +2 -2
  81. package/package.json +7 -3
  82. package/packages/piagent-core/extensions/fallback-base-policy.ts +1 -1
  83. package/packages/piagent-core/extensions/guard-types.ts +3 -1
  84. package/packages/piagent-core/extensions/path-suggestions.ts +137 -0
  85. package/packages/piagent-core/extensions/piagent-guard.ts +85 -7
  86. package/packages/piagent-core/extensions/workspace-inspection.ts +145 -0
  87. package/packages/piagent-core/extensions/workspace-policy.d.ts +7 -0
  88. package/packages/piagent-core/extensions/workspace-policy.js +3 -0
  89. package/packages/piagent-core/extensions/workspace-search-index.mjs +8 -0
  90. package/packages/piagent-core/extensions/workspace-search.ts +74 -0
  91. package/packages/piagent-core/extensions/workspace-write.ts +116 -0
  92. package/packages/piagent-core/managed/background-process.mjs +9 -4
  93. package/packages/piagent-core/managed/boundary-package-proxy.mjs +21 -0
  94. package/packages/piagent-core/managed/boundary-queue.mjs +24 -0
  95. package/packages/piagent-core/managed/checkpoint-git.mjs +16 -0
  96. package/packages/piagent-core/managed/checkpoints.mjs +17 -64
  97. package/packages/piagent-core/managed/command-tools.mjs +6 -6
  98. package/packages/piagent-core/managed/continuation.mjs +3 -0
  99. package/packages/piagent-core/managed/dist/workspace/assets/adapters/backend-api/profile.json +88 -0
  100. package/packages/piagent-core/managed/dist/workspace/assets/adapters/be-readonly-fe/profile.json +130 -0
  101. package/packages/piagent-core/managed/dist/workspace/assets/adapters/data/profile.json +88 -0
  102. package/packages/piagent-core/managed/dist/workspace/assets/adapters/devops/profile.json +90 -0
  103. package/packages/piagent-core/managed/dist/workspace/assets/adapters/docs/profile.json +74 -0
  104. package/packages/piagent-core/managed/dist/workspace/assets/adapters/fullstack/profile.json +92 -0
  105. package/packages/piagent-core/managed/dist/workspace/assets/adapters/generic/profile.json +95 -0
  106. package/packages/piagent-core/managed/dist/workspace/assets/adapters/mobile/profile.json +86 -0
  107. package/packages/piagent-core/managed/dist/workspace/assets/adapters/node-typescript/profile.json +74 -0
  108. package/packages/piagent-core/managed/dist/workspace/assets/adapters/python/profile.json +75 -0
  109. package/packages/piagent-core/managed/dist/workspace/assets/adapters/web-frontend/profile.json +99 -0
  110. package/packages/piagent-core/managed/dist/workspace/assets/local-state-path-BrmghxEZ.js +284 -0
  111. package/packages/piagent-core/managed/dist/workspace/assets/packages/piagent-core/policies/base-policy.json +351 -0
  112. package/packages/piagent-core/managed/dist/workspace/manifest.json +65 -0
  113. package/packages/piagent-core/managed/dist/workspace/worker.mjs +7374 -0
  114. package/packages/piagent-core/managed/dist/workspace/workspace-search-index.mjs +1007 -0
  115. package/packages/piagent-core/managed/helper-run.mjs +11 -1
  116. package/packages/piagent-core/managed/helper-settlement.mjs +17 -6
  117. package/packages/piagent-core/managed/ip-policy.mjs +50 -0
  118. package/packages/piagent-core/managed/memory-lessons.mjs +4 -1
  119. package/packages/piagent-core/managed/memory.mjs +1 -1
  120. package/packages/piagent-core/managed/package-proxy.mjs +12 -14
  121. package/packages/piagent-core/managed/patch-snapshot.mjs +6 -8
  122. package/packages/piagent-core/managed/permission.mjs +29 -6
  123. package/packages/piagent-core/managed/repository-operation.mjs +2 -1
  124. package/packages/piagent-core/managed/review-snapshot-request.mjs +21 -0
  125. package/packages/piagent-core/managed/sandbox-diagnostic.mjs +2 -0
  126. package/packages/piagent-core/managed/session-mutation-observations.mjs +37 -0
  127. package/packages/piagent-core/managed/session.mjs +6 -7
  128. package/packages/piagent-core/managed/skill-feedback.mjs +9 -1
  129. package/packages/piagent-core/managed/source-revert-requests.mjs +21 -0
  130. package/packages/piagent-core/managed/studio-link.mjs +16 -0
  131. package/packages/piagent-core/managed/terminal-boundary.mjs +88 -0
  132. package/packages/piagent-core/managed/terminal-channel.mjs +66 -0
  133. package/packages/piagent-core/managed/terminal-runtime.mjs +64 -0
  134. package/packages/piagent-core/managed/terminal-seatbelt.mjs +48 -0
  135. package/packages/piagent-core/managed/terminal-worker.mjs +70 -0
  136. package/packages/piagent-core/managed/tool-boundary.mjs +45 -35
  137. package/packages/piagent-core/managed/tool-freshness.mjs +47 -0
  138. package/packages/piagent-core/managed/tool-worker.mjs +18 -3
  139. package/packages/piagent-core/managed/web-fetch.mjs +3 -14
  140. package/packages/piagent-core/managed/workspace-worker-pins.mjs +26 -0
  141. package/packages/piagent-core/package.json +1 -1
  142. package/packages/piagent-core/policies/base-policy.json +2 -1
  143. package/packages/piagent-core/runtime/checkpoints/checkpoint-authority.ts +43 -0
  144. package/packages/piagent-core/runtime/checkpoints/checkpoint-refs.mjs +51 -0
  145. package/packages/piagent-core/runtime/checkpoints/checkpoint-store.mjs +179 -0
  146. package/packages/piagent-core/runtime/checkpoints/checkpoint-worker.ts +28 -0
  147. package/packages/piagent-core/runtime/checkpoints/git-adapter.mjs +36 -0
  148. package/packages/piagent-core/runtime/checkpoints/persistent-history.mjs +96 -0
  149. package/packages/piagent-core/runtime/checkpoints/personal-git.ts +272 -0
  150. package/packages/piagent-core/runtime/checkpoints/personal-runtime.ts +158 -0
  151. package/packages/piagent-core/runtime/checkpoints/prune.mjs +29 -0
  152. package/packages/piagent-core/runtime/checkpoints/restore-preview.mjs +46 -0
  153. package/packages/piagent-core/runtime/checkpoints/turn-checkpoints.mjs +167 -0
  154. package/packages/piagent-core/runtime/hooks/session-hooks.ts +19 -16
  155. package/packages/piagent-core/runtime/hooks/session-start-hook.ts +3 -0
  156. package/packages/piagent-core/runtime/hooks/tool-call-hook.ts +2 -2
  157. package/packages/piagent-core/runtime/inspection/diff-projection.ts +2 -1
  158. package/packages/piagent-core/runtime/inspection/managed-source-revert.ts +90 -0
  159. package/packages/piagent-core/runtime/inspection/review-state-projection.ts +19 -8
  160. package/packages/piagent-core/runtime/inspection/session-diff-projection.ts +47 -0
  161. package/packages/piagent-core/runtime/inspection/session-hunk-provenance.ts +56 -0
  162. package/packages/piagent-core/runtime/inspection/session-mutation-observer.ts +125 -0
  163. package/packages/piagent-core/runtime/inspection/source-action-contract.ts +123 -0
  164. package/packages/piagent-core/runtime/inspection/source-change-projection.ts +3 -9
  165. package/packages/piagent-core/runtime/inspection/source-mutation-projection.ts +3 -41
  166. package/packages/piagent-core/runtime/inspection/source-mutation-store.ts +6 -36
  167. package/packages/piagent-core/runtime/inspection/source-revert-projection.ts +36 -30
  168. package/packages/piagent-core/runtime/inspection/text-diff.ts +5 -4
  169. package/packages/piagent-core/runtime/inspection/workspace-worker.ts +79 -0
  170. package/packages/piagent-core/runtime/policy/source-index-transaction.ts +3 -10
  171. package/packages/piagent-core/runtime/policy/source-mutation-guard-binding.ts +27 -2
  172. package/packages/piagent-core/runtime/policy/source-mutation-guard.ts +42 -12
  173. package/packages/piagent-core/runtime/policy/source-worktree-transaction.ts +10 -5
  174. package/packages/piagent-core/runtime/policy/workspace-write-authority.ts +51 -0
  175. package/packages/piagent-core/runtime/process-owner.mjs +20 -0
  176. package/packages/piagent-core/runtime/process-tree-watch.mjs +46 -0
  177. package/packages/piagent-core/runtime/quality/model-mutation-proof.ts +8 -5
  178. package/packages/piagent-core/runtime/registration/permission-commands.ts +10 -2
  179. package/packages/piagent-core/runtime/registration/task-evidence-tools.ts +1 -1
  180. package/packages/piagent-core/runtime/session/workspace-member-edits.d.mts +7 -0
  181. package/packages/piagent-core/runtime/session/workspace-member-edits.mjs +41 -0
  182. package/packages/piagent-core/security/workspace-file-reader.ts +2 -1
  183. package/packages/piagent-webui/dist/client/assets/Alert-DXF8-XqE.js +1 -0
  184. package/packages/piagent-webui/dist/client/assets/Button-DZJosXQi.js +1 -0
  185. package/packages/piagent-webui/dist/client/assets/DialogTitle-CL-fzCnT.js +3 -0
  186. package/packages/piagent-webui/dist/client/assets/MarkdownMessage-k4tq1y8s.js +29 -0
  187. package/packages/piagent-webui/dist/client/assets/TerminalPanel-DvOPgrGI.js +2 -0
  188. package/packages/piagent-webui/dist/client/assets/TerminalView-B_a16moC.js +9 -0
  189. package/packages/piagent-webui/dist/client/assets/TerminalView-kHJ-D0s7.css +1 -0
  190. package/packages/piagent-webui/dist/client/assets/Typography-DMZL1kLS.js +1 -0
  191. package/packages/piagent-webui/dist/client/assets/WorkspaceCodeEditor-BCiYM9NA.js +2 -0
  192. package/packages/piagent-webui/dist/client/assets/WorkspaceExplorer-DttpQtpf.js +5 -0
  193. package/packages/piagent-webui/dist/client/assets/WorkspaceQuickOpen-fgXwQ46B.js +1 -0
  194. package/packages/piagent-webui/dist/client/assets/bootstrap-CedkNtRG.js +1 -0
  195. package/packages/piagent-webui/dist/client/assets/dist-B1M7IjfA.js +10 -0
  196. package/packages/piagent-webui/dist/client/assets/dist-BUYtGaUP.js +1 -0
  197. package/packages/piagent-webui/dist/client/assets/dist-C82AtDDT.js +6 -0
  198. package/packages/piagent-webui/dist/client/assets/dist-D9b8j6pJ.js +1 -0
  199. package/packages/piagent-webui/dist/client/assets/dist-DLfpWwLs.js +23 -0
  200. package/packages/piagent-webui/dist/client/assets/dist-DcEu_WYV.js +1 -0
  201. package/packages/piagent-webui/dist/client/assets/dist-_JsfplOG.js +9 -0
  202. package/packages/piagent-webui/dist/client/assets/dist-idN8f9Fc.js +1 -0
  203. package/packages/piagent-webui/dist/client/assets/dist-nvgpa2Us.js +1 -0
  204. package/packages/piagent-webui/dist/client/assets/index-BW8-BUMx.js +102 -0
  205. package/packages/piagent-webui/dist/client/assets/index-Brs_HjIo.css +1 -0
  206. package/packages/piagent-webui/dist/client/assets/rolldown-runtime-hePW80VL.js +1 -0
  207. package/packages/piagent-webui/dist/client/assets/tab-close-HE0XxoJf.js +1 -0
  208. package/packages/piagent-webui/dist/client/assets/ui-preferences-DiddStu0.js +124 -0
  209. package/packages/piagent-webui/dist/client/assets/useTheme-_ESOj7MI.js +10 -0
  210. package/packages/piagent-webui/dist/client/assets/workspace-api-O7auv_td.js +1 -0
  211. package/packages/piagent-webui/dist/client/index.html +10 -2
  212. package/packages/piagent-webui/extension/same-session-bridge.ts +2 -3
  213. package/packages/piagent-webui/extension/source-revert-controller.ts +14 -208
  214. package/packages/piagent-webui/gateway/checkpoint-sessions.ts +99 -0
  215. package/packages/piagent-webui/gateway/checkpoint-store.ts +6 -0
  216. package/packages/piagent-webui/gateway/company-relay.ts +5 -0
  217. package/packages/piagent-webui/gateway/company-terminal-cache.ts +54 -0
  218. package/packages/piagent-webui/gateway/company-terminal-channel.ts +117 -0
  219. package/packages/piagent-webui/gateway/company-terminal-relay.ts +75 -0
  220. package/packages/piagent-webui/gateway/gateway-protocol-service.ts +12 -0
  221. package/packages/piagent-webui/gateway/gateway-service.ts +48 -4
  222. package/packages/piagent-webui/gateway/managed-gateway.mjs +30 -3
  223. package/packages/piagent-webui/gateway/managed-projection.ts +5 -3
  224. package/packages/piagent-webui/gateway/managed-source-revert-controller.ts +45 -0
  225. package/packages/piagent-webui/gateway/managed-source-revert-sessions.ts +74 -0
  226. package/packages/piagent-webui/gateway/managed-terminal-binding.ts +30 -0
  227. package/packages/piagent-webui/gateway/managed-terminal-processes.ts +74 -0
  228. package/packages/piagent-webui/gateway/managed-terminal-sessions.ts +9 -0
  229. package/packages/piagent-webui/gateway/path-suggestions.ts +1 -124
  230. package/packages/piagent-webui/gateway/personal-terminal-binding.ts +36 -0
  231. package/packages/piagent-webui/gateway/personal-terminal-diagnostic.mjs +16 -0
  232. package/packages/piagent-webui/gateway/personal-terminal-processes.ts +119 -0
  233. package/packages/piagent-webui/gateway/personal-terminal-sessions.ts +22 -0
  234. package/packages/piagent-webui/gateway/runtime-session-controls.ts +2 -1
  235. package/packages/piagent-webui/gateway/session-catalog.ts +3 -2
  236. package/packages/piagent-webui/gateway/session-command-controller.ts +4 -4
  237. package/packages/piagent-webui/gateway/session-inspection-registry.ts +29 -5
  238. package/packages/piagent-webui/gateway/session-runtime-supervisor.ts +8 -8
  239. package/packages/piagent-webui/gateway/signed-session-journal.ts +77 -0
  240. package/packages/piagent-webui/gateway/source-revert-sessions.ts +74 -0
  241. package/packages/piagent-webui/gateway/source-revert-store.ts +47 -0
  242. package/packages/piagent-webui/gateway/terminal-command-ledger.ts +33 -0
  243. package/packages/piagent-webui/gateway/terminal-mentions.ts +29 -0
  244. package/packages/piagent-webui/gateway/terminal-output-buffer.ts +58 -0
  245. package/packages/piagent-webui/gateway/terminal-router.ts +12 -0
  246. package/packages/piagent-webui/gateway/terminal-sessions.ts +247 -0
  247. package/packages/piagent-webui/gateway/workspace-write-sessions.ts +69 -0
  248. package/packages/piagent-webui/gateway/workspace-write-store.ts +6 -0
  249. package/packages/piagent-webui/package.json +14 -2
  250. package/packages/piagent-webui/server/checkpoint-command.ts +30 -0
  251. package/packages/piagent-webui/server/checkpoint-controller.ts +87 -0
  252. package/packages/piagent-webui/server/checkpoint-routes.ts +38 -0
  253. package/packages/piagent-webui/server/control-command-digest.ts +5 -0
  254. package/packages/piagent-webui/server/core-inspection-provider.ts +16 -22
  255. package/packages/piagent-webui/server/gateway-websocket.ts +36 -8
  256. package/packages/piagent-webui/server/loopback-server.ts +9 -0
  257. package/packages/piagent-webui/server/read-model-provider.ts +3 -0
  258. package/packages/piagent-webui/server/read-only-router.ts +3 -0
  259. package/packages/piagent-webui/server/session-auth.ts +4 -1
  260. package/packages/piagent-webui/server/session-source-revert-routes.ts +54 -0
  261. package/packages/piagent-webui/server/source-projection-binding.ts +18 -0
  262. package/packages/piagent-webui/server/source-revert-controller.ts +225 -0
  263. package/packages/piagent-webui/server/terminal-command.ts +35 -0
  264. package/packages/piagent-webui/server/terminal-websocket-stream.ts +56 -0
  265. package/packages/piagent-webui/server/transcript-projection.ts +2 -1
  266. package/packages/piagent-webui/server/workspace-read-routes.ts +32 -0
  267. package/packages/piagent-webui/server/workspace-reader.ts +23 -0
  268. package/packages/piagent-webui/server/workspace-write-controller.ts +118 -0
  269. package/packages/piagent-webui/server/workspace-write-routes.ts +38 -0
  270. package/packages/piagent-webui/shared/terminal-message.ts +23 -0
  271. package/schemas/piagent-webui/catalog-v1.json +63 -0
  272. package/schemas/piagent-webui/checkpoint-v1.schema.json +466 -0
  273. package/schemas/piagent-webui/control-command-v1.schema.json +68 -3
  274. package/schemas/piagent-webui/diff-v1.schema.json +4 -0
  275. package/schemas/piagent-webui/gateway-protocol-v1.schema.json +123 -3
  276. package/schemas/piagent-webui/session-catalog-v1.schema.json +1 -1
  277. package/schemas/piagent-webui/session-command-v1.schema.json +1 -1
  278. package/schemas/piagent-webui/snapshot-v1.schema.json +2 -1
  279. package/schemas/piagent-webui/source-revert-v1.schema.json +22 -3
  280. package/schemas/piagent-webui/terminal-v1.schema.json +495 -0
  281. package/schemas/piagent-webui/workspace-file-v1.schema.json +79 -0
  282. package/schemas/piagent-webui/workspace-paths-v1.schema.json +71 -0
  283. package/schemas/piagent-webui/workspace-search-v1.schema.json +80 -0
  284. package/schemas/piagent-webui/workspace-tree-v1.schema.json +87 -0
  285. package/schemas/piagent-webui/workspace-write-v1.schema.json +276 -0
  286. package/schemas/project-profile.schema.json +8 -3
  287. package/scripts/company-terminal.mjs +16 -11
  288. package/scripts/pi-auto.sh +5 -1
  289. package/scripts/team-doctor.sh +8 -0
  290. package/packages/piagent-webui/dist/client/assets/MarkdownMessage-CfgyQQbW.js +0 -29
  291. package/packages/piagent-webui/dist/client/assets/index-HyzWKvDu.js +0 -234
  292. package/packages/piagent-webui/dist/client/assets/index-_0nGP2n3.css +0 -1
@@ -0,0 +1,101 @@
1
+ # IDE M0: editor, terminal and sandbox probes
2
+
3
+ Date: 2026-10-22. Baseline: `f598df18`, Node 22.23.3, macOS arm64.
4
+ No production dependency, CSP or sandbox rule was changed by these probes.
5
+
6
+ ## Browser
7
+
8
+ A real Chromium page served the exact CSP from `server/http-security.ts`.
9
+ CodeMirror state 6.7.6/view 6.43.15 rendered a read-only document with
10
+ `EditorView.cspNonce`. xterm 5.5.0 rendered output with its packaged CSS served
11
+ from the same origin. Its `documentOverride` used a document proxy that adds
12
+ our nonce only to newly created style elements, binding other document methods
13
+ to their original receiver. No global DOM monkey patch is needed.
14
+
15
+ Combined minified probe: 491,192 bytes (137,045 gzip); this includes both
16
+ libraries, before splitting the production editor/terminal/language chunks.
17
+ Chromium reported zero CSP violations and rendered both expected text strings.
18
+
19
+ xterm 6.0.0 is unsuitable here: its shared scrollbar stylesheet uses the global
20
+ document and bypasses `documentOverride`. Pin 5.5.0 with addon-fit 0.10.0;
21
+ revalidate CSP before upgrading. All these packages use MIT licenses.
22
+
23
+ ## Personal PTY
24
+
25
+ Upstream node-pty 1.1.0 contains macOS/Windows prebuilds but no Linux prebuild.
26
+ Use `@lydell/node-pty` 1.2.0-beta.15 (MIT), an API-compatible distribution with
27
+ platform packages for darwin arm64/x64 and linux arm64/x64. The beta pin requires
28
+ explicit platform smoke checks before upgrades. Keep it optional so a native
29
+ loading failure disables terminals without breaking the dashboard.
30
+
31
+ An isolated npm global prefix installation succeeded on darwin-arm64. A shell
32
+ reported `37 101` after resize, accepted Ctrl+C during sleep, then printed
33
+ `INTERRUPT_OK` and exited zero. In Docker `node:22` linux/amd64, global install
34
+ also succeeded and the PTY reported `37 101` and `LINUX_PTY_OK` without compiling.
35
+
36
+ ## Company sandbox
37
+
38
+ macOS: a Node process launched *inside* the unchanged `managedSeatbelt` profile
39
+ failed to allocate the PTY: `posix_openpt failed: Operation not permitted`.
40
+ The fallback `/usr/bin/script` was also launched inside that profile with a real
41
+ controlling terminal and failed: `openpty: Operation not permitted`.
42
+ A pipe-only script probe is insufficient (it instead fails at `tcgetattr`);
43
+ the controlling-terminal probe confirms the sandbox denial.
44
+
45
+ Do not allocate a company PTY on the host as a workaround. The user's approved
46
+ fallback is to omit M4 when neither approach works within the existing sandbox.
47
+ macOS company terminals must therefore remain unavailable with a clear reason.
48
+
49
+ Update (phase 1 follow-up): the company Gateway now creates the PTY on the
50
+ host and starts only the shell under the unchanged offline Seatbelt profile plus
51
+ `file-ioctl` on `/dev/ttys*` and read/write/ioctl on `/dev/tty`. Opening any other
52
+ terminal stays denied; `tests/managed-terminal-boundary.test.mjs` checks this.
53
+ Linux arm64: Docker Node 22 with the unchanged `bubblewrapArgs` created the
54
+ PTY inside the sandbox, resized to 37x101, interrupted sleep and ran the next
55
+ command successfully. M4 can support Linux while reporting macOS unavailable.
56
+ Linux x64 under QEMU could install/load the prebuilt PTY but bubblewrap failed
57
+ with `Creating new namespace failed: Invalid argument`; native x64 sandbox
58
+ qualification remains unverified, rather than inferred from the arm64 result.
59
+
60
+ ## Reproduction and evidence
61
+
62
+ Local evidence is outside the repository at
63
+ `reports/piagent-ide-evidence/`: `m0-csp.log`, `m0-sandbox.log`,
64
+ `m0-linux-global.log`, `m0-linux-sandbox.log`, plus probe sources under `m0/`.
65
+ The Linux container is an isolated Colima VM; its engine privileges allow testing
66
+ bubblewrap namespaces, not relaxing the application sandbox's mount/network rules.
67
+
68
+ Baseline `npm test`: 6,499 tests, 6,150 pass, 34 fail, 315 skipped.
69
+ The complete original failure inventory is in the required progress report;
70
+ these are baseline observations, not evidence of milestone completion.
71
+
72
+ ## Kết quả tiếng Việt
73
+
74
+ CodeMirror chạy với nonce; xterm 5.5.0 chạy với `documentOverride` gắn nonce
75
+ cho thẻ style mới. Chromium không báo vi phạm CSP. Không dùng xterm 6.0.0 vì
76
+ stylesheet scrollbar đi vòng qua API đó. Chunk thử nghiệm chung là 491.192 byte,
77
+ gzip 137.045 byte; sản phẩm cần tải lười từng phần.
78
+
79
+ Chọn thử nghiệm `@lydell/node-pty` 1.2.0-beta.15 (MIT, prebuild đa nền tảng),
80
+ không chọn node-pty 1.1.0 vì bản đó thiếu prebuild Linux. Cài global trong prefix
81
+ riêng trên macOS arm64 và Docker Node 22 linux/amd64 thành công. PTY personal
82
+ resize được; trên macOS đã xác nhận Ctrl+C rồi chạy lệnh tiếp và thoát bình thường.
83
+
84
+ Trong Seatbelt hiện tại, cả node-pty lẫn script(1) với terminal thật đều bị từ
85
+ chối tạo PTY. Không đổi sandbox và không tạo PTY company trên host để lách.
86
+ Theo ngoại lệ người dùng đã cho phép, terminal company macOS không khả dụng;
87
+ các milestone editor, personal terminal và checkpoint vẫn tiếp tục.
88
+
89
+ Cập nhật (sau phase 1): Gateway công ty tạo PTY trên host và chỉ chạy shell trong
90
+ profile Seatbelt offline giữ nguyên, thêm `file-ioctl` trên `/dev/ttys*` và đọc/ghi/ioctl
91
+ `/dev/tty`. Mở terminal khác vẫn bị chặn; `tests/managed-terminal-boundary.test.mjs` kiểm việc này.
92
+
93
+ Linux arm64 đã qua probe PTY trong bubblewrap (resize, Ctrl+C, chạy lệnh tiếp).
94
+ M4 có thể hỗ trợ Linux; macOS vẫn không khả dụng. Namespace trên x64 giả lập
95
+ bị lỗi môi trường, cần kiểm lại trên Linux x64 native.
96
+
97
+ The final Linux arm64 probe also proved project writes succeed, writes to
98
+ `/outside` fail, curl to the internet fails, and a mounted credential file reads
99
+ empty. The shell and bubblewrap exited zero after Ctrl+C and the next command.
100
+ Linux arm64 cũng xác nhận ghi trong project được, ghi ngoài bị chặn, curl ra
101
+ internet thất bại và credential đọc ra rỗng.
@@ -10,7 +10,7 @@ Một thành viên mới không cần biết local path của maintainer. Luồn
10
10
  ```bash
11
11
  node --version # >= 22.19.0
12
12
  npm install -g --ignore-scripts @earendil-works/pi-coding-agent@1.3.0
13
- npm install -g --ignore-scripts @piagent/platform@1.37.0
13
+ npm install -g --ignore-scripts @piagent/platform@1.38.1
14
14
  piagent-install --stable
15
15
  cd /path/to/project
16
16
  pi
@@ -45,7 +45,7 @@ Mặc định team dùng stable helper:
45
45
  ```bash
46
46
  node --version # >= 22.19.0
47
47
  npm install -g --ignore-scripts @earendil-works/pi-coding-agent@1.3.0
48
- npm install -g --ignore-scripts @piagent/platform@1.37.0
48
+ npm install -g --ignore-scripts @piagent/platform@1.38.1
49
49
  piagent-install --stable --dry-run
50
50
  piagent-install --stable
51
51
  ```
@@ -2,6 +2,14 @@
2
2
 
3
3
  [English](../en/maintainer-guide.md)
4
4
 
5
+ ## Chạy toàn bộ test
6
+
7
+ `npm test` chạy tối đa hai file test đồng thời, giống `npm run verify`.
8
+ Nhiều file integration dùng SDK, worker sandbox và trình duyệt thật; giới hạn số
9
+ file cạnh tranh tránh làm cạn thời gian chờ hiện có. Giới hạn này không đổi danh
10
+ sách test hoặc assertion. Đặt tùy chọn Node runner trước đường dẫn file; nối
11
+ `--test-concurrency=2` sau `npm test --` không cấu hình được script này.
12
+
5
13
  ## Rule đặt code
6
14
 
7
15
  Trước khi thêm code, cần trả lời một câu hỏi về ownership:
@@ -0,0 +1,217 @@
1
+ # Đọc và sửa tệp dự án trong Session Hub
2
+
3
+ [English](../en/workspace-editor.md)
4
+
5
+ Mở một cuộc hội thoại trong `piagent dashboard`, rồi chọn **Tệp**. Trên màn hình
6
+ rộng, thanh bên hiện cây dự án và editor nằm cạnh chat. Trên màn hình nhỏ, Tệp mở
7
+ thành ngăn kéo. Chọn **Phiên** để quay lại danh sách hội thoại.
8
+
9
+ Chọn tệp để mở một tab editor. Cmd/Ctrl+P tìm theo tên tệp. **Tìm kiếm** tìm văn
10
+ bản nguyên dạng và mở kết quả tại dòng tương ứng. Liên kết tệp trên thẻ công cụ,
11
+ thay đổi mã nguồn và đề cập `@path:line` cũng mở editor. Nút **Open in VS Code**
12
+ vẫn có trong phần thay đổi mã nguồn.
13
+
14
+ Cây tôn trọng quy tắc Git ignore và tải từng thư mục. Danh sách và tìm kiếm có
15
+ giới hạn, kèm thông báo khi kết quả bị cắt. Khi không có ripgrep, tìm kiếm dùng
16
+ index Context Engine đã có; không tự tạo index và có thể chỉ tìm được tệp đã lập
17
+ chỉ mục. Giao diện báo khi không thể tìm kiếm.
18
+
19
+ Tệp được bảo vệ hiện khóa và không mở được. Tệp nhị phân hoặc quá lớn hiện thông
20
+ báo thay cho nội dung. Đường dẫn không an toàn và symlink bị từ chối. Yêu cầu
21
+ company đi qua Gateway của công ty và đọc tệp trong sandbox hiện có của phiên.
22
+ Ghi tệp cũng đi qua boundary này. Trình duyệt không nhận Studio grant.
23
+
24
+ Bộ phân tích JavaScript, TypeScript, JSON, Markdown, Python, HTML và CSS chỉ tải
25
+ khi cần; tệp khác vẫn đọc được dưới dạng văn bản thuần.
26
+
27
+ Khi có quyền ghi, sửa văn bản rồi nhấn **Cmd/Ctrl+S** hoặc **Lưu**. Tab chưa lưu
28
+ có dấu chấm. Đóng tab có thay đổi sẽ hỏi trước khi bỏ; ẩn Tệp hoặc chuyển hội
29
+ thoại vẫn giữ bản sửa trong bộ nhớ trang. Rời trang sẽ cảnh báo bản sửa chưa lưu.
30
+ Bản sửa không được khôi phục sau khi khởi động lại trình duyệt. **Tệp mới** nhận
31
+ đường dẫn tương đối; thư mục chưa có sẽ được tạo khi lưu. Tệp mới có quyền thông
32
+ thường theo umask. **Đổi tên** và **Xóa** áp dụng cho tệp đang mở không có thay đổi
33
+ chưa lưu, và chỉ khi tệp vẫn đúng phiên bản đang hiện: tệp đã đổi trên đĩa, hoặc
34
+ tên mới đã tồn tại, sẽ bị từ chối. Xóa hỏi trước; Git khôi phục được tệp đã commit.
35
+
36
+ Lưu kiểm tra permission profile hiện tại, đường dẫn được bảo vệ/chỉ đọc và digest
37
+ của tệp. Nếu tệp đã đổi, chọn **Tải lại**, **Xem khác biệt** hoặc **Ghi đè**.
38
+ Ghi đè cần xác nhận và vẫn kiểm tra phiên bản đang hiện trong hộp thoại. Khi mất
39
+ kết nối, bản sửa được giữ; lưu lại dùng cùng command để không ghi hai lần. Nếu
40
+ kết quả chưa xác định, giao diện yêu cầu tải lại và kiểm tra trước.
41
+
42
+ Giao diện báo khi agent đang chạy. Member lưu thành công sẽ làm mới Source Changes
43
+ và đưa ghi chú tên các tệp đã sửa vào lượt agent tiếp theo. Agent đã đọc phiên bản
44
+ cũ phải đọc lại trước khi edit/write. Company dùng chung hàng đợi đọc/ghi với agent
45
+ trong sandbox hiện có. Quyền chỉ đọc tắt lưu; máy chủ kiểm tra lại quyền mỗi lần lưu.
46
+
47
+ ## Review thay đổi của agent
48
+
49
+ Tệp đang mở hiện hunk đã xác minh của agent bằng dòng thêm, khối dòng đã xóa và dấu
50
+ ở lề. Mỗi tab đang mở hiện số hunk còn lại. **Alt+ArrowDown/Up** chuyển giữa các hunk.
51
+ **Giữ** bỏ hunk khỏi danh sách review mà không sửa tệp; lựa chọn còn sau khi đóng
52
+ ngăn kéo và tải lại trang trên trình duyệt này (chỉ lưu đường dẫn, digest và mã
53
+ hunk, không lưu code), nội dung mới cần review lại.
54
+
55
+ **Hoàn tác** mở preview và cần xác nhận. Thao tác dùng luồng source revert có guard
56
+ hiện có, giữ nguyên Git index. Nếu mất phản hồi, **Kiểm tra lại** hỏi kết quả cùng
57
+ command. Không thể hoàn tác hunk trộn thay đổi member/agent, nội dung cũ, đường dẫn
58
+ được bảo vệ hoặc thay đổi chưa hỗ trợ. Tệp untracked mới do agent tạo có thể review
59
+ và Giữ; chưa hỗ trợ xóa tệp qua hoàn tác. Tệp có sẵn của member không bị coi toàn bộ
60
+ là do agent tạo.
61
+
62
+ Hoạt động của agent làm mới tệp đang mở chưa có bản sửa. Bản sửa chưa lưu được giữ
63
+ và hiện lựa chọn xung đột như khi lưu. Dấu hunk ẩn khi đang sửa bản nháp.
64
+ **Comment dòng hiện tại** hoặc **Cmd/Ctrl+Shift+M** mở LineReview. Dòng đã xóa có nút
65
+ comment riêng, giữ đúng số dòng cũ và nội dung. **Đưa vào ô chat** nối comment vào
66
+ bản nháp; gửi tin nhắn để yêu cầu agent xử lý.
67
+
68
+ Việc xác định hunk cần write/edit/patch được quan sát chính xác trong phiên và diff
69
+ hiện tại đầy đủ, chưa che nội dung. CRLF và thiếu newline cuối được so sánh chính
70
+ xác. Sửa qua shell chưa được quan sát hoặc quan sát mất khi runtime khởi động lại
71
+ không nhận dấu hunk agent. Company review và hoàn tác trong sandbox của phiên.
72
+
73
+ ## Terminal personal
74
+
75
+ Chọn **Terminal** cạnh Tệp, rồi **+** để mở shell của member trong project của
76
+ cuộc trò chuyện. Mỗi cuộc trò chuyện có tối đa bốn tab. Panel nằm dưới editor trên
77
+ màn rộng và mở drawer bên dưới trên màn hẹp. Kéo thanh phân cách để đổi chiều cao,
78
+ hoặc focus vào thanh và dùng phím mũi tên. Terminal theo theme hiện tại;
79
+ Ctrl+C ngắt lệnh đang chạy ở foreground.
80
+
81
+ Lệnh tự gõ chạy với quyền host của member, không hỏi duyệt như lệnh agent.
82
+ Terminal personal không phải sandbox. Đóng terminal, release hoặc restart phiên,
83
+ hay tắt Gateway sẽ dừng process group và mọi tiến trình khởi chạy từ terminal.
84
+ Cây tiến trình của shell được theo dõi khi shell chạy, nên job chạy nền (`cmd &`
85
+ rồi `exit`) cũng dừng theo terminal; tiến trình cần sống lâu hơn terminal nên được
86
+ khởi chạy ở nơi khác.
87
+
88
+ Lệnh in nhanh hơn trình duyệt vẽ kịp (`yes`, `cat` một file lớn) được giãn nhịp:
89
+ terminal tạm dừng chương trình đang ghi trong lúc trang đuổi kịp, và phần output
90
+ trang không theo kịp được thay bằng dấu `[… output skipped …]`. Cuộc trò chuyện
91
+ dùng chung kết nối không bị gián đoạn.
92
+
93
+ Ẩn panel hoặc reload trang giữ shell khi runtime Gateway vẫn còn sống. Mở lại
94
+ phát lại tối đa 64 KB output đã giữ của mỗi tab. Bản phát lại và phần đính cho agent
95
+ che secret nhận diện được; terminal trực tiếp hiển thị output gốc cho member.
96
+ Restart Gateway xóa terminal và buffer. Nếu mất biên nhận lệnh, input tạm dừng:
97
+ **Kiểm tra lại lệnh** hỏi về đúng lệnh cũ. Kiểm tra terminal trước khi chọn
98
+ **Đã kiểm tra, tiếp tục**. Lệnh chờ còn trong bộ nhớ trang khi đổi panel, không còn
99
+ sau khi reload trang.
100
+
101
+ Gõ `@terminal` (terminal 1) hoặc `@terminal:2` trong composer, rồi bấm Gửi để đính
102
+ output hiện tại đã che secret. Mention lặp chỉ đính một lần, tối đa bốn tab với
103
+ tổng 64 KB output. Mention tới terminal chưa mở thì không đính gì và tin nhắn vẫn
104
+ được gửi như đã viết. Output được trích
105
+ như dữ liệu không đáng tin; chỉ gõ mention chưa gửi gì. Số tab tăng trong runtime
106
+ và không dùng lại sau khi đóng.
107
+
108
+ Module PTY native là tùy chọn và có thể không khả dụng. Panel báo lý do và
109
+ `piagent-doctor --json` có `productReadiness.personalTerminal`; các phần dashboard
110
+ khác vẫn dùng được. Doctor kiểm tra việc nạp module, không khẳng định đã thử mở
111
+ shell; shell không khởi động được sẽ được báo khi mở terminal. Thao tác bị từ chối
112
+ trước khi chạy gì (không có thư mục project, terminal đã thoát) được báo đúng như
113
+ vậy thay vì "lệnh có thể đã chạy". Chưa hỗ trợ Windows native; dùng WSL.
114
+
115
+
116
+ ## Terminal company
117
+
118
+ Cuộc trò chuyện company dùng cùng panel terminal qua Gateway công ty, kể cả khi
119
+ mở từ dashboard personal. Shell chạy trong tool boundary của cuộc trò chuyện:
120
+ bubblewrap trên Linux và WSL, Seatbelt trên macOS. Shell không có internet, package
121
+ proxy hoặc Docker. Ghi được vào project, thư mục Git của nó, cache package của
122
+ project và thư mục tạm riêng, giống lệnh offline của agent; profile read-only giữ
123
+ project chỉ đọc. File credential bị che, đường dẫn được bảo vệ giữ giới hạn của boundary.
124
+ Shell là Bash không nạp file khởi động hoặc cấu hình shell của member.
125
+
126
+ Mỗi cuộc trò chuyện có tối đa bốn terminal. Đóng terminal, release cuộc trò chuyện
127
+ hoặc tắt Gateway công ty sẽ dừng sandbox và mọi tiến trình con, kể cả tiến trình
128
+ đã tách riêng. Ẩn panel và reload trình duyệt giữ terminal khi runtime company
129
+ còn sống. Mất kết nối relay tạm tắt input và tự nối lại để đọc trạng thái, phát lại
130
+ output; không tự gửi lại lệnh. Mention terminal được đính bên trong Gateway
131
+ công ty; Studio grant cũng chỉ ở đó.
132
+
133
+ Trên macOS, Seatbelt từ chối tạo PTY, nên Gateway công ty tạo PTY và chỉ khởi
134
+ chạy shell trong profile Seatbelt offline của agent. Profile đó thêm hai quy tắc:
135
+ lệnh điều khiển terminal trên thiết bị terminal, và `/dev/tty`. Shell chỉ chạm được
136
+ terminal được giao cho nó; mở terminal khác vẫn bị chặn. Không bao giờ có shell
137
+ company chạy trên host. Chưa hỗ trợ Windows native; dùng WSL.
138
+
139
+ `piagent-doctor --json` có `productReadiness.companyTerminal`. Kết quả supported
140
+ chỉ kiểm file runtime và điều kiện tiên quyết (`ptySpawnVerified: false`), không
141
+ khẳng định máy này đã mở được PTY trong sandbox. Luồng đầy đủ Gateway, relay và
142
+ trình duyệt đã được kiểm chứng trên Linux arm64 trong Docker và trên macOS arm64.
143
+ Chưa kiểm chứng riêng Linux x64 native và WSL.
144
+
145
+ ## Khôi phục một lượt agent
146
+
147
+ Trong project Git, lượt đã kết thúc và có đổi file sẽ có nút **Khôi phục về trước
148
+ lượt này** trong Timeline. Mở để xem trước các file bị ảnh hưởng và số lượt, rồi
149
+ chọn **Xác nhận khôi phục**. Hệ thống hoàn tác từ lượt mới nhất về lượt đã chọn,
150
+ xóa file do các lượt đó tạo và trả nội dung file đã sửa về trước đó. HEAD, commit
151
+ tạo trong lượt và vùng stage của member được giữ nguyên.
152
+
153
+ Nếu member đã sửa lại file bị ảnh hưởng sau lượt đó, khôi phục dừng ở lượt đó và
154
+ nêu tên file xung đột. Các lượt mới hơn an toàn có thể đã được khôi phục; kết quả
155
+ cho biết số lượt. Agent đang chạy, preview đã thay đổi hoặc quyền ghi bị thu hồi
156
+ thì cần xem trước lại. Đường dẫn protected và read-only vẫn giữ giới hạn.
157
+ Project không dùng Git thì không có checkpoint.
158
+
159
+ File member lưu từ editor sau khi một lượt bắt đầu được coi là của member: khôi
160
+ phục lượt đó sẽ báo file này là xung đột thay vì đưa nó về bản cũ. File có trên đĩa
161
+ nhưng nằm ngoài snapshot hiện tại (bị ignore sau lượt đó, hoặc file chưa track quá
162
+ lớn để chụp) cũng bị từ chối như vậy. Nếu một lần khôi phục dừng giữa chừng, bản
163
+ xem trước mới chỉ liệt kê phần còn lại: file đã trở về như trước được tính là xong,
164
+ không phải xung đột. Từ chối trước khi đổi file nào được báo là từ chối, không phải
165
+ không chắc. Thư mục do lượt đó tạo và bị khôi phục làm rỗng sẽ được xóa. Mọi lệnh
166
+ shell không chứng minh được là chỉ đọc đều chụp checkpoint của lượt trước khi chạy. Sửa đổi gõ
167
+ trong terminal không được theo dõi theo cách này; kiểm tra thay đổi sau lượt vẫn
168
+ từ chối file bị sửa sau khi lượt kết thúc.
169
+
170
+ Pi TUI personal cũng có `/undo` để hoàn tác lượt gần nhất mà không gọi model.
171
+ Lịch sử personal giữ tối đa 64 checkpoint cho mỗi project và session trong file
172
+ chỉ chủ sở hữu truy cập được ở `.pi/piagent-state/checkpoints`; cuộc trò chuyện
173
+ không dùng trong 30 ngày sẽ mất checkpoint. Snapshot nằm trong một repository
174
+ riêng bên trong thư mục Git (`.git/piagent/checkpoints.git`), dùng chung object
175
+ của project nhưng có ref riêng: `git push --mirror` không bao giờ đẩy chúng lên,
176
+ và garbage collection của project không xóa chúng. Snapshot gồm file đã track với
177
+ mọi kích thước, bỏ qua file chưa track lớn hơn 100 MB và không gồm submodule;
178
+ hoàn tác không bao giờ đụng vào phần snapshot bỏ qua. Khi không chụp được
179
+ snapshot, agent vẫn sửa file bình thường; lượt đó không có checkpoint và các
180
+ checkpoint trước bị bỏ, vì khôi phục vượt qua lượt đó sẽ tạo ra trạng thái chưa
181
+ từng được ghi lại. Chỉ khi một runtime khác đang giữ lịch sử của cùng session
182
+ thì lần sửa mới phải chờ. Nếu runtime personal dừng trước snapshot cuối
183
+ lượt, phục hồi giữ nguyên các file đã sửa và chỉ bỏ metadata checkpoint chưa
184
+ hoàn tất. Checkpoint của các lượt đã kết thúc vẫn kiểm tra xung đột với thay đổi
185
+ của member. Thao tác checkpoint company chạy trong sandbox
186
+ hiện có; lịch sử company tồn tại trong vòng đời runtime.
187
+
188
+ Nếu trình duyệt mất phản hồi khôi phục, **Kiểm tra lại kết quả** gửi đúng khóa yêu
189
+ cầu cũ. Yêu cầu đang chờ còn sau khi reload cùng tab; reload không tự gửi yêu cầu.
190
+ Giữ tab đó đến khi biết kết quả. Nếu trình duyệt không lưu được yêu cầu đang chờ,
191
+ hệ thống từ chối gửi lần khôi phục mới. Kết quả chưa xác nhận có thể đã đổi file:
192
+ kiểm tra file trước khi tiếp tục. Kiểm tra cùng yêu cầu không tự chạy lại thao tác
193
+ file có kết quả chưa rõ. Nếu chỉ một số file đã đổi hoặc lưu lịch sử thất bại,
194
+ checkpoint còn giữ có thể báo xung đột; kiểm tra và xử lý file trước khi thử
195
+ khôi phục với preview mới.
196
+
197
+
198
+ ## Thử trọn luồng làm việc
199
+
200
+ Dùng project Git thử nghiệm đã có commit đầu tiên và lệnh test đang chạy thành công.
201
+ Với personal, mở project trong `piagent dashboard`. Với company, chọn cuộc hội thoại
202
+ company của project.
203
+
204
+ 1. Mở file tracked trong Tệp, sửa nhỏ và lưu bằng Cmd/Ctrl+S.
205
+ 2. Mở Terminal, chạy lệnh test của project và kiểm tra mã thoát.
206
+ 3. Giữ một file tracked khác đang mở. Nhờ agent đọc và sửa file bằng edit/write.
207
+ Sau lượt đó, kiểm tra dòng thêm và dòng xóa ngay trong editor.
208
+ 4. Chọn Giữ và kiểm tra nội dung file không đổi. Nhờ agent ở lượt thứ hai tạo một
209
+ file nhỏ mới. Tránh sửa qua shell khi kiểm tra việc xác định hunk agent.
210
+ 5. Ở lượt agent đầu tiên, chọn Khôi phục về trước lượt này. Kiểm tra preview liệt
211
+ kê cả hai lượt và hai file, rồi xác nhận.
212
+ 6. Kiểm tra file ban đầu đã được trả lại, file mới đã bị xóa và bản sửa đã lưu ở
213
+ bước 1 vẫn còn. HEAD và vùng stage giữ nguyên.
214
+
215
+ Kịch bản soak `ide-editor-terminal` kiểm tra riêng việc lưu editor có guard và chạy
216
+ test trong terminal qua giao thức WebUI. Self-check của oracle và test transport
217
+ không tự chứng minh đã hoàn thành một lượt chạy với model thật.
@@ -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.37.0 docs · VI</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.38.1 docs · VI</span>
34
34
  <nav class="language-switch" aria-label="Ngôn ngữ">
35
35
  <a class="language-option current" href="/architecture" hreflang="vi" lang="vi" aria-current="true">VI</a>
36
36
  <a class="language-option" href="/en/architecture" 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.37.0 docs · VI</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.38.1 docs · VI</span>
34
34
  <nav class="language-switch" aria-label="Ngôn ngữ">
35
35
  <a class="language-option current" href="/benchmark" hreflang="vi" lang="vi" aria-current="true">VI</a>
36
36
  <a class="language-option" href="/en/benchmark" 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.37.0 docs · VI</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.38.1 docs · VI</span>
34
34
  <nav class="language-switch" aria-label="Ngôn ngữ">
35
35
  <a class="language-option current" href="/commands" hreflang="vi" lang="vi" aria-current="true">VI</a>
36
36
  <a class="language-option" href="/en/commands" hreflang="en" lang="en">EN</a>
@@ -1,5 +1,5 @@
1
1
  <section class="hero">
2
- <p class="eyebrow">Piagent 1.37.0</p>
2
+ <p class="eyebrow">Piagent 1.38.1</p>
3
3
  <h1>A coding agent for the whole team, checked at every step.</h1>
4
4
  <p>
5
5
  One dashboard for Terminal and the browser. Use models with your own account, or the company's models through Agent Watch and Agent Studio. The guard checks every tool call; in company mode the team's Harness asks for checks, has a subagent review the change and reports the outcome right under the answer.
@@ -13,7 +13,7 @@
13
13
  <div class="hero-actions">
14
14
  <a class="button primary" href="/en/quickstart">Get started</a>
15
15
  <a class="button" href="/en/ecosystem">Ecosystem</a>
16
- <a class="button" href="/en/whats-new">What’s new in 1.37.0</a>
16
+ <a class="button" href="/en/whats-new">What’s new in 1.38.1</a>
17
17
  <a class="button" href="/en/commands">View commands</a>
18
18
  </div>
19
19
  </section>
@@ -89,9 +89,9 @@ piagent-setup</code></pre>
89
89
  <h2 id="where-to-start">Where to start</h2>
90
90
  <div class="card-grid">
91
91
  <a class="doc-card" href="/en/whats-new">
92
- <span class="card-kicker">Release 1.37.0</span>
92
+ <span class="card-kicker">Release 1.38.1</span>
93
93
  <h3>What’s new</h3>
94
- <p>An answer cut mid-stream no longer stops a long task, and <code>piagent studio --rpc</code>; in 1.36.1: a moment when Agent Watch cannot reach Studio no longer stops a task; in 1.36.0: team memory learns from what went wrong: Studio rates what memory handed over, a repeated command failure becomes a lesson; in 1.35: long tasks go on when Studio is updated or the model has a passing error; in 1.34: helpers report how their work ended, Agent Watch tells you when you are needed; in 1.33.0: runs on Pi 1.3.0; in 1.32.1: Bypass is kept after a reload, and a tab in use no longer signs out after 8 hours; in 1.32.0: a failed or stopped answer ends at Studio too; in 1.31.1: <code>memory_ask</code> right after an update; in 1.31.0: Team memory follows the branch and the team's rules, with <code>memory_ask</code>; in 1.30.1: no model names in the company Terminal; running <code>piagent studio</code> in the home folder now says to open a project folder; in 1.30.0: large contexts reach Studio over slow links and the company Terminal reads like the dashboard; in 1.29.0: the company Terminal gets its own look and Stop no longer breaks the conversation; in 1.28.3: Agent Watch updating itself no longer interrupts the company Terminal; in 1.28.2: no more “binding changed” right after an update; in 1.28.1: the company Terminal and personal Pi stop stepping on each other (no duplicate Piagent, no old company config, company chats stay in piagent studio); in 1.28.0: team memory v2; in 1.27.1: team memory keeps working while the agent calls the model; in 1.27.0: team memory, company agents remember the team's decisions and rules in each repository; in 1.26.1: a conversation is renamed while its turn runs; in 1.26.0: the Terminal's / commands and shortcuts in the dashboard, /undo for the agent's last turn, dev servers that stay up across turns; in 1.25.0: when the machine lacks something the agent asks, and the approved command runs (run_on_host outside the sandbox, start_docker in the same conversation); in 1.24.0: choose Fast on the new chat page for company conversations, and the Fast switch turns amber while on; in 1.23.1: an agent's question waits at the end of the conversation, right above the composer, and reads more easily; in 1.23.0: a Fast switch for company conversations where the Harness allows it, failed tools reported to Studio (Logs → Tool lỗi), new conversations send their first message after a Harness change; in 1.22.1: the dashboard no longer keeps loading when a project is on a Windows drive seen from WSL (/mnt/d…) or the company runtime does not answer; in 1.22.0: attach any source or text file (.html, .css, .ts, .py, Dockerfile…); in 1.21.1: Bypass can be turned on while a turn runs and stays on after a reload; in 1.21.0: questions and approvals one card at a time (the main agent's first), a notification at the top right when another conversation finishes or waits for you, Studio logs each compaction; in 1.20.0: package installs in the company sandbox no longer ask (npm, PyPI, Go, Maven, Gradle… through a registry-only proxy); in 1.19.0: company tasks with a checklist are carried to the end, every turn says whether it finished, stopped midway or failed, Docker in the company sandbox, folders with several repositories; in 1.18.0: switch the Git branch from the dashboard, retries for passing failures, Claude Haiku 5.5; in 1.17.0: the dashboard shows each project's Git branch; in 1.16.3: an updated dashboard keeps checking for releases; in 1.16.2: the Terminal says what the dashboard says: update question, /bypass, failures and Harness notes in Vietnamese; in 1.16.1: new releases are announced in a dialog and checked every hour, dashboard tabs stay signed in; in 1.16.0: Bypass for company conversations, Harness changes never interrupt you; in 1.15.2: long conversations shrink again; in 1.15.1: Studio sees what each model call is for, conversations in one folder keep their changes apart; in 1.15.0: a refused subagent says why; in 1.14: updates keep the models you chose; in 1.13: conversations keep their place, the agent's notes are formatted, Piagent on Windows through WSL2: a bubblewrap sandbox for company conversations and Agent Watch for Windows; in 1.12: @ picks files and folders on the Mac, skills and commands run from /, and forked company conversations take messages.</p>
94
+ <p>The dashboard becomes an editor: file edits, terminals, inline hunk review and turn restore; Bypass that asks nothing, in company conversations too when the Harness allows it; in 1.37.1: a run Studio did not confirm closed is no longer recorded closed, a helper whose close fails keeps its answer, and team-memory lessons name the right command; in 1.37.0: an answer cut mid-stream no longer stops a long task, and <code>piagent studio --rpc</code>; in 1.36.1: a moment when Agent Watch cannot reach Studio no longer stops a task; in 1.36.0: team memory learns from what went wrong: Studio rates what memory handed over, a repeated command failure becomes a lesson; in 1.35: long tasks go on when Studio is updated or the model has a passing error; in 1.34: helpers report how their work ended, Agent Watch tells you when you are needed; in 1.33.0: runs on Pi 1.3.0; in 1.32.1: Bypass is kept after a reload, and a tab in use no longer signs out after 8 hours; in 1.32.0: a failed or stopped answer ends at Studio too; in 1.31.1: <code>memory_ask</code> right after an update; in 1.31.0: Team memory follows the branch and the team's rules, with <code>memory_ask</code>; in 1.30.1: no model names in the company Terminal; running <code>piagent studio</code> in the home folder now says to open a project folder; in 1.30.0: large contexts reach Studio over slow links and the company Terminal reads like the dashboard; in 1.29.0: the company Terminal gets its own look and Stop no longer breaks the conversation; in 1.28.3: Agent Watch updating itself no longer interrupts the company Terminal; in 1.28.2: no more “binding changed” right after an update; in 1.28.1: the company Terminal and personal Pi stop stepping on each other (no duplicate Piagent, no old company config, company chats stay in piagent studio); in 1.28.0: team memory v2; in 1.27.1: team memory keeps working while the agent calls the model; in 1.27.0: team memory, company agents remember the team's decisions and rules in each repository; in 1.26.1: a conversation is renamed while its turn runs; in 1.26.0: the Terminal's / commands and shortcuts in the dashboard, /undo for the agent's last turn, dev servers that stay up across turns; in 1.25.0: when the machine lacks something the agent asks, and the approved command runs (run_on_host outside the sandbox, start_docker in the same conversation); in 1.24.0: choose Fast on the new chat page for company conversations, and the Fast switch turns amber while on; in 1.23.1: an agent's question waits at the end of the conversation, right above the composer, and reads more easily; in 1.23.0: a Fast switch for company conversations where the Harness allows it, failed tools reported to Studio (Logs → Tool lỗi), new conversations send their first message after a Harness change; in 1.22.1: the dashboard no longer keeps loading when a project is on a Windows drive seen from WSL (/mnt/d…) or the company runtime does not answer; in 1.22.0: attach any source or text file (.html, .css, .ts, .py, Dockerfile…); in 1.21.1: Bypass can be turned on while a turn runs and stays on after a reload; in 1.21.0: questions and approvals one card at a time (the main agent's first), a notification at the top right when another conversation finishes or waits for you, Studio logs each compaction; in 1.20.0: package installs in the company sandbox no longer ask (npm, PyPI, Go, Maven, Gradle… through a registry-only proxy); in 1.19.0: company tasks with a checklist are carried to the end, every turn says whether it finished, stopped midway or failed, Docker in the company sandbox, folders with several repositories; in 1.18.0: switch the Git branch from the dashboard, retries for passing failures, Claude Haiku 5.5; in 1.17.0: the dashboard shows each project's Git branch; in 1.16.3: an updated dashboard keeps checking for releases; in 1.16.2: the Terminal says what the dashboard says: update question, /bypass, failures and Harness notes in Vietnamese; in 1.16.1: new releases are announced in a dialog and checked every hour, dashboard tabs stay signed in; in 1.16.0: Bypass for company conversations, Harness changes never interrupt you; in 1.15.2: long conversations shrink again; in 1.15.1: Studio sees what each model call is for, conversations in one folder keep their changes apart; in 1.15.0: a refused subagent says why; in 1.14: updates keep the models you chose; in 1.13: conversations keep their place, the agent's notes are formatted, Piagent on Windows through WSL2: a bubblewrap sandbox for company conversations and Agent Watch for Windows; in 1.12: @ picks files and folders on the Mac, skills and commands run from /, and forked company conversations take messages.</p>
95
95
  </a>
96
96
  <a class="doc-card" href="/en/ecosystem">
97
97
  <span class="card-kicker">Get started</span>
@@ -1,3 +1,26 @@
1
+ <section class="section">
2
+ <p class="section-kicker">v1.38.1 · 2026-10-23</p>
3
+ <h2 id="v1-38-1">The dashboard becomes an editor, and Bypass asks nothing</h2>
4
+ <p class="section-lead">Open, edit, save, rename and delete files in the dashboard (Cmd/Ctrl+P, search, a conflict prompt when the file changed on disk); project terminals (company conversations too, inside the sandbox, now on macOS); review each hunk the agent changed inline with Keep and Revert; Timeline restores to before a turn, with personal and company checkpoints shared with <code>/undo</code>. Square, IDE-like edges, and closable file and terminal tabs. <strong>Bypass</strong> as in Codex: nothing is asked or blocked, output is still redacted and <code>/undo</code> still works. Company conversations get three levels, Ask first, Full access (the old Bypass) and Bypass, when the Harness allows it (Agent Studio 0.38.0, Agent Watch 0.15.14 / Windows 0.1.17); a Studio admin can turn it off.</p>
5
+ </section>
6
+
7
+ <section class="section">
8
+ <p class="section-kicker">Unreleased</p>
9
+ <h2 id="unreleased-workspace">Edit project files beside chat</h2>
10
+ <p class="section-lead">Session Hub now saves edits with Cmd/Ctrl+S, marks unsaved tabs and creates files. When a file changes on disk, reload, compare or confirm an overwrite. Current write permissions and protected paths are enforced in personal and company mode; company writes stay inside the existing sandbox. The agent must reread a stale file after member edits.</p>
11
+ <p>Review observed agent changes directly in the editor: Keep, preview-confirmed Revert, hunk counts and line comments to chat. Clean files reload after agent edits; unsaved drafts remain intact. Newly created agent files support review; deletion through hunk revert is not yet supported.</p>
12
+ <p>Personal conversations now offer terminal tabs below the editor, with resize, Ctrl+C and replay after reload. Send @terminal or @terminal:2 to attach bounded redacted output. Missing native PTY support is reported without disabling the dashboard; company shells never fall back to host execution.</p>
13
+ <p>Company conversations now offer terminals inside the Linux/WSL sandbox through their Gateway, with network blocked, credentials masked and child processes stopped when the conversation is released. Relay reconnects restore output without resending commands. macOS reports unavailable without opening a host shell. The full workflow is verified on Linux arm64; native Linux x64 and WSL still need independent verification.</p>
14
+ <p>Timeline checkpoints preview affected files before restoring one or several turns. Member-edit conflicts stop restoration; commits and staged changes stay intact. Personal conversations also support /undo. A lost browser response keeps the same request across reloads for an explicit result check.</p>
15
+ <p>Company inline review now retains exact agent hunks across internal diff refreshes.</p>
16
+ </section>
17
+
18
+ <section class="section">
19
+ <p class="section-kicker">v1.37.1 · 2026-10-22</p>
20
+ <h2 id="v1-37-1">Closes Studio can trust</h2>
21
+ <p class="section-lead">When closing a run failed for a moment, the close asked again could "succeed" without reaching Studio, and Piagent recorded the run closed. With Agent Watch 0.15.11 (Windows 0.1.16) the close asked again reaches Studio; with an older Agent Watch the run stays open here and is recovered when the conversation reopens. A helper whose close fails for a moment keeps its answer, and its report to Studio is sent again. Team memory no longer merges two different commands that failed the same way into one lesson. Security: <code>web_fetch</code> and the package proxy refuse private addresses written in any IPv6 form, and with a company upstream proxy the package proxy still checks where it connects.</p>
22
+ </section>
23
+
1
24
  <section class="section">
2
25
  <p class="section-kicker">v1.37.0 · 2026-10-22</p>
3
26
  <h2 id="v1-37-0">An answer cut mid-stream no longer stops a long task</h2>
@@ -1,5 +1,5 @@
1
1
  <section class="hero">
2
- <p class="eyebrow">Piagent 1.37.0</p>
2
+ <p class="eyebrow">Piagent 1.38.1</p>
3
3
  <h1>Coding agent cho cả team, kiểm tra từng bước.</h1>
4
4
  <p>
5
5
  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.
@@ -13,7 +13,7 @@
13
13
  <div class="hero-actions">
14
14
  <a class="button primary" href="/quickstart">Bắt đầu</a>
15
15
  <a class="button" href="/ecosystem">Hệ sinh thái</a>
16
- <a class="button" href="/whats-new">Có gì mới trong 1.37.0</a>
16
+ <a class="button" href="/whats-new">Có gì mới trong 1.38.1</a>
17
17
  <a class="button" href="/commands">Xem command</a>
18
18
  </div>
19
19
  </section>
@@ -89,9 +89,9 @@ piagent-setup</code></pre>
89
89
  <h2 id="bat-dau-tu-dau">Bắt đầu từ đâu</h2>
90
90
  <div class="card-grid">
91
91
  <a class="doc-card" href="/whats-new">
92
- <span class="card-kicker">Bản 1.37.0</span>
92
+ <span class="card-kicker">Bản 1.38.1</span>
93
93
  <h3>Có gì mới</h3>
94
- <p>Câu trả lời bị cắt giữa chừng không còn làm dừng task dài, có <code>piagent studio --rpc</code>; ở 1.36.1: Agent Watch mất kết nối tới Studio trong chốc lát không còn làm dừng task; ở 1.36.0: team memory học từ chỗ làm sai: Studio chấm những gì memory đã đưa, lệnh lỗi lặp lại thành bài học; ở 1.35: task dài không dừng khi Studio cập nhật hay model báo lỗi tạm thời; ở 1.34: helper báo kết quả, Agent Watch báo khi cần bạn; ở 1.33.0: chạy trên Pi 1.3.0; ở 1.32.1: Bypass được giữ sau khi tải lại, tab đang dùng không còn bị đăng xuất sau 8 giờ; ở 1.32.0: lượt lỗi hoặc bấm Stop được dừng cả ở Studio; ở 1.31.1: <code>memory_ask</code> có ngay sau khi cập nhật; ở 1.31.0: Memory của team đi theo branch và luật của team, có <code>memory_ask</code>; ở 1.30.1: Terminal công ty không còn hiện tên model, mở <code>piagent studio</code> ở thư mục home báo rõ cần vào thư mục dự án; ở 1.30.0: context lớn đi qua mạng chậm, Terminal công ty gọn như dashboard; ở 1.29.0: Terminal công ty có giao diện riêng, dừng lượt không còn làm hỏng cuộc trò chuyện; ở 1.28.3: Agent Watch tự cập nhật không còn làm gián đoạn Terminal công ty; ở 1.28.2: không còn lỗi “binding changed” ngay sau khi cập nhật; ở 1.28.1: Terminal công ty và Pi cá nhân không còn giẫm chân nhau (không nạp Piagent hai lần, dọn cấu hình công ty cũ, cuộc trò chuyện công ty chỉ mở bằng piagent studio); ở 1.28.0: team memory v2; ở 1.27.1: team memory chạy ổn cả khi agent đang gọi model; ở 1.27.0: team memory, agent công ty nhớ quyết định và quy tắc của team trong từng repo; ở 1.26.1: đổi tên cuộc trò chuyện được cả khi lượt đang chạy; ở 1.26.0: lệnh / và phím tắt của Terminal ngay trên dashboard, /undo hoàn tác lượt trước của agent, dev server chạy qua nhiều lượt; ở 1.25.0: thiếu môi trường thì agent xin quyền và chạy được sau khi bạn duyệt (run_on_host ngoài sandbox, start_docker mở Docker ngay trong cuộc trò chuyện); ở 1.24.0: chọn Fast ngay trên trang tạo cuộc trò chuyện công ty, nút Fast đổi màu vàng khi đang bật; ở 1.23.1: câu hỏi của agent luôn nằm cuối cuộc trò chuyện, ngay trên ô nhập, và dễ đọc hơn; ở 1.23.0: nút Fast cho cuộc trò chuyện công ty khi Harness cho phép, tool lỗi được báo về Studio (Logs → Tool lỗi), cuộc trò chuyện mới gửi được tin nhắn đầu sau khi Harness đổi; ở 1.22.1: dashboard không còn quay mãi khi project nằm trên ổ Windows nhìn từ WSL (/mnt/d…) hoặc phiên công ty không trả lời; ở 1.22.0: đính kèm được mọi file code và văn bản (.html, .css, .ts, .py, Dockerfile…); ở 1.21.1: bật Bypass được cả khi lượt đang chạy và được giữ sau khi tải lại; ở 1.21.0: câu hỏi và yêu cầu duyệt hiện từng cái một (main agent trước), thông báo góc phải khi cuộc trò chuyện khác xong hay đang chờ bạn, Studio ghi lại mỗi lần compact; ở 1.20.0: cài package trong sandbox công ty không phải duyệt (npm, PyPI, Go, Maven, Gradle… qua proxy chỉ cho registry); ở 1.19.0: task công ty có checklist được làm đến hết, cuối mỗi lượt báo rõ xong, dừng giữa chừng hay lỗi, Docker trong sandbox công ty, folder chứa nhiều repo; ở 1.18.0: đổ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>
94
+ <p>Dashboard thành editor: sửa file, terminal, review hunk, khôi phục lượt; Bypass không hỏi gì, cả cuộc trò chuyện công ty khi Harness bật; ở 1.37.1: run Studio chưa xác nhận đóng không còn bị ghi là đã đóng, helper đóng lỗi vẫn giữ câu trả lời, bài học team memory ghi đúng lệnh; ở 1.37.0: câu trả lời bị cắt giữa chừng không còn làm dừng task dài, có <code>piagent studio --rpc</code>; ở 1.36.1: Agent Watch mất kết nối tới Studio trong chốc lát không còn làm dừng task; ở 1.36.0: team memory học từ chỗ làm sai: Studio chấm những gì memory đã đưa, lệnh lỗi lặp lại thành bài học; ở 1.35: task dài không dừng khi Studio cập nhật hay model báo lỗi tạm thời; ở 1.34: helper báo kết quả, Agent Watch báo khi cần bạn; ở 1.33.0: chạy trên Pi 1.3.0; ở 1.32.1: Bypass được giữ sau khi tải lại, tab đang dùng không còn bị đăng xuất sau 8 giờ; ở 1.32.0: lượt lỗi hoặc bấm Stop được dừng cả ở Studio; ở 1.31.1: <code>memory_ask</code> có ngay sau khi cập nhật; ở 1.31.0: Memory của team đi theo branch và luật của team, có <code>memory_ask</code>; ở 1.30.1: Terminal công ty không còn hiện tên model, mở <code>piagent studio</code> ở thư mục home báo rõ cần vào thư mục dự án; ở 1.30.0: context lớn đi qua mạng chậm, Terminal công ty gọn như dashboard; ở 1.29.0: Terminal công ty có giao diện riêng, dừng lượt không còn làm hỏng cuộc trò chuyện; ở 1.28.3: Agent Watch tự cập nhật không còn làm gián đoạn Terminal công ty; ở 1.28.2: không còn lỗi “binding changed” ngay sau khi cập nhật; ở 1.28.1: Terminal công ty và Pi cá nhân không còn giẫm chân nhau (không nạp Piagent hai lần, dọn cấu hình công ty cũ, cuộc trò chuyện công ty chỉ mở bằng piagent studio); ở 1.28.0: team memory v2; ở 1.27.1: team memory chạy ổn cả khi agent đang gọi model; ở 1.27.0: team memory, agent công ty nhớ quyết định và quy tắc của team trong từng repo; ở 1.26.1: đổi tên cuộc trò chuyện được cả khi lượt đang chạy; ở 1.26.0: lệnh / và phím tắt của Terminal ngay trên dashboard, /undo hoàn tác lượt trước của agent, dev server chạy qua nhiều lượt; ở 1.25.0: thiếu môi trường thì agent xin quyền và chạy được sau khi bạn duyệt (run_on_host ngoài sandbox, start_docker mở Docker ngay trong cuộc trò chuyện); ở 1.24.0: chọn Fast ngay trên trang tạo cuộc trò chuyện công ty, nút Fast đổi màu vàng khi đang bật; ở 1.23.1: câu hỏi của agent luôn nằm cuối cuộc trò chuyện, ngay trên ô nhập, và dễ đọc hơn; ở 1.23.0: nút Fast cho cuộc trò chuyện công ty khi Harness cho phép, tool lỗi được báo về Studio (Logs → Tool lỗi), cuộc trò chuyện mới gửi được tin nhắn đầu sau khi Harness đổi; ở 1.22.1: dashboard không còn quay mãi khi project nằm trên ổ Windows nhìn từ WSL (/mnt/d…) hoặc phiên công ty không trả lời; ở 1.22.0: đính kèm được mọi file code và văn bản (.html, .css, .ts, .py, Dockerfile…); ở 1.21.1: bật Bypass được cả khi lượt đang chạy và được giữ sau khi tải lại; ở 1.21.0: câu hỏi và yêu cầu duyệt hiện từng cái một (main agent trước), thông báo góc phải khi cuộc trò chuyện khác xong hay đang chờ bạn, Studio ghi lại mỗi lần compact; ở 1.20.0: cài package trong sandbox công ty không phải duyệt (npm, PyPI, Go, Maven, Gradle… qua proxy chỉ cho registry); ở 1.19.0: task công ty có checklist được làm đến hết, cuối mỗi lượt báo rõ xong, dừng giữa chừng hay lỗi, Docker trong sandbox công ty, folder chứa nhiều repo; ở 1.18.0: đổ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>
95
95
  </a>
96
96
  <a class="doc-card" href="/ecosystem">
97
97
  <span class="card-kicker">Get started</span>
@@ -1,3 +1,26 @@
1
+ <section class="section">
2
+ <p class="section-kicker">v1.38.1 · 2026-10-23</p>
3
+ <h2 id="v1-38-1">Dashboard thành editor, Bypass không hỏi gì</h2>
4
+ <p class="section-lead">Mở, sửa, lưu, đổi tên và xóa file ngay trên dashboard (Cmd/Ctrl+P, tìm kiếm, xung đột khi file đổi trên đĩa); terminal của project (cả cuộc trò chuyện công ty, chạy trong sandbox, có trên macOS); review từng hunk agent sửa ngay trong editor với Giữ và Hoàn tác; Timeline khôi phục về trước một lượt, cá nhân và công ty dùng chung checkpoint với <code>/undo</code>. Giao diện viền vuông như IDE, file và terminal có nút đóng. <strong>Bypass</strong> như Codex: không hỏi, không chặn gì, output vẫn che secret và <code>/undo</code> vẫn hoàn tác được. Cuộc trò chuyện công ty có ba mức Hỏi trước, Toàn quyền (Bypass cũ) và Bypass, khi Harness bật (Agent Studio 0.38.0, Agent Watch 0.15.14 / Windows 0.1.17); admin Studio tắt được.</p>
5
+ </section>
6
+
7
+ <section class="section">
8
+ <p class="section-kicker">Chưa phát hành</p>
9
+ <h2 id="unreleased-workspace">Sửa tệp dự án ngay cạnh chat</h2>
10
+ <p class="section-lead">Session Hub lưu chỉnh sửa bằng Cmd/Ctrl+S, đánh dấu tab chưa lưu và tạo tệp mới. Khi tệp trên đĩa đã đổi, bạn có thể tải lại, so sánh hoặc xác nhận ghi đè. Quyền ghi hiện tại và đường dẫn được bảo vệ được kiểm tra ở cả personal và company; company ghi trong sandbox hiện có. Agent phải đọc lại tệp cũ sau khi member sửa.</p>
11
+ <p>Review thay đổi đã quan sát của agent ngay trong editor: Giữ, Hoàn tác có preview và xác nhận, số hunk và comment theo dòng đưa vào chat. Tệp chưa có bản sửa tự tải lại sau khi agent sửa; bản sửa chưa lưu được giữ. Tệp mới do agent tạo hỗ trợ review; chưa hỗ trợ xóa tệp qua hoàn tác hunk.</p>
12
+ <p>Cuộc trò chuyện personal có tab terminal dưới editor, đổi kích thước, Ctrl+C và phát lại khi reload. Gửi @terminal hoặc @terminal:2 để đính output giới hạn dung lượng đã che secret. Thiếu PTY native được báo mà không tắt dashboard; shell company không bao giờ chuyển sang chạy trên host.</p>
13
+ <p>Cuộc trò chuyện company có terminal trong sandbox Linux/WSL qua Gateway công ty: chặn mạng, che credential và dừng tiến trình con khi release cuộc trò chuyện. Relay nối lại khôi phục output mà không gửi lại lệnh. macOS báo không khả dụng, không mở shell trên host. Luồng đầy đủ đã kiểm chứng trên Linux arm64; Linux x64 native và WSL còn cần kiểm chứng riêng.</p>
14
+ <p>Checkpoint trong Timeline cho xem trước file trước khi khôi phục một hoặc nhiều lượt. Xung đột với sửa đổi của member sẽ dừng khôi phục; commit và vùng stage được giữ nguyên. Cuộc trò chuyện personal cũng có /undo. Khi mất phản hồi trình duyệt, yêu cầu cũ còn qua reload để bạn chủ động kiểm tra kết quả.</p>
15
+ <p>Review inline company giữ được hunk chính xác của agent sau các lần làm mới diff nội bộ.</p>
16
+ </section>
17
+
18
+ <section class="section">
19
+ <p class="section-kicker">v1.37.1 · 2026-10-22</p>
20
+ <h2 id="v1-37-1">Đóng run mà Studio tin được</h2>
21
+ <p class="section-lead">Khi đóng run lỗi trong chốc lát, lần hỏi đóng lại có thể "thành công" mà không tới Studio, và Piagent ghi run là đã đóng. Với Agent Watch 0.15.11 (Windows 0.1.16), lần hỏi lại tới được Studio; với Agent Watch cũ, run được để mở ở đây và được khôi phục khi mở lại cuộc trò chuyện. Helper đóng lỗi trong chốc lát vẫn giữ câu trả lời, báo cáo của nó được gửi lại cho Studio. Team memory không còn gộp hai lệnh khác nhau cùng lỗi thành một bài học. Bảo mật: <code>web_fetch</code> và package proxy chặn địa chỉ nội bộ viết dưới mọi dạng IPv6, và khi có upstream proxy của công ty, package proxy vẫn kiểm tra đích kết nối.</p>
22
+ </section>
23
+
1
24
  <section class="section">
2
25
  <p class="section-kicker">v1.37.0 · 2026-10-22</p>
3
26
  <h2 id="v1-37-0">Câu trả lời bị cắt giữa chừng không còn làm dừng task dà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.37.0 docs · VI</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.38.1 docs · VI</span>
34
34
  <nav class="language-switch" aria-label="Ngôn ngữ">
35
35
  <a class="language-option current" href="/context-engine" hreflang="vi" lang="vi" aria-current="true">VI</a>
36
36
  <a class="language-option" href="/en/context-engine" 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.37.0 docs · VI</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.38.1 docs · VI</span>
34
34
  <nav class="language-switch" aria-label="Ngôn ngữ">
35
35
  <a class="language-option current" href="/ecosystem" hreflang="vi" lang="vi" aria-current="true">VI</a>
36
36
  <a class="language-option" href="/en/ecosystem" 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.37.0 docs · EN</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.38.1 docs · EN</span>
34
34
  <nav class="language-switch" aria-label="Language">
35
35
  <a class="language-option" href="/architecture" hreflang="vi" lang="vi">VI</a>
36
36
  <a class="language-option current" href="/en/architecture" 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.37.0 docs · EN</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.38.1 docs · EN</span>
34
34
  <nav class="language-switch" aria-label="Language">
35
35
  <a class="language-option" href="/benchmark" hreflang="vi" lang="vi">VI</a>
36
36
  <a class="language-option current" href="/en/benchmark" 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.37.0 docs · EN</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.38.1 docs · EN</span>
34
34
  <nav class="language-switch" aria-label="Language">
35
35
  <a class="language-option" href="/commands" hreflang="vi" lang="vi">VI</a>
36
36
  <a class="language-option current" href="/en/commands" 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.37.0 docs · EN</span>
33
+ <span class="pill"><span class="pill-dot"></span>v1.38.1 docs · EN</span>
34
34
  <nav class="language-switch" aria-label="Language">
35
35
  <a class="language-option" href="/context-engine" hreflang="vi" lang="vi">VI</a>
36
36
  <a class="language-option current" href="/en/context-engine" hreflang="en" lang="en" aria-current="true">EN</a>