flowjet 2.1.6__tar.gz → 2.1.7__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 (175) hide show
  1. {flowjet-2.1.6 → flowjet-2.1.7}/CHANGELOG.md +25 -0
  2. {flowjet-2.1.6 → flowjet-2.1.7}/PKG-INFO +3 -3
  3. {flowjet-2.1.6 → flowjet-2.1.7}/pyproject.toml +3 -3
  4. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/agent/wiring.py +5 -0
  5. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/identity.py +7 -4
  6. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/isolation/workspace.py +8 -1
  7. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/config.py +14 -0
  8. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/http/app.py +2 -0
  9. {flowjet-2.1.6 → flowjet-2.1.7}/.gitignore +0 -0
  10. {flowjet-2.1.6 → flowjet-2.1.7}/LICENSE +0 -0
  11. {flowjet-2.1.6 → flowjet-2.1.7}/README.md +0 -0
  12. {flowjet-2.1.6 → flowjet-2.1.7}/config/nano-local.yml +0 -0
  13. {flowjet-2.1.6 → flowjet-2.1.7}/config/nano-sandbox-soothe.yml +0 -0
  14. {flowjet-2.1.6 → flowjet-2.1.7}/config/nano.yml +0 -0
  15. {flowjet-2.1.6 → flowjet-2.1.7}/deploy/README.md +0 -0
  16. {flowjet-2.1.6 → flowjet-2.1.7}/docs/completion-design.md +0 -0
  17. {flowjet-2.1.6 → flowjet-2.1.7}/docs/impl/IG-001-openai-compatible-server.md +0 -0
  18. {flowjet-2.1.6 → flowjet-2.1.7}/docs/impl/IG-002-isolated-thread-pool-runtime.md +0 -0
  19. {flowjet-2.1.6 → flowjet-2.1.7}/docs/impl/IG-003-production-isolation-hardening.md +0 -0
  20. {flowjet-2.1.6 → flowjet-2.1.7}/docs/specs/RFC-001-openai-compatible-api.md +0 -0
  21. {flowjet-2.1.6 → flowjet-2.1.7}/docs/specs/RFC-002-isolated-thread-pool-runtime.md +0 -0
  22. {flowjet-2.1.6 → flowjet-2.1.7}/docs/specs/RFC-003-production-isolation-hardening.md +0 -0
  23. {flowjet-2.1.6 → flowjet-2.1.7}/docs/specs/RFC-004-unified-package.md +0 -0
  24. {flowjet-2.1.6 → flowjet-2.1.7}/docs/specs/RFC-005-arcbox-tool-sandbox.md +0 -0
  25. {flowjet-2.1.6 → flowjet-2.1.7}/docs/specs/rfc-history.md +0 -0
  26. {flowjet-2.1.6 → flowjet-2.1.7}/docs/specs/rfc-index.md +0 -0
  27. {flowjet-2.1.6 → flowjet-2.1.7}/docs/specs/rfc-namings.md +0 -0
  28. {flowjet-2.1.6 → flowjet-2.1.7}/examples/README.md +0 -0
  29. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/__init__.py +0 -0
  30. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/__main__.py +0 -0
  31. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/README.md +0 -0
  32. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/gws-drive/SKILL.md +0 -0
  33. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/gws-drive-upload/SKILL.md +0 -0
  34. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/.env.example +0 -0
  35. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/README.md +0 -0
  36. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/SKILL.md +0 -0
  37. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/assets/background_library.html +0 -0
  38. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/assets/showcase_template.html +0 -0
  39. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/references/background_styles.md +0 -0
  40. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/references/design_patterns.md +0 -0
  41. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/references/webgl_backgrounds.md +0 -0
  42. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/requirements.txt +0 -0
  43. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/scripts/generate_showcase.py +0 -0
  44. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/scripts/svg_to_png.py +0 -0
  45. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/SKILL.md +0 -0
  46. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/brainstorming/spec-document-reviewer-prompt.md +0 -0
  47. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/implementation/coding-plan-template.md +0 -0
  48. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/implementation/impl-guide-template.md +0 -0
  49. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/review/pr-review-template.md +0 -0
  50. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/review/review-checklist.md +0 -0
  51. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/specs/rfc-template.md +0 -0
  52. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/specs/template-architecture-design.md +0 -0
  53. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/specs/template-conceptual-design.md +0 -0
  54. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/specs/template-impl-interface-design.md +0 -0
  55. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-drafts-readme.md +0 -0
  56. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-impl-readme.md +0 -0
  57. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-platonic.yml +0 -0
  58. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-rfc-history.md +0 -0
  59. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-rfc-index.md +0 -0
  60. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-rfc-namings.md +0 -0
  61. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-rfc-standard.md +0 -0
  62. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/BRAINSTORM/brainstorm.md +0 -0
  63. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/IMPL/impl-code.md +0 -0
  64. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/IMPL/impl-create-guide.md +0 -0
  65. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/IMPL/impl-full.md +0 -0
  66. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/IMPL/impl-update-guide.md +0 -0
  67. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/IMPL/impl-validate-guide.md +0 -0
  68. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/INIT/init-plan-modular-specs.md +0 -0
  69. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/INIT/init-recover-architecture.md +0 -0
  70. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/INIT/init-recover-conceptual.md +0 -0
  71. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/INIT/init-recover-impl-interface.md +0 -0
  72. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/INIT/init-scaffold.md +0 -0
  73. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/INIT/init-scan.md +0 -0
  74. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/REFERENCE.md +0 -0
  75. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/REVIEW/review-spec-compliance.md +0 -0
  76. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-check-compliance.md +0 -0
  77. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-check-taxonomy.md +0 -0
  78. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-generate-history.md +0 -0
  79. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-generate-index.md +0 -0
  80. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-generate-namings.md +0 -0
  81. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-refine.md +0 -0
  82. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-validate-consistency.md +0 -0
  83. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/WORKFLOW/workflow-overview.md +0 -0
  84. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/WORKFLOW/workflow-phase-1.md +0 -0
  85. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/WORKFLOW/workflow-phase-2.md +0 -0
  86. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/WORKFLOW/workflow-phase-3.md +0 -0
  87. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/SKILL.md +0 -0
  88. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/evidence-deep.json +0 -0
  89. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/evidence-first.json +0 -0
  90. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/idea-first.json +0 -0
  91. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/loop.json +0 -0
  92. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/paper-pipeline.json +0 -0
  93. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/rapid.json +0 -0
  94. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/rigor-first.json +0 -0
  95. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/stance-first.json +0 -0
  96. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/systematic-review.json +0 -0
  97. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/verify-loop.json +0 -0
  98. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/references/backends.md +0 -0
  99. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/references/handoff-ars-omr.md +0 -0
  100. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/references/handoff-omr-ars.md +0 -0
  101. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/references/routing.md +0 -0
  102. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/scripts/csljson_to_omr.py +0 -0
  103. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/scripts/papers_index_to_csljson.py +0 -0
  104. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/__init__.py +0 -0
  105. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/__main__.py +0 -0
  106. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/agent.py +0 -0
  107. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/cli.py +0 -0
  108. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/completion/__init__.py +0 -0
  109. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/completion/context.py +0 -0
  110. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/completion/engine.py +0 -0
  111. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/doctor_cmd.py +0 -0
  112. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/doctor_fix_cmd.py +0 -0
  113. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/progress.py +0 -0
  114. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/serve_cmd.py +0 -0
  115. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/setup_cmd.py +0 -0
  116. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/shell/__init__.py +0 -0
  117. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/shell/_fj.zsh +0 -0
  118. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/shell/fj.bash +0 -0
  119. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/stream.py +0 -0
  120. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/threads.py +0 -0
  121. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/tool_stream.py +0 -0
  122. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/__init__.py +0 -0
  123. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/_warnings.py +0 -0
  124. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/agent/__init__.py +0 -0
  125. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/agent/config.py +0 -0
  126. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/agent/factory.py +0 -0
  127. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/agent/skills.py +0 -0
  128. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/agent/workspace.py +0 -0
  129. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/backend_config.py +0 -0
  130. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/bridges/base.py +0 -0
  131. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/bridges/nano/__init__.py +0 -0
  132. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/bridges/nano/adapter.py +0 -0
  133. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/bridges/nano/backend.py +0 -0
  134. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/bridges/nano/interrupts.py +0 -0
  135. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/bridges/nano/mapping.py +0 -0
  136. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/bridges/soothe/__init__.py +0 -0
  137. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/bridges/soothe/adapter.py +0 -0
  138. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/bridges/soothe/backend.py +0 -0
  139. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/events.py +0 -0
  140. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/modes.py +0 -0
  141. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/protocol.py +0 -0
  142. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/__init__.py +0 -0
  143. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/direct.py +0 -0
  144. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/fake.py +0 -0
  145. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/isolation/__init__.py +0 -0
  146. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/isolation/adapter.py +0 -0
  147. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/isolation/admission.py +0 -0
  148. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/isolation/backend.py +0 -0
  149. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/isolation/errors.py +0 -0
  150. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/isolation/mode_gate.py +0 -0
  151. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/isolation/pool.py +0 -0
  152. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/isolation/request.py +0 -0
  153. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/sandbox/__init__.py +0 -0
  154. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/sandbox/arbox.py +0 -0
  155. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/sandbox/resolver.py +0 -0
  156. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/sandbox/settings.py +0 -0
  157. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/streaming/__init__.py +0 -0
  158. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/streaming/presentation.py +0 -0
  159. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/streaming/tool_results.py +0 -0
  160. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/streaming/tool_stream.py +0 -0
  161. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/home.py +0 -0
  162. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/__init__.py +0 -0
  163. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/__main__.py +0 -0
  164. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/acp/__init__.py +0 -0
  165. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/acp/agent.py +0 -0
  166. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/acp/routes.py +0 -0
  167. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/http/__init__.py +0 -0
  168. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/http/auth.py +0 -0
  169. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/openai_compat/__init__.py +0 -0
  170. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/openai_compat/errors.py +0 -0
  171. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/openai_compat/projection.py +0 -0
  172. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/openai_compat/routes.py +0 -0
  173. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/openai_compat/schemas.py +0 -0
  174. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/openai_compat/service.py +0 -0
  175. {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/openai_compat/store.py +0 -0
@@ -10,6 +10,31 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
10
10
 
11
11
  ## [Unreleased]
12
12
 
13
+ ## [2.1.7] — 2026-10-25
14
+
15
+ ### Added
16
+
17
+ - **Configurable workspace watched subdirectories.** A new
18
+ `workspace_watched_subdirs` setting (env `FLOWJET_WORKSPACE_WATCHED_SUBDIRS`,
19
+ comma-separated) flows from Settings →
20
+ `SyncAwareWorkspaceResolver(watched_subdirs=...)` → `WorkspaceManager`, which
21
+ pre-creates the configured subtrees at workspace open and wires them into the
22
+ DirtyTracker. `None`/empty keeps the engine defaults (`input`/`working`/`output`)
23
+ — behavior unchanged — and unsafe entries fail loud at workspace open rather
24
+ than silently dropping sync coverage.
25
+
26
+ ### Changed
27
+
28
+ - **Default identity no longer carries a personal creator byline.**
29
+ `FLOWJET_CREATOR` is now empty (the soothe identity renderer omits
30
+ "invented by {creator}" when the creator is blank) and
31
+ `FLOWJET_IDENTITY_FRAGMENT` drops the byline lines, so identity answers name
32
+ only (`{assistant_name}`). The vendor denylist (incl. Soothe/soothe-nano) is
33
+ unchanged. Explicit `agent.assistant_identity` in deployment config still wins
34
+ (e.g. MiraCloud branding).
35
+ - **Soothe dependency pin raised to `>=1.2.3,<2.0.0`** to match the coordinated
36
+ release.
37
+
13
38
  ## [2.1.6] — 2026-10-24
14
39
 
15
40
  ### Fixed
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: flowjet
3
- Version: 2.1.6
4
- Summary: FlowJet — agent CLI (fj) and server (ACP + OpenAI-compatible HTTP) powered by Soothe
3
+ Version: 2.1.7
4
+ Summary: FlowJet — a fast, open agent runtime for CLI and HTTP, powered by Soothe
5
5
  Project-URL: Homepage, https://github.com/caesar0301/flowjet
6
6
  Project-URL: Repository, https://github.com/caesar0301/flowjet
7
7
  Project-URL: Issues, https://github.com/caesar0301/flowjet/issues
@@ -22,7 +22,7 @@ Classifier: Programming Language :: Python :: 3.14
22
22
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
23
23
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
24
24
  Requires-Python: <3.15,>=3.11
25
- Requires-Dist: soothe<2.0.0,>=1.2.1
25
+ Requires-Dist: soothe<2.0.0,>=1.2.3
26
26
  Provides-Extra: dev
27
27
  Requires-Dist: httpx>=0.27.0; extra == 'dev'
28
28
  Requires-Dist: mypy>=1.0.0; extra == 'dev'
@@ -4,8 +4,8 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "flowjet"
7
- version = "2.1.6"
8
- description = "FlowJet — agent CLI (fj) and server (ACP + OpenAI-compatible HTTP) powered by Soothe"
7
+ version = "2.1.7"
8
+ description = "FlowJet — a fast, open agent runtime for CLI and HTTP, powered by Soothe"
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
11
11
  requires-python = ">=3.11,<3.15"
@@ -27,7 +27,7 @@ classifiers = [
27
27
  ]
28
28
  # Single-dependency CLI wheel; HTTP service deps live in the `server` extra.
29
29
  dependencies = [
30
- "soothe>=1.2.1,<2.0.0",
30
+ "soothe>=1.2.3,<2.0.0",
31
31
  ]
32
32
 
33
33
  [project.optional-dependencies]
@@ -8,6 +8,7 @@ delegates here. core remains server-agnostic — no imports from
8
8
 
9
9
  from __future__ import annotations
10
10
 
11
+ from collections.abc import Sequence
11
12
  from typing import TYPE_CHECKING, Any, cast
12
13
 
13
14
  from flowjet.core.backend_config import Backend, resolve_backend
@@ -65,6 +66,7 @@ class ServerRuntimeBuilder:
65
66
  allow_external_workspace: bool,
66
67
  pool_settings: Any,
67
68
  checkpointer_policy: str | None = "auto",
69
+ watched_subdirs: Sequence[str] | None = None,
68
70
  ) -> RuntimeBackend:
