proseforge-agent 0.2.0__tar.gz → 0.3.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 (419) hide show
  1. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/PKG-INFO +116 -91
  2. proseforge_agent-0.2.0/src/proseforge_agent.egg-info/PKG-INFO → proseforge_agent-0.3.0/README.md +111 -105
  3. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/pyproject.toml +5 -1
  4. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/__init__.py +1 -1
  5. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/cli.py +158 -10
  6. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/doctor.py +18 -2
  7. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/reports/render.py +16 -2
  8. proseforge_agent-0.2.0/README.md → proseforge_agent-0.3.0/src/proseforge_agent.egg-info/PKG-INFO +130 -90
  9. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent.egg-info/SOURCES.txt +2 -0
  10. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent.egg-info/requires.txt +5 -0
  11. proseforge_agent-0.3.0/tests/test_cli_quickstart.py +75 -0
  12. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_execution_guard_timeout.py +6 -1
  13. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_managed_install_scripts.py +39 -0
  14. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_memory_schema.py +4 -0
  15. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_package.py +1 -1
  16. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_pypi_first_publish_and_version_bump.py +2 -2
  17. proseforge_agent-0.3.0/tests/test_report_readiness_badge.py +92 -0
  18. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_service_http_server.py +2 -0
  19. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_sub_agent.py +16 -5
  20. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_tool_sandbox.py +4 -0
  21. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/LICENSE +0 -0
  22. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/setup.cfg +0 -0
  23. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/__main__.py +0 -0
  24. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/_bootstrap.py +0 -0
  25. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/__init__.py +0 -0
  26. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/artifacts.py +0 -0
  27. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/attachments.py +0 -0
  28. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/audit.py +0 -0
  29. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/context_window.py +0 -0
  30. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/control.py +0 -0
  31. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/degradation.py +0 -0
  32. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/eval.py +0 -0
  33. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/events.py +0 -0
  34. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/execution_guard.py +0 -0
  35. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/function_calling.py +0 -0
  36. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/intent_router.py +0 -0
  37. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/kernel.py +0 -0
  38. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/loop.py +0 -0
  39. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/middleware.py +0 -0
  40. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/modes.py +0 -0
  41. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/observability.py +0 -0
  42. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/offline.py +0 -0
  43. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/permissions.py +0 -0
  44. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/planner.py +0 -0
  45. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/profiles.py +0 -0
  46. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/prompt_templates.py +0 -0
  47. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/provider_fallback.py +0 -0
  48. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/reflection.py +0 -0
  49. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/request_cache.py +0 -0
  50. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/safety.py +0 -0
  51. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/sandbox.py +0 -0
  52. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/structured_output.py +0 -0
  53. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/subagent.py +0 -0
  54. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/tools.py +0 -0
  55. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/agent/types.py +0 -0
  56. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/capabilities.py +0 -0
  57. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/chapter/__init__.py +0 -0
  58. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/chapter/accept.py +0 -0
  59. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/chapter/context.py +0 -0
  60. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/chapter/draft.py +0 -0
  61. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/chapter/lifecycle.py +0 -0
  62. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/chapter/review.py +0 -0
  63. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/chapter/rewrite.py +0 -0
  64. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/chat/__init__.py +0 -0
  65. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/chat/context.py +0 -0
  66. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/chat/handoff.py +0 -0
  67. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/chat/memory.py +0 -0
  68. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/chat/prompts.py +0 -0
  69. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/chat/repl.py +0 -0
  70. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/chat/retrieval.py +0 -0
  71. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/chat/session.py +0 -0
  72. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/chat/slash.py +0 -0
  73. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/chat/system_prompts.py +0 -0
  74. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/chat/transcript.py +0 -0
  75. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/concurrency.py +0 -0
  76. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/config.py +0 -0
  77. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/cron/__init__.py +0 -0
  78. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/cron/core.py +0 -0
  79. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/daily/__init__.py +0 -0
  80. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/daily/recommend.py +0 -0
  81. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/daily/workbook.py +0 -0
  82. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/demo.py +0 -0
  83. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/dotenv.py +0 -0
  84. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/environments/__init__.py +0 -0
  85. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/environments/base.py +0 -0
  86. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/environments/checkpoints.py +0 -0
  87. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/environments/daytona.py +0 -0
  88. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/environments/docker.py +0 -0
  89. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/environments/file_sync.py +0 -0
  90. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/environments/local.py +0 -0
  91. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/environments/modal.py +0 -0
  92. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/environments/process_registry.py +0 -0
  93. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/environments/process_runner.py +0 -0
  94. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/environments/serverless.py +0 -0
  95. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/environments/singularity.py +0 -0
  96. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/environments/ssh.py +0 -0
  97. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/errors.py +0 -0
  98. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/eval/__init__.py +0 -0
  99. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/eval/trajectories.py +0 -0
  100. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/extensions/__init__.py +0 -0
  101. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/extensions/base.py +0 -0
  102. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/extensions/registry.py +0 -0
  103. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/gateway/__init__.py +0 -0
  104. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/gateway/core.py +0 -0
  105. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/gateway/delivery.py +0 -0
  106. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/gateway/media.py +0 -0
  107. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/gateway/platforms/__init__.py +0 -0
  108. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/gateway/platforms/base.py +0 -0
  109. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/gateway/platforms/discord.py +0 -0
  110. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/gateway/platforms/email.py +0 -0
  111. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/gateway/platforms/mobile_email.py +0 -0
  112. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/gateway/platforms/signal.py +0 -0
  113. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/gateway/platforms/slack.py +0 -0
  114. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/gateway/platforms/telegram.py +0 -0
  115. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/gateway/platforms/telegram_transport.py +0 -0
  116. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/gateway/platforms/whatsapp.py +0 -0
  117. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/gateway/poller.py +0 -0
  118. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/gateway/relay/__init__.py +0 -0
  119. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/gateway/relay/auth.py +0 -0
  120. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/__init__.py +0 -0
  121. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/app_dirs.py +0 -0
  122. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/auto_trigger.py +0 -0
  123. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/binary_build.py +0 -0
  124. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/binary_packaging.py +0 -0
  125. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/ci_matrix.py +0 -0
  126. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/docker_plan.py +0 -0
  127. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/first_run.py +0 -0
  128. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/installer_scripts.py +0 -0
  129. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/installers.py +0 -0
  130. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/linux.py +0 -0
  131. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/local_models.py +0 -0
  132. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/macos.py +0 -0
  133. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/migrations.py +0 -0
  134. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/package_checks.py +0 -0
  135. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/platform_io.py +0 -0
  136. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/provider_setup.py +0 -0
  137. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/qa_matrix.py +0 -0
  138. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/secrets.py +0 -0
  139. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/shell.py +0 -0
  140. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/support_bundle.py +0 -0
  141. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/uninstall.py +0 -0
  142. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/install/windows.py +0 -0
  143. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/__init__.py +0 -0
  144. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/base.py +0 -0
  145. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/capabilities.py +0 -0
  146. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/certification.py +0 -0
  147. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/docs_refresh.py +0 -0
  148. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/fake.py +0 -0
  149. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/http.py +0 -0
  150. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/openai_compatible.py +0 -0
  151. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/policies.py +0 -0
  152. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/probes.py +0 -0
  153. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/profiles.py +0 -0
  154. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/__init__.py +0 -0
  155. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/_openai_shape.py +0 -0
  156. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/anthropic.py +0 -0
  157. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/deepseek.py +0 -0
  158. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/doubao.py +0 -0
  159. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/gemini.py +0 -0
  160. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/glm.py +0 -0
  161. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/grok.py +0 -0
  162. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/mimo.py +0 -0
  163. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/minimax.py +0 -0
  164. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/openai.py +0 -0
  165. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/profiles/anthropic.yaml +0 -0
  166. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/profiles/deepseek.yaml +0 -0
  167. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/profiles/doubao.yaml +0 -0
  168. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/profiles/gemini.yaml +0 -0
  169. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/profiles/glm.yaml +0 -0
  170. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/profiles/mimo.yaml +0 -0
  171. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/profiles/minimax.yaml +0 -0
  172. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/profiles/openai.yaml +0 -0
  173. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/profiles/qwen.yaml +0 -0
  174. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/profiles/xai.yaml +0 -0
  175. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/providers/qwen.py +0 -0
  176. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/registry.py +0 -0
  177. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/router.py +0 -0
  178. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/streaming.py +0 -0
  179. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/llm/usage.py +0 -0
  180. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/mcp/__init__.py +0 -0
  181. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/mcp/approval.py +0 -0
  182. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/mcp/client.py +0 -0
  183. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/mcp/credentials.py +0 -0
  184. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/mcp/policy.py +0 -0
  185. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/mcp/registry.py +0 -0
  186. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/mcp/schema.py +0 -0
  187. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/memory/__init__.py +0 -0
  188. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/memory/compact.py +0 -0
  189. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/memory/ingest.py +0 -0
  190. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/memory/nudges.py +0 -0
  191. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/memory/review.py +0 -0
  192. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/memory/schema.py +0 -0
  193. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/memory/store.py +0 -0
  194. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/memory/user_model.py +0 -0
  195. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/notifications/__init__.py +0 -0
  196. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/notifications/core.py +0 -0
  197. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/notifications/desktop.py +0 -0
  198. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/notifications/jobs.py +0 -0
  199. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/notifications/webhook.py +0 -0
  200. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/__init__.py +0 -0
  201. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/approval_queue.py +0 -0
  202. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/artifacts.py +0 -0
  203. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/backup_verification.py +0 -0
  204. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/bible.py +0 -0
  205. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/character_arcs.py +0 -0
  206. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/continuity.py +0 -0
  207. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/draft_versioning.py +0 -0
  208. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/editorial_pipeline.py +0 -0
  209. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/exporter.py +0 -0
  210. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/foreshadowing.py +0 -0
  211. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/importer.py +0 -0
  212. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/literary_regression.py +0 -0
  213. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/manifest.py +0 -0
  214. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/manuscript_search.py +0 -0
  215. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/plot_threads.py +0 -0
  216. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/project_health.py +0 -0
  217. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/publishing.py +0 -0
  218. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/reader_review.py +0 -0
  219. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/relationship_graph.py +0 -0
  220. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/reorganize.py +0 -0
  221. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/rewrite_strategies.py +0 -0
  222. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/safety.py +0 -0
  223. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/scenes.py +0 -0
  224. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/storage.py +0 -0
  225. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/style_profile.py +0 -0
  226. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/timeline.py +0 -0
  227. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/writing_analytics.py +0 -0
  228. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/writing_quality.py +0 -0
  229. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/novel/writing_rules.py +0 -0
  230. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/planning/__init__.py +0 -0
  231. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/planning/intake.py +0 -0
  232. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/planning/phase_plan.py +0 -0
  233. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/plugins/__init__.py +0 -0
  234. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/plugins/dependencies.py +0 -0
  235. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/plugins/discovery.py +0 -0
  236. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/plugins/harness.py +0 -0
  237. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/plugins/hooks.py +0 -0
  238. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/plugins/manager.py +0 -0
  239. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/plugins/manifest.py +0 -0
  240. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/plugins/permissions.py +0 -0
  241. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/plugins/sandbox.py +0 -0
  242. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/proseforge/__init__.py +0 -0
  243. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/proseforge/adapter.py +0 -0
  244. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/proseforge/results.py +0 -0
  245. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/release/__init__.py +0 -0
  246. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/release/complete_agent_gate.py +0 -0
  247. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/release/publish.py +0 -0
  248. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/release/version_policy.py +0 -0
  249. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/reports/__init__.py +0 -0
  250. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/reports/registry.py +0 -0
  251. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/retrieval/__init__.py +0 -0
  252. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/retrieval/embeddings.py +0 -0
  253. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/retrieval/evaluation.py +0 -0
  254. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/retrieval/evidence.py +0 -0
  255. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/retrieval/hybrid.py +0 -0
  256. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/retrieval/index.py +0 -0
  257. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/retrieval/ingestion.py +0 -0
  258. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/retrieval/router.py +0 -0
  259. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/retrieval/vector_store.py +0 -0
  260. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/service/__init__.py +0 -0
  261. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/service/api.py +0 -0
  262. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/service/http_server.py +0 -0
  263. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/setup/__init__.py +0 -0
  264. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/setup/config_generator.py +0 -0
  265. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/setup/first_run.py +0 -0
  266. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/setup/modes.py +0 -0
  267. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/setup/recovery.py +0 -0
  268. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/setup/summary.py +0 -0
  269. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/setup/wizard.py +0 -0
  270. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/skills/__init__.py +0 -0
  271. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/skills/audit.py +0 -0
  272. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/skills/creation.py +0 -0
  273. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/skills/hub.py +0 -0
  274. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/skills/improvement.py +0 -0
  275. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/skills/install.py +0 -0
  276. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/skills/registry.py +0 -0
  277. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/skills/usage.py +0 -0
  278. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/testing/__init__.py +0 -0
  279. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/testing/fakes.py +0 -0
  280. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/tools/__init__.py +0 -0
  281. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/tools/managed/__init__.py +0 -0
  282. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/tools/managed/cloud_browser.py +0 -0
  283. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/tools/managed/media.py +0 -0
  284. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/tools/managed/url_safety.py +0 -0
  285. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/tools/managed/web_search.py +0 -0
  286. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/tui/__init__.py +0 -0
  287. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/tui/ansi.py +0 -0
  288. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/tui/app.py +0 -0
  289. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/tui/fullscreen.py +0 -0
  290. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/tui/keys.py +0 -0
  291. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/tui/screen.py +0 -0
  292. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/tui/streaming.py +0 -0
  293. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/workflow/__init__.py +0 -0
  294. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/workflow/recovery.py +0 -0
  295. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/workflow/state.py +0 -0
  296. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent/workspace.py +0 -0
  297. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent.egg-info/dependency_links.txt +0 -0
  298. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent.egg-info/entry_points.txt +0 -0
  299. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/src/proseforge_agent.egg-info/top_level.txt +0 -0
  300. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_agent_events_jobs.py +0 -0
  301. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_agent_kernel.py +0 -0
  302. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_agent_loop.py +0 -0
  303. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_agent_profiles_personas.py +0 -0
  304. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_agent_safety_guard.py +0 -0
  305. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_agent_tools_permissions.py +0 -0
  306. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_app_dirs.py +0 -0
  307. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_attachment_ingestion.py +0 -0
  308. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_audit_trail_debuggability.py +0 -0
  309. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_binary_build.py +0 -0
  310. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_binary_packaging.py +0 -0
  311. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_capabilities.py +0 -0
  312. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_chapter_lifecycle.py +0 -0
  313. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_chapter_review.py +0 -0
  314. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_chat_cli_repl.py +0 -0
  315. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_chat_memory_preferences.py +0 -0
  316. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_chat_prompt_protocol.py +0 -0
  317. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_chat_retrieval_citations.py +0 -0
  318. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_chat_session_store.py +0 -0
  319. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_chat_workflow_handoff.py +0 -0
  320. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_ci_pipeline.py +0 -0
  321. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_cli.py +0 -0
  322. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_cli_commands.py +0 -0
  323. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_cli_config_yaml_example_seed.py +0 -0
  324. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_community_and_agent_docs.py +0 -0
  325. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_complete_agent_release_gate.py +0 -0
  326. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_concurrency_locking.py +0 -0
  327. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_config.py +0 -0
  328. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_context_window_management.py +0 -0
  329. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_control_interrupt.py +0 -0
  330. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_conversation_lifecycle.py +0 -0
  331. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_cross_session_search.py +0 -0
  332. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_daily_recommendations.py +0 -0
  333. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_daily_workbook.py +0 -0
  334. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_default_chat_repl_on_bare_command.py +0 -0
  335. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_default_provider_resolution.py +0 -0
  336. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_docker_distribution.py +0 -0
  337. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_dotenv_support.py +0 -0
  338. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_e2e_demo.py +0 -0
  339. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_evidence_pack.py +0 -0
  340. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_extensions.py +0 -0
  341. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_first_run_auto_trigger.py +0 -0
  342. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_first_run_onboarding.py +0 -0
  343. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_fs_edit_and_registry_hardening.py +0 -0
  344. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_general_tools.py +0 -0
  345. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_graceful_degradation.py +0 -0
  346. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_injection_guard_cjk_precision.py +0 -0
  347. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_installation_doctor.py +0 -0
  348. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_intent_router.py +0 -0
  349. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_linux_native_support.py +0 -0
  350. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_llm_fake_and_routing.py +0 -0
  351. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_llm_response_normalization.py +0 -0
  352. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_local_agent_service_api.py +0 -0
  353. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_loud_placeholders_and_wiring.py +0 -0
  354. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_low_severity_review_cleanups.py +0 -0
  355. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_macos_native_support.py +0 -0
  356. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_mcp_policy_enforced_in_client.py +0 -0
  357. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_memory_compaction.py +0 -0
  358. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_memory_ingestion.py +0 -0
  359. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_memory_store.py +0 -0
  360. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_middleware_hooks_trajectory_datasets.py +0 -0
  361. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_middleware_wiring.py +0 -0
  362. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_native_qa_matrix.py +0 -0
  363. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_native_secret_storage.py +0 -0
  364. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_observer_hooks_telemetry_export.py +0 -0
  365. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_offline_local_model_setup.py +0 -0
  366. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_offline_mode.py +0 -0
  367. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_openai_compatible_provider.py +0 -0
  368. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_os_installers.py +0 -0
  369. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_phase_plan_generator.py +0 -0
  370. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_platform_io.py +0 -0
  371. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_prompt_template_registry.py +0 -0
  372. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_proseforge_adapter.py +0 -0
  373. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_provider_anthropic.py +0 -0
  374. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_provider_certification.py +0 -0
  375. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_provider_deepseek.py +0 -0
  376. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_provider_doubao.py +0 -0
  377. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_provider_fallback.py +0 -0
  378. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_provider_gemini.py +0 -0
  379. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_provider_glm.py +0 -0
  380. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_provider_grok.py +0 -0
  381. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_provider_mimo.py +0 -0
  382. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_provider_minimax.py +0 -0
  383. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_provider_openai.py +0 -0
  384. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_provider_probes.py +0 -0
  385. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_provider_profiles.py +0 -0
  386. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_provider_qwen.py +0 -0
  387. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_provider_registry.py +0 -0
  388. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_provider_router.py +0 -0
  389. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_provider_setup_wizard.py +0 -0
  390. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_provider_usage_metering.py +0 -0
  391. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_pypi_publish.py +0 -0
  392. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_python_install_flows.py +0 -0
  393. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_readme_localization.py +0 -0
  394. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_release_checks.py +0 -0
  395. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_reports.py +0 -0
  396. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_request_cache.py +0 -0
  397. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_retrieval_router.py +0 -0
  398. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_rewrite_accept.py +0 -0
  399. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_self_verification.py +0 -0
  400. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_session_branching.py +0 -0
  401. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_session_export_import.py +0 -0
  402. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_shell_completions_launchers.py +0 -0
  403. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_store_concurrency_and_idempotency.py +0 -0
  404. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_streaming_responses.py +0 -0
  405. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_streaming_tool_output.py +0 -0
  406. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_structured_function_calling.py +0 -0
  407. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_support_bundle.py +0 -0
  408. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_system_prompt_management.py +0 -0
  409. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_task_planner.py +0 -0
  410. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_tool_result_artifacts_output_limits.py +0 -0
  411. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_tool_timeout_rate_limit_circuit_breaker.py +0 -0
  412. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_unified_redaction.py +0 -0
  413. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_uninstall_data_retention.py +0 -0
  414. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_upgrade_migration_backup.py +0 -0
  415. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_windows_native_support.py +0 -0
  416. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_windows_utf8_bootstrap.py +0 -0
  417. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_workflow_recovery.py +0 -0
  418. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_workflow_state.py +0 -0
  419. {proseforge_agent-0.2.0 → proseforge_agent-0.3.0}/tests/test_workspace.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: proseforge-agent
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: Agentic orchestration layer for long-form novel production on top of the ProseForge engine.
5
5
  Author: ProseForge Agent
