flowjet 2.0.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 (165) hide show
  1. flowjet-2.0.0/.gitignore +257 -0
  2. flowjet-2.0.0/CHANGELOG.md +111 -0
  3. flowjet-2.0.0/LICENSE +21 -0
  4. flowjet-2.0.0/PKG-INFO +288 -0
  5. flowjet-2.0.0/README.md +245 -0
  6. flowjet-2.0.0/config/nano.yml +63 -0
  7. flowjet-2.0.0/deploy/README.md +63 -0
  8. flowjet-2.0.0/deploy/nano.yml +82 -0
  9. flowjet-2.0.0/docs/completion-design.md +1065 -0
  10. flowjet-2.0.0/docs/drafts/README.md +48 -0
  11. flowjet-2.0.0/docs/drafts/api-spec.md +21 -0
  12. flowjet-2.0.0/docs/impl/IG-001-openai-compatible-server.md +383 -0
  13. flowjet-2.0.0/docs/impl/IG-002-isolated-thread-pool-runtime.md +235 -0
  14. flowjet-2.0.0/docs/impl/IG-003-production-isolation-hardening.md +177 -0
  15. flowjet-2.0.0/docs/impl/README.md +61 -0
  16. flowjet-2.0.0/docs/impl/TEST-COVERAGE-MATRIX.md +104 -0
  17. flowjet-2.0.0/docs/naming.md +68 -0
  18. flowjet-2.0.0/docs/specs/RFC-001-openai-compatible-api.md +518 -0
  19. flowjet-2.0.0/docs/specs/RFC-002-isolated-thread-pool-runtime.md +229 -0
  20. flowjet-2.0.0/docs/specs/RFC-003-production-isolation-hardening.md +164 -0
  21. flowjet-2.0.0/docs/specs/RFC-004-unified-package.md +180 -0
  22. flowjet-2.0.0/docs/specs/rfc-history.md +45 -0
  23. flowjet-2.0.0/docs/specs/rfc-index.md +61 -0
  24. flowjet-2.0.0/docs/specs/rfc-namings.md +68 -0
  25. flowjet-2.0.0/docs/specs/templates/architecture-design.md +139 -0
  26. flowjet-2.0.0/docs/specs/templates/conceptual-design.md +102 -0
  27. flowjet-2.0.0/docs/specs/templates/impl-interface-design.md +137 -0
  28. flowjet-2.0.0/docs/specs/templates/rfc-standard.md +577 -0
  29. flowjet-2.0.0/docs/specs/templates/rfc-template.md +94 -0
  30. flowjet-2.0.0/docs/upgrade.md +81 -0
  31. flowjet-2.0.0/examples/README.md +84 -0
  32. flowjet-2.0.0/nano.yml +31 -0
  33. flowjet-2.0.0/pyproject.toml +131 -0
  34. flowjet-2.0.0/src/flowjet/__init__.py +19 -0
  35. flowjet-2.0.0/src/flowjet/__main__.py +7 -0
  36. flowjet-2.0.0/src/flowjet/builtin_skills/README.md +10 -0
  37. flowjet-2.0.0/src/flowjet/builtin_skills/gws-drive/SKILL.md +138 -0
  38. flowjet-2.0.0/src/flowjet/builtin_skills/gws-drive-upload/SKILL.md +53 -0
  39. flowjet-2.0.0/src/flowjet/builtin_skills/logo-generator-skill/.env.example +11 -0
  40. flowjet-2.0.0/src/flowjet/builtin_skills/logo-generator-skill/README.md +439 -0
  41. flowjet-2.0.0/src/flowjet/builtin_skills/logo-generator-skill/SKILL.md +196 -0
  42. flowjet-2.0.0/src/flowjet/builtin_skills/logo-generator-skill/assets/background_library.html +724 -0
  43. flowjet-2.0.0/src/flowjet/builtin_skills/logo-generator-skill/assets/showcase_template.html +198 -0
  44. flowjet-2.0.0/src/flowjet/builtin_skills/logo-generator-skill/references/background_styles.md +262 -0
  45. flowjet-2.0.0/src/flowjet/builtin_skills/logo-generator-skill/references/design_patterns.md +722 -0
  46. flowjet-2.0.0/src/flowjet/builtin_skills/logo-generator-skill/references/webgl_backgrounds.md +127 -0
  47. flowjet-2.0.0/src/flowjet/builtin_skills/logo-generator-skill/requirements.txt +4 -0
  48. flowjet-2.0.0/src/flowjet/builtin_skills/logo-generator-skill/scripts/generate_showcase.py +296 -0
  49. flowjet-2.0.0/src/flowjet/builtin_skills/logo-generator-skill/scripts/svg_to_png.py +69 -0
  50. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/SKILL.md +145 -0
  51. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/assets/brainstorming/spec-document-reviewer-prompt.md +49 -0
  52. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/assets/implementation/coding-plan-template.md +82 -0
  53. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/assets/implementation/impl-guide-template.md +262 -0
  54. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/assets/review/pr-review-template.md +168 -0
  55. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/assets/review/review-checklist.md +179 -0
  56. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/assets/specs/rfc-template.md +94 -0
  57. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/assets/specs/template-architecture-design.md +139 -0
  58. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/assets/specs/template-conceptual-design.md +102 -0
  59. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/assets/specs/template-impl-interface-design.md +137 -0
  60. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-drafts-readme.md +48 -0
  61. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-impl-readme.md +61 -0
  62. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-platonic.yml +22 -0
  63. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-rfc-history.md +36 -0
  64. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-rfc-index.md +57 -0
  65. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-rfc-namings.md +36 -0
  66. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-rfc-standard.md +577 -0
  67. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/BRAINSTORM/brainstorm.md +160 -0
  68. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/IMPL/impl-code.md +106 -0
  69. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/IMPL/impl-create-guide.md +156 -0
  70. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/IMPL/impl-full.md +51 -0
  71. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/IMPL/impl-update-guide.md +155 -0
  72. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/IMPL/impl-validate-guide.md +147 -0
  73. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/INIT/init-plan-modular-specs.md +160 -0
  74. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/INIT/init-recover-architecture.md +149 -0
  75. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/INIT/init-recover-conceptual.md +126 -0
  76. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/INIT/init-recover-impl-interface.md +134 -0
  77. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/INIT/init-scaffold.md +119 -0
  78. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/INIT/init-scan.md +55 -0
  79. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/REFERENCE.md +180 -0
  80. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/REVIEW/review-spec-compliance.md +63 -0
  81. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-check-compliance.md +160 -0
  82. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-check-taxonomy.md +106 -0
  83. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-generate-history.md +95 -0
  84. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-generate-index.md +119 -0
  85. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-generate-namings.md +129 -0
  86. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-refine.md +84 -0
  87. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-validate-consistency.md +116 -0
  88. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/WORKFLOW/workflow-overview.md +78 -0
  89. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/WORKFLOW/workflow-phase-1.md +25 -0
  90. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/WORKFLOW/workflow-phase-2.md +34 -0
  91. flowjet-2.0.0/src/flowjet/builtin_skills/platonic-coding/references/WORKFLOW/workflow-phase-3.md +40 -0
  92. flowjet-2.0.0/src/flowjet/builtin_skills/research-bootstrap/SKILL.md +109 -0
  93. flowjet-2.0.0/src/flowjet/builtin_skills/research-bootstrap/patterns/evidence-deep.json +41 -0
  94. flowjet-2.0.0/src/flowjet/builtin_skills/research-bootstrap/patterns/evidence-first.json +36 -0
  95. flowjet-2.0.0/src/flowjet/builtin_skills/research-bootstrap/patterns/idea-first.json +40 -0
  96. flowjet-2.0.0/src/flowjet/builtin_skills/research-bootstrap/patterns/loop.json +44 -0
  97. flowjet-2.0.0/src/flowjet/builtin_skills/research-bootstrap/patterns/paper-pipeline.json +38 -0
  98. flowjet-2.0.0/src/flowjet/builtin_skills/research-bootstrap/patterns/rapid.json +30 -0
  99. flowjet-2.0.0/src/flowjet/builtin_skills/research-bootstrap/patterns/rigor-first.json +42 -0
  100. flowjet-2.0.0/src/flowjet/builtin_skills/research-bootstrap/patterns/stance-first.json +39 -0
  101. flowjet-2.0.0/src/flowjet/builtin_skills/research-bootstrap/patterns/systematic-review.json +47 -0
  102. flowjet-2.0.0/src/flowjet/builtin_skills/research-bootstrap/patterns/verify-loop.json +42 -0
  103. flowjet-2.0.0/src/flowjet/builtin_skills/research-bootstrap/references/backends.md +72 -0
  104. flowjet-2.0.0/src/flowjet/builtin_skills/research-bootstrap/references/handoff-ars-omr.md +44 -0
  105. flowjet-2.0.0/src/flowjet/builtin_skills/research-bootstrap/references/handoff-omr-ars.md +51 -0
  106. flowjet-2.0.0/src/flowjet/builtin_skills/research-bootstrap/references/routing.md +51 -0
  107. flowjet-2.0.0/src/flowjet/builtin_skills/research-bootstrap/scripts/csljson_to_omr.py +136 -0
  108. flowjet-2.0.0/src/flowjet/builtin_skills/research-bootstrap/scripts/papers_index_to_csljson.py +199 -0
  109. flowjet-2.0.0/src/flowjet/cli/__init__.py +7 -0
  110. flowjet-2.0.0/src/flowjet/cli/__main__.py +7 -0
  111. flowjet-2.0.0/src/flowjet/cli/agent.py +178 -0
  112. flowjet-2.0.0/src/flowjet/cli/cli.py +607 -0
  113. flowjet-2.0.0/src/flowjet/cli/completion/__init__.py +7 -0
  114. flowjet-2.0.0/src/flowjet/cli/completion/context.py +250 -0
  115. flowjet-2.0.0/src/flowjet/cli/completion/engine.py +497 -0
  116. flowjet-2.0.0/src/flowjet/cli/doctor_cmd.py +507 -0
  117. flowjet-2.0.0/src/flowjet/cli/doctor_fix_cmd.py +383 -0
  118. flowjet-2.0.0/src/flowjet/cli/progress.py +875 -0
  119. flowjet-2.0.0/src/flowjet/cli/serve_cmd.py +55 -0
  120. flowjet-2.0.0/src/flowjet/cli/setup_cmd.py +531 -0
  121. flowjet-2.0.0/src/flowjet/cli/shell/__init__.py +0 -0
  122. flowjet-2.0.0/src/flowjet/cli/shell/_fj.zsh +77 -0
  123. flowjet-2.0.0/src/flowjet/cli/shell/fj.bash +69 -0
  124. flowjet-2.0.0/src/flowjet/cli/stream.py +416 -0
  125. flowjet-2.0.0/src/flowjet/cli/threads.py +384 -0
  126. flowjet-2.0.0/src/flowjet/cli/tool_stream.py +20 -0
  127. flowjet-2.0.0/src/flowjet/core/__init__.py +53 -0
  128. flowjet-2.0.0/src/flowjet/core/backends/__init__.py +12 -0
  129. flowjet-2.0.0/src/flowjet/core/backends/direct.py +59 -0
  130. flowjet-2.0.0/src/flowjet/core/backends/fake.py +57 -0
  131. flowjet-2.0.0/src/flowjet/core/backends/isolation/__init__.py +24 -0
  132. flowjet-2.0.0/src/flowjet/core/backends/isolation/adapter.py +74 -0
  133. flowjet-2.0.0/src/flowjet/core/backends/isolation/admission.py +37 -0
  134. flowjet-2.0.0/src/flowjet/core/backends/isolation/backend.py +98 -0
  135. flowjet-2.0.0/src/flowjet/core/backends/isolation/errors.py +12 -0
  136. flowjet-2.0.0/src/flowjet/core/backends/isolation/mode_gate.py +36 -0
  137. flowjet-2.0.0/src/flowjet/core/backends/isolation/pool.py +634 -0
  138. flowjet-2.0.0/src/flowjet/core/backends/isolation/request.py +24 -0
  139. flowjet-2.0.0/src/flowjet/core/backends/isolation/workspace.py +47 -0
  140. flowjet-2.0.0/src/flowjet/core/bootstrap.py +183 -0
  141. flowjet-2.0.0/src/flowjet/core/bridges/nano/__init__.py +6 -0
  142. flowjet-2.0.0/src/flowjet/core/bridges/nano/adapter.py +119 -0
  143. flowjet-2.0.0/src/flowjet/core/bridges/nano/backend.py +86 -0
  144. flowjet-2.0.0/src/flowjet/core/bridges/nano/mapping.py +213 -0
  145. flowjet-2.0.0/src/flowjet/core/events.py +113 -0
  146. flowjet-2.0.0/src/flowjet/core/modes.py +117 -0
  147. flowjet-2.0.0/src/flowjet/core/protocol.py +20 -0
  148. flowjet-2.0.0/src/flowjet/core/tool_results.py +70 -0
  149. flowjet-2.0.0/src/flowjet/core/tool_stream.py +246 -0
  150. flowjet-2.0.0/src/flowjet/server/__init__.py +11 -0
  151. flowjet-2.0.0/src/flowjet/server/__main__.py +66 -0
  152. flowjet-2.0.0/src/flowjet/server/acp/__init__.py +11 -0
  153. flowjet-2.0.0/src/flowjet/server/acp/agent.py +313 -0
  154. flowjet-2.0.0/src/flowjet/server/acp/routes.py +47 -0
  155. flowjet-2.0.0/src/flowjet/server/config.py +60 -0
  156. flowjet-2.0.0/src/flowjet/server/http/__init__.py +5 -0
  157. flowjet-2.0.0/src/flowjet/server/http/app.py +119 -0
  158. flowjet-2.0.0/src/flowjet/server/http/auth.py +36 -0
  159. flowjet-2.0.0/src/flowjet/server/openai_compat/__init__.py +14 -0
  160. flowjet-2.0.0/src/flowjet/server/openai_compat/errors.py +34 -0
  161. flowjet-2.0.0/src/flowjet/server/openai_compat/projection.py +321 -0
  162. flowjet-2.0.0/src/flowjet/server/openai_compat/routes.py +77 -0
  163. flowjet-2.0.0/src/flowjet/server/openai_compat/schemas.py +120 -0
  164. flowjet-2.0.0/src/flowjet/server/openai_compat/service.py +299 -0
  165. flowjet-2.0.0/src/flowjet/server/openai_compat/store.py +29 -0