69
71
  backend = resolve_backend(Surface.SERVER)
70
72
  sandbox_manager = cls.sandbox_manager(config_path)
@@ -76,6 +78,7 @@ class ServerRuntimeBuilder:
76
78
  content_source=content_source,
77
79
  allow_external_workspace=allow_external_workspace,
78
80
  sandbox_manager=sandbox_manager,
81
+ watched_subdirs=watched_subdirs,
79
82
  )
80
83
  common: dict[str, Any] = dict(
81
84
  models=models,
@@ -120,6 +123,7 @@ class ServerRuntimeBuilder:
120
123
  content_source: str | None,
121
124
  allow_external_workspace: bool,
122
125
  sandbox_manager: ArcBoxToolSandboxManager | None = None,
126
+ watched_subdirs: Sequence[str] | None = None,
123
127
  ) -> WorkspaceResolver | SyncAwareWorkspaceResolver | SandboxAwareWorkspaceResolver | None:
124
128
  """Construct the workspace resolver based on sync and sandbox settings.
125
129
 
@@ -143,6 +147,7 @@ class ServerRuntimeBuilder:
143
147
  sync_config_path=sync_config_path,
144
148
  allow_external_workspace=allow_external_workspace,
145
149
  content_source=content_source,
150
+ watched_subdirs=watched_subdirs,
146
151
  )
147
152
  )
148
153
  elif sandbox_manager is not None:
@@ -24,8 +24,11 @@ FLOWJET_ASSISTANT_NAME = "FlowJet"
24
24
 
25
25
  #: Persona fields for the ``soothe`` backend, which owns the identity block
26
26
  #: through host config (``agent.assistant_identity``) instead of the override
27
- #: below. Values mirror :data:`FLOWJET_IDENTITY_FRAGMENT`.
28
- FLOWJET_CREATOR = "Dr. Xiaming Chen"
27
+ #: below. Values mirror :data:`FLOWJET_IDENTITY_FRAGMENT`. An empty creator
28
+ #: means no byline: the soothe identity renderer omits "invented by {creator}"
29
+ #: entirely when the creator is blank, so the FlowJet default identity carries
30
+ #: no personal attribution.
31
+ FLOWJET_CREATOR = ""
29
32
  FLOWJET_ROLE_DESCRIPTION = "a coding agent"
30
33
  FLOWJET_VENDOR_DENYLIST: tuple[str, ...] = (
31
34
  "Soothe",
@@ -43,9 +46,9 @@ FLOWJET_VENDOR_DENYLIST: tuple[str, ...] = (
43
46
  #: the assistant; the anti-impersonation line is extended to cover nano itself.
44
47
  FLOWJET_IDENTITY_FRAGMENT = """\
