@hasna/skills 0.10.65 → 0.10.67

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 CHANGED
@@ -2534,6 +2534,28 @@ untrusted byte entries, not arbitrary JavaScript proxies or hostile host code.
2534
2534
  `ContentHashInputError` reports fixed invalid-input, limit, abort or timeout codes
2535
2535
  without including file contents or paths in its messages.
2536
2536
 
2537
+ ### Requirements from explicit content
2538
+
2539
+ `@hasna/skills/sdk` exports `getSkillRequirementsFromContent`, the parser behind
2540
+ `skills requires`, for content the caller already holds, such as verified
2541
+ bundle entries:
2542
+
2543
+ ```ts
2544
+ import { getSkillRequirementsFromContent, type SkillMeta, type SkillRequirements } from "@hasna/skills/sdk";
2545
+
2546
+ declare const meta: SkillMeta | undefined; // the skill's catalog record, if known
2547
+ const requirements: SkillRequirements = getSkillRequirementsFromContent(
2548
+ "write-brief", [skillMd, readme, envExample], packageJson.dependencies, meta);
2549
+ // { envVars, systemDeps, cliCommand: "skills run write-brief", dependencies }
2550
+ ```
2551
+
2552
+ The result depends only on the arguments. It reads no registry, file,
2553
+ environment, install state or network, and does not change its inputs; the
2554
+ returned `dependencies` is the object you passed. When `meta.tags` includes
2555
+ `premium` or `remote`, the skill is treated as hosted: provider keys such as
2556
+ `OPENAI_API_KEY` are omitted, `SKILLS_API_KEY` and `SKILL_API_KEY` are dropped,
2557
+ and `HASNA_SKILLS_API_KEY` is listed.
2558
+
2537
2559
  ## Invitation email recovery
2538
2560
 
2539
2561
  An existing account with no usable membership can explicitly recover access by
@@ -2788,6 +2810,6 @@ all changes outside V5 refuse. The guarded upgrade changes policy only, preserve
2788
2810
  native settings, other witnesses and session pins, and revalidates before apply.
2789
2811
 
2790
2812
 
2791
- Codex cache witnesses migrate separately through `skills hook rebind-cache --agent codex`. Preview requires the exact current policy and configuration SHA-256 values. Name each reviewed remote app-only parent with `--app-only-parent`; skill-bearing parents must already have enrolled qualified-name denies and semantic capability controls. The complete cache census refuses unknown parents, cache-member aliases, new skills, direct hooks selecting cache inputs, and changed app/MCP/receipt capabilities. Reviewed whole Codex root aliases keep their existing identity/CAS guards; hook selection through either the alias or canonical cache path is refused. Commands containing the direct `plugins/cache` selector are conservatively refused, including HOME, tilde and relative spellings; no shell evaluation is performed. App-only bootstrap verifies the old full manifest and receipt sources, then explicitly reviews current app capabilities; it does not claim those app bytes were historically witnessed.
2813
+ Codex cache witnesses migrate separately through `skills hook rebind-cache --agent codex`. Preview requires the exact current policy and configuration SHA-256 values. Name each reviewed remote app-only parent with `--app-only-parent`; name each already reviewed native `mcp_tool` parent with `--reviewed-hook-parent`. Hook parents require exact enrolled manifest and hook bytes. When the owning installer created a remote-install receipt, its exact schema, identity and bytes are required. A local marketplace install with no receipt is accepted only when the exact full marketplace source is already enrolled and the unchanged Codex settings enable that exact plugin identity. The complete cache census refuses unknown parents, cache-member aliases, new skills, direct hooks selecting cache inputs, and changed app/MCP/hook/receipt or marketplace capabilities. Reviewed whole Codex root aliases keep their existing identity/CAS guards; hook selection through either the alias or canonical cache path is refused. Commands containing the direct `plugins/cache` selector are conservatively refused, including HOME, tilde and relative spellings; no shell evaluation is performed. App-only bootstrap verifies the old full manifest and receipt sources, then explicitly reviews current app capabilities; it does not claim those app bytes were historically witnessed.
2792
2814
 
2793
2815
  Review the returned semantic cache digest, then repeat with `--expected-cache-witness-sha256 <digest> --apply`. The owning apply path preserves/readbacks the original policy, recomputes the whole plan, compares policy/config/cache preimages, writes only the Skills policy, and verifies the resulting consumer. Historical directory hashes and source rows remain retained as provenance; this command cannot reconstruct an unavailable old directory tree or waive an ancestor directory containing unrelated inputs. Equivalent version materializations and inert assets then leave the new Codex-specific witness unchanged. Every other discovery source, directory, settings witness, native control and session pin stays under its existing contract. Settings and cache upgrades remain independent; neither silently repairs drift in the other.