Skip to content

Commit 541f96c

Browse files
committed
chore: release 0.0.2
1 parent 3af9cdf commit 541f96c

File tree

6 files changed

+58
-30
lines changed

6 files changed

+58
-30
lines changed

CHANGELOG.md

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,27 @@
11
# Changelog
22

3-
## 0.0.2 — Unreleased
4-
- CLI: make changelog optional for updates (`publish`, `sync`).
5-
- Registry: allow empty changelog on updated versions.
6-
- CLI: use `--cli-version` (free `--version` for skill semver flags).
7-
- CLI: add `delete` / `undelete` (owner/admin) for soft deletion.
8-
- Registry: hide soft-deleted skills from `search`, `skill`, `download` (unless restored).
3+
## 0.0.2 - 2026-01-04
4+
5+
### Added
6+
- CLI: delete/undelete commands for soft-deleted skills (owner/admin).
7+
8+
### Fixed
9+
- CLI sync: dedupe duplicate slugs across scan roots; skip duplicates to avoid double-publish errors.
10+
- CLI sync: show parsing progress while hashing local skills.
11+
- CLI sync: prompt only actionable skills; preselect all by default; list synced separately; condensed synced summary when nothing to sync.
12+
- CLI sync: cap long status lists to avoid massive terminal boxes.
13+
- CLI publish/sync: allow empty changelog on updates; registry accepts empty changelog for updates.
14+
- CLI: use `--cli-version` to avoid conflict with skill `--version` flags.
15+
- Registry: hide soft-deleted skills from search/skill/download unless restored.
916
- Tests: add delete/undelete coverage (unit + e2e).
1017

