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.
- {flowjet-2.1.6 → flowjet-2.1.7}/CHANGELOG.md +25 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/PKG-INFO +3 -3
- {flowjet-2.1.6 → flowjet-2.1.7}/pyproject.toml +3 -3
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/agent/wiring.py +5 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/identity.py +7 -4
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/isolation/workspace.py +8 -1
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/config.py +14 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/http/app.py +2 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/.gitignore +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/LICENSE +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/README.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/config/nano-local.yml +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/config/nano-sandbox-soothe.yml +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/config/nano.yml +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/deploy/README.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/docs/completion-design.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/docs/impl/IG-001-openai-compatible-server.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/docs/impl/IG-002-isolated-thread-pool-runtime.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/docs/impl/IG-003-production-isolation-hardening.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/docs/specs/RFC-001-openai-compatible-api.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/docs/specs/RFC-002-isolated-thread-pool-runtime.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/docs/specs/RFC-003-production-isolation-hardening.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/docs/specs/RFC-004-unified-package.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/docs/specs/RFC-005-arcbox-tool-sandbox.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/docs/specs/rfc-history.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/docs/specs/rfc-index.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/docs/specs/rfc-namings.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/examples/README.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/__init__.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/__main__.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/README.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/gws-drive/SKILL.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/gws-drive-upload/SKILL.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/.env.example +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/README.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/SKILL.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/assets/background_library.html +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/assets/showcase_template.html +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/references/background_styles.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/references/design_patterns.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/references/webgl_backgrounds.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/requirements.txt +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/scripts/generate_showcase.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/scripts/svg_to_png.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/SKILL.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/brainstorming/spec-document-reviewer-prompt.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/implementation/coding-plan-template.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/implementation/impl-guide-template.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/review/pr-review-template.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/review/review-checklist.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/specs/rfc-template.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/specs/template-architecture-design.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/specs/template-conceptual-design.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/specs/template-impl-interface-design.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-drafts-readme.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-impl-readme.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-platonic.yml +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-rfc-history.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-rfc-index.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-rfc-namings.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/assets/templates/template-rfc-standard.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/BRAINSTORM/brainstorm.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/IMPL/impl-code.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/IMPL/impl-create-guide.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/IMPL/impl-full.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/IMPL/impl-update-guide.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/IMPL/impl-validate-guide.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/INIT/init-plan-modular-specs.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/INIT/init-recover-architecture.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/INIT/init-recover-conceptual.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/INIT/init-recover-impl-interface.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/INIT/init-scaffold.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/INIT/init-scan.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/REFERENCE.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/REVIEW/review-spec-compliance.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-check-compliance.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-check-taxonomy.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-generate-history.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-generate-index.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-generate-namings.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-refine.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/SPECS/specs-validate-consistency.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/WORKFLOW/workflow-overview.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/WORKFLOW/workflow-phase-1.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/WORKFLOW/workflow-phase-2.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/WORKFLOW/workflow-phase-3.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/SKILL.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/evidence-deep.json +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/evidence-first.json +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/idea-first.json +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/loop.json +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/paper-pipeline.json +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/rapid.json +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/rigor-first.json +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/stance-first.json +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/systematic-review.json +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/verify-loop.json +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/references/backends.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/references/handoff-ars-omr.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/references/handoff-omr-ars.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/references/routing.md +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/scripts/csljson_to_omr.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/scripts/papers_index_to_csljson.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/__init__.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/__main__.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/agent.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/cli.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/completion/__init__.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/completion/context.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/completion/engine.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/doctor_cmd.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/doctor_fix_cmd.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/progress.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/serve_cmd.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/setup_cmd.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/shell/__init__.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/shell/_fj.zsh +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/shell/fj.bash +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/stream.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/threads.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/cli/tool_stream.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/__init__.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/_warnings.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/agent/__init__.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/agent/config.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/agent/factory.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/agent/skills.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/agent/workspace.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/backend_config.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/bridges/base.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/bridges/nano/__init__.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/bridges/nano/adapter.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/bridges/nano/backend.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/bridges/nano/interrupts.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/bridges/nano/mapping.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/bridges/soothe/__init__.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/bridges/soothe/adapter.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/bridges/soothe/backend.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/events.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/modes.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/protocol.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/__init__.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/direct.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/fake.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/isolation/__init__.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/isolation/adapter.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/isolation/admission.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/isolation/backend.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/isolation/errors.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/isolation/mode_gate.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/isolation/pool.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/runtime/isolation/request.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/sandbox/__init__.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/sandbox/arbox.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/sandbox/resolver.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/sandbox/settings.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/streaming/__init__.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/streaming/presentation.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/streaming/tool_results.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/core/streaming/tool_stream.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/home.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/__init__.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/__main__.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/acp/__init__.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/acp/agent.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/acp/routes.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/http/__init__.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/http/auth.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/openai_compat/__init__.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/openai_compat/errors.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/openai_compat/projection.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/openai_compat/routes.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/openai_compat/schemas.py +0 -0
- {flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/server/openai_compat/service.py +0 -0
- {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.
|
|
4
|
-
Summary: FlowJet —
|
|
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.
|
|
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.
|
|
8
|
-
description = "FlowJet —
|
|
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.
|
|
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
|
-
|
|
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
|
|
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}
|
|
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
|
|
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
|
|
File without changes
|
{flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/.env.example
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/logo-generator-skill/requirements.txt
RENAMED
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/platonic-coding/references/REFERENCE.md
RENAMED
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/loop.json
RENAMED
|
File without changes
|
|
File without changes
|
{flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/patterns/rapid.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/references/backends.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flowjet-2.1.6 → flowjet-2.1.7}/src/flowjet/builtin_skills/research-bootstrap/references/routing.md
RENAMED
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|