@hasna/skills 0.10.88 → 0.10.89
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/README.md +36 -3
- package/bin/index.js +195 -101
- package/bin/mcp.js +80 -27
- package/bin/migrate.js +1 -1
- package/bin/server.js +1 -1
- package/bin/worker.js +1 -1
- package/dist/cli/commands/agent-integration.d.ts +20 -0
- package/dist/cli/commands/context.d.ts +4 -0
- package/dist/index.js +30 -13
- package/dist/lib/selection-resolver.d.ts +13 -1
- package/dist/lib/skill-context.d.ts +11 -0
- package/dist/runtime-prerequisites.js +3 -2
- package/dist/sdk/index.js +5 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1019,10 +1019,43 @@ offered as `skills load` commands instead of being injected or picked by name
|
|
|
1019
1019
|
order. Weaker pointers are offered the same way, at most three and never
|
|
1020
1020
|
injected: a multi-word keyword whose words all appear apart, one of them
|
|
1021
1021
|
discriminating ("designs review" in "the designs app for review"), or a common
|
|
1022
|
-
one-word keyword; a tie that does not fit is left out.
|
|
1022
|
+
one-word keyword; a tie that does not fit is left out. Managed prompt hooks are
|
|
1023
|
+
stricter than a direct `skills context` call: they inject an unnamed prompt
|
|
1024
|
+
match only for a phrase of two or more words, and offer anything weaker as a
|
|
1025
|
+
`skills load` command, so a `keywords: ["pdf"]` selection needs `$pdf`, "the pdf
|
|
1026
|
+
skill", a two-word keyword or `triggers.always` to arrive as a body.
|
|
1027
|
+
`SKILLS_HOOK_PROMPT_MIN_PHRASE_WORDS` can raise that length, never lower it.
|
|
1028
|
+
Sumi's plugin and Cursor's prompt hook discard a prompt call's output, so a
|
|
1029
|
+
pointer could not reach their models, and they keep the plain selection. Each
|
|
1030
|
+
`skills load` command a session is offered names that session and carries
|
|
1031
|
+
`--cache-first`, so it loads the pinned version from the verified cache the hook
|
|
1032
|
+
used, which works in a sandbox with no network. Once the cache can't serve it it
|
|
1033
|
+
loads from the Skills service. That happens when the pin was last verified over
|
|
1034
|
+
24 hours ago, which is common for a subagent, since it inherits its parent's time
|
|
1035
|
+
and no hook renews its own pin. With no network as well, the load refuses and says
|
|
1036
|
+
so, and `skills sync` doesn't renew a session's pin. Like a body the hook delivers
|
|
1037
|
+
from the cache, a cached load doesn't ask the service whether the selection is
|
|
1038
|
+
still current.
|
|
1039
|
+
|
|
1040
|
+
A load is recorded on the session the command names, whoever runs it, so running
|
|
1041
|
+
another session's command marks that session as having loaded the skill, and its
|
|
1042
|
+
later prompts offer it no pointer. Where the session store can't be written or is
|
|
1043
|
+
full, as in a Codex sandbox, a load still returns its content and says it wasn't
|
|
1044
|
+
recorded, unless the bundle isn't cached and the cache can't be written either, in
|
|
1045
|
+
which case it refuses. Compaction won't restore an unrecorded skill and the session
|
|
1046
|
+
won't be told if it's retired. An agent or subagent with no way to run a command can't use a
|
|
1047
|
+
pointer.
|
|
1048
|
+
|
|
1023
1049
|
A session retains its loaded selections; compaction restores the two most
|
|
1024
|
-
recently loaded instructions,
|
|
1025
|
-
|
|
1050
|
+
recently loaded instructions, followed by `skills load` commands for the next
|
|
1051
|
+
most recent. A subagent started by a managed hook is offered its parent's
|
|
1052
|
+
loaded skills as `skills load` commands, and gets a body at its start only for a
|
|
1053
|
+
skill that `triggers.always` or a path selects. Claude Code's and Codex's
|
|
1054
|
+
subagent start carries no prompt, so naming a skill in a subagent's brief doesn't
|
|
1055
|
+
deliver its body there. OpenCode's adapter does pass the subagent's first prompt,
|
|
1056
|
+
so there it also gets a body for a skill it names or matches by a phrase. A
|
|
1057
|
+
direct `skills context` call, and Sumi's and Cursor's hooks, give it its parent's
|
|
1058
|
+
most recent one as a body. A
|
|
1026
1059
|
read-only prompt does not rewrite the session receipt or take its write lock
|
|
1027
1060
|
(a damaged lock still refuses), and receipt writers wait up to two seconds for
|
|
1028
1061
|
another live writer's lock before refusing; a lock another writer is
|