@@ -0,0 +1,257 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[codz]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py.cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ # Pipfile.lock
96
+
97
+ # UV
98
+ # flowjet commits uv.lock for reproducible installs (CLI + server extras).
99
+
100
+ # poetry
101
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
102
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
103
+ # commonly ignored for libraries.
104
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
105
+ # poetry.lock
106
+ # poetry.toml
107
+
108
+ # pdm
109
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
110
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
111
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
112
+ # pdm.lock
113
+ # pdm.toml
114
+ .pdm-python
115
+ .pdm-build/
116
+
117
+ # pixi
118
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
119
+ # pixi.lock
120
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
121
+ # in the .venv directory. It is recommended not to include this directory in version control.
122
+ .pixi
123
+
124
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
125
+ __pypackages__/
126
+
127
+ # Celery stuff
128
+ celerybeat-schedule
129
+ celerybeat.pid
130
+
131
+ # Redis
132
+ *.rdb
133
+ *.aof
134
+ *.pid
135
+
136
+ # RabbitMQ
137
+ mnesia/
138
+ rabbitmq/
139
+ rabbitmq-data/
140
+
141
+ # ActiveMQ
142
+ activemq-data/
143
+
144
+ # SageMath parsed files
145
+ *.sage.py
146
+
147
+ # Environments
148
+ .env
149
+ .envrc
150
+ .venv
151
+ env/
152
+ venv/
153
+ ENV/
154
+ env.bak/
155
+ venv.bak/
156
+
157
+ # Local editor / tool backups
158
+ .backups/
159
+
160
+ # Spyder project settings
161
+ .spyderproject
162
+ .spyproject
163
+
164
+ # Rope project settings
165
+ .ropeproject
166
+
167
+ # mkdocs documentation
168
+ /site
169
+
170
+ # mypy
171
+ .mypy_cache/
172
+ .dmypy.json
173
+ dmypy.json
174
+
175
+ # Pyre type checker
176
+ .pyre/
177
+
178
+ # pytype static type analyzer
179
+ .pytype/
180
+
181
+ # Cython debug symbols
182
+ cython_debug/
183
+
184
+ # PyCharm
185
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
186
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
187
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
188
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
189
+ # .idea/
190
+
191
+ # Abstra
192
+ # Abstra is an AI-powered process automation framework.
193
+ # Ignore directories containing user credentials, local state, and settings.
194
+ # Learn more at https://abstra.io/docs
195
+ .abstra/
196
+
197
+ # Visual Studio Code
198
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
199
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
200
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
201
+ # you could uncomment the following to ignore the entire vscode folder
202
+ # .vscode/
203
+ # Temporary file for partial code execution
204
+ tempCodeRunnerFile.py
205
+
206
+ # Ruff stuff:
207
+ .ruff_cache/
208
+
209
+ # PyPI configuration file
210
+ .pypirc
211
+
212
+ # Marimo
213
+ marimo/_static/
214
+ marimo/_lsp/
215
+ __marimo__/
216
+
217
+ # Streamlit
218
+ .streamlit/secrets.toml
219
+ #--------------------------------------------------#
220
+ # The following was generated with gitignore.nvim: #
221
+ #--------------------------------------------------#
222
+ # Gitignore for the following technologies: macOS
223
+
224
+ # General
225
+ .DS_Store
226
+ .AppleDouble
227
+ .LSOverride
228
+
229
+ # Icon must end with two
230
+ Icon
231
+
232
+ # Thumbnails
233
+ ._*
234
+
235
+ # Files that might appear in the root of a volume
236
+ .DocumentRevisions-V100
237
+ .fseventsd
238
+ .Spotlight-V100
239
+ .TemporaryItems
240
+ .Trashes
241
+ .VolumeIcon.icns
242
+ .com.apple.timemachine.donotpresent
243
+
244
+ # Directories potentially created on remote AFP share
245
+ .AppleDB
246
+ .AppleDesktop
247
+ Network Trash Folder
248
+ Temporary Items
249
+ .apdisk
250
+
251
+ # iCloud generated files
252
+ *.icloud
253
+ .soothe/
254
+
255
+ # Claude Code session-local
256
+ .claude/
257
+ .codebuddy/
@@ -0,0 +1,111 @@
1
+ # Changelog
2
+
3
+ All notable changes to **flowjet** are documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ > History from 0.1.0–0.2.0 below was released as the separate `flowjet-server`
9
+ > distribution, now merged into `flowjet`. See [docs/upgrade.md](docs/upgrade.md).
10
+
11
+ ## [2.0.0] — 2026-09-17 — unified CLI + server
12
+
13
+ **Breaking.** `flowjet-server` is merged into this repository and ships as one
14
+ distribution, `flowjet`. See [RFC-004](docs/specs/RFC-004-unified-package.md).
15
+
16
+ ### Added
17
+
18
+ - **One distribution, two surfaces.** `flowjet.core` (shared runtime),
19
+ `flowjet.cli` (was `fj_ai`) and `flowjet.server` (was `flowjet_server`).
20
+ - **`fj serve`** — run the HTTP service from the CLI (alias of `flowjet-server`,
21
+ flags: `--host`, `-p/--port`, `--api-key`, `--nano-config`).
22
+ - **Optional `[server]` extra.** `pip install flowjet` pulls one runtime
23
+ dependency (soothe-nano); FastAPI/uvicorn/ACP/pydantic-settings are opt-in
24
+ and lazily imported so `fj` never loads them.
25
+ - **`DirectRuntimeBackend`** — the CLI now runs on the same `RuntimeBackend`
26
+ contract and `RuntimeEvent` stream as SSE and ACP.
27
+ - **`Narration` event** — pre-tool-call text is available to the terminal for
28
+ live preview while remaining invisible to protocol clients.
29
+ - **`SurfaceProfile`** (`flowjet.core.modes`) — the CLI's permissive workspace
30
+ and the server's workspace confinement are now explicit, per-surface
31
+ invariants; `bypass` mode is rejected on the server surface.
32
+ - Auth now uses `hmac.compare_digest` instead of `!=`.
33
+
34
+ ### Changed
35
+
36
+ - Distribution renamed `flowjet-agent` → `flowjet`; version single-sourced from
37
+ `flowjet.__version__` (the server no longer hard-codes `0.2.0`).
38
+ - Builtin skills moved to `flowjet/builtin_skills` and are registered for both
39
+ surfaces.
40
+ - `langchain-core` is now an explicit `server` dependency (it was imported but
41
+ undeclared).
42
+
43
+ ### Removed
44
+
45
+ - The `fj_ai` and `flowjet_server` import namespaces. No compatibility shims —
46
+ see [docs/upgrade.md](docs/upgrade.md) for the migration table.
47
+
48
+ ## [0.2.0] — 2026-09-16
49
+
50
+ ### Added
51
+
52
+ - **ACP (Agent Client Protocol) support.** flowjet-server now exposes an ACP
53
+ `Agent` over a WebSocket endpoint at `/acp`. Other ACP clients (Zed, custom
54
+ integrations) connect via `ws://host:port/acp` and drive the same
55
+ nano-backed `RuntimeBackend` used by the OpenAI-compatible Responses API.
56
+ The implementation bridges `RuntimeEvent` streams (RunStarted, Progress,
57
+ OutputTextDelta, ToolStarted/Completed, RunCompleted) to ACP
58
+ `session/update` notifications (agent_message_chunk, agent_thought_chunk,
59
+ tool_call/tool_call_update) and returns `PromptResponse` with
60
+ `stopReason=end_turn` + token usage. Initialize, session/new,
61
+ session/load, session/list, session/prompt, session/cancel, and
62
+ session/close are all supported.
63
+
64
+ ### Changed
65
+
66
+ - **Bumped `soothe-nano` dependency** from `>=1.2.23,<2.0.0` to
67
+ `>=1.2.28,<2.0.0` (latest release).
68
+ - **Added `agent-client-protocol[http]`** as a runtime dependency
69
+ (`>=0.12.1,<1.0.0`), providing the ACP SDK server + WebSocket transport.
70
+
71
+ ## [0.1.1] — 2026-09-05
72
+
73
+ ### Fixed
74
+
75
+ - **litellm corrupted-install fix.** The previous image (v0.1.0) shipped a
76
+ broken `litellm` 1.99.0 wheel: `litellm/__init__.py` was listed in the
77
+ dist-info RECORD but missing from disk, so Python treated the package as an
78
+ empty namespace package and every `/v1/responses` call failed with
79
+ `module 'litellm' has no attribute 'acompletion'`. Reinstalling litellm with
80
+ `uv pip install --force-reinstall litellm==1.99.0` restores
81
+ `litellm/__init__.py` and `acompletion` becomes available again. The Docker
82
+ image now rebuilds the venv cleanly so the fix is baked into the published
83
+ image.
84
+
85
+ ### Verified
86
+
87
+ Full E2E suite (`examples/e2e_http_api.py`) passes against the live server:
88
+
89
+ | Endpoint | Method | Result |
90
+ |---|---|---|
91
+ | `/health` | GET | ✅ `{"status":"ok",...}` |
92
+ | `/v1/models` | GET | ✅ returns `default` model |
93
+ | `/v1/responses` (stream=false) | POST | ✅ status `completed`, real LLM text |
94
+ | `/v1/responses/{id}` | GET | ✅ retrieve returns stored response |
95
+ | `/v1/responses/{id}` | DELETE | ✅ `deleted:true`, subsequent GET → 404 |
96
+ | `/v1/responses` (SSE, report) | POST | ✅ `response.created` → `output_text.delta` → `response.completed` |
97
+ | `/v1/responses` (SSE, progress) | POST | ✅ includes `response.flowjet.progress` stages |
98
+ | `/v1/responses` (SSE, developer) | POST | ✅ completes; no tool args leaked to wire |
99
+ | unknown model | POST | ✅ HTTP 404 `model_not_found` |
100
+ | missing id | GET | ✅ HTTP 404 `response_not_found` |
101
+
102
+ ## [0.1.0] — initial release
103
+
104
+ OpenAI Responses–compatible HTTP service backed by soothe-nano (≥1.2.23).
105
+ Includes ask/agent interaction modes, three SSE projection modes
106
+ (report / progress / developer), thread-pool isolation (RFC-002), production
107
+ isolation suite (RFC-003), and a self-contained Docker deploy stack
108
+ (PostgreSQL + pgvector + flowjet-server).
109
+
110
+ [0.1.1]: https://github.com/caesar0301/flowjet-server/releases/tag/v0.1.1
111
+ [0.1.0]: https://github.com/caesar0301/flowjet-server/releases/tag/v0.1.0
flowjet-2.0.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Xiaming Chen
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
flowjet-2.0.0/PKG-INFO ADDED
@@ -0,0 +1,288 @@
1
+ Metadata-Version: 2.5
2
+ Name: flowjet
3
+ Version: 2.0.0
4
+ Summary: FlowJet — agent CLI (fj) and server (ACP + OpenAI-compatible HTTP) powered by soothe-nano
5
+ Project-URL: Homepage, https://github.com/caesar0301/flowjet-agent
6
+ Project-URL: Repository, https://github.com/caesar0301/flowjet-agent
7
+ Project-URL: Issues, https://github.com/caesar0301/flowjet-agent/issues
8
+ Author: Xiaming Chen
9
+ License: MIT
10
+ License-File: LICENSE
11
+ Keywords: acp,agent,ai,cli,coding-agent,fj,flowjet,nano,openai,server,soothe
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Environment :: Console
14
+ Classifier: Environment :: Web Environment
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Programming Language :: Python :: 3.14
22
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
23
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
24
+ Requires-Python: <3.15,>=3.11
25
+ Requires-Dist: soothe-nano<1.3.0,>=1.2.28
26
+ Provides-Extra: dev
27
+ Requires-Dist: httpx>=0.27.0; extra == 'dev'
28
+ Requires-Dist: mypy>=1.0.0; extra == 'dev'
29
+ Requires-Dist: openai>=2.51.0; extra == 'dev'
30
+ Requires-Dist: pytest-asyncio>=1.3.0; extra == 'dev'
31
+ Requires-Dist: pytest-cov; extra == 'dev'
32
+ Requires-Dist: pytest>=8.0.0; extra == 'dev'
33
+ Requires-Dist: ruff>=0.12.0; extra == 'dev'
34
+ Requires-Dist: twine>=5.0.0; extra == 'dev'
35
+ Provides-Extra: server
36
+ Requires-Dist: agent-client-protocol[http]<1.0.0,>=0.12.1; extra == 'server'
37
+ Requires-Dist: fastapi>=0.115.0; extra == 'server'
38
+ Requires-Dist: langchain-core>=0.3; extra == 'server'
39
+ Requires-Dist: pydantic-settings>=2.0; extra == 'server'
40
+ Requires-Dist: pydantic>=2.0; extra == 'server'
41
+ Requires-Dist: uvicorn[standard]>=0.32.0; extra == 'server'
42
+ Description-Content-Type: text/markdown
43
+
44
+ # FlowJet
45
+
46
+ [![PyPI version](https://img.shields.io/pypi/v/flowjet.svg)](https://pypi.org/p/flowjet)
47
+ [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/flowjet.svg)](https://pypi.org/p/flowjet)
48
+ [![CI](https://github.com/caesar0301/flowjet-agent/actions/workflows/ci.yml/badge.svg)](https://github.com/caesar0301/flowjet-agent/actions/workflows/ci.yml)
49
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
50
+
51
+ 🎥 [Watch the demo on Vimeo](https://vimeo.com/1211730182)
52
+
53
+ **FlowJet** is one agent runtime, two surfaces:
54
+
55
+ | Surface | Entry point | What it gives you |
56
+ |---------|-------------|-------------------|
57
+ | **Terminal CLI** | `fj` | A friendly one-shot coding agent — ask in plain English, get an answer |
58
+ | **HTTP service** | `flowjet-server` / `fj serve` | **ACP** over WebSocket + an **OpenAI-compatible API** (`/v1/responses`, `/v1/chat/completions`, `/v1/models`) |
59
+
60
+ Both are the same distribution and the same `flowjet.core` runtime: one nano
61
+ bootstrap, one stream mapper, one `RuntimeEvent` contract. The terminal renders
62
+ those events as a progress line; the server renders them as SSE or ACP updates.
63
+
64
+ ```bash
65
+ # CLI
66
+ fj explain this repo
67
+ fj -f what did we decide last time # continue the latest conversation
68
+ fjf what did we decide last time # alias of fj -f
69
+
70
+ # Server (OpenAI-compatible + ACP)
71
+ flowjet-server # or: fj serve --port 8618
72
+ ```
73
+
74
+ It runs on [soothe-nano](https://github.com/mirasoth/soothe-nano) — tools, skills, MCP, subagents, and progressive loading — with SQLite persistence so every conversation is resumable.
75
+
76
+ > Package: **flowjet** · CLI aliases: `fj`, `fjf` (=`-f`) · Server: `flowjet-server` · Runtime: [soothe-nano](https://github.com/mirasoth/soothe-nano) · Naming details: [docs/naming.md](docs/naming.md)
77
+
78
+ > **Upgrading from 1.x?** The distribution and all import paths were renamed. See [docs/upgrade.md](docs/upgrade.md).
79
+
80
+ ---
81
+
82
+ ## Install
83
+
84
+ ```bash
85
+ pip install flowjet # CLI only (one runtime dependency: soothe-nano)
86
+ pip install 'flowjet[server]' # + the HTTP service (fastapi, uvicorn, ACP)
87
+ # or
88
+ uv tool install 'flowjet[server]'
89
+ ```
90
+
91
+ Requires Python 3.11+. The server half is an optional extra — `fj` never imports
92
+ FastAPI or uvicorn.
93
+
94
+ ## Configure
95
+
96
+ **Option A — Local model (guided setup):**
97
+
98
+ ```bash
99
+ fj setup
100
+ ```
101
+
102
+ This walks you through an OpenAI-compatible endpoint (Ollama, LM Studio, vLLM, …) and writes the basics to `~/.soothe/config/nano.yml`.
103
+
104
+ **Option B — Cloud (no config file needed):**
105
+
106
+ ```bash
107
+ export OPENAI_API_KEY=sk-...
108
+ fj summarize README.md
109
+ ```
110
+
111
+ Without a `nano.yml`, FlowJet falls back to `OPENAI_API_KEY` or `ANTHROPIC_API_KEY`.
112
+
113
+ ## Doctor
114
+
115
+ Check whether your machine is ready to run `fj` (tool binaries, providers, observability):
116
+
117
+ ```bash
118
+ fj doctor # quick check
119
+ fj doctor --deep # thorough check
120
+ fj doctor --live-llm # actually call the model
121
+ fj doctor --format json # machine-readable
122
+ ```
123
+
124
+ ---
125
+
126
+ ## Conversations
127
+
128
+ Threads persist in SQLite, so you can pick up where you left off — continue the latest, jump to a specific one, or list them:
129
+
130
+ ```bash
131
+ fj -f and now add tests # continue this project's latest active thread
132
+ fj -t abc123 continue from here # continue a specific thread
133
+ fj -l # list recent threads
134
+ ```
135
+
136
+ `-f` is scoped to the project you are in — the git repo root, or the current directory when it is not a repo — so parallel work in other checkouts never hijacks your thread. `fj -l` still lists every thread; pick one up from anywhere with `-t ID`.
137
+
138
+ ## Flags
139
+
140
+ ```text
141
+ fj [options] [--] <query...>
142
+ ```
143
+
144
+ | Flag | Meaning |
145
+ |------|---------|
146
+ | `-f` / `--follow` | Continue the latest active thread in this project directory |
147
+ | `-t ID` / `--thread` | Continue (or pin) a specific thread (overrides `-f`) |
148
+ | `-l` / `--list` | List recent threads (newest first) |
149
+ | `-n NUM` | How many threads `-l` shows (`0` = all) |
150
+ | `-c PATH` / `--config` | Use an alternate `nano.yml` |
151
+ | `-w DIR` / `--workspace` | Workspace root |
152
+ | `--no-stream` | Wait for the full answer instead of streaming |
153
+ | `-v` / `--verbose` | Mirror tool calls on stderr |
154
+
155
+ > `-t` and `-f` can be combined; `-t` wins (explicit id overrides follow).
156
+
157
+ Shell completion is AI-assisted — it predicts natural-language intents, not just flags:
158
+
159
+ ```bash
160
+ eval "$(fj completion zsh)" # or: fj completion bash
161
+ ```
162
+
163
+ ---
164
+
165
+ ## Extend
166
+
167
+ ### Skills
168
+
169
+ FlowJet ships with AgentSkills (planning, TDD, debugging, document tools, MCP builder, and more). Add your own in `nano.yml`:
170
+
171
+ ```yaml
172
+ skills:
173
+ - ~/.soothe/skills/my-reviewer
174
+ - ./skills/deploy
175
+ ```
176
+
177
+ Each skill is a `SKILL.md` with frontmatter; progressive loading keeps the catalog compact and loads skills on demand.
178
+
179
+ ### MCP servers
180
+
181
+ Connect any Model Context Protocol server:
182
+
183
+ ```yaml
184
+ mcp_servers:
185
+ - name: filesystem
186
+ transport: stdio
187
+ command: npx
188
+ args: ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
189
+ ```
190
+
191
+ With `defer: true` (the default), MCP tools activate on demand.
192
+
193
+ ---
194
+
195
+ ## Server
196
+
197
+ Start the service and point any OpenAI-compatible client at it:
198
+
199
+ ```bash
200
+ flowjet-server # defaults: host :: (dual-stack), port 8618
201
+ fj serve --port 8618 # same thing from the CLI
202
+ ```
203
+
204
+ ```python
205
+ from openai import OpenAI
206
+
207
+ client = OpenAI(api_key="local", base_url="http://127.0.0.1:8618/v1")
208
+ print(client.responses.create(model="default", input="Hello"))
209
+ ```
210
+
211
+ | HTTP | Purpose |
212
+ |------|---------|
213
+ | `GET /health` | Liveness + thread-pool metrics |
214
+ | `GET /v1/models` | Logical model ids |
215
+ | `POST /v1/responses` | Create a response (`stream=true` → SSE) |
216
+ | `GET` / `DELETE /v1/responses/{id}` | Retrieve / cancel a response |
217
+ | `POST /v1/chat/completions` | Chat Completions (non-stream + SSE) |
218
+ | `WS /acp` | Agent Client Protocol (JSON-RPC) |
219
+
220
+ FlowJet options travel in `extra_body.flowjet`:
221
+
222
+ | Field | Values | Default | Meaning |
223
+ |-------|--------|---------|---------|
224
+ | `projection` | `report` \| `progress` \| `developer` | `report` | How much SSE detail to expose |
225
+ | `session` | string | new `fj-<uuid>` | Isolates workspace + conversation thread |
226
+ | `interaction_mode` | `agent` \| `ask` | `agent` | `ask` is hard read-only |
227
+ | `metadata` | object | — | Opaque bag forwarded to the runtime |
228
+
229
+ ### Environment
230
+
231
+ | Variable | Default | Meaning |
232
+ |----------|---------|---------|
233
+ | `FLOWJET_API_KEY` | unset | If set, require Bearer auth |
234
+ | `FLOWJET_MODELS` | `default` | Comma-separated logical model ids |
235
+ | `FLOWJET_HOST` | `::` | Bind host (dual-stack IPv4/IPv6) |
236
+ | `FLOWJET_PORT` | `8618` | Bind port |
237
+ | `FLOWJET_HOME` | `~/.flowjet` | Root for per-session workspaces |
238
+ | `FLOWJET_NANO_CONFIG` | unset | Optional `nano.yml` (else `$SOOTHE_HOME/config/nano.yml`) |
239
+ | `FLOWJET_THREAD_POOL_MIN` | `2` | Min isolation worker threads |
240
+ | `FLOWJET_THREAD_POOL_MAX` | `8` | Max isolation worker threads |
241
+ | `FLOWJET_THREAD_POOL_IDLE_TIMEOUT` | `300` | Scaled-worker idle exit seconds (`0` = never) |
242
+ | `FLOWJET_MAX_REQUESTS_PER_WORKER` | `100` | Recycle worker after N turns (`0` = unlimited) |
243
+ | `FLOWJET_REUSE_RUNNER` | `true` | Reuse agent adapter per worker |
244
+ | `FLOWJET_REQUEST_TIMEOUT` | `0` | Per-run timeout seconds (`0` = none; set in production) |
245
+ | `FLOWJET_READY_TIMEOUT` | `30` | Max wait for post-turn worker ready |
246
+ | `FLOWJET_ALLOW_EXTERNAL_WORKSPACE` | `false` | Allow `metadata.workspace` outside `FLOWJET_HOME` |
247
+ | `FLOWJET_CORS_ORIGINS` | `*` | Comma-separated browser origins allowed to call the API |
248
+
249
+ ### Security model
250
+
251
+ The two surfaces have deliberately different invariants (enforced in
252
+ `flowjet.core.modes`, not by whichever module loaded first):
253
+
254
+ | | CLI | Server |
255
+ |---|---|---|
256
+ | `allow_paths_outside_workspace` | `True` (your machine) | **`False`** (per-request workspace, non-overridable) |
257
+ | `bypass` interaction mode | available | **rejected** — tools must never escape the request workspace |
258
+ | API key | — | optional `FLOWJET_API_KEY` (Bearer, constant-time compare) |
259
+
260
+ `FLOWJET_CORS_ORIGINS` defaults to `*` with credentials enabled so browser
261
+ clients work out of the box; set it to an explicit origin list in production.
262
+
263
+ Full protocol reference and deployment guide: [deploy/README.md](deploy/README.md),
264
+ [docs/specs/RFC-001-openai-compatible-api.md](docs/specs/RFC-001-openai-compatible-api.md).
265
+
266
+ ---
267
+
268
+ ## Development
269
+
270
+ ```bash
271
+ git clone https://github.com/caesar0301/flowjet-agent.git
272
+ cd flowjet-agent
273
+ make sync-dev # dev + server extras
274
+ make test # unit + integration + server suites
275
+ make test-server # HTTP/ACP suites only
276
+ make run # start the server locally
277
+ make lint
278
+ ```
279
+
280
+ CI runs format, lint, and tests on Python 3.11–3.13; releases go GitHub Release → PyPI.
281
+
282
+ ## Powered by
283
+
284
+ Built on [soothe-nano](https://github.com/mirasoth/soothe-nano). For a full TUI coding agent from the same stack, see [mirasoth/soothe](https://github.com/mirasoth/soothe).
285
+
286
+ ## License
287
+
288
+ MIT