6
6
  License: Apache-2.0
@@ -11,101 +11,127 @@ Requires-Dist: pyyaml>=6.0
11
11
  Requires-Dist: tomli>=2.0; python_version < "3.11"
12
12
  Provides-Extra: dev
13
13
  Requires-Dist: pytest>=7.0; extra == "dev"
14
+ Provides-Extra: ci
15
+ Requires-Dist: pytest>=7.0; extra == "ci"
16
+ Requires-Dist: pytest-rerunfailures>=13.0; extra == "ci"
17
+ Requires-Dist: pytest-repeat>=0.9; extra == "ci"
14
18
  Dynamic: license-file
15
19
 
16
20
  > 🌐 [English](README.md) · [简体中文](README.zh-CN.md)
17
21
 
18
- # ProseForge Agent
22
+ <p align="center">
23
+ <img src="assets/banner.png" alt="ProseForge Agent novel-writing command center" width="100%">
24
+ </p>
19
25
 
20
- An agentic orchestration layer for long-form novel production. It wraps the
21
- canonical **ProseForge engine** (`$PROSEFORGE_ROOT`) with planning, retrieval,
22
- drafting, review, revision, deep memory, multi-provider model routing, daily
23
- workbooks, reports, extensions, an agent runtime, chat, an autonomous
24
- goal-directed loop, MCP integration, execution environments, skills, hosted
25
- cron, observability, middleware, and a real publish/binary/installer chain.
26
+ <h1 align="center">ProseForge Agent</h1>
26
27
 
