opencode-skills-antigravity 1.0.20 → 1.0.22

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 (33) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +1330 -0
  2. package/bundled-skills/claude-monitor/scripts/api_bench.py +12 -1
  3. package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
  4. package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
  5. package/bundled-skills/docs/maintainers/repo-growth-seo.md +3 -3
  6. package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
  7. package/bundled-skills/docs/users/bundles.md +1 -1
  8. package/bundled-skills/docs/users/claude-code-skills.md +1 -1
  9. package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
  10. package/bundled-skills/docs/users/getting-started.md +1 -1
  11. package/bundled-skills/docs/users/kiro-integration.md +1 -1
  12. package/bundled-skills/docs/users/usage.md +4 -4
  13. package/bundled-skills/docs/users/visual-guide.md +4 -4
  14. package/bundled-skills/loki-mode/examples/todo-app-generated/backend/package-lock.json +3 -3
  15. package/bundled-skills/loki-mode/examples/todo-app-generated/backend/package.json +1 -0
  16. package/bundled-skills/loki-mode/examples/todo-app-generated/frontend/package-lock.json +3 -3
  17. package/bundled-skills/loki-mode/examples/todo-app-generated/frontend/package.json +1 -0
  18. package/bundled-skills/phase-gated-debugging/SKILL.md +70 -0
  19. package/bundled-skills/saas-multi-tenant/SKILL.md +183 -0
  20. package/bundled-skills/threejs-animation/SKILL.md +13 -8
  21. package/bundled-skills/threejs-fundamentals/SKILL.md +44 -1
  22. package/bundled-skills/threejs-geometry/SKILL.md +30 -0
  23. package/bundled-skills/threejs-interaction/SKILL.md +12 -0
  24. package/bundled-skills/threejs-lighting/SKILL.md +3 -2
  25. package/bundled-skills/threejs-loaders/SKILL.md +21 -1
  26. package/bundled-skills/threejs-materials/SKILL.md +22 -0
  27. package/bundled-skills/threejs-postprocessing/SKILL.md +30 -9
  28. package/bundled-skills/threejs-shaders/SKILL.md +43 -0
  29. package/bundled-skills/threejs-skills/SKILL.md +103 -42
  30. package/bundled-skills/threejs-textures/SKILL.md +8 -0
  31. package/bundled-skills/whatsapp-cloud-api/scripts/send_test_message.py +18 -14
  32. package/bundled-skills/whatsapp-cloud-api/scripts/validate_config.py +54 -37
  33. package/package.json +1 -1
@@ -47,14 +47,19 @@ def check_env_vars() -> tuple[bool, list[str]]:
47
47
  return len(missing) == 0, missing
48
48
 
49
49
 
50
- def _mask_secret(value: str) -> str:
51
- """Return a masked version of a secret for safe logging."""
52
- if not value or len(value) < 8:
53
- return "***masked***"
54
- return f"{value[:6]}...masked"
50
+ def _format_api_failure(response: httpx.Response) -> dict[str, str]:
51
+ """Return sanitized API failure details without echoing sensitive payloads."""
52
+ try:
53
+ error = response.json().get("error", {})
54
+ except ValueError:
55
+ error = {}
56
+ return {
57
+ "status_code": str(response.status_code),
58
+ "error_code": str(error.get("code", "?")),
59
+ }
55
60
 
56
61
 
57
- def test_api_connection() -> tuple[bool, str]:
62
+ def test_api_connection() -> tuple[bool, dict[str, str]]:
58
63
  """Test connection to WhatsApp Cloud API."""
59
64
  token = os.environ.get("WHATSAPP_TOKEN", "")
60
65
  phone_id = os.environ.get("PHONE_NUMBER_ID", "")
@@ -69,27 +74,26 @@ def test_api_connection() -> tuple[bool, str]:
69
74
 
70
75
  if response.status_code == 200:
71
76
  data = response.json()
72
- return True, (
73
- f"Phone: {data.get('display_phone_number', 'N/A')}\n"
74
- f" Name: {data.get('verified_name', 'N/A')}\n"
75
- f" Status: {data.get('code_verification_status', 'N/A')}\n"
76
- f" Quality: {data.get('quality_rating', 'N/A')}"
77
- )
78
- else:
79
- error = response.json().get("error", {})
80
- return False, f"API Error {error.get('code', '?')}: {error.get('message', 'Unknown')}"
77
+ return True, {
78
+ "phone": str(data.get("display_phone_number", "N/A")),
79
+ "name": str(data.get("verified_name", "N/A")),
80
+ "status": str(data.get("code_verification_status", "N/A")),
81
+ "quality": str(data.get("quality_rating", "N/A")),
82
+ }
83
+
84
+ return False, _format_api_failure(response)
81
85
 
