x-developer 2.6.7 → 2.7.1
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/.claude-plugin/marketplace.json +4 -4
- package/.claude-plugin/plugin.json +2 -27
- package/.codex-plugin/plugin.json +4 -28
- package/README.de.md +505 -0
- package/README.es.md +504 -0
- package/README.fr.md +507 -0
- package/README.it.md +499 -0
- package/README.ja.md +493 -0
- package/README.ko.md +494 -0
- package/README.md +486 -123
- package/README.tr.md +502 -0
- package/README.zh-CN.md +484 -0
- package/assets/logo-400.png +0 -0
- package/commands/post.md +3 -3
- package/commands/search.md +1 -1
- package/commands/trending.md +1 -1
- package/commands/user.md +1 -1
- package/context7.json +6 -12
- package/docker-mcp-registry/xquik/readme.md +1 -0
- package/docker-mcp-registry/xquik/server.yaml +23 -0
- package/docker-mcp-registry/xquik/tools.json +1 -0
- package/glama.json +4 -0
- package/mcp.json +9 -0
- package/openclaw.plugin.json +2 -2
- package/package.json +24 -20
- package/plugin.json +22 -0
- package/registry.json +60 -0
- package/server.json +2 -2
- package/skills/x-twitter-scraper/LICENSE +21 -0
- package/skills/x-twitter-scraper/SKILL.md +175 -457
- package/skills/x-twitter-scraper/metadata.json +19 -9
- package/skills/x-twitter-scraper/references/compare-faq.md +101 -0
- package/skills/x-twitter-scraper/references/extractions.md +65 -290
- package/skills/x-twitter-scraper/references/mcp.md +24 -0
- package/skills/x-twitter-scraper/references/monitors-webhooks.md +167 -0
- package/skills/x-twitter-scraper/references/reads.md +416 -0
- package/skills/x-twitter-scraper/references/writes.md +111 -0
- package/skills/xquik-mcp/SKILL.md +75 -0
- package/skills/xquik-mcp/references/mcp-setup.md +255 -0
- package/skills/xquik-social-research/SKILL.md +61 -74
- package/skills.sh.json +6 -68
- package/start.sh +2 -2
- package/stub-server.mjs +37 -86
- package/task-guides/check-mutuals.md +3 -3
- package/task-guides/clean-followers.md +4 -4
- package/task-guides/export-tweets-csv.md +7 -7
- package/task-guides/extract-followers.md +10 -10
- package/task-guides/find-bangers.md +2 -2
- package/task-guides/find-influencers.md +4 -4
- package/task-guides/find-viral-tweets.md +9 -9
- package/task-guides/follow-unfollow.md +5 -5
- package/task-guides/for-you-feed.md +4 -4
- package/task-guides/going-viral.md +6 -6
- package/task-guides/grow-followers.md +4 -4
- package/task-guides/monitor-accounts.md +5 -5
- package/task-guides/optimize-tweets.md +3 -3
- package/task-guides/post-tweets.md +13 -13
- package/task-guides/run-giveaway.md +5 -5
- package/task-guides/search-tweets.md +7 -7
- package/task-guides/send-dms.md +11 -11
- package/task-guides/top-replies.md +7 -7
- package/task-guides/track-competitors.md +10 -10
- package/task-guides/track-hashtags.md +11 -11
- package/task-guides/track-mentions.md +7 -7
- package/task-guides/trending-news.md +4 -4
- package/task-guides/tweet-analytics.md +12 -12
- package/task-guides/tweet-ideas.md +2 -2
- package/task-guides/tweet-replies.md +8 -8
- package/task-guides/tweet-style.md +4 -4
- package/task-guides/tweet-webhooks.md +7 -7
- package/task-guides/update-x-profile.md +5 -5
- package/task-guides/user-tweets.md +10 -10
- package/task-guides/who-liked.md +4 -4
- package/task-guides/who-quoted.md +4 -4
- package/task-guides/who-retweeted.md +4 -4
- package/task-guides/write-threads.md +6 -6
- package/task-guides/write-tweets.md +8 -8
- package/task-guides/x-articles.md +3 -3
- package/task-guides/x-bookmarks.md +4 -4
- package/task-guides/x-communities.md +4 -4
- package/task-guides/x-lists.md +4 -4
- package/task-guides/x-spaces.md +4 -4
- package/task-guides/x-trends.md +6 -6
- package/x-twitter-scraper.json +10 -0
- package/CHANGELOG.md +0 -94
- package/scripts/check-reproducible.mjs +0 -48
- package/scripts/check-versions.mjs +0 -24
- package/scripts/release-guard/content-policy.mjs +0 -410
- package/scripts/release-guard/context.mjs +0 -61
- package/scripts/release-guard/frontmatter.mjs +0 -151
- package/scripts/release-guard/policy-checks.mjs +0 -134
- package/scripts/release-guard/policy.mjs +0 -226
- package/scripts/release-guard/repository-checks.mjs +0 -256
- package/skills/x-twitter-scraper/references/api-endpoints-api-keys.md +0 -14
- package/skills/x-twitter-scraper/references/api-endpoints-compose.md +0 -33
- package/skills/x-twitter-scraper/references/api-endpoints-credits.md +0 -11
- package/skills/x-twitter-scraper/references/api-endpoints-drafts.md +0 -105
- package/skills/x-twitter-scraper/references/api-endpoints-draws.md +0 -101
- package/skills/x-twitter-scraper/references/api-endpoints-error-codes.md +0 -67
- package/skills/x-twitter-scraper/references/api-endpoints-events.md +0 -50
- package/skills/x-twitter-scraper/references/api-endpoints-extractions.md +0 -113
- package/skills/x-twitter-scraper/references/api-endpoints-monitors.md +0 -111
- package/skills/x-twitter-scraper/references/api-endpoints-radar.md +0 -50
- package/skills/x-twitter-scraper/references/api-endpoints-support.md +0 -53
- package/skills/x-twitter-scraper/references/api-endpoints-trends.md +0 -48
- package/skills/x-twitter-scraper/references/api-endpoints-tweet-style-cache.md +0 -186
- package/skills/x-twitter-scraper/references/api-endpoints-webhooks.md +0 -120
- package/skills/x-twitter-scraper/references/api-endpoints-x-accounts.md +0 -54
- package/skills/x-twitter-scraper/references/api-endpoints-x-api.md +0 -267
- package/skills/x-twitter-scraper/references/api-endpoints-x-media.md +0 -50
- package/skills/x-twitter-scraper/references/api-endpoints-x-write.md +0 -270
- package/skills/x-twitter-scraper/references/api-endpoints.md +0 -30
- package/skills/x-twitter-scraper/references/automate-twitter-giveaways.md +0 -130
- package/skills/x-twitter-scraper/references/best-x-api-alternative.md +0 -198
- package/skills/x-twitter-scraper/references/compare-twitter-apis.md +0 -151
- package/skills/x-twitter-scraper/references/draws.md +0 -57
- package/skills/x-twitter-scraper/references/export-twitter-followers.md +0 -127
- package/skills/x-twitter-scraper/references/extract-x-community-data.md +0 -121
- package/skills/x-twitter-scraper/references/mcp-setup.md +0 -331
- package/skills/x-twitter-scraper/references/mcp-tools.md +0 -183
- package/skills/x-twitter-scraper/references/monitor-twitter-webhooks.md +0 -121
- package/skills/x-twitter-scraper/references/python-examples.md +0 -201
- package/skills/x-twitter-scraper/references/reliable-twitter-data-api-2026.md +0 -239
- package/skills/x-twitter-scraper/references/scrape-export-twitter-data.md +0 -173
- package/skills/x-twitter-scraper/references/security.md +0 -111
- package/skills/x-twitter-scraper/references/track-twitter-keywords-mentions.md +0 -148
- package/skills/x-twitter-scraper/references/twitter-api-alternative-faq.md +0 -128
- package/skills/x-twitter-scraper/references/twitter-api-without-x-account.md +0 -110
- package/skills/x-twitter-scraper/references/twitter-data-pipeline.md +0 -136
- package/skills/x-twitter-scraper/references/twitter-scraper-api-guide.md +0 -229
- package/skills/x-twitter-scraper/references/types-account-identity.md +0 -9
- package/skills/x-twitter-scraper/references/types-account.md +0 -26
- package/skills/x-twitter-scraper/references/types-api-keys.md +0 -22
- package/skills/x-twitter-scraper/references/types-bookmarks-and-timeline.md +0 -46
- package/skills/x-twitter-scraper/references/types-credits.md +0 -11
- package/skills/x-twitter-scraper/references/types-download-media.md +0 -22
- package/skills/x-twitter-scraper/references/types-draws.md +0 -60
- package/skills/x-twitter-scraper/references/types-error.md +0 -29
- package/skills/x-twitter-scraper/references/types-events.md +0 -23
- package/skills/x-twitter-scraper/references/types-extractions.md +0 -136
- package/skills/x-twitter-scraper/references/types-mcp-output-schemas.md +0 -13
- package/skills/x-twitter-scraper/references/types-monitors.md +0 -49
- package/skills/x-twitter-scraper/references/types-radar.md +0 -47
- package/skills/x-twitter-scraper/references/types-request-bodies.md +0 -30
- package/skills/x-twitter-scraper/references/types-rest-api-vs-mcp-field-naming.md +0 -11
- package/skills/x-twitter-scraper/references/types-support.md +0 -46
- package/skills/x-twitter-scraper/references/types-trends.md +0 -21
- package/skills/x-twitter-scraper/references/types-tweet-drafts.md +0 -20
- package/skills/x-twitter-scraper/references/types-tweet-style-cache.md +0 -50
- package/skills/x-twitter-scraper/references/types-user-activity.md +0 -35
- package/skills/x-twitter-scraper/references/types-webhooks.md +0 -46
- package/skills/x-twitter-scraper/references/types-x-accounts.md +0 -16
- package/skills/x-twitter-scraper/references/types-x-api.md +0 -144
- package/skills/x-twitter-scraper/references/types-x-articles.md +0 -36
- package/skills/x-twitter-scraper/references/types-x-write.md +0 -78
- package/skills/x-twitter-scraper/references/types.md +0 -31
- package/skills/x-twitter-scraper/references/usage.md +0 -50
- package/skills/x-twitter-scraper/references/webhooks.md +0 -321
- package/skills/x-twitter-scraper/references/workflows.md +0 -215
- package/skills/x-twitter-scraper/skill-card.md +0 -84
- package/skills/x-twitter-scraper/skillspector-report.md +0 -20
package/task-guides/x-lists.md
CHANGED
|
@@ -5,7 +5,7 @@ license: MIT
|
|
|
5
5
|
metadata:
|
|
6
6
|
internal: true
|
|
7
7
|
author: Xquik
|
|
8
|
-
version: "2.
|
|
8
|
+
version: "2.7.1"
|
|
9
9
|
openclaw:
|
|
10
10
|
requires:
|
|
11
11
|
env:
|
|
@@ -28,7 +28,7 @@ metadata:
|
|
|
28
28
|
|
|
29
29
|
# X Lists
|
|
30
30
|
|
|
31
|
-
Read
|
|
31
|
+
Read the members, followers, and timeline feed of any visible X List.
|
|
32
32
|
|
|
33
33
|
## Choose an endpoint
|
|
34
34
|
|
|
@@ -39,7 +39,7 @@ Read X Lists: members, followers, and the timeline feed of any public list.
|
|
|
39
39
|
| POST /extractions with toolType=list_post_extractor | Posts in a list's feed | Per-row |
|
|
40
40
|
| POST /extractions/estimate | Preview usage before running | Included |
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
The base URL is `https://xquik.com/api/v1`. Authenticate with the `x-api-key: xq_...` header.
|
|
43
43
|
|
|
44
44
|
## Example requests
|
|
45
45
|
|
|
@@ -58,7 +58,7 @@ All three list extractors use `targetListId`. The server accepts the raw ID from
|
|
|
58
58
|
|
|
59
59
|
1. Get the list ID from the URL (`x.com/i/lists/<id>`).
|
|
60
60
|
2. Call `POST /extractions/estimate`, show the usage estimate.
|
|
61
|
-
3. On
|
|
61
|
+
3. On confirmation, `POST /extractions`. Poll `GET /extractions/{id}` until `completed`.
|
|
62
62
|
4. Export `GET /extractions/{id}/export?format=csv`.
|
|
63
63
|
|
|
64
64
|
## Protect list data
|
package/task-guides/x-spaces.md
CHANGED
|
@@ -5,7 +5,7 @@ license: MIT
|
|
|
5
5
|
metadata:
|
|
6
6
|
internal: true
|
|
7
7
|
author: Xquik
|
|
8
|
-
version: "2.
|
|
8
|
+
version: "2.7.1"
|
|
9
9
|
openclaw:
|
|
10
10
|
requires:
|
|
11
11
|
env:
|
|
@@ -37,7 +37,7 @@ List the host, co-hosts, speakers, and listeners in an X Space.
|
|
|
37
37
|
| POST /extractions with toolType=space_explorer | Space participants and role | Per-row |
|
|
38
38
|
| POST /extractions/estimate | Preview usage before running | Included |
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
The base URL is `https://xquik.com/api/v1`. Authenticate with the `x-api-key: xq_...` header.
|
|
41
41
|
|
|
42
42
|
## Example requests
|
|
43
43
|
|
|
@@ -50,12 +50,12 @@ POST /extractions
|
|
|
50
50
|
-> 202 { "id": "<extractionId>", "toolType": "space_explorer", "status": "running" }
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
-
Each row
|
|
53
|
+
Each row is `{ username, name, role: "host"|"cohost"|"speaker"|"listener", joined_at }`.
|
|
54
54
|
|
|
55
55
|
## Fetch the Space data
|
|
56
56
|
|
|
57
57
|
1. Get the Space ID from the URL (`x.com/i/spaces/<id>`).
|
|
58
|
-
2. Run the extraction with user
|
|
58
|
+
2. Run the extraction with user confirmation.
|
|
59
59
|
3. Export or summarize participant list.
|
|
60
60
|
|
|
61
61
|
## Protect Space data
|
package/task-guides/x-trends.md
CHANGED
|
@@ -5,7 +5,7 @@ license: MIT
|
|
|
5
5
|
metadata:
|
|
6
6
|
internal: true
|
|
7
7
|
author: Xquik
|
|
8
|
-
version: "2.
|
|
8
|
+
version: "2.7.1"
|
|
9
9
|
openclaw:
|
|
10
10
|
requires:
|
|
11
11
|
env:
|
|
@@ -38,7 +38,7 @@ Get trending hashtags and topics from X by country or globally. Read-only.
|
|
|
38
38
|
| GET /x/trends?woeid=<woeid> | Region-scoped trends | Read tier |
|
|
39
39
|
| GET /trends?woeid=<woeid> | Alias for `/x/trends` | Read tier |
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
The base URL is `https://xquik.com/api/v1`. Authenticate with the `x-api-key: xq_...` header.
|
|
42
42
|
|
|
43
43
|
## Example request
|
|
44
44
|
|
|
@@ -47,10 +47,10 @@ GET /x/trends?woeid=23424977&count=30
|
|
|
47
47
|
-> { trends: [{ name, description, query, promotedContent, rank, tweetVolume, url }], total, woeid }
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
-
- `woeid
|
|
51
|
-
- `count
|
|
52
|
-
- `tweetVolume
|
|
53
|
-
- `description
|
|
50
|
+
- `woeid` is the Yahoo WOEID (`1` worldwide, `23424977` US, `23424975` UK, `23424969` Turkey). Omit for worldwide.
|
|
51
|
+
- `count` is the number of trends to return, 1-50.
|
|
52
|
+
- `tweetVolume` is the approximate visible post volume when supplied, otherwise null
|
|
53
|
+
- `description` is optional context for the trend
|
|
54
54
|
|
|
55
55
|
## Fetch the trends
|
|
56
56
|
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "x-twitter-scraper",
|
|
4
|
+
"type": "registry:item",
|
|
5
|
+
"title": "X Twitter scraper Skill",
|
|
6
|
+
"description": "Install the Skill for Xquik, the world's fastest and cheapest X Twitter scraper service with the most complete X data. Covers searches, exports, monitors, webhooks, and supported account actions. Not affiliated with X Corp.",
|
|
7
|
+
"registryDependencies": [
|
|
8
|
+
"Xquik-dev/x-twitter-scraper/x-twitter-scraper"
|
|
9
|
+
]
|
|
10
|
+
}
|
package/CHANGELOG.md
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
## [2.6.7] - 2026-08-21
|
|
4
|
-
|
|
5
|
-
- Tighten thread review instructions without changing the approval gate.
|
|
6
|
-
|
|
7
|
-
## [2.6.6] - 2026-08-20
|
|
8
|
-
|
|
9
|
-
### Added
|
|
10
|
-
|
|
11
|
-
- Add native shadcn, Codex, Gemini CLI, and LobeHub installation paths.
|
|
12
|
-
|
|
13
|
-
### Changed
|
|
14
|
-
|
|
15
|
-
- Rewrite public documentation, metadata, guides, commands, and tool descriptions.
|
|
16
|
-
- Add supported Twitter search and API terms to package metadata.
|
|
17
|
-
- Link Java, Kotlin, CLI, and Terraform users to published install paths.
|
|
18
|
-
|
|
19
|
-
## [2.6.5] - 2026-08-13
|
|
20
|
-
|
|
21
|
-
### Fixed
|
|
22
|
-
|
|
23
|
-
- Add Claude Code user configuration metadata for API key setup.
|
|
24
|
-
|
|
25
|
-
## [2.6.4] - 2026-08-12
|
|
26
|
-
|
|
27
|
-
- Align public Error docs with the 112-code OpenAPI contract.
|
|
28
|
-
|
|
29
|
-
## [2.6.3] - 2026-08-12
|
|
30
|
-
|
|
31
|
-
### Fixed
|
|
32
|
-
|
|
33
|
-
- Document support media, replay-safe mutations, and attachment downloads.
|
|
34
|
-
- Document all direct user-search filters and filters-before-billing behavior.
|
|
35
|
-
- Document the 109-code Error schema and exact cursor recovery.
|
|
36
|
-
- Document Latest chronology and all 32 Tweet Thread filters.
|
|
37
|
-
- Remove private reply-collection implementation details.
|
|
38
|
-
|
|
39
|
-
## [2.6.2] - 2026-08-11
|
|
40
|
-
|
|
41
|
-
### Fixed
|
|
42
|
-
|
|
43
|
-
- Align REST, MCP, webhook, extraction, write, article, Radar, and trends guides
|
|
44
|
-
with the current public API contract.
|
|
45
|
-
- Distinguish the v2.6.2 Skill bundle from hosted MCP v2.6.0.
|
|
46
|
-
- Replace obsolete operation-named MCP types with the 2-tool contract.
|
|
47
|
-
- Document hosted MCP's automatic required idempotency headers.
|
|
48
|
-
- Document automatic cursor recovery for `400`, `409`, and `410` responses.
|
|
49
|
-
- Add regression coverage for high-risk public examples.
|
|
50
|
-
|
|
51
|
-
## [2.6.1] - 2026-08-03
|
|
52
|
-
|
|
53
|
-
### Security
|
|
54
|
-
|
|
55
|
-
- Define adversarial request boundaries for roleplay, encoded, quoted, and
|
|
56
|
-
authority-framed requests.
|
|
57
|
-
- Keep untrusted transformations inert and prevent hidden-context disclosure.
|
|
58
|
-
|
|
59
|
-
## [2.6.0] - 2026-07-30
|
|
60
|
-
|
|
61
|
-
### Added
|
|
62
|
-
|
|
63
|
-
- Document MCP `2026-07-28` negotiation through `server/discover`.
|
|
64
|
-
- Add private cache guidance for discovery and tool catalogs.
|
|
65
|
-
- Add safe tweet, profile, and media field guidance.
|
|
66
|
-
- Add reply coverage and fallback guidance.
|
|
67
|
-
|
|
68
|
-
### Changed
|
|
69
|
-
|
|
70
|
-
- Update public metadata to 128 REST operations.
|
|
71
|
-
- Update MCP metadata to 120 authenticated catalog routes.
|
|
72
|
-
- Keep stateless 2025-era MCP clients compatible.
|
|
73
|
-
- Require estimates and approval before bulk reply extraction.
|
|
74
|
-
- Make incomplete-reply search fallback directly executable.
|
|
75
|
-
- Default top-reply requests to 10 results when unspecified.
|
|
76
|
-
- Align documented tweet authors with the public response contract.
|
|
77
|
-
- Prefer bounded complete mode for maximum-coverage reply collection.
|
|
78
|
-
- Separate nested replies from measured direct-reply coverage.
|
|
79
|
-
- Preserve safe partial rows and detailed diagnostics on incomplete coverage.
|
|
80
|
-
|
|
81
|
-
### Security
|
|
82
|
-
|
|
83
|
-
- Exclude fetching-account action and permission state from general reads.
|
|
84
|
-
- Return follow relationships only from explicit relationship checks.
|
|
85
|
-
- Refresh SkillSpector v2.3.7 evidence with 0 findings.
|
|
86
|
-
|
|
87
|
-
[2.6.7]: https://github.com/Xquik-dev/x-twitter-scraper/releases/tag/v2.6.7
|
|
88
|
-
[2.6.6]: https://github.com/Xquik-dev/x-twitter-scraper/releases/tag/v2.6.6
|
|
89
|
-
[2.6.5]: https://github.com/Xquik-dev/x-twitter-scraper/releases/tag/v2.6.5
|
|
90
|
-
[2.6.4]: https://github.com/Xquik-dev/x-twitter-scraper/releases/tag/v2.6.4
|
|
91
|
-
[2.6.3]: https://github.com/Xquik-dev/x-twitter-scraper/releases/tag/v2.6.3
|
|
92
|
-
[2.6.2]: https://github.com/Xquik-dev/x-twitter-scraper/releases/tag/v2.6.2
|
|
93
|
-
[2.6.1]: https://github.com/Xquik-dev/x-twitter-scraper/releases/tag/v2.6.1
|
|
94
|
-
[2.6.0]: https://github.com/Xquik-dev/x-twitter-scraper/releases/tag/v2.6.0
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
// SPDX-FileCopyrightText: 2026 Xquik Contributors
|
|
2
|
-
// SPDX-License-Identifier: MIT
|
|
3
|
-
|
|
4
|
-
import assert from "node:assert/strict";
|
|
5
|
-
import { spawnSync } from "node:child_process";
|
|
6
|
-
import { mkdir, mkdtemp, readdir, readFile, rm } from "node:fs/promises";
|
|
7
|
-
import { tmpdir } from "node:os";
|
|
8
|
-
import { join } from "node:path";
|
|
9
|
-
|
|
10
|
-
function runNpm(args) {
|
|
11
|
-
const result = spawnSync("npm", args, { stdio: "inherit" });
|
|
12
|
-
if (result.error !== undefined) {
|
|
13
|
-
throw result.error;
|
|
14
|
-
}
|
|
15
|
-
if (result.status !== 0) {
|
|
16
|
-
throw new Error(`npm ${args.join(" ")} failed with status ${result.status}`);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
async function readPackage(directory) {
|
|
21
|
-
const packageNames = (await readdir(directory)).filter((name) =>
|
|
22
|
-
name.endsWith(".tgz"),
|
|
23
|
-
);
|
|
24
|
-
assert.equal(packageNames.length, 1, "Expected exactly one package archive");
|
|
25
|
-
return readFile(join(directory, packageNames[0]));
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const workspace = await mkdtemp(join(tmpdir(), "x-developer-reproducible-"));
|
|
29
|
-
|
|
30
|
-
try {
|
|
31
|
-
const firstPack = join(workspace, "first");
|
|
32
|
-
const secondPack = join(workspace, "second");
|
|
33
|
-
await mkdir(firstPack);
|
|
34
|
-
await mkdir(secondPack);
|
|
35
|
-
|
|
36
|
-
runNpm(["pack", "--ignore-scripts", "--pack-destination", firstPack]);
|
|
37
|
-
runNpm(["pack", "--ignore-scripts", "--pack-destination", secondPack]);
|
|
38
|
-
|
|
39
|
-
assert.deepEqual(
|
|
40
|
-
await readPackage(secondPack),
|
|
41
|
-
await readPackage(firstPack),
|
|
42
|
-
"Repeated package archives differ",
|
|
43
|
-
);
|
|
44
|
-
} finally {
|
|
45
|
-
await rm(workspace, { force: true, recursive: true });
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
process.stdout.write("Package archives are reproducible.\n");
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
// SPDX-FileCopyrightText: 2026 Xquik Contributors
|
|
4
|
-
// SPDX-License-Identifier: MIT
|
|
5
|
-
|
|
6
|
-
// Pre-publish and pre-commit guard for every public package contract.
|
|
7
|
-
|
|
8
|
-
import { expected, readJson } from "./release-guard/context.mjs";
|
|
9
|
-
import { collectPolicyDrifts } from "./release-guard/policy-checks.mjs";
|
|
10
|
-
import { collectRepositoryDrifts } from "./release-guard/repository-checks.mjs";
|
|
11
|
-
|
|
12
|
-
const failures = [...collectPolicyDrifts(), ...collectRepositoryDrifts()];
|
|
13
|
-
const hostedMcpVersion = readJson("server.json").version;
|
|
14
|
-
|
|
15
|
-
if (failures.length > 0) {
|
|
16
|
-
process.stderr.write(
|
|
17
|
-
`Release guard failed (package.json = ${expected}):\n${failures.join("\n")}\n`,
|
|
18
|
-
);
|
|
19
|
-
process.exit(1);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
process.stdout.write(
|
|
23
|
-
`All bundle version files use ${expected}; hosted MCP uses ${hostedMcpVersion}\n`,
|
|
24
|
-
);
|