pi-skill-shiori 0.6.1 → 0.6.2
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/CHANGELOG.md +10 -0
- package/Docs/recommendation-surface.md +15 -0
- package/package.json +1 -1
- package/src/retrieval-expanded.ts +12 -3
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
This project follows semantic versioning.
|
|
6
6
|
|
|
7
|
+
## [0.6.2] - 2026-07-02
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- Expanded retrieval (`retrieveCandidatesExpanded`) now preserves `[trigger]` badges when query variants also score the skill higher via description tokens.
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- `Docs/recommendation-surface.md` documents the dogfood review outcome and recommendation to keep badges on default surfaces.
|
|
16
|
+
|
|
7
17
|
## [0.6.1] - 2026-07-01
|
|
8
18
|
|
|
9
19
|
### Changed
|
|
@@ -60,3 +60,18 @@ Always-visible skills may still appear as recommendations when they match a task
|
|
|
60
60
|
`/shiori:stats` recommendation feedback records offers, loads, and follow-through by source (`auto-inject`, `command`, `tool`). Metrics do **not** store reason badges or per-reason tallies.
|
|
61
61
|
|
|
62
62
|
Use badges to understand individual suggestions during a session. Use metrics to see whether recommendations are being loaded after they are offered.
|
|
63
|
+
|
|
64
|
+
## Dogfood review (0.6.2)
|
|
65
|
+
|
|
66
|
+
Reviewed the badge rollout across `/shiori:recommend` review mode, auto-inject candidate blocks, and `shiori_recommend` collapsed output using realistic skill policies and natural-language tasks (`browser scraping screenshot`, `auth login`, `vault search markdown`).
|
|
67
|
+
|
|
68
|
+
### Findings
|
|
69
|
+
|
|
70
|
+
- **Trust:** Compact badges clarify *why* a skill surfaced when they match the retrieval path. Users can distinguish policy trigger hits from description token matches without reading long `Why:` lines.
|
|
71
|
+
- **Noise:** The three-label vocabulary stays short enough for picker labels and tool summaries. No extra badge is shown when retrieval cannot classify a match.
|
|
72
|
+
- **Friction fixed:** Expanded retrieval (`buildRetrievalQueries`) evaluates per-token variants. A description-only variant could outscore a trigger match and incorrectly replace `[trigger]` with `[description]`. Merge logic now keeps trigger classification when any variant fired a policy trigger.
|
|
73
|
+
- **Deferred:** Broader recommendation-model changes (new badge types, per-reason metrics, confidence scores in default surfaces) stay out of scope.
|
|
74
|
+
|
|
75
|
+
### Recommendation
|
|
76
|
+
|
|
77
|
+
Keep reason badges on the default recommendation surfaces. Treat `[trigger]` as the authoritative label whenever policy triggers matched, even if expanded queries also score the description highly.
|
package/package.json
CHANGED
|
@@ -18,9 +18,7 @@ export function retrieveCandidatesExpanded(
|
|
|
18
18
|
for (const variant of buildRetrievalQueries(query)) {
|
|
19
19
|
for (const candidate of retrieveCandidates(variant, skills, policy, index)) {
|
|
20
20
|
const previous = byName.get(candidate.skill.name);
|
|
21
|
-
|
|
22
|
-
byName.set(candidate.skill.name, candidate);
|
|
23
|
-
}
|
|
21
|
+
byName.set(candidate.skill.name, preferExpandedCandidate(previous, candidate));
|
|
24
22
|
}
|
|
25
23
|
}
|
|
26
24
|
|
|
@@ -28,3 +26,14 @@ export function retrieveCandidatesExpanded(
|
|
|
28
26
|
.sort((a, b) => b.score - a.score || a.skill.name.localeCompare(b.skill.name))
|
|
29
27
|
.slice(0, max);
|
|
30
28
|
}
|
|
29
|
+
|
|
30
|
+
/** Keep trigger badges when expanded query variants also score the description higher. */
|
|
31
|
+
function preferExpandedCandidate(
|
|
32
|
+
previous: SkillCandidate | undefined,
|
|
33
|
+
candidate: SkillCandidate,
|
|
34
|
+
): SkillCandidate {
|
|
35
|
+
if (!previous) return candidate;
|
|
36
|
+
if (previous.reason === "trigger") return previous;
|
|
37
|
+
if (candidate.reason === "trigger") return candidate;
|
|
38
|
+
return candidate.score > previous.score ? candidate : previous;
|
|
39
|
+
}
|