82
86
  except httpx.ConnectError:
83
- return False, "Connection failed. Check your internet connection."
87
+ return False, {"reason": "Connection failed. Check your internet connection."}
84
88
  except httpx.TimeoutException:
85
- return False, "Request timed out after 10 seconds."
86
- except Exception as e:
87
- # Mask token in error output to prevent credential leakage
88
- safe_err = str(e).replace(token, _mask_secret(token)) if token else str(e)
89
- return False, f"Unexpected error: {safe_err}"
89
+ return False, {"reason": "Request timed out after 10 seconds."}
90
+ except Exception as exc:
91
+ return False, {
92
+ "reason": f"Unexpected {exc.__class__.__name__} while contacting the Graph API."
93
+ }
90
94
 
91
95
 
92
- def test_waba_access() -> tuple[bool, str]:
96
+ def test_waba_access() -> tuple[bool, dict[str, str]]:
93
97
  """Test access to WhatsApp Business Account."""
94
98
  token = os.environ.get("WHATSAPP_TOKEN", "")
95
99
  waba_id = os.environ.get("WABA_ID", "")
@@ -104,15 +108,14 @@ def test_waba_access() -> tuple[bool, str]:
104
108
  if response.status_code == 200:
105
109
  data = response.json()
106
110
  count = len(data.get("data", []))
107
- return True, f"WABA accessible. {count} phone number(s) found."
108
- else:
109
- error = response.json().get("error", {})
110
- return False, f"API Error {error.get('code', '?')}: {error.get('message', 'Unknown')}"
111
+ return True, {"count": str(count)}
111
112
 
112
- except Exception as e:
113
- # Mask token in error output to prevent credential leakage
114
- safe_err = str(e).replace(token, _mask_secret(token)) if token else str(e)
115
- return False, f"Error: {safe_err}"
113
+ return False, _format_api_failure(response)
114
+
115
+ except Exception as exc:
116
+ return False, {
117
+ "reason": f"Unexpected {exc.__class__.__name__} while checking WABA access."
118
+ }
116
119
 
117
120
 
118
121
  def main():
@@ -154,23 +157,37 @@ def main():
154
157
 
155
158
  # Check 2: API connection
156
159
  print("[2/3] Testing API connection (Phone Number)...")
157
- api_ok, api_msg = test_api_connection()
160
+ api_ok, api_details = test_api_connection()
158
161
  if api_ok:
159
- print(f" OK - Connected successfully")
160
- print(f" {api_msg}")
162
+ print(" OK - Connected successfully")
163
+ print(f" Phone: {api_details['phone']}")
164
+ print(f" Name: {api_details['name']}")
165
+ print(f" Status: {api_details['status']}")
166
+ print(f" Quality: {api_details['quality']}")
161
167
  else:
162
- print(f" FAIL - {api_msg}")
168
+ if "reason" in api_details:
169
+ print(f" FAIL - {api_details['reason']}")
170
+ else:
171
+ print(" FAIL - API request failed.")
172
+ print(f" HTTP Status: {api_details['status_code']}")
173
+ print(f" Error Code: {api_details['error_code']}")
163
174
  all_ok = False
164
175
 
165
176
  print()
166
177
 
167
178
  # Check 3: WABA access
168
179
  print("[3/3] Testing WABA access...")
169
- waba_ok, waba_msg = test_waba_access()
180
+ waba_ok, waba_details = test_waba_access()
170
181
  if waba_ok:
171
- print(f" OK - {waba_msg}")
182
+ print(" OK - WABA accessible")
183
+ print(f" Phone Numbers Found: {waba_details['count']}")
172
184
  else:
173
- print(f" FAIL - {waba_msg}")
185
+ if "reason" in waba_details:
186
+ print(f" FAIL - {waba_details['reason']}")
187
+ else:
188
+ print(" FAIL - API request failed.")
189
+ print(f" HTTP Status: {waba_details['status_code']}")
190
+ print(f" Error Code: {waba_details['error_code']}")
174
191
  all_ok = False
175
192
 
176
193
  print()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-skills-antigravity",
3
- "version": "1.0.20",
3
+ "version": "1.0.22",
4
4
  "description": "OpenCode CLI plugin that automatically downloads and keeps Antigravity Awesome Skills up to date.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",