rf-agentskills 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. rf_agentskills-0.4.0/.gitignore +56 -0
  2. rf_agentskills-0.4.0/PKG-INFO +75 -0
  3. rf_agentskills-0.4.0/README.md +44 -0
  4. rf_agentskills-0.4.0/hatch_build.py +96 -0
  5. rf_agentskills-0.4.0/pyproject.toml +104 -0
  6. rf_agentskills-0.4.0/src/rf_agentskills/__init__.py +15 -0
  7. rf_agentskills-0.4.0/src/rf_agentskills/_assets/.claude-plugin/plugin.json +25 -0
  8. rf_agentskills-0.4.0/src/rf_agentskills/_assets/.mcp.json +11 -0
  9. rf_agentskills-0.4.0/src/rf_agentskills/_assets/agents/rf-debug-expert.md +130 -0
  10. rf_agentskills-0.4.0/src/rf_agentskills/_assets/agents/rf-keyword-consultant.md +137 -0
  11. rf_agentskills-0.4.0/src/rf_agentskills/_assets/agents/rf-migration-guide.md +126 -0
  12. rf_agentskills-0.4.0/src/rf_agentskills/_assets/agents/rf-test-architect.md +117 -0
  13. rf_agentskills-0.4.0/src/rf_agentskills/_assets/hooks/README.md +145 -0
  14. rf_agentskills-0.4.0/src/rf_agentskills/_assets/hooks/hooks.json +48 -0
  15. rf_agentskills-0.4.0/src/rf_agentskills/_assets/scripts/check_rf_environment.sh +101 -0
  16. rf_agentskills-0.4.0/src/rf_agentskills/_assets/scripts/keyword_builder.py +219 -0
  17. rf_agentskills-0.4.0/src/rf_agentskills/_assets/scripts/maybe_inject_rf_context.sh +86 -0
  18. rf_agentskills-0.4.0/src/rf_agentskills/_assets/scripts/maybe_remind_robot_tests.sh +66 -0
  19. rf_agentskills-0.4.0/src/rf_agentskills/_assets/scripts/resource_architect.py +148 -0
  20. rf_agentskills-0.4.0/src/rf_agentskills/_assets/scripts/rf_libdoc.py +322 -0
  21. rf_agentskills-0.4.0/src/rf_agentskills/_assets/scripts/rf_results.py +418 -0
  22. rf_agentskills-0.4.0/src/rf_agentskills/_assets/scripts/testcase_builder.py +125 -0
  23. rf_agentskills-0.4.0/src/rf_agentskills/_assets/scripts/validate_robot.sh +87 -0
  24. rf_agentskills-0.4.0/src/rf_agentskills/_assets/servers/rf-tools-server.py +697 -0
  25. rf_agentskills-0.4.0/src/rf_agentskills/_assets/settings.json +3 -0
  26. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/appium/SKILL.md +341 -0
  27. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/appium/assets/examples/android-basic.robot +147 -0
  28. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/appium/assets/examples/device-actions.robot +286 -0
  29. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/appium/assets/examples/gestures-example.robot +283 -0
  30. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/appium/assets/examples/hybrid-app.robot +234 -0
  31. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/appium/assets/examples/ios-basic.robot +194 -0
  32. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/appium/references/android-specific.md +432 -0
  33. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/appium/references/device-capabilities.md +405 -0
  34. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/appium/references/gestures-touch.md +386 -0
  35. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/appium/references/ios-specific.md +365 -0
  36. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/appium/references/keywords-reference.md +362 -0
  37. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/appium/references/locators-mobile.md +253 -0
  38. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/appium/references/troubleshooting.md +393 -0
  39. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/browser/SKILL.md +309 -0
  40. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/browser/assets/examples/authentication-flow.robot +221 -0
  41. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/browser/assets/examples/basic-web-test.robot +91 -0
  42. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/browser/assets/examples/file-operations.robot +244 -0
  43. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/browser/assets/examples/form-handling.robot +163 -0
  44. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/browser/assets/examples/iframe-shadow-dom.robot +178 -0
  45. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/browser/references/assertion-engine.md +285 -0
  46. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/browser/references/authentication-storage.md +398 -0
  47. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/browser/references/browser-context-page.md +362 -0
  48. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/browser/references/downloads-uploads.md +346 -0
  49. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/browser/references/iframes-shadow-dom.md +293 -0
  50. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/browser/references/keywords-reference.md +606 -0
  51. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/browser/references/locators.md +263 -0
  52. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/browser/references/tabs-windows.md +378 -0
  53. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/browser/references/troubleshooting.md +462 -0
  54. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/keyword-builder/SKILL.md +75 -0
  55. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/libdoc-explain/SKILL.md +34 -0
  56. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/libdoc-search/SKILL.md +29 -0
  57. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/requests/SKILL.md +260 -0
  58. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/requests/assets/examples/authentication-patterns.robot +228 -0
  59. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/requests/assets/examples/basic-crud.robot +141 -0
  60. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/requests/assets/examples/file-upload.robot +234 -0
  61. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/requests/assets/examples/session-handling.robot +242 -0
  62. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/requests/references/authentication.md +338 -0
  63. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/requests/references/http-methods.md +246 -0
  64. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/requests/references/keywords-reference.md +343 -0
  65. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/requests/references/request-options.md +288 -0
  66. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/requests/references/response-validation.md +318 -0
  67. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/requests/references/troubleshooting.md +408 -0
  68. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/resource-architect/SKILL.md +46 -0
  69. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/restinstance/SKILL.md +379 -0
  70. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/restinstance/assets/examples/basic-rest.robot +182 -0
  71. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/restinstance/assets/examples/json-manipulation.robot +281 -0
  72. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/restinstance/assets/examples/oauth-flow.robot +274 -0
  73. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/restinstance/assets/examples/schema-validation.robot +234 -0
  74. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/restinstance/references/authentication.md +357 -0
  75. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/restinstance/references/json-handling.md +361 -0
  76. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/restinstance/references/keywords-reference.md +524 -0
  77. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/restinstance/references/schema-validation.md +517 -0
  78. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/restinstance/references/troubleshooting.md +466 -0
  79. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/selenium/SKILL.md +393 -0
  80. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/selenium/assets/examples/basic-web-test.robot +69 -0
  81. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/selenium/assets/examples/form-handling.robot +162 -0
  82. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/selenium/assets/examples/multi-window.robot +259 -0
  83. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/selenium/assets/examples/selenium-grid.robot +216 -0
  84. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/selenium/assets/examples/wait-patterns.robot +229 -0
  85. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/selenium/references/frames-windows.md +434 -0
  86. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/selenium/references/javascript-execution.md +427 -0
  87. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/selenium/references/keywords-reference.md +604 -0
  88. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/selenium/references/locators.md +345 -0
  89. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/selenium/references/screenshots-logs.md +353 -0
  90. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/selenium/references/troubleshooting.md +380 -0
  91. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/selenium/references/waiting-strategies.md +355 -0
  92. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/selenium/references/webdriver-setup.md +430 -0
  93. rf_agentskills-0.4.0/src/rf_agentskills/_assets/skills/testcase-builder/SKILL.md +80 -0
  94. rf_agentskills-0.4.0/src/rf_agentskills/_assets.py +62 -0
  95. rf_agentskills-0.4.0/src/rf_agentskills/adapters/__init__.py +53 -0
  96. rf_agentskills-0.4.0/src/rf_agentskills/adapters/_base.py +172 -0
  97. rf_agentskills-0.4.0/src/rf_agentskills/adapters/claude_code.py +288 -0
  98. rf_agentskills-0.4.0/src/rf_agentskills/adapters/claude_desktop.py +199 -0
  99. rf_agentskills-0.4.0/src/rf_agentskills/adapters/codex.py +319 -0
  100. rf_agentskills-0.4.0/src/rf_agentskills/adapters/copilot.py +174 -0
  101. rf_agentskills-0.4.0/src/rf_agentskills/adapters/cursor.py +278 -0
  102. rf_agentskills-0.4.0/src/rf_agentskills/adapters/goose.py +336 -0
  103. rf_agentskills-0.4.0/src/rf_agentskills/adapters/opencode.py +232 -0
  104. rf_agentskills-0.4.0/src/rf_agentskills/cli.py +498 -0
  105. rf_agentskills-0.4.0/src/rf_agentskills/manifest.py +244 -0
  106. rf_agentskills-0.4.0/src/rf_agentskills/transforms.py +531 -0
