From 629444f5b9410dc7526104dec3e461d73e7e06fa Mon Sep 17 00:00:00 2001 From: Eric Manganaro Date: Sun, 7 Jun 2026 03:09:41 -0400 Subject: [PATCH] fix(intent): remove abandoned intent-library bin --- knip.json | 4 +- packages/intent/package.json | 9 +- packages/intent/src/intent-library.ts | 101 ----- packages/intent/src/library-scanner.ts | 175 -------- packages/intent/tests/library-scanner.test.ts | 425 ------------------ terminalOutput | 42 -- 6 files changed, 3 insertions(+), 753 deletions(-) delete mode 100644 packages/intent/src/intent-library.ts delete mode 100644 packages/intent/src/library-scanner.ts delete mode 100644 packages/intent/tests/library-scanner.test.ts delete mode 100644 terminalOutput diff --git a/knip.json b/knip.json index 885afaf..48ee7cc 100644 --- a/knip.json +++ b/knip.json @@ -11,9 +11,7 @@ "src/index.ts", "src/cli.ts", "src/core.ts", - "src/setup.ts", - "src/intent-library.ts", - "src/library-scanner.ts" + "src/setup.ts" ], "ignore": ["meta/**"], "ignoreDependencies": ["verdaccio", "@verdaccio/node-api"] diff --git a/packages/intent/package.json b/packages/intent/package.json index 1ea4a95..29b1112 100644 --- a/packages/intent/package.json +++ b/packages/intent/package.json @@ -13,18 +13,13 @@ "import": "./dist/index.mjs", "types": "./dist/index.d.mts" }, - "./intent-library": { - "import": "./dist/intent-library.mjs", - "types": "./dist/intent-library.d.mts" - }, "./core": { "import": "./dist/core.mjs", "types": "./dist/core.d.mts" } }, "bin": { - "intent": "dist/cli.mjs", - "intent-library": "dist/intent-library.mjs" + "intent": "dist/cli.mjs" }, "files": [ "dist", @@ -44,7 +39,7 @@ }, "scripts": { "prepack": "npm run build", - "build": "tsdown src/index.ts src/cli.ts src/setup.ts src/intent-library.ts src/library-scanner.ts src/core.ts --format esm --dts", + "build": "tsdown src/index.ts src/cli.ts src/setup.ts src/core.ts --format esm --dts", "test:smoke": "pnpm run build && node dist/cli.mjs --help > /dev/null && node dist/cli.mjs load --help > /dev/null", "test:lib": "vitest run --exclude 'tests/integration/**'", "test:integration": "vitest run tests/integration/", diff --git a/packages/intent/src/intent-library.ts b/packages/intent/src/intent-library.ts deleted file mode 100644 index 7d252e7..0000000 --- a/packages/intent/src/intent-library.ts +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env node - -import { computeSkillNameWidth, printSkillTree, printTable } from './display.js' -import { INSTALL_PROMPT } from './commands/install.js' -import { scanLibrary } from './library-scanner.js' -import type { LibraryScanResult } from './library-scanner.js' - -// --------------------------------------------------------------------------- -// Commands -// --------------------------------------------------------------------------- - -function cmdList(): void { - let result: LibraryScanResult - try { - result = scanLibrary(process.argv[1]!, process.cwd()) - } catch (err) { - console.error((err as Error).message) - process.exit(1) - } - - if (result.packages.length === 0) { - console.log('No intent-enabled packages found.') - if (result.warnings.length > 0) { - console.log('\nWarnings:') - for (const w of result.warnings) console.log(` ⚠ ${w}`) - } - return - } - - const totalSkills = result.packages.reduce( - (sum, p) => sum + p.skills.length, - 0, - ) - console.log( - `\n${result.packages.length} intent-enabled packages, ${totalSkills} skills\n`, - ) - - // Summary table - const rows = result.packages.map((pkg) => [ - pkg.name, - pkg.version, - String(pkg.skills.length), - ]) - printTable(['PACKAGE', 'VERSION', 'SKILLS'], rows) - - // Skills detail - const allSkills = result.packages.map((p) => p.skills) - const nameWidth = computeSkillNameWidth(allSkills) - const showTypes = result.packages.some((p) => p.skills.some((s) => s.type)) - - console.log(`\nSkills:\n`) - for (const pkg of result.packages) { - console.log(` ${pkg.name}`) - printSkillTree(pkg.skills, { nameWidth, packageName: pkg.name, showTypes }) - console.log() - } - - console.log(`Feedback:`) - console.log( - ` Submit feedback on skill usage to help maintainers improve the skills.`, - ) - console.log( - ` Load: node_modules/@tanstack/intent/meta/feedback-collection/SKILL.md`, - ) - console.log() - - if (result.warnings.length > 0) { - console.log(`Warnings:`) - for (const w of result.warnings) console.log(` ⚠ ${w}`) - } -} - -function cmdInstall(): void { - console.log(INSTALL_PROMPT) -} - -// --------------------------------------------------------------------------- -// Main -// --------------------------------------------------------------------------- - -const USAGE = `TanStack Intent - -Usage: - intent list List all available skills from this library and its dependencies - intent install Print a skill that guides your coding agent to scan the project - and set up skill loading guidance in your agent config` - -const command = process.argv[2] - -switch (command) { - case 'list': - case undefined: - cmdList() - break - case 'install': - cmdInstall() - break - default: - console.log(USAGE) - process.exit(command ? 1 : 0) -} diff --git a/packages/intent/src/library-scanner.ts b/packages/intent/src/library-scanner.ts deleted file mode 100644 index e3d331e..0000000 --- a/packages/intent/src/library-scanner.ts +++ /dev/null @@ -1,175 +0,0 @@ -import { existsSync, readFileSync, readdirSync } from 'node:fs' -import { dirname, join, relative } from 'node:path' -import { rewriteSkillLoadPaths } from './skill-paths.js' -import { - getDeps, - parseFrontmatter, - resolveDepDir, - toPosixPath, -} from './utils.js' -import type { SkillEntry } from './types.js' -import type { Dirent } from 'node:fs' - -// --------------------------------------------------------------------------- -// Types -// --------------------------------------------------------------------------- - -export interface LibraryPackage { - name: string - version: string - description: string - skills: Array -} - -export interface LibraryScanResult { - packages: Array - warnings: Array -} - -// --------------------------------------------------------------------------- -// Helpers -// --------------------------------------------------------------------------- - -function readPkgJson(dir: string): Record | null { - try { - return JSON.parse(readFileSync(join(dir, 'package.json'), 'utf8')) - } catch { - return null - } -} - -function findHomeDir(scriptPath: string): string | null { - let dir = dirname(scriptPath) - for (;;) { - if (existsSync(join(dir, 'package.json'))) return dir - const parent = dirname(dir) - if (parent === dir) return null - dir = parent - } -} - -function isIntentPackage(pkg: Record): boolean { - const keywords = pkg.keywords - if (Array.isArray(keywords) && keywords.includes('tanstack-intent')) { - return true - } - // Legacy fallback: packages published before the keyword-based detection - // change may only have bin.intent. Keep this until a breaking release. - const bin = pkg.bin - if ( - bin && - typeof bin === 'object' && - 'intent' in (bin as Record) - ) { - return true - } - return false -} - -function discoverSkills(skillsDir: string): Array { - const skills: Array = [] - - function walk(dir: string): void { - let entries: Array> - try { - entries = readdirSync(dir, { withFileTypes: true, encoding: 'utf8' }) - } catch { - return - } - for (const entry of entries) { - if (!entry.isDirectory()) continue - const childDir = join(dir, entry.name) - const skillFile = join(childDir, 'SKILL.md') - if (existsSync(skillFile)) { - const fm = parseFrontmatter(skillFile) - const relName = toPosixPath(relative(skillsDir, childDir)) - skills.push({ - name: typeof fm?.name === 'string' ? fm.name : relName, - path: skillFile, - description: - typeof fm?.description === 'string' - ? fm.description.replace(/\s+/g, ' ').trim() - : '', - type: typeof fm?.type === 'string' ? fm.type : undefined, - framework: - typeof fm?.framework === 'string' ? fm.framework : undefined, - }) - } - // Always recurse into subdirectories so skills nested under - // intermediate grouping directories (dirs without SKILL.md) are found. - walk(childDir) - } - } - - walk(skillsDir) - return skills -} - -// --------------------------------------------------------------------------- -// Main scanner -// --------------------------------------------------------------------------- - -export function scanLibrary( - scriptPath: string, - projectRoot?: string, -): LibraryScanResult { - const packages: Array = [] - const warnings: Array = [] - const visited = new Set() - - const homeDir = findHomeDir(scriptPath) - if (!homeDir) { - return { - packages, - warnings: ['Could not determine home package directory'], - } - } - - const homePkg = readPkgJson(homeDir) - if (!homePkg) { - return { packages, warnings: ['Could not read home package.json'] } - } - - const homeName = typeof homePkg.name === 'string' ? homePkg.name : '' - const scanRoot = projectRoot ?? homeDir - - function processPackage(name: string, dir: string): void { - if (visited.has(name)) return - visited.add(name) - - const pkg = readPkgJson(dir) - if (!pkg) { - warnings.push(`Could not read package.json for ${name}`) - return - } - - const skillsDir = join(dir, 'skills') - const skills = existsSync(skillsDir) ? discoverSkills(skillsDir) : [] - - rewriteSkillLoadPaths({ - packageName: name, - packageRoot: dir, - projectRoot: scanRoot, - skills, - }) - - packages.push({ - name, - version: typeof pkg.version === 'string' ? pkg.version : '0.0.0', - description: typeof pkg.description === 'string' ? pkg.description : '', - skills, - }) - - for (const depName of getDeps(pkg)) { - const depDir = resolveDepDir(depName, dir) - if (!depDir) continue - const depPkg = readPkgJson(depDir) - if (depPkg && isIntentPackage(depPkg)) { - processPackage(depName, depDir) - } - } - } - - processPackage(homeName, homeDir) - return { packages, warnings } -} diff --git a/packages/intent/tests/library-scanner.test.ts b/packages/intent/tests/library-scanner.test.ts deleted file mode 100644 index 5865b29..0000000 --- a/packages/intent/tests/library-scanner.test.ts +++ /dev/null @@ -1,425 +0,0 @@ -import { - mkdirSync, - mkdtempSync, - rmSync, - symlinkSync, - writeFileSync, -} from 'node:fs' -import { join } from 'node:path' -import { tmpdir } from 'node:os' -import { afterEach, beforeEach, describe, expect, it } from 'vitest' -import { scanLibrary } from '../src/library-scanner.js' - -// --------------------------------------------------------------------------- -// Helpers -// --------------------------------------------------------------------------- - -function createDir(...segments: Array): string { - const dir = join(...segments) - mkdirSync(dir, { recursive: true }) - return dir -} - -function writeJson(filePath: string, data: unknown): void { - writeFileSync(filePath, JSON.stringify(data, null, 2)) -} - -function writeSkillMd(dir: string, frontmatter: Record): void { - const yamlLines = Object.entries(frontmatter) - .map(([k, v]) => `${k}: ${typeof v === 'string' ? `"${v}"` : v}`) - .join('\n') - writeFileSync( - join(dir, 'SKILL.md'), - `---\n${yamlLines}\n---\n\nSkill content here.\n`, - ) -} - -// Construct a script path inside the package directory. -// findHomeDir walks up from dirname(scriptPath) to find the nearest package.json. -function scriptPath(pkgDir: string): string { - return join(pkgDir, 'bin', 'intent.js') -} - -// --------------------------------------------------------------------------- -// Setup / Teardown -// --------------------------------------------------------------------------- - -let root: string - -beforeEach(() => { - root = mkdtempSync(join(tmpdir(), 'library-scanner-test-')) -}) - -afterEach(() => { - rmSync(root, { recursive: true, force: true }) -}) - -// --------------------------------------------------------------------------- -// Tests -// --------------------------------------------------------------------------- - -describe('scanLibrary', () => { - it('returns the home package with its skills', () => { - const pkgDir = createDir(root, 'node_modules', '@tanstack', 'router') - writeJson(join(pkgDir, 'package.json'), { - name: '@tanstack/router', - version: '1.2.0', - description: 'Type-safe router for React', - keywords: ['tanstack-intent'], - }) - const skillDir = createDir(pkgDir, 'skills', 'routing') - writeSkillMd(skillDir, { - name: 'routing', - description: 'File-based route definitions', - }) - - const result = scanLibrary(scriptPath(pkgDir), root) - - expect(result.warnings).toEqual([]) - expect(result.packages).toHaveLength(1) - expect(result.packages[0]!.name).toBe('@tanstack/router') - expect(result.packages[0]!.version).toBe('1.2.0') - expect(result.packages[0]!.description).toBe('Type-safe router for React') - expect(result.packages[0]!.skills).toHaveLength(1) - expect(result.packages[0]!.skills[0]!.name).toBe('routing') - expect(result.packages[0]!.skills[0]!.description).toBe( - 'File-based route definitions', - ) - }) - - it('includes the full path to each SKILL.md', () => { - const pkgDir = createDir(root, 'node_modules', '@tanstack', 'router') - writeJson(join(pkgDir, 'package.json'), { - name: '@tanstack/router', - version: '1.0.0', - keywords: ['tanstack-intent'], - }) - const skillDir = createDir(pkgDir, 'skills', 'routing') - writeSkillMd(skillDir, { name: 'routing', description: 'Routing patterns' }) - - const result = scanLibrary(scriptPath(pkgDir), root) - - const skill = result.packages[0]!.skills[0]! - expect(skill.path).toBe( - 'node_modules/@tanstack/router/skills/routing/SKILL.md', - ) - }) - - it('recursively discovers deps with tanstack-intent keyword', () => { - // Home package: @tanstack/router, depends on @tanstack/query - const routerDir = createDir(root, 'node_modules', '@tanstack', 'router') - writeJson(join(routerDir, 'package.json'), { - name: '@tanstack/router', - version: '1.0.0', - description: 'Router', - keywords: ['tanstack-intent'], - dependencies: { '@tanstack/query': '^5.0.0' }, - }) - const routerSkill = createDir(routerDir, 'skills', 'routing') - writeSkillMd(routerSkill, { - name: 'routing', - description: 'Route definitions', - }) - - // Dep package: @tanstack/query - const queryDir = createDir(root, 'node_modules', '@tanstack', 'query') - writeJson(join(queryDir, 'package.json'), { - name: '@tanstack/query', - version: '5.0.0', - description: 'Async state management', - keywords: ['tanstack-intent'], - }) - const querySkill = createDir(queryDir, 'skills', 'fetching') - writeSkillMd(querySkill, { - name: 'fetching', - description: 'Query and mutation patterns', - }) - - const result = scanLibrary(scriptPath(routerDir), root) - - expect(result.warnings).toEqual([]) - expect(result.packages).toHaveLength(2) - - const names = result.packages.map((p) => p.name) - expect(names).toContain('@tanstack/router') - expect(names).toContain('@tanstack/query') - - const query = result.packages.find((p) => p.name === '@tanstack/query')! - expect(query.skills[0]!.name).toBe('fetching') - expect(query.skills[0]!.description).toBe('Query and mutation patterns') - }) - - it('does not invent top-level load paths for pnpm-style transitive deps', () => { - const routerStoreDir = createDir( - root, - 'node_modules', - '.pnpm', - '@tanstack+router@1.0.0', - 'node_modules', - '@tanstack', - 'router', - ) - writeJson(join(routerStoreDir, 'package.json'), { - name: '@tanstack/router', - version: '1.0.0', - keywords: ['tanstack-intent'], - dependencies: { '@tanstack/query': '^5.0.0' }, - }) - const routerSkill = createDir(routerStoreDir, 'skills', 'routing') - writeSkillMd(routerSkill, { name: 'routing', description: 'Routing' }) - - const queryStoreDir = createDir( - root, - 'node_modules', - '.pnpm', - '@tanstack+query@5.0.0', - 'node_modules', - '@tanstack', - 'query', - ) - writeJson(join(queryStoreDir, 'package.json'), { - name: '@tanstack/query', - version: '5.0.0', - keywords: ['tanstack-intent'], - }) - const querySkill = createDir(queryStoreDir, 'skills', 'fetching') - writeSkillMd(querySkill, { name: 'fetching', description: 'Fetching' }) - - createDir(routerStoreDir, 'node_modules', '@tanstack') - symlinkSync( - queryStoreDir, - join(routerStoreDir, 'node_modules', '@tanstack', 'query'), - ) - createDir(root, 'node_modules', '@tanstack') - symlinkSync( - routerStoreDir, - join(root, 'node_modules', '@tanstack', 'router'), - ) - - const result = scanLibrary( - scriptPath(join(root, 'node_modules', '@tanstack', 'router')), - root, - ) - - const query = result.packages.find((p) => p.name === '@tanstack/query')! - expect(query.skills[0]!.path).not.toBe( - 'node_modules/@tanstack/query/skills/fetching/SKILL.md', - ) - expect(query.skills[0]!.path).toContain('node_modules/.pnpm/') - }) - - it('discovers deps via peerDependencies', () => { - const pkgDir = createDir(root, 'node_modules', '@tanstack', 'router') - writeJson(join(pkgDir, 'package.json'), { - name: '@tanstack/router', - version: '1.0.0', - keywords: ['tanstack-intent'], - peerDependencies: { '@tanstack/query': '^5.0.0' }, - }) - - const queryDir = createDir(root, 'node_modules', '@tanstack', 'query') - writeJson(join(queryDir, 'package.json'), { - name: '@tanstack/query', - version: '5.0.0', - keywords: ['tanstack-intent'], - }) - const querySkill = createDir(queryDir, 'skills', 'fetching') - writeSkillMd(querySkill, { name: 'fetching', description: 'Fetching' }) - - const result = scanLibrary(scriptPath(pkgDir), root) - - const names = result.packages.map((p) => p.name) - expect(names).toContain('@tanstack/query') - }) - - it('skips deps without tanstack-intent keyword or bin.intent', () => { - const pkgDir = createDir(root, 'node_modules', '@tanstack', 'router') - writeJson(join(pkgDir, 'package.json'), { - name: '@tanstack/router', - version: '1.0.0', - keywords: ['tanstack-intent'], - dependencies: { react: '^18.0.0' }, - }) - - const reactDir = createDir(root, 'node_modules', 'react') - writeJson(join(reactDir, 'package.json'), { - name: 'react', - version: '18.0.0', - // no tanstack-intent keyword or bin.intent - }) - const reactSkill = createDir(reactDir, 'skills', 'hooks') - writeSkillMd(reactSkill, { name: 'hooks', description: 'React hooks' }) - - const result = scanLibrary(scriptPath(pkgDir), root) - - const names = result.packages.map((p) => p.name) - expect(names).not.toContain('react') - }) - - it('follows deps with legacy bin.intent (backwards compat)', () => { - const pkgDir = createDir(root, 'node_modules', '@tanstack', 'router') - writeJson(join(pkgDir, 'package.json'), { - name: '@tanstack/router', - version: '1.0.0', - keywords: ['tanstack-intent'], - dependencies: { '@tanstack/query': '^5.0.0' }, - }) - const routerSkill = createDir(pkgDir, 'skills', 'routing') - writeSkillMd(routerSkill, { name: 'routing', description: 'Routing' }) - - // Legacy package: only has bin.intent, no keyword - const queryDir = createDir(root, 'node_modules', '@tanstack', 'query') - writeJson(join(queryDir, 'package.json'), { - name: '@tanstack/query', - version: '5.0.0', - bin: { intent: './bin/intent.js' }, - }) - const querySkill = createDir(queryDir, 'skills', 'fetching') - writeSkillMd(querySkill, { name: 'fetching', description: 'Fetching' }) - - const result = scanLibrary(scriptPath(pkgDir), root) - - const names = result.packages.map((p) => p.name) - expect(names).toContain('@tanstack/query') - }) - - it('skips deps with other keywords but not tanstack-intent', () => { - const pkgDir = createDir(root, 'node_modules', '@tanstack', 'router') - writeJson(join(pkgDir, 'package.json'), { - name: '@tanstack/router', - version: '1.0.0', - keywords: ['tanstack-intent'], - dependencies: { 'some-lib': '^1.0.0' }, - }) - - const libDir = createDir(root, 'node_modules', 'some-lib') - writeJson(join(libDir, 'package.json'), { - name: 'some-lib', - version: '1.0.0', - keywords: ['react', 'state-management'], - }) - const libSkill = createDir(libDir, 'skills', 'core') - writeSkillMd(libSkill, { name: 'core', description: 'Core patterns' }) - - const result = scanLibrary(scriptPath(pkgDir), root) - - const names = result.packages.map((p) => p.name) - expect(names).not.toContain('some-lib') - }) - - it('handles packages with no skills/ directory', () => { - const pkgDir = createDir(root, 'node_modules', '@tanstack', 'router') - writeJson(join(pkgDir, 'package.json'), { - name: '@tanstack/router', - version: '1.0.0', - keywords: ['tanstack-intent'], - }) - // No skills/ directory - - const result = scanLibrary(scriptPath(pkgDir), root) - - expect(result.packages).toHaveLength(1) - expect(result.packages[0]!.skills).toEqual([]) - }) - - it('does not visit the same package twice (cycle detection)', () => { - // router -> query -> router (circular) - const routerDir = createDir(root, 'node_modules', '@tanstack', 'router') - writeJson(join(routerDir, 'package.json'), { - name: '@tanstack/router', - version: '1.0.0', - keywords: ['tanstack-intent'], - dependencies: { '@tanstack/query': '^5.0.0' }, - }) - - const queryDir = createDir(root, 'node_modules', '@tanstack', 'query') - writeJson(join(queryDir, 'package.json'), { - name: '@tanstack/query', - version: '5.0.0', - keywords: ['tanstack-intent'], - dependencies: { '@tanstack/router': '^1.0.0' }, // circular back - }) - - const result = scanLibrary(scriptPath(routerDir), root) - - // Each package appears exactly once - const names = result.packages.map((p) => p.name) - expect(names).toHaveLength(2) - expect(new Set(names).size).toBe(2) - }) - - it('discovers sub-skills within a package', () => { - const pkgDir = createDir(root, 'node_modules', '@tanstack', 'router') - writeJson(join(pkgDir, 'package.json'), { - name: '@tanstack/router', - version: '1.0.0', - keywords: ['tanstack-intent'], - }) - const routingDir = createDir(pkgDir, 'skills', 'routing') - writeSkillMd(routingDir, { - name: 'routing', - description: 'Routing overview', - }) - const nestedDir = createDir(routingDir, 'nested-routes') - writeSkillMd(nestedDir, { - name: 'routing/nested-routes', - description: 'Nested route patterns', - }) - - const result = scanLibrary(scriptPath(pkgDir), root) - - const skills = result.packages[0]!.skills - expect(skills).toHaveLength(2) - const names = skills.map((s) => s.name) - expect(names).toContain('routing') - expect(names).toContain('routing/nested-routes') - }) - - it('discovers skills nested under intermediate dirs without SKILL.md', () => { - const pkgDir = createDir(root, 'node_modules', '@tanstack', 'router') - writeJson(join(pkgDir, 'package.json'), { - name: '@tanstack/router', - version: '1.0.0', - keywords: ['tanstack-intent'], - }) - // intermediate directory has no SKILL.md - const groupDir = createDir(pkgDir, 'skills', 'group') - const nestedDir = createDir(groupDir, 'nested-skill') - writeSkillMd(nestedDir, { - name: 'group/nested-skill', - description: 'A nested skill under a grouping dir', - }) - - const result = scanLibrary(scriptPath(pkgDir), root) - - const skills = result.packages[0]!.skills - expect(skills).toHaveLength(1) - expect(skills[0]!.name).toBe('group/nested-skill') - }) - - it('handles missing package name without producing double slashes in paths', () => { - const pkgDir = createDir(root, 'node_modules', 'no-name-pkg') - writeJson(join(pkgDir, 'package.json'), { - version: '1.0.0', - keywords: ['tanstack-intent'], - }) - const skillDir = createDir(pkgDir, 'skills', 'core') - writeSkillMd(skillDir, { name: 'core', description: 'Core skill' }) - - const result = scanLibrary(scriptPath(pkgDir), root) - - expect(result.packages).toHaveLength(1) - const skill = result.packages[0]!.skills[0]! - expect(skill.path).not.toContain('//') - }) - - it('returns a warning when home package.json cannot be found', () => { - const fakeScript = join(root, 'nowhere', 'bin', 'intent.js') - - const result = scanLibrary(fakeScript, root) - - expect(result.packages).toEqual([]) - expect(result.warnings).toHaveLength(1) - expect(result.warnings[0]).toMatch(/home package/i) - }) -}) diff --git a/terminalOutput b/terminalOutput deleted file mode 100644 index 6ba1000..0000000 --- a/terminalOutput +++ /dev/null @@ -1,42 +0,0 @@ - -> @tanstack/intent@0.0.31 build /home/runner/work/intent/intent/packages/intent -> tsdown src/index.ts src/cli.ts src/setup.ts src/intent-library.ts src/library-scanner.ts --format esm --dts - -ℹ tsdown v0.19.0 powered by rolldown v1.0.0-beta.59 -ℹ entry: src/index.ts, src/cli.ts, src/setup.ts, src/intent-library.ts, src/library-scanner.ts -ℹ tsconfig: tsconfig.json -ℹ Build start -ℹ Granting execute permission to dist/cli.d.mts -ℹ Granting execute permission to dist/cli.mjs -ℹ Granting execute permission to dist/intent-library.mjs -ℹ dist/cli.mjs 19.88 kB │ gzip: 6.14 kB -ℹ dist/index.mjs  8.77 kB │ gzip: 2.68 kB -ℹ dist/intent-library.mjs  2.47 kB │ gzip: 1.11 kB -ℹ dist/setup.mjs  0.53 kB │ gzip: 0.26 kB -ℹ dist/library-scanner.mjs  0.16 kB │ gzip: 0.13 kB -ℹ dist/install-BmVqcbEi.mjs 20.02 kB │ gzip: 6.37 kB -ℹ dist/scanner-DKL8v8is.mjs 14.89 kB │ gzip: 4.34 kB -ℹ dist/setup-JJvjiGkM.mjs  8.95 kB │ gzip: 2.92 kB -ℹ dist/workspace-patterns-U35B5AO-.mjs  6.44 kB │ gzip: 1.85 kB -ℹ dist/utils-COlDcU72.mjs  4.68 kB │ gzip: 1.84 kB -ℹ dist/staleness-DorwfGrf.mjs  3.95 kB │ gzip: 1.37 kB -ℹ dist/library-scanner-DFFreLjW.mjs  3.38 kB │ gzip: 1.29 kB -ℹ dist/resolver-aFigTqXi.mjs  2.60 kB │ gzip: 0.89 kB -ℹ dist/display-DUgtRJkt.mjs  2.54 kB │ gzip: 1.01 kB -ℹ dist/project-context-CKG-q4rD.mjs  2.13 kB │ gzip: 0.82 kB -ℹ dist/skill-paths-8k9K9y26.mjs  1.65 kB │ gzip: 0.71 kB -ℹ dist/skill-use-CXOnncWK.mjs  1.63 kB │ gzip: 0.56 kB -ℹ dist/utils-dkVvY7D7.mjs  0.33 kB │ gzip: 0.20 kB -ℹ dist/workspace-patterns-DbnA0peB.mjs  0.25 kB │ gzip: 0.17 kB -ℹ dist/display-DCRCp4-C.mjs  0.24 kB │ gzip: 0.17 kB -ℹ dist/scanner-CRZITpcY.mjs  0.20 kB │ gzip: 0.16 kB -ℹ dist/staleness-NF-lxfXf.mjs  0.12 kB │ gzip: 0.11 kB -ℹ dist/index.d.mts  5.02 kB │ gzip: 1.51 kB -ℹ dist/setup.d.mts  0.55 kB │ gzip: 0.23 kB -ℹ dist/library-scanner.d.mts  0.46 kB │ gzip: 0.27 kB -ℹ dist/cli.d.mts  0.13 kB │ gzip: 0.13 kB -ℹ dist/intent-library.d.mts  0.01 kB │ gzip: 0.03 kB -ℹ dist/types-CsySN6Vw.d.mts  2.72 kB │ gzip: 0.96 kB -ℹ dist/setup-DDoOLriA.d.mts  1.23 kB │ gzip: 0.40 kB -ℹ 29 files, total: 115.92 kB -✔ Build complete in 1394ms