27
- ProseForge Agent does **not** reimplement the writing engine. The engine at
28
- `$PROSEFORGE_ROOT` remains the source of truth for project slots, pipeline
29
- actions, guards, reports, and exports. This package owns orchestration:
30
- model calls, provider routing, schedules, evidence packs, agent memory,
31
- workflow state, conversational agent loop, and background event processing.
28
+ <p align="center">
29
+ <strong>An AI command layer for long-form novel production.</strong>
30
+ </p>
31
+
32
+ <p align="center">
33
+ <a href="README.zh-CN.md">简体中文</a> ·
34
+ <a href="https://pypi.org/project/proseforge-agent/">PyPI</a> ·
35
+ <a href="https://github.com/remacheybn408-boop/ProseForge-Agent/releases/tag/v0.2.0">Release v0.2.0</a> ·
36
+ <a href="https://github.com/remacheybn408-boop/ProseForge-Agent/pkgs/container/proseforge-agent">GHCR</a>
37
+ </p>
38
+
39
+ <p align="center">
40
+ <a href="https://pypi.org/project/proseforge-agent/"><img src="https://img.shields.io/pypi/v/proseforge-agent?style=for-the-badge&label=PyPI" alt="PyPI version"></a>
41
+ <a href="https://pypi.org/project/proseforge-agent/"><img src="https://img.shields.io/pypi/pyversions/proseforge-agent?style=for-the-badge" alt="Python versions"></a>
42
+ <a href="https://github.com/remacheybn408-boop/ProseForge-Agent/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/remacheybn408-boop/ProseForge-Agent/ci.yml?branch=main&style=for-the-badge&label=CI" alt="CI status"></a>
43
+ <a href="LICENSE"><img src="https://img.shields.io/badge/License-Apache--2.0-green?style=for-the-badge" alt="Apache-2.0 license"></a>
44
+ </p>
45
+
46
+ ProseForge Agent turns a novel project into a managed creative workflow:
47
+ plan the book, retrieve canon, draft scenes, review prose, rewrite chapters,
48
+ track memory, and run the whole process through your preferred model
49
+ provider. It sits above the canonical **ProseForge engine**
50
+ (`$PROSEFORGE_ROOT`) and handles orchestration rather than replacing the
51
+ writing engine.
52
+
53
+ Use it as a CLI, a full-screen terminal UI, a local HTTP service, a Docker
54
+ image, or a background agent with gateway integrations.
32
55
 