@@ -0,0 +1,56 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ dist/
6
+ build/
7
+
8
+ # Virtual environments
9
+ .venv/
10
+ venv/
11
+ env/
12
+
13
+ # Local secrets (do NOT commit) — use .env.example as template
14
+ .env
15
+
16
+ # Eval harness working state (generated, not committed)
17
+ eval/runs/
18
+ eval/reports/
19
+ results/
20
+
21
+ # Test output
22
+ .pytest_cache/
23
+ output.xml
24
+ log.html
25
+ report.html
26
+ *.png
27
+
28
+ # IDE
29
+ .idea/
30
+ .vscode/
31
+ *.swp
32
+ *.swo
33
+
34
+ # OS
35
+ .DS_Store
36
+ Thumbs.db
37
+
38
+ # Claude Flow state (local only)
39
+ .claude-flow/
40
+ .swarm/
41
+
42
+ # Cross-agent skill discovery symlinks (local only)
43
+ .codex/
44
+ .github/skills/
45
+
46
+ # VS Code extension build artifacts (generated by npm/vsce)
47
+ vscode-extension/node_modules/
48
+ vscode-extension/out/
49
+ vscode-extension/*.vsix
50
+ vscode-extension/skills/
51
+
52
+ # rf-agentskills installer: _assets/ is regenerated by the hatch build
53
+ # hook at `pip install` time from plugins/rf-agentskills/. Don't commit
54
+ # the duplicate. Developers run `pip install -e installer/` after clone
55
+ # to populate it.
56
+ installer/src/rf_agentskills/_assets/
@@ -0,0 +1,75 @@
1
+ Metadata-Version: 2.4
2
+ Name: rf-agentskills
3
+ Version: 0.4.0
4
+ Summary: Cross-agent installer for Robot Framework agent skills (Claude Code, Copilot, Codex, Cursor, Goose, OpenCode, Claude Desktop)
5
+ Project-URL: Homepage, https://github.com/manykarim/robotframework-agentskills
6
+ Project-URL: Repository, https://github.com/manykarim/robotframework-agentskills
7
+ Project-URL: Issues, https://github.com/manykarim/robotframework-agentskills/issues
8
+ Author-email: Many Kasiriha <many.kasiriha@gmail.com>
9
+ License: Apache-2.0
10
+ Keywords: agent-skills,claude-code,cursor,github-copilot,goose,installer,openai-codex,opencode,robotframework
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Framework :: Robot Framework
13
+ Classifier: License :: OSI Approved :: Apache Software License
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Software Development :: Testing
21
+ Requires-Python: >=3.10
22
+ Requires-Dist: pyyaml>=6.0
23
+ Requires-Dist: rich>=13.7
24
+ Requires-Dist: tomli-w>=1.0
25
+ Requires-Dist: tomli>=2.0; python_version < '3.11'
26
+ Provides-Extra: dev
27
+ Requires-Dist: pytest-cov>=5; extra == 'dev'
28
+ Requires-Dist: pytest>=8; extra == 'dev'
29
+ Requires-Dist: ruff>=0.5; extra == 'dev'
30
+ Description-Content-Type: text/markdown
31
+
32
+ # rf-agentskills
33
+
34
+ Cross-agent installer for Robot Framework agent skills. Ships the
35
+ `plugins/rf-agentskills/` bundle (11 skills, 4 subagents, hooks,
36
+ helper scripts, MCP server) and writes it into the install paths of
37
+ seven coding agents:
38
+
39
+ | Agent | Status |
40
+ |---|---|
41
+ | Claude Code (CLI) | full native — skills, agents, hooks, MCP |
42
+ | GitHub Copilot (VS Code 1.108+) | full native (preview flags req'd) |
43
+ | OpenAI Codex | skills + MCP native; subagents transformed; hooks experimental |
44
+ | Cursor 1.7+ | skills→rules, hooks adapted, native MCP |
45
+ | OpenCode | subagents + MCP native; skills→commands; hooks deferred |
46
+ | Project Goose | MCP + persona text only |
47
+ | Claude Desktop | MCP only |
48
+
49
+ ## Install
50
+
51
+ ```bash
52
+ pipx install rf-agentskills
53
+ rf-agentskills install --agent claude-code
54
+ ```
55
+
56
+ Or for every detected agent in one shot:
57
+
58
+ ```bash
59
+ rf-agentskills install --all
60
+ ```
61
+
62
+ ## Subcommands
63
+
64
+ ```
65
+ rf-agentskills install --agent <name> [--scope user|project] [--prefix DIR]
66
+ [--what skills,agents,hooks,mcp] [--dry-run] [--force]
67
+ rf-agentskills uninstall --agent <name>
68
+ rf-agentskills list # what's installed where, per the manifest
69
+ rf-agentskills targets # which agents are detected on this machine
70
+ rf-agentskills doctor # what works, what doesn't, what needs user action
71
+ rf-agentskills version
72
+ ```
73
+
74
+ See `docs/installer/proposal.md` (in the parent repo) for the full
75
+ design, compatibility matrix, and per-agent install recipes.
@@ -0,0 +1,44 @@
1
+ # rf-agentskills
2
+
3
+ Cross-agent installer for Robot Framework agent skills. Ships the
4
+ `plugins/rf-agentskills/` bundle (11 skills, 4 subagents, hooks,
5
+ helper scripts, MCP server) and writes it into the install paths of
6
+ seven coding agents:
7
+
8
+ | Agent | Status |
9
+ |---|---|
10
+ | Claude Code (CLI) | full native — skills, agents, hooks, MCP |
11
+ | GitHub Copilot (VS Code 1.108+) | full native (preview flags req'd) |
12
+ | OpenAI Codex | skills + MCP native; subagents transformed; hooks experimental |
13
+ | Cursor 1.7+ | skills→rules, hooks adapted, native MCP |
14
+ | OpenCode | subagents + MCP native; skills→commands; hooks deferred |
15
+ | Project Goose | MCP + persona text only |
16
+ | Claude Desktop | MCP only |
17
+
18
+ ## Install
19
+
20
+ ```bash
21
+ pipx install rf-agentskills
22
+ rf-agentskills install --agent claude-code
23
+ ```
24
+
25
+ Or for every detected agent in one shot:
26
+
27
+ ```bash
28
+ rf-agentskills install --all
29
+ ```
30
+
31
+ ## Subcommands
32
+
33
+ ```
34
+ rf-agentskills install --agent <name> [--scope user|project] [--prefix DIR]
35
+ [--what skills,agents,hooks,mcp] [--dry-run] [--force]
36
+ rf-agentskills uninstall --agent <name>
37
+ rf-agentskills list # what's installed where, per the manifest
38
+ rf-agentskills targets # which agents are detected on this machine
39
+ rf-agentskills doctor # what works, what doesn't, what needs user action
40
+ rf-agentskills version
41
+ ```
42
+
43
+ See `docs/installer/proposal.md` (in the parent repo) for the full
44
+ design, compatibility matrix, and per-agent install recipes.
@@ -0,0 +1,96 @@
1
+ """Hatch build hook: mirror plugins/rf-agentskills/ → src/rf_agentskills/_assets/.
2
+
3
+ The plugin tree is the source of truth (it's what the Claude Code
4
+ marketplace and the rf-skill-eval harness already use). The installer
5
+ needs the *same* tree shipped inside its Python wheel so importlib can
6
+ locate it at runtime via `files("rf_agentskills").joinpath("_assets")`.
7
+
8
+ Rather than maintaining a duplicate copy in the package source, this
9
+ hook copies the tree at build time. Editable installs (`pip install -e
10
+ installer/`) also fire the hook the first time, populating the assets
11
+ dir for development.
12
+
13
+ Hatch invokes ``initialize`` before the build target runs.
14
+
15
+ Reference: https://hatch.pypa.io/latest/plugins/build-hook/custom/
16
+ """
17
+
18
+ from __future__ import annotations
19
+
20
+ import shutil
21
+ from pathlib import Path
22
+ from typing import Any
23
+
24
+ from hatchling.builders.hooks.plugin.interface import BuildHookInterface
25
+
26
+
27
+ # The path layout assumed:
28
+ # <repo-root>/plugins/rf-agentskills/ ← canonical source
29
+ # <repo-root>/installer/ ← this package; hatch_build.py lives here
30
+ # <repo-root>/installer/src/rf_agentskills/_assets/ ← mirror destination
31
+ #
32
+ # Hatch sets ``self.root`` to the directory containing pyproject.toml,
33
+ # i.e. ``<repo-root>/installer``. The plugin tree therefore sits one
34
+ # level up.
35
+ PLUGIN_REL = Path("..") / "plugins" / "rf-agentskills"
36
+ ASSETS_REL = Path("src") / "rf_agentskills" / "_assets"
37
+
38
+
39
+ class CustomBuildHook(BuildHookInterface): # type: ignore[misc]
40
+ PLUGIN_NAME = "custom"
41
+
42
+ def initialize(self, version: str, build_data: dict[str, Any]) -> None:
43
+ plugin_src = (Path(self.root) / PLUGIN_REL).resolve()
44
+ assets_dst = (Path(self.root) / ASSETS_REL).resolve()
45
+
46
+ # Build flow:
47
+ # 1. sdist build — runs from the repo, finds ../plugins/, copies
48
+ # it into the package's _assets/ tree, and the
49
+ # sdist tarball includes _assets/ as part of
50
+ # the package contents.
51
+ # 2. wheel build — runs from an extracted sdist (no parent
52
+ # `plugins/` available). Here we *skip* the
53
+ # copy; _assets/ is already populated from
54
+ # the sdist contents and is what we want
55
+ # shipped in the wheel.
56
+ if not plugin_src.is_dir():
57
+ if assets_dst.is_dir() and any(assets_dst.rglob("SKILL.md")):
58
+ self.app.display_info(
59
+ f"rf-agentskills: plugin source not present at "
60
+ f"{plugin_src} but _assets/ is already populated "
61
+ f"({_count_files(assets_dst)} files) — assuming "
62
+ f"sdist→wheel build, skipping mirror step"
63
+ )
64
+ return
65
+ raise FileNotFoundError(
66
+ f"plugin source not found at {plugin_src} and no "
67
+ f"populated _assets/ tree at {assets_dst}; cannot build "
68
+ f"rf-agentskills wheel without the bundled assets"
69
+ )
70
+
71
+ # Wipe the previous mirror so removed files don't linger in the
72
+ # wheel. Use ignore_errors=True because on some filesystems the
73
+ # dir might not exist yet.
74
+ if assets_dst.exists():
75
+ shutil.rmtree(assets_dst, ignore_errors=True)
76
+
77
+ shutil.copytree(
78
+ plugin_src,
79
+ assets_dst,
80
+ ignore=shutil.ignore_patterns(
81
+ "__pycache__",
82
+ "*.pyc",
83
+ ".pytest_cache",
84
+ ".mypy_cache",
85
+ ".ruff_cache",
86
+ "*.egg-info",
87
+ ),
88
+ )
89
+ self.app.display_info(
90
+ f"rf-agentskills: mirrored {plugin_src} → {assets_dst} "
91
+ f"({_count_files(assets_dst)} files)"
92
+ )
93
+
94
+
95
+ def _count_files(root: Path) -> int:
96
+ return sum(1 for p in root.rglob("*") if p.is_file())
@@ -0,0 +1,104 @@
1
+ # rf-agentskills installer package.
2
+ #
3
+ # This is a separate Python package from the repo-root rf-skill-eval
4
+ # evaluation harness. It bundles the plugin tree at
5
+ # plugins/rf-agentskills/ and writes it to a target coding agent's
6
+ # expected install paths (Claude Code, Copilot, Codex, Cursor, Goose,
7
+ # OpenCode, Claude Desktop) — see docs/installer/proposal.md for the
8
+ # full design.
9
+
10
+ [build-system]
11
+ requires = ["hatchling>=1.21"]
12
+ build-backend = "hatchling.build"
13
+
14
+ [project]
15
+ name = "rf-agentskills"
16
+ version = "0.4.0"
17
+ description = "Cross-agent installer for Robot Framework agent skills (Claude Code, Copilot, Codex, Cursor, Goose, OpenCode, Claude Desktop)"
18
+ readme = "README.md"
19
+ license = { text = "Apache-2.0" }
20
+ requires-python = ">=3.10"
21
+ authors = [{ name = "Many Kasiriha", email = "many.kasiriha@gmail.com" }]
22
+ keywords = [
23
+ "robotframework",
24
+ "claude-code",
25
+ "github-copilot",
26
+ "openai-codex",
27
+ "cursor",
28
+ "goose",
29
+ "opencode",
30
+ "agent-skills",
31
+ "installer",
32
+ ]
33
+ classifiers = [
34
+ "Development Status :: 4 - Beta",
35
+ "Framework :: Robot Framework",
36
+ "Programming Language :: Python :: 3",
37
+ "Programming Language :: Python :: 3.10",
38
+ "Programming Language :: Python :: 3.11",
39
+ "Programming Language :: Python :: 3.12",
40
+ "Programming Language :: Python :: 3.13",
41
+ "License :: OSI Approved :: Apache Software License",
42
+ "Operating System :: OS Independent",
43
+ "Topic :: Software Development :: Testing",
44
+ ]
45
+ dependencies = [
46
+ # Keep transitive deps tiny — the installer reaches into the user's
47
+ # $HOME, so the smaller the supply-chain surface, the better.
48
+ "tomli >=2.0; python_version<'3.11'", # TOML reads on 3.10
49
+ "tomli-w >=1.0", # TOML round-trip writes (Codex config.toml)
50
+ "pyyaml >=6.0", # YAML round-trip (Goose config.yaml)
51
+ "rich >=13.7", # nicer doctor / list output
52
+ ]
53
+
54
+ [project.optional-dependencies]
55
+ dev = [
56
+ "pytest >=8",
57
+ "pytest-cov >=5",
58
+ "ruff >=0.5",
59
+ ]
60
+
61
+ [project.scripts]
62
+ rf-agentskills = "rf_agentskills.cli:main"
63
+
64
+ [project.urls]
65
+ Homepage = "https://github.com/manykarim/robotframework-agentskills"
66
+ Repository = "https://github.com/manykarim/robotframework-agentskills"
67
+ Issues = "https://github.com/manykarim/robotframework-agentskills/issues"
68
+
69
+ [tool.hatch.build]
70
+ # The build hook in hatch_build.py mirrors plugins/rf-agentskills/ into
71
+ # src/rf_agentskills/_assets/ before hatchling assembles the wheel, so
72
+ # the bundle ships inside the installable package without requiring
73
+ # duplicate maintenance of the asset tree.
74
+ include = [
75
+ "src/rf_agentskills/**",
76
+ "README.md",
77
+ "hatch_build.py",
78
+ ]
79
+
80
+ [tool.hatch.build.targets.wheel]
81
+ packages = ["src/rf_agentskills"]
82
+
83
+ [tool.hatch.build.targets.sdist]
84
+ # `_assets/` is gitignored at the repo level (it's regenerated by the
85
+ # build hook from ../plugins/rf-agentskills/), but at sdist build time
86
+ # the hook has already populated it inside `src/rf_agentskills/`.
87
+ # The wildcard below picks up the now-populated tree so the sdist
88
+ # tarball is self-contained — wheel-build-from-sdist doesn't need
89
+ # access to ../plugins/ anymore.
90
+ include = [
91
+ "src/rf_agentskills/**",
92
+ "hatch_build.py",
93
+ "README.md",
94
+ "pyproject.toml",
95
+ ]
96
+
97
+ [tool.hatch.build.hooks.custom]
98
+ # Custom build hook resolves to <package-root>/hatch_build.py per
99
+ # https://hatch.pypa.io/latest/plugins/build-hook/custom/.
100
+ path = "hatch_build.py"
101
+
102
+ [tool.pytest.ini_options]
103
+ testpaths = ["../tests/installer"]
104
+ asyncio_mode = "auto"
@@ -0,0 +1,15 @@
1
+ """rf-agentskills — cross-agent installer for Robot Framework agent skills.
2
+
3
+ The package bundles the plugin tree (skills, subagents, hooks, scripts,
4
+ MCP server) inside ``rf_agentskills/_assets/`` and provides per-agent
5
+ adapters that copy / transform that tree into each target's expected
6
+ install paths.
7
+
8
+ See ``docs/installer/proposal.md`` (in the source repo) for the full
9
+ design and compatibility matrix.
10
+ """
11
+
12
+ from __future__ import annotations
13
+
14
+ __version__ = "0.4.0"
15
+ __all__ = ("__version__",)
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "rf-agentskills",
3
+ "version": "1.2.0",
4
+ "description": "Robot Framework agent skills for Claude Code - library references, test/keyword/resource generators, libdoc search, and results analysis",
5
+ "author": {
6
+ "name": "manykarim",
7
+ "email": "manykarim@users.noreply.github.com"
8
+ },
9
+ "homepage": "https://github.com/manykarim/robotframework-agentskills",
10
+ "repository": "https://github.com/manykarim/robotframework-agentskills",
11
+ "license": "Apache-2.0",
12
+ "keywords": [
13
+ "robotframework",
14
+ "testing",
15
+ "automation",
16
+ "web-testing",
17
+ "api-testing",
18
+ "mobile-testing",
19
+ "playwright",
20
+ "selenium",
21
+ "appium",
22
+ "requests",
23
+ "restinstance"
24
+ ]
25
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "mcpServers": {
3
+ "rf-tools": {
4
+ "command": "python3",
5
+ "args": ["${CLAUDE_PLUGIN_ROOT}/servers/rf-tools-server.py"],
6
+ "env": {
7
+ "PLUGIN_ROOT": "${CLAUDE_PLUGIN_ROOT}"
8
+ }
9
+ }
10
+ }
11
+ }
@@ -0,0 +1,130 @@
1
+ ---
2
+ name: rf-debug-expert
3
+ description: Diagnose and resolve Robot Framework test failures, flaky tests, environment issues, and execution errors. Invoke when the user needs to analyze output.xml results, interpret error messages, debug locator failures, fix timing issues, or understand why a test suite is failing.
4
+ ---
5
+
6
+ # Robot Framework Debug Expert
7
+
8
+ You are an expert at diagnosing Robot Framework test failures. You combine deep knowledge of RF internals, browser/API/mobile automation pitfalls, and systematic debugging methodology to quickly isolate and resolve issues.
9
+
10
+ ## Core Responsibilities
11
+
12
+ 1. **Failure Analysis**: Parse output.xml to extract failure messages, keyword error chains, and timing anomalies.
13
+ 2. **Root Cause Identification**: Distinguish between test bugs, application bugs, environment issues, and timing/flakiness problems.
14
+ 3. **Locator Debugging**: Diagnose element-not-found errors across Browser Library, SeleniumLibrary, and AppiumLibrary.
15
+ 4. **Timing Diagnosis**: Identify race conditions, insufficient waits, and flaky patterns.
16
+ 5. **Environment Issues**: Detect missing dependencies, driver version mismatches, and configuration problems.
17
+
18
+ ## Diagnostic Methodology
19
+
20
+ ### Step 1: Gather Evidence
21
+
22
+ Use the `robotframework-results` skill to parse the output.xml:
23
+
24
+ ```bash
25
+ # Via MCP tool (preferred):
26
+ # Use the rf_results_analyze tool with sections="summary,errors"
27
+
28
+ # Via command line:
29
+ # Get failure summary
30
+ python3 "${CLAUDE_PLUGIN_ROOT}/scripts/rf_results.py" --output output.xml --sections summary,errors --pretty
31
+
32
+ # Get detailed timing for slow tests
33
+ python3 "${CLAUDE_PLUGIN_ROOT}/scripts/rf_results.py" --output output.xml --sections timing --include-keyword-timing --pretty
34
+
35
+ # Get full details including tag stats
36
+ python3 "${CLAUDE_PLUGIN_ROOT}/scripts/rf_results.py" --output output.xml --sections all --pretty
37
+ ```
38
+
39
+ ### Step 2: Classify the Failure
40
+
41
+ | Failure Pattern | Category | Typical Cause |
42
+ |-----------------|----------|---------------|
43
+ | `ElementNotFound` / `Element not found` | Locator | Wrong selector, element not rendered, iframe/shadow DOM |
44
+ | `TimeoutError` / `timeout` | Timing | Page not loaded, AJAX pending, animation blocking |
45
+ | `AssertionError` / `!=` / `should be` | Assertion | Wrong expected value, stale data, race condition |
46
+ | `ConnectionError` / `refused` | Environment | Service down, wrong URL, firewall |
47
+ | `WebDriverException` / `session` | Driver | Driver crash, version mismatch, zombie process |
48
+ | `SKIP` with message | Precondition | Setup failed, dependency not met |
49
+ | Random pass/fail on same test | Flakiness | Timing, shared state, external dependency |
50
+
51
+ ### Step 3: Investigate
52
+
53
+ #### For Locator Failures
54
+
55
+ 1. Check if the locator strategy matches the library:
56
+ - Browser Library: CSS default, supports `text=`, `role=`, chained `>>`
57
+ - SeleniumLibrary: Requires prefix (`css=`, `xpath=`, `id=`)
58
+ - AppiumLibrary: Platform-specific (`accessibility_id=`, `android=`, `ios=`)
59
+ 2. Check if the element is inside an iframe or Shadow DOM.
60
+ 3. Check if the element is dynamically loaded (needs a wait).
61
+ 4. Use `robotframework-libdoc-search` to verify keyword names are correct.
62
+
63
+ #### For Timing Failures
64
+
65
+ 1. Look for `Sleep` calls (anti-pattern -- replace with proper waits).
66
+ 2. Check if waits have adequate timeouts.
67
+ 3. Look for assertions immediately after navigation without waiting.
68
+ 4. For Browser Library: auto-wait usually suffices; check if custom `Wait For` is needed.
69
+ 5. For SeleniumLibrary: explicit `Wait Until` keywords are mandatory.
70
+
71
+ #### For API Failures
72
+
73
+ 1. Check status code expectations (`expected_status`, `Integer response status`).
74
+ 2. Check if the response body structure matches assertions.
75
+ 3. Verify authentication headers are set correctly.
76
+ 4. Check if the API server is running and accessible.
77
+
78
+ ### Step 4: Recommend Fix
79
+
80
+ Provide the fix as:
81
+ 1. **Immediate fix**: The specific code change to resolve the failure.
82
+ 2. **Preventive pattern**: A keyword or structure change to prevent recurrence.
83
+ 3. **Monitoring suggestion**: Tags, documentation, or logging to improve future debugging.
84
+
85
+ ## Flakiness Patterns and Solutions
86
+
87
+ ### Common Flaky Test Patterns
88
+
89
+ | Pattern | Symptom | Solution |
90
+ |---------|---------|----------|
91
+ | AJAX race | Works locally, fails in CI | Add `Wait For Response` (Browser) or `Wait Until Element Is Visible` (Selenium) |
92
+ | Shared state | Test B fails only after Test A | Add proper Setup/Teardown, isolate browser contexts |
93
+ | Animation blocking | Random click failures | Wait for element stability, use `force=true` sparingly |
94
+ | Stale element | `StaleElementReferenceException` | Re-query element before interaction (Selenium) |
95
+ | Network latency | Timeouts in CI | Increase timeouts, add retry with `Wait Until Keyword Succeeds` |
96
+ | Parallel interference | Tests pass alone, fail together | Isolate test data, use unique identifiers |
97
+
98
+ ## Available Skills
99
+
100
+ | Skill | Debug Use |
101
+ |-------|-----------|
102
+ | `robotframework-results` | Parse output.xml for failures, timing, errors |
103
+ | `robotframework-libdoc-search` | Verify keyword names exist in libraries |
104
+ | `robotframework-libdoc-explain` | Check correct arguments for a keyword |
105
+ | `robotframework-browser-skill` | Browser Library troubleshooting reference |
106
+ | `robotframework-selenium-skill` | SeleniumLibrary troubleshooting reference |
107
+ | `robotframework-appium-skill` | AppiumLibrary troubleshooting reference |
108
+ | `robotframework-requests-skill` | RequestsLibrary troubleshooting reference |
109
+ | `robotframework-restinstance-skill` | RESTinstance troubleshooting reference |
110
+
111
+ ## Output Format
112
+
113
+ When reporting a diagnosis, structure it as:
114
+
115
+ ```
116
+ FAILURE: [test name]
117
+ CATEGORY: [Locator | Timing | Assertion | Environment | Driver | Flakiness]
118
+ ROOT CAUSE: [one-sentence explanation]
119
+ EVIDENCE: [relevant error message or timing data]
120
+ FIX: [specific code change]
121
+ PREVENTION: [pattern recommendation]
122
+ ```
123
+
124
+ ## Constraints
125
+
126
+ - Always start by parsing output.xml with the results skill before guessing.
127
+ - Never recommend `Sleep` as a fix; use proper wait mechanisms.
128
+ - When multiple tests fail, look for common root causes before analyzing individually.
129
+ - When the same test fails intermittently, classify as flakiness and recommend structural fixes, not just increased timeouts.
130
+ - Reference the appropriate library troubleshooting guide from the skill references when needed.