Skip to content

Releases: lucaGazzola/forgeo

v1.12.1

Choose a tag to compare

@github-actions github-actions released this 08 Sep 22:03

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.fields field mapping (GitHub/GitLab issues have no custom fields).

v0.12.0

Choose a tag to compare

@github-actions github-actions released this 03 Sep 12:07

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

Choose a tag to compare

@github-actions github-actions released this 31 Aug 08:09

Added

  • REVIEW status with feature-branch workflow (review_mode: branch). When enabled, a successful agent run no longer commits directly to main as COMPLETED: the engine creates a feature branch forgeo/review/<TASK_ID> (via review_branch_prefix, default forgeo/review/), commits there, pushes, and marks the task REVIEW. Tasks in REVIEW block dependants (like BLOCKED/FAILED) while independent tasks keep running.
  • Per-task review_required override (bool | null): true forces branch+REVIEW, false forces direct COMPLETED, null inherits review_mode. Editable via PATCH /api/instances/<name>/tasks/<id> and persisted across all providers (file/http body, hidden <!-- forgeo: {...} --> block on GitHub/GitLab, Jira issue property review_branch/review_commit_sha).
  • Engine-managed review_branch and review_commit_sha on Task (set on REVIEW, cleared on leave), carried through document stores (DocumentBacklogStore.set_review/complete_review/request_changes) and issue stores via forgeo-review label (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 → COMPLETED after manual merge) and Request changes (POST …/request-changes → OPEN for rework). Issue providers also show external_url/board links for the branch.
  • Generic webhook now supports review event (WEBHOOK_EVENTS += "review", notify_webhook_events validation), sent by Forgeo._run_task on the REVIEW transition via GitManager.create_review_branch/a_create_review_branch and _commit_on_review_branch (creates/resets branch, commits, pushes, switches back to branch and hard-resets main).
  • HttpBacklog/JSONBacklog/IssueBacklogBase now expose set_review/complete_review/request_changes and central dashboard routes POST /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_counter unify Jira/GitHub/GitLab handling.
  • config/forgeo.yaml and docs/configuration.md document review_mode and review_branch_prefix; mkdocs.yml site_description updated.

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.md rewritten for scannability (tables, endpoint summary, concise curl examples).
  • docs/backlog.md, docs/configuration.md, docs/web-console-api.md, and README document the new REVIEW workflow, REVIEW task lifecycle, and new review-related API fields.
  • Internal maintainability refactor: backlog.py helpers _require_string/_require_string_list/_status_by_id/_set_agent_response/_blocked_notice/_blocker_sections/_render_block, forgeo.py split of blocker/commit logic, models.py _IssueFieldMappingBase/_IssueBacklogConfigBase/_PatAuthBase/_IssueWorkflowBase/_RepoBacklogConfigBase extraction, IssueBacklogBase shared _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_branch plus async wrappers, central.py _github_web_base exact-host rewrite and _external_board_url/_external_issue_url helpers, config.py _maybe_resolve, validate.py/daemon.py/runs.py/paths.py/io.py/web_common.py/setup.py lint-driven cleanups.

Fixed

  • ruff/mypy compliance across the review branch (BLE001/S110/F541 suppressions in setup.py, type narrowing in Forgeo, src/forgeo/backlog.py:21, etc.); pytest green including new REVIEW column/counts and delete tests.

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 24 Aug 10:26