33
- ## Status
56
+ <table>
57
+ <tr><td><b>Plan the whole book</b></td><td>Turn a project goal into phase plans, daily workbooks, chapter tasks, and scene-level workflow.</td></tr>
58
+ <tr><td><b>Draft with memory</b></td><td>Retrieve canon, timeline, character notes, prior scenes, and evidence packs before the model writes.</td></tr>
59
+ <tr><td><b>Review and revise</b></td><td>Run a chapter lifecycle from draft to review, rewrite, and accept, with quality gates and rollback-friendly artifacts.</td></tr>
60
+ <tr><td><b>Use the model you want</b></td><td>Profiles for OpenAI, Anthropic, Gemini, xAI/Grok, DeepSeek, Qwen, GLM, Mimo, MiniMax, Doubao, plus an offline fake provider.</td></tr>
61
+ <tr><td><b>Run it like a real tool</b></td><td>Interactive REPL, full-screen TUI, local API, Docker image, Telegram gateway, MCP stdio, local execution, cron, and telemetry.</td></tr>
62
+ <tr><td><b>Published now</b></td><td><code>v0.2.0</code> is live on PyPI, GHCR, and GitHub Releases. Release gate: <code>1358 tests passing</code> — 35 integration (real subprocess / HTTP / SQLite), the rest offline fakes.</td></tr>
63
+ </table>
34
64
 
35
- **v0.2.0 — first public release.** 1301 tests passing on Python
36
- 3.10/3.11/3.12 across Windows, macOS, and Linux. See `CHANGELOG.md` for
37
- release notes, and "What is production-ready and what is contract-only"
38
- below for exactly which surfaces are live.
65
+ ---
39
66
 
40
- ## Installation
67
+ ## Quick Install
41
68
 
42
- From PyPI (recommended):
69
+ ### Python package
43
70
 
44
71
  ```bash
45
72
  pip install proseforge-agent
46
73
  pf-agent --help
47
74
  ```
48
75
 
49
- One-line installer (Linux / macOS / WSL2 — installs `uv` or uses `pipx`
50
- and puts `pf-agent` on your PATH):
76
+ ### Linux, macOS, WSL2
51
77
 
52
78
  ```bash
53
79
  curl -fsSL https://raw.githubusercontent.com/remacheybn408-boop/ProseForge-Agent/main/scripts/install.sh | sh
54
80
  ```
55
81
 
56
- Windows PowerShell:
82
+ ### Windows PowerShell
57
83
 
58
84
  ```powershell
59
85
  iex (irm https://raw.githubusercontent.com/remacheybn408-boop/ProseForge-Agent/main/scripts/install.ps1)
60
86
  ```
61
87
 
62
- Docker (runs the HTTP service on port 8765; a bearer token is required
63
- for the non-loopback bind):
88
+ ### Docker
64
89
 
65
90
  ```bash
66
91
  docker pull ghcr.io/remacheybn408-boop/proseforge-agent:latest
67
92
  PF_AGENT_SERVICE_TOKEN=<your-token> docker compose up
68
93
  ```
69
94
 
70
- From source:
95
+ Install from source, or pass `--git main` to `install.sh`, only when you
96
+ want unreleased changes from `main`.
71
97
 
72
- ```bash
73
- git clone https://github.com/remacheybn408-boop/ProseForge-Agent.git
74
- cd ProseForge-Agent
75
- pip install -e ".[dev]"
76
- ```
77
-
78
- > PyPI and GHCR artifacts are published by the tag-triggered release
79
- > workflow; if a brand-new version has not been tagged yet, install from
80
- > source or pass `--git main` to `install.sh`.
81
-
82
- ## Quickstart
98
+ ## Getting Started
83
99
 
