Include both openscreen and cloudanalyzer in test summary.
Correctly recount all totals across badge, HTML table, prose, and test summary.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update URL Restrictions section to explicitly state that URLs must
include http:// or https:// scheme. Scheme-less URLs are rejected.
Addresses Copilot review comment at line 12.
- Add module reload mechanism for env var changes
- Update test_malformed_url with proper assertion
- Add tests for scheme-less URLs, uppercase schemes, hostname requirement
- Add test for fdn.example.com (IPv6 ULA pattern fix verification)
- Make all env var dependent tests use monkeypatch
Addresses Copilot review comments:
- Line 117: Added assertion to test_malformed_url
- Line 170: Made tests deterministic with monkeypatch
Instead of returning an error dict, raise ValueError so that
the CLI's @handle_error decorator can handle it consistently.
This ensures error messages are properly formatted in both
normal and JSON output modes, and prevents success messages
from being printed for invalid URLs.
Addresses Copilot review comment at line 30.
Document security considerations for AI agents using browser CLI.
Add section covering:
- URL restrictions (blocked schemes, private network blocking)
- DOM content risks (ARIA label manipulation, hidden elements)
- Environment variables for security configuration
- Session isolation recommendations
Agents reading SKILL.md will be aware of security boundaries
and mitigations when interacting with untrusted websites.
Modify open_page() to validate URLs before navigation via DOMShell.
Calls validate_url() from security.py to block dangerous schemes
and optionally restrict private network access. Returns error dict
if validation fails instead of passing dangerous URLs to browser.
This prevents SSRF attacks via file://, javascript://, and other
dangerous URI schemes.
- Implemented a new CLI wrapper for the Dify workflow DSL, allowing users to create, inspect, validate, edit, export, and layout workflows through a unified command-line interface.
- Added REPL functionality for interactive command execution.
- Created utility functions for backend command resolution and subprocess execution.
- Developed comprehensive test suite covering core functionality and end-to-end scenarios.
- Included installation instructions and usage documentation in SKILL.md.
- Updated registry.json to include the new Dify Workflow entry with installation and usage details.
One-shot commands start a fresh Session each run, so in-memory changes
were silently discarded without an explicit 'document save'. This ports
the same pattern already used in the Shotcut harness (commit 17a30ba):
- Add -s/--save flag to the cli() group
- Register ctx.call_on_close(_auto_save_callback)
- _auto_save_callback saves if session is modified and not in REPL mode
1. Rename pi-extension/ to .pi-extension/ to match Pi auto-discovery
convention. Update root README install instructions to reference
correct path and install.sh workflow instead of non-existent
.pi-extension/extensions/cli-anything/.
2. Move test_skill_generator.py from .pi-extension/cli-anything/tests/
to cli-anything-plugin/tests/ (next to skill_generator.py) so it
runs standalone without fragile parent-navigation fallbacks.
Update install.sh to copy tests during global install.
31/31 pytest tests pass.
Adds .pi-extension directory with full CLI-Anything plugin support:
- 5 slash commands: /cli-anything, /cli-anything:refine,
/cli-anything:test, /cli-anything:validate, /cli-anything:list
- Full HARNESS.md methodology documentation
- Guides for skill generation, PyPI publishing, MCP backend, etc.
- Utility scripts: repl_skin.py, skill_generator.py, setup-cli-anything.sh
- SKILL.md template for AI-discoverable skill definitions
- README.md documenting the extension structure and usage
- Updated root README.md to include Pi as a supported platform
1. Replace all hardcoded /Users/whitenoise-oc/ dev paths in SEACLIP.md
and TEST.md files (seaclip, pm2, chromadb) with generic placeholders
2. Extract shared _EXTRA_PATH_DIRS constant and _augmented_path() helper
in pm2_backend.py so _find_pm2() and _build_env() use identical logic
3. Open SQLite in read-only mode (file:...?mode=ro) in _query_db()
4. Add trailing newline to registry.json
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove unused imports (load_project, save_project, etc.)
- Use shlex.split() in REPL for proper quoted-path handling
- Pass json_mode to _error() in REPL for consistent JSON errors
- Add --trajectory-reference to inspect web/web-export commands
- Add --heatmap/--trajectory to web-export command
- Validate --history/--history-dir in baseline decision (fail fast)
- Combine --history and --history-dir instead of ignoring one
- Add JSON validation with clear errors in baseline_decision backend
- Add try/except to info version command
- Pass --plot to backend instead of post-hoc dict mutation
CloudAnalyzer is a QA platform for mapping, localization, and
perception point cloud outputs with 32 CLI commands.
Unlike other harnesses, the backend imports CloudAnalyzer's Python
API directly (no subprocess needed). Includes Click CLI with --json
on all commands, project/session management, REPL, SKILL.md, and
unit + E2E tests (14 passed).
One-shot commands start a fresh Session each run, so in-memory changes
were silently discarded without an explicit 'document save'. This ports
the same pattern already used in the Shotcut harness (commit 17a30ba):
- Add -s/--save flag to the cli() group
- Register ctx.call_on_close(_auto_save_callback)
- _auto_save_callback saves if session is modified and not in REPL mode
- Implemented a new CLI wrapper for the Dify workflow DSL, allowing users to create, inspect, validate, edit, export, and layout workflows through a unified command-line interface.
- Added REPL functionality for interactive command execution.
- Created utility functions for backend command resolution and subprocess execution.
- Developed comprehensive test suite covering core functionality and end-to-end scenarios.
- Included installation instructions and usage documentation in SKILL.md.
- Updated registry.json to include the new Dify Workflow entry with installation and usage details.
Must fix:
- Merge conflicts with main resolved
- Remove hardcoded developer path in seaclip_backend.py; require SEACLIP_DB
env var for SQLite queries (raises RuntimeError if unset)
- Switch all three setup.py from find_packages() to
find_namespace_packages(include=["cli_anything.*"])
- Remove global os.environ["PATH"] mutation in pm2_backend.py; use
shutil.which(path=...) with a local variable instead
Should fix:
- Align PM2 SKILL.md format with existing convention (name + description
with >- folding syntax, command group tables)
- Add missing setup.py fields: classifiers, extras_require, package_data,
include_package_data, zip_safe, url, consistent author
All 91 unit tests pass (25 seaclip + 28 pm2 + 38 chromadb).
Keep all new CLI entries (exa, sts2, rms, renderdoc, videocaptioner,
intelwatch, clibrowser, cloudcompare) and incorporate the godot entry
added on main.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1. Fix project_save --output parameter: add Click parameter name
mapping so --output correctly maps to output_path
2. Use functools.wraps in handle_error decorator to preserve
__click_params__ and other attributes
3. Fix test count mismatch: OPENSCREEN.md now shows 101 (78+23),
TEST.md table updated with missing test row and correct numbering
4. Replace raw input() with skin.sub_input() in REPL add flows
(zoom, speed, trim, crop) to use prompt_toolkit when available
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1. Rename pi-extension/ to .pi-extension/ to match Pi auto-discovery
convention. Update root README install instructions to reference
correct path and install.sh workflow instead of non-existent
.pi-extension/extensions/cli-anything/.
2. Move test_skill_generator.py from .pi-extension/cli-anything/tests/
to cli-anything-plugin/tests/ (next to skill_generator.py) so it
runs standalone without fragile parent-navigation fallbacks.
Update install.sh to copy tests during global install.
31/31 pytest tests pass.
- Reformat PR body to match repo template
- Add Exa to root README (category table, software grid, directory tree)
- Add comment explaining different build_contents_param() usage in search vs get_contents
- Document that server status consumes 1 search credit
- Clarify auto=neural in --type help text
- Remove stale noqa: SIM114 comment
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix REPL to use skin.get_input() instead of skin.prompt() so it
actually reads user input
- Use shlex.split() instead of str.split() to preserve quoted arguments
- Remove unnecessary ImportError guard on ReplSkin (prompt-toolkit is
optional within ReplSkin itself)
- Deduplicate get_contents() by reusing build_contents_param()
- Use shutil.which() instead of shelling out to `which` in tests
- Fix get_client() docstring to match actual RuntimeError raise
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
cli.main() re-invokes the root group callback on every dispatch, which
already resets _json_output = use_json before any output runs — so the
reset in finally was a no-op.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>