opencode-skills-collection 4.0.11 → 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.
- package/bundled-skills/.antigravity-install-manifest.json +4 -1
- package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
- package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
- package/bundled-skills/docs/maintainers/repo-growth-seo.md +1 -1
- package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
- package/bundled-skills/docs/users/aas-core.md +1 -1
- package/bundled-skills/docs/users/bundles.md +1 -1
- package/bundled-skills/docs/users/claude-code-skills.md +1 -1
- package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
- package/bundled-skills/docs/users/kiro-integration.md +1 -1
- package/bundled-skills/docs/users/usage.md +3 -3
- package/bundled-skills/docs/users/visual-guide.md +4 -4
- package/bundled-skills/fedora-hyprland-installer/LICENSE +21 -0
- package/bundled-skills/fedora-hyprland-installer/README.md +125 -0
- package/bundled-skills/fedora-hyprland-installer/SKILL.md +112 -0
- package/bundled-skills/fedora-hyprland-installer/references/amd.md +10 -0
- package/bundled-skills/fedora-hyprland-installer/references/fedora.md +24 -0
- package/bundled-skills/fedora-hyprland-installer/references/hyprland.md +22 -0
- package/bundled-skills/fedora-hyprland-installer/references/intel.md +8 -0
- package/bundled-skills/fedora-hyprland-installer/references/nvidia.md +29 -0
- package/bundled-skills/fedora-hyprland-installer/references/portals.md +18 -0
- package/bundled-skills/fedora-hyprland-installer/references/troubleshooting.md +53 -0
- package/bundled-skills/fedora-hyprland-installer/references/wayland.md +9 -0
- package/bundled-skills/fedora-hyprland-installer/scripts/backup.sh +65 -0
- package/bundled-skills/fedora-hyprland-installer/scripts/configure.sh +158 -0
- package/bundled-skills/fedora-hyprland-installer/scripts/detect-gpu.sh +71 -0
- package/bundled-skills/fedora-hyprland-installer/scripts/detect-system.sh +95 -0
- package/bundled-skills/fedora-hyprland-installer/scripts/install.sh +62 -0
- package/bundled-skills/fedora-hyprland-installer/scripts/preflight.sh +94 -0
- package/bundled-skills/fedora-hyprland-installer/scripts/repair.sh +92 -0
- package/bundled-skills/fedora-hyprland-installer/scripts/uninstall.sh +57 -0
- package/bundled-skills/fedora-hyprland-installer/scripts/verify.sh +92 -0
- package/bundled-skills/fedora-hyprland-installer/tests/test-detection.sh +22 -0
- package/bundled-skills/fedora-hyprland-installer/tests/test-scripts.sh +47 -0
- package/bundled-skills/find-complementary-founders/LICENSE.txt +21 -0
- package/bundled-skills/find-complementary-founders/SKILL.md +386 -0
- package/bundled-skills/find-complementary-founders/agents/openai.yaml +4 -0
- package/bundled-skills/find-complementary-founders/references/community-growth.md +140 -0
- package/bundled-skills/find-complementary-founders/references/evidence-model.md +94 -0
- package/bundled-skills/find-complementary-founders/references/moltbook.md +125 -0
- package/bundled-skills/find-complementary-founders/references/owner-onboarding.ru.md +105 -0
- package/bundled-skills/find-complementary-founders/references/privacy-safety.md +63 -0
- package/bundled-skills/find-complementary-founders/references/profile-schema.md +117 -0
- package/bundled-skills/find-complementary-founders/scripts/assess_profile.py +532 -0
- package/bundled-skills/find-complementary-founders/scripts/github_thread.py +466 -0
- package/bundled-skills/find-complementary-founders/scripts/match_profiles.py +251 -0
- package/bundled-skills/find-complementary-founders/scripts/moltbook_publish.py +672 -0
- package/bundled-skills/find-complementary-founders/scripts/profile_card.py +307 -0
- package/bundled-skills/find-complementary-founders/scripts/validate_profile.py +473 -0
- package/bundled-skills/find-complementary-founders/scripts/verify_github_submission.py +296 -0
- package/bundled-skills/orchestrate/SKILL.md +61 -0
- package/bundled-skills/orchestrate/agents/openai.yaml +4 -0
- package/bundled-skills/uizze-ui-research/SKILL.md +47 -12
- package/package.json +1 -1
- 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())
|