84
100
  ```bash
85
101
  pf-agent setup # guided wizard: providers, keys, workspace
86
- pf-agent # bare command opens the interactive chat REPL
102
+ pf-agent # interactive chat REPL
103
+ pf-agent tui # full-screen terminal UI
104
+ pf-agent chat --message "draft an opening" --provider fake
105
+ pf-agent run --goal "draft a one-line opening" --max-iterations 5
106
+ pf-agent service serve # local HTTP API on 127.0.0.1:8765
87
107
  ```
88
108
 
89
109
  The bare `pf-agent` command works like other coding agents' CLIs: the
90
110
  first run bootstraps a workspace, and after `pf-agent setup` it talks to
91
- your configured default model (the REPL banner shows which provider and
92
- model are active). Without setup it runs against the offline fake
93
- provider so you can tour the CLI with no keys.
94
-
95
- More entry points:
96
-
97
- ```bash
98
- pf-agent doctor # verify the installation and wiring
99
- pf-agent chat --message "draft an opening" # one-shot chat turn
100
- pf-agent run --goal "draft a one-line opening" --max-iterations 5
101
- pf-agent service serve # local HTTP API on 127.0.0.1:8765
102
- ```
111
+ your configured default model. Without setup, it runs against the offline
112
+ fake provider so you can tour the CLI with no keys.
103
113
 
104
114
  Set provider API keys in your environment (or `.env`, see
105
115
  `.env.example`): `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, and friends.
106
- Any command accepts `--provider fake` for a no-key offline tour.
116
+ Every command accepts `--provider fake` for a no-key offline tour.
117
+
118
+ ## Project Boundary
119
+
120
+ ProseForge Agent does **not** reimplement the writing engine. The engine at
121
+ `$PROSEFORGE_ROOT` remains the source of truth for project slots, pipeline
122
+ actions, guards, reports, and exports. This package owns orchestration:
123
+ model calls, provider routing, schedules, evidence packs, agent memory,
124
+ workflow state, conversational agent loops, and background event handling.
125
+
126
+ ## Release Status
127
+
128
+ `v0.2.0` was published on July 3, 2026 through PyPI Trusted Publishing.
129
+ Release links: [PyPI](https://pypi.org/project/proseforge-agent/),
130
+ [GitHub Release](https://github.com/remacheybn408-boop/ProseForge-Agent/releases/tag/v0.2.0),
131
+ [GHCR image](https://github.com/remacheybn408-boop/ProseForge-Agent/pkgs/container/proseforge-agent),
132
+ and [`CHANGELOG.md`](CHANGELOG.md).
107
133
 
108
- ## Feature overview
134
+ ## Technical Overview
109
135
 
110
136
  The full stack: core orchestration, agent runtime, chat, native install,
111
137
  hardening, autonomous runtime, agent tooling, guided setup, novel
@@ -198,11 +224,11 @@ with deterministic replay.
198
224
 
199
225
  ### MCP integration
200
226
 
201
- MCP client foundation (`stdio` and HTTP/SSE transports with
202
- `StaticMCPTransport` for tests), server registry, security boundary, tool
203
- approval gate, tool schema validation, and credentials boundary. Real
204
- process/network transports are pluggable at call time; test suites use
205
- the deterministic in-process transport.
227
+ MCP client foundation, server registry, security boundary, tool approval
228
+ gate, tool schema validation, and credentials boundary. The `stdio`
229
+ transport is real (subprocess JSON-RPC:
230
+ `pf-agent mcp inspect/tools/call`); HTTP/SSE transports are pluggable at
231
+ call time, and tests use deterministic in-process transports.
206
232
 
207
233
  ### Provider & tool resilience
208
234
 
@@ -295,7 +321,9 @@ requests re-checked by downstream policy, plus research-ready
295
321
  `PyPIPublisher` — real `python -m build` + `twine upload` for TestPyPI /
296
322
  PyPI, gated by the Task 47 `PackageChecker` and duplicate-version refusal,
297
323
  with injectable runner + `dry_run` for offline tests; tokens never appear
298
- in the plan, report, or logs.
324
+ in the plan, report, or logs. The public `v0.2.0` release path uses PyPI
325
+ Trusted Publishing / OIDC, so no long-lived PyPI token is stored in the
326
+ repository.
299
327
 
300
328
  `BinaryBuilder` — real PyInstaller invocation derived from the Task 48
301
329
  `BinaryManifest`, followed by the `pf-agent --version` smoke command as
@@ -412,7 +440,7 @@ configs/ agent and provider example configs
412
440
  docs/ operator, developer, implementation, and
413
441
  task-card plans (docs/superpowers/plans/)
414
442
  samples/ sample extensions
415
- tests/ pytest suite (1301 tests) + contract / golden
443
+ tests/ pytest suite (1338 tests) + contract / golden
416
444
  tiers + fixtures
417
445
  .github/workflows/ci.yml cross-platform CI (Windows, macOS, Linux)
418
446
  ```
@@ -542,38 +570,35 @@ GLM, Mimo, MiniMax, Doubao**.
542
570
  Keep secrets in environment variables or local ignored config files. Do
543
571
  not commit API keys into provider YAML.
544
572
 
