Skip to content

develop - #123

Closed
mumez wants to merge 24 commits into
mainfrom
develop
Closed

mumez wants to merge 24 commits into
mainfrom
develop

Conversation

@mumez

@mumez mumez commented Sep 10, 2026

Copy link
Copy Markdown
Owner

No description provided.

mumez and others added 24 commits August 23, 2026 22:56
Register AbTopicManager for system shutdown to ensure topics are saved
automatically when the image closes, even if the browser window is not
explicitly closed. Added safety checks to prevent creating an empty
manager instance during shutdown.
Introduce a helper method to set the default topic manager and announce
the change, ensuring UI components correctly refresh. Update existing
persistence and test logic to use this method.
* Add openCurrent method to AgenticBrowser class

* Reduce default topic stall threshold to 120 seconds

* Automate stall recovery for agent topics

- Add `stallMonitoringIntervalSeconds` to `AbSettings`
- Implement background stall monitoring in `AbTopicManager`
- Add `resumePrompt` to `AbTopicGoal` to nudge stalled topics
- Decouple topic monitoring and teardown from UI lifecycle

* Update goal stall threshold to 120 seconds

* Fix AbTopicManager startup and default loading

Ensure stalled topic monitoring and package watching are correctly
initialized or cleaned up during system startup and when swapping the
default manager.

* Confirm save on window close in AbBrowserPresenter
* Add timeout handling to orchestration steps

Introduce `onTimeout:` to `AbBaseOrchestrationStep` to allow custom
handling of timeouts instead of raising an exception. Update step
implementations to use `handleTimeout:` for consistent error reporting.

* Refactor orchestration timeout handling

Replace manual exception passing with `signalTimeout` to encapsulate
timeout creation and error handling logic.

* Add timeout handling to AbBaseOrchestration forkRunThen:

* Refactor orchestration steps to support retryable timeouts

Introduce a template method pattern in `AbBaseOrchestrationStep` where
`run` handles `AbOrchestrationStepTimeout` exceptions by invoking an
optional `onTimeout:` block. Add `retry` capability and convenience
methods for configuring wait timeouts across orchestration steps.

* Add AbMockOrchestrationForGroupCompletesAfterRetry test mock

* Improve orchestration step retry and timeout handling

- Reset `lastError` and `stepResult` during retry to ensure clean state.
- Ensure `AbOrchestrationGroupParallelStep` unsubscribes from item
  announcers on completion or timeout using `ensure:`.
- Add `resetForRetry` hooks to orchestration steps to properly clear
  transient state.
Add documentation for `runOnTimeout:`, `forkRunThen:onTimeout:`, and
per-step `onTimeout:` handlers to prevent debugger invocation on
orchestration timeouts.
Require the use of `forkRunThen:onTimeout:` for all orchestration
scripts
to ensure background processes handle timeouts gracefully. Add guidance
on monitoring and recovery for stalled steps.
Ensure all items in an orchestration group implement resetForRerun by
adding the method to mock classes and removing the conditional check in
AbOrchestrationGroupStep.
Ensure `waitTimeoutSeconds:` only affects the individual step by using a
private copy of `AbSettings` instead of mutating the shared
orchestration settings.
Introduce AbTopicGoalChanged announcement to propagate goal updates to
connected clients. Update AbTopicGoal and AbTopic to trigger this
announcement when descriptions are modified, and ensure the Web UI
broadcasts the event.
Add support for positional arguments to specify output directory and
generate-only mode, and update documentation to reflect these changes.
Add /workingDirs/list to enumerate agentic-browser subfolders (excluding
reserved topic-template/screenshots) with timestamps, and extend
/topics/create with optional workingDir + isNewFolder body keys so a
caller can reuse an existing folder or require a brand-new one, with
path-traversal and reserved-name validation. Enables the web-ui to let
users pick or create a Topic's working directory (kanban issue
1789021772221).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
* Add workingDir folder selection to Ripple API topic creation

Add /workingDirs/list to enumerate agentic-browser subfolders (excluding
reserved topic-template/screenshots) with timestamps, and extend
/topics/create with optional workingDir + isNewFolder body keys so a
caller can reuse an existing folder or require a brand-new one, with
path-traversal and reserved-name validation. Enables the web-ui to let
users pick or create a Topic's working directory (kanban issue
1789021772221).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Address review: fix root-mismatch, reject empty/dot names, dedupe reserved names

- Route /topics/create's workingDir resolution through the same overridable
  workingDirsRootDirectory used by /workingDirs/list (was hardcoded to
  AbSettings defaultAgenticBrowserRootDirectory), so tests can isolate
  filesystem effects and both endpoints agree on the root.
- Reject empty/whitespace-only and "." workingDir names, which previously
  collapsed to the agentic-browser root itself and would have handed a
  topic the entire root (containing every other topic's folder) as its
  working directory.
- Derive the reserved folder name list from AbTopicTemplateDirectory and
  AbScreenshotAttachment (each now exposes reservedFolderName) instead of
  a hardcoded literal array, so a future rename can't silently drift.
- Rename newTopicFrom:workingDirPath: to createTopicFrom:workingDirPath:
  to name its side effects (addTopic:, directory creation) honestly.
- Wrap the three create-path tests that exercise workingDir in
  withTempWorkingDirsRoot:, and add regression tests for empty/"." names.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Use trimBoth instead of deprecated String>>trimmed

trimmed is deprecated in Pharo 14 in favor of trimBoth (pharo-project/pharo#18307).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Flatten path-separator checks in validateWorkingDirName: with anySatisfy:

Reduces nesting by replacing the chained includesSubstring: or: checks
for '..', '/', '\' with a single anySatisfy: over the literal array.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Document /workingDirs/list and /topics/create workingDir/isNewFolder

Adds the new /workingDirs/list request endpoint, documents the optional
workingDir/isNewFolder body keys on /topics/create, and adds error codes
10009/10010 to the reference.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Rename working directory API fields

Refactor `workingDir` to `workingDirectory`, `isNewFolder` to
`checkExistingDirectory`, and `/workingDirs/list` to
`/workingDirectories/list` for consistency and clarity.

* Recategorize error signaling methods in AbTopicManagerRipple

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
@mumez mumez closed this Sep 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant