@lumy-pack/line-lore 0.0.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.
Files changed (77) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +188 -0
  3. package/dist/ast/index.d.ts +1 -0
  4. package/dist/ast/parser.d.ts +6 -0
  5. package/dist/cache/file-cache.d.ts +19 -0
  6. package/dist/cache/index.d.ts +1 -0
  7. package/dist/cli.d.ts +1 -0
  8. package/dist/cli.mjs +2288 -0
  9. package/dist/commands/cache.d.ts +2 -0
  10. package/dist/commands/graph.d.ts +2 -0
  11. package/dist/commands/health.d.ts +2 -0
  12. package/dist/commands/index.d.ts +4 -0
  13. package/dist/commands/trace.d.ts +2 -0
  14. package/dist/components/TraceProgress.d.ts +7 -0
  15. package/dist/components/TraceResult.d.ts +8 -0
  16. package/dist/components/index.d.ts +2 -0
  17. package/dist/core/ancestry/ancestry.d.ts +10 -0
  18. package/dist/core/ancestry/index.d.ts +2 -0
  19. package/dist/core/ast-diff/ast-diff.d.ts +4 -0
  20. package/dist/core/ast-diff/comparison/index.d.ts +2 -0
  21. package/dist/core/ast-diff/comparison/structure-comparator.d.ts +4 -0
  22. package/dist/core/ast-diff/extraction/index.d.ts +2 -0
  23. package/dist/core/ast-diff/extraction/signature-hasher.d.ts +4 -0
  24. package/dist/core/ast-diff/extraction/symbol-extractor.d.ts +3 -0
  25. package/dist/core/ast-diff/index.d.ts +4 -0
  26. package/dist/core/blame/blame.d.ts +3 -0
  27. package/dist/core/blame/detection/cosmetic-detector.d.ts +7 -0
  28. package/dist/core/blame/detection/index.d.ts +2 -0
  29. package/dist/core/blame/index.d.ts +4 -0
  30. package/dist/core/blame/parsing/blame-parser.d.ts +2 -0
  31. package/dist/core/blame/parsing/index.d.ts +1 -0
  32. package/dist/core/core.d.ts +14 -0
  33. package/dist/core/index.d.ts +11 -0
  34. package/dist/core/issue-graph/index.d.ts +2 -0
  35. package/dist/core/issue-graph/issue-graph.d.ts +5 -0
  36. package/dist/core/patch-id/index.d.ts +2 -0
  37. package/dist/core/patch-id/patch-id.d.ts +11 -0
  38. package/dist/core/pr-lookup/index.d.ts +1 -0
  39. package/dist/core/pr-lookup/pr-lookup.d.ts +3 -0
  40. package/dist/errors.d.ts +32 -0
  41. package/dist/git/executor.d.ts +2 -0
  42. package/dist/git/health.d.ts +4 -0
  43. package/dist/git/index.d.ts +3 -0
  44. package/dist/git/remote.d.ts +6 -0
  45. package/dist/index.cjs +1904 -0
  46. package/dist/index.d.ts +6 -0
  47. package/dist/index.mjs +1872 -0
  48. package/dist/output/formats.d.ts +5 -0
  49. package/dist/output/index.d.ts +2 -0
  50. package/dist/output/normalizer.d.ts +11 -0
  51. package/dist/platform/github/github-adapter.d.ts +17 -0
  52. package/dist/platform/github/github-enterprise-adapter.d.ts +8 -0
  53. package/dist/platform/github/index.d.ts +2 -0
  54. package/dist/platform/gitlab/gitlab-adapter.d.ts +17 -0
  55. package/dist/platform/gitlab/gitlab-self-hosted-adapter.d.ts +8 -0
  56. package/dist/platform/gitlab/index.d.ts +2 -0
  57. package/dist/platform/index.d.ts +6 -0
  58. package/dist/platform/platform.d.ts +9 -0
  59. package/dist/platform/scheduler/index.d.ts +2 -0
  60. package/dist/platform/scheduler/request-scheduler.d.ts +17 -0
  61. package/dist/types/ast.d.ts +28 -0
  62. package/dist/types/blame.d.ts +34 -0
  63. package/dist/types/cache.d.ts +5 -0
  64. package/dist/types/git.d.ts +23 -0
  65. package/dist/types/graph.d.ts +15 -0
  66. package/dist/types/index.d.ts +11 -0
  67. package/dist/types/output.d.ts +24 -0
  68. package/dist/types/pipeline.d.ts +28 -0
  69. package/dist/types/platform.d.ts +44 -0
  70. package/dist/types/stage.d.ts +14 -0
  71. package/dist/types/trace.d.ts +38 -0
  72. package/dist/types/util.d.ts +4 -0
  73. package/dist/utils/command-registry.d.ts +29 -0
  74. package/dist/utils/index.d.ts +1 -0
  75. package/dist/utils/line-range.d.ts +2 -0
  76. package/dist/version.d.ts +1 -0
  77. package/package.json +71 -0
@@ -0,0 +1,5 @@
1
+ import type { TraceFullResult } from '../core/core.js';
2
+ export declare function formatHuman(result: TraceFullResult): string;
3
+ export declare function formatJson(result: TraceFullResult): string;
4
+ export declare function formatLlm(result: TraceFullResult): string;
5
+ export declare function formatQuiet(result: TraceFullResult): string;
@@ -0,0 +1,2 @@
1
+ export { formatHuman, formatJson, formatLlm, formatQuiet } from './formats.js';
2
+ export { createErrorResponse, createPartialResponse, createSuccessResponse, } from './normalizer.js';
@@ -0,0 +1,11 @@
1
+ import type { NormalizedResponse, OperatingLevel } from '../types/index.js';
2
+ export declare function createSuccessResponse<T>(command: string, data: T, operatingLevel: OperatingLevel, options?: {
3
+ warnings?: string[];
4
+ cacheHit?: boolean;
5
+ }): NormalizedResponse<T>;
6
+ export declare function createPartialResponse<T>(command: string, partialData: Partial<T>, operatingLevel: OperatingLevel, warnings: string[]): NormalizedResponse<T>;
7
+ export declare function createErrorResponse(command: string, code: string, message: string, operatingLevel: OperatingLevel, options?: {
8
+ stage?: number;
9
+ recoverable?: boolean;
10
+ suggestion?: string;
11
+ }): NormalizedResponse<never>;
@@ -0,0 +1,17 @@
1
+ import type { AuthStatus, IssueInfo, PRInfo, PlatformAdapter, RateLimitInfo } from '../../types/index.js';
2
+ import { RequestScheduler } from '../scheduler/index.js';
3
+ export declare class GitHubAdapter implements PlatformAdapter {
4
+ readonly platform: PlatformAdapter['platform'];
5
+ private readonly scheduler;
6
+ private readonly hostname;
7
+ constructor(options?: {
8
+ hostname?: string;
9
+ scheduler?: RequestScheduler;
10
+ });
11
+ checkAuth(): Promise<AuthStatus>;
12
+ getPRForCommit(sha: string): Promise<PRInfo | null>;
13
+ getPRCommits(prNumber: number): Promise<string[]>;
14
+ getLinkedIssues(prNumber: number): Promise<IssueInfo[]>;
15
+ getLinkedPRs(issueNumber: number): Promise<PRInfo[]>;
16
+ getRateLimit(): Promise<RateLimitInfo>;
17
+ }
@@ -0,0 +1,8 @@
1
+ import type { RequestScheduler } from '../scheduler/index.js';
2
+ import { GitHubAdapter } from './github-adapter.js';
3
+ export declare class GitHubEnterpriseAdapter extends GitHubAdapter {
4
+ readonly platform: "github-enterprise";
5
+ constructor(hostname: string, options?: {
6
+ scheduler?: RequestScheduler;
7
+ });
8
+ }
@@ -0,0 +1,2 @@
1
+ export { GitHubAdapter } from './github-adapter.js';
2
+ export { GitHubEnterpriseAdapter } from './github-enterprise-adapter.js';
@@ -0,0 +1,17 @@
1
+ import type { AuthStatus, IssueInfo, PRInfo, PlatformAdapter, RateLimitInfo } from '../../types/index.js';
2
+ import { RequestScheduler } from '../scheduler/index.js';
3
+ export declare class GitLabAdapter implements PlatformAdapter {
4
+ readonly platform: PlatformAdapter['platform'];
5
+ private readonly scheduler;
6
+ private readonly hostname;
7
+ constructor(options?: {
8
+ hostname?: string;
9
+ scheduler?: RequestScheduler;
10
+ });
11
+ checkAuth(): Promise<AuthStatus>;
12
+ getPRForCommit(sha: string): Promise<PRInfo | null>;
13
+ getPRCommits(prNumber: number): Promise<string[]>;
14
+ getLinkedIssues(prNumber: number): Promise<IssueInfo[]>;
15
+ getLinkedPRs(issueNumber: number): Promise<PRInfo[]>;
16
+ getRateLimit(): Promise<RateLimitInfo>;
17
+ }
@@ -0,0 +1,8 @@
1
+ import type { RequestScheduler } from '../scheduler/index.js';
2
+ import { GitLabAdapter } from './gitlab-adapter.js';
3
+ export declare class GitLabSelfHostedAdapter extends GitLabAdapter {
4
+ readonly platform: "gitlab-self-hosted";
5
+ constructor(hostname: string, options?: {
6
+ scheduler?: RequestScheduler;
7
+ });
8
+ }
@@ -0,0 +1,2 @@
1
+ export { GitLabAdapter } from './gitlab-adapter.js';
2
+ export { GitLabSelfHostedAdapter } from './gitlab-self-hosted-adapter.js';
@@ -0,0 +1,6 @@
1
+ export { createAdapter, detectPlatformAdapter } from './platform.js';
2
+ export { GitHubAdapter } from './github/index.js';
3
+ export { GitHubEnterpriseAdapter } from './github/index.js';
4
+ export { GitLabAdapter } from './gitlab/index.js';
5
+ export { GitLabSelfHostedAdapter } from './gitlab/index.js';
6
+ export { RequestScheduler } from './scheduler/index.js';
@@ -0,0 +1,9 @@
1
+ import type { PlatformAdapter, RemoteInfo } from '../types/index.js';
2
+ export declare function detectPlatformAdapter(options?: {
3
+ cwd?: string;
4
+ remoteName?: string;
5
+ }): Promise<{
6
+ adapter: PlatformAdapter;
7
+ remote: RemoteInfo;
8
+ }>;
9
+ export declare function createAdapter(remote: RemoteInfo): PlatformAdapter;
@@ -0,0 +1,2 @@
1
+ export { RequestScheduler } from './request-scheduler.js';
2
+ export type { SchedulerOptions } from './request-scheduler.js';
@@ -0,0 +1,17 @@
1
+ import type { RateLimitInfo } from '../../types/index.js';
2
+ export interface SchedulerOptions {
3
+ rateLimitThreshold?: number;
4
+ }
5
+ export declare class RequestScheduler {
6
+ private rateLimitInfo;
7
+ private readonly threshold;
8
+ private etagCache;
9
+ private responseCache;
10
+ constructor(options?: SchedulerOptions);
11
+ updateRateLimit(info: RateLimitInfo): void;
12
+ isRateLimited(): boolean;
13
+ getRateLimit(): RateLimitInfo | null;
14
+ setEtag(url: string, etag: string, response: string): void;
15
+ getEtag(url: string): string | null;
16
+ getCachedResponse(url: string): string | null;
17
+ }
@@ -0,0 +1,28 @@
1
+ import type { Confidence } from './pipeline.js';
2
+ export type SymbolKind = 'function' | 'method' | 'class' | 'arrow_function';
3
+ export interface SymbolInfo {
4
+ name: string;
5
+ kind: SymbolKind;
6
+ startLine: number;
7
+ endLine: number;
8
+ bodyText: string;
9
+ }
10
+ export interface ContentHash {
11
+ exact: string;
12
+ structural: string;
13
+ }
14
+ export type ChangeType = 'rename' | 'move' | 'extract' | 'identical' | 'new' | 'modified';
15
+ export interface ComparisonResult {
16
+ change: ChangeType;
17
+ fromName?: string;
18
+ toName?: string;
19
+ fromFile?: string;
20
+ confidence: Confidence;
21
+ }
22
+ export interface AstTraceResult {
23
+ originSha: string;
24
+ originSymbol: SymbolInfo;
25
+ trackingMethod: 'ast-signature';
26
+ confidence: Confidence;
27
+ changes: ComparisonResult[];
28
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Result of parsing `git blame --porcelain` output for a specific line.
3
+ */
4
+ export interface BlameResult {
5
+ /** Full 40-character commit hash */
6
+ commitHash: string;
7
+ /** Author name */
8
+ author: string;
9
+ /** Author email */
10
+ authorEmail: string;
11
+ /** Commit timestamp (ISO 8601) */
12
+ date: string;
13
+ /** The actual content of the blamed line */
14
+ lineContent: string;
15
+ /** Original filename if the line was moved/renamed */
16
+ originalFile?: string;
17
+ /** Original line number before any moves/renames */
18
+ originalLine?: number;
19
+ }
20
+ /**
21
+ * Basic commit information from git log.
22
+ */
23
+ export interface CommitInfo {
24
+ /** Full 40-character commit hash */
25
+ hash: string;
26
+ /** Short (7-character) commit hash */
27
+ shortHash: string;
28
+ /** Commit subject line */
29
+ subject: string;
30
+ /** Commit author name */
31
+ author: string;
32
+ /** Commit timestamp (ISO 8601) */
33
+ date: string;
34
+ }
@@ -0,0 +1,5 @@
1
+ export interface CacheEntry<T> {
2
+ key: string;
3
+ value: T;
4
+ createdAt: number;
5
+ }
@@ -0,0 +1,23 @@
1
+ import type { PlatformType } from './platform.js';
2
+ export interface GitExecResult {
3
+ stdout: string;
4
+ stderr: string;
5
+ exitCode: number;
6
+ }
7
+ export interface GitExecOptions {
8
+ cwd?: string;
9
+ timeout?: number;
10
+ allowExitCodes?: number[];
11
+ }
12
+ export interface RemoteInfo {
13
+ owner: string;
14
+ repo: string;
15
+ host: string;
16
+ platform: PlatformType | 'unknown';
17
+ }
18
+ export interface HealthReport {
19
+ commitGraph: boolean;
20
+ bloomFilter: boolean;
21
+ gitVersion: string;
22
+ hints: string[];
23
+ }
@@ -0,0 +1,15 @@
1
+ import type { TraceNode } from './pipeline.js';
2
+ export interface GraphOptions {
3
+ type: 'pr' | 'issue';
4
+ number: number;
5
+ depth?: number;
6
+ json?: boolean;
7
+ }
8
+ export interface GraphResult {
9
+ nodes: TraceNode[];
10
+ edges: Array<{
11
+ from: string;
12
+ to: string;
13
+ relation: string;
14
+ }>;
15
+ }
@@ -0,0 +1,11 @@
1
+ export type { SymbolKind, SymbolInfo, ContentHash, ChangeType, ComparisonResult, AstTraceResult, } from './ast.js';
2
+ export type { BlameResult, CommitInfo } from './blame.js';
3
+ export type { CacheEntry } from './cache.js';
4
+ export type { GitExecResult, GitExecOptions, RemoteInfo, HealthReport, } from './git.js';
5
+ export type { GraphOptions, GraphResult } from './graph.js';
6
+ export type { NormalizedResponse } from './output.js';
7
+ export type { TraceNodeType, TrackingMethod, Confidence, TraceNode, OperatingLevel, FeatureFlags, } from './pipeline.js';
8
+ export type { PlatformType, AuthStatus, PRInfo, IssueInfo, RateLimitInfo, PlatformAdapter, } from './platform.js';
9
+ export type { CosmeticReason, BlameStageResult, AstDiffStageResult, } from './stage.js';
10
+ export type { TraceResult, TraceOptions } from './trace.js';
11
+ export type { LineRange } from './util.js';
@@ -0,0 +1,24 @@
1
+ import type { OperatingLevel } from './pipeline.js';
2
+ export interface NormalizedResponse<T> {
3
+ tool: 'line-lore';
4
+ command: string;
5
+ version: string;
6
+ timestamp: string;
7
+ status: 'success' | 'partial' | 'error';
8
+ operatingLevel: OperatingLevel;
9
+ data?: T;
10
+ error?: {
11
+ code: string;
12
+ message: string;
13
+ stage?: number;
14
+ recoverable: boolean;
15
+ suggestion?: string;
16
+ };
17
+ partialData?: Partial<T>;
18
+ warnings?: string[];
19
+ hints?: {
20
+ canRetryWithFlags?: string[];
21
+ relatedCommands?: string[];
22
+ cacheHit?: boolean;
23
+ };
24
+ }
@@ -0,0 +1,28 @@
1
+ export type TraceNodeType = 'original_commit' | 'cosmetic_commit' | 'merge_commit' | 'rebased_commit' | 'pull_request' | 'issue';
2
+ export type TrackingMethod = 'blame' | 'blame-CMw' | 'ast-signature' | 'ancestry-path' | 'patch-id' | 'api' | 'message-parse' | 'issue-link';
3
+ export type Confidence = 'exact' | 'structural' | 'heuristic';
4
+ export interface TraceNode {
5
+ type: TraceNodeType;
6
+ sha?: string;
7
+ trackingMethod: TrackingMethod;
8
+ confidence: Confidence;
9
+ prNumber?: number;
10
+ prUrl?: string;
11
+ prTitle?: string;
12
+ patchId?: string;
13
+ note?: string;
14
+ mergedAt?: string;
15
+ issueNumber?: number;
16
+ issueUrl?: string;
17
+ issueTitle?: string;
18
+ issueState?: 'open' | 'closed';
19
+ issueLabels?: string[];
20
+ }
21
+ export type OperatingLevel = 0 | 1 | 2;
22
+ export interface FeatureFlags {
23
+ astDiff: boolean;
24
+ deepTrace: boolean;
25
+ commitGraph: boolean;
26
+ issueGraph: boolean;
27
+ graphql: boolean;
28
+ }
@@ -0,0 +1,44 @@
1
+ export type PlatformType = 'github' | 'github-enterprise' | 'gitlab' | 'gitlab-self-hosted';
2
+ export interface AuthStatus {
3
+ authenticated: boolean;
4
+ username?: string;
5
+ scopes?: string[];
6
+ hostname?: string;
7
+ }
8
+ export interface PRInfo {
9
+ /** PR number (e.g., 123) */
10
+ number: number;
11
+ /** PR title */
12
+ title: string;
13
+ /** PR author username */
14
+ author: string;
15
+ /** Full URL to the PR */
16
+ url: string;
17
+ /** Merge commit hash */
18
+ mergeCommit: string;
19
+ /** Base branch the PR was merged into */
20
+ baseBranch: string;
21
+ /** Timestamp when the PR was merged (ISO 8601) */
22
+ mergedAt?: string;
23
+ }
24
+ export interface IssueInfo {
25
+ number: number;
26
+ title: string;
27
+ url: string;
28
+ state: 'open' | 'closed';
29
+ labels: string[];
30
+ }
31
+ export interface RateLimitInfo {
32
+ limit: number;
33
+ remaining: number;
34
+ resetAt: string;
35
+ }
36
+ export interface PlatformAdapter {
37
+ readonly platform: PlatformType;
38
+ checkAuth(): Promise<AuthStatus>;
39
+ getPRForCommit(sha: string): Promise<PRInfo | null>;
40
+ getPRCommits(prNumber: number): Promise<string[]>;
41
+ getLinkedIssues(prNumber: number): Promise<IssueInfo[]>;
42
+ getLinkedPRs(issueNumber: number): Promise<PRInfo[]>;
43
+ getRateLimit(): Promise<RateLimitInfo>;
44
+ }
@@ -0,0 +1,14 @@
1
+ import type { ChangeType } from './ast.js';
2
+ import type { BlameResult } from './blame.js';
3
+ import type { Confidence } from './pipeline.js';
4
+ export type CosmeticReason = 'whitespace' | 'import-order' | 'formatting';
5
+ export interface BlameStageResult {
6
+ blame: BlameResult;
7
+ isCosmetic: boolean;
8
+ cosmeticReason?: CosmeticReason;
9
+ }
10
+ export interface AstDiffStageResult {
11
+ originalSha: string;
12
+ confidence: Confidence;
13
+ changeType: ChangeType;
14
+ }
@@ -0,0 +1,38 @@
1
+ import type { BlameResult } from './blame.js';
2
+ import type { PRInfo } from './platform.js';
3
+ /**
4
+ * Combined result of tracing a line back to its PR.
5
+ */
6
+ export interface TraceResult {
7
+ /** Blame information for the target line */
8
+ blame: BlameResult;
9
+ /** PR information if found, null if commit is not from a PR */
10
+ pr: PRInfo | null;
11
+ }
12
+ /**
13
+ * Options for the trace operation.
14
+ */
15
+ export interface TraceOptions {
16
+ /** Path to the file to trace */
17
+ file: string;
18
+ /** Starting line number (1-indexed) */
19
+ line: number;
20
+ /** Ending line number for range queries (inclusive) */
21
+ endLine?: number;
22
+ /** Git remote name to use for PR lookups (default: 'origin') */
23
+ remote?: string;
24
+ /** Output in JSON format */
25
+ json?: boolean;
26
+ /** Enable deep trace (squash PR recursive exploration) */
27
+ deep?: boolean;
28
+ /** Issue graph traversal depth (0=PR only, 1=issues, 2+=multi-hop) */
29
+ graphDepth?: number;
30
+ /** Disable AST diff analysis */
31
+ noAst?: boolean;
32
+ /** Disable cache */
33
+ noCache?: boolean;
34
+ /** Output format */
35
+ output?: 'human' | 'json' | 'llm';
36
+ /** Suppress output (return PR number only) */
37
+ quiet?: boolean;
38
+ }
@@ -0,0 +1,4 @@
1
+ export interface LineRange {
2
+ start: number;
3
+ end: number;
4
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Central command registry for line-lore CLI.
3
+ * Single source of truth for command metadata, used by --describe and --help.
4
+ */
5
+ export interface CommandOption {
6
+ flag: string;
7
+ description: string;
8
+ type?: 'boolean' | 'string' | 'number';
9
+ default?: string;
10
+ }
11
+ export interface CommandArgument {
12
+ name: string;
13
+ description: string;
14
+ required: boolean;
15
+ }
16
+ export interface CommandInfo {
17
+ name: string;
18
+ description: string;
19
+ usage?: string;
20
+ arguments?: CommandArgument[];
21
+ options?: CommandOption[];
22
+ subcommands?: CommandInfo[];
23
+ examples?: string[];
24
+ }
25
+ export declare const TRACE_COMMAND: CommandInfo;
26
+ export declare const HEALTH_COMMAND: CommandInfo;
27
+ export declare const CACHE_COMMAND: CommandInfo;
28
+ export declare const GRAPH_COMMAND: CommandInfo;
29
+ export declare const ALL_COMMANDS: CommandInfo[];
@@ -0,0 +1 @@
1
+ export { parseLineRange } from './line-range.js';
@@ -0,0 +1,2 @@
1
+ import type { LineRange } from '../types/index.js';
2
+ export declare function parseLineRange(input: string): LineRange;
@@ -0,0 +1 @@
1
+ export declare const VERSION = "0.0.1";
package/package.json ADDED
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "@lumy-pack/line-lore",
3
+ "version": "0.0.1",
4
+ "description": "CLI tool for tracing code lines to their originating Pull Requests via git blame",
5
+ "keywords": [
6
+ "cli",
7
+ "git",
8
+ "blame",
9
+ "pr",
10
+ "pull-request",
11
+ "trace",
12
+ "line-lore"
13
+ ],
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/vincent-kk/lumy-pack.git",
17
+ "directory": "packages/line-lore"
18
+ },
19
+ "license": "MIT",
20
+ "author": {
21
+ "name": "Vincent K. Kelvin",
22
+ "email": "lunox273@gmail.com"
23
+ },
24
+ "sideEffects": false,
25
+ "type": "module",
26
+ "exports": {
27
+ ".": {
28
+ "types": "./dist/index.d.ts",
29
+ "source": "./src/index.ts",
30
+ "import": "./dist/index.mjs",
31
+ "require": "./dist/index.cjs"
32
+ }
33
+ },
34
+ "main": "dist/index.cjs",
35
+ "module": "dist/index.mjs",
36
+ "types": "dist/index.d.ts",
37
+ "bin": "dist/cli.mjs",
38
+ "files": [
39
+ "dist",
40
+ "!dist/tsconfig.tsbuildinfo",
41
+ "README.md"
42
+ ],
43
+ "scripts": {
44
+ "build": "node scripts/inject-version.js && tsup && yarn build:types",
45
+ "build:types": "tsc -p ./tsconfig.declarations.json",
46
+ "dev": "node scripts/inject-version.js && tsx src/cli.ts",
47
+ "format": "prettier --write \"src/**/*.ts\"",
48
+ "lint": "eslint \"src/**/*.ts\"",
49
+ "publish:npm": "yarn npm publish --access public",
50
+ "test": "vitest",
51
+ "test:run": "vitest run",
52
+ "version:major": "yarn version major",
53
+ "version:minor": "yarn version minor",
54
+ "version:patch": "yarn version patch"
55
+ },
56
+ "dependencies": {
57
+ "commander": "^12.1.0",
58
+ "execa": "^9.5.0",
59
+ "ink": "^5.0.0",
60
+ "ink-spinner": "^5.0.0",
61
+ "picocolors": "^1.1.1",
62
+ "react": "^18.0.0"
63
+ },
64
+ "devDependencies": {
65
+ "@lumy-pack/shared": "0.0.1",
66
+ "@types/node": "^20.11.0",
67
+ "@types/react": "^18.0.0",
68
+ "@vitest/coverage-v8": "^3.2.4",
69
+ "ink-testing-library": "^4.0.0"
70
+ }
71
+ }