545
- ## What is production-ready and what is contract-only
546
-
547
- The project intentionally splits "contract + fake" from "real wiring" so
548
- tests stay deterministic and offline. A few tracks are contract-complete
549
- with fake/dry-run implementations that the operator wires to real
550
- transports at call time:
551
-
552
- - **Production ready today** — LLM providers (real HTTP via `urllib`,
553
- 10 profiles), memory (SQLite), workspace + config, planning / daily /
554
- chapter / workflow, tool registry + permission policy, attachment
555
- ingestion, embeddings + retrieval + RAG, skills, hosted cron
556
- verification, telemetry & trajectory export, the real
557
- publish/binary/installer chain (tag-triggered release workflow:
558
- PyPI + GHCR + GitHub Release), **MCP `stdio`** (real JSON-RPC
559
- subprocess transport: `pf-agent mcp inspect/tools/call`), the
560
- **local execution environment** (real subprocess execution behind
561
- `pf-agent environments exec`, permission + approval gated), the
562
- **Telegram gateway** (real Bot API long-polling:
563
- `pf-agent gateway telegram start`), and the **local HTTP service**
564
- (`pf-agent service serve` on port 8765, bearer-token auth for
565
- non-loopback binds this is what the Docker image runs).
566
- - **Contract-complete with pluggable transport** MCP over HTTP/SSE
567
- (placeholder; stdio is real), remote execution environments
568
- (Docker/Modal/Daytona/SSH/Singularity emit deterministic dry-run
569
- plans that a real backend can execute), and the remaining gateway
570
- platform adapters (Slack/Discord/Signal/Email ship contract shape +
571
- fake transport; wire real HTTP at call time like the Telegram
572
- adapter does).
573
-
574
- The 1301-test suite covers both tracks via injectable runners and fake
575
- transports, so `python -m pytest -q` is fully offline and requires no
576
- credentials.
573
+ ## Readiness table
574
+
575
+ Every command surface reports one of three readiness states, and any
576
+ report that isn't `ready` is stamped with a visible badge in its title
577
+ (`[contract]` or `[planned]`) so you know at a glance when you're
578
+ looking at a real transport vs a scaffold. Pass `--strict` to refuse
579
+ any non-ready command (exits 3).
580
+
581
+ | Surface | Command | Readiness | Notes |
582
+ | --- | --- | --- | --- |
583
+ | LLM providers (10 vendors) | `pf-agent chat --provider <name>` | ✅ ready | real HTTPS via `urllib`, keys from env |
584
+ | Memory / workspace / config | `pf-agent memory ...` / `pf-agent config ...` | ✅ ready | SQLite, portable YAML |
585
+ | Planning / daily / chapter / workflow | `pf-agent plan ...` / `pf-agent chapter ...` | ✅ ready | real |
586
+ | Retrieval + RAG | `pf-agent retrieval ...` | ✅ ready | real |
587
+ | Local HTTP service (port 8765) | `pf-agent service serve` | ✅ ready | bearer auth on non-loopback |
588
+ | MCP over stdio | `pf-agent mcp inspect/tools/call` | ✅ ready | real subprocess JSON-RPC |
589
+ | Local execution env | `pf-agent environments exec` | ready | real subprocess, permission-gated |
590
+ | Telegram gateway | `pf-agent gateway telegram start` | ✅ ready | real Bot API long-polling |
591
+ | Release chain | tag `v*` push | ready | PyPI Trusted Publishing + GHCR + GH Release |
592
+ | MCP over HTTP / SSE | `pf-agent mcp add --transport http ...` | ⚠️ contract | placeholder; opt-in via env |
593
+ | Docker / SSH / Singularity / Modal / Daytona backends | `pf-agent environments check <backend>` | ⚠️ contract | dry-run plans only; real runner injectable |
594
+ | Slack / Discord / Signal / Email gateways | `pf-agent gateway <platform> check` | ⚠️ contract | fake transport; wire like Telegram |
595
+ | Skills hub search / install / update | `pf-agent skills search` etc. | ⚠️ contract | fake hub client + dry-run plans |
596
+ | Anything the CLI routes through `_planned_report` | (many groups) | 🟡 planned | scaffold only, no real code path |
597
+
598
+ The tests-passing count in this README's Status section refers to the
599
+ whole offline suite (fakes + real integration paths together); the four
600
+ "ready" rows above are exercised by the small real-integration subset
601
+ (`pytest -m integration`).
577
602
 
578
603
  ## ProseForge Engine Boundary
579
604
 
@@ -1,111 +1,118 @@
1
- Metadata-Version: 2.4
2
- Name: proseforge-agent
3
- Version: 0.2.0
4
- Summary: Agentic orchestration layer for long-form novel production on top of the ProseForge engine.
5
- Author: ProseForge Agent
6
- License: Apache-2.0
7
- Requires-Python: >=3.10
8
- Description-Content-Type: text/markdown
9
- License-File: LICENSE
10
- Requires-Dist: pyyaml>=6.0
11
- Requires-Dist: tomli>=2.0; python_version < "3.11"
12
- Provides-Extra: dev
13
- Requires-Dist: pytest>=7.0; extra == "dev"
14
- Dynamic: license-file
15
-
16
1
  > 🌐 [English](README.md) · [简体中文](README.zh-CN.md)
17
2
 
18
- # ProseForge Agent
3
+ <p align="center">
4
+ <img src="assets/banner.png" alt="ProseForge Agent novel-writing command center" width="100%">
5
+ </p>
19
6
 
20
- An agentic orchestration layer for long-form novel production. It wraps the
21
- canonical **ProseForge engine** (`$PROSEFORGE_ROOT`) with planning, retrieval,
22
- drafting, review, revision, deep memory, multi-provider model routing, daily
23
- workbooks, reports, extensions, an agent runtime, chat, an autonomous
24
- goal-directed loop, MCP integration, execution environments, skills, hosted
25
- cron, observability, middleware, and a real publish/binary/installer chain.
7
+ <h1 align="center">ProseForge Agent</h1>
26
8
 
27
- ProseForge Agent does **not** reimplement the writing engine. The engine at
28
- `$PROSEFORGE_ROOT` remains the source of truth for project slots, pipeline
29
- actions, guards, reports, and exports. This package owns orchestration:
30
- model calls, provider routing, schedules, evidence packs, agent memory,
31
- workflow state, conversational agent loop, and background event processing.
9
+ <p align="center">
10
+ <strong>An AI command layer for long-form novel production.</strong>
11
+ </p>
12
+
13
+ <p align="center">
14
+ <a href="README.zh-CN.md">简体中文</a> ·
15
+ <a href="https://pypi.org/project/proseforge-agent/">PyPI</a> ·
16
+ <a href="https://github.com/remacheybn408-boop/ProseForge-Agent/releases/tag/v0.2.0">Release v0.2.0</a> ·
17
+ <a href="https://github.com/remacheybn408-boop/ProseForge-Agent/pkgs/container/proseforge-agent">GHCR</a>
18
+ </p>
19
+
20
+ <p align="center">
21
+ <a href="https://pypi.org/project/proseforge-agent/"><img src="https://img.shields.io/pypi/v/proseforge-agent?style=for-the-badge&label=PyPI" alt="PyPI version"></a>
22
+ <a href="https://pypi.org/project/proseforge-agent/"><img src="https://img.shields.io/pypi/pyversions/proseforge-agent?style=for-the-badge" alt="Python versions"></a>
23
+ <a href="https://github.com/remacheybn408-boop/ProseForge-Agent/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/remacheybn408-boop/ProseForge-Agent/ci.yml?branch=main&style=for-the-badge&label=CI" alt="CI status"></a>
24
+ <a href="LICENSE"><img src="https://img.shields.io/badge/License-Apache--2.0-green?style=for-the-badge" alt="Apache-2.0 license"></a>
25
+ </p>
26
+
27
+ ProseForge Agent turns a novel project into a managed creative workflow:
28
+ plan the book, retrieve canon, draft scenes, review prose, rewrite chapters,
29
+ track memory, and run the whole process through your preferred model
30
+ provider. It sits above the canonical **ProseForge engine**
31
+ (`$PROSEFORGE_ROOT`) and handles orchestration rather than replacing the
32
+ writing engine.
32
33
 
33
- ## Status
34
+ Use it as a CLI, a full-screen terminal UI, a local HTTP service, a Docker
35
+ image, or a background agent with gateway integrations.
34
36
 