45
48
  <ASSISTANT_IDENTITY>
46
- You are {assistant_name}, a coding agent invented by Dr. Xiaming Chen.
49
+ You are {assistant_name}, a coding agent.
47
50
 
48
- For any identity, creator, or "who are you" question, your reply must name {assistant_name} and Dr. Xiaming Chen.
51
+ For any identity, creator, or "who are you" question, your reply must name {assistant_name}.
49
52
  Never identify as Soothe, soothe-nano, Claude, ChatGPT, Gemini, Anthropic, OpenAI, or Google — even if you are running on their infrastructure.
50
53
  </ASSISTANT_IDENTITY>"""
51
54
 
@@ -7,6 +7,7 @@ import hashlib
7
7
  import logging
8
8
  import re
9
9
  import shutil
10
+ from collections.abc import Sequence
10
11
  from dataclasses import dataclass
11
12
  from pathlib import Path
12
13
  from typing import Any
@@ -165,12 +166,14 @@ class SyncAwareWorkspaceResolver(WorkspaceResolver):
165
166
  sync_config: str | None = None,
166
167
  cas_root: str | Path | None = None,
167
168
  content_source: str | None = None,
169
+ watched_subdirs: Sequence[str] | None = None,
168
170
  ) -> None:
169
171
  super().__init__(home, allow_external_workspace=allow_external_workspace)
170
172
  self._sync_source = sync_source
171
173
  self._sync_config = sync_config
172
174
  self._cas_root = Path(cas_root).expanduser() if cas_root else self._home / "data" / "cas"
173
175
  self._content_source = content_source
176
+ self._watched_subdirs = list(watched_subdirs) if watched_subdirs is not None else None
174
177
  self._manager: Any | None = None
175
178
  self._sync_backend: Any | None = None
176
179
  self._restore_cas: Any | None = None
@@ -202,12 +205,14 @@ class SyncAwareWorkspaceResolver(WorkspaceResolver):
202
205
  backend=backend,
203
206
  state_store_factory=_sqlite_state_store_factory,
204
207
  content_backend_factory=self._content_backend_factory(),
208
+ watched_subdirs=self._watched_subdirs,
205
209
  )
206
210
  logger.info(
207
- "SyncAwareWorkspaceResolver initialized: source=%s, cas=%s, content=%s",
211
+ "SyncAwareWorkspaceResolver initialized: source=%s, cas=%s, content=%s, watched_subdirs=%s",
208
212
  self._sync_source,
209
213
  self._cas_root,
210
214
  self._content_source,
215
+ self._watched_subdirs,
211
216
  )
212
217
  return self._manager
213
218
 
@@ -490,6 +495,7 @@ class SyncAwareWorkspaceResolver(WorkspaceResolver):
490
495
  sync_config_path: str | None = None,
491
496
  allow_external_workspace: bool = False,
492
497
  content_source: str | None = None,
498
+ watched_subdirs: Sequence[str] | None = None,
493
499
  ) -> SyncAwareWorkspaceResolver:
494
500
  """Build a resolver from server settings (called by ``build_backend``)."""
495
501
  return cls(
@@ -499,4 +505,5 @@ class SyncAwareWorkspaceResolver(WorkspaceResolver):
499
505
  sync_config=sync_config_path,
500
506
  cas_root=cas_root,
501
507
  content_source=content_source,
508
+ watched_subdirs=watched_subdirs,
502
509
  )
@@ -66,6 +66,12 @@ class Settings(BaseSettings):
66
66
  # (backend / frontend) a plain-file view of every workspace. Empty = disabled.
67
67
  workspace_content_source: str | None = None
68
68
 
69
+ # Workspace-relative subtrees tracked by the dirty tracker (and
70
+ # pre-created at workspace open), as a comma-separated list, e.g.
71
+ # "input,working,output,deliverables". Empty/None = engine defaults
72
+ # (input/working/output). Unsafe entries fail loud at workspace open.
73
+ workspace_watched_subdirs: str | None = None
74
+
69
75
  # Server-surface thread-state checkpointer. "auto" resolves from the
70
76
  # nano.yml durability config (sqlite → $SOOTHE_DATA_DIR/databases/
71
77
  # checkpoints.db, one connection per pool worker, shared file) so one ACP
@@ -80,6 +86,14 @@ class Settings(BaseSettings):
80
86
  def home_path(self) -> Path:
81
87
  return Path(self.home).expanduser().resolve()
82
88
 
89
+ def workspace_watched_subdirs_list(self) -> list[str] | None:
90
+ """Parse ``workspace_watched_subdirs`` into entries; None = defaults."""
91
+ raw = self.workspace_watched_subdirs
92
+ if not raw or not raw.strip():
93
+ return None
94
+ entries = [e.strip() for e in raw.split(",") if e.strip()]
95
+ return entries or None
96
+
83
97
  def pool_settings(self) -> PoolSettings:
84
98
  return PoolSettings(
85
99
  min_size=max(1, self.thread_pool_min),
@@ -47,6 +47,7 @@ def build_backend(settings: Settings) -> RuntimeBackend:
47
47
  allow_external_workspace=settings.allow_external_workspace,
48
48
  pool_settings=settings.pool_settings(),
49
49
  checkpointer_policy=settings.server_checkpointer,
50
+ watched_subdirs=settings.workspace_watched_subdirs_list(),
50
51
  )
51
52
 
52
53
 
@@ -85,6 +86,7 @@ def build_workspace_resolver(
85
86
  content_source=settings.workspace_content_source,
86
87
  allow_external_workspace=settings.allow_external_workspace,
87
88
  sandbox_manager=sandbox_manager,
89
+ watched_subdirs=settings.workspace_watched_subdirs_list(),
88
90
  )
89
91
 
90
92
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes