10xscale-agentflow-cli 0.3.0__tar.gz → 0.3.1__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.
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/10xscale_agentflow_cli.egg-info/PKG-INFO +1 -1
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/10xscale_agentflow_cli.egg-info/SOURCES.txt +31 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/MANIFEST.in +1 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/PKG-INFO +1 -1
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/commands/skills.py +306 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/main.py +62 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/SKILL.md +100 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/agents-and-tools.md +65 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/api-client.md +67 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/api-configuration.md +64 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/api-settings-and-middleware.md +82 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/architecture.md +55 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/auth-and-authorization.md +88 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/callbacks-and-command.md +102 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/checkpointing-and-threads.md +63 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/cli-commands.md +73 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/client-auth-and-errors.md +95 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/client-messages-invoke-stream.md +117 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/client-threads-memory-files.md +82 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/context-id-background.md +82 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/dependency-injection.md +58 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/id-and-thread-name-generators.md +71 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/media-and-files.md +66 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/memory-and-store.md +70 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/prebuilt-agents-and-tools.md +60 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/production-runtime.md +56 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/providers-and-adapters.md +81 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/publishers-and-runtime-protocols.md +78 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/remote-tools.md +86 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/rest-api-and-errors.md +93 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/security-and-validators.md +69 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/state-and-messages.md +68 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/state-graph.md +67 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/streaming.md +53 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/agent-skills/references/testing-and-evaluation.md +66 -0
- 10xscale_agentflow_cli-0.3.1/agentflow_cli/cli/templates/skills/copilot/agentflow.instructions.md +51 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/pyproject.toml +2 -2
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/10xscale_agentflow_cli.egg-info/dependency_links.txt +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/10xscale_agentflow_cli.egg-info/entry_points.txt +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/10xscale_agentflow_cli.egg-info/not-zip-safe +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/10xscale_agentflow_cli.egg-info/requires.txt +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/10xscale_agentflow_cli.egg-info/top_level.txt +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/ActionPlan.md +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/README.md +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow.json +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/commands/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/commands/api.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/commands/build.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/commands/init.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/commands/version.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/constants.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/core/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/core/config.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/core/output.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/core/validation.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/exceptions.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/logger.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/templates/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/cli/templates/defaults.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/auth/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/auth/auth_backend.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/auth/authorization.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/auth/base_auth.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/auth/jwt_auth.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/auth/permissions.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/config/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/config/graph_config.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/config/media_settings.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/config/sentry_config.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/config/settings.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/config/setup_logs.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/config/setup_middleware.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/config/worker_middleware.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/exceptions/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/exceptions/general_exception.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/exceptions/handle_errors.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/exceptions/resources_exceptions.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/exceptions/user_exception.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/middleware/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/middleware/request_limits.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/middleware/security_headers.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/utils/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/core/utils/log_sanitizer.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/loader.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/main.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/a2a.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/a2ui.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/checkpointer/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/checkpointer/router.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/checkpointer/schemas/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/checkpointer/schemas/checkpointer_schemas.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/checkpointer/services/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/checkpointer/services/checkpointer_service.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/graph/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/graph/router.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/graph/schemas/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/graph/schemas/graph_schemas.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/graph/services/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/graph/services/graph_service.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/graph/services/multimodal_preprocessor.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/media/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/media/router.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/media/schemas.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/ping/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/ping/router.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/setup_router.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/store/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/store/router.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/store/schemas/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/store/schemas/store_schemas.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/store/services/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/routers/store/services/store_service.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/tasks/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/tasks/user_tasks.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/callable_helper.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/media/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/media/extractor.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/media/pipeline.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/parse_output.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/response_helper.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/schemas/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/schemas/output_schemas.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/schemas/user_schemas.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/snowflake_id_generator.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/swagger_helper.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/utils/thread_name_generator.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/agentflow_cli/src/app/worker.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/graph/__init__.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/graph/react.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/graph/thread_name_generator.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/plan.md +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/requirements.txt +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/scripts/generate_docs.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/setup.cfg +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/tests/test_multimodal_sprint2_extraction.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/tests/test_sprint4_media_api.py +0 -0
- {10xscale_agentflow_cli-0.3.0 → 10xscale_agentflow_cli-0.3.1}/tests/test_utils_parse_and_callable.py +0 -0
|
@@ -22,6 +22,7 @@ agentflow_cli/cli/commands/__init__.py
|
|
|
22
22
|
agentflow_cli/cli/commands/api.py
|
|
23
23
|
agentflow_cli/cli/commands/build.py
|
|
24
24
|
agentflow_cli/cli/commands/init.py
|
|
25
|
+
agentflow_cli/cli/commands/skills.py
|
|
25
26
|
agentflow_cli/cli/commands/version.py
|
|
26
27
|
agentflow_cli/cli/core/__init__.py
|
|
27
28
|
agentflow_cli/cli/core/config.py
|
|
@@ -29,6 +30,36 @@ agentflow_cli/cli/core/output.py
|
|
|
29
30
|
agentflow_cli/cli/core/validation.py
|
|
30
31
|
agentflow_cli/cli/templates/__init__.py
|
|
31
32
|
agentflow_cli/cli/templates/defaults.py
|
|
33
|
+
agentflow_cli/cli/templates/skills/agent-skills/SKILL.md
|
|
34
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/agents-and-tools.md
|
|
35
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/api-client.md
|
|
36
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/api-configuration.md
|
|
37
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/api-settings-and-middleware.md
|
|
38
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/architecture.md
|
|
39
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/auth-and-authorization.md
|
|
40
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/callbacks-and-command.md
|
|
41
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/checkpointing-and-threads.md
|
|
42
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/cli-commands.md
|
|
43
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/client-auth-and-errors.md
|
|
44
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/client-messages-invoke-stream.md
|
|
45
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/client-threads-memory-files.md
|
|
46
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/context-id-background.md
|
|
47
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/dependency-injection.md
|
|
48
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/id-and-thread-name-generators.md
|
|
49
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/media-and-files.md
|
|
50
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/memory-and-store.md
|
|
51
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/prebuilt-agents-and-tools.md
|
|
52
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/production-runtime.md
|
|
53
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/providers-and-adapters.md
|
|
54
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/publishers-and-runtime-protocols.md
|
|
55
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/remote-tools.md
|
|
56
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/rest-api-and-errors.md
|
|
57
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/security-and-validators.md
|
|
58
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/state-and-messages.md
|
|
59
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/state-graph.md
|
|
60
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/streaming.md
|
|
61
|
+
agentflow_cli/cli/templates/skills/agent-skills/references/testing-and-evaluation.md
|
|
62
|
+
agentflow_cli/cli/templates/skills/copilot/agentflow.instructions.md
|
|
32
63
|
agentflow_cli/src/__init__.py
|
|
33
64
|
agentflow_cli/src/app/__init__.py
|
|
34
65
|
agentflow_cli/src/app/loader.py
|
|
@@ -6,6 +6,7 @@ include example_weather_agent.py
|
|
|
6
6
|
recursive-include agentflow_cli *.json
|
|
7
7
|
recursive-include agentflow_cli *.yaml
|
|
8
8
|
recursive-include agentflow_cli *.yml
|
|
9
|
+
recursive-include agentflow_cli *.md
|
|
9
10
|
recursive-include agentflow_cli *.py
|
|
10
11
|
recursive-include src *.json
|
|
11
12
|
recursive-include src *.yaml
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
"""Skills command implementation."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import shutil
|
|
7
|
+
import sys
|
|
8
|
+
from dataclasses import dataclass
|
|
9
|
+
from datetime import UTC, datetime
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Any, Literal
|
|
12
|
+
|
|
13
|
+
import typer
|
|
14
|
+
|
|
15
|
+
from agentflow_cli.cli.commands import BaseCommand
|
|
16
|
+
from agentflow_cli.cli.constants import CLI_VERSION
|
|
17
|
+
from agentflow_cli.cli.exceptions import FileOperationError, ValidationError
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
_MANIFEST_FILENAME = ".agentflow-skill.json"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@dataclass(frozen=True)
|
|
24
|
+
class _InstallArtifact:
|
|
25
|
+
"""Describes one file or folder installed for an agent."""
|
|
26
|
+
|
|
27
|
+
kind: Literal["folder", "file"]
|
|
28
|
+
install_relpath: str
|
|
29
|
+
source_relpath: str
|
|
30
|
+
manifest: bool = False
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@dataclass(frozen=True)
|
|
34
|
+
class _AgentTarget:
|
|
35
|
+
"""Describes how the bundled skill is materialised for one agent."""
|
|
36
|
+
|
|
37
|
+
name: str
|
|
38
|
+
artifacts: tuple[_InstallArtifact, ...]
|
|
39
|
+
|
|
40
|
+
@property
|
|
41
|
+
def kind(self) -> str:
|
|
42
|
+
kinds = {artifact.kind for artifact in self.artifacts}
|
|
43
|
+
if len(kinds) == 1:
|
|
44
|
+
return next(iter(kinds))
|
|
45
|
+
return "file+folder"
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
_TARGETS: tuple[_AgentTarget, ...] = (
|
|
49
|
+
_AgentTarget(
|
|
50
|
+
name="Codex",
|
|
51
|
+
artifacts=(
|
|
52
|
+
_InstallArtifact(
|
|
53
|
+
kind="folder",
|
|
54
|
+
install_relpath=".agents/skills/agentflow",
|
|
55
|
+
source_relpath="agent-skills",
|
|
56
|
+
manifest=True,
|
|
57
|
+
),
|
|
58
|
+
),
|
|
59
|
+
),
|
|
60
|
+
_AgentTarget(
|
|
61
|
+
name="Claude",
|
|
62
|
+
artifacts=(
|
|
63
|
+
_InstallArtifact(
|
|
64
|
+
kind="folder",
|
|
65
|
+
install_relpath=".claude/skills/agentflow",
|
|
66
|
+
source_relpath="agent-skills",
|
|
67
|
+
manifest=True,
|
|
68
|
+
),
|
|
69
|
+
),
|
|
70
|
+
),
|
|
71
|
+
_AgentTarget(
|
|
72
|
+
name="GitHub",
|
|
73
|
+
artifacts=(
|
|
74
|
+
_InstallArtifact(
|
|
75
|
+
kind="file",
|
|
76
|
+
install_relpath=".github/instructions/agentflow.instructions.md",
|
|
77
|
+
source_relpath="copilot/agentflow.instructions.md",
|
|
78
|
+
),
|
|
79
|
+
_InstallArtifact(
|
|
80
|
+
kind="folder",
|
|
81
|
+
install_relpath=".github/skills/agentflow",
|
|
82
|
+
source_relpath="agent-skills",
|
|
83
|
+
manifest=True,
|
|
84
|
+
),
|
|
85
|
+
),
|
|
86
|
+
),
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
_AGENT_LOOKUP: dict[str, _AgentTarget] = {
|
|
90
|
+
**{t.name.lower(): t for t in _TARGETS},
|
|
91
|
+
"1": _TARGETS[0],
|
|
92
|
+
"2": _TARGETS[1],
|
|
93
|
+
"3": _TARGETS[2],
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
class SkillsCommand(BaseCommand):
|
|
98
|
+
"""Command to install bundled Agentflow skills for supported agents."""
|
|
99
|
+
|
|
100
|
+
def execute(
|
|
101
|
+
self,
|
|
102
|
+
agent: str | None = None,
|
|
103
|
+
path: str = ".",
|
|
104
|
+
force: bool = False,
|
|
105
|
+
all_agents: bool = False,
|
|
106
|
+
list_agents: bool = False,
|
|
107
|
+
**kwargs: Any,
|
|
108
|
+
) -> int:
|
|
109
|
+
"""Execute the skills command.
|
|
110
|
+
|
|
111
|
+
Args:
|
|
112
|
+
agent: Target agent name or menu number.
|
|
113
|
+
path: Project directory where the agent skill should be installed.
|
|
114
|
+
force: Overwrite an existing installation.
|
|
115
|
+
all_agents: Install for every supported agent.
|
|
116
|
+
list_agents: Print supported agents and exit.
|
|
117
|
+
**kwargs: Additional arguments.
|
|
118
|
+
|
|
119
|
+
Returns:
|
|
120
|
+
Exit code.
|
|
121
|
+
"""
|
|
122
|
+
try:
|
|
123
|
+
self.output.print_banner(
|
|
124
|
+
"Skills",
|
|
125
|
+
"Install bundled Agentflow skills for Codex, Claude, or GitHub Copilot.",
|
|
126
|
+
color="magenta",
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
if list_agents:
|
|
130
|
+
self._print_agents()
|
|
131
|
+
return 0
|
|
132
|
+
|
|
133
|
+
if all_agents and agent:
|
|
134
|
+
raise ValidationError("--all cannot be combined with --agent.", field="agent")
|
|
135
|
+
|
|
136
|
+
templates_root = self._templates_root()
|
|
137
|
+
project_root = self._safe_project_root(path)
|
|
138
|
+
|
|
139
|
+
if all_agents:
|
|
140
|
+
return self._install_all(templates_root, project_root, force=force)
|
|
141
|
+
|
|
142
|
+
target = self._select_agent(agent)
|
|
143
|
+
self._install_one(templates_root, project_root, target, force=force)
|
|
144
|
+
return 0
|
|
145
|
+
|
|
146
|
+
except (FileOperationError, ValidationError) as e:
|
|
147
|
+
return self.handle_error(e)
|
|
148
|
+
except OSError as e:
|
|
149
|
+
file_error = FileOperationError(f"Failed to install Agentflow skills: {e}")
|
|
150
|
+
file_error.__cause__ = e
|
|
151
|
+
return self.handle_error(file_error)
|
|
152
|
+
|
|
153
|
+
def _install_one(
|
|
154
|
+
self,
|
|
155
|
+
templates_root: Path,
|
|
156
|
+
project_root: Path,
|
|
157
|
+
target: _AgentTarget,
|
|
158
|
+
*,
|
|
159
|
+
force: bool,
|
|
160
|
+
) -> None:
|
|
161
|
+
installs = [
|
|
162
|
+
(
|
|
163
|
+
artifact,
|
|
164
|
+
templates_root / artifact.source_relpath,
|
|
165
|
+
project_root / artifact.install_relpath,
|
|
166
|
+
)
|
|
167
|
+
for artifact in target.artifacts
|
|
168
|
+
]
|
|
169
|
+
for _artifact, source, _dest in installs:
|
|
170
|
+
if not source.exists():
|
|
171
|
+
raise FileOperationError(
|
|
172
|
+
f"Bundled skills template not found: {source}", file_path=str(source)
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
existing = [dest for _artifact, _source, dest in installs if dest.exists()]
|
|
176
|
+
if existing and not force:
|
|
177
|
+
paths = ", ".join(str(dest) for dest in existing)
|
|
178
|
+
raise FileOperationError(
|
|
179
|
+
f"Skill already installed at {paths}. Use --force to overwrite.",
|
|
180
|
+
file_path=str(existing[0]),
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
for _artifact, _source, dest in installs:
|
|
184
|
+
if dest.exists():
|
|
185
|
+
if dest.is_dir():
|
|
186
|
+
shutil.rmtree(dest)
|
|
187
|
+
else:
|
|
188
|
+
dest.unlink()
|
|
189
|
+
|
|
190
|
+
installed_paths: list[str] = []
|
|
191
|
+
for artifact, source, dest in installs:
|
|
192
|
+
dest.parent.mkdir(parents=True, exist_ok=True)
|
|
193
|
+
|
|
194
|
+
if artifact.kind == "folder":
|
|
195
|
+
shutil.copytree(
|
|
196
|
+
source,
|
|
197
|
+
dest,
|
|
198
|
+
ignore=shutil.ignore_patterns("__pycache__", "*.pyc", ".DS_Store"),
|
|
199
|
+
)
|
|
200
|
+
if artifact.manifest:
|
|
201
|
+
self._write_manifest(dest, target.name)
|
|
202
|
+
else:
|
|
203
|
+
shutil.copyfile(source, dest)
|
|
204
|
+
installed_paths.append(str(dest))
|
|
205
|
+
|
|
206
|
+
self.output.success(
|
|
207
|
+
f"Installed Agentflow skills for {target.name} at {', '.join(installed_paths)}"
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
def _install_all(self, templates_root: Path, project_root: Path, *, force: bool) -> int:
|
|
211
|
+
installed = 0
|
|
212
|
+
skipped: list[str] = []
|
|
213
|
+
failed: list[str] = []
|
|
214
|
+
for target in _TARGETS:
|
|
215
|
+
existing = [
|
|
216
|
+
project_root / artifact.install_relpath
|
|
217
|
+
for artifact in target.artifacts
|
|
218
|
+
if (project_root / artifact.install_relpath).exists()
|
|
219
|
+
]
|
|
220
|
+
if existing and not force:
|
|
221
|
+
paths = ", ".join(str(dest) for dest in existing)
|
|
222
|
+
skipped.append(f"{target.name} ({paths})")
|
|
223
|
+
continue
|
|
224
|
+
try:
|
|
225
|
+
self._install_one(templates_root, project_root, target, force=force)
|
|
226
|
+
installed += 1
|
|
227
|
+
except (FileOperationError, OSError, UnicodeError) as e:
|
|
228
|
+
self.logger.error("Install failed for %s: %s", target.name, e)
|
|
229
|
+
failed.append(f"{target.name}: {e}")
|
|
230
|
+
|
|
231
|
+
if skipped:
|
|
232
|
+
self.output.warning(
|
|
233
|
+
"Skipped existing installs (use --force to overwrite): " + ", ".join(skipped)
|
|
234
|
+
)
|
|
235
|
+
if failed:
|
|
236
|
+
self.output.error("Failed installs: " + "; ".join(failed))
|
|
237
|
+
|
|
238
|
+
if failed and installed == 0:
|
|
239
|
+
return 1
|
|
240
|
+
return 0
|
|
241
|
+
|
|
242
|
+
def _write_manifest(self, target_dir: Path, agent_name: str) -> None:
|
|
243
|
+
manifest = {
|
|
244
|
+
"agent": agent_name,
|
|
245
|
+
"cli_version": CLI_VERSION,
|
|
246
|
+
"installed_at": datetime.now(UTC).isoformat(timespec="seconds"),
|
|
247
|
+
}
|
|
248
|
+
(target_dir / _MANIFEST_FILENAME).write_text(
|
|
249
|
+
json.dumps(manifest, indent=2) + "\n", encoding="utf-8"
|
|
250
|
+
)
|
|
251
|
+
|
|
252
|
+
def _print_agents(self) -> None:
|
|
253
|
+
rows = [
|
|
254
|
+
[t.name, t.kind, ", ".join(a.install_relpath for a in t.artifacts)] for t in _TARGETS
|
|
255
|
+
]
|
|
256
|
+
self.output.print_table(
|
|
257
|
+
["Agent", "Kind", "Install path (relative to --path)"],
|
|
258
|
+
rows,
|
|
259
|
+
title="Supported agents",
|
|
260
|
+
)
|
|
261
|
+
|
|
262
|
+
def _safe_project_root(self, path: str) -> Path:
|
|
263
|
+
project_root = Path(path).resolve()
|
|
264
|
+
if project_root.parent == project_root:
|
|
265
|
+
raise ValidationError(
|
|
266
|
+
f"Refusing to install skills at filesystem root: {project_root}",
|
|
267
|
+
field="path",
|
|
268
|
+
)
|
|
269
|
+
if project_root == Path.home().resolve():
|
|
270
|
+
raise ValidationError(
|
|
271
|
+
f"Refusing to install skills directly into the home directory: {project_root}. "
|
|
272
|
+
"Pass --path pointing at a project directory.",
|
|
273
|
+
field="path",
|
|
274
|
+
)
|
|
275
|
+
return project_root
|
|
276
|
+
|
|
277
|
+
def _select_agent(self, agent: str | None) -> _AgentTarget:
|
|
278
|
+
if agent:
|
|
279
|
+
return self._normalize_agent(agent)
|
|
280
|
+
|
|
281
|
+
if not sys.stdin.isatty():
|
|
282
|
+
raise ValidationError(
|
|
283
|
+
"No --agent provided and stdin is not interactive. "
|
|
284
|
+
"Pass --agent codex|claude|github or --all.",
|
|
285
|
+
field="agent",
|
|
286
|
+
)
|
|
287
|
+
|
|
288
|
+
self.output.print_list(
|
|
289
|
+
[f"{i}. {t.name}" for i, t in enumerate(_TARGETS, 1)],
|
|
290
|
+
title="Which agent?",
|
|
291
|
+
bullet="-",
|
|
292
|
+
)
|
|
293
|
+
selected = typer.prompt("Select an agent", default="1")
|
|
294
|
+
return self._normalize_agent(selected)
|
|
295
|
+
|
|
296
|
+
def _normalize_agent(self, value: str) -> _AgentTarget:
|
|
297
|
+
key = value.strip().lower()
|
|
298
|
+
if key in _AGENT_LOOKUP:
|
|
299
|
+
return _AGENT_LOOKUP[key]
|
|
300
|
+
|
|
301
|
+
valid = "Codex, Claude, GitHub, or 1, 2, 3"
|
|
302
|
+
raise ValidationError(f"Invalid agent '{value}'. Choose {valid}.", field="agent")
|
|
303
|
+
|
|
304
|
+
def _templates_root(self) -> Path:
|
|
305
|
+
cli_dir = Path(__file__).resolve().parents[1]
|
|
306
|
+
return cli_dir / "templates" / "skills"
|
|
@@ -8,6 +8,7 @@ from dotenv import load_dotenv
|
|
|
8
8
|
from agentflow_cli.cli.commands.api import APICommand
|
|
9
9
|
from agentflow_cli.cli.commands.build import BuildCommand
|
|
10
10
|
from agentflow_cli.cli.commands.init import InitCommand
|
|
11
|
+
from agentflow_cli.cli.commands.skills import SkillsCommand
|
|
11
12
|
from agentflow_cli.cli.commands.version import VersionCommand
|
|
12
13
|
from agentflow_cli.cli.constants import (
|
|
13
14
|
DEFAULT_CONFIG_FILE,
|
|
@@ -308,6 +309,67 @@ def build(
|
|
|
308
309
|
sys.exit(handle_exception(e))
|
|
309
310
|
|
|
310
311
|
|
|
312
|
+
@app.command()
|
|
313
|
+
def skills(
|
|
314
|
+
agent: str | None = typer.Option(
|
|
315
|
+
None,
|
|
316
|
+
"--agent",
|
|
317
|
+
"-a",
|
|
318
|
+
help="Target agent: codex, claude, github, or menu number 1, 2, 3",
|
|
319
|
+
),
|
|
320
|
+
path: str = typer.Option(
|
|
321
|
+
".",
|
|
322
|
+
"--path",
|
|
323
|
+
"-p",
|
|
324
|
+
help="Project directory where the skills should be installed",
|
|
325
|
+
),
|
|
326
|
+
force: bool = typer.Option(
|
|
327
|
+
False,
|
|
328
|
+
"--force",
|
|
329
|
+
"-f",
|
|
330
|
+
help="Overwrite the existing installed Agentflow skill directory",
|
|
331
|
+
),
|
|
332
|
+
all_agents: bool = typer.Option(
|
|
333
|
+
False,
|
|
334
|
+
"--all",
|
|
335
|
+
help="Install skills for every supported agent",
|
|
336
|
+
),
|
|
337
|
+
list_agents: bool = typer.Option(
|
|
338
|
+
False,
|
|
339
|
+
"--list",
|
|
340
|
+
"-l",
|
|
341
|
+
help="List supported agents and exit",
|
|
342
|
+
),
|
|
343
|
+
verbose: bool = typer.Option(
|
|
344
|
+
False,
|
|
345
|
+
"--verbose",
|
|
346
|
+
"-v",
|
|
347
|
+
help="Enable verbose logging",
|
|
348
|
+
),
|
|
349
|
+
quiet: bool = typer.Option(
|
|
350
|
+
False,
|
|
351
|
+
"--quiet",
|
|
352
|
+
"-q",
|
|
353
|
+
help="Suppress all output except errors",
|
|
354
|
+
),
|
|
355
|
+
) -> None:
|
|
356
|
+
"""Install bundled Agentflow skills for Codex, Claude, or GitHub."""
|
|
357
|
+
setup_cli_logging(verbose=verbose, quiet=quiet)
|
|
358
|
+
|
|
359
|
+
try:
|
|
360
|
+
command = SkillsCommand(output)
|
|
361
|
+
exit_code = command.execute(
|
|
362
|
+
agent=agent,
|
|
363
|
+
path=path,
|
|
364
|
+
force=force,
|
|
365
|
+
all_agents=all_agents,
|
|
366
|
+
list_agents=list_agents,
|
|
367
|
+
)
|
|
368
|
+
sys.exit(exit_code)
|
|
369
|
+
except Exception as e:
|
|
370
|
+
sys.exit(handle_exception(e))
|
|
371
|
+
|
|
372
|
+
|
|
311
373
|
def main() -> None:
|
|
312
374
|
"""Main CLI entry point."""
|
|
313
375
|
try:
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agentflow
|
|
3
|
+
description: Use for building, debugging, documenting, or extending Agentflow agents, tools, graphs, API/CLI services, TypeScript clients, memory, checkpointing, streaming, media, dependency injection, production runtime, and multi-agent workflows in this repository.
|
|
4
|
+
metadata:
|
|
5
|
+
resources:
|
|
6
|
+
- references/architecture.md
|
|
7
|
+
- references/agents-and-tools.md
|
|
8
|
+
- references/state-graph.md
|
|
9
|
+
- references/state-and-messages.md
|
|
10
|
+
- references/checkpointing-and-threads.md
|
|
11
|
+
- references/dependency-injection.md
|
|
12
|
+
- references/media-and-files.md
|
|
13
|
+
- references/memory-and-store.md
|
|
14
|
+
- references/streaming.md
|
|
15
|
+
- references/production-runtime.md
|
|
16
|
+
- references/api-client.md
|
|
17
|
+
- references/remote-tools.md
|
|
18
|
+
- references/callbacks-and-command.md
|
|
19
|
+
- references/prebuilt-agents-and-tools.md
|
|
20
|
+
- references/testing-and-evaluation.md
|
|
21
|
+
- references/publishers-and-runtime-protocols.md
|
|
22
|
+
- references/context-id-background.md
|
|
23
|
+
- references/providers-and-adapters.md
|
|
24
|
+
- references/security-and-validators.md
|
|
25
|
+
- references/cli-commands.md
|
|
26
|
+
- references/api-configuration.md
|
|
27
|
+
- references/auth-and-authorization.md
|
|
28
|
+
- references/api-settings-and-middleware.md
|
|
29
|
+
- references/rest-api-and-errors.md
|
|
30
|
+
- references/id-and-thread-name-generators.md
|
|
31
|
+
- references/client-auth-and-errors.md
|
|
32
|
+
- references/client-messages-invoke-stream.md
|
|
33
|
+
- references/client-threads-memory-files.md
|
|
34
|
+
tags:
|
|
35
|
+
- agentflow
|
|
36
|
+
- agents
|
|
37
|
+
- multi-agent
|
|
38
|
+
- framework
|
|
39
|
+
priority: 10
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
# Agentflow Project Skill
|
|
43
|
+
|
|
44
|
+
Use this skill when working in this Agentflow monorepo. Agentflow is a multi-agent framework that wraps official OpenAI and Google SDK capabilities behind a unified graph, agent, tool, state, storage, API, CLI, and TypeScript client interface.
|
|
45
|
+
|
|
46
|
+
Treat `agentflow-docs/docs` as the first source of truth for public package names, install commands, and user-facing behavior. Use implementation source after the docs establish the intended API.
|
|
47
|
+
|
|
48
|
+
## Workflow
|
|
49
|
+
|
|
50
|
+
1. Identify the published package or docs surface involved:
|
|
51
|
+
- PyPI core Python SDK: `10xscale-agentflow` (`pip install 10xscale-agentflow`), source in `agentflow/agentflow`
|
|
52
|
+
- PyPI API/CLI SDK: `10xscale-agentflow-cli` (`pip install 10xscale-agentflow-cli`), source in `agentflow-api/agentflow_cli`
|
|
53
|
+
- npm TypeScript SDK: `@10xscale/agentflow-client` (`npm install @10xscale/agentflow-client`), source in `agentflow-client/src`
|
|
54
|
+
- Main docs: `agentflow-docs/docs`
|
|
55
|
+
- Playground/UI: `agentflow play` command after installed cli
|
|
56
|
+
|
|
57
|
+
2. Read the matching reference file before changing behavior:
|
|
58
|
+
- Architecture and package flow: `references/architecture.md`
|
|
59
|
+
- Agent and tool behavior: `references/agents-and-tools.md`
|
|
60
|
+
- Graph construction and execution: `references/state-graph.md`
|
|
61
|
+
- State, messages, and content blocks: `references/state-and-messages.md`
|
|
62
|
+
- Threads and persistence: `references/checkpointing-and-threads.md`
|
|
63
|
+
- Dependency injection: `references/dependency-injection.md`
|
|
64
|
+
- Multimodal files and media stores: `references/media-and-files.md`
|
|
65
|
+
- Long-term memory stores: `references/memory-and-store.md`
|
|
66
|
+
- Streaming, chunks, and SSE: `references/streaming.md`
|
|
67
|
+
- API server and deployment runtime: `references/production-runtime.md`
|
|
68
|
+
- REST and TypeScript client surface: `references/api-client.md`
|
|
69
|
+
- Browser/client-side tool execution: `references/remote-tools.md`
|
|
70
|
+
- Observability hooks, validators, and runtime jumps: `references/callbacks-and-command.md`
|
|
71
|
+
- Prebuilt agents/tools and handoff helpers: `references/prebuilt-agents-and-tools.md`
|
|
72
|
+
- Testing helpers and evaluation framework: `references/testing-and-evaluation.md`
|
|
73
|
+
- Event publishers and A2A/ACP runtime protocols: `references/publishers-and-runtime-protocols.md`
|
|
74
|
+
- Context management, ID generation, and background tasks: `references/context-id-background.md`
|
|
75
|
+
- Provider internals and adapters: `references/providers-and-adapters.md`
|
|
76
|
+
- Prompt-injection and validation safety: `references/security-and-validators.md`
|
|
77
|
+
- CLI commands and generated project files: `references/cli-commands.md`
|
|
78
|
+
- `agentflow.json` and dependency loading: `references/api-configuration.md`
|
|
79
|
+
- API auth and authorization: `references/auth-and-authorization.md`
|
|
80
|
+
- API environment, settings, and middleware: `references/api-settings-and-middleware.md`
|
|
81
|
+
- REST routes and error behavior: `references/rest-api-and-errors.md`
|
|
82
|
+
- API Snowflake IDs and thread naming: `references/id-and-thread-name-generators.md`
|
|
83
|
+
- TypeScript auth helpers and structured errors: `references/client-auth-and-errors.md`
|
|
84
|
+
- TypeScript messages, invoke, and stream details: `references/client-messages-invoke-stream.md`
|
|
85
|
+
- TypeScript thread, memory, and file APIs: `references/client-threads-memory-files.md`
|
|
86
|
+
3. Prefer existing Agentflow abstractions over new custom wiring:
|
|
87
|
+
- Build workflows with `StateGraph`, `Agent`, `ToolNode`, `AgentState`, and `Message`.
|
|
88
|
+
- Persist conversation state with checkpointers; use stores only for cross-thread memory.
|
|
89
|
+
- Put business services in `InjectQ` instead of global variables.
|
|
90
|
+
- Keep API/CLI graph modules storage-agnostic and wire dependencies through `agentflow.json`.
|
|
91
|
+
4. Verify against source when implementation details matter. Public names and expected behavior should match `agentflow-docs/docs`; source under `agentflow/`, `agentflow-api/`, and `agentflow-client/src/` explains how that behavior is implemented.
|
|
92
|
+
|
|
93
|
+
## Local Conventions
|
|
94
|
+
|
|
95
|
+
- A compiled graph is normally loaded once by the API server and reused per request.
|
|
96
|
+
- Public package naming matters: use `10xscale-agentflow`, `10xscale-agentflow-cli`, and `@10xscale/agentflow-client` in user-facing docs and examples, not repository folder names.
|
|
97
|
+
- Every persisted interaction should include `config.thread_id`.
|
|
98
|
+
- Tools need docstrings and type annotations so model-facing schemas are useful.
|
|
99
|
+
- Injectable tool and node parameters such as `state`, `config`, and `tool_call_id` are hidden from the model schema.
|
|
100
|
+
- For production, avoid process-local storage for shared state; use durable checkpointer/store backends.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Agents and Tools
|
|
2
|
+
|
|
3
|
+
Use this when adding model behavior, tools, tool routing, provider options, retries, fallbacks, memory tools, or skills to an agent.
|
|
4
|
+
|
|
5
|
+
## Agent
|
|
6
|
+
|
|
7
|
+
`Agent` is a graph node that calls an LLM provider and appends the response to state. It supports OpenAI and Google provider flows behind a unified interface. Provider can be explicit (`"openai"` or `"google"`) or inferred from the model/config in existing code paths.
|
|
8
|
+
|
|
9
|
+
Common constructor concerns:
|
|
10
|
+
|
|
11
|
+
- `model`: model name.
|
|
12
|
+
- `provider`: provider name when auto-detection is not enough.
|
|
13
|
+
- `output_type`: `"text"`, `"image"`, `"video"`, or `"audio"`.
|
|
14
|
+
- `system_prompt`: string/list message instructions; supports `{state_field}` interpolation.
|
|
15
|
+
- `tool_node`: `ToolNode` instance or a graph node name string.
|
|
16
|
+
- `trim_context`: trims messages before model calls and writes summaries to `context_summary`.
|
|
17
|
+
- `reasoning_config`: effort/budget/provider reasoning options.
|
|
18
|
+
- `retry_config` and `fallback_models`: retry and cross-provider fallback behavior.
|
|
19
|
+
- `multimodal_config`: image/document/audio/video handling.
|
|
20
|
+
- `memory`: `MemoryConfig` that wires memory tools onto the tool node.
|
|
21
|
+
- `skills`: `SkillConfig` that discovers and exposes skills through the tool node.
|
|
22
|
+
- Extra kwargs such as `temperature`, `max_tokens`, and `base_url`.
|
|
23
|
+
|
|
24
|
+
## ToolNode
|
|
25
|
+
|
|
26
|
+
`ToolNode` registers and executes callable tools requested by the model. It supports local Python callables, MCP clients, Composio/LangChain style tools where supported by the implementation, and dynamically added tools.
|
|
27
|
+
|
|
28
|
+
For client-executed tools registered through `@10xscale/agentflow-client`, read `remote-tools.md`.
|
|
29
|
+
|
|
30
|
+
Tool authoring rules:
|
|
31
|
+
|
|
32
|
+
- Provide useful docstrings; they become model-facing descriptions.
|
|
33
|
+
- Provide type annotations; they become the parameter schema.
|
|
34
|
+
- Return plain values for normal tool results.
|
|
35
|
+
- Return `ToolResult` when a tool also needs to update state fields.
|
|
36
|
+
- Keep model-visible parameters separate from injected parameters.
|
|
37
|
+
|
|
38
|
+
Injected parameters are hidden from the model schema:
|
|
39
|
+
|
|
40
|
+
- `state`: current `AgentState` or subclass.
|
|
41
|
+
- `config`: execution config including `thread_id`, `user_id`, and `run_id`.
|
|
42
|
+
- `tool_call_id`: current model tool call ID.
|
|
43
|
+
|
|
44
|
+
## ReAct Loop
|
|
45
|
+
|
|
46
|
+
The standard tool-using graph loops from agent to tools and back:
|
|
47
|
+
|
|
48
|
+
1. `Agent` returns an assistant message.
|
|
49
|
+
2. Route to `ToolNode` when the last assistant message has `tools_calls`.
|
|
50
|
+
3. `ToolNode` appends a tool result message.
|
|
51
|
+
4. Route back to `Agent` so the model can produce a final answer.
|
|
52
|
+
5. End when there are no more tool calls.
|
|
53
|
+
|
|
54
|
+
## `@tool`
|
|
55
|
+
|
|
56
|
+
Use `agentflow.utils.tool` to add metadata such as name, description, tags, provider, capabilities, and arbitrary metadata. The decorator enriches the schema; it does not change injected parameter behavior.
|
|
57
|
+
|
|
58
|
+
## Source Map
|
|
59
|
+
|
|
60
|
+
- Agent implementation: `agentflow/agentflow/core/graph/agent.py`
|
|
61
|
+
- Tool node and graph exports: `agentflow/agentflow/core/graph`
|
|
62
|
+
- Tool result: `agentflow/agentflow/core/state/tool_result.py`
|
|
63
|
+
- Tool decorator: `agentflow/agentflow/utils/decorators.py`
|
|
64
|
+
- Skill integration: `agentflow/agentflow/core/skills`
|
|
65
|
+
- Prebuilt tools: `agentflow/agentflow/prebuilt/tools`
|