Added

  • forgeo init now asks for backlog provider (file/github/gitlab/jira/http). For github it auto-detects owner/repo from git remote origin, prompts for token_env (GITHUB_TOKEN) and can persist a pasted classic PAT (ghp_..., scope repo) to ~/.config/forgeo/github_token_env.sh (600, wired to ~/.bashrc). Same for gitlab (GITLAB_TOKEN, base URL) and jira/http. The wizard writes backlog: https://api.github.com, backlog_provider: github, github: {repo, auth: {token_env}} and state_dir: .forgeo automatically.
  • Web console now treats jira/github/gitlab as a read-mostly mirror instead of a replacement: the home page cards show Open in Jira/GitHub/GitLab ↗ (via external_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_label on GET /api/instances and GET /api/instances/<name>/status, and external_url per task on GET /api/instances/<name>/tasks (+ single-task) for issue providers. Covers https://api.github.com → https://github.com and https://…/api/v3 → web base mapping for GitHub Enterprise, and https://jira…/issues/?jql= / https://gitlab…/{repo}/-/issues board links.

Fixed

  • GitHub provider now encodes owner/repo as two path segments (quote per segment, keeping /) instead of quote(repo, safe='') which produced owner%2Frepo and 404 on every GET /repos/{owner%2Frepo}/issues.

Changed

  • README, docs/backlog.md, docs/getting-started.md and docs/web-console-api.md document the mirror vs editor split and the new external_* API fields.
  • src/forgeo/central.py deduplicates provider metadata via _backlog_meta() and centralises GitHub web-base handling; instance-card is now a div[role=link] to allow nested external links without invalid HTML.
  • README, docs/getting-started.md and docs/cli-reference.md document the new backlog-provider step in forgeo init and the GITHUB_TOKEN PAT setup (https://github.com/settings/tokens/new, scope repo).

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 23 Aug 09:33

Added

  • GitHub Issues and GitLab Issues task providers. Set backlog_provider: github
    or gitlab and point backlog: at the API base URL
    (https://api.github.com or https://github.example.com/api/v3 for
    Enterprise; https://gitlab.com or a self-hosted root for GitLab). Issue
    numbers/iids become Forgeo task ids, open/opened vs closed maps to
    OPEN/COMPLETED, and forgeo-running/forgeo-blocked/forgeo-failed
    labels (configurable via label_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.
  • github and gitlab config blocks: repo (owner/repo or project path/id),
    token_env (PAT from an environment variable, never stored in the file),
    label_prefix/property_key, pagination, timeouts, stale-claim recovery
    via claim_timeout_seconds, and optional workflow/field mappings mirroring
    the Jira provider.
  • Shared issue-provider helpers extracted to backlog_issue_base and a new
    DocumentBacklogStore / IssueBacklogBase split in backlog.py,
    unifying claim, label, and engine-state handling across Jira, GitHub, and
    GitLab. forgeo validate now checks any remote backlog with a
    provider-specific message, and config/forgeo.yaml, the README, and the
    backlog/configuration docs list and document all five providers
    (file, http, jira, github, gitlab).

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 21 Aug 13:38

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

Choose a tag to compare

@github-actions github-actions released this 19 Aug 17:43

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_lines config key: how many agent output lines the task's
    agent_response keeps on a status transition. Unbounded by default; 0
    disables persisting agent output on the task.

v0.7.2

Choose a tag to compare

@github-actions github-actions released this 17 Aug 22:24

Added

  • no_changes_retry_max config key: a task whose agent exits 0 without
    producing any code changes is re-run immediately, in the same cycle, up to
    that many extra times before it is marked BLOCKED for human review.

Changed

  • A silent no-change SUCCESS (agent exits 0 with an unchanged working tree)
    now marks the task BLOCKED instead of FAILED: 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 with no_changes_exit_code to complete the task.

v0.7.1

Choose a tag to compare

@github-actions github-actions released this 17 Aug 20:29

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 names AGENTS.md and
    CONTEXT.md explicitly when telling the agent to keep project overview and
    conventions up to date.

Forgeo 0.7.0

Choose a tag to compare

@lucaGazzola lucaGazzola released this 16 Aug 10:02

Added

  • task_context config 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 validate reports 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
    read AGENTS.md (and CONTEXT.md if 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 specific OPEN task by id and
    exits, instead of letting forgeo once pick the oldest one — for triage:
    rerun a FAILED task (after reopening it) or try a risky task now. It
    shares the same per-forgeo lock as the daemon and forgeo once, so it
    never overlaps them; it refuses with a clear error when the task does not
    exist or is not OPEN, and while another daemon/once/run holds the
    lock.