35
- **v0.2.0 — first public release.** 1301 tests passing on Python
36
- 3.10/3.11/3.12 across Windows, macOS, and Linux. See `CHANGELOG.md` for
37
- release notes, and "What is production-ready and what is contract-only"
38
- below for exactly which surfaces are live.
37
+ <table>
38
+ <tr><td><b>Plan the whole book</b></td><td>Turn a project goal into phase plans, daily workbooks, chapter tasks, and scene-level workflow.</td></tr>
39
+ <tr><td><b>Draft with memory</b></td><td>Retrieve canon, timeline, character notes, prior scenes, and evidence packs before the model writes.</td></tr>
40
+ <tr><td><b>Review and revise</b></td><td>Run a chapter lifecycle from draft to review, rewrite, and accept, with quality gates and rollback-friendly artifacts.</td></tr>
41
+ <tr><td><b>Use the model you want</b></td><td>Profiles for OpenAI, Anthropic, Gemini, xAI/Grok, DeepSeek, Qwen, GLM, Mimo, MiniMax, Doubao, plus an offline fake provider.</td></tr>
42
+ <tr><td><b>Run it like a real tool</b></td><td>Interactive REPL, full-screen TUI, local API, Docker image, Telegram gateway, MCP stdio, local execution, cron, and telemetry.</td></tr>
43
+ <tr><td><b>Published now</b></td><td><code>v0.2.0</code> is live on PyPI, GHCR, and GitHub Releases. Release gate: <code>1358 tests passing</code> — 35 integration (real subprocess / HTTP / SQLite), the rest offline fakes.</td></tr>
44
+ </table>
39
45
 
40
- ## Installation
46
+ ---
41
47
 
42
- From PyPI (recommended):
48
+ ## Quick Install
49
+
50
+ ### Python package
43
51
 
44
52
  ```bash
45
53
  pip install proseforge-agent
46
54
  pf-agent --help
47
55
  ```
48
56
 
49
- One-line installer (Linux / macOS / WSL2 — installs `uv` or uses `pipx`
50
- and puts `pf-agent` on your PATH):
57
+ ### Linux, macOS, WSL2
51
58
 
52
59
  ```bash
53
60
  curl -fsSL https://raw.githubusercontent.com/remacheybn408-boop/ProseForge-Agent/main/scripts/install.sh | sh
54
61
  ```
55
62
 
56
- Windows PowerShell:
63
+ ### Windows PowerShell
57
64
 
58
65
  ```powershell
59
66
  iex (irm https://raw.githubusercontent.com/remacheybn408-boop/ProseForge-Agent/main/scripts/install.ps1)
60
67
  ```
61
68
 
62
- Docker (runs the HTTP service on port 8765; a bearer token is required
63
- for the non-loopback bind):
69
+ ### Docker
64
70
 
65
71
  ```bash
66
72
  docker pull ghcr.io/remacheybn408-boop/proseforge-agent:latest
67
73
  PF_AGENT_SERVICE_TOKEN=<your-token> docker compose up
68
74
  ```
69
75
 
70
- From source:
71
-
72
- ```bash
73
- git clone https://github.com/remacheybn408-boop/ProseForge-Agent.git
74
- cd ProseForge-Agent
75
- pip install -e ".[dev]"
76
- ```
76
+ Install from source, or pass `--git main` to `install.sh`, only when you
77
+ want unreleased changes from `main`.
77
78
 
78
- > PyPI and GHCR artifacts are published by the tag-triggered release
79
- > workflow; if a brand-new version has not been tagged yet, install from
80
- > source or pass `--git main` to `install.sh`.
81
-
82
- ## Quickstart
79
+ ## Getting Started
83
80
 
84
81
  ```bash
85
82
  pf-agent setup # guided wizard: providers, keys, workspace
86
- pf-agent # bare command opens the interactive chat REPL
83
+ pf-agent # interactive chat REPL
84
+ pf-agent tui # full-screen terminal UI
85
+ pf-agent chat --message "draft an opening" --provider fake
86
+ pf-agent run --goal "draft a one-line opening" --max-iterations 5
87
+ pf-agent service serve # local HTTP API on 127.0.0.1:8765
87
88
  ```
88
89
 
89
90
  The bare `pf-agent` command works like other coding agents' CLIs: the
90
91
  first run bootstraps a workspace, and after `pf-agent setup` it talks to
91
- your configured default model (the REPL banner shows which provider and
92
- model are active). Without setup it runs against the offline fake
93
- provider so you can tour the CLI with no keys.
94
-
95
- More entry points:
96
-
97
- ```bash
98
- pf-agent doctor # verify the installation and wiring
99
- pf-agent chat --message "draft an opening" # one-shot chat turn
100
- pf-agent run --goal "draft a one-line opening" --max-iterations 5
101
- pf-agent service serve # local HTTP API on 127.0.0.1:8765
102
- ```
92
+ your configured default model. Without setup, it runs against the offline
93
+ fake provider so you can tour the CLI with no keys.
103
94
 
104
95
  Set provider API keys in your environment (or `.env`, see
105
96
  `.env.example`): `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, and friends.
106
- Any command accepts `--provider fake` for a no-key offline tour.
97
+ Every command accepts `--provider fake` for a no-key offline tour.
98
+
99
+ ## Project Boundary
100
+
101
+ ProseForge Agent does **not** reimplement the writing engine. The engine at
102
+ `$PROSEFORGE_ROOT` remains the source of truth for project slots, pipeline
103
+ actions, guards, reports, and exports. This package owns orchestration:
104
+ model calls, provider routing, schedules, evidence packs, agent memory,
105
+ workflow state, conversational agent loops, and background event handling.
106
+
107
+ ## Release Status
108
+
109
+ `v0.2.0` was published on July 3, 2026 through PyPI Trusted Publishing.
110
+ Release links: [PyPI](https://pypi.org/project/proseforge-agent/),
111
+ [GitHub Release](https://github.com/remacheybn408-boop/ProseForge-Agent/releases/tag/v0.2.0),
112
+ [GHCR image](https://github.com/remacheybn408-boop/ProseForge-Agent/pkgs/container/proseforge-agent),
113
+ and [`CHANGELOG.md`](CHANGELOG.md).
107
114
 
108
- ## Feature overview
115
+ ## Technical Overview
109
116
 
110
117
  The full stack: core orchestration, agent runtime, chat, native install,
111
118
  hardening, autonomous runtime, agent tooling, guided setup, novel
@@ -198,11 +205,11 @@ with deterministic replay.
198
205
 
199
206
  ### MCP integration
200
207
 
201
- MCP client foundation (`stdio` and HTTP/SSE transports with
202
- `StaticMCPTransport` for tests), server registry, security boundary, tool
203
- approval gate, tool schema validation, and credentials boundary. Real
204
- process/network transports are pluggable at call time; test suites use
205
- the deterministic in-process transport.
208
+ MCP client foundation, server registry, security boundary, tool approval
209
+ gate, tool schema validation, and credentials boundary. The `stdio`
210
+ transport is real (subprocess JSON-RPC:
211
+ `pf-agent mcp inspect/tools/call`); HTTP/SSE transports are pluggable at
212
+ call time, and tests use deterministic in-process transports.
206
213
 
207
214
  ### Provider & tool resilience
208
215
 
@@ -295,7 +302,9 @@ requests re-checked by downstream policy, plus research-ready
295
302
  `PyPIPublisher` — real `python -m build` + `twine upload` for TestPyPI /
296
303
  PyPI, gated by the Task 47 `PackageChecker` and duplicate-version refusal,
297
304
  with injectable runner + `dry_run` for offline tests; tokens never appear
298
- in the plan, report, or logs.
305
+ in the plan, report, or logs. The public `v0.2.0` release path uses PyPI
306
+ Trusted Publishing / OIDC, so no long-lived PyPI token is stored in the
307
+ repository.
299
308
 
300
309
  `BinaryBuilder` — real PyInstaller invocation derived from the Task 48
301
310
  `BinaryManifest`, followed by the `pf-agent --version` smoke command as
@@ -412,7 +421,7 @@ configs/ agent and provider example configs
412
421
  docs/ operator, developer, implementation, and
413
422
  task-card plans (docs/superpowers/plans/)
414
423
  samples/ sample extensions
415
- tests/ pytest suite (1301 tests) + contract / golden
424
+ tests/ pytest suite (1338 tests) + contract / golden
416
425
  tiers + fixtures
417
426
  .github/workflows/ci.yml cross-platform CI (Windows, macOS, Linux)
418
427
  ```
