agentlane 0.5.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 (243) hide show
  1. agentlane-0.5.0/.agents/skills/code-change-verification/SKILL.md +29 -0
  2. agentlane-0.5.0/.agents/skills/code-change-verification/scripts/run.sh +25 -0
  3. agentlane-0.5.0/.agents/skills/docs-sync/SKILL.md +140 -0
  4. agentlane-0.5.0/.agents/skills/docs-sync/agents/openai.yaml +4 -0
  5. agentlane-0.5.0/.agents/skills/docs-sync/references/doc-coverage-checklist.md +48 -0
  6. agentlane-0.5.0/.agents/skills/release/SKILL.md +182 -0
  7. agentlane-0.5.0/.agents/skills/release/references/release_notes_template.md +27 -0
  8. agentlane-0.5.0/.agents/skills/release/scripts/release_context.py +171 -0
  9. agentlane-0.5.0/.agents/skills/release/scripts/run.sh +9 -0
  10. agentlane-0.5.0/.agents/skills/vhs/SKILL.md +102 -0
  11. agentlane-0.5.0/.github/workflows/pypi-publish.yml +66 -0
  12. agentlane-0.5.0/.gitignore +36 -0
  13. agentlane-0.5.0/.hadolint.yaml +4 -0
  14. agentlane-0.5.0/.isort.cfg +2 -0
  15. agentlane-0.5.0/.markdownlint.yaml +12 -0
  16. agentlane-0.5.0/.python-version +1 -0
  17. agentlane-0.5.0/.yamllint.yaml +11 -0
  18. agentlane-0.5.0/AGENTS.md +115 -0
  19. agentlane-0.5.0/CLAUDE.md +1 -0
  20. agentlane-0.5.0/LICENSE +21 -0
  21. agentlane-0.5.0/Makefile +104 -0
  22. agentlane-0.5.0/PKG-INFO +234 -0
  23. agentlane-0.5.0/README.md +192 -0
  24. agentlane-0.5.0/docs/README.md +119 -0
  25. agentlane-0.5.0/docs/code-style/README.md +20 -0
  26. agentlane-0.5.0/docs/code-style/comments.md +311 -0
  27. agentlane-0.5.0/docs/code-style/imports.md +25 -0
  28. agentlane-0.5.0/docs/code-style/modules.md +102 -0
  29. agentlane-0.5.0/docs/code-style/python.md +63 -0
  30. agentlane-0.5.0/docs/code-style/testing-and-prs.md +42 -0
  31. agentlane-0.5.0/docs/code-style/workspace-packages.md +68 -0
  32. agentlane-0.5.0/docs/harness/agents.md +81 -0
  33. agentlane-0.5.0/docs/harness/architecture.md +124 -0
  34. agentlane-0.5.0/docs/harness/default-agents.md +178 -0
  35. agentlane-0.5.0/docs/harness/runner.md +146 -0
  36. agentlane-0.5.0/docs/harness/tasks.md +53 -0
  37. agentlane-0.5.0/docs/messaging/routing-and-delivery.md +117 -0
  38. agentlane-0.5.0/docs/models/overview.md +128 -0
  39. agentlane-0.5.0/docs/models/prompt-templating.md +126 -0
  40. agentlane-0.5.0/docs/releases/v0.3.0.md +20 -0
  41. agentlane-0.5.0/docs/releases/v0.4.1.md +20 -0
  42. agentlane-0.5.0/docs/releases/v0.5.0.md +16 -0
  43. agentlane-0.5.0/docs/runtime/distributed-runtime-architecture.md +128 -0
  44. agentlane-0.5.0/docs/runtime/distributed-runtime-usage.md +187 -0
  45. agentlane-0.5.0/docs/runtime/engine-and-execution.md +120 -0
  46. agentlane-0.5.0/docs/tracing/overview.md +110 -0
  47. agentlane-0.5.0/docs/transport/serialization.md +95 -0
  48. agentlane-0.5.0/examples/README.md +84 -0
  49. agentlane-0.5.0/examples/__init__.py +3 -0
  50. agentlane-0.5.0/examples/harness/README.md +29 -0
  51. agentlane-0.5.0/examples/harness/__init__.py +1 -0
  52. agentlane-0.5.0/examples/harness/agent_as_tool_policy_specialist/README.md +52 -0
  53. agentlane-0.5.0/examples/harness/agent_as_tool_policy_specialist/__init__.py +1 -0
  54. agentlane-0.5.0/examples/harness/agent_as_tool_policy_specialist/main.py +112 -0
  55. agentlane-0.5.0/examples/harness/customer_support_conversation/README.md +68 -0
  56. agentlane-0.5.0/examples/harness/customer_support_conversation/__init__.py +1 -0
  57. agentlane-0.5.0/examples/harness/customer_support_conversation/main.py +224 -0
  58. agentlane-0.5.0/examples/harness/default_agent_quickstart/README.md +24 -0
  59. agentlane-0.5.0/examples/harness/default_agent_quickstart/main.py +99 -0
  60. agentlane-0.5.0/examples/harness/default_agent_tool_note_writer/README.md +35 -0
  61. agentlane-0.5.0/examples/harness/default_agent_tool_note_writer/__init__.py +1 -0
  62. agentlane-0.5.0/examples/harness/default_agent_tool_note_writer/main.py +87 -0
  63. agentlane-0.5.0/examples/harness/default_handoff_takeover/README.md +38 -0
  64. agentlane-0.5.0/examples/harness/default_handoff_takeover/__init__.py +1 -0
  65. agentlane-0.5.0/examples/harness/default_handoff_takeover/main.py +85 -0
  66. agentlane-0.5.0/examples/harness/handoff_to_returns_specialist/README.md +36 -0
  67. agentlane-0.5.0/examples/harness/handoff_to_returns_specialist/__init__.py +1 -0
  68. agentlane-0.5.0/examples/harness/handoff_to_returns_specialist/main.py +96 -0
  69. agentlane-0.5.0/examples/harness/tool_calling_search_answer/README.md +81 -0
  70. agentlane-0.5.0/examples/harness/tool_calling_search_answer/__init__.py +1 -0
  71. agentlane-0.5.0/examples/harness/tool_calling_search_answer/main.py +155 -0
  72. agentlane-0.5.0/examples/runtime/README.md +20 -0
  73. agentlane-0.5.0/examples/runtime/__init__.py +1 -0
  74. agentlane-0.5.0/examples/runtime/distributed_publish_fan_in/README.md +78 -0
  75. agentlane-0.5.0/examples/runtime/distributed_publish_fan_in/__init__.py +1 -0
  76. agentlane-0.5.0/examples/runtime/distributed_publish_fan_in/main.py +528 -0
  77. agentlane-0.5.0/examples/runtime/distributed_scatter_gather/README.md +69 -0
  78. agentlane-0.5.0/examples/runtime/distributed_scatter_gather/__init__.py +1 -0
  79. agentlane-0.5.0/examples/runtime/distributed_scatter_gather/main.py +454 -0
  80. agentlane-0.5.0/examples/runtime/multi_agent_workflow/README.md +25 -0
  81. agentlane-0.5.0/examples/runtime/multi_agent_workflow/__init__.py +1 -0
  82. agentlane-0.5.0/examples/runtime/multi_agent_workflow/demo.gif +0 -0
  83. agentlane-0.5.0/examples/runtime/multi_agent_workflow/demo.tape +19 -0
  84. agentlane-0.5.0/examples/runtime/multi_agent_workflow/main.py +503 -0
  85. agentlane-0.5.0/examples/runtime/simple/README.md +15 -0
  86. agentlane-0.5.0/examples/runtime/simple/__init__.py +1 -0
  87. agentlane-0.5.0/examples/runtime/simple/distributed_publish_fan_in.py +239 -0
  88. agentlane-0.5.0/examples/runtime/simple/distributed_scatter_gather.py +180 -0
  89. agentlane-0.5.0/examples/throughput/__init__.py +1 -0
  90. agentlane-0.5.0/examples/throughput/high_throughput_messaging/README.md +36 -0
  91. agentlane-0.5.0/examples/throughput/high_throughput_messaging/__init__.py +1 -0
  92. agentlane-0.5.0/examples/throughput/high_throughput_messaging/demo.gif +0 -0
  93. agentlane-0.5.0/examples/throughput/high_throughput_messaging/demo.tape +19 -0
  94. agentlane-0.5.0/examples/throughput/high_throughput_messaging/main.py +553 -0
  95. agentlane-0.5.0/packages/braintrust/README.md +9 -0
  96. agentlane-0.5.0/packages/braintrust/src/agentlane_braintrust/__init__.py +7 -0
  97. agentlane-0.5.0/packages/braintrust/src/agentlane_braintrust/_braintrust_processor.py +445 -0
  98. agentlane-0.5.0/packages/braintrust/src/agentlane_braintrust/py.typed +1 -0
  99. agentlane-0.5.0/packages/braintrust/tests/test_braintrust_processor.py +234 -0
  100. agentlane-0.5.0/packages/litellm/README.md +12 -0
  101. agentlane-0.5.0/packages/litellm/src/agentlane_litellm/__init__.py +13 -0
  102. agentlane-0.5.0/packages/litellm/src/agentlane_litellm/_client.py +552 -0
  103. agentlane-0.5.0/packages/litellm/src/agentlane_litellm/py.typed +0 -0
  104. agentlane-0.5.0/packages/litellm/src/agentlane_litellm/types/__init__.py +22 -0
  105. agentlane-0.5.0/packages/litellm/tests/test_client.py +171 -0
  106. agentlane-0.5.0/packages/openai/README.md +14 -0
  107. agentlane-0.5.0/packages/openai/src/agentlane_openai/__init__.py +26 -0
  108. agentlane-0.5.0/packages/openai/src/agentlane_openai/_embeddings.py +81 -0
  109. agentlane-0.5.0/packages/openai/src/agentlane_openai/_responses_client.py +882 -0
  110. agentlane-0.5.0/packages/openai/src/agentlane_openai/_tool_output_adapter.py +37 -0
  111. agentlane-0.5.0/packages/openai/src/agentlane_openai/py.typed +0 -0
  112. agentlane-0.5.0/packages/openai/src/agentlane_openai/types/__init__.py +53 -0
  113. agentlane-0.5.0/packages/openai/tests/test_embeddings.py +77 -0
  114. agentlane-0.5.0/packages/openai/tests/test_responses_client.py +208 -0
  115. agentlane-0.5.0/pyproject.toml +90 -0
  116. agentlane-0.5.0/pyrightconfig.json +20 -0
  117. agentlane-0.5.0/ruff.toml +11 -0
  118. agentlane-0.5.0/src/agentlane/__init__.py +5 -0
  119. agentlane-0.5.0/src/agentlane/harness/__init__.py +21 -0
  120. agentlane-0.5.0/src/agentlane/harness/_agent.py +233 -0
  121. agentlane-0.5.0/src/agentlane/harness/_handoff.py +206 -0
  122. agentlane-0.5.0/src/agentlane/harness/_hooks.py +97 -0
  123. agentlane-0.5.0/src/agentlane/harness/_lifecycle.py +530 -0
  124. agentlane-0.5.0/src/agentlane/harness/_run.py +108 -0
  125. agentlane-0.5.0/src/agentlane/harness/_runner.py +1114 -0
  126. agentlane-0.5.0/src/agentlane/harness/_skills.py +4 -0
  127. agentlane-0.5.0/src/agentlane/harness/_task.py +95 -0
  128. agentlane-0.5.0/src/agentlane/harness/_tooling.py +62 -0
  129. agentlane-0.5.0/src/agentlane/harness/agents/__init__.py +15 -0
  130. agentlane-0.5.0/src/agentlane/harness/agents/_base.py +79 -0
  131. agentlane-0.5.0/src/agentlane/harness/agents/_default_agent.py +301 -0
  132. agentlane-0.5.0/src/agentlane/harness/context/__init__.py +3 -0
  133. agentlane-0.5.0/src/agentlane/harness/context/_conversation.py +4 -0
  134. agentlane-0.5.0/src/agentlane/harness/context/_mailbox.py +4 -0
  135. agentlane-0.5.0/src/agentlane/harness/context/_session.py +4 -0
  136. agentlane-0.5.0/src/agentlane/harness/memory/__init__.py +3 -0
  137. agentlane-0.5.0/src/agentlane/harness/memory/_history.py +4 -0
  138. agentlane-0.5.0/src/agentlane/harness/memory/_scratchpad.py +4 -0
  139. agentlane-0.5.0/src/agentlane/harness/memory/_store.py +4 -0
  140. agentlane-0.5.0/src/agentlane/messaging/__init__.py +63 -0
  141. agentlane-0.5.0/src/agentlane/messaging/_context.py +31 -0
  142. agentlane-0.5.0/src/agentlane/messaging/_envelope.py +166 -0
  143. agentlane-0.5.0/src/agentlane/messaging/_identity.py +224 -0
  144. agentlane-0.5.0/src/agentlane/messaging/_outcome.py +235 -0
  145. agentlane-0.5.0/src/agentlane/messaging/_routing.py +94 -0
  146. agentlane-0.5.0/src/agentlane/messaging/_routing_policy.py +129 -0
  147. agentlane-0.5.0/src/agentlane/messaging/_subscription.py +218 -0
  148. agentlane-0.5.0/src/agentlane/models/README.md +46 -0
  149. agentlane-0.5.0/src/agentlane/models/__init__.py +112 -0
  150. agentlane-0.5.0/src/agentlane/models/_exceptions.py +31 -0
  151. agentlane-0.5.0/src/agentlane/models/_interface.py +291 -0
  152. agentlane-0.5.0/src/agentlane/models/_json_repair.py +341 -0
  153. agentlane-0.5.0/src/agentlane/models/_output_schema.py +457 -0
  154. agentlane-0.5.0/src/agentlane/models/_prompts.py +212 -0
  155. agentlane-0.5.0/src/agentlane/models/_rate_limiter.py +305 -0
  156. agentlane-0.5.0/src/agentlane/models/_response_utils.py +343 -0
  157. agentlane-0.5.0/src/agentlane/models/_retry.py +260 -0
  158. agentlane-0.5.0/src/agentlane/models/_strict_schema.py +179 -0
  159. agentlane-0.5.0/src/agentlane/models/_tool.py +345 -0
  160. agentlane-0.5.0/src/agentlane/models/_tool_executor.py +202 -0
  161. agentlane-0.5.0/src/agentlane/models/_tool_output_adapter.py +75 -0
  162. agentlane-0.5.0/src/agentlane/models/_types/__init__.py +29 -0
  163. agentlane-0.5.0/src/agentlane/models/py.typed +0 -0
  164. agentlane-0.5.0/src/agentlane/models/run/__init__.py +8 -0
  165. agentlane-0.5.0/src/agentlane/models/run/_context.py +145 -0
  166. agentlane-0.5.0/src/agentlane/models/run/_ctx_managers.py +47 -0
  167. agentlane-0.5.0/src/agentlane/py.typed +0 -0
  168. agentlane-0.5.0/src/agentlane/runtime/__init__.py +39 -0
  169. agentlane-0.5.0/src/agentlane/runtime/_base_agent.py +116 -0
  170. agentlane-0.5.0/src/agentlane/runtime/_cancellation.py +36 -0
  171. agentlane-0.5.0/src/agentlane/runtime/_context.py +180 -0
  172. agentlane-0.5.0/src/agentlane/runtime/_dispatcher.py +265 -0
  173. agentlane-0.5.0/src/agentlane/runtime/_distributed_grpc.py +304 -0
  174. agentlane-0.5.0/src/agentlane/runtime/_distributed_wire.py +454 -0
  175. agentlane-0.5.0/src/agentlane/runtime/_engine.py +75 -0
  176. agentlane-0.5.0/src/agentlane/runtime/_message_helpers.py +60 -0
  177. agentlane-0.5.0/src/agentlane/runtime/_network.py +20 -0
  178. agentlane-0.5.0/src/agentlane/runtime/_protocol.py +68 -0
  179. agentlane-0.5.0/src/agentlane/runtime/_registry.py +192 -0
  180. agentlane-0.5.0/src/agentlane/runtime/_runtime.py +736 -0
  181. agentlane-0.5.0/src/agentlane/runtime/_scheduler.py +159 -0
  182. agentlane-0.5.0/src/agentlane/runtime/_types.py +28 -0
  183. agentlane-0.5.0/src/agentlane/runtime/_worker_runtime.py +520 -0
  184. agentlane-0.5.0/src/agentlane/runtime/_worker_runtime_host.py +616 -0
  185. agentlane-0.5.0/src/agentlane/tracing/README.md +145 -0
  186. agentlane-0.5.0/src/agentlane/tracing/__init__.py +110 -0
  187. agentlane-0.5.0/src/agentlane/tracing/_create.py +217 -0
  188. agentlane-0.5.0/src/agentlane/tracing/_metrics/__init__.py +81 -0
  189. agentlane-0.5.0/src/agentlane/tracing/_metrics/_aggregators.py +222 -0
  190. agentlane-0.5.0/src/agentlane/tracing/_metrics/_collector.py +173 -0
  191. agentlane-0.5.0/src/agentlane/tracing/_metrics/_emit.py +95 -0
  192. agentlane-0.5.0/src/agentlane/tracing/_metrics/_registry.py +149 -0
  193. agentlane-0.5.0/src/agentlane/tracing/_metrics/_types.py +62 -0
  194. agentlane-0.5.0/src/agentlane/tracing/_metrics_processor.py +114 -0
  195. agentlane-0.5.0/src/agentlane/tracing/_processor_interface.py +48 -0
  196. agentlane-0.5.0/src/agentlane/tracing/_processors.py +122 -0
  197. agentlane-0.5.0/src/agentlane/tracing/_propagation.py +69 -0
  198. agentlane-0.5.0/src/agentlane/tracing/_provider.py +275 -0
  199. agentlane-0.5.0/src/agentlane/tracing/_scope.py +75 -0
  200. agentlane-0.5.0/src/agentlane/tracing/_setup/__init__.py +5 -0
  201. agentlane-0.5.0/src/agentlane/tracing/_setup/_global.py +45 -0
  202. agentlane-0.5.0/src/agentlane/tracing/_span.py +292 -0
  203. agentlane-0.5.0/src/agentlane/tracing/_span_data.py +115 -0
  204. agentlane-0.5.0/src/agentlane/tracing/_trace.py +292 -0
  205. agentlane-0.5.0/src/agentlane/tracing/py.typed +0 -0
  206. agentlane-0.5.0/src/agentlane/transport/__init__.py +69 -0
  207. agentlane-0.5.0/src/agentlane/transport/_codecs_json.py +296 -0
  208. agentlane-0.5.0/src/agentlane/transport/_codecs_protobuf.py +103 -0
  209. agentlane-0.5.0/src/agentlane/transport/_errors.py +61 -0
  210. agentlane-0.5.0/src/agentlane/transport/_registry.py +515 -0
  211. agentlane-0.5.0/src/agentlane/transport/_serializer.py +74 -0
  212. agentlane-0.5.0/src/agentlane/transport/_types.py +77 -0
  213. agentlane-0.5.0/src/agentlane/transport/_utils.py +31 -0
  214. agentlane-0.5.0/src/agentlane/transport/_wire_payload.py +169 -0
  215. agentlane-0.5.0/src/agentlane/util/__init__.py +5 -0
  216. agentlane-0.5.0/src/agentlane/util/_time.py +8 -0
  217. agentlane-0.5.0/src/agentlane/version.py +9 -0
  218. agentlane-0.5.0/tests/agents/test_agent_protocol.py +163 -0
  219. agentlane-0.5.0/tests/harness/conftest.py +1 -0
  220. agentlane-0.5.0/tests/harness/test_agent_lifecycle.py +356 -0
  221. agentlane-0.5.0/tests/harness/test_default_agent.py +302 -0
  222. agentlane-0.5.0/tests/harness/test_runner.py +1524 -0
  223. agentlane-0.5.0/tests/harness/test_task.py +228 -0
  224. agentlane-0.5.0/tests/messaging/test_router.py +147 -0
  225. agentlane-0.5.0/tests/models/conftest.py +17 -0
  226. agentlane-0.5.0/tests/models/test_json_repair.py +335 -0
  227. agentlane-0.5.0/tests/models/test_output_schema.py +98 -0
  228. agentlane-0.5.0/tests/models/test_prompts.py +110 -0
  229. agentlane-0.5.0/tests/models/test_rate_limiter.py +343 -0
  230. agentlane-0.5.0/tests/models/test_response_utils.py +231 -0
  231. agentlane-0.5.0/tests/models/test_run_context.py +462 -0
  232. agentlane-0.5.0/tests/models/test_strict_schema.py +66 -0
  233. agentlane-0.5.0/tests/models/test_tooling.py +271 -0
  234. agentlane-0.5.0/tests/runtime/test_cancellation.py +21 -0
  235. agentlane-0.5.0/tests/runtime/test_distributed_runtime.py +478 -0
  236. agentlane-0.5.0/tests/runtime/test_distributed_wire.py +362 -0
  237. agentlane-0.5.0/tests/runtime/test_engine.py +843 -0
  238. agentlane-0.5.0/tests/test_scaffold.py +5 -0
  239. agentlane-0.5.0/tests/tracing/conftest.py +24 -0
  240. agentlane-0.5.0/tests/tracing/test_metrics.py +366 -0
  241. agentlane-0.5.0/tests/tracing/test_trace_context.py +50 -0
  242. agentlane-0.5.0/tests/transport/test_serialization.py +406 -0
  243. agentlane-0.5.0/uv.lock +1363 -0
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: code-change-verification
3
+ description: Run the mandatory verification stack when changes affect runtime code, tests, or build/test behavior in the OpenAI Agents Python repository.
4
+ ---
5
+
6
+ # Code Change Verification
7
+
8
+ ## Overview
9
+
10
+ Ensure work is only marked complete after formatting, linting, type checking, and tests pass. Use this skill when changes affect runtime code, tests, or build/test configuration. You can skip it for docs-only or repository metadata unless a user asks for the full stack.
11
+
12
+ ## Quick start
13
+
14
+ 1. macOS/Linux: `bash .agents/skills/code-change-verification/scripts/run.sh`.
15
+ 2. If any command fails, fix the issue, rerun the script, and report the failing output.
16
+ 3. Confirm completion only when all commands succeed with no remaining issues.
17
+
18
+ ## Manual workflow
19
+
20
+ - If dependencies are not installed or have changed, run `make sync` first to install dev requirements via `uv`.
21
+ - Run from the repository root in this order: `make format`, `make lint`, `make typecheck`, `make tests`.
22
+ - Do not skip steps; stop and fix issues immediately when a command fails.
23
+ - Re-run the full stack after applying fixes so the commands execute in the required order.
24
+
25
+ ## Resources
26
+
27
+ ### scripts/run.sh
28
+
29
+ - Executes the full verification sequence with fail-fast semantics from the repository root. Prefer this entry point to ensure the required commands run in the correct order.
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env bash
2
+ # Fail fast on any error or undefined variable.
3
+ set -euo pipefail
4
+
5
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
+ if command -v git >/dev/null 2>&1; then
7
+ REPO_ROOT="$(git -C "${SCRIPT_DIR}" rev-parse --show-toplevel 2>/dev/null || true)"
8
+ fi
9
+ REPO_ROOT="${REPO_ROOT:-$(cd "${SCRIPT_DIR}/../../../.." && pwd)}"
10
+
11
+ cd "${REPO_ROOT}"
12
+
13
+ echo "Running make format..."
14
+ make format
15
+
16
+ echo "Running make lint..."
17
+ make lint
18
+
19
+ echo "Running make typecheck..."
20
+ make typecheck
21
+
22
+ echo "Running make tests..."
23
+ make tests
24
+
25
+ echo "code-change-verification: all commands passed."
@@ -0,0 +1,140 @@
1
+ ---
2
+ name: docs-sync
3
+ description: Review the current AgentLane code and public docs under docs/ to find missing, outdated, or misplaced documentation, then propose or apply concise documentation updates that match the repository’s structure and writing style. Ignore internal planning docs under docs/plans/.
4
+ ---
5
+
6
+ # Docs Sync
7
+
8
+ Use this skill when the user wants to audit documentation coverage, keep
9
+ `docs/` aligned with implementation changes, or update public technical docs.
10
+
11
+ ## Scope
12
+
13
+ This skill is for public documentation under `docs/**`.
14
+
15
+ Rules:
16
+
17
+ 1. Treat `docs/plans/**` as internal tracking, not public documentation.
18
+ 2. English only.
19
+ 3. Keep edits concise and easy to maintain.
20
+
21
+ ## Workflow
22
+
23
+ ### 1. Define the scope to review
24
+
25
+ Pick one of these modes:
26
+
27
+ 1. full public-doc audit against the current branch
28
+ 2. doc sync for a specific feature or directory
29
+ 3. diff-based audit against `main` for in-flight changes
30
+
31
+ Prefer diff-based review when there is active branch work. Prefer a full audit
32
+ when the user asks for broad documentation cleanup.
33
+
34
+ ### 2. Build a feature inventory from code
35
+
36
+ Review the selected scope in code first.
37
+
38
+ Focus on user-facing behavior:
39
+
40
+ 1. public exports
41
+ 2. runtime behaviors and guarantees
42
+ 3. configuration options and defaults
43
+ 4. examples that define supported usage
44
+ 5. important developer workflows
45
+ 6. renamed, removed, or newly added features
46
+
47
+ Capture lightweight evidence:
48
+
49
+ 1. file path
50
+ 2. symbol or setting name
51
+ 3. short note about the behavior that should be documented
52
+
53
+ ### 3. Review the existing docs hierarchy
54
+
55
+ Use the current docs tree as the source of structure.
56
+
57
+ Start with:
58
+
59
+ 1. `docs/README.md`
60
+ 2. the relevant page under `docs/runtime/`, `docs/messaging/`, `docs/harness/`,
61
+ or `docs/transport/`
62
+
63
+ When reviewing, prefer updating an existing page over creating a new one unless
64
+ the topic clearly has no home.
65
+
66
+ If you add, remove, or rename a public docs page, update `docs/README.md`.
67
+
68
+ ### 4. Compare docs against code
69
+
70
+ Look for:
71
+
72
+ 1. missing public behavior
73
+ 2. outdated names, defaults, or semantics
74
+ 3. examples in docs that no longer match implementation
75
+ 4. information that belongs on a different page for discoverability
76
+ 5. public docs that accidentally expose internal rollout or planning details
77
+
78
+ ### 5. Produce a Docs Sync Report
79
+
80
+ Before editing, produce a short report with:
81
+
82
+ 1. doc gaps
83
+ 2. inaccurate or outdated content
84
+ 3. structural suggestions, if any
85
+ 4. proposed file-level edits
86
+
87
+ Keep the report concise.
88
+
89
+ ### 6. Apply updates if asked
90
+
91
+ When applying edits:
92
+
93
+ 1. edit only the relevant public docs under `docs/**`
94
+ 2. keep the current writing style and section structure
95
+ 3. keep examples short and directly tied to the repo
96
+ 4. prefer current-state documentation over rollout history
97
+ 5. do not add jokes, slang, rhetoric, puns, or contrastive-negation phrasing
98
+
99
+ ## Writing Style
100
+
101
+ Match the existing documentation style in this repository.
102
+
103
+ Rules:
104
+
105
+ 1. write in plain technical English
106
+ 2. prefer short sections and short paragraphs
107
+ 3. use direct statements over persuasive or dramatic framing
108
+ 4. explain the current behavior, boundaries, and intended usage
109
+ 5. keep examples minimal and realistic
110
+ 6. avoid figures of speech, jokes, slang, and rhetorical phrasing
111
+ 7. avoid contrastive negation patterns such as “not X, but Y”
112
+ 8. keep tone neutral and open-source appropriate
113
+
114
+ ## Public Docs Boundary
115
+
116
+ For this repository, public docs currently live under `docs/**`.
117
+
118
+ Internal tracking docs live under `docs/plans/**` and should not be treated as
119
+ the public documentation surface.
120
+
121
+ ## Output format
122
+
123
+ Use this report shape when auditing before edits:
124
+
125
+ Docs Sync Report
126
+
127
+ - Scope
128
+ - What was reviewed
129
+ - Missing or weak coverage
130
+ - Doc file or missing page -> evidence -> proposed change
131
+ - Incorrect or outdated content
132
+ - Doc file -> issue -> correct behavior -> evidence
133
+ - Structural suggestions
134
+ - Proposed move/add/remove -> rationale
135
+ - Proposed edits
136
+ - File -> short summary
137
+
138
+ ## References
139
+
140
+ - `references/doc-coverage-checklist.md`
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Docs Sync"
3
+ short_description: "Audit public docs coverage and propose concise updates"
4
+ default_prompt: "Use $docs-sync to review AgentLane public docs under docs/ against the current implementation, then propose concise documentation updates."
@@ -0,0 +1,48 @@
1
+ # Doc Coverage Checklist
2
+
3
+ Use this checklist when reviewing AgentLane public documentation.
4
+
5
+ ## Review targets
6
+
7
+ - Public docs under `docs/**`
8
+ - Public docs index in `docs/README.md`
9
+ - Current implementation under `src/`
10
+ - Public examples when they define supported usage
11
+
12
+ Do not treat `docs/plans/**` as public documentation.
13
+
14
+ ## Code-first pass
15
+
16
+ - Identify public exports, runtime behaviors, configuration, and examples.
17
+ - Note renamed, removed, or newly added features.
18
+ - Record short evidence only: file path plus symbol or setting.
19
+
20
+ ## Doc-first pass
21
+
22
+ - Review the relevant page in `docs/`.
23
+ - Check whether the page reflects the current behavior and naming.
24
+ - Prefer updating existing pages over creating new ones.
25
+ - Update `docs/README.md` if public docs pages are added, removed, or renamed.
26
+
27
+ ## Common gaps
28
+
29
+ - Missing public behavior after a new feature lands
30
+ - Old names or defaults that no longer match code
31
+ - Examples that no longer match the actual API
32
+ - Public docs that still contain rollout notes, phases, dates, or status markers
33
+ - Information placed on the wrong page for discoverability
34
+
35
+ ## Writing guardrails
36
+
37
+ - Keep docs concise.
38
+ - Use plain technical English.
39
+ - Avoid slang, jokes, rhetoric, figures of speech, and puns.
40
+ - Avoid contrastive negation phrasing.
41
+ - Describe current behavior rather than implementation history.
42
+
43
+ ## Patch guidance
44
+
45
+ - Keep edits narrow and local to the affected pages.
46
+ - Preserve the current section style and hierarchy.
47
+ - Prefer short examples over long explanatory blocks.
48
+ - Keep internal planning notes in `docs/plans/**`, not in public docs.
@@ -0,0 +1,182 @@
1
+ ---
2
+ name: release
3
+ description: Prepare an AgentLane release with lockstep versioning across the root package and workspace packages, release notes based on changes since the last remote tag, full verification, and local-only git tag creation.
4
+ ---
5
+
6
+ # Release
7
+
8
+ Use this skill when the user wants to cut a release, bump versions, draft
9
+ release notes, or create a git tag for PyPI or GitHub release preparation.
10
+
11
+ ## Quick start
12
+
13
+ 1. Run `bash .agents/skills/release/scripts/run.sh`.
14
+ 2. The release must halt unless the current branch is `main`.
15
+ 3. The release must halt if `git status --short` is not empty.
16
+ 4. If the current versions are not in lockstep yet, update:
17
+ - `pyproject.toml`
18
+ - every discovered `packages/*/pyproject.toml`
19
+ 5. Keep all package versions identical for a release.
20
+ 6. Do not add compatibility bounds between workspace packages as part of this
21
+ release workflow.
22
+ 7. Write release notes to `docs/releases/v<version>.md` using the short
23
+ template in `references/release_notes_template.md`.
24
+ 8. Run `/usr/bin/make format`, `/usr/bin/make lint`, and `/usr/bin/make tests`.
25
+ 9. Create a local annotated tag with `git tag -a v<version> -F docs/releases/v<version>.md`.
26
+ 10. Do not push the tag. Leave tag pushing to the user after review.
27
+
28
+ ## Versioning policy
29
+
30
+ This repository uses lockstep versioning.
31
+
32
+ Rules:
33
+
34
+ 1. The root package and all workspace packages share the same release version.
35
+ 2. While the project is still pre-`1.0`, treat `0.MINOR.0` as the release line
36
+ for meaningful public changes.
37
+ 3. Use `PATCH` only for safe fixes, docs, and internal improvements that do not
38
+ intentionally break documented public APIs.
39
+ 4. Use a `MINOR` bump for new public capabilities or any public behavior change
40
+ users should adapt to.
41
+
42
+ ## Release workflow
43
+
44
+ ### 1. Confirm repository state
45
+
46
+ Before editing anything:
47
+
48
+ 1. ensure the current branch is exactly `main`
49
+ 2. ensure `git status --short` is empty
50
+ 3. halt immediately if either check fails
51
+ 4. do not discard unrelated changes just to force a release through
52
+
53
+ ### 2. Review release context from the remote
54
+
55
+ Always base the release review on the latest remote tag, not just local tags.
56
+
57
+ Run:
58
+
59
+ ```bash
60
+ bash .agents/skills/release/scripts/run.sh
61
+ ```
62
+
63
+ This helper:
64
+
65
+ 1. verifies the current branch is `main`
66
+ 2. verifies the worktree is clean
67
+ 3. fetches tags from `origin`
68
+ 4. reads the current versions from the root and workspace packages
69
+ 5. checks whether the repo is already in lockstep
70
+ 6. finds the latest remote semver tag
71
+ 7. prints the review range and the git commands to inspect commits and files
72
+
73
+ If there are no remote tags yet, treat the release as the initial release and
74
+ review the full history.
75
+
76
+ ### 3. Bump versions in lockstep
77
+
78
+ Update:
79
+
80
+ 1. `pyproject.toml`
81
+ 2. every discovered `packages/*/pyproject.toml`
82
+
83
+ All version values should match exactly.
84
+
85
+ Do not add or change inter-package compatibility bounds as part of this
86
+ workflow.
87
+
88
+ ### 4. Write release notes
89
+
90
+ Create `docs/releases/v<version>.md`.
91
+
92
+ Base the notes on:
93
+
94
+ 1. `git log --reverse --no-merges --oneline <range>`
95
+ 2. `git diff --name-only <range>` or `git log --name-only --pretty=format: --diff-filter=AM HEAD` for an initial release
96
+ 3. user-facing API and behavior changes
97
+ 4. examples and documentation added or updated
98
+
99
+ Keep the notes short. Prefer one or two sentences of summary plus a few bullets
100
+ for the most notable user-facing changes. Do not turn release notes into a full
101
+ project history dump.
102
+
103
+ Use `references/release_notes_template.md` as the starting point.
104
+
105
+ Format rules:
106
+
107
+ 1. summarize the release in one or two sentences
108
+ 2. keep only the most notable changes and fixes
109
+ 3. group them into short sections such as `Added`, `Changed`, and `Fixed`
110
+ 4. attach commit links or short commit references for each bullet
111
+ 5. omit low-signal internal churn unless it materially affects users
112
+ 6. do not hard-wrap or reflow the release notes to fit an 80-column line limit
113
+ 7. keep each summary paragraph on one physical line
114
+ 8. keep each bullet on one physical line
115
+
116
+ The template shape is intentionally short, closer to:
117
+
118
+ ```markdown
119
+ # v<version>
120
+
121
+ ## Summary
122
+
123
+ One or two concise sentences.
124
+
125
+ ## Added
126
+
127
+ - Short user-facing addition (`abc1234`)
128
+
129
+ ## Changed
130
+
131
+ - Short user-facing change (`def5678`)
132
+
133
+ ## Fixed
134
+
135
+ - Short user-facing fix (`fedcba9`)
136
+ ```
137
+
138
+ For an initial release, make that explicit in the summary.
139
+
140
+ The helper intentionally stops at guardrails plus release context. Do the
141
+ commit review and release-note writing directly in the release task instead of
142
+ trying to encode the whole release process in a script.
143
+
144
+ ### 5. Verify
145
+
146
+ Run from the repository root:
147
+
148
+ ```bash
149
+ /usr/bin/make format
150
+ /usr/bin/make lint
151
+ /usr/bin/make tests
152
+ ```
153
+
154
+ Do not create a release tag until all three pass.
155
+
156
+ ### 6. Create the tag locally only
157
+
158
+ Create the tag:
159
+
160
+ ```bash
161
+ git tag -a v<version> -F docs/releases/v<version>.md
162
+ ```
163
+
164
+ Rules:
165
+
166
+ 1. create the tag locally only
167
+ 2. do not push the tag
168
+ 3. use the release notes file as the annotated tag body
169
+ 4. report the tag name and release notes path back to the user
170
+
171
+ ## Expected output
172
+
173
+ A release-ready result should include:
174
+
175
+ 1. the chosen version
176
+ 2. confirmation that the release was cut from `main`
177
+ 3. confirmation that the worktree was clean before the release started
178
+ 4. confirmation that all package versions match
179
+ 5. the release notes file path
180
+ 6. the verification results
181
+ 7. the local tag name
182
+ 8. an explicit note that the tag was not pushed
@@ -0,0 +1,27 @@
1
+ # v<version>
2
+
3
+ ## Summary
4
+
5
+ One or two short sentences describing what changed in this release and why it matters to users.
6
+
7
+ ## Added
8
+
9
+ - Short user-facing addition ([`abc1234`](https://github.com/<owner>/<repo>/commit/abc1234))
10
+
11
+ ## Changed
12
+
13
+ - Short user-facing change ([`def5678`](https://github.com/<owner>/<repo>/commit/def5678))
14
+
15
+ ## Fixed
16
+
17
+ - Short user-facing fix ([`fedcba9`](https://github.com/<owner>/<repo>/commit/fedcba9))
18
+
19
+ ## Notes
20
+
21
+ - Keep this file concise.
22
+ - Include only notable user-facing changes.
23
+ - Prefer commit links over issue taxonomy unless an issue number adds real value.
24
+ - For an initial release, say so in the summary.
25
+ - Do not hard-wrap or reflow lines to fit an 80-column limit.
26
+ - Keep each summary paragraph on one physical line.
27
+ - Keep each bullet on one physical line.
@@ -0,0 +1,171 @@
1
+ #!/usr/bin/env python3
2
+ """Print minimal release context and enforce release guardrails."""
3
+
4
+ import argparse
5
+ import subprocess
6
+ import tomllib
7
+ from pathlib import Path
8
+
9
+
10
+ def run_git(
11
+ repo_root: Path,
12
+ *args: str,
13
+ check: bool = True,
14
+ ) -> subprocess.CompletedProcess[str]:
15
+ """Run one git command from the repository root."""
16
+ return subprocess.run(
17
+ ["git", *args],
18
+ cwd=repo_root,
19
+ check=check,
20
+ capture_output=True,
21
+ text=True,
22
+ )
23
+
24
+
25
+ def repo_root() -> Path:
26
+ """Resolve the current repository root."""
27
+ result = run_git(Path.cwd(), "rev-parse", "--show-toplevel")
28
+ return Path(result.stdout.strip())
29
+
30
+
31
+ def ensure_main_branch(repo_root_path: Path) -> str:
32
+ """Ensure the release is being prepared from the main branch."""
33
+ result = run_git(repo_root_path, "branch", "--show-current")
34
+ branch = result.stdout.strip()
35
+ if branch != "main":
36
+ raise RuntimeError(
37
+ "Release preparation must run from the main branch. "
38
+ f"Current branch: {branch or '<detached>'}."
39
+ )
40
+ return branch
41
+
42
+
43
+ def ensure_clean_worktree(repo_root_path: Path) -> None:
44
+ """Ensure the working tree is clean before release preparation starts."""
45
+ result = run_git(repo_root_path, "status", "--short")
46
+ lines = [line for line in result.stdout.splitlines() if line.strip()]
47
+ if not lines:
48
+ return
49
+
50
+ joined = "\n".join(lines)
51
+ raise RuntimeError(
52
+ "Release preparation requires a clean working tree. "
53
+ "Commit or stash changes first.\n"
54
+ f"{joined}"
55
+ )
56
+
57
+
58
+ def discover_version_file_paths(repo_root_path: Path) -> list[Path]:
59
+ """Return the root package file plus all workspace package files."""
60
+ paths: list[Path] = [Path("pyproject.toml")]
61
+ packages_root = repo_root_path / "packages"
62
+ if not packages_root.is_dir():
63
+ return paths
64
+
65
+ for package_file in sorted(packages_root.glob("*/pyproject.toml")):
66
+ paths.append(package_file.relative_to(repo_root_path))
67
+ return paths
68
+
69
+
70
+ def read_versions(repo_root_path: Path) -> dict[str, str]:
71
+ """Read package versions from the root and workspace package files."""
72
+ versions: dict[str, str] = {}
73
+ for relative_path in discover_version_file_paths(repo_root_path):
74
+ absolute_path = repo_root_path / relative_path
75
+ with absolute_path.open("rb") as handle:
76
+ data = tomllib.load(handle)
77
+ project = data.get("project", {})
78
+ version = project.get("version")
79
+ if not isinstance(version, str):
80
+ raise RuntimeError(f"Missing string version in {relative_path}.")
81
+ versions[str(relative_path)] = version
82
+ return versions
83
+
84
+
85
+ def latest_semver_tag(repo_root_path: Path) -> str | None:
86
+ """Return the latest fetched semver tag, if one exists."""
87
+ result = run_git(repo_root_path, "tag", "--sort=-v:refname")
88
+ for line in result.stdout.splitlines():
89
+ candidate = line.strip()
90
+ if candidate.startswith("v"):
91
+ return candidate
92
+ return None
93
+
94
+
95
+ def parse_args() -> argparse.Namespace:
96
+ """Parse command-line arguments."""
97
+ parser = argparse.ArgumentParser(
98
+ description="Check release guardrails and print release context."
99
+ )
100
+ parser.add_argument(
101
+ "--remote",
102
+ default="origin",
103
+ help="Git remote used for tags. Defaults to origin.",
104
+ )
105
+ return parser.parse_args()
106
+
107
+
108
+ def print_release_context(
109
+ *,
110
+ repo_root_path: Path,
111
+ remote: str,
112
+ branch: str,
113
+ versions: dict[str, str],
114
+ last_tag: str | None,
115
+ ) -> None:
116
+ """Print the small release context that is useful to the skill."""
117
+ print("Release context")
118
+ print(f"Repository: {repo_root_path}")
119
+ print(f"Remote: {remote}")
120
+ print(f"Branch: {branch}")
121
+ print("Worktree: clean")
122
+ print()
123
+
124
+ print("Version files:")
125
+ for path, version in versions.items():
126
+ print(f"- {path}: {version}")
127
+ lockstep = len(set(versions.values())) == 1
128
+ print(f"Lockstep: {'yes' if lockstep else 'no'}")
129
+ print()
130
+
131
+ if last_tag is None:
132
+ review_range = "HEAD"
133
+ print("Last remote tag: none")
134
+ print("Review range: initial release (full history)")
135
+ else:
136
+ review_range = f"{last_tag}..HEAD"
137
+ print(f"Last remote tag: {last_tag}")
138
+ print(f"Review range: {review_range}")
139
+ print()
140
+
141
+ print("Suggested review commands:")
142
+ if last_tag is None:
143
+ print("- git log --reverse --no-merges --oneline HEAD")
144
+ print("- git log --name-only --pretty=format: --diff-filter=AM HEAD")
145
+ else:
146
+ print(f"- git log --reverse --no-merges --oneline {review_range}")
147
+ print(f"- git diff --name-only {review_range}")
148
+
149
+
150
+ def main() -> int:
151
+ """Run the release helper."""
152
+ args = parse_args()
153
+ repo_root_path = repo_root()
154
+ branch = ensure_main_branch(repo_root_path)
155
+ ensure_clean_worktree(repo_root_path)
156
+ run_git(repo_root_path, "fetch", "--tags", args.remote)
157
+
158
+ versions = read_versions(repo_root_path)
159
+ last_tag = latest_semver_tag(repo_root_path)
160
+ print_release_context(
161
+ repo_root_path=repo_root_path,
162
+ remote=args.remote,
163
+ branch=branch,
164
+ versions=versions,
165
+ last_tag=last_tag,
166
+ )
167
+ return 0
168
+
169
+
170
+ if __name__ == "__main__":
171
+ raise SystemExit(main())
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ REPO_ROOT="$(git -C "${SCRIPT_DIR}" rev-parse --show-toplevel 2>/dev/null || true)"
6
+ REPO_ROOT="${REPO_ROOT:-$(cd "${SCRIPT_DIR}/../../../.." && pwd)}"
7
+
8
+ cd "${REPO_ROOT}"
9
+ uv run python .agents/skills/release/scripts/release_context.py "$@"