11-
## 0.0.1 — 2026-01-04
12-
- Initial beta release of `clawdhub` CLI + `clawdhub-schema`.
18+
## 0.0.1 - 2026-01-04
19+
20+
### Features
21+
- CLI auth: login/logout/whoami; browser loopback auth; token storage; site/registry discovery; config overrides.
22+
- CLI workflow: search, install, update (single/all), list, publish, sync (scan workdir + legacy roots), dry-run, version bumping, tags.
23+
- Registry/API: skills + versions with semver; tags (latest + custom); changelog per version; SKILL.md frontmatter parsing; text-only validation; zip download; hash resolve; stats (downloads/stars/versions/comments).
24+
- Web app: home (highlighted + latest), search, skill detail (README, versions, tags, stats, files), upload UI, user profiles, stars, settings (profile + API tokens + delete account).
25+
- Social: stars + comments with moderation hooks; admin console for roles + highlighted curation.
26+
- Search: semantic/vector search over skill content with limit/approved filters.
27+
- Security: GitHub OAuth; role-based access (admin/moderator/user); audit logging for admin actions.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
},
2222
"dependencies": {
2323
"@auth/core": "^0.41.1",
24-
"clawdhub-schema": "^0.0.1",
24+
"clawdhub-schema": "^0.0.2",
2525
"@convex-dev/auth": "^0.0.90",
2626
"@fontsource/bricolage-grotesque": "^5.2.10",
2727
"@fontsource/ibm-plex-mono": "^5.2.7",

packages/clawdhub/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "clawdhub",
3-
"version": "0.0.1",
3+
"version": "0.0.2",
44
"description": "ClawdHub CLI — install, update, search, and publish agent skills.",
55
"license": "MIT",
66
"type": "module",
@@ -20,7 +20,7 @@
2020
},
2121
"dependencies": {
2222
"@clack/prompts": "^0.11.0",
23-
"clawdhub-schema": "^0.0.1",
23+
"clawdhub-schema": "^0.0.2",
2424
"commander": "^14.0.2",
2525
"fflate": "^0.8.2",
2626
"ignore": "^7.0.5",

packages/clawdhub/src/cli/commands/sync.test.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import type { GlobalOpts } from '../types'
66
const mockIntro = vi.fn()
77
const mockOutro = vi.fn()
88
const mockNote = vi.fn()
9-
const mockMultiselect = vi.fn(async () => [])
9+
const mockMultiselect = vi.fn<Promise<string[]>, [unknown?]>(async () => [])
1010
let interactive = false
1111

1212
const defaultFindSkillFolders = async (root: string) => {
@@ -127,7 +127,7 @@ describe('cmdSync', () => {
127127

128128
it('prints bullet lists and selects all actionable by default', async () => {
129129
interactive = true
130-
mockMultiselect.mockImplementation(async (args: unknown) => {
130+
mockMultiselect.mockImplementation(async (args?: unknown) => {
131131
const { initialValues } = args as { initialValues: string[] }
132132
return initialValues
133133
})
@@ -161,7 +161,8 @@ describe('cmdSync', () => {
161161
const syncedNote = mockNote.mock.calls.find((call) => call[0] === 'Already synced')
162162
expect(syncedNote?.[1]).toMatch(/- synced-skill/)
163163

164-
const promptArgs = mockMultiselect.mock.calls.at(-1)?.[0] as { initialValues: string[] }
164+
const lastCall = mockMultiselect.mock.calls.at(-1)
165+
const promptArgs = lastCall ? (lastCall[0] as { initialValues: string[] }) : undefined
165166
expect(promptArgs?.initialValues.length).toBe(2)
166167
expect(mockCmdPublish).toHaveBeenCalledTimes(2)
167168
})

packages/clawdhub/src/cli/commands/sync.ts

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,13 @@ export async function cmdSync(opts: GlobalOpts, options: SyncOptions, inputAllow
150150
matchVersion = remote === skill.fingerprint ? latestVersion : null
151151
}
152152

153-
candidates.push({
154-
...skill,
155-
status: matchVersion ? 'synced' : 'update',
156-
matchVersion,
157-
latestVersion,
158-
})
159-
}
153+
candidates.push({
154+
...skill,
155+
status: matchVersion ? 'synced' : 'update',
156+
matchVersion,
157+
latestVersion,
158+
})
159+
}
160160
} catch (error) {
161161
candidatesSpinner.fail(formatError(error))
162162
throw error
@@ -176,9 +176,15 @@ export async function cmdSync(opts: GlobalOpts, options: SyncOptions, inputAllow
176176
return
177177
}
178178

179-
note('To sync', formatBulletList(actionable.map((candidate) => formatActionableLine(candidate, bump))))
179+
note(
180+
'To sync',
181+
formatBulletList(
182+
actionable.map((candidate) => formatActionableLine(candidate, bump)),
183+
20,
184+
),
185+
)
180186
if (synced.length > 0) {
181-
note('Already synced', formatBulletList(synced.map(formatSyncedLine)))
187+
note('Already synced', formatSyncedDisplay(synced))
182188
}
183189

184190
const selected = await selectToUpload(actionable, {
@@ -350,10 +356,7 @@ function dedupeSkillsBySlug(skills: SkillFolder[]) {
350356
return { skills: unique, duplicates }
351357
}
352358

353-
function formatActionableStatus(
354-
candidate: Candidate,
355-
bump: 'patch' | 'minor' | 'major',
356-
): string {
359+
function formatActionableStatus(candidate: Candidate, bump: 'patch' | 'minor' | 'major'): string {
357360
if (candidate.status === 'new') return 'NEW'
358361
const latest = candidate.latestVersion
359362
const next = latest ? semver.inc(latest, bump) : null
@@ -375,8 +378,17 @@ function formatSyncedSummary(candidate: Candidate): string {
375378
return version ? `${candidate.slug}@${version}` : candidate.slug
376379
}
377380

378-
function formatBulletList(lines: string[]): string {
379-
return lines.map((line) => `- ${line}`).join('\n')
381+
function formatBulletList(lines: string[], max: number): string {
382+
if (lines.length <= max) return lines.map((line) => `- ${line}`).join('\n')
383+
const head = lines.slice(0, max)
384+
const rest = lines.length - head.length
385+
return [...head, `... +${rest} more`].map((line) => `- ${line}`).join('\n')
386+
}
387+
388+
function formatSyncedDisplay(synced: Candidate[]) {
389+
const lines = synced.map(formatSyncedLine)
390+
if (lines.length <= 12) return formatBulletList(lines, 12)
391+
return formatCommaList(synced.map(formatSyncedSummary), 24)
380392
}
381393

382394
function formatCommaList(values: string[], max: number) {

packages/schema/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "clawdhub-schema",
3-
"version": "0.0.1",
3+
"version": "0.0.2",
44
"type": "module",
55
"exports": {
66
".": {

0 commit comments

Comments
 (0)