opencode-skills-collection 4.0.12 → 4.0.13

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 (55) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +4 -1
  2. package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
  3. package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
  4. package/bundled-skills/docs/maintainers/repo-growth-seo.md +1 -1
  5. package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
  6. package/bundled-skills/docs/users/aas-core.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/kiro-integration.md +1 -1
  11. package/bundled-skills/docs/users/usage.md +3 -3
  12. package/bundled-skills/docs/users/visual-guide.md +4 -4
  13. package/bundled-skills/fedora-hyprland-installer/LICENSE +21 -0
  14. package/bundled-skills/fedora-hyprland-installer/README.md +125 -0
  15. package/bundled-skills/fedora-hyprland-installer/SKILL.md +112 -0
  16. package/bundled-skills/fedora-hyprland-installer/references/amd.md +10 -0
  17. package/bundled-skills/fedora-hyprland-installer/references/fedora.md +24 -0
  18. package/bundled-skills/fedora-hyprland-installer/references/hyprland.md +22 -0
  19. package/bundled-skills/fedora-hyprland-installer/references/intel.md +8 -0
  20. package/bundled-skills/fedora-hyprland-installer/references/nvidia.md +29 -0
  21. package/bundled-skills/fedora-hyprland-installer/references/portals.md +18 -0
  22. package/bundled-skills/fedora-hyprland-installer/references/troubleshooting.md +53 -0
  23. package/bundled-skills/fedora-hyprland-installer/references/wayland.md +9 -0
  24. package/bundled-skills/fedora-hyprland-installer/scripts/backup.sh +65 -0
  25. package/bundled-skills/fedora-hyprland-installer/scripts/configure.sh +158 -0
  26. package/bundled-skills/fedora-hyprland-installer/scripts/detect-gpu.sh +71 -0
  27. package/bundled-skills/fedora-hyprland-installer/scripts/detect-system.sh +95 -0
  28. package/bundled-skills/fedora-hyprland-installer/scripts/install.sh +62 -0
  29. package/bundled-skills/fedora-hyprland-installer/scripts/preflight.sh +94 -0
  30. package/bundled-skills/fedora-hyprland-installer/scripts/repair.sh +92 -0
  31. package/bundled-skills/fedora-hyprland-installer/scripts/uninstall.sh +57 -0
  32. package/bundled-skills/fedora-hyprland-installer/scripts/verify.sh +92 -0
  33. package/bundled-skills/fedora-hyprland-installer/tests/test-detection.sh +22 -0
  34. package/bundled-skills/fedora-hyprland-installer/tests/test-scripts.sh +47 -0
  35. package/bundled-skills/find-complementary-founders/LICENSE.txt +21 -0
  36. package/bundled-skills/find-complementary-founders/SKILL.md +386 -0
  37. package/bundled-skills/find-complementary-founders/agents/openai.yaml +4 -0
  38. package/bundled-skills/find-complementary-founders/references/community-growth.md +140 -0
  39. package/bundled-skills/find-complementary-founders/references/evidence-model.md +94 -0
  40. package/bundled-skills/find-complementary-founders/references/moltbook.md +125 -0
  41. package/bundled-skills/find-complementary-founders/references/owner-onboarding.ru.md +105 -0
  42. package/bundled-skills/find-complementary-founders/references/privacy-safety.md +63 -0
  43. package/bundled-skills/find-complementary-founders/references/profile-schema.md +117 -0
  44. package/bundled-skills/find-complementary-founders/scripts/assess_profile.py +532 -0
  45. package/bundled-skills/find-complementary-founders/scripts/github_thread.py +466 -0
  46. package/bundled-skills/find-complementary-founders/scripts/match_profiles.py +251 -0
  47. package/bundled-skills/find-complementary-founders/scripts/moltbook_publish.py +672 -0
  48. package/bundled-skills/find-complementary-founders/scripts/profile_card.py +307 -0
  49. package/bundled-skills/find-complementary-founders/scripts/validate_profile.py +473 -0
  50. package/bundled-skills/find-complementary-founders/scripts/verify_github_submission.py +296 -0
  51. package/bundled-skills/orchestrate/SKILL.md +61 -0
  52. package/bundled-skills/orchestrate/agents/openai.yaml +4 -0
  53. package/bundled-skills/uizze-ui-research/SKILL.md +47 -12
  54. package/package.json +1 -1
  55. package/skills_index.json +101 -1