@@ -542,38 +551,35 @@ GLM, Mimo, MiniMax, Doubao**.
542
551
  Keep secrets in environment variables or local ignored config files. Do
543
552
  not commit API keys into provider YAML.
544
553
 
545
- ## What is production-ready and what is contract-only
546
-
547
- The project intentionally splits "contract + fake" from "real wiring" so
548
- tests stay deterministic and offline. A few tracks are contract-complete
549
- with fake/dry-run implementations that the operator wires to real
550
- transports at call time:
551
-
552
- - **Production ready today** — LLM providers (real HTTP via `urllib`,
553
- 10 profiles), memory (SQLite), workspace + config, planning / daily /
554
- chapter / workflow, tool registry + permission policy, attachment
555
- ingestion, embeddings + retrieval + RAG, skills, hosted cron
556
- verification, telemetry & trajectory export, the real
557
- publish/binary/installer chain (tag-triggered release workflow:
558
- PyPI + GHCR + GitHub Release), **MCP `stdio`** (real JSON-RPC
559
- subprocess transport: `pf-agent mcp inspect/tools/call`), the
560
- **local execution environment** (real subprocess execution behind
561
- `pf-agent environments exec`, permission + approval gated), the
562
- **Telegram gateway** (real Bot API long-polling:
563
- `pf-agent gateway telegram start`), and the **local HTTP service**
564
- (`pf-agent service serve` on port 8765, bearer-token auth for
565
- non-loopback binds this is what the Docker image runs).
566
- - **Contract-complete with pluggable transport** MCP over HTTP/SSE
567
- (placeholder; stdio is real), remote execution environments
568
- (Docker/Modal/Daytona/SSH/Singularity emit deterministic dry-run
569
- plans that a real backend can execute), and the remaining gateway
570
- platform adapters (Slack/Discord/Signal/Email ship contract shape +
571
- fake transport; wire real HTTP at call time like the Telegram
572
- adapter does).
573
-
574
- The 1301-test suite covers both tracks via injectable runners and fake
575
- transports, so `python -m pytest -q` is fully offline and requires no
576
- credentials.
554
+ ## Readiness table
555
+
556
+ Every command surface reports one of three readiness states, and any
557
+ report that isn't `ready` is stamped with a visible badge in its title
558
+ (`[contract]` or `[planned]`) so you know at a glance when you're
559
+ looking at a real transport vs a scaffold. Pass `--strict` to refuse
560
+ any non-ready command (exits 3).
561
+
562
+ | Surface | Command | Readiness | Notes |
563
+ | --- | --- | --- | --- |
564
+ | LLM providers (10 vendors) | `pf-agent chat --provider <name>` | ✅ ready | real HTTPS via `urllib`, keys from env |
565
+ | Memory / workspace / config | `pf-agent memory ...` / `pf-agent config ...` | ✅ ready | SQLite, portable YAML |
566
+ | Planning / daily / chapter / workflow | `pf-agent plan ...` / `pf-agent chapter ...` | ✅ ready | real |
567
+ | Retrieval + RAG | `pf-agent retrieval ...` | ✅ ready | real |
568
+ | Local HTTP service (port 8765) | `pf-agent service serve` | ✅ ready | bearer auth on non-loopback |
569
+ | MCP over stdio | `pf-agent mcp inspect/tools/call` | ✅ ready | real subprocess JSON-RPC |
570
+ | Local execution env | `pf-agent environments exec` | ready | real subprocess, permission-gated |
571
+ | Telegram gateway | `pf-agent gateway telegram start` | ✅ ready | real Bot API long-polling |
572
+ | Release chain | tag `v*` push | ready | PyPI Trusted Publishing + GHCR + GH Release |
573
+ | MCP over HTTP / SSE | `pf-agent mcp add --transport http ...` | ⚠️ contract | placeholder; opt-in via env |
574
+ | Docker / SSH / Singularity / Modal / Daytona backends | `pf-agent environments check <backend>` | ⚠️ contract | dry-run plans only; real runner injectable |
575
+ | Slack / Discord / Signal / Email gateways | `pf-agent gateway <platform> check` | ⚠️ contract | fake transport; wire like Telegram |
576
+ | Skills hub search / install / update | `pf-agent skills search` etc. | ⚠️ contract | fake hub client + dry-run plans |
577
+ | Anything the CLI routes through `_planned_report` | (many groups) | 🟡 planned | scaffold only, no real code path |
578
+
579
+ The tests-passing count in this README's Status section refers to the
580
+ whole offline suite (fakes + real integration paths together); the four
581
+ "ready" rows above are exercised by the small real-integration subset
582
+ (`pytest -m integration`).
577
583
 
578
584
  ## ProseForge Engine Boundary
579
585
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "proseforge-agent"
7
- version = "0.2.0"
7
+ version = "0.3.0"
8
8
  description = "Agentic orchestration layer for long-form novel production on top of the ProseForge engine."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -14,6 +14,7 @@ dependencies = ["pyyaml>=6.0", "tomli>=2.0; python_version < '3.11'"]
14
14
 
15
15
  [project.optional-dependencies]
16
16
  dev = ["pytest>=7.0"]
17
+ ci = ["pytest>=7.0", "pytest-rerunfailures>=13.0", "pytest-repeat>=0.9"]
17
18
 
18
19
  [project.scripts]
19
20
  pf-agent = "proseforge_agent.cli:main"
@@ -27,3 +28,6 @@ where = ["src"]
27
28
  [tool.pytest.ini_options]
28
29
  pythonpath = ["src"]
29
30
  testpaths = ["tests"]
31
+ markers = [
32
+ "integration: touches a real subprocess, real HTTP over urllib, or a real sqlite file (opt-in via `pytest -m integration`)",
33
+ ]
@@ -5,6 +5,6 @@ or require API keys. Subsystem behavior lives behind dedicated submodules
5
5
  that are imported explicitly by their callers.
6
6
  """
7
7
 
8
- __version__ = "0.2.0"
8
+ __version__ = "0.3.0"
9
9
 
10
10
  __all__ = ["__version__"]