@hasna/skills 0.10.5 → 0.10.8

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/bin/index.js CHANGED
@@ -36868,7 +36868,7 @@ var package_default;
36868
36868
  var init_package = __esm(() => {
36869
36869
  package_default = {
36870
36870
  name: "@hasna/skills",
36871
- version: "0.10.5",
36871
+ version: "0.10.8",
36872
36872
  description: "Skills library for AI coding agents",
36873
36873
  type: "module",
36874
36874
  bin: {
@@ -36930,6 +36930,7 @@ var init_package = __esm(() => {
36930
36930
  migrate: "bun run ./src/server/migrate.ts",
36931
36931
  typecheck: "tsc --noEmit",
36932
36932
  "verify:release": "bun run scripts/release-guard.ts",
36933
+ "verify:release-review": "bun run scripts/verify-release-review.ts",
36933
36934
  "verify:consumer-types": "bun run scripts/consumer-types.ts",
36934
36935
  prepack: "bun run verify:generated && bun run verify:release && bun run verify:consumer-types",
36935
36936
  prepublishOnly: "bun run verify:producer && bun run typecheck && bun run test",
@@ -51957,6 +51958,9 @@ function assertManagedAgentBridge(agent, options = {}) {
51957
51958
  const runtimeCache = canonicalAgentPath(join20(home, ".cache", "codex-runtimes"), aliases);
51958
51959
  if (entry.path.startsWith(runtimeCache + sep4) && discovery?.method === "automatic" && discovery.roots.some((root) => entry.path.startsWith(root + sep4)))
51959
51960
  return true;
51961
+ const bundledMarketplaces = canonicalAgentPath(join20(home, ".codex", ".tmp", "bundled-marketplaces"), aliases);
51962
+ if (entry.path.startsWith(bundledMarketplaces + sep4) && discovery?.method === "automatic" && discovery.roots.some((root) => entry.path.startsWith(root + sep4)))
51963
+ return true;
51960
51964
  if (!entry.path.startsWith(canonicalAgentPath(join20(home, ".codex", "skills", ".system"), aliases) + sep4))
51961
51965
  return false;
51962
51966
  return Array.isArray(binding.disabledBuiltins) && binding.disabledBuiltins.some((item) => item.path === entry.path && item.hash === entry.hash);
@@ -55360,6 +55364,7 @@ function rebindAgentDiscovery(binding, changes) {
55360
55364
  }) };
55361
55365
  }
55362
55366
  function assertProjectDiscovery(agent, directories, home, canonical4 = resolve15, reviewed) {
55367
+ const homeConfigPath = canonical4(agentDiscoveryConfigPath(home, agent));
55363
55368
  for (const directory of directories) {
55364
55369
  const isHome = resolve15(directory) === resolve15(home);
55365
55370
  if (agent === "hermes") {
@@ -55373,7 +55378,8 @@ function assertProjectDiscovery(agent, directories, home, canonical4 = resolve15
55373
55378
  const path = canonical4(join31(directory, suffix)), raw = read2(path);
55374
55379
  if (raw === null)
55375
55380
  continue;
55376
- if (agent === "claude" && suffix === ".claude/settings.json" && path === canonical4(join31(home, suffix)))
55381
+ const isRootAliasedHomeConfig = agent === "claude" && suffix === ".claude/settings.json" || agent === "codex" && suffix === ".codex/config.toml";
55382
+ if (isRootAliasedHomeConfig && path === homeConfigPath)
55377
55383
  continue;
55378
55384
  if (suffix.endsWith(".jsonc"))
55379
55385
  throw new Error(`NATIVE_SKILL_DRIFT: project JSONC discovery configuration requires review: ${path}`);
@@ -109698,7 +109704,7 @@ async function connectCodexHookRpc(options) {
109698
109704
  }
109699
109705
  var SUPPORTED_CODEX_HOOK_VERSIONS;
109700
109706
  var init_codex_hook_rpc = __esm(() => {
109701
- SUPPORTED_CODEX_HOOK_VERSIONS = ["codex-cli 0.153.0", "codex-cli 0.154.0", "codex-cli 0.155.0", "codex-cli 0.155.1", "codex-cli 0.156.1"];
109707
+ SUPPORTED_CODEX_HOOK_VERSIONS = ["codex-cli 0.153.0", "codex-cli 0.154.0", "codex-cli 0.155.0", "codex-cli 0.155.1", "codex-cli 0.156.1", "codex-cli 0.157.0", "codex-cli 0.157.1"];
109702
109708
  });
109703
109709
 
109704
109710
  // src/lib/codex-hook-trust-identity.ts
package/bin/mcp.js CHANGED
@@ -20019,7 +20019,7 @@ var package_default;
20019
20019
  var init_package = __esm(() => {
20020
20020
  package_default = {
20021
20021
  name: "@hasna/skills",
20022
- version: "0.10.5",
20022
+ version: "0.10.8",
20023
20023
  description: "Skills library for AI coding agents",
20024
20024
  type: "module",
20025
20025
  bin: {
@@ -20081,6 +20081,7 @@ var init_package = __esm(() => {
20081
20081
  migrate: "bun run ./src/server/migrate.ts",
20082
20082
  typecheck: "tsc --noEmit",
20083
20083
  "verify:release": "bun run scripts/release-guard.ts",
20084
+ "verify:release-review": "bun run scripts/verify-release-review.ts",
20084
20085
  "verify:consumer-types": "bun run scripts/consumer-types.ts",
20085
20086
  prepack: "bun run verify:generated && bun run verify:release && bun run verify:consumer-types",
20086
20087
  prepublishOnly: "bun run verify:producer && bun run typecheck && bun run test",
package/bin/migrate.js CHANGED
@@ -7,7 +7,7 @@ import { join as join5 } from "path";
7
7
  // package.json
8
8
  var package_default = {
9
9
  name: "@hasna/skills",
10
- version: "0.10.5",
10
+ version: "0.10.8",
11
11
  description: "Skills library for AI coding agents",
12
12
  type: "module",
13
13
  bin: {
@@ -69,6 +69,7 @@ var package_default = {
69
69
  migrate: "bun run ./src/server/migrate.ts",
70
70
  typecheck: "tsc --noEmit",
71
71
  "verify:release": "bun run scripts/release-guard.ts",
72
+ "verify:release-review": "bun run scripts/verify-release-review.ts",
72
73
  "verify:consumer-types": "bun run scripts/consumer-types.ts",
73
74
  prepack: "bun run verify:generated && bun run verify:release && bun run verify:consumer-types",
74
75
  prepublishOnly: "bun run verify:producer && bun run typecheck && bun run test",
package/bin/server.js CHANGED
@@ -24122,7 +24122,7 @@ var init_dist_es9 = __esm(() => {
24122
24122
  // package.json
24123
24123
  var package_default = {
24124
24124
  name: "@hasna/skills",
24125
- version: "0.10.5",
24125
+ version: "0.10.8",
24126
24126
  description: "Skills library for AI coding agents",
24127
24127
  type: "module",
24128
24128
  bin: {
@@ -24184,6 +24184,7 @@ var package_default = {
24184
24184
  migrate: "bun run ./src/server/migrate.ts",
24185
24185
  typecheck: "tsc --noEmit",
24186
24186
  "verify:release": "bun run scripts/release-guard.ts",
24187
+ "verify:release-review": "bun run scripts/verify-release-review.ts",
24187
24188
  "verify:consumer-types": "bun run scripts/consumer-types.ts",
24188
24189
  prepack: "bun run verify:generated && bun run verify:release && bun run verify:consumer-types",
24189
24190
  prepublishOnly: "bun run verify:producer && bun run typecheck && bun run test",
package/bin/worker.js CHANGED
@@ -24125,7 +24125,7 @@ import { randomUUID as randomUUID6 } from "crypto";
24125
24125
  // package.json
24126
24126
  var package_default = {
24127
24127
  name: "@hasna/skills",
24128
- version: "0.10.5",
24128
+ version: "0.10.8",
24129
24129
  description: "Skills library for AI coding agents",
24130
24130
  type: "module",
24131
24131
  bin: {
@@ -24187,6 +24187,7 @@ var package_default = {
24187
24187
  migrate: "bun run ./src/server/migrate.ts",
24188
24188
  typecheck: "tsc --noEmit",
24189
24189
  "verify:release": "bun run scripts/release-guard.ts",
24190
+ "verify:release-review": "bun run scripts/verify-release-review.ts",
24190
24191
  "verify:consumer-types": "bun run scripts/consumer-types.ts",
24191
24192
  prepack: "bun run verify:generated && bun run verify:release && bun run verify:consumer-types",
24192
24193
  prepublishOnly: "bun run verify:producer && bun run typecheck && bun run test",
package/dist/index.js CHANGED
@@ -9611,7 +9611,7 @@ import { isAbsolute as isAbsolute11, join as join23, resolve as resolve11 } from
9611
9611
  // package.json
9612
9612
  var package_default = {
9613
9613
  name: "@hasna/skills",
9614
- version: "0.10.5",
9614
+ version: "0.10.8",
9615
9615
  description: "Skills library for AI coding agents",
9616
9616
  type: "module",
9617
9617
  bin: {
@@ -9673,6 +9673,7 @@ var package_default = {
9673
9673
  migrate: "bun run ./src/server/migrate.ts",
9674
9674
  typecheck: "tsc --noEmit",
9675
9675
  "verify:release": "bun run scripts/release-guard.ts",
9676
+ "verify:release-review": "bun run scripts/verify-release-review.ts",
9676
9677
  "verify:consumer-types": "bun run scripts/consumer-types.ts",
9677
9678
  prepack: "bun run verify:generated && bun run verify:release && bun run verify:consumer-types",
9678
9679
  prepublishOnly: "bun run verify:producer && bun run typecheck && bun run test",
@@ -14136,6 +14137,9 @@ function assertManagedAgentBridge(agent, options = {}) {
14136
14137
  const runtimeCache = canonicalAgentPath(join16(home, ".cache", "codex-runtimes"), aliases);
14137
14138
  if (entry.path.startsWith(runtimeCache + sep4) && discovery?.method === "automatic" && discovery.roots.some((root) => entry.path.startsWith(root + sep4)))
14138
14139
  return true;
14140
+ const bundledMarketplaces = canonicalAgentPath(join16(home, ".codex", ".tmp", "bundled-marketplaces"), aliases);
14141
+ if (entry.path.startsWith(bundledMarketplaces + sep4) && discovery?.method === "automatic" && discovery.roots.some((root) => entry.path.startsWith(root + sep4)))
14142
+ return true;
14139
14143
  if (!entry.path.startsWith(canonicalAgentPath(join16(home, ".codex", "skills", ".system"), aliases) + sep4))
14140
14144
  return false;
14141
14145
  return Array.isArray(binding.disabledBuiltins) && binding.disabledBuiltins.some((item) => item.path === entry.path && item.hash === entry.hash);
@@ -16867,6 +16871,7 @@ function captureDiscoveryPathSources(paths) {
16867
16871
  return paths.map((path) => ({ path, hashMode: "path-bytes", sha256: hashDiscoveryPathFile(path, budget) }));
16868
16872
  }
16869
16873
  function assertProjectDiscovery(agent, directories, home, canonical4 = resolve14, reviewed) {
16874
+ const homeConfigPath = canonical4(agentDiscoveryConfigPath(home, agent));
16870
16875
  for (const directory of directories) {
16871
16876
  const isHome = resolve14(directory) === resolve14(home);
16872
16877
  if (agent === "hermes") {
@@ -16880,7 +16885,8 @@ function assertProjectDiscovery(agent, directories, home, canonical4 = resolve14
16880
16885
  const path = canonical4(join26(directory, suffix)), raw = read2(path);
16881
16886
  if (raw === null)
16882
16887
  continue;
16883
- if (agent === "claude" && suffix === ".claude/settings.json" && path === canonical4(join26(home, suffix)))
16888
+ const isRootAliasedHomeConfig = agent === "claude" && suffix === ".claude/settings.json" || agent === "codex" && suffix === ".codex/config.toml";
16889
+ if (isRootAliasedHomeConfig && path === homeConfigPath)
16884
16890
  continue;
16885
16891
  if (suffix.endsWith(".jsonc"))
16886
16892
  throw new Error(`NATIVE_SKILL_DRIFT: project JSONC discovery configuration requires review: ${path}`);
@@ -1,4 +1,4 @@
1
- export declare const SUPPORTED_CODEX_HOOK_VERSIONS: readonly ["codex-cli 0.153.0", "codex-cli 0.154.0", "codex-cli 0.155.0", "codex-cli 0.155.1", "codex-cli 0.156.1"];
1
+ export declare const SUPPORTED_CODEX_HOOK_VERSIONS: readonly ["codex-cli 0.153.0", "codex-cli 0.154.0", "codex-cli 0.155.0", "codex-cli 0.155.1", "codex-cli 0.156.1", "codex-cli 0.157.0", "codex-cli 0.157.1"];
2
2
  export interface CodexHookRpc {
3
3
  version: string;
4
4
  processId?: number;
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Release review linkage for @hasna/skills npm releases.
3
+ *
4
+ * WHY THIS EXISTS
5
+ *
6
+ * @hasna/skills 0.10.5 and 0.10.6 reached npm without the release authority's
7
+ * required pre-upload linkage: an independent reviewer's GO in git-prs and the
8
+ * git-publishing intent thread, bound to the exact candidate AND to the packed
9
+ * tarball that was uploaded. A published version cannot be unpublished, so the only
10
+ * place a release can refuse is BEFORE the upload.
11
+ *
12
+ * The binding lives in the annotated release tag message, which is created
13
+ * before the tag is pushed and is covered by the same protected-main ancestry
14
+ * the release workflow already requires:
15
+ *
16
+ * @hasna/skills 0.10.7
17
+ *
18
+ * <release notes>
19
+ *
20
+ * Release-Review-Agent: <registered reviewer coding-agent identity>
21
+ * Git-Publishing-Thread: <release intent thread id>
22
+ * Git-Prs-GO: <message id of the independent GO in git-prs for this candidate>
23
+ * Packed-SHA256: <64 lowercase hex>
24
+ *
25
+ * "EXACTLY" is enforced, not implied: each of the four linkage keys must appear
26
+ * exactly once, the linkage namespace is closed (a fifth Release-Review-* /
27
+ * Git-Publishing-* / Git-Prs-* / Packed-* key is a failure, so a field can never be silently
28
+ * swapped for a look-alike), values are strictly shaped, and the recorded
29
+ * Packed-SHA256 must equal the SHA-256 of the tarball this checkout actually
30
+ * packs. There is no fallback: a missing, duplicated, malformed or mismatched
31
+ * field refuses the release.
32
+ *
33
+ * The reviewer's digest must be produced with the release toolchain at the exact
34
+ * commit (see scripts/RELEASE.md): `npm pack --ignore-scripts` in apps/skills
35
+ * after `bun run build`, hashed with SHA-256. A digest taken from a different
36
+ * toolchain, a different commit or a differently-built tree does not match by
37
+ * design, and the mismatch is the gate doing its job.
38
+ *
39
+ * This module is pure: git and npm I/O stay in scripts/verify-release-review.ts,
40
+ * and the release workflow runs `bun run verify:release-review` before it is
41
+ * allowed to publish.
42
+ */
43
+ export declare const SKILLS_RELEASE_REPOSITORY = "hasna/apps";
44
+ export declare const SKILLS_RELEASE_REPOSITORY_URL = "https://github.com/hasna/apps.git";
45
+ export declare const SKILLS_RELEASE_PACKAGE_PATH = "apps/skills";
46
+ export declare const SKILLS_RELEASE_MANIFEST_PATH = "apps/skills/package.json";
47
+ export declare const SKILLS_RELEASE_PACKAGE_NAME = "@hasna/skills";
48
+ export declare const SKILLS_RELEASE_REGISTRY = "https://registry.npmjs.org";
49
+ export declare const SKILLS_RELEASE_TAG_PREFIX = "npm/skills/v";
50
+ /** Field names carried by the annotated release tag message, in required order. */
51
+ export declare const RELEASE_REVIEW_LINKAGE_FIELDS: {
52
+ readonly reviewerAgent: "Release-Review-Agent";
53
+ readonly goThreadId: "Git-Publishing-Thread";
54
+ readonly goMessageId: "Git-Prs-GO";
55
+ readonly packedSha256: "Packed-SHA256";
56
+ };
57
+ export type ReleaseReviewLinkageFailure = {
58
+ check: string;
59
+ message: string;
60
+ };
61
+ export type ReleaseReviewLinkage = {
62
+ /** The registered coding-agent identity that performed the independent review. */
63
+ reviewerAgent: string;
64
+ /** Release intent thread in the git-publishing lane. */
65
+ goThreadId: string;
66
+ /** Message id of the independent GO in git-prs bound to this exact candidate. */
67
+ goMessageId: string;
68
+ /** SHA-256 of the packed release tarball, lowercase hex. */
69
+ packedSha256: string;
70
+ };
71
+ export type ReleaseReviewLinkageInput = {
72
+ tagMessage: string;
73
+ tag: string;
74
+ /** `git cat-file -t refs/tags/<tag>`; must be `tag` for an annotated tag. */
75
+ tagType: string;
76
+ /** `git rev-parse refs/tags/<tag>^{commit}`. */
77
+ tagCommit: string;
78
+ /** The exact checkout being released. */
79
+ releaseCommit: string;
80
+ packageName: string;
81
+ packageVersion: string;
82
+ repositoryUrl: string | undefined;
83
+ repositoryDirectory: string | undefined;
84
+ registry: string | undefined;
85
+ access: string | undefined;
86
+ /** SHA-256 computed from the tarball this checkout packs, when packing ran. */
87
+ packedSha256: string | undefined;
88
+ };
89
+ /** Resolve the semver a release tag carries, or undefined for any other tag. */
90
+ export declare function parseSkillsReleaseTagVersion(tag: string): string | undefined;
91
+ /**
92
+ * Parse the four linkage fields out of the annotated release tag message.
93
+ * Prose (subject and release notes) is allowed; the linkage namespace is not.
94
+ */
95
+ export declare function parseReleaseReviewLinkage(tagMessage: string): {
96
+ linkage: Partial<ReleaseReviewLinkage>;
97
+ failures: ReleaseReviewLinkageFailure[];
98
+ };
99
+ /**
100
+ * The complete preflight: tagged candidate identity, package binding and the
101
+ * packed digest recorded in the tag. Returns every failure it finds so one run
102
+ * names all of them; any failure refuses the release.
103
+ */
104
+ export declare function validateReleaseReviewLinkage(input: ReleaseReviewLinkageInput): ReleaseReviewLinkageFailure[];
package/dist/sdk/index.js CHANGED
@@ -32373,7 +32373,7 @@ var init_event_sink = __esm(() => {
32373
32373
  // package.json
32374
32374
  var package_default = {
32375
32375
  name: "@hasna/skills",
32376
- version: "0.10.5",
32376
+ version: "0.10.8",
32377
32377
  description: "Skills library for AI coding agents",
32378
32378
  type: "module",
32379
32379
  bin: {
@@ -32435,6 +32435,7 @@ var package_default = {
32435
32435
  migrate: "bun run ./src/server/migrate.ts",
32436
32436
  typecheck: "tsc --noEmit",
32437
32437
  "verify:release": "bun run scripts/release-guard.ts",
32438
+ "verify:release-review": "bun run scripts/verify-release-review.ts",
32438
32439
  "verify:consumer-types": "bun run scripts/consumer-types.ts",
32439
32440
  prepack: "bun run verify:generated && bun run verify:release && bun run verify:consumer-types",
32440
32441
  prepublishOnly: "bun run verify:producer && bun run typecheck && bun run test",
@@ -40665,6 +40666,7 @@ function captureDiscoveryPathSources(paths) {
40665
40666
  return paths.map((path) => ({ path, hashMode: "path-bytes", sha256: hashDiscoveryPathFile(path, budget) }));
40666
40667
  }
40667
40668
  function assertProjectDiscovery(agent, directories, home, canonical4 = resolve13, reviewed) {
40669
+ const homeConfigPath = canonical4(agentDiscoveryConfigPath(home, agent));
40668
40670
  for (const directory of directories) {
40669
40671
  const isHome = resolve13(directory) === resolve13(home);
40670
40672
  if (agent === "hermes") {
@@ -40678,7 +40680,8 @@ function assertProjectDiscovery(agent, directories, home, canonical4 = resolve13
40678
40680
  const path = canonical4(join20(directory, suffix)), raw = read2(path);
40679
40681
  if (raw === null)
40680
40682
  continue;
40681
- if (agent === "claude" && suffix === ".claude/settings.json" && path === canonical4(join20(home, suffix)))
40683
+ const isRootAliasedHomeConfig = agent === "claude" && suffix === ".claude/settings.json" || agent === "codex" && suffix === ".codex/config.toml";
40684
+ if (isRootAliasedHomeConfig && path === homeConfigPath)
40682
40685
  continue;
40683
40686
  if (suffix.endsWith(".jsonc"))
40684
40687
  throw new Error(`NATIVE_SKILL_DRIFT: project JSONC discovery configuration requires review: ${path}`);
@@ -42007,6 +42010,9 @@ function assertManagedAgentBridge(agent, options = {}) {
42007
42010
  const runtimeCache = canonicalAgentPath(join21(home, ".cache", "codex-runtimes"), aliases);
42008
42011
  if (entry.path.startsWith(runtimeCache + sep4) && discovery?.method === "automatic" && discovery.roots.some((root2) => entry.path.startsWith(root2 + sep4)))
42009
42012
  return true;
42013
+ const bundledMarketplaces = canonicalAgentPath(join21(home, ".codex", ".tmp", "bundled-marketplaces"), aliases);
42014
+ if (entry.path.startsWith(bundledMarketplaces + sep4) && discovery?.method === "automatic" && discovery.roots.some((root2) => entry.path.startsWith(root2 + sep4)))
42015
+ return true;
42010
42016
  if (!entry.path.startsWith(canonicalAgentPath(join21(home, ".codex", "skills", ".system"), aliases) + sep4))
42011
42017
  return false;
42012
42018
  return Array.isArray(binding.disabledBuiltins) && binding.disabledBuiltins.some((item) => item.path === entry.path && item.hash === entry.hash);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hasna/skills",
3
- "version": "0.10.5",
3
+ "version": "0.10.8",
4
4
  "description": "Skills library for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -62,6 +62,7 @@
62
62
  "migrate": "bun run ./src/server/migrate.ts",
63
63
  "typecheck": "tsc --noEmit",
64
64
  "verify:release": "bun run scripts/release-guard.ts",
65
+ "verify:release-review": "bun run scripts/verify-release-review.ts",
65
66
  "verify:consumer-types": "bun run scripts/consumer-types.ts",
66
67
  "prepack": "bun run verify:generated && bun run verify:release && bun run verify:consumer-types",
67
68
  "prepublishOnly": "bun run verify:producer && bun run typecheck && bun run test",