@@ -0,0 +1,251 @@
1
+ #!/usr/bin/env python3
2
+ """Rank eligible own-owner thread submissions by complementarity and alignment."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import glob
8
+ import importlib.util
9
+ import json
10
+ import sys
11
+ from pathlib import Path
12
+
13
+ LEVEL_VALUE = {
14
+ "unknown": 0.0,
15
+ "observed": 0.2,
16
+ "practiced": 0.5,
17
+ "strong": 0.8,
18
+ "standout": 1.0,
19
+ }
20
+
21
+ CONFIDENCE_VALUE = {
22
+ "none": 0.0,
23
+ "low": 0.35,
24
+ "medium": 0.7,
25
+ "high": 1.0,
26
+ }
27
+
28
+
29
+ class MatchError(ValueError):
30
+ """Raised for an invalid public profile."""
31
+
32
+
33
+ _PROFILE_VALIDATOR = None
34
+
35
+
36
+ def profile_validator():
37
+ global _PROFILE_VALIDATOR
38
+ if _PROFILE_VALIDATOR is not None:
39
+ return _PROFILE_VALIDATOR
40
+ path = Path(__file__).with_name("validate_profile.py")
41
+ spec = importlib.util.spec_from_file_location("findmate_profile_validator", path)
42
+ if spec is None or spec.loader is None:
43
+ raise MatchError("Cannot load the FindMate public-profile validator")
44
+ module = importlib.util.module_from_spec(spec)
45
+ spec.loader.exec_module(module)
46
+ _PROFILE_VALIDATOR = module
47
+ return module
48
+
49
+
50
+ def load_profile(path: Path) -> dict:
51
+ try:
52
+ value = json.loads(path.read_text(encoding="utf-8"))
53
+ except (OSError, json.JSONDecodeError) as exc:
54
+ raise MatchError(f"Cannot load {path}: {exc}") from exc
55
+ if not isinstance(value, dict):
56
+ raise MatchError(f"{path} must contain a JSON object")
57
+ validate_profile(value, path)
58
+ value["_source_path"] = str(path.resolve())
59
+ return value
60
+
61
+
62
+ def validate_profile(profile: dict, path: Path) -> None:
63
+ validator = profile_validator()
64
+ try:
65
+ validator.validate_profile(profile)
66
+ except validator.ValidationError as exc:
67
+ raise MatchError(f"{path} failed public-profile validation: {exc}") from exc
68
+
69
+
70
+ def normalized_strings(values: object) -> set[str]:
71
+ if not isinstance(values, list):
72
+ return set()
73
+ return {str(value).strip().casefold() for value in values if str(value).strip()}
74
+
75
+
76
+ def overlap_score(left: object, right: object) -> float:
77
+ left_set = normalized_strings(left)
78
+ right_set = normalized_strings(right)
79
+ if not left_set or not right_set:
80
+ return 0.0
81
+ return len(left_set & right_set) / len(left_set | right_set)
82
+
83
+
84
+ def contribution_value(profile: dict, section: str, dimension: str) -> float:
85
+ entry = profile.get(section, {}).get(dimension, {})
86
+ level = LEVEL_VALUE.get(entry.get("level"), 0.0)
87
+ confidence = CONFIDENCE_VALUE.get(entry.get("confidence"), 0.0)
88
+ return level * (0.5 + 0.5 * confidence)
89
+
90
+
91
+ def requested_coverage(owner: dict, candidate: dict) -> tuple[float, list[str]]:
92
+ seeking = owner.get("seeking", {})
93
+ checks: list[float] = []
94
+ reasons: list[str] = []
95
+ for dimension in seeking.get("stages", []):
96
+ value = contribution_value(candidate, "stage_contributions", dimension)
97
+ checks.append(value)
98
+ if value >= 0.5:
99
+ reasons.append(f"covers stage gap: {dimension}")
100
+ for dimension in seeking.get("functions", []):
101
+ value = contribution_value(candidate, "functional_contributions", dimension)
102
+ checks.append(value)
103
+ if value >= 0.5:
104
+ reasons.append(f"covers capability gap: {dimension}")
105
+ return (sum(checks) / len(checks) if checks else 0.0), reasons
106
+
107
+
108
+ def reciprocal_coverage(owner: dict, candidate: dict) -> float:
109
+ seeking = candidate.get("seeking", {})
110
+ checks: list[float] = []
111
+ for dimension in seeking.get("stages", []):
112
+ checks.append(contribution_value(owner, "stage_contributions", dimension))
113
+ for dimension in seeking.get("functions", []):
114
+ checks.append(contribution_value(owner, "functional_contributions", dimension))
115
+ return sum(checks) / len(checks) if checks else 0.0
116
+
117
+
118
+ def evidence_quality(candidate: dict) -> float:
119
+ entries = list(candidate.get("stage_contributions", {}).values())
120
+ entries += list(candidate.get("functional_contributions", {}).values())
121
+ relevant = [entry for entry in entries if entry.get("level") != "unknown"]
122
+ if not relevant:
123
+ return 0.0
124
+ confidence = sum(
125
+ CONFIDENCE_VALUE.get(entry.get("confidence"), 0.0) for entry in relevant
126
+ ) / len(relevant)
127
+ proof_bonus = min(len(candidate.get("public_evidence", [])) / 3, 1.0)
128
+ return 0.75 * confidence + 0.25 * proof_bonus
129
+
130
+
131
+ def score_match(owner: dict, candidate: dict) -> dict:
132
+ coverage, reasons = requested_coverage(owner, candidate)
133
+ reciprocal = reciprocal_coverage(owner, candidate)
134
+ owner_seek = owner.get("seeking", {})
135
+ candidate_seek = candidate.get("seeking", {})
136
+
137
+ themes = overlap_score(
138
+ owner_seek.get("project_themes"), candidate_seek.get("project_themes")
139
+ )
140
+ principles = overlap_score(
141
+ owner_seek.get("shared_principles"), candidate_seek.get("shared_principles")
142
+ )
143
+ modes = overlap_score(
144
+ owner_seek.get("collaboration_modes"),
145
+ candidate_seek.get("collaboration_modes"),
146
+ )
147
+ alignment = 0.4 * themes + 0.35 * principles + 0.25 * modes
148
+ evidence = evidence_quality(candidate)
149
+
150
+ final = round(
151
+ 100
152
+ * (0.50 * coverage + 0.15 * reciprocal + 0.25 * alignment + 0.10 * evidence),
153
+ 1,
154
+ )
155
+ if themes > 0:
156
+ reasons.append("shares project themes")
157
+ if principles > 0:
158
+ reasons.append("shares operating principles")
159
+ if modes > 0:
160
+ reasons.append("shares collaboration mode")
161
+
162
+ return {
163
+ "alias": candidate["alias"],
164
+ "score": final,
165
+ "reasons": reasons,
166
+ "contact": candidate["contact"],
167
+ "profile_source": candidate["_source_path"],
168
+ "components": {
169
+ "gap_coverage": round(coverage, 3),
170
+ "reciprocal_coverage": round(reciprocal, 3),
171
+ "alignment": round(alignment, 3),
172
+ "evidence_quality": round(evidence, 3),
173
+ },
174
+ "review_required": [
175
+ "verify public evidence",
176
+ "discuss commitment and decision rights",
177
+ "obtain both humans' consent before direct contact",
178
+ ],
179
+ }
180
+
181
+
182
+ def expand_candidate_paths(patterns: list[str]) -> list[Path]:
183
+ paths: list[Path] = []
184
+ for pattern in patterns:
185
+ matches = [Path(item) for item in glob.glob(pattern)]
186
+ if not matches and Path(pattern).is_file():
187
+ matches = [Path(pattern)]
188
+ for match in matches:
189
+ if match not in paths:
190
+ paths.append(match)
191
+ return paths
192
+
193
+
194
+ def exclude_owner_source(owner: dict, candidates: list[dict]) -> list[dict]:
195
+ owner_source = owner.get("_source_path")
196
+ if not isinstance(owner_source, str):
197
+ raise MatchError("Owner profile lacks source identity")
198
+ return [
199
+ candidate
200
+ for candidate in candidates
201
+ if candidate.get("_source_path") != owner_source
202
+ ]
203
+
204
+
205
+ def parse_args() -> argparse.Namespace:
206
+ parser = argparse.ArgumentParser(
207
+ description=(
208
+ "Rank owner-approved profiles obtained from marked FindMate thread "
209
+ "submissions by capability gaps and alignment."
210
+ )
211
+ )
212
+ parser.add_argument("owner", type=Path)
213
+ parser.add_argument(
214
+ "--candidate",
215
+ action="append",
216
+ required=True,
217
+ help="Candidate file or glob; repeat as needed",
218
+ )
219
+ parser.add_argument("--limit", type=int, default=10)
220
+ return parser.parse_args()
221
+
222
+
223
+ def main() -> int:
224
+ args = parse_args()
225
+ try:
226
+ owner = load_profile(args.owner)
227
+ candidates = [
228
+ load_profile(path) for path in expand_candidate_paths(args.candidate)
229
+ ]
230
+ if not candidates:
231
+ raise MatchError("No candidate profiles found")
232
+ results = [
233
+ score_match(owner, candidate)
234
+ for candidate in exclude_owner_source(owner, candidates)
235
+ ]
236
+ results.sort(key=lambda item: item["score"], reverse=True)
237
+ output = {
238
+ "owner_alias": owner["alias"],
239
+ "method": "heuristic shortlist; not a compatibility verdict",
240
+ "matches": results[: max(1, args.limit)],
241
+ }
242
+ json.dump(output, sys.stdout, indent=2, ensure_ascii=False)
243
+ sys.stdout.write("\n")
244
+ except MatchError as exc:
245
+ print(f"error: {exc}", file=sys.stderr)
246
+ return 2
247
+ return 0
248
+
249
+
250
+ if __name__ == "__main__":
251
+ raise SystemExit(main())