Phase 3: proton-pass skill — 22 tool handlers wrapping pass-cli (vaults, items, TOTP, SSH, inject)
Hermes skill wrapping the official pass-cli (Rust binary) for agent use.
Follows the architecture from t_d1c7437e (ARCHITECTURE.md section 4).
Tools:
- Auth: proton_pass_login, proton_pass_logout, proton_pass_auth_status, proton_pass_test
- Vaults: proton_pass_vaults, proton_pass_vault_create, proton_pass_vault_delete
- Items: proton_pass_list, proton_pass_get, proton_pass_search, proton_pass_create,
proton_pass_edit, proton_pass_delete, proton_pass_totp, proton_pass_share_item
- Injection: proton_pass_inject (wraps pass-cli run)
- SSH: proton_pass_ssh_load, proton_pass_ssh_agent_start,
proton_pass_ssh_daemon_{start,status,stop}
- Utility: proton_pass_generate_password
Signed-off-by: Murdock A-Team
This commit is contained in:
parent
f8b9991207
commit
27592f710b
4 changed files with 2178 additions and 0 deletions
1427
skills/proton-pass/scripts/tools.py
Normal file
1427
skills/proton-pass/scripts/tools.py
Normal file
File diff suppressed because it is too large
Load diff
23
skills/proton-pass/scripts/verify.py
Normal file
23
skills/proton-pass/scripts/verify.py
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
#!/usr/bin/env python3
|
||||
"""Verify proton-pass skill module loads and all tools are registered."""
|
||||
import sys
|
||||
sys.path.insert(0, 'skills/proton-pass/scripts')
|
||||
|
||||
import tools
|
||||
import json
|
||||
|
||||
# Verify all tools are in registry
|
||||
print("=== Tool Registry ===")
|
||||
for name, info in sorted(tools.TOOLS.items()):
|
||||
params = info["schema"].get("parameters", {}).get("properties", {})
|
||||
print(f" \u2713 {name} \u2014 {len(params)} params")
|
||||
|
||||
print(f"\nTotal tools: {len(tools.TOOLS)}")
|
||||
|
||||
# Test dispatch for error cases (no CLI installed = expected)
|
||||
result = json.loads(tools.dispatch('proton_pass_auth_status'))
|
||||
print(f"\nAuth status dispatch (expected error \u2014 no CLI): success={result.get('success')}")
|
||||
print(f" error={str(result.get('error', result.get('message', '')))[:120]}")
|
||||
|
||||
result2 = json.loads(tools.dispatch('nonexistent'))
|
||||
print(f"\nNonexistent tool: error={result2.get('error', '')[:80]}")
|
||||
Loading…
Add table
Add a link
Reference in a new issue