harveyz-skill 0.29.0 → 0.29.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/CHANGELOG.md +5 -0
- package/bin/cli.js +19 -0
- package/lib/version-check.js +29 -0
- package/package.json +1 -1
- package/skills/feed/manage-roster/scripts/__pycache__/roster_locate.cpython-314.pyc +0 -0
- package/skills/feed/manage-roster/tests/__pycache__/test_roster_locate.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/feed/sync-xtimeline/scripts/__pycache__/archive_tweets.cpython-314.pyc +0 -0
- package/skills/feed/sync-xtimeline/scripts/__pycache__/browser_fetch_cli.cpython-314.pyc +0 -0
- package/skills/feed/sync-xtimeline/scripts/__pycache__/browser_fetch_locate.cpython-314.pyc +0 -0
- package/skills/feed/sync-xtimeline/scripts/__pycache__/config.cpython-314.pyc +0 -0
- package/skills/feed/sync-xtimeline/scripts/__pycache__/cursor.cpython-314.pyc +0 -0
- package/skills/feed/sync-xtimeline/scripts/__pycache__/fetch_new_tweets.cpython-314.pyc +0 -0
- package/skills/feed/sync-xtimeline/scripts/__pycache__/mcp_timeline_client.cpython-314.pyc +0 -0
- package/skills/feed/sync-xtimeline/scripts/__pycache__/render_digest.cpython-314.pyc +0 -0
- package/skills/feed/sync-xtimeline/scripts/__pycache__/render_view.cpython-314.pyc +0 -0
- package/skills/feed/sync-xtimeline/scripts/__pycache__/roster_client.cpython-314.pyc +0 -0
- package/skills/feed/sync-xtimeline/scripts/__pycache__/roster_locate.cpython-314.pyc +0 -0
- package/skills/feed/sync-xtimeline/tests/__pycache__/conftest.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/feed/sync-xtimeline/tests/__pycache__/test_archive_tweets.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/feed/sync-xtimeline/tests/__pycache__/test_browser_fetch_locate.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/feed/sync-xtimeline/tests/__pycache__/test_cursor.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/feed/sync-xtimeline/tests/__pycache__/test_fetch_new_tweets.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/feed/sync-xtimeline/tests/__pycache__/test_mcp_timeline_client.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/feed/sync-xtimeline/tests/__pycache__/test_render_digest.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/feed/sync-xtimeline/tests/__pycache__/test_render_view.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/feed/sync-xtimeline/tests/__pycache__/test_roster_client.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/feed/sync-ytchannel/scripts/__pycache__/browser_fetch_cli.cpython-314.pyc +0 -0
- package/skills/feed/sync-ytchannel/scripts/__pycache__/browser_fetch_locate.cpython-314.pyc +0 -0
- package/skills/feed/sync-ytchannel/scripts/__pycache__/config.cpython-314.pyc +0 -0
- package/skills/feed/sync-ytchannel/scripts/__pycache__/cursor.cpython-314.pyc +0 -0
- package/skills/feed/sync-ytchannel/scripts/__pycache__/digest.cpython-314.pyc +0 -0
- package/skills/feed/sync-ytchannel/scripts/__pycache__/mcp_channel_client.cpython-314.pyc +0 -0
- package/skills/feed/sync-ytchannel/scripts/__pycache__/roster_client.cpython-314.pyc +0 -0
- package/skills/feed/sync-ytchannel/scripts/__pycache__/roster_locate.cpython-314.pyc +0 -0
- package/skills/feed/sync-ytchannel/scripts/__pycache__/sync_channels.cpython-314.pyc +0 -0
- package/skills/feed/sync-ytchannel/tests/__pycache__/conftest.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/feed/sync-ytchannel/tests/__pycache__/test_browser_fetch_locate.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/feed/sync-ytchannel/tests/__pycache__/test_cursor.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/feed/sync-ytchannel/tests/__pycache__/test_digest.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/feed/sync-ytchannel/tests/__pycache__/test_mcp_channel_client.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/feed/sync-ytchannel/tests/__pycache__/test_roster_client.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/feed/sync-ytchannel/tests/__pycache__/test_sync_channels.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/research/clip-url/scripts/__pycache__/browser_fetch_cli.cpython-314.pyc +0 -0
- package/skills/research/clip-url/scripts/__pycache__/browser_fetch_locate.cpython-314.pyc +0 -0
- package/skills/research/clip-url/scripts/__pycache__/mcp_debug_client.cpython-314.pyc +0 -0
- package/skills/research/clip-url/scripts/__pycache__/mcp_fetch_client.cpython-314.pyc +0 -0
- package/skills/research/clip-url/scripts/__pycache__/vault_config.cpython-314.pyc +0 -0
- package/skills/research/clip-url/tests/__pycache__/test_browser_fetch_locate.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/research/clip-url/tests/__pycache__/test_chrome_profile_config.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/research/clip-url/tests/__pycache__/test_detect_xcom_chrome_profile.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/research/clip-url/tests/__pycache__/test_mcp_debug_client.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/research/clip-url/tests/__pycache__/test_mcp_fetch_client.cpython-314-pytest-9.1.1.pyc +0 -0
- package/skills/research/clip-url/tests/__pycache__/test_vault_config.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/browser_fetch/__pycache__/__init__.cpython-314.pyc +0 -0
- package/tools/browser-fetch/browser_fetch/__pycache__/cli.cpython-314.pyc +0 -0
- package/tools/browser-fetch/browser_fetch/__pycache__/config.cpython-314.pyc +0 -0
- package/tools/browser-fetch/browser_fetch/__pycache__/cookies.cpython-314.pyc +0 -0
- package/tools/browser-fetch/browser_fetch/__pycache__/core.cpython-314.pyc +0 -0
- package/tools/browser-fetch/browser_fetch/__pycache__/extractors.cpython-314.pyc +0 -0
- package/tools/browser-fetch/browser_fetch/__pycache__/images.cpython-314.pyc +0 -0
- package/tools/browser-fetch/browser_fetch/__pycache__/markdown.cpython-314.pyc +0 -0
- package/tools/browser-fetch/browser_fetch/__pycache__/pacing.cpython-314.pyc +0 -0
- package/tools/browser-fetch/browser_fetch/__pycache__/pacing_log.cpython-314.pyc +0 -0
- package/tools/browser-fetch/browser_fetch/__pycache__/profiles.cpython-314.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/conftest.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_cli.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_cli_fetch.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_cli_page_eval.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_config.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_cookies.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_core_import.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_data_dir_migration.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_evaluate_js.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_extractors.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_extractors_timeline.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_extractors_youtube.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_fetch_article.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_fetch_channel_videos.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_fetch_user_timeline.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_images.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_launcher_python_version.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_launcher_stdout_contract.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_markdown.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_pacing.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_pacing_log.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/browser-fetch/tests/__pycache__/test_profiles.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/hub/tests/__pycache__/test_launcher_python_version.cpython-314-pytest-9.1.0.pyc +0 -0
- package/tools/roster/roster/__pycache__/__init__.cpython-314.pyc +0 -0
- package/tools/roster/roster/__pycache__/__main__.cpython-314.pyc +0 -0
- package/tools/roster/roster/__pycache__/config.cpython-314.pyc +0 -0
- package/tools/roster/roster/__pycache__/migrate.cpython-314.pyc +0 -0
- package/tools/roster/roster/__pycache__/profiles.cpython-314.pyc +0 -0
- package/tools/roster/roster/__pycache__/registry.cpython-314.pyc +0 -0
- package/tools/roster/roster/__pycache__/state.cpython-314.pyc +0 -0
- package/tools/roster/roster/__pycache__/urls.cpython-314.pyc +0 -0
- package/tools/roster/tests/__pycache__/conftest.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/roster/tests/__pycache__/test_cli.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/roster/tests/__pycache__/test_config.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/roster/tests/__pycache__/test_launcher_python_version.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/roster/tests/__pycache__/test_launcher_stdout_contract.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/roster/tests/__pycache__/test_migrate.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/roster/tests/__pycache__/test_profiles.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/roster/tests/__pycache__/test_registry.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/roster/tests/__pycache__/test_registry_merge.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/roster/tests/__pycache__/test_state.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/roster/tests/__pycache__/test_urls.cpython-314-pytest-9.1.1.pyc +0 -0
- package/tools/sync-agent/tests/__pycache__/test_launcher_python_version.cpython-314-pytest-9.1.1.pyc +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.29.1] - 2026-08-28
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- `hskill version --check`:检查 npm registry 上的最新版本并与本地版本比对,只报告不安装。支持 `--json`;网络/registry 请求失败时非零退出
|
|
14
|
+
|
|
10
15
|
## [0.29.0] - 2026-08-28
|
|
11
16
|
|
|
12
17
|
### Added
|
package/bin/cli.js
CHANGED
|
@@ -53,6 +53,7 @@ function printHelp() {
|
|
|
53
53
|
hskill update update hskill to the latest version
|
|
54
54
|
hskill mcp start an MCP server (stdio) exposing hskill's tools to MCP-capable agent hosts
|
|
55
55
|
hskill version show version
|
|
56
|
+
hskill version --check compare local version against npm registry (no install)
|
|
56
57
|
hskill --help show this help
|
|
57
58
|
|
|
58
59
|
${chalk.cyan('Examples:')}
|
|
@@ -156,6 +157,24 @@ if (args[0] === '--help' || args[0] === '-h') {
|
|
|
156
157
|
}
|
|
157
158
|
|
|
158
159
|
if (args[0] === '--version' || args[0] === '-v' || subcommand === 'version') {
|
|
160
|
+
if (subcommand === 'version' && args.includes('--check')) {
|
|
161
|
+
try {
|
|
162
|
+
const { checkNpmVersion } = await import('../lib/version-check.js')
|
|
163
|
+
const { current, latest, upToDate } = await checkNpmVersion('harveyz-skill', version)
|
|
164
|
+
if (jsonFlag) {
|
|
165
|
+
console.log(JSON.stringify({ current, latest, upToDate }, null, 2))
|
|
166
|
+
} else if (upToDate) {
|
|
167
|
+
console.log(chalk.green(` ✔ hskill v${current} is up to date`))
|
|
168
|
+
} else {
|
|
169
|
+
console.log(chalk.yellow(` ⚠ hskill v${current} → v${latest} available`))
|
|
170
|
+
console.log(chalk.dim(' Run: npm install -g harveyz-skill@latest'))
|
|
171
|
+
}
|
|
172
|
+
} catch (err) {
|
|
173
|
+
console.error(chalk.red(` ✗ Could not check npm registry: ${err.message}`))
|
|
174
|
+
process.exit(1)
|
|
175
|
+
}
|
|
176
|
+
process.exit(0)
|
|
177
|
+
}
|
|
159
178
|
console.log(version)
|
|
160
179
|
process.exit(0)
|
|
161
180
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const DEFAULT_REGISTRY = 'https://registry.npmjs.org'
|
|
2
|
+
const REGISTRY_TIMEOUT_MS = 5000
|
|
3
|
+
|
|
4
|
+
export function compareVersions(a, b) {
|
|
5
|
+
const pa = a.split('.').map(Number)
|
|
6
|
+
const pb = b.split('.').map(Number)
|
|
7
|
+
for (let i = 0; i < Math.max(pa.length, pb.length); i++) {
|
|
8
|
+
const diff = (pa[i] || 0) - (pb[i] || 0)
|
|
9
|
+
if (diff !== 0) return diff
|
|
10
|
+
}
|
|
11
|
+
return 0
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export async function checkNpmVersion(pkgName, currentVersion) {
|
|
15
|
+
const registryUrl = process.env.HSKILL_NPM_REGISTRY || DEFAULT_REGISTRY
|
|
16
|
+
const controller = new AbortController()
|
|
17
|
+
const timer = setTimeout(() => controller.abort(), REGISTRY_TIMEOUT_MS)
|
|
18
|
+
let res
|
|
19
|
+
try {
|
|
20
|
+
res = await fetch(`${registryUrl}/${pkgName}/latest`, { signal: controller.signal })
|
|
21
|
+
} finally {
|
|
22
|
+
clearTimeout(timer)
|
|
23
|
+
}
|
|
24
|
+
if (!res.ok) {
|
|
25
|
+
throw new Error(`npm registry returned ${res.status} for ${pkgName}`)
|
|
26
|
+
}
|
|
27
|
+
const { version: latest } = await res.json()
|
|
28
|
+
return { current: currentVersion, latest, upToDate: compareVersions(currentVersion, latest) >= 0 }
|
|
29
|
+
}
|
package/package.json
CHANGED
|
Binary file
|
package/skills/feed/manage-roster/tests/__pycache__/test_roster_locate.cpython-314-pytest-9.1.1.pyc
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/skills/feed/sync-xtimeline/tests/__pycache__/test_cursor.cpython-314-pytest-9.1.1.pyc
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/skills/feed/sync-xtimeline/tests/__pycache__/test_render_digest.cpython-314-pytest-9.1.1.pyc
CHANGED
|
Binary file
|
package/skills/feed/sync-xtimeline/tests/__pycache__/test_render_view.cpython-314-pytest-9.1.1.pyc
CHANGED
|
Binary file
|
package/skills/feed/sync-xtimeline/tests/__pycache__/test_roster_client.cpython-314-pytest-9.1.1.pyc
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/skills/feed/sync-ytchannel/tests/__pycache__/test_cursor.cpython-314-pytest-9.1.1.pyc
CHANGED
|
Binary file
|
package/skills/feed/sync-ytchannel/tests/__pycache__/test_digest.cpython-314-pytest-9.1.1.pyc
CHANGED
|
Binary file
|
|
Binary file
|
package/skills/feed/sync-ytchannel/tests/__pycache__/test_roster_client.cpython-314-pytest-9.1.1.pyc
CHANGED
|
Binary file
|
package/skills/feed/sync-ytchannel/tests/__pycache__/test_sync_channels.cpython-314-pytest-9.1.1.pyc
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/skills/research/clip-url/tests/__pycache__/test_vault_config.cpython-314-pytest-9.1.1.pyc
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/tools/browser-fetch/tests/__pycache__/test_cli_page_eval.cpython-314-pytest-9.1.1.pyc
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/tools/browser-fetch/tests/__pycache__/test_data_dir_migration.cpython-314-pytest-9.1.1.pyc
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/tools/browser-fetch/tests/__pycache__/test_extractors_timeline.cpython-314-pytest-9.1.1.pyc
CHANGED
|
Binary file
|
package/tools/browser-fetch/tests/__pycache__/test_extractors_youtube.cpython-314-pytest-9.1.1.pyc
CHANGED
|
Binary file
|
package/tools/browser-fetch/tests/__pycache__/test_fetch_article.cpython-314-pytest-9.1.1.pyc
CHANGED
|
Binary file
|
package/tools/browser-fetch/tests/__pycache__/test_fetch_channel_videos.cpython-314-pytest-9.1.1.pyc
CHANGED
|
Binary file
|
package/tools/browser-fetch/tests/__pycache__/test_fetch_user_timeline.cpython-314-pytest-9.1.1.pyc
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/tools/hub/tests/__pycache__/test_launcher_python_version.cpython-314-pytest-9.1.0.pyc
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/tools/roster/tests/__pycache__/test_launcher_python_version.cpython-314-pytest-9.1.1.pyc
CHANGED
|
Binary file
|
package/tools/roster/tests/__pycache__/test_launcher_stdout_contract.cpython-314-pytest-9.1.1.pyc
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|