### Background
Input from the input pin is consumed only once, and the default input can always be used. So when you have an input pin overriding the default input, the value will be used only once and the following run will always fall back to the default input. This can mislead the user.
Expected behaviour: the node should NOT RUN, making connected pins only use their connection(s) for sources of data.
### Changes 🏗️
* Make pin connection the mandatory source of input and not falling back to default value.
* Fix the type flakiness on block input & output. Unify the typing for BlockInput & BlockOutput using the right alias to avoid wrong typing.
* Add comment on alias
* automated test on the new behaviour.
### Background
Add formatter & linter command.
Tools: ruff --> isort --> black --> pyright.
### Changes 🏗️
Introduced:
* `poetry run format`
* `poetry run lint`
`poetry run lint` will be executed on CI.
### Background
The main scope of this change is enhancing the system capability (by fixing bug, correcting execution behaviour) to allow for creating a graph with a loop, to allow the use case of block auto-generation agent.
### Changes 🏗️
* Main changes: Add block_autogen.py (block auto-generation agent graph example).
* Refactor on test boilerplate: introduced `util/test` for initiating a server, and waiting graph execution.
* Removing unnecessary db lookup and duplicated codes used for sending execution updates on agent executor.
* Removed redundant code on test and cli code.
* Moved block test execution helper into the main code (so blockinstallerblock can use it).
* Eliminate the need of explicitly add a module into the `AVAILABLE_BLOCKS` list, any block class under the `block` folder will be auto-discovered.
* Few patches on the existing blocks.
1. Add graph versioning functionality:
- Add `version`, `isActive` fields in the `AgentGraph` model
- Add `agentGraphVersion` field in related models
- Amend & add API endpoints for graph versioning (see below)
- Amend & add data layer functions (`autogpt_server.data`) to support new operations & data schema
2. Add graph template functionality:
- Add `isTemplate` fields in the `AgentGraph` model
- Add `GraphMeta` model for template/graph metadata
- Add API endpoints for template management (see below)
- Amend & add data layer functions (`autogpt_server.data`) to support new operations & data schema
3. Enhance graph creation:
- Amended `create_graph` route to handle template-based graph creation
4. Code refactoring:
- Improved import statements
- Enhanced error handling in graph creation
5. Minor improvements:
- Add validator to auto-assign `Graph.id` if not set
## API Changes
New endpoints:
- `GET /templates`: Retrieve all templates (metadata only)
- `POST /templates`: Create a new template
- `PUT /graphs/{graph_id}`: Create a new version of a graph
- `GET /templates/{graph_id}`: Get a specific template
- `PUT /templates/{graph_id}`: Create a new version of a graph template
- `GET /graphs/{graph_id}/versions`: Get all versions of a graph
- `GET /templates/{graph_id}/versions`: Get all versions of a graph template
- `GET /graphs/{graph_id}/versions/{version}`: Get a specific graph version
- `PUT /graphs/{graph_id}/versions/active`: Set active graph version
Modified endpoints:
- `POST /graphs`: Now supports creating graphs directly from templates
- `GET /graphs/{graph_id}`: Add `version` query parameter
- `GET /graphs/{graph_id}/executions`: Add `graph_version` query parameters
## UI changes
- Improve `/build` / `FlowEditor` save mechanism
- Implement updating current agent instead of creating a new agent on every save
- Add check to only save a new version if local graph has been edited
- Add `deepEquals` function to lib/utils.ts
- Add version indicators and selector on `/monitor`

- Add shad/cn `DropdownMenu` component
- Update `AutoGPTServerAPI` client
- Update input/output types with added attributes (see above)
- Add parameter `version` to `getFlow`
- Add parameter `flowVersion?` to `listFlowRunIDs`
- Add endpoint `updateFlow(flowID, FlowUpdateable)`
- Add endpoint `createFlow(fromTemplateID, templateVersion)` (overload)
- Add endpoint `getFlowAllVersions(id)`
- Add endpoint `setFlowActiveVersion(flowID, version)`
### Background
Agent execution should be able to be triggered in a recurring manner.
This PR introduced an ExecutionScheduling service, a process responsible for managing the execution schedule and triggering its execution based on a predefined cron expression.
### Changes 🏗️
* Added `scheduler.py` / `ExecutionScheduler` implementation.
* Added scheduler test.
* Added `AgentExecutionSchedule` table and its logical model & prisma queries.
* Moved `add_execution` from API server to `execution_manager`