@hasna/skills 0.10.6 → 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.
@@ -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[];