Repository navigation
Releases: lucaGazzola/forgeo
Release list
v1.12.1
Fixed
- GitHub/GitLab backlogs preserve per-task customization when a task is created.
- OAuth issue-backlog login supports browser URLs, callback ports, and config-relative tokens.
Removed
- Unused
github.fields/gitlab.fieldsfield mapping (GitHub/GitLab issues have no custom fields).
v0.12.0
Added
- Browser-based OAuth login for GitHub, GitLab, and Jira, with cached tokens and setup guidance.
Fixed
- Stabilized the CI lint configuration.
v0.11.0
Added
- REVIEW status with feature-branch workflow (
review_mode: branch). When enabled, a successful agent run no longer commits directly tomainasCOMPLETED: the engine creates a feature branchforgeo/review/<TASK_ID>(viareview_branch_prefix, defaultforgeo/review/), commits there, pushes, and marks the taskREVIEW. Tasks inREVIEWblock dependants (likeBLOCKED/FAILED) while independent tasks keep running. - Per-task
review_requiredoverride (bool | null):trueforces branch+REVIEW,falseforces directCOMPLETED,nullinheritsreview_mode. Editable viaPATCH /api/instances/<name>/tasks/<id>and persisted across all providers (file/http body, hidden<!-- forgeo: {...} -->block on GitHub/GitLab, Jira issue propertyreview_branch/review_commit_sha). - Engine-managed
review_branchandreview_commit_shaonTask(set onREVIEW, cleared on leave), carried through document stores (DocumentBacklogStore.set_review/complete_review/request_changes) and issue stores viaforgeo-reviewlabel (forgeo_labels()) plus engine state. - Web console: dedicated REVIEW kanban column, review-branch display on cards/modals, and human-in-the-loop actions
Complete(POST …/complete-review→COMPLETEDafter manual merge) andRequest changes(POST …/request-changes→OPENfor rework). Issue providers also showexternal_url/board links for the branch. - Generic webhook now supports
reviewevent (WEBHOOK_EVENTS += "review",notify_webhook_eventsvalidation), sent byForgeo._run_taskon theREVIEWtransition viaGitManager.create_review_branch/a_create_review_branchand_commit_on_review_branch(creates/resets branch, commits, pushes, switches back tobranchand hard-resetsmain). HttpBacklog/JSONBacklog/IssueBacklogBasenow exposeset_review/complete_review/request_changesand central dashboard routesPOST /api/instances/<name>/tasks/<id>/{complete-review,request-changes}. Shared helpers_issue_provider_base,_github_repo_root,_gitlab_issues_root,forgeo_labels,extract_issue_number/labels,bump_state_counterunify Jira/GitHub/GitLab handling.config/forgeo.yamlanddocs/configuration.mddocumentreview_modeandreview_branch_prefix;mkdocs.ymlsite_descriptionupdated.
Changed
- Docs restructured and condensed (~55% shorter) while preserving full coverage:
README,docs/agent-contract.md,docs/backlog.md,docs/cli-reference.md,docs/configuration.md,docs/getting-started.md,docs/index.md,docs/web-console-api.mdrewritten for scannability (tables, endpoint summary, concise curl examples). docs/backlog.md,docs/configuration.md,docs/web-console-api.md, andREADMEdocument the new REVIEW workflow,REVIEWtask lifecycle, and newreview-related API fields.- Internal maintainability refactor:
backlog.pyhelpers_require_string/_require_string_list/_status_by_id/_set_agent_response/_blocked_notice/_blocker_sections/_render_block,forgeo.pysplit of blocker/commit logic,models.py_IssueFieldMappingBase/_IssueBacklogConfigBase/_PatAuthBase/_IssueWorkflowBase/_RepoBacklogConfigBaseextraction,IssueBacklogBaseshared_call/_labels/_get_issue/_search_all/_task_from_issue/list_tasks/get_task/validate_connection/bump_failed_wait/_update_issue_labels,GitManager.ensure_branch/current_branch/create_review_branch/commit_all_on_branchplus async wrappers,central.py_github_web_baseexact-host rewrite and_external_board_url/_external_issue_urlhelpers,config.py_maybe_resolve,validate.py/daemon.py/runs.py/paths.py/io.py/web_common.py/setup.pylint-driven cleanups.
Fixed
ruff/mypycompliance across the review branch (BLE001/S110/F541 suppressions insetup.py, type narrowing inForgeo,src/forgeo/backlog.py:21, etc.);pytestgreen including newREVIEWcolumn/counts and delete tests.
v0.10.0
Added
forgeo initnow asks for backlog provider (file/github/gitlab/jira/http). Forgithubit auto-detectsowner/repofromgit remote origin, prompts fortoken_env(GITHUB_TOKEN) and can persist a pasted classic PAT (ghp_..., scoperepo) to~/.config/forgeo/github_token_env.sh(600, wired to~/.bashrc). Same forgitlab(GITLAB_TOKEN, base URL) andjira/http. The wizard writesbacklog: https://api.github.com,backlog_provider: github,github: {repo, auth: {token_env}}andstate_dir: .forgeoautomatically.- Web console now treats
jira/github/gitlabas a read-mostly mirror instead of a replacement: the home page cards showOpen in Jira/GitHub/GitLab ↗(viaexternal_board_url/external_board_label), the instance page shows a top banner linking to the native board, and each task card/modal links to the native issue (external_url). Document backlogs (file/http) keep the existing primary-editor behaviour. Creating/editing still works through the dashboard, but triage is expected in the native tracker where Forgeo-specific state (BLOCKED/FAILED reasons,agent_response, retry budget) is now surfaced on the mirror. - Central API now exposes
backlog_provider,backlog,backlog_is_issue_provider,external_board_url/external_board_labelonGET /api/instancesandGET /api/instances/<name>/status, andexternal_urlper task onGET /api/instances/<name>/tasks(+ single-task) for issue providers. Covershttps://api.github.com→https://github.comandhttps://…/api/v3→ web base mapping for GitHub Enterprise, andhttps://jira…/issues/?jql=/https://gitlab…/{repo}/-/issuesboard links.
Fixed
- GitHub provider now encodes
owner/repoas two path segments (quoteper segment, keeping/) instead ofquote(repo, safe='')which producedowner%2Frepoand 404 on everyGET /repos/{owner%2Frepo}/issues.
Changed
README,docs/backlog.md,docs/getting-started.mdanddocs/web-console-api.mddocument the mirror vs editor split and the newexternal_*API fields.src/forgeo/central.pydeduplicates provider metadata via_backlog_meta()and centralises GitHub web-base handling;instance-cardis now adiv[role=link]to allow nested external links without invalid HTML.README,docs/getting-started.mdanddocs/cli-reference.mddocument the new backlog-provider step inforgeo initand theGITHUB_TOKENPAT setup (https://github.com/settings/tokens/new, scoperepo).
v0.9.0
Added
- GitHub Issues and GitLab Issues task providers. Set
backlog_provider: github
orgitlaband pointbacklog:at the API base URL
(https://api.github.comorhttps://github.example.com/api/v3for
Enterprise;https://gitlab.comor a self-hosted root for GitLab). Issue
numbers/iids become Forgeo task ids,open/openedvsclosedmaps to
OPEN/COMPLETED, andforgeo-running/forgeo-blocked/forgeo-failed
labels (configurable vialabel_prefix) represent the remaining states.
Engine state — blocker and failure reasons, retry counters, claim time,
dependencies, and bounded agent output — is stored in a hidden
<!-- forgeo: {...} -->block inside the issue body/description, so the
visible text stays human-readable and no custom fields or issue properties
are required. githubandgitlabconfig blocks:repo(owner/repoor project path/id),
token_env(PAT from an environment variable, never stored in the file),
label_prefix/property_key, pagination, timeouts, stale-claim recovery
viaclaim_timeout_seconds, and optional workflow/field mappings mirroring
the Jira provider.- Shared issue-provider helpers extracted to
backlog_issue_baseand a new
DocumentBacklogStore/IssueBacklogBasesplit inbacklog.py,
unifying claim, label, and engine-state handling across Jira, GitHub, and
GitLab.forgeo validatenow checks any remote backlog with a
provider-specific message, andconfig/forgeo.yaml, the README, and the
backlog/configuration docs list and document all five providers
(file,http,jira,github,gitlab).
v0.8.0
Added
- A Jira task provider selected with
backlog_provider: jira, including Jira
Cloud cursor pagination, workflow-based claiming, optional custom-field
mappings, issue-property engine state, stale-claim recovery, and bearer or
basic authentication from environment variables. - A provider-level claim hook so remote task sources can prevent duplicate
agent runs while preserving the existing JSON and HTTP backlog behavior.
v0.7.3
Added
- The agent's stdout/stderr is now persisted on the task as
agent_response
when a task transitions (BLOCKED/FAILED/COMPLETED), shown in the web
console's task modal. A transition that carries no output never wipes a
previously stored response. agent_response_linesconfig key: how many agent output lines the task's
agent_responsekeeps on a status transition. Unbounded by default;0
disables persisting agent output on the task.
v0.7.2
Added
no_changes_retry_maxconfig key: a task whose agent exits0without
producing any code changes is re-run immediately, in the same cycle, up to
that many extra times before it is markedBLOCKEDfor human review.
Changed
- A silent no-change SUCCESS (agent exits
0with an unchanged working tree)
now marks the taskBLOCKEDinstead ofFAILED: the only acceptable
outcome for a run that ends without code changes is a blocked task awaiting
human review. An agent that needs no code change must still opt in
explicitly withno_changes_exit_codeto complete the task.
v0.7.1
Added
- An animated demo GIF in the README, showing Forgeo running a backlog task
end to end, plus an Open Graph social-preview image for the docs site.
Changed
- The default agent prompt (used by
forgeo init) now namesAGENTS.mdand
CONTEXT.mdexplicitly when telling the agent to keep project overview and
conventions up to date.
Forgeo 0.7.0
Added
-
task_contextconfig key: a path to a file (e.g.CONTEXT.md) whose
contents are prepended to every agent instruction — tasks and refactoring
runs alike — before the task description. The agent gets the high-level
project overview instead of only the isolated task; the file is re-read on
every run, so the agent's own updates are picked up on the next cycle. A
missing or unreadable file never fails a cycle: it is logged,forgeo validatereports it as a warning, and the run proceeds with the bare
instruction. -
The default agent prompt (used by
forgeo init) now tells the agent to
readAGENTS.md(andCONTEXT.mdif present) at the start of the session
and to keep them updated when a change materially affects the project
overview. -
forgeo run --task <id>runs exactly one specificOPENtask by id and
exits, instead of lettingforgeo oncepick the oldest one — for triage:
rerun aFAILEDtask (after reopening it) or try a risky task now. It
shares the same per-forgeo lock as the daemon andforgeo once, so it
never overlaps them; it refuses with a clear error when the task does not
exist or is notOPEN, and while another daemon/once/runholds the
lock.