session-peer 1.1.2__tar.gz → 1.2.0__tar.gz

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 (255) hide show
  1. {session_peer-1.1.2 → session_peer-1.2.0}/PKG-INFO +4 -4
  2. {session_peer-1.1.2 → session_peer-1.2.0}/README.ja.md +3 -3
  3. {session_peer-1.1.2 → session_peer-1.2.0}/README.ko.md +3 -3
  4. {session_peer-1.1.2 → session_peer-1.2.0}/README.md +3 -3
  5. {session_peer-1.1.2 → session_peer-1.2.0}/README.zh-CN.md +3 -3
  6. {session_peer-1.1.2 → session_peer-1.2.0}/docs/README.md +3 -1
  7. {session_peer-1.1.2 → session_peer-1.2.0}/docs/cli-reference.md +19 -3
  8. {session_peer-1.1.2 → session_peer-1.2.0}/docs/i18n-manifest.json +6 -5
  9. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/README.md +3 -1
  10. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/cli-reference.md +19 -3
  11. session_peer-1.2.0/docs/ja/releases/v1.2.0.md +41 -0
  12. session_peer-1.2.0/docs/ja/validation/85-antigravity.md +97 -0
  13. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/README.md +3 -1
  14. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/cli-reference.md +19 -3
  15. session_peer-1.2.0/docs/ko/releases/v1.2.0.md +41 -0
  16. session_peer-1.2.0/docs/ko/validation/85-antigravity.md +97 -0
  17. session_peer-1.2.0/docs/releases/v1.2.0.md +41 -0
  18. session_peer-1.2.0/docs/validation/85-antigravity.md +145 -0
  19. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/README.md +3 -1
  20. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/cli-reference.md +19 -3
  21. session_peer-1.2.0/docs/zh-CN/releases/v1.2.0.md +41 -0
  22. session_peer-1.2.0/docs/zh-CN/validation/85-antigravity.md +85 -0
  23. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer.py +504 -40
  24. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/codex.py +479 -29
  25. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/common.py +1 -1
  26. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/handoff.py +22 -8
  27. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/handoff_process.py +2 -2
  28. session_peer-1.1.2/docs/ja/validation/85-antigravity.md +0 -24
  29. session_peer-1.1.2/docs/ko/validation/85-antigravity.md +0 -23
  30. session_peer-1.1.2/docs/validation/85-antigravity.md +0 -60
  31. session_peer-1.1.2/docs/zh-CN/validation/85-antigravity.md +0 -23
  32. {session_peer-1.1.2 → session_peer-1.2.0}/.agents/plugins/marketplace.json +0 -0
  33. {session_peer-1.1.2 → session_peer-1.2.0}/.gitattributes +0 -0
  34. {session_peer-1.1.2 → session_peer-1.2.0}/.gitignore +0 -0
  35. {session_peer-1.1.2 → session_peer-1.2.0}/LICENSE +0 -0
  36. {session_peer-1.1.2 → session_peer-1.2.0}/SECURITY.md +0 -0
  37. {session_peer-1.1.2 → session_peer-1.2.0}/deploy/README.md +0 -0
  38. {session_peer-1.1.2 → session_peer-1.2.0}/deploy/examples/authenticated-control/README.md +0 -0
  39. {session_peer-1.1.2 → session_peer-1.2.0}/deploy/examples/authenticated-control/session-peer-control.service +0 -0
  40. {session_peer-1.1.2 → session_peer-1.2.0}/deploy/examples/static-account/README.md +0 -0
  41. {session_peer-1.1.2 → session_peer-1.2.0}/deploy/examples/static-account/session-peer-relay.service +0 -0
  42. {session_peer-1.1.2 → session_peer-1.2.0}/docs/agent-adapters.md +0 -0
  43. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ai-assistant-guide.md +0 -0
  44. {session_peer-1.1.2 → session_peer-1.2.0}/docs/antigravity.md +0 -0
  45. {session_peer-1.1.2 → session_peer-1.2.0}/docs/architecture/agent-transports.md +0 -0
  46. {session_peer-1.1.2 → session_peer-1.2.0}/docs/assets/session-peer-live-codex-claude.gif +0 -0
  47. {session_peer-1.1.2 → session_peer-1.2.0}/docs/compatibility-v1.md +0 -0
  48. {session_peer-1.1.2 → session_peer-1.2.0}/docs/contracts/handoff-v1.md +0 -0
  49. {session_peer-1.1.2 → session_peer-1.2.0}/docs/diagnostics.md +0 -0
  50. {session_peer-1.1.2 → session_peer-1.2.0}/docs/download-metrics.md +0 -0
  51. {session_peer-1.1.2 → session_peer-1.2.0}/docs/handoff-runtime.md +0 -0
  52. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/agent-adapters.md +0 -0
  53. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/ai-assistant-guide.md +0 -0
  54. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/antigravity.md +0 -0
  55. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/architecture/agent-transports.md +0 -0
  56. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/compatibility-v1.md +0 -0
  57. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/contracts/handoff-v1.md +0 -0
  58. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/diagnostics.md +0 -0
  59. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/download-metrics.md +0 -0
  60. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/handoff-runtime.md +0 -0
  61. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/mcp.md +0 -0
  62. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/multi-home-list.md +0 -0
  63. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/paired-devices.md +0 -0
  64. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/relay-auth.md +0 -0
  65. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/relay-development-plan.md +0 -0
  66. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/relay-edge-policy.md +0 -0
  67. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/relay-google-bootstrap.md +0 -0
  68. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/relay-lifecycle.md +0 -0
  69. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/relay-public-pilot-2026-09-17.md +0 -0
  70. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/relay-watchdog.md +0 -0
  71. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/releases/v0.6.1.md +0 -0
  72. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/releases/v0.6.2.md +0 -0
  73. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/releases/v0.7.0.md +0 -0
  74. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/releases/v0.8.0.md +0 -0
  75. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/releases/v0.9.0.md +0 -0
  76. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/releases/v1.0.0-alpha.1.md +0 -0
  77. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/releases/v1.0.0-beta.1.md +0 -0
  78. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/releases/v1.0.0-rc.1.md +0 -0
  79. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/releases/v1.0.0-rc.2.md +0 -0
  80. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/releases/v1.0.0-rc.3.md +0 -0
  81. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/releases/v1.0.0-rc.4.md +0 -0
  82. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/releases/v1.0.0.md +0 -0
  83. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/releases/v1.0.1.md +0 -0
  84. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/releases/v1.0.2.md +0 -0
  85. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/releases/v1.0.3.md +0 -0
  86. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/releases/v1.0.4.md +0 -0
  87. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/releases/v1.1.0.md +0 -0
  88. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/releases/v1.1.1.md +0 -0
  89. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/releases/v1.1.2.md +0 -0
  90. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/validation/69-rc.md +0 -0
  91. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ja/wake.md +0 -0
  92. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/agent-adapters.md +0 -0
  93. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/ai-assistant-guide.md +0 -0
  94. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/antigravity.md +0 -0
  95. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/architecture/agent-transports.md +0 -0
  96. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/compatibility-v1.md +0 -0
  97. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/contracts/handoff-v1.md +0 -0
  98. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/diagnostics.md +0 -0
  99. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/download-metrics.md +0 -0
  100. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/handoff-runtime.md +0 -0
  101. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/mcp.md +0 -0
  102. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/multi-home-list.md +0 -0
  103. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/paired-devices.md +0 -0
  104. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/relay-auth.md +0 -0
  105. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/relay-development-plan.md +0 -0
  106. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/relay-edge-policy.md +0 -0
  107. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/relay-google-bootstrap.md +0 -0
  108. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/relay-lifecycle.md +0 -0
  109. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/relay-public-pilot-2026-09-17.md +0 -0
  110. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/relay-watchdog.md +0 -0
  111. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/releases/v0.6.1.md +0 -0
  112. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/releases/v0.6.2.md +0 -0
  113. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/releases/v0.7.0.md +0 -0
  114. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/releases/v0.8.0.md +0 -0
  115. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/releases/v0.9.0.md +0 -0
  116. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/releases/v1.0.0-alpha.1.md +0 -0
  117. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/releases/v1.0.0-beta.1.md +0 -0
  118. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/releases/v1.0.0-rc.1.md +0 -0
  119. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/releases/v1.0.0-rc.2.md +0 -0
  120. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/releases/v1.0.0-rc.3.md +0 -0
  121. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/releases/v1.0.0-rc.4.md +0 -0
  122. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/releases/v1.0.0.md +0 -0
  123. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/releases/v1.0.1.md +0 -0
  124. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/releases/v1.0.2.md +0 -0
  125. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/releases/v1.0.3.md +0 -0
  126. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/releases/v1.0.4.md +0 -0
  127. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/releases/v1.1.0.md +0 -0
  128. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/releases/v1.1.1.md +0 -0
  129. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/releases/v1.1.2.md +0 -0
  130. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/validation/69-rc.md +0 -0
  131. {session_peer-1.1.2 → session_peer-1.2.0}/docs/ko/wake.md +0 -0
  132. {session_peer-1.1.2 → session_peer-1.2.0}/docs/mcp.md +0 -0
  133. {session_peer-1.1.2 → session_peer-1.2.0}/docs/multi-home-list.md +0 -0
  134. {session_peer-1.1.2 → session_peer-1.2.0}/docs/paired-devices.md +0 -0
  135. {session_peer-1.1.2 → session_peer-1.2.0}/docs/relay-auth.md +0 -0
  136. {session_peer-1.1.2 → session_peer-1.2.0}/docs/relay-development-plan.md +0 -0
  137. {session_peer-1.1.2 → session_peer-1.2.0}/docs/relay-edge-policy.md +0 -0
  138. {session_peer-1.1.2 → session_peer-1.2.0}/docs/relay-google-bootstrap.md +0 -0
  139. {session_peer-1.1.2 → session_peer-1.2.0}/docs/relay-lifecycle.md +0 -0
  140. {session_peer-1.1.2 → session_peer-1.2.0}/docs/relay-public-pilot-2026-09-17.md +0 -0
  141. {session_peer-1.1.2 → session_peer-1.2.0}/docs/relay-watchdog.md +0 -0
  142. {session_peer-1.1.2 → session_peer-1.2.0}/docs/releases/v0.6.1.md +0 -0
  143. {session_peer-1.1.2 → session_peer-1.2.0}/docs/releases/v0.6.2.md +0 -0
  144. {session_peer-1.1.2 → session_peer-1.2.0}/docs/releases/v0.7.0.md +0 -0
  145. {session_peer-1.1.2 → session_peer-1.2.0}/docs/releases/v0.8.0.md +0 -0
  146. {session_peer-1.1.2 → session_peer-1.2.0}/docs/releases/v0.9.0.md +0 -0
  147. {session_peer-1.1.2 → session_peer-1.2.0}/docs/releases/v1.0.0-alpha.1.md +0 -0
  148. {session_peer-1.1.2 → session_peer-1.2.0}/docs/releases/v1.0.0-beta.1.md +0 -0
  149. {session_peer-1.1.2 → session_peer-1.2.0}/docs/releases/v1.0.0-rc.1.md +0 -0
  150. {session_peer-1.1.2 → session_peer-1.2.0}/docs/releases/v1.0.0-rc.2.md +0 -0
  151. {session_peer-1.1.2 → session_peer-1.2.0}/docs/releases/v1.0.0-rc.3.md +0 -0
  152. {session_peer-1.1.2 → session_peer-1.2.0}/docs/releases/v1.0.0-rc.4.md +0 -0
  153. {session_peer-1.1.2 → session_peer-1.2.0}/docs/releases/v1.0.0.md +0 -0
  154. {session_peer-1.1.2 → session_peer-1.2.0}/docs/releases/v1.0.1.md +0 -0
  155. {session_peer-1.1.2 → session_peer-1.2.0}/docs/releases/v1.0.2.md +0 -0
  156. {session_peer-1.1.2 → session_peer-1.2.0}/docs/releases/v1.0.3.md +0 -0
  157. {session_peer-1.1.2 → session_peer-1.2.0}/docs/releases/v1.0.4.md +0 -0
  158. {session_peer-1.1.2 → session_peer-1.2.0}/docs/releases/v1.1.0.md +0 -0
  159. {session_peer-1.1.2 → session_peer-1.2.0}/docs/releases/v1.1.1.md +0 -0
  160. {session_peer-1.1.2 → session_peer-1.2.0}/docs/releases/v1.1.2.md +0 -0
  161. {session_peer-1.1.2 → session_peer-1.2.0}/docs/validation/69-rc.md +0 -0
  162. {session_peer-1.1.2 → session_peer-1.2.0}/docs/wake.md +0 -0
  163. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/agent-adapters.md +0 -0
  164. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/ai-assistant-guide.md +0 -0
  165. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/antigravity.md +0 -0
  166. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/architecture/agent-transports.md +0 -0
  167. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/compatibility-v1.md +0 -0
  168. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/contracts/handoff-v1.md +0 -0
  169. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/diagnostics.md +0 -0
  170. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/download-metrics.md +0 -0
  171. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/handoff-runtime.md +0 -0
  172. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/mcp.md +0 -0
  173. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/multi-home-list.md +0 -0
  174. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/paired-devices.md +0 -0
  175. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/relay-auth.md +0 -0
  176. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/relay-development-plan.md +0 -0
  177. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/relay-edge-policy.md +0 -0
  178. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/relay-google-bootstrap.md +0 -0
  179. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/relay-lifecycle.md +0 -0
  180. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/relay-public-pilot-2026-09-17.md +0 -0
  181. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/relay-watchdog.md +0 -0
  182. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/releases/v0.6.1.md +0 -0
  183. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/releases/v0.6.2.md +0 -0
  184. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/releases/v0.7.0.md +0 -0
  185. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/releases/v0.8.0.md +0 -0
  186. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/releases/v0.9.0.md +0 -0
  187. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/releases/v1.0.0-alpha.1.md +0 -0
  188. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/releases/v1.0.0-beta.1.md +0 -0
  189. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/releases/v1.0.0-rc.1.md +0 -0
  190. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/releases/v1.0.0-rc.2.md +0 -0
  191. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/releases/v1.0.0-rc.3.md +0 -0
  192. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/releases/v1.0.0-rc.4.md +0 -0
  193. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/releases/v1.0.0.md +0 -0
  194. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/releases/v1.0.1.md +0 -0
  195. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/releases/v1.0.2.md +0 -0
  196. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/releases/v1.0.3.md +0 -0
  197. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/releases/v1.0.4.md +0 -0
  198. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/releases/v1.1.0.md +0 -0
  199. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/releases/v1.1.1.md +0 -0
  200. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/releases/v1.1.2.md +0 -0
  201. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/validation/69-rc.md +0 -0
  202. {session_peer-1.1.2 → session_peer-1.2.0}/docs/zh-CN/wake.md +0 -0
  203. {session_peer-1.1.2 → session_peer-1.2.0}/plugins/session-peer/.codex-plugin/plugin.json +0 -0
  204. {session_peer-1.1.2 → session_peer-1.2.0}/plugins/session-peer/.mcp.json +0 -0
  205. {session_peer-1.1.2 → session_peer-1.2.0}/plugins/session-peer/README.ja.md +0 -0
  206. {session_peer-1.1.2 → session_peer-1.2.0}/plugins/session-peer/README.ko.md +0 -0
  207. {session_peer-1.1.2 → session_peer-1.2.0}/plugins/session-peer/README.md +0 -0
  208. {session_peer-1.1.2 → session_peer-1.2.0}/plugins/session-peer/README.zh-CN.md +0 -0
  209. {session_peer-1.1.2 → session_peer-1.2.0}/pyproject.toml +0 -0
  210. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/README.md +0 -0
  211. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/adapters.py +0 -0
  212. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/antigravity.py +0 -0
  213. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/claude.py +0 -0
  214. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/cli.py +0 -0
  215. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/commands.py +0 -0
  216. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/diagnostics.py +0 -0
  217. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/handoff_remote.py +0 -0
  218. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/handoff_stdin.py +0 -0
  219. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/messages.py +0 -0
  220. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/output.py +0 -0
  221. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/registry.py +0 -0
  222. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/relay.py +0 -0
  223. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/release_verification.py +0 -0
  224. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/replies.py +0 -0
  225. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/sending.py +0 -0
  226. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/ssh.py +0 -0
  227. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/ssh_identity.py +0 -0
  228. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/target_generation.py +0 -0
  229. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/updates.py +0 -0
  230. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_core/wake_chain.py +0 -0
  231. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_mcp.py +0 -0
  232. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_relay/__init__.py +0 -0
  233. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_relay/app.py +0 -0
  234. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_relay/auth.py +0 -0
  235. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_relay/cli.py +0 -0
  236. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_relay/control.py +0 -0
  237. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_relay/framing.py +0 -0
  238. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_relay/guidance.py +0 -0
  239. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_relay/identity.py +0 -0
  240. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_relay/lifecycle.py +0 -0
  241. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_relay/native.py +0 -0
  242. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_relay/recovery.py +0 -0
  243. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_relay/relay.py +0 -0
  244. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_relay/rotation.py +0 -0
  245. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_relay/setup.py +0 -0
  246. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_relay/store.py +0 -0
  247. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_relay/transport_errors.py +0 -0
  248. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_relay/wire.py +0 -0
  249. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_relay/worker.py +0 -0
  250. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_shorthand/__init__.py +0 -0
  251. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_shorthand/__main__.py +0 -0
  252. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_shorthand/sp-remove.sh +0 -0
  253. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_shorthand/sp.ps1 +0 -0
  254. {session_peer-1.1.2 → session_peer-1.2.0}/session_peer_shorthand/sp.sh +0 -0
  255. {session_peer-1.1.2 → session_peer-1.2.0}/tools/generate_session_peer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: session-peer
3
- Version: 1.1.2
3
+ Version: 1.2.0
4
4
  Summary: Discover and message Claude Code, Codex, and Antigravity sessions locally, over SSH, through MCP, or via an optional end-to-end encrypted relay.
5
5
  Project-URL: Homepage, https://github.com/abruption/session-peer
6
6
  Project-URL: Repository, https://github.com/abruption/session-peer
@@ -68,11 +68,11 @@ in this ~22-second animation, not a screen recording; send success alone is not
68
68
  ### Install
69
69
 
70
70
  Python 3.9+. The core local/SSH CLI has no third-party Python dependencies.
71
- Version covered by this README: **1.1.1**.
71
+ Source version: **1.2.0**. At the 2026-10-16 publication checkpoint, the last verified published stable release was **1.1.2**.
72
72
 
73
- Maintenance release prepared on 2026-10-12; see the [release notes](docs/releases/v1.1.1.md). This patch updates documentation and development-only tests, not runtime behavior. Package publication and operational deployment are separate.
73
+ Published maintenance version 1.1.2 addresses #298; see the [historical preparation notes](docs/releases/v1.1.2.md). Package publication and operational deployment are separate.
74
74
 
75
- Development candidate 1.1.2 is unpublished; its [release notes](docs/releases/v1.1.2.md) describe the #298 Claude registry and target-resolution fix. The published version above remains 1.1.1 until publication is independently verified.
75
+ Check [GitHub Releases](https://github.com/abruption/session-peer/releases) and [PyPI](https://pypi.org/project/session-peer/) for available versions. The [preparation notes](docs/releases/v1.2.0.md) record the dated scope and remaining gates; a source version alone does not establish package availability.
76
76
 
77
77
  Experimental handoff is opt-in: local POSIX Claude supports receipt ACKs; Codex and SSH support correlation-only submission, not ACK observation. See the [handoff guide](docs/handoff-runtime.md) for the shipped scope and remaining acceptance gates.
78
78
 
@@ -34,11 +34,11 @@ session-peer 1.0.2による実際のローカル通信です。CodexがClaude Co
34
34
  ### インストール
35
35
 
36
36
  Python 3.9以上が必要です。基本のローカル・SSH CLIに外部Python依存パッケージはありません。
37
- このREADMEが説明するバージョン:**1.1.1**。
37
+ ソースバージョン:**1.2.0**。2026-10-16の公開状況の確認時点で、最後に確認した公開済み安定版は**1.1.2**でした。
38
38
 
39
- 2026-10-12に準備したメンテナンス版の[リリースノート](docs/ja/releases/v1.1.1.md)を参照してください。このパッチはドキュメントと開発用テストを改善し、ランタイムの動作は変更しません。パッケージ公開と本番環境への配備は別です。
39
+ 公開済みメンテナンス版1.1.2は#298を修正します。[過去の準備記録](docs/ja/releases/v1.1.2.md)を参照してください。パッケージ公開と本番環境への配備は別です。
40
40
 
41
- 開発候補1.1.2は未公開です。[リリースノート](docs/ja/releases/v1.1.2.md)は#298のClaude登録情報と対象選択の修正を説明します。公開を個別に確認するまで、上記の公開バージョンは1.1.1です。
41
+ 入手できるバージョンは[GitHub Releases](https://github.com/abruption/session-peer/releases)と[PyPI](https://pypi.org/project/session-peer/)で確認してください。[準備記録](docs/ja/releases/v1.2.0.md)は記載日時点の範囲と残る条件を説明します。ソースのバージョンだけではパッケージの公開状況は確認できません。
42
42
 
43
43
  実験的なhandoffは明示的に選択する機能です。ローカルPOSIX Claudeは受領ACKに対応し、CodexとSSHは相関IDによる送信のみ対応してACKの観察には対応しません。公開済みの範囲と残る検証条件は[handoffガイド](docs/ja/handoff-runtime.md)を参照してください。
44
44
 
@@ -34,11 +34,11 @@ session-peer 1.0.2를 사용해 실제 로컬 요청과 회신을 주고받았
34
34
  ### 설치
35
35
 
36
36
  Python 3.9 이상이 필요합니다. 기본 로컬·SSH CLI는 외부 Python 패키지에 의존하지 않습니다.
37
- 이 README가 설명하는 버전: **1.1.1**.
37
+ 소스 버전: **1.2.0**. 2026-10-16 공개 상태 확인 시점의 마지막 확인 공개 안정판은 **1.1.2**였습니다.
38
38
 
39
- 2026-10-12에 준비한 유지보수 버전의 [릴리스 노트](docs/ko/releases/v1.1.1.md)를 참고하십시오. 이번 패치는 문서와 개발용 테스트를 보완하며 런타임 동작은 바꾸지 않습니다. 패키지 공개와 운영 배포는 별개입니다.
39
+ 공개된 유지보수 버전 1.1.2는 #298을 수정합니다. [과거 준비 기록](docs/ko/releases/v1.1.2.md)을 참고하십시오. 패키지 공개와 운영 배포는 별개입니다.
40
40
 
41
- 개발 후보 1.1.2는 아직 공개되지 않았습니다. [릴리스 노트](docs/ko/releases/v1.1.2.md)는 #298의 Claude 등록 기록 및 대상 선택 수정을 설명합니다. 공개 여부를 별도로 확인하기 전까지 위 공개 버전은 1.1.1입니다.
41
+ 설치할 수 있는 버전은 [GitHub Releases](https://github.com/abruption/session-peer/releases)와 [PyPI](https://pypi.org/project/session-peer/)에서 확인하십시오. [준비 기록](docs/ko/releases/v1.2.0.md)은 해당 날짜의 범위와 남은 조건을 설명하며, 소스 버전만으로 패키지 공개 여부가 확인되는 것은 아닙니다.
42
42
 
43
43
  실험적 handoff는 명시적으로 선택해야 합니다. 로컬 POSIX Claude는 영수증 ACK를 지원하지만, Codex와 SSH는 상관 ID를 이용한 제출만 지원하며 ACK 관찰은 지원하지 않습니다. 공개된 범위와 남은 검증 조건은 [handoff 가이드](docs/ko/handoff-runtime.md)를 참고하십시오.
44
44
 
@@ -34,11 +34,11 @@ in this ~22-second animation, not a screen recording; send success alone is not
34
34
  ### Install
35
35
 
36
36
  Python 3.9+. The core local/SSH CLI has no third-party Python dependencies.
37
- Version covered by this README: **1.1.1**.
37
+ Source version: **1.2.0**. At the 2026-10-16 publication checkpoint, the last verified published stable release was **1.1.2**.
38
38
 
39
- Maintenance release prepared on 2026-10-12; see the [release notes](docs/releases/v1.1.1.md). This patch updates documentation and development-only tests, not runtime behavior. Package publication and operational deployment are separate.
39
+ Published maintenance version 1.1.2 addresses #298; see the [historical preparation notes](docs/releases/v1.1.2.md). Package publication and operational deployment are separate.
40
40
 
41
- Development candidate 1.1.2 is unpublished; its [release notes](docs/releases/v1.1.2.md) describe the #298 Claude registry and target-resolution fix. The published version above remains 1.1.1 until publication is independently verified.
41
+ Check [GitHub Releases](https://github.com/abruption/session-peer/releases) and [PyPI](https://pypi.org/project/session-peer/) for available versions. The [preparation notes](docs/releases/v1.2.0.md) record the dated scope and remaining gates; a source version alone does not establish package availability.
42
42
 
43
43
  Experimental handoff is opt-in: local POSIX Claude supports receipt ACKs; Codex and SSH support correlation-only submission, not ACK observation. See the [handoff guide](docs/handoff-runtime.md) for the shipped scope and remaining acceptance gates.
44
44
 
@@ -34,11 +34,11 @@ session-peer使用各智能体自身的收件箱和队列;接收方智能体
34
34
  ### 安装
35
35
 
36
36
  需要Python 3.9或更高版本。核心本地与SSH CLI没有第三方Python依赖。
37
- 本README说明的版本:**1.1.1**。
37
+ 源码版本:**1.2.0**。在2026-10-16的发布状态检查时,最后确认的已发布稳定版本为**1.1.2**。
38
38
 
39
- 请参阅2026-10-12准备的维护版本的[发布说明](docs/zh-CN/releases/v1.1.1.md)。此补丁改进文档和开发用测试,不改变运行时行为。软件包发布与生产环境部署是两项独立操作。
39
+ 已发布的维护版本1.1.2修复#298;请参阅[历史准备记录](docs/zh-CN/releases/v1.1.2.md)。软件包发布与生产环境部署是两项独立操作。
40
40
 
41
- 开发候选版本1.1.2尚未发布。[发布说明](docs/zh-CN/releases/v1.1.2.md)介绍#298的Claude登记记录和目标选择修复。在单独确认发布之前,上述已发布版本仍为1.1.1。
41
+ 可用版本请查看[GitHub Releases](https://github.com/abruption/session-peer/releases)和[PyPI](https://pypi.org/project/session-peer/)。[准备记录](docs/zh-CN/releases/v1.2.0.md)说明记录日期时的范围与剩余门禁;仅凭源码版本不能确认软件包是否已发布。
42
42
 
43
43
  实验性handoff需要明确选择启用:本地POSIX Claude支持收据ACK;Codex与SSH仅支持关联标识提交,不支持ACK观察。已发布范围与剩余验收条件请参阅[handoff指南](docs/zh-CN/handoff-runtime.md)。
44
44
 
@@ -24,7 +24,9 @@ installation paths.
24
24
 
25
25
  ## Development and history
26
26
 
27
- - [v1.1.2 candidate notes](releases/v1.1.2.md) describe the unpublished #298 Claude PID-record and nondecimal Unicode-name fix prepared on 2026-10-13; CI and publication gates remain separate.
27
+ - [v1.2.0 candidate notes](releases/v1.2.0.md) record the unpublished preparation started on 2026-10-15 and updated on 2026-10-16, the merged six-PR scope and remaining acceptance gates.
28
+
29
+ - [v1.1.2 historical preparation notes](releases/v1.1.2.md) describe #298 and the 2026-10-13 preparation; v1.1.2 was subsequently published. Do not reuse its version or commands.
28
30
 
29
31
  - [v1.1.1 maintenance notes](releases/v1.1.1.md) cover the documentation/test maintenance target prepared on 2026-10-12; runtime behavior is unchanged from 1.1.0. Verify package publication separately.
30
32
 
@@ -121,6 +121,8 @@ persisted queue row. Their existing separate identity contracts remain intact.
121
121
  The broader cross-agent work in #180 remains open; this development feature is
122
122
  not shipped in v1.0.4 and adds no automatic fallback or resubmission.
123
123
 
124
+ The 2026-10-15 review of the queued-input paths in native Codex [0.162.1](https://github.com/openai/codex/tree/092d3acd6bec3e3a14bdc7e7a2810ab628ab759d/codex-rs) did not identify a supported precondition that atomically checks the original writer incarnation. In the inspected source, the lock-acquisition path does not write an incarnation token, a thread's `sessionId` survives resume, and `thread/queue/add` accepts a thread, input and a client message ID rather than a generation precondition. The inspected `turn/steer` path checks `expectedTurnId` under the active-turn lock; session-peer does not use that turn-specific check as a writer generation. These findings are limited to the pinned paths, not a proof about every native API or future version. Writer PID, start-time and lock rechecks, queue IDs, `canAcceptDirectInput` and `sessionId` do not establish the required original-incarnation guarantee; session-peer continues to report Codex `targetGeneration` as `unsupported`. #180 remains open for a separately validated native contract.
125
+
124
126
  `--message TEXT` (short form `-m`) names the text sent to the destination.
125
127
  `--output-format text|json` selects the command result format, not the message
126
128
  format. It is available on `list`, `send`, `doctor`, and `update`; the default is
@@ -483,13 +485,27 @@ prove the queue can accept it.
483
485
 
484
486
  ### SQLite storage boundary
485
487
 
488
+ Standalone `list` remains metadata-only: it does not execute Codex or query its version, and `--codex-bin` does not establish the version for discovery. On macOS, discovery therefore conservatively checks ordinary as well as forced preferences before opening a candidate SQLite database. This blocks stale-home results for older loaders, but can also refuse a valid newer environment whose native loader ignores ordinary values. A refusal is an error, never a successful empty list or a switch to another database; valid results from other agents remain available with the incomplete-discovery error. The diagnostic identifies the storage-configuration ambiguity and asks the operator to review known configuration layers, including effective `com.openai.codex` configuration/requirements and the intended home/storage layout. Changing `--codex-home` alone does not resolve global preference ambiguity. Do not automatically remove preferences, managed profiles or databases to suppress the error. If the native loader legitimately ignores the value, discovery remains conservatively unsupported for that configuration; precise version-aware discovery is a separate improvement. Internal send dry-run discovery reuses the already selected send policy without another probe.
489
+
490
+ For sends and their internal dry-run checks, the macOS preference policy depends on the selected native executable. The exact reviewed Codex 0.162.1 loader accepts only forced values; Codex [0.154.0](https://github.com/openai/codex/blob/6b9826e3aa83b1a5947db50f4332cb9c65f1b340/codex-rs/config/src/loader/macos.rs) reads ordinary as well as forced preferences through `CFPreferencesCopyAppValue`. On macOS, ordinary queue sends and dry-runs run one bounded `--version` child in the selected home and working directory: three seconds for the query and two for cleanup, with 1 MiB stdout and 64 KiB diagnostic limits. Output is never reflected; malformed, unavailable or unreviewed versions conservatively include ordinary preferences rather than refusing solely for their version. Uncertain process cleanup refuses before queue submission, and interruption is propagated after the bounded cleanup attempt. Only the exact reviewed `codex-cli 0.162.1` selects forced-only checks; later versions are not assumed equivalent. Handoff reuses its existing version query and original deadline, then retains the selected policy through submission. The supported 0.154.0 wake path includes ordinary preferences even when an active writer only receives a queue submission. Storage and custom-marker checks repeat before the budget and child boundaries. No new version probe is added outside macOS, no results are cached, and wake support is not expanded. A refusal after known queue submission preserves that submission without resending. These are source-based guards and synthetic regressions, not new native preference or MDM validation.
491
+
492
+ Owned queue and wake children use an existing, strictly resolved physical working directory, including aliases in any ancestor. Project scanning, child `cwd`, POSIX `PWD` and wake `thread/resume.cwd` use that directory. For a saved consumer directory that still exists, both physical and distinct lexical project spellings are checked with the same marker boundaries and custom-marker fallback; this can conservatively refuse an alias configuration. A missing consumer directory still has no layers to inspect. This does not establish an already running writer's startup configuration, and alias/configuration changes after inspection remain possible. The `wake.cwd` result uses this physical spelling too; it can differ from the saved alias.
493
+
494
+ The native loader's layer-list comment mentions `<cwd>/config.toml`, but its pinned [project-layer construction](https://github.com/openai/codex/blob/092d3acd6bec3e3a14bdc7e7a2810ab628ab759d/codex-rs/config/src/loader/mod.rs#L1652) loads `.codex/config.toml` instead. This guard follows that implementation, not the stale comment. A successful Windows Known Folder lookup with an invalid or unbounded path is refused rather than silently falling back to a different directory.
495
+
496
+ Wake preflight checks known storage before reserving its budget, but a later recheck can still refuse after reservation if configuration or writer evidence changes. The translated-native-home route retains its inherited cwd and does not inspect the Windows consumer directory.
497
+
486
498
  The 2026-10-09 source investigation examined native Codex [0.154.0](https://github.com/openai/codex/blob/6b9826e3aa83b1a5947db50f4332cb9c65f1b340/codex-rs/core/src/config/mod.rs) and [0.159.0](https://github.com/openai/codex/blob/687a119f0fcaace47e1f1abcc77cec6c813fd6da/codex-rs/core/src/config/mod.rs). Both resolve SQLite storage from configured `sqlite_home`, then nonempty `CODEX_SQLITE_HOME`, then `CODEX_HOME`; relative environment paths use the native resolved working directory. [Managed requirements](https://github.com/openai/codex/blob/687a119f0fcaace47e1f1abcc77cec6c813fd6da/codex-rs/core/src/config/requirements.rs) can replace configured storage, including command-line overrides. The [native queue path](https://github.com/openai/codex/blob/687a119f0fcaace47e1f1abcc77cec6c813fd6da/codex-rs/tui/src/session_queue_commands.rs) can reuse a running shared server, whose storage is not established by the new client's environment. These are source findings, not new live-delivery or platform validation.
487
499
 
488
- session-peer refuses a nonempty inherited `CODEX_SQLITE_HOME` or a root `sqlite_home` setting in any inspected home's configuration before discovery, dry-run, or queue submission. This includes quoted/escaped root keys and root dotted/table forms, even when the configured path equals the selected home. Unselected nested keys are not root storage settings. Empty environment overrides are removed from native child environments; environment names are case-sensitive on POSIX and case-insensitive on Windows. The guard retains the selected native-home translation where already supported and does not add relocated-storage support.
500
+ The 2026-10-15 investigation of native Codex [0.162.1](https://github.com/openai/codex/tree/092d3acd6bec3e3a14bdc7e7a2810ab628ab759d/codex-rs) found the storage precedence to be managed requirements, then the merged configuration layers, then `CODEX_SQLITE_HOME`, then `CODEX_HOME`. Layers that can set `sqlite_home` include system files, macOS managed profiles, the user's `config.toml`, a profile file selected with `--profile`, and the project layers of the native process working directory (`.codex/config.toml` from the working directory up to the nearest default `.git` root, or only the working directory when no root is found; enabled only for trusted projects). Legacy `[profiles.*]` tables have no storage key. `codex queue` submits through a running app-server daemon when one accepts a connection on the home's `app-server-control/app-server-control.sock`, and otherwise through an embedded server. Native TUIs start such a daemon automatically by default unless excluded, for example with `--no-daemon`. A daemon's QueueStore keeps the database chosen at its startup, while `config/read` rereads the current disk layers; `initialize` reports the home and platform, but the reviewed `initialize`, `config/read` and queue APIs offer no stable attestation contract for the startup SQLite identity. A matching thread UUID or the same server connection does not establish storage identity (a copied database can hold the same UUID), and the queue API has no expected-storage or incarnation precondition. A process that consumes queued messages polls the queue in its own storage. These are source findings, not live-delivery or platform validation.
501
+
502
+ session-peer refuses a nonempty inherited `CODEX_SQLITE_HOME` or a root `sqlite_home` setting in any inspected home's configuration before discovery, dry-run, or queue submission. This includes quoted/escaped root keys and root dotted/table forms, even when the configured path equals the selected home. Unselected nested keys are not root storage settings. Empty environment overrides are removed from native child environments; environment names are case-sensitive on POSIX and case-insensitive on Windows. The guard retains the selected native-home translation where already supported and does not add relocated-storage support. It also refuses a root `sqlite_home` in the system configuration and requirements files (`/etc/codex/config.toml`, `/etc/codex/managed_config.toml`, `/etc/codex/requirements.toml`, or the Known Folder API's ProgramData directory followed by `OpenAI\Codex\config.toml` and `requirements.toml` on Windows) and in macOS managed-profile values, regardless of project trust. A queue submission starts the native process in the inspected home, so the caller's directory adds no project layers. Dry-run checks the same execution plan (home, child working directory, environment, known layers and consumer directory) without queue/app-server children (wake dry-run and ordinary macOS queue dry-run may run the native version probe), and a real send repeats the checks immediately before its effect; neither removes the time gap before native Codex reads its configuration, so a passing dry-run does not guarantee storage agreement for a later send. By user policy, a daemon control socket, live or stale, is neither a refusal reason nor probed: native Codex selects the daemon or embedded server as before, and no storage authority is claimed. Outside the translated-native-home route, dry-run, queue and wake also inspect the project layers of the saved thread directory, where the consuming writer or wake server normally starts; unreadable or malformed thread metadata is refused. Wake runs these storage checks before reserving its per-target budget. Refusal reasons are `sqlite_environment_override`, `sqlite_home_configuration`, `sqlite_home_system_configuration`, `sqlite_home_managed_configuration`, `sqlite_home_project_configuration`, `consumer_directory_unverifiable`, `storage_config_unreadable` and `storage_config_unverifiable`.
503
+
504
+ Each inspected TOML file must be a regular, non-symlink UTF-8 file of at most 1 MiB. On Windows, the system directory is obtained through `SHGetKnownFolderPath(FOLDERID_ProgramData)`, with native Codex's fixed `C:\ProgramData` fallback on API failure; the `ProgramData` environment variable is not used. On macOS, CoreFoundation synchronizes the Codex preference domain and releases owned values. The forced-only policy rechecks forced status after copying and ignores ordinary user preferences; the version-selected conservative policy also reads ordinary values, as described above. Selected base64 strings are bounded to 2 MiB and decode to UTF-8 TOML of at most 1 MiB; synchronization, type, decoding or size errors refuse. Missing TOML files or preference values are allowed. Default project markers stop at the nearest non-directory `.git` entry (metadata only) or a directory containing `HEAD`; symlink markers are conservatively refused; without a marker only cwd applies. `<cwd>/config.toml` is not a project layer. A known root `project_root_markers` override retains a conservative ancestor superset instead of claiming exact custom-marker interpretation. These APIs are covered by mocks; relocated Windows Known Folders and real forced MDM profiles have not been tested. Unreadable, changed, oversized, or lexically unclassifiable files are refused without printing their contents. The dependency-free key classifier supports Python 3.9 and is not a general TOML/schema validator; native Codex still validates other values. Queue and wake recheck this boundary before starting a child. A refusal has `status=refused`, `submitted=false`, and `retryAllowed=false`; valid ordinary outputs and writer-ownership checks remain unchanged. SSH performs this check on the destination, not on the sender's environment.
489
505
 
490
- The home's `config.toml` must be a regular, non-symlink UTF-8 file of at most 1 MiB; missing files are allowed. Unreadable, changed, oversized, or lexically unclassifiable files are refused without printing their contents. The dependency-free key classifier supports Python 3.9 and is not a general TOML/schema validator; native Codex still validates other values. Queue and wake recheck this boundary before starting a child. A refusal has `status=refused`, `submitted=false`, and `retryAllowed=false`; valid ordinary outputs and writer-ownership checks remain unchanged. SSH performs this check on the destination, not on the sender's environment.
506
+ Translated native homes (a WSL relay receiver queueing to native Windows Codex) keep their existing submission contract, but storage verification is not supported for them: this POSIX process cannot inspect the Windows-side home spelling, case rules, environment, or system, managed and project layers. A future strict mode could refuse such paths before any effect; it is not implemented.
491
507
 
492
- This is bounded hardening, not proof of effective native storage for every configuration. Project/system/profile layers, managed requirements, and an existing shared server are not resolved or attested by this guard; configuration can also change after the final check. Do not infer storage agreement from a successful check alone. [#268](https://github.com/abruption/session-peer/issues/268) remains open for that evidence gate and version/platform acceptance. Fake-child fixtures show refusal and environment behavior only; they do not establish actual wrong-target delivery, a security exploit, or new native compatibility. The wake version matrix remains unchanged.
508
+ This is bounded hardening, not proof of effective native storage for every configuration. Not inspected: package-supplied defaults; enterprise cloud configuration bundles; the startup storage of a running shared daemon; a `--profile` selection, `-c` overrides or the environment of a writer that is already running; a writer that started outside the saved thread directory or whose directory no longer exists; and, for a translated native home, the Windows-side system, managed and project layers. Configuration can also change after the final check. Do not infer storage agreement from a successful check alone. [#268](https://github.com/abruption/session-peer/issues/268) remains open for native platform validation of this contract. Fake-child fixtures show refusal and environment behavior only; they do not establish actual wrong-target delivery, a security exploit, or new native compatibility. The wake version matrix remains unchanged.
493
509
 
494
510
  ### Orca and multiple Codex homes
495
511
 
@@ -7,15 +7,15 @@
7
7
  "zh-CN"
8
8
  ],
9
9
  "sources": {
10
- "README.md": "c8c0188cc763a96567aa1198fe17c3bd5a284fe6fae913ddca18d2e0fa643792",
11
- "RELEASING.md": "36e8f1b9afd057b56767bfb6fb5c18e8acca3e7c16d39b0b8f8d05dc22522e3e",
10
+ "README.md": "38d513c6938fafb790d378c0981836adf1e77d0cee969e99a370930b4ed04299",
11
+ "RELEASING.md": "952730a3eb6dfcb1a456b50d6e4918221a07d8fe90b744fc7705c809ea4918d3",
12
12
  "SECURITY.md": "8f018f6f98002312e143609b9734aeb971ca5217e146597c06b57b5645031046",
13
- "docs/README.md": "67353922611866276190c06ba0a4dcf35725057d61c5ceaf3369db175f82fa96",
13
+ "docs/README.md": "e843d78ac9258645e2b4b9251328880b8a645514a66ca3b2a5f1fff99ba37dbc",
14
14
  "docs/agent-adapters.md": "bf185d3121c94829bb412071a25c4d943302e10a6b2e713111e653b8f8c3ea91",
15
15
  "docs/ai-assistant-guide.md": "9624ec96b92fb688fae3be3c94cb3564c77985091be451fbf1f056a1af9b9d9c",
16
16
  "docs/antigravity.md": "f2b5122a0ce6e6fb5bd4d8ed50ce2c8bd2dc9c98ec8ce328405cf7c2cd24229d",
17
17
  "docs/architecture/agent-transports.md": "01a4e3942e87acb476595859f2e37f9653ea1e3bc19ebc68dced1adf20a6966f",
18
- "docs/cli-reference.md": "7fbc82834883a13e91f3a31b058296eefca7117bd7dd08409e44faccc82e1f03",
18
+ "docs/cli-reference.md": "a1aae5b881f4aa939c995d7bc06819d04f808da3b31fd0d5da66c817e1b47e82",
19
19
  "docs/compatibility-v1.md": "7e551aad37a369faff7e370728376763efb54c2c9e9cfd8556a0c19aabc3d103",
20
20
  "docs/contracts/handoff-v1.md": "46a953010c49214bd8f969412f26713384fbe09a0ba78ebf0fef75da40d0d889",
21
21
  "docs/diagnostics.md": "0949e53612eeab2cd7c7bbda498e14d71e9cb1b1189aa7722030cb8702cd8481",
@@ -50,8 +50,9 @@
50
50
  "docs/releases/v1.1.0.md": "66e66c4ca2d18b4da03c169885443ce26af49885fae474e95476b9078e50252f",
51
51
  "docs/releases/v1.1.1.md": "e7d5b6060098be0d4db06a7c2845955ea46084cdecd3fe8e5dc6c44324c09cc0",
52
52
  "docs/releases/v1.1.2.md": "3ffe3d6daa8e403e9f3c5e83ec81c3afa9f10750627b31362990ec5b92326f3a",
53
+ "docs/releases/v1.2.0.md": "e91d7b6ec7468a3b1e7186bdbfb4802a898485a1f1fb2e198f831ea0863b2163",
53
54
  "docs/validation/69-rc.md": "e490c6a9ad0fec9108b91c74922cedac7ddf214ed405f8f5523da22f48a4b222",
54
- "docs/validation/85-antigravity.md": "468ba1702a60c57079730ab5b7545b0b1968f11cc6832f0ac88460664ba87723",
55
+ "docs/validation/85-antigravity.md": "f89b175191cd98ab03d4029b487065133814b3c8dd8de8cd0a5cc367e2579e4f",
55
56
  "docs/wake.md": "cde135da2ea7be21c815bb265e694f737dbe467d8e76bb82eb118e3b86e29d22",
56
57
  "plugins/session-peer/README.md": "a4eeae54caac9ad824d740f7f319561f060bc9c2bbbbf7def2bdd8e36dbcd1c6"
57
58
  }
@@ -23,7 +23,9 @@
23
23
 
24
24
  ## 開発と履歴
25
25
 
26
- - [v1.1.2候補ノート](releases/v1.1.2.md)は2026-10-13に準備した未公開の#298 Claude PID記録と非十進Unicode名の修正を説明します。CIと公開の承認手順は別です。
26
+ - [v1.2.0候補ノート](releases/v1.2.0.md)は2026-10-15に開始し2026-10-16に更新した未公開準備、マージ済み6件のPRの範囲と残る受け入れ条件を記録します。
27
+
28
+ - [v1.1.2の過去の準備記録](releases/v1.1.2.md)は#298と2026-10-13の準備を説明します。その後v1.1.2は公開済みです。バージョンやコマンドを再利用しないでください。
27
29
 
28
30
  - [v1.1.1メンテナンスノート](releases/v1.1.1.md)は2026-10-12に準備したドキュメント・テストのメンテナンス版を説明し、ランタイムの動作は1.1.0と同じです。パッケージ公開は別途確認してください。
29
31
 
@@ -35,6 +35,8 @@ Codex キュー、Antigravity とペアリング済み機器には、この受
35
35
  Codex の書き込みプロセスを再確認しても、後からキューを消費するプロセスを原子的に制限できません。
36
36
  #180 全体は未完了です。v1.0.4 の公開機能ではなく、自動フォールバックや再送も追加しません。
37
37
 
38
+ 2026-10-15 に native Codex [0.162.1](https://github.com/openai/codex/tree/092d3acd6bec3e3a14bdc7e7a2810ab628ab759d/codex-rs) のキュー入力経路を確認しましたが、元の書き込みプロセスの世代を原子的に検査する、利用可能な前提条件は見つかりませんでした。確認したソースでは、ロック取得経路は世代トークンを記録せず、スレッドの `sessionId` は再開後も維持され、`thread/queue/add` は世代の前提条件ではなくスレッド・入力・クライアントメッセージ ID を受け取ります。確認した `turn/steer` 経路はアクティブターンのロック内で `expectedTurnId` を検査しますが、session-peer はこのターン固有の検査を書き込みプロセスの世代として使いません。これは固定した経路に限った調査であり、すべての native API や将来のバージョンで機能が存在しないことを証明しません。PID・開始時刻・ロックの再確認、キュー ID、`canAcceptDirectInput`、`sessionId` は必要な元世代の保証を確立しないため、Codex の `targetGeneration` は引き続き `unsupported` と報告します。#180 は別途検証された native 契約のため未完了のままです。
39
+
38
40
  コマンドの詳細な動作、インストールオプション、トランスポートの制限、および過去の検証結果について以下に説明します。
39
41
  機械consumerは[v1互換性契約](compatibility-v1.md)にも従ってください。
40
42
 
@@ -472,13 +474,27 @@ Codex の検出は、読み取り専用の SQLite 接続を使用して `state_5
472
474
 
473
475
  ### SQLite ストレージの境界
474
476
 
477
+ 単独の `list` はメタデータだけを調べます。Codex の実行やバージョン照会は行わず、`--codex-bin` を指定しても検出用のバージョンが確認されたことにはなりません。そのため macOS では候補の SQLite DB を開く前に、通常の設定と強制設定の両方を保守的に検査します。旧ローダーで既定ホームの古い DB を誤って読むことを防ぎますが、通常の設定を無視する新しいローダーの正常な環境も拒否する場合があります。拒否はエラーとして返し、成功した空一覧や別 DB への切り替えとして扱いません。他のエージェントの正常な結果は検出不完全のエラーとともに保持します。診断ではストレージ設定の曖昧さを示し、運用者に既知の設定層と有効な `com.openai.codex` の設定・要件と意図したホーム・ストレージ構成の確認を求めます。`--codex-home` の変更だけでは全体設定の曖昧さは解消しません。エラーを隠すために設定、管理プロファイルや DB を自動削除しないでください。native ローダーが実際に値を無視していても、この構成の検出は保守的に未対応とし、正確なバージョン別検出は別の改善で扱います。send の事前検証内の検出では、すでに選択した送信方針を再利用し、追加のバージョン照会をしません。
478
+
479
+ 送信とその事前検証では、選択した native 実行ファイルによって macOS 設定の検査方針が異なります。確認した Codex 0.162.1 は強制設定だけを読みますが、Codex [0.154.0](https://github.com/openai/codex/blob/6b9826e3aa83b1a5947db50f4332cb9c65f1b340/codex-rs/config/src/loader/macos.rs) は `CFPreferencesCopyAppValue` で通常の設定も読みます。macOS の通常のキュー送信と事前検証は、選択したホームと作業ディレクトリで `--version` 子プロセスを一度実行します。照会は3秒、後処理は2秒、標準出力は1 MiB、診断出力は64 KiBに制限します。出力内容を外部に返しません。形式が不正、取得不能、未調査のバージョンでは、バージョンだけを理由に拒否せず通常の設定も保守的に調べます。後処理が不確実なら投入前に拒否し、中断は期限内の後処理を試みた後に伝播します。厳密に `codex-cli 0.162.1` の場合だけ強制設定専用にし、後のバージョンも同じとは仮定しません。handoff は既存のバージョン照会と元の期限を再利用し、投入まで方針を保持します。対応する0.154.0の wake 経路は、稼働中の writer にキューだけを投入する場合も通常の設定を調べます。予算予約と子プロセス起動の境界でストレージと独自マーカーを再確認します。macOS 以外では新たなバージョン照会をせず、結果をキャッシュせず、wake の対応範囲も増やしません。確認済みのキュー投入後に拒否しても投入の事実を保持し、再送しません。これはソースに基づく検査と模擬回帰テストであり、新たな native 設定や MDM の実測ではありません。
480
+
481
+ 所有するキューと wake の子プロセスには、祖先の別名も含めて厳密に解決した、存在する物理的な作業ディレクトリを使います。プロジェクト検索、子の `cwd`、POSIX の `PWD`、wake の `thread/resume.cwd` は同じディレクトリです。保存済みの consumer ディレクトリが存在する場合、物理的な表記と異なる論理的な表記の両方を、同じマーカー境界と独自マーカーの代替規則で調べるため、別名設定を保守的に拒否する場合があります。失われた consumer ディレクトリには検査する層がないという既存の扱いを維持します。実行中の writer の起動設定を確認するものではなく、検査後の別名や設定の変更も起こり得ます。 結果の `wake.cwd` もこの物理的な表記を使うため、保存された別名と異なる場合があります。
482
+
483
+ native ローダーの層一覧コメントには `<cwd>/config.toml` とありますが、固定した[プロジェクト層の構成コード](https://github.com/openai/codex/blob/092d3acd6bec3e3a14bdc7e7a2810ab628ab759d/codex-rs/config/src/loader/mod.rs#L1652)は `.codex/config.toml` を読み込みます。この検査は古いコメントではなく実装に従います。Windows Known Folder の取得が成功しても、返されたパスが不正または上限超過の場合、別のディレクトリへ黙って切り替えず拒否します。
484
+
485
+ wake は予算予約前に既知のストレージ設定を調べますが、予約後に設定や書き込みプロセスの証拠が変わると、後続の再検査で拒否される場合があります。変換された native ホームの経路は継承した cwd を維持し、Windows の消費側ディレクトリは調べません。
486
+
475
487
  2026-10-09 のソース調査では native Codex [0.154.0](https://github.com/openai/codex/blob/6b9826e3aa83b1a5947db50f4332cb9c65f1b340/codex-rs/core/src/config/mod.rs) と [0.159.0](https://github.com/openai/codex/blob/687a119f0fcaace47e1f1abcc77cec6c813fd6da/codex-rs/core/src/config/mod.rs) を確認しました。両版は設定済みの `sqlite_home`、空でない `CODEX_SQLITE_HOME`、`CODEX_HOME` の順で SQLite ストレージを選択します。相対的な環境変数のパスは native が解決した作業ディレクトリを基準にします。[管理要件](https://github.com/openai/codex/blob/687a119f0fcaace47e1f1abcc77cec6c813fd6da/codex-rs/core/src/config/requirements.rs) はコマンドライン指定を含むストレージ設定を置き換えられます。[native のキュー経路](https://github.com/openai/codex/blob/687a119f0fcaace47e1f1abcc77cec6c813fd6da/codex-rs/tui/src/session_queue_commands.rs) は稼働中の共有サーバーを再利用できるため、新しいクライアントの環境だけではサーバーのストレージを確認できません。これはソース上の確認であり、新たな実送信やプラットフォーム検証ではありません。
476
488
 
477
- session-peer は継承された `CODEX_SQLITE_HOME` が空でない場合、または調べるホームの設定にルートの `sqlite_home` がある場合、検出、事前検証、キュー投入の前に拒否します。設定パスが選択したホームと同じ場合も拒否し、引用符・エスケープを含むルートキー、ルートのドット区切りキーやテーブルも対象です。選択されていない入れ子のキーはルートのストレージ設定と見なしません。空の環境変数指定は native 子プロセスの環境から除去します。環境変数名は POSIX では大文字と小文字を区別し、Windows では区別しません。既存の native ホームのパス変換は維持し、ストレージの移動には対応しません。
489
+ 2026-10-15 の native Codex [0.162.1](https://github.com/openai/codex/tree/092d3acd6bec3e3a14bdc7e7a2810ab628ab759d/codex-rs) の調査では、ストレージの優先順位は管理要件、統合された設定層、`CODEX_SQLITE_HOME`、`CODEX_HOME` の順でした。`sqlite_home` を設定できる層は、システムファイル、macOS の管理プロファイル、ユーザーの `config.toml`、`--profile` で選択したプロファイルファイル、native プロセスの作業ディレクトリのプロジェクト層(作業ディレクトリから最も近い既定の `.git` ルートまでの `.codex/config.toml`。ルートがなければ作業ディレクトリのみ。信頼済みプロジェクトでのみ有効)です。従来の `[profiles.*]` テーブルにはストレージのキーがありません。`codex queue` は、ホームの `app-server-control/app-server-control.sock` で接続を受け付ける app-server デーモンが稼働中であればそのデーモン経由で、そうでなければ内蔵サーバー経由で投入します。native TUI は `--no-daemon` などで除外しない限り、既定でこのデーモンを自動起動します。デーモンの QueueStore は起動時に選んだデータベースを保持しますが、`config/read` は現在のディスク上の設定層を読み直します。`initialize` はホームとプラットフォームを返しますが、確認した `initialize`、`config/read`、キュー API には起動時の SQLite の同一性を証明する安定した契約がありません。スレッド UUID の一致や同じサーバーへの接続はストレージの同一性を意味せず(コピーしたデータベースにも同じ UUID があり得ます)、キュー API には期待するストレージやプロセス世代の前提条件がありません。キューのメッセージを消費するプロセスは自身のストレージのキューをポーリングします。これはソース上の確認であり、実送信やプラットフォーム検証ではありません。
490
+
491
+ session-peer は継承された `CODEX_SQLITE_HOME` が空でない場合、または調べるホームの設定にルートの `sqlite_home` がある場合、検出、事前検証、キュー投入の前に拒否します。設定パスが選択したホームと同じ場合も拒否し、引用符・エスケープを含むルートキー、ルートのドット区切りキーやテーブルも対象です。選択されていない入れ子のキーはルートのストレージ設定と見なしません。空の環境変数指定は native 子プロセスの環境から除去します。環境変数名は POSIX では大文字と小文字を区別し、Windows では区別しません。既存の native ホームのパス変換は維持し、ストレージの移動には対応しません。 また、システムの設定・要件ファイル(`/etc/codex/config.toml`、`/etc/codex/managed_config.toml`、`/etc/codex/requirements.toml`、Windows では Known Folder API の ProgramData ディレクトリ配下の `OpenAI\Codex\config.toml` と `requirements.toml`)と macOS の管理プロファイルの値にルートの `sqlite_home` がある場合、プロジェクトの信頼状態に関係なく拒否します。キュー投入は調べたホームで native プロセスを起動するため、呼び出し元のディレクトリはプロジェクト層を追加しません。事前検証は キュー・app-server の子プロセスを起動せずに(wake と macOS の通常のキューの事前検証では native のバージョン確認プロセスを実行する場合があります)同じ実行計画(ホーム、子プロセスの作業ディレクトリ、環境、既知の設定層、消費ディレクトリ)を調べ、実際の送信は効果の直前に再確認します。どちらも native Codex が設定を読むまでの時間差をなくさないため、事前検証の成功は次の送信でのストレージ一致を保証しません。ユーザーの方針により、デーモンの制御ソケットは稼働中か残存かに関係なく拒否理由にならず、session-peer は接続も試みません。デーモンと内蔵サーバーの選択は従来どおり native Codex が行い、ストレージの権限は主張しません。変換された native ホームの経路を除き、事前検証、キュー投入、wake は、消費する書き込みプロセスや wake サーバーが通常起動する、保存済みスレッドのディレクトリのプロジェクト層も調べ、スレッドのメタデータを読み取れない場合や形式が不正な場合は拒否します。wake は対象ごとの予算を予約する前にこれらのストレージ検査を行います。拒否理由は `sqlite_environment_override`、`sqlite_home_configuration`、`sqlite_home_system_configuration`、`sqlite_home_managed_configuration`、`sqlite_home_project_configuration`、`consumer_directory_unverifiable`、`storage_config_unreadable`、`storage_config_unverifiable` です。
492
+
493
+ 調べる TOML ファイルは最大 1 MiB の UTF-8 通常ファイルであり、シンボリックリンクであってはなりません。Windows のシステムディレクトリは `SHGetKnownFolderPath(FOLDERID_ProgramData)` で取得し、API 失敗時は native Codex と同じ固定値 `C:\ProgramData` を使います。`ProgramData` 環境変数は使用しません。macOS では CoreFoundation で Codex の設定ドメインを同期し、所有値を解放します。強制設定専用の方針ではコピー後に強制状態を再確認し、通常のユーザー設定を無視します。バージョンで選ぶ保守的な方針では、上記のとおり通常の設定も読みます。選択する base64 文字列は最大 2 MiB、デコード後の UTF-8 TOML は最大 1 MiB です。同期・型・デコード・サイズのエラーは拒否します。TOML ファイルや設定値の欠落は許可します。既定の探索は最も近い非ディレクトリの `.git` 項目(metadata のみ確認)、または `HEAD` を持つ .git ディレクトリで止まります。シンボリックリンクのマーカーは保守的に拒否し、ルートがなければ作業ディレクトリだけを調べます。`<cwd>/config.toml` はプロジェクト層ではありません。既知の設定にルートの `project_root_markers` 指定があれば、カスタムマーカーを正確に解釈したとは主張せず、上位ディレクトリ全体を保守的に調べます。API はモックで検証しており、移動された実際の Windows Known Folder や強制 MDM プロファイルは未検証です。読み取り不能、変更、サイズ超過、キー構文を分類できない場合は内容を表示せず拒否します。外部依存のないキー分類器は Python 3.9 に対応しますが、完全な TOML・スキーマ検証器ではありません。他の値は引き続き native Codex が検証します。キュー投入と wake は子プロセスの起動前にこの境界を再確認します。拒否結果は `status=refused`、`submitted=false`、`retryAllowed=false` となり、通常の既存出力と書き込みプロセスの所有権検査は変わりません。SSH では送信元の環境ではなく送信先で検査します。
478
494
 
479
- ホームの `config.toml` は最大 1 MiB の UTF-8 通常ファイルであり、シンボリックリンクであってはなりません。ファイルが存在しなくても構いません。読み取り不能、変更、サイズ超過、キー構文を分類できない場合は内容を表示せず拒否します。外部依存のないキー分類器は Python 3.9 に対応しますが、完全な TOML・スキーマ検証器ではありません。他の値は引き続き native Codex が検証します。キュー投入と wake は子プロセスの起動前にこの境界を再確認します。拒否結果は `status=refused`、`submitted=false`、`retryAllowed=false` となり、通常の既存出力と書き込みプロセスの所有権検査は変わりません。SSH では送信元の環境ではなく送信先で検査します。
495
+ 変換された native ホーム(WSL の relay 受信側から native Windows Codex へのキュー投入)は既存の投入契約を維持しますが、ストレージ検証には対応していません。この POSIX プロセスは Windows 側のホーム表記、大文字小文字の規則、環境、システム・管理・プロジェクト層を調べられません。このような経路を効果の前に拒否する厳格モードは将来可能ですが、実装していません。
480
496
 
481
- これは範囲を限定した防御の強化であり、すべての設定で native ストレージが一致する証明ではありません。プロジェクト・システム・プロファイルの設定層、管理要件、既存の共有サーバーをこの検査で解決・証明することはありません。最後の検査後に設定が変わる場合もあります。検査の成功だけからストレージの一致を推測しないでください。[#268](https://github.com/abruption/session-peer/issues/268) は、この証拠とバージョン・プラットフォームの受け入れ検証のため未完了のまま維持します。擬似子プロセスのテストが示すのは拒否と環境処理のみであり、実際の誤送信、セキュリティ上の悪用、新たな native 互換性を証明しません。wake の対応バージョン範囲は変わりません。
497
+ これは範囲を限定した防御の強化であり、すべての設定で native ストレージが一致する証明ではありません。調べないものは、パッケージ既定の設定、エンタープライズのクラウド設定バンドル、実行中の共有デーモンの起動時ストレージ、すでに実行中の書き込みプロセスの `--profile` による選択・`-c` による上書き・環境変数、保存済みスレッドのディレクトリ以外で起動したかディレクトリが失われた書き込みプロセス、変換された native ホームの Windows 側のシステム・管理・プロジェクト層です。最後の検査後に設定が変わる場合もあります。検査の成功だけからストレージの一致を推測しないでください。[#268](https://github.com/abruption/session-peer/issues/268) は、この契約の native プラットフォーム検証のため未完了のまま維持します。擬似子プロセスのテストが示すのは拒否と環境処理のみであり、実際の誤送信、セキュリティ上の悪用、新たな native 互換性を証明しません。wake の対応バージョン範囲は変わりません。
482
498
 
483
499
  ### Orca と複数の Codex ホーム
484
500
 
@@ -0,0 +1,41 @@
1
+ # v1.2.0リリース候補
2
+
3
+ ## 範囲
4
+
5
+ 公開版1.1.2を基に2026-10-15に準備しました。候補は未公開で、2026-10-18のマイルストーン目標は公開の約束ではありません。準備PRは対象6件のPRを統合したmain上でバージョンと文書のみを変更します。
6
+
7
+ 以下の順で順次統合した後、2026-10-16に更新しました。統合ソースの基準は`21a0be0c0c5bcb8bca214d90a873b7479d7ba97a`で、最終リリース準備・公開コミットではありません。PR #315は最終コミットのローカル検証・CI・レビューのためオープンのままです。
8
+
9
+ | PR | mainへのマージコミット |
10
+ | --- | --- |
11
+ | #305 | `3392c561e8b8b3221c8c5fcad6077cad8f7becd8` |
12
+ | #311 | `57c42d4a97b351de41a6180b7a05a0ec018d0c4c` |
13
+ | #310 | `10a6da72b8b94f08b6b3b2ff70f581aadf548279` |
14
+ | #308 | `b04e46c4e641fd0defab72b96c26d0612d0d6a5e` |
15
+ | #313 | `9c625bebb21dec2519214889fc60cc3f362142c1` |
16
+ | #314 | `21a0be0c0c5bcb8bca214d90a873b7479d7ba97a` |
17
+
18
+ #311のmacOS検出はメタデータのみの方針を維持します。単独listはCodexの実行やバージョン照会を行わず、通常値と強制値の両方を保守的に検査します。通常値を無視する新しいnative環境も拒否する場合があります。send/dry-runは制限されたnativeバージョン証拠を使い、正確にレビューした0.162.1のみ強制値専用検査を選択します。旧版・確認不能・未レビュー版では通常値も検査します。物理child cwdと消費側の別名経路検査は既知の設定の曖昧さを減らすだけで、起動時の保存先や原子的な識別の不確実性は解消しません。
19
+
20
+ send/dry-runのバージョン照会は3秒でタイムアウトし、別途最大2秒の後処理時間を認めます。メタデータのみのlistにはこの照会を含みません。
21
+
22
+ 原因不明のRelay exit139と別のローカルtransport生成・終了診断は#316で監視します。再実行成功は原因・関連性・修正の証拠ではありません。テスト・監査・保護規則を迂回しません。
23
+
24
+ ## マージ済みの候補範囲
25
+
26
+ - PR #311:追加の設定レイヤーにある既知のCodex保存先変更を拒否し、作用前にqueue実行計画を検査します。共有daemonの経路選択はnativeに任せ、検査成功を実効保存先の証明としません。
27
+ - PR #310:Codexの対象世代は未対応のままとし、否定的な証拠のテストを追加します。writerロック、queue ID、turn IDは元の世代の原子的な一致を証明しません。
28
+ - PR #314:危険・古いチャネル、保持期間、復元が確認された履歴の明示的な隔離、collector再起動時の確定済みACK分類保持をオフラインでテストします。新しいランタイム対応は追加しません。
29
+ - PR #305:macOS/Linux Antigravity 1.3.3の登録後の限定的検証を保存します。Antigravityは安定版対応ではなく実験的機能のままです。
30
+ - PR #313:2026-10-13のmacOS起動・受信側bridgeの過去の証拠を保存し、ownerの受信と呼び出し側実行、出所の限界を区別します。
31
+ - PR #308:隔離したCodex初回入力probeを強化します。サーバー履歴を確認できない場合は安全側に拒否するため、未保存の空TUIは拒否される場合があります。26件の回帰テストには未対応API例を含み、一般的な初回入力対応の証拠ではありません。
32
+
33
+ ## 検証と残る条件
34
+
35
+ 対象6件のPRはマージ済みですが、PR #315には最終コミットのレビュー・CI、単独ファイル再生成の検査、翻訳ハッシュ、全プラットフォームテスト、隔離wheel/sdistインストールと最新の依存関係監査が必要です。各ブランチの成功は最終準備ツリーの証拠ではありません。別途の承認による準備PRのマージ後、正確なmain CI成功、SHA256SUMSとrelease-provenance.jsonを含む不変ドラフト資産7個と証明の確認、必須の人手によるpypi環境承認が必要です。この準備はPR #315のマージ、タグ・ドラフト作成、ワークフロー実行、公開、配備の承認ではありません。
36
+
37
+ リリース準備PRは対象6件のPRをすべてマージした後、最後にマージします。統合mainを反映した準備PRの最終コミットを更新・レビューし、過去の承認をv1.2.0の承認とみなしません。準備ブランチのCIとローカル統合成果物は予行検証の証拠であり、公開用リリース資産ではありません。最終リリースビルド前に、4言語READMEの状態案内を公開の前後によらず正確な表現で固定します。保護された最終mainのCI成功後、承認済み準備ワークフローでその正確なmainコミットから資産を再ビルド・検証し、公開前にSHA256SUMSとrelease-provenance.jsonを含む不変資産7個とその証明をすべて確認します。公開時は実際の公開証拠に基づく別の文書記録を追加します。固定済みメタデータを変えるために不変資産を再ビルド・置換せず、公開完了を先に宣言しません。
38
+
39
+ Issue #180、#181、#268、#304、#306、#307は未完了のままです。native Codex世代・ACK、完全な保存先検証、一般的な空TUI入力、Antigravity安定版対応、残るnative・プラットフォーム受け入れ条件は提供しません。固定handoff契約とfixtureは変更しません。submitted/queuedは消費やACKではなく、unknownは自動再送を許可しません。
40
+
41
+ プラグインと別管理スキルのバージョンは独立し変更しません。新しい実SSH、Relay、MCP、OAuth、フリート、nativeエージェントの受け入れ証拠は主張しません。過去のRC4 ACK証拠は20/21のままで、#161は原因未確定の監視項目です。パッケージ公開に本番配備は含まず、Control/Relay配備と各端末の更新には別途の承認・検証が必要です。
@@ -0,0 +1,97 @@
1
+ # #85 Antigravityアダプター開発検証
2
+
3
+ 2026-09-17; ローカルブランチ `feat/85-antigravity-adapter`、分離されたワークツリー `/tmp/session-peer-85`、#47 `993d04d` ベース。中継への依存、リリース、リモートプッシュ、PRなし。バージョンは開発メタデータとして0.8.0のまま維持。この機能は公開された0.8.0ディストリビューションには含まれていません。Issue: https://github.com/abruption/session-peer/issues/85
4
+
5
+ ## 実装内容
6
+
7
+ スタンドアロンソースにおけるオプトインの登録済みセッションアダプター、ローカル/SSHのlistおよびsend、doctor機能、正確なUUID/ホーム/プロセス識別および世代チェック、同一UID限定のプライベートフレーム化ソケット、制限されたリクエスト/ライフタイム/ネイティブサブプロセス、同世代内のリクエスト重複排除/競合処理、シグナルクリーンアップおよび古いプロセスの再起動。送信者検出には一意の登録済み先祖が必要です。MCP一覧表示は、3番目の組み込みアダプターが追加された際にも明示的なエージェント許可リストを保持します。
8
+
9
+ ## 証拠
10
+
11
+ - macOS Python 3.14: オプションのMCP SDKをインストールした状態で332件のテストに合格(実際のMCP stdioテストを含む)。SDKなしの場合: 332件のテスト、2件のオプションスキップ。
12
+ - KR Ubuntu Python 3.12: 17件のアダプターテストに合格。実際のUnixソケット、ダミーのネイティブ実行可能ファイル、SIGTERMクリーンアップおよび古いプロセスの再起動フィクスチャ、モデル呼び出しなし。
13
+ - wheel/sdistをビルドし、分離された仮想環境に個別にインストール。CLIブリッジのヘルプおよび登録済み限定の一覧表示をスモークテスト。グローバルインストールなし。
14
+ - 実際のKR agy 1.2.4 TUI: ユーザーがツールランナーを通じて制限付きブリッジを起動。ワークスペースが別のユーザーのディレクトリ下にあったにもかかわらず、ソースストリーミングされたSSH `list` が正しいubuntuホームを検出。2つの異なる統合マーカーがそれぞれ1つのSYSTEM受信レコードと1つの正確なMODEL ACKを生成。重複リクエストは抑制され、同一IDで本文が変更されたものや古い世代のリクエストは拒否された。ドライランはネイティブ配信を呼び出さなかった。構造化 `consumptionConfirmed` はfalseのままであったが、独立したトランスクリプト観測によりこれらのテストACKが確認された。
15
+ - 明示的なブリッジ停止によりソケットと登録を削除。その後のSSH listは登録済みセッションなしを返した。ユーザーTUIは元のcwdで存続。リモートのテストソース/テストは削除された。スプリットロック競合を回避するため、UIDごとのプライベートランタイムディレクトリに1つの空のロックファイルが意図的に残されているが、アクティブなブリッジ/ソケット/登録は残っていない。
16
+
17
+ 詳細なサニタイズ済み証拠はローカルの `/tmp/session-peer-85-evidence/` にあります:
18
+ `list.json`、`send.json`、`observation.json`、`cleanup.json`、`linux-tests.log`、`full-tests.log`。最初のライブテストのトランスクリプトマーカーは、`cleanup.json` 内で2回目のテストマーカーとともに保持されています。`send.json` には2回目の実行が含まれています。生の環境、トークン、認証情報、または無関係なトランスクリプトは収集されませんでした。
19
+
20
+ ## 制限事項 / 今後のステップ
21
+
22
+ これは実験的な明示的登録ワークフローです。CLIサイドカーの自動起動、ヘッドレスライターの代替、無人登録、永続的な送信トレイ、自動ACK/wait/wake、UID間アクセス、または厳密に1回の主張はありません。ネイティブの送信者はTUIのagentapiアイデンティティです。説明的なFromヘッダーは暗号論的な送信者証明ではありません。新しい実装のライブネイティブテストはLinuxです。macOSにはプロトコル/ライフサイクルフィクスチャと以前のネイティブPoCがありますが、このブランチのライブネイティブテストではありません。Windowsブリッジはサポートされていません。Windows CIおよびPython 3.9の実行はローカルでは実行されませんでした。SIGKILLは同期的にクリーンアップできません。再起動では排他ロックを取得した後にのみ古いエントリが削除されます。PIDポーリングは、検証とagentapi呼び出しの間のすべてのプロセス終了競合を排除することはできません。
23
+
24
+ 以前のKR PoCでは、7つのメッセージを使用してビジー配信、SSH切断、ブリッジおよびTUIの再起動を実証しました。これらの結果はこの実装に役立てられましたが、このブランチのライブ実行としてはカウントされません。製品レベルの再接続耐久性、長時間実行オペレーション、およびペアリング/中継の統合は、引き続き個別のv0.9/RC作業となります。
25
+
26
+ ## 2026-10-13: CLI 1.3.3 の受け入れ試験 (#304)
27
+
28
+ この記録は、上記の 2026-09-17 開発ブランチの検証とは別です。
29
+ 基準は公開済み session-peer 1.1.1、コミット b48144bdf2ad1569031562136f5a60e33780020e です。
30
+ 両環境の native CLI は 1.3.3、専用 TUI のモデルは Gemini 3.8 Flash (Low) でした。
31
+ アダプターは実験段階のままです。リリースの公開、一般的なバージョン互換性、
32
+ Windows、sidecar の自動起動、可用性の保証を意味しません。
33
+
34
+ ### 確認した証拠
35
+
36
+ - macOS 27.0.1 arm64 / Python 3.15.0 と Ubuntu 24.04.5 arm64 / Python 3.12.3 で、
37
+ Antigravity アダプターのテストが各 23 件成功しました。owner と native 実行のモック、
38
+ 実際の Unix socket・子プロセス fixture は、実モデルとの統合試験ではありません。
39
+ - インストール済み CLI の引数パーサー試験は各環境で 7 件成功しました。先頭のダッシュ、
40
+ 区切り、複数行の韓国語、および宛先・タイトルの保持を確認しました。空の HOME、
41
+ 最小限の環境、制限付き loopback スタブを使い、認証情報や成功する実配信は使用していません。
42
+ - 専用の受信 TUI の通常のターミナルツールから、制限付き bridge を登録しました。
43
+ macOS ローカル、Linux ローカル、macOS→Linux の source-streamed SSH は native exit zero を
44
+ 返し、各 TUI でそれぞれ異なる正確な返信マーカーを確認しました。
45
+ - 制限付きの合成応答を生成し、TUI が作業中の状態を表示している間にも送信しました。
46
+ その応答の後に各返信を確認しました。日時を限定した UI 観察であり、スケジューリング、
47
+ 遅延時間、すべての busy 状態の保証ではありません。
48
+ - macOS の dry-run は native 提出なしで終了しました。同じ ID・本文の再照会はキャッシュ済み
49
+ 重複結果を返し、同じ ID で異なる本文は拒否しました。SSH 経路で別の generation を指定した
50
+ 要求も native 呼び出し前に拒否しました。
51
+ - 両環境で bridge を明示的に停止すると、検出一覧から登録が消えました。
52
+ 稼働中の両 TUI から再登録すると generation が変わり、元の generation に固定した
53
+ 要求はローカルと SSH 経路で拒否されました。
54
+ fixture は SIGTERM・SIGINT・SIGHUP の後始末、再起動後の generation 変更、
55
+ 同じ lock inode の保持も検査します。
56
+ - 実際の試験 bridge に SIGKILL を送った後、残った登録と socket は検出一覧から除外されました。
57
+ 所有 TUI から再登録すると、同じ lock inode を保持したまま generation が変わりました。
58
+ 両環境で実際の owner 終了後の後始末を確認しました。native TUI の再起動後は古い
59
+ generation の要求が拒否され、新しい generation への送信には正確な別の返信を確認しました。
60
+ - Mac→Linux と Linux→Mac の両方向で、native TUI の通常のツールから実際に CLI 送信し、
61
+ 方向ごとに異なる返信を確認しました。本文中の返信先は認証や送信権限にはなりません。
62
+ - 実際の SSH 子プロセスの接続を切る制限付き障害注入では、完全なリモート JSON 応答の
63
+ 提出証拠は保持され、12 バイトだけを渡した応答は unknown のままでした。
64
+ 両方で受信 TUI の返信を観察しましたが、要求を再送していません。
65
+ 制御された切断試験であり、すべてのネットワーク障害の結果を保証しません。
66
+ - MCP SDK 1.30 のローカルポリシー経路で、許可されていない agent の拒否、dry-run、
67
+ 実際の send と TUI の返信を確認しました。paired Relay や custom home・generation の
68
+ 固定対応を示すものではありません。
69
+ - 分離した Python 3.13 環境の全基本 suite は 876 件実行、37 件スキップで成功しました。
70
+ MCP SDK 追加後は MCP 統合テスト全 28 件を含め、880 件実行、33 件スキップで成功しました。
71
+ PR head `4087149` の CI は全 28 件成功しました。最終文書変更 head の検証は別途必要です。
72
+ - JSON の消費確認は常に false のままでした。TUI の返信観察はその試験メッセージの
73
+ 別の証拠であり、新しい自動 ACK・待機機能ではありません。
74
+
75
+ ### 失敗記録と正式対応への残りの条件
76
+
77
+ macOS で最初に shell-background 起動した際は、必要な祖先プロセスを確認できず登録を拒否しました。
78
+ ターミナルツールから foreground の長時間コマンドとして実行すると登録できました。
79
+ シェルを切り離しても bridge と TUI の祖先関係が保持されるとは仮定しないでください。
80
+ 最初の Linux fixture 転送では MCP モジュールが抜け、import が 1 件失敗しました。
81
+ 追跡対象のソースを転送した後、全 23 件が成功しました。試験準備の失敗であり、製品修正の証拠ではありません。
82
+
83
+ 追加テストは起動失敗のキャッシュと再試行禁止、UTF-8 の正確な 32 KiB 境界を検査します。
84
+ 再起動を越えた重複防止や unknown 結果に副作用がないことは証明せず、自動再送は禁止です。
85
+ 最初の連続試験 A はユーザーの Tailscale 更新で中断しました。製品の不具合とも成功とも扱いません。
86
+ 新しい試験 B は 04:23 UTC から 1,802.819 秒間実行しました。各ホストの検出 31 回と
87
+ dry-run 31 回はすべて成功し、新規送信 4 件と各 TUI の異なる返信 4 件を確認しました。
88
+ 再送はありません。bridge RSS は Mac で 61,680→61,968 KiB、Linux で
89
+ 47,204→47,228 KiB でした。長期可用性やメモリリークがないことの保証ではありません。
90
+ 両試験 bridge と専用 TUI を停止・終了し、検出は空、登録・ソケットは削除、lock は保持しました。
91
+ Linux の専用ソース転送フォルダーも削除しました。
92
+ 上記の実ライフサイクル、切断、双方向経路の証拠は、日時と検証環境を限定した結果です。
93
+ Claude・Codex・Antigravity 全体の相互運用と paired Relay 配信は再試験しておらず、
94
+ managed sidecar・Windows とともに別の機能範囲です。限定された Mac/Linux の手動 bridge
95
+ 対応の必須前提にはしません。実験段階を維持し、正式対応への変更やランタイム動作の変更はしていません。
96
+ 公式 sidecar 文書は管理された起動を説明していますが、祖先プロセスに結び付く現在の bridge との
97
+ 互換性は別途調査が必要です。グローバル sidecar 設定、認証情報のコピー、運用環境への配備は行っていません。
@@ -23,7 +23,9 @@
23
23
 
24
24
  ## 개발과 이력
25
25
 
26
- - [v1.1.2 후보 노트](releases/v1.1.2.md)는 2026-10-13에 준비한 미공개 #298 Claude PID 기록 및 비십진 유니코드 이름 수정을 설명합니다. CI와 공개 승인 절차는 별개입니다.
26
+ - [v1.2.0 후보 노트](releases/v1.2.0.md)는 2026-10-15에 시작해 2026-10-16에 갱신한 미공개 준비, 병합된 PR 6개 범위와 남은 수락 조건을 기록합니다.
27
+
28
+ - [v1.1.2 과거 준비 기록](releases/v1.1.2.md)은 #298과 2026-10-13 준비를 설명하며, 이후 v1.1.2가 공개됐습니다. 버전이나 명령을 재사용하지 마십시오.
27
29
 
28
30
  - [v1.1.1 유지보수 노트](releases/v1.1.1.md)는 2026-10-12에 준비한 문서·테스트 유지보수 버전을 설명하며 런타임 동작은 1.1.0과 같습니다. 패키지 공개는 별도로 확인하십시오.
29
31
 
@@ -35,6 +35,8 @@ Codex 큐, Antigravity와 페어링 기기는 이 수신 프로세스 세대 보
35
35
  Codex의 작성자 재확인만으로 나중에 큐를 소비하는 작성자를 원자적으로 제한할 수는 없습니다.
36
36
  #180의 전체 작업은 아직 열려 있습니다. v1.0.4에 발행된 기능이 아니며 자동 대체 전송·재전송도 없습니다.
37
37
 
38
+ 2026-10-15 native Codex [0.162.1](https://github.com/openai/codex/tree/092d3acd6bec3e3a14bdc7e7a2810ab628ab759d/codex-rs)의 큐 입력 경로를 검토했지만, 원래 쓰기 프로세스의 세대를 원자적으로 검사하는 지원 가능한 전제조건은 찾지 못했습니다. 확인한 소스에서 잠금 획득 경로는 세대 토큰을 기록하지 않고, 스레드의 `sessionId`는 재개 후에도 유지되며, `thread/queue/add`는 세대 전제조건 대신 스레드·입력·클라이언트 메시지 ID를 받습니다. 확인한 `turn/steer` 경로는 활성 턴 잠금 안에서 `expectedTurnId`를 검사하지만, session-peer는 이 턴 전용 검사를 쓰기 프로세스의 세대로 사용하지 않습니다. 이는 고정된 경로에 한정된 조사이며 모든 native API나 향후 버전의 기능 부재를 증명하지 않습니다. PID·시작 시각·잠금 재검사, 큐 ID, `canAcceptDirectInput`, `sessionId`로는 필요한 원본 세대 보장을 확립할 수 없으므로 Codex `targetGeneration`은 계속 `unsupported`로 보고합니다. #180은 별도로 검증된 native 계약을 위해 열린 상태로 유지합니다.
39
+
38
40
  명령어의 상세 동작, 설치 옵션, 전송 한계 및 과거 검증 내역은 아래와 같습니다.
39
41
  기계 소비자는 [v1 호환성 계약](compatibility-v1.md)도 따라야 합니다.
40
42
 
@@ -469,13 +471,27 @@ Codex 검색은 읽기 전용 SQLite 연결을 사용하여 `state_5.sqlite`를
469
471
 
470
472
  ### SQLite 저장소 경계
471
473
 
474
+ 독립적인 `list`는 메타데이터만 조회합니다. Codex를 실행하거나 버전을 조회하지 않으며, `--codex-bin`을 지정해도 목록 조회에 사용할 버전이 확인되는 것은 아닙니다. 따라서 macOS에서는 후보 SQLite DB를 열기 전에 일반 설정과 강제 설정을 모두 보수적으로 검사합니다. 구버전 로더에서 기본 홈의 오래된 DB를 잘못 조회하는 것을 막지만, 일반 설정을 무시하는 최신 로더의 정상 환경도 거부할 수 있습니다. 거부는 오류로 반환하며, 성공한 빈 목록이나 다른 DB로의 우회로 바꾸지 않습니다. 다른 에이전트의 정상 결과는 조회 불완전 오류와 함께 유지합니다. 진단은 저장소 설정의 모호함을 알리고, 운영자가 알려진 설정 계층과 유효한 `com.openai.codex` 설정·요건과 의도한 홈·저장소 구성을 확인하도록 안내합니다. `--codex-home`만 바꿔서는 전역 설정의 모호함이 해소되지 않습니다. 오류를 없애려고 설정, 관리 프로필이나 DB를 자동 삭제하지 마세요. native 로더가 실제로 해당 값을 무시하더라도 이 구성의 목록 조회는 보수적으로 미지원이며, 정확한 버전별 조회 지원은 별도 개선으로 다룹니다. send dry-run 내부의 목록 확인은 이미 선택한 전송 정책을 재사용하며 추가 버전 조회를 하지 않습니다.
475
+
476
+ 전송과 그 내부 dry-run 검사에서는 선택한 native 실행 파일에 따라 macOS 설정 검사 정책이 달라집니다. 소스를 확인한 Codex 0.162.1은 강제 설정만 읽지만, Codex [0.154.0](https://github.com/openai/codex/blob/6b9826e3aa83b1a5947db50f4332cb9c65f1b340/codex-rs/config/src/loader/macos.rs)은 `CFPreferencesCopyAppValue`로 일반 설정도 읽습니다. macOS의 일반 큐 전송과 dry-run은 선택한 홈과 작업 디렉터리에서 `--version` 자식 프로세스를 한 번 실행합니다. 조회 3초와 정리 2초로 제한하고 표준 출력은 1 MiB, 진단 출력은 64 KiB까지 받습니다. 출력 내용은 반사하지 않으며, 형식이 잘못됐거나 확인할 수 없거나 소스를 검토하지 않은 버전은 버전만으로 거부하지 않고 일반 설정도 보수적으로 검사합니다. 프로세스 정리가 불확실하면 큐 제출 전에 거부하고, 중단 요청은 제한된 정리를 시도한 뒤 전달합니다. 정확히 `codex-cli 0.162.1`일 때만 강제 설정 전용 검사를 선택하며 이후 버전을 같다고 추정하지 않습니다. handoff는 기존 버전 조회와 원래 기한을 재사용하고 제출까지 선택한 정책을 유지합니다. 지원하는 0.154.0 wake 경로는 활성 writer에게 큐만 제출할 때도 일반 설정을 검사합니다. 예산 예약 및 자식 프로세스 실행 경계에서 저장소와 사용자 지정 마커를 다시 검사합니다. macOS 이외에는 새 버전 조회를 추가하지 않고 결과를 캐시하지 않으며 wake 지원 범위도 늘리지 않습니다. 확인된 큐 제출 이후 거부되더라도 제출 사실을 유지하고 다시 보내지 않습니다. 소스 기반 검사와 모의 회귀 테스트일 뿐 새로운 native 설정이나 MDM 실측은 아닙니다.
477
+
478
+ 직접 시작하는 큐 및 wake 자식 프로세스는 상위 경로의 별칭까지 해석한, 실제로 존재하는 물리적 작업 디렉터리를 사용합니다. 프로젝트 검색, 자식 `cwd`, POSIX `PWD`, wake의 `thread/resume.cwd`가 같은 디렉터리를 사용합니다. 저장된 consumer 디렉터리가 존재하면 물리적 경로와 서로 다른 논리적 경로를 같은 마커 경계 및 사용자 지정 마커 대체 규칙으로 모두 검사하므로 별칭 설정을 보수적으로 거부할 수 있습니다. 사라진 consumer 디렉터리는 검사할 계층이 없다는 기존 처리를 유지합니다. 실행 중인 writer의 시작 설정이 확인되는 것은 아니며, 검사 후 별칭이나 설정이 바뀔 가능성도 남습니다. 결과의 `wake.cwd`도 이 물리적 경로를 사용하므로 저장된 별칭 표기와 다를 수 있습니다.
479
+
480
+ native 로더의 계층 목록 주석에는 `<cwd>/config.toml`이 있지만, 고정된 [프로젝트 계층 구성 코드](https://github.com/openai/codex/blob/092d3acd6bec3e3a14bdc7e7a2810ab628ab759d/codex-rs/config/src/loader/mod.rs#L1652)는 `.codex/config.toml`을 불러옵니다. 이 검사는 오래된 주석이 아니라 실제 구현을 따릅니다. Windows Known Folder 조회가 성공했는데 반환 경로가 잘못됐거나 크기 제한을 넘으면 다른 디렉터리로 조용히 대체하지 않고 거부합니다.
481
+
482
+ wake는 예산 예약 전에 알려진 저장소 설정을 검사하지만, 예약 후 설정이나 쓰기 프로세스 증거가 바뀌면 후속 재검사에서 거부될 수 있습니다. 변환된 native 홈 경로는 상속된 cwd를 유지하며 Windows 소비자 디렉터리는 검사하지 않습니다.
483
+
472
484
  2026-10-09 소스 조사에서는 native Codex [0.154.0](https://github.com/openai/codex/blob/6b9826e3aa83b1a5947db50f4332cb9c65f1b340/codex-rs/core/src/config/mod.rs)과 [0.159.0](https://github.com/openai/codex/blob/687a119f0fcaace47e1f1abcc77cec6c813fd6da/codex-rs/core/src/config/mod.rs)을 확인했습니다. 두 버전 모두 설정된 `sqlite_home`, 비어 있지 않은 `CODEX_SQLITE_HOME`, `CODEX_HOME` 순으로 SQLite 저장소를 선택합니다. 상대 환경 변수 경로의 기준은 native에서 결정한 작업 디렉터리입니다. [관리자 요구사항](https://github.com/openai/codex/blob/687a119f0fcaace47e1f1abcc77cec6c813fd6da/codex-rs/core/src/config/requirements.rs)은 명령행 재정의를 포함한 저장소 설정을 바꿀 수 있습니다. [native 큐 경로](https://github.com/openai/codex/blob/687a119f0fcaace47e1f1abcc77cec6c813fd6da/codex-rs/tui/src/session_queue_commands.rs)는 이미 실행 중인 공유 서버를 재사용할 수 있으므로 새 클라이언트의 환경만으로 서버의 저장소를 확인할 수 없습니다. 이는 소스 조사 결과이며 새로운 실제 전송이나 플랫폼 검증이 아닙니다.
473
485
 
474
- session-peer는 상속된 `CODEX_SQLITE_HOME`이 비어 있지 않거나 검사하는 홈의 설정에 루트 `sqlite_home`이 있으면 발견, 사전 검증, 큐 제출 전에 거부합니다. 설정 경로가 선택한 홈과 같아도 거부하며, 따옴표·이스케이프가 있는 루트 키와 루트의 점 구분 키·테이블도 포함합니다. 선택되지 않은 하위 키는 루트 저장소 설정으로 취급하지 않습니다. 빈 환경 변수 재정의는 native 자식 프로세스의 환경에서 제거합니다. 환경 변수 이름은 POSIX에서 대소문자를 구분하고 Windows에서는 구분하지 않습니다. 기존에 지원하는 native 홈 경로 변환은 유지하며 저장소 위치 변경 지원을 추가하지 않습니다.
486
+ 2026-10-15 native Codex [0.162.1](https://github.com/openai/codex/tree/092d3acd6bec3e3a14bdc7e7a2810ab628ab759d/codex-rs) 조사 결과, 저장소 우선순위는 관리자 요구사항, 병합된 설정 계층, `CODEX_SQLITE_HOME`, `CODEX_HOME` 순입니다. `sqlite_home`을 설정할 수 있는 계층은 시스템 파일, macOS 관리 프로필, 사용자의 `config.toml`, `--profile`로 선택한 프로필 파일, native 프로세스 작업 디렉터리의 프로젝트 계층(작업 디렉터리부터 가장 가까운 기본 `.git` 루트까지의 `.codex/config.toml`, 루트가 없으면 작업 디렉터리만 해당하며 신뢰한 프로젝트에서만 활성화)입니다. 기존 `[profiles.*]` 테이블에는 저장소 키가 없습니다. `codex queue`는 홈의 `app-server-control/app-server-control.sock`에서 연결을 받는 app-server 데몬이 실행 중이면 그 데몬을 통해, 그렇지 않으면 내장 서버를 통해 제출합니다. native TUI는 `--no-daemon` 등으로 제외하지 않으면 기본적으로 이런 데몬을 자동으로 시작합니다. 데몬의 QueueStore는 시작할 때 선택한 데이터베이스를 유지하지만 `config/read`는 현재 디스크의 계층을 다시 읽습니다. `initialize`는 홈과 플랫폼을 알려주지만, 검토한 `initialize`, `config/read`, 큐 API에는 시작 시점 SQLite 정체를 증명하는 안정적인 계약이 없습니다. 스레드 UUID가 일치하거나 같은 서버에 연결되었다고 해서 저장소가 같다는 뜻은 아니며(복사한 데이터베이스에도 같은 UUID가 있을 수 있음), 큐 API에는 기대 저장소나 프로세스 세대 전제조건이 없습니다. 큐에 쌓인 메시지를 소비하는 프로세스는 자기 저장소의 큐를 폴링합니다. 이는 소스 조사 결과이며 실제 전송이나 플랫폼 검증이 아닙니다.
487
+
488
+ session-peer는 상속된 `CODEX_SQLITE_HOME`이 비어 있지 않거나 검사하는 홈의 설정에 루트 `sqlite_home`이 있으면 발견, 사전 검증, 큐 제출 전에 거부합니다. 설정 경로가 선택한 홈과 같아도 거부하며, 따옴표·이스케이프가 있는 루트 키와 루트의 점 구분 키·테이블도 포함합니다. 선택되지 않은 하위 키는 루트 저장소 설정으로 취급하지 않습니다. 빈 환경 변수 재정의는 native 자식 프로세스의 환경에서 제거합니다. 환경 변수 이름은 POSIX에서 대소문자를 구분하고 Windows에서는 구분하지 않습니다. 기존에 지원하는 native 홈 경로 변환은 유지하며 저장소 위치 변경 지원을 추가하지 않습니다. 또한 시스템 설정·요구사항 파일(`/etc/codex/config.toml`, `/etc/codex/managed_config.toml`, `/etc/codex/requirements.toml`, Windows에서는 Known Folder API의 ProgramData 디렉터리 아래 `OpenAI\Codex\config.toml`과 `requirements.toml`)과 macOS 관리 프로필 값에 루트 `sqlite_home`이 있으면 프로젝트 신뢰 여부와 관계없이 거부합니다. 큐 제출은 검사한 홈에서 native 프로세스를 시작하므로 호출한 위치의 디렉터리가 프로젝트 계층을 추가하지 않습니다. 사전 검증은 큐·app-server 자식 프로세스를 시작하지 않고(wake 및 macOS 일반 큐 사전 검증은 native 버전 확인 프로세스를 실행할 수 있음) 같은 실행 계획(홈, 자식 프로세스 작업 디렉터리, 환경, 알려진 계층, 소비 디렉터리)을 검사하고, 실제 전송은 효과 직전에 다시 검사합니다. 어느 쪽도 native Codex가 설정을 읽기 전의 시간차를 없애지 못하므로 사전 검증 통과가 다음 전송의 저장소 일치를 보장하지 않습니다. 사용자 정책에 따라 데몬 제어 소켓은 활성 여부와 관계없이 거부 사유가 아니며 session-peer가 연결을 시도하지도 않습니다. 데몬과 내장 서버 선택은 기존처럼 native Codex가 하며 저장소 권한을 주장하지 않습니다. 변환된 native 홈 경로를 제외하고, 사전 검증, 큐 제출, wake는 소비하는 쓰기 프로세스나 wake 서버가 보통 시작하는 저장된 스레드 디렉터리의 프로젝트 계층도 검사하며, 스레드 메타데이터를 읽을 수 없거나 형식이 잘못되었으면 거부합니다. wake는 대상별 예산을 예약하기 전에 이 저장소 검사를 수행합니다. 거부 사유는 `sqlite_environment_override`, `sqlite_home_configuration`, `sqlite_home_system_configuration`, `sqlite_home_managed_configuration`, `sqlite_home_project_configuration`, `consumer_directory_unverifiable`, `storage_config_unreadable`, `storage_config_unverifiable`입니다.
489
+
490
+ 검사하는 TOML 파일은 최대 1 MiB의 UTF-8 일반 파일이어야 하며 심볼릭 링크는 허용하지 않습니다. Windows 시스템 디렉터리는 `SHGetKnownFolderPath(FOLDERID_ProgramData)`로 확인하며 API 실패 시 native Codex와 같이 고정된 `C:\ProgramData`를 사용합니다. `ProgramData` 환경 변수는 사용하지 않습니다. macOS에서는 CoreFoundation으로 Codex 설정 도메인을 동기화하고 소유한 값을 해제합니다. 강제 설정 전용 정책은 복사 후 강제 여부를 다시 확인하고 일반 사용자 설정은 무시합니다. 버전에 따라 선택한 보수적 정책은 위 설명대로 일반 설정도 읽습니다. 선택한 base64 문자열은 최대 2 MiB이며 최대 1 MiB의 UTF-8 TOML로 디코딩합니다. 동기화·형식·디코딩·크기 오류는 거부합니다. TOML 파일이나 설정값이 없어도 됩니다. 기본 프로젝트 탐색은 디렉터리가 아닌 가장 가까운 `.git` 항목(metadata만 확인) 또는 `HEAD`가 있는 .git 디렉터리에서 멈춥니다. 심볼릭 링크 marker는 보수적으로 거부하며, 루트가 없으면 작업 디렉터리만 검사합니다. `<cwd>/config.toml`은 프로젝트 계층이 아닙니다. 알려진 설정에 루트 `project_root_markers` 재정의가 있으면 사용자 지정 표식을 정확히 해석한다고 주장하지 않고 모든 상위 디렉터리를 보수적으로 검사합니다. API는 모의 테스트로 검증했으며 실제로 재배치한 Windows Known Folder와 강제 MDM 프로필은 시험하지 않았습니다. 읽을 수 없거나 변경·크기 초과·키 구문 판별 불가 상태인 파일은 내용을 출력하지 않고 거부합니다. 외부 의존성이 없는 키 판별기는 Python 3.9를 지원하지만 완전한 TOML·스키마 검증기는 아닙니다. 다른 값은 native Codex가 계속 검증합니다. 큐 제출과 wake는 자식 프로세스를 시작하기 전에 이 경계를 다시 확인합니다. 거부 결과는 `status=refused`, `submitted=false`, `retryAllowed=false`이며 정상적인 기존 출력과 쓰기 프로세스 소유권 검사는 바뀌지 않습니다. SSH에서는 발신자의 환경이 아니라 대상 기기에서 검사합니다.
475
491
 
476
- 홈의 `config.toml`은 최대 1 MiB의 UTF-8 일반 파일이어야 하며 심볼릭 링크는 허용하지 않습니다. 파일이 없어도 됩니다. 읽을 수 없거나 변경·크기 초과·키 구문 판별 불가 상태인 파일은 내용을 출력하지 않고 거부합니다. 외부 의존성이 없는 키 판별기는 Python 3.9를 지원하지만 완전한 TOML·스키마 검증기는 아닙니다. 다른 값은 native Codex가 계속 검증합니다. 큐 제출과 wake는 자식 프로세스를 시작하기 전에 이 경계를 다시 확인합니다. 거부 결과는 `status=refused`, `submitted=false`, `retryAllowed=false`이며 정상적인 기존 출력과 쓰기 프로세스 소유권 검사는 바뀌지 않습니다. SSH에서는 발신자의 환경이 아니라 대상 기기에서 검사합니다.
492
+ 변환된 native 홈(WSL relay 수신자가 native Windows Codex에 큐 제출)은 기존 제출 계약을 유지하지만 저장소 검증은 지원하지 않습니다. 이 POSIX 프로세스는 Windows 쪽 홈 표기, 대소문자 규칙, 환경, 시스템·관리·프로젝트 계층을 검사할 수 없습니다. 이런 경로를 효과 전에 거부하는 엄격 모드는 향후 가능하지만 구현하지 않았습니다.
477
493
 
478
- 이 변경은 한정된 방어 강화이며 모든 설정에서 native 저장소가 일치함을 증명하지 않습니다. 프로젝트·시스템·프로필 계층, 관리자 요구사항, 기존 공유 서버는 이 검사로 해석하거나 증명하지 않습니다. 마지막 검사 후 설정이 바뀔 수도 있습니다. 검사 성공만으로 저장소 일치를 추론하지 마세요. [#268](https://github.com/abruption/session-peer/issues/268)은 이 증거와 버전·플랫폼 수락 검증을 위해 열린 상태로 유지합니다. 가짜 자식 프로세스 테스트는 거부와 환경 처리만 보여주며 실제 오대상 전송, 보안 악용, 새로운 native 호환성을 입증하지 않습니다. wake의 버전 지원 범위는 바뀌지 않습니다.
494
+ 이 변경은 한정된 방어 강화이며 모든 설정에서 native 저장소가 일치함을 증명하지 않습니다. 검사하지 않는 대상은 패키지 기본 설정, 엔터프라이즈 클라우드 설정 번들, 실행 중인 공유 데몬의 시작 시점 저장소, 이미 실행 중인 쓰기 프로세스의 `--profile` 선택·`-c` 재정의·환경 변수, 저장된 스레드 디렉터리가 아닌 곳에서 시작했거나 디렉터리가 사라진 쓰기 프로세스, 그리고 변환된 native 홈의 Windows 측 시스템·관리·프로젝트 계층입니다. 마지막 검사 후 설정이 바뀔 수도 있습니다. 검사 성공만으로 저장소 일치를 추론하지 마세요. [#268](https://github.com/abruption/session-peer/issues/268)은 이 계약의 native 플랫폼 검증을 위해 열린 상태로 유지합니다. 가짜 자식 프로세스 테스트는 거부와 환경 처리만 보여주며 실제 오대상 전송, 보안 악용, 새로운 native 호환성을 입증하지 않습니다. wake의 버전 지원 범위는 바뀌지 않습니다.
479
495
 
480
496
  ### Orca 및 여러 Codex 홈
481
497