busy-cli 0.1.2

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 (128) hide show
  1. package/README.md +129 -0
  2. package/dist/builders/context.d.ts +50 -0
  3. package/dist/builders/context.d.ts.map +1 -0
  4. package/dist/builders/context.js +190 -0
  5. package/dist/cache/index.d.ts +100 -0
  6. package/dist/cache/index.d.ts.map +1 -0
  7. package/dist/cache/index.js +270 -0
  8. package/dist/cli/index.d.ts +3 -0
  9. package/dist/cli/index.d.ts.map +1 -0
  10. package/dist/cli/index.js +463 -0
  11. package/dist/commands/package.d.ts +96 -0
  12. package/dist/commands/package.d.ts.map +1 -0
  13. package/dist/commands/package.js +285 -0
  14. package/dist/index.d.ts +7 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +7 -0
  17. package/dist/loader.d.ts +6 -0
  18. package/dist/loader.d.ts.map +1 -0
  19. package/dist/loader.js +361 -0
  20. package/dist/merge.d.ts +16 -0
  21. package/dist/merge.d.ts.map +1 -0
  22. package/dist/merge.js +102 -0
  23. package/dist/package/manifest.d.ts +59 -0
  24. package/dist/package/manifest.d.ts.map +1 -0
  25. package/dist/package/manifest.js +265 -0
  26. package/dist/parser.d.ts +28 -0
  27. package/dist/parser.d.ts.map +1 -0
  28. package/dist/parser.js +220 -0
  29. package/dist/parsers/frontmatter.d.ts +14 -0
  30. package/dist/parsers/frontmatter.d.ts.map +1 -0
  31. package/dist/parsers/frontmatter.js +110 -0
  32. package/dist/parsers/imports.d.ts +48 -0
  33. package/dist/parsers/imports.d.ts.map +1 -0
  34. package/dist/parsers/imports.js +147 -0
  35. package/dist/parsers/links.d.ts +12 -0
  36. package/dist/parsers/links.d.ts.map +1 -0
  37. package/dist/parsers/links.js +79 -0
  38. package/dist/parsers/localdefs.d.ts +6 -0
  39. package/dist/parsers/localdefs.d.ts.map +1 -0
  40. package/dist/parsers/localdefs.js +132 -0
  41. package/dist/parsers/operations.d.ts +32 -0
  42. package/dist/parsers/operations.d.ts.map +1 -0
  43. package/dist/parsers/operations.js +313 -0
  44. package/dist/parsers/sections.d.ts +15 -0
  45. package/dist/parsers/sections.d.ts.map +1 -0
  46. package/dist/parsers/sections.js +173 -0
  47. package/dist/parsers/tools.d.ts +30 -0
  48. package/dist/parsers/tools.d.ts.map +1 -0
  49. package/dist/parsers/tools.js +178 -0
  50. package/dist/parsers/triggers.d.ts +35 -0
  51. package/dist/parsers/triggers.d.ts.map +1 -0
  52. package/dist/parsers/triggers.js +219 -0
  53. package/dist/providers/base.d.ts +60 -0
  54. package/dist/providers/base.d.ts.map +1 -0
  55. package/dist/providers/base.js +34 -0
  56. package/dist/providers/github.d.ts +18 -0
  57. package/dist/providers/github.d.ts.map +1 -0
  58. package/dist/providers/github.js +109 -0
  59. package/dist/providers/gitlab.d.ts +18 -0
  60. package/dist/providers/gitlab.d.ts.map +1 -0
  61. package/dist/providers/gitlab.js +101 -0
  62. package/dist/providers/index.d.ts +13 -0
  63. package/dist/providers/index.d.ts.map +1 -0
  64. package/dist/providers/index.js +17 -0
  65. package/dist/providers/local.d.ts +31 -0
  66. package/dist/providers/local.d.ts.map +1 -0
  67. package/dist/providers/local.js +116 -0
  68. package/dist/providers/url.d.ts +16 -0
  69. package/dist/providers/url.d.ts.map +1 -0
  70. package/dist/providers/url.js +45 -0
  71. package/dist/registry/index.d.ts +99 -0
  72. package/dist/registry/index.d.ts.map +1 -0
  73. package/dist/registry/index.js +320 -0
  74. package/dist/types/schema.d.ts +3259 -0
  75. package/dist/types/schema.d.ts.map +1 -0
  76. package/dist/types/schema.js +258 -0
  77. package/dist/utils/logger.d.ts +19 -0
  78. package/dist/utils/logger.d.ts.map +1 -0
  79. package/dist/utils/logger.js +23 -0
  80. package/dist/utils/slugify.d.ts +14 -0
  81. package/dist/utils/slugify.d.ts.map +1 -0
  82. package/dist/utils/slugify.js +28 -0
  83. package/package.json +61 -0
  84. package/src/__tests__/cache.test.ts +393 -0
  85. package/src/__tests__/cli-package.test.ts +667 -0
  86. package/src/__tests__/fixtures/automated-workflow.busy.md +84 -0
  87. package/src/__tests__/fixtures/concept.busy.md +30 -0
  88. package/src/__tests__/fixtures/document.busy.md +44 -0
  89. package/src/__tests__/fixtures/simple-operation.busy.md +45 -0
  90. package/src/__tests__/fixtures/tool-document.busy.md +71 -0
  91. package/src/__tests__/fixtures/tool.busy.md +54 -0
  92. package/src/__tests__/imports.test.ts +244 -0
  93. package/src/__tests__/integration.test.ts +432 -0
  94. package/src/__tests__/operations.test.ts +408 -0
  95. package/src/__tests__/package-manifest.test.ts +455 -0
  96. package/src/__tests__/providers.test.ts +672 -0
  97. package/src/__tests__/registry.test.ts +402 -0
  98. package/src/__tests__/schema.test.ts +467 -0
  99. package/src/__tests__/tools.test.ts +376 -0
  100. package/src/__tests__/triggers.test.ts +312 -0
  101. package/src/builders/context.ts +294 -0
  102. package/src/cache/index.ts +312 -0
  103. package/src/cli/index.ts +514 -0
  104. package/src/commands/package.ts +392 -0
  105. package/src/index.ts +46 -0
  106. package/src/loader.ts +474 -0
  107. package/src/merge.ts +126 -0
  108. package/src/package/manifest.ts +349 -0
  109. package/src/parser.ts +278 -0
  110. package/src/parsers/frontmatter.ts +135 -0
  111. package/src/parsers/imports.ts +196 -0
  112. package/src/parsers/links.ts +108 -0
  113. package/src/parsers/localdefs.ts +166 -0
  114. package/src/parsers/operations.ts +404 -0
  115. package/src/parsers/sections.ts +230 -0
  116. package/src/parsers/tools.ts +215 -0
  117. package/src/parsers/triggers.ts +252 -0
  118. package/src/providers/base.ts +77 -0
  119. package/src/providers/github.ts +129 -0
  120. package/src/providers/gitlab.ts +121 -0
  121. package/src/providers/index.ts +25 -0
  122. package/src/providers/local.ts +129 -0
  123. package/src/providers/url.ts +56 -0
  124. package/src/registry/index.ts +408 -0
  125. package/src/types/schema.ts +369 -0
  126. package/src/utils/logger.ts +25 -0
  127. package/src/utils/slugify.ts +31 -0
  128. package/tsconfig.json +21 -0
@@ -0,0 +1,101 @@
1
+ /**
2
+ * GitLab URL provider
3
+ *
4
+ * Handles URLs like:
5
+ * - https://gitlab.com/org/repo/-/blob/ref/path/to/file.md
6
+ * - https://gitlab.com/org/repo/-/tree/ref/path/to/dir
7
+ */
8
+ import { providerRegistry } from './base.js';
9
+ // Pattern for GitLab blob URLs
10
+ const BLOB_PATTERN = /gitlab\.com\/([^/]+)\/([^/]+)\/-\/blob\/([^/]+)\/(.+)/;
11
+ // Pattern for GitLab tree URLs
12
+ const TREE_PATTERN = /gitlab\.com\/([^/]+)\/([^/]+)\/-\/tree\/([^/]+)\/(.+)/;
13
+ // Pattern for GitLab raw URLs
14
+ const RAW_PATTERN = /gitlab\.com\/([^/]+)\/([^/]+)\/-\/raw\/([^/]+)\/(.+)/;
15
+ export class GitLabProvider {
16
+ name = 'gitlab';
17
+ matches(url) {
18
+ // Use proper URL parsing to check the hostname
19
+ try {
20
+ const parsed = new URL(url);
21
+ return parsed.hostname === 'gitlab.com';
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ }
27
+ parse(url) {
28
+ // Extract anchor if present
29
+ const [urlWithoutAnchor, anchor] = url.split('#');
30
+ // Try blob pattern first
31
+ let match = urlWithoutAnchor.match(BLOB_PATTERN);
32
+ if (match) {
33
+ return {
34
+ provider: 'gitlab',
35
+ org: match[1],
36
+ repo: match[2],
37
+ ref: match[3],
38
+ path: match[4],
39
+ anchor,
40
+ };
41
+ }
42
+ // Try tree pattern
43
+ match = urlWithoutAnchor.match(TREE_PATTERN);
44
+ if (match) {
45
+ return {
46
+ provider: 'gitlab',
47
+ org: match[1],
48
+ repo: match[2],
49
+ ref: match[3],
50
+ path: match[4],
51
+ anchor,
52
+ };
53
+ }
54
+ // Try raw pattern
55
+ match = urlWithoutAnchor.match(RAW_PATTERN);
56
+ if (match) {
57
+ return {
58
+ provider: 'gitlab',
59
+ org: match[1],
60
+ repo: match[2],
61
+ ref: match[3],
62
+ path: match[4],
63
+ anchor,
64
+ rawUrl: urlWithoutAnchor,
65
+ };
66
+ }
67
+ throw new Error(`Cannot parse GitLab URL: ${url}`);
68
+ }
69
+ getRawUrl(parsed) {
70
+ if (parsed.rawUrl) {
71
+ return parsed.rawUrl;
72
+ }
73
+ return `https://gitlab.com/${parsed.org}/${parsed.repo}/-/raw/${parsed.ref}/${parsed.path}`;
74
+ }
75
+ async fetch(url) {
76
+ const parsed = this.parse(url);
77
+ const rawUrl = this.getRawUrl(parsed);
78
+ const response = await fetch(rawUrl);
79
+ if (!response.ok) {
80
+ throw new Error(`Failed to fetch ${rawUrl}: ${response.status} ${response.statusText}`);
81
+ }
82
+ return response.text();
83
+ }
84
+ async getLatestVersion(parsed) {
85
+ // GitLab API for tags
86
+ const apiUrl = `https://gitlab.com/api/v4/projects/${encodeURIComponent(`${parsed.org}/${parsed.repo}`)}/repository/tags`;
87
+ const response = await fetch(apiUrl);
88
+ if (!response.ok) {
89
+ throw new Error(`Failed to fetch tags from GitLab API: ${response.status}`);
90
+ }
91
+ const tags = await response.json();
92
+ if (tags.length === 0) {
93
+ throw new Error(`No tags found for ${parsed.org}/${parsed.repo}`);
94
+ }
95
+ return tags[0].name;
96
+ }
97
+ }
98
+ // Create and register the GitLab provider
99
+ export const gitlabProvider = new GitLabProvider();
100
+ providerRegistry.register(gitlabProvider);
101
+ //# sourceMappingURL=gitlab.js.map
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Provider System Exports
3
+ *
4
+ * URL providers for fetching content from different sources.
5
+ * Registration order matters - specific providers (GitHub, GitLab)
6
+ * should be registered before the generic URL provider.
7
+ */
8
+ export { Provider, ParsedURL, ProviderRegistry, providerRegistry, } from './base.js';
9
+ export { LocalProvider, localProvider } from './local.js';
10
+ export { GitHubProvider, githubProvider } from './github.js';
11
+ export { GitLabProvider, gitlabProvider } from './gitlab.js';
12
+ export { URLProvider, urlProvider } from './url.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG1D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Provider System Exports
3
+ *
4
+ * URL providers for fetching content from different sources.
5
+ * Registration order matters - specific providers (GitHub, GitLab)
6
+ * should be registered before the generic URL provider.
7
+ */
8
+ // Base types and registry
9
+ export { ProviderRegistry, providerRegistry, } from './base.js';
10
+ // Local file provider (registered first for priority)
11
+ export { LocalProvider, localProvider } from './local.js';
12
+ // Specific providers
13
+ export { GitHubProvider, githubProvider } from './github.js';
14
+ export { GitLabProvider, gitlabProvider } from './gitlab.js';
15
+ // Generic URL provider (registered last as fallback)
16
+ export { URLProvider, urlProvider } from './url.js';
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Local File Provider
3
+ *
4
+ * Provider for local file system paths (relative or absolute).
5
+ * Handles both individual files and directories containing package.busy.md.
6
+ */
7
+ import { Provider, ParsedURL } from './base.js';
8
+ export declare class LocalProvider implements Provider {
9
+ name: string;
10
+ /**
11
+ * Working directory for resolving relative paths
12
+ */
13
+ private workingDir;
14
+ constructor(workingDir?: string);
15
+ setWorkingDir(dir: string): void;
16
+ matches(url: string): boolean;
17
+ parse(url: string): ParsedURL;
18
+ getRawUrl(parsed: ParsedURL): string;
19
+ fetch(url: string): Promise<string>;
20
+ /**
21
+ * Resolve a path to an absolute path
22
+ */
23
+ resolvePath(relativePath: string): string;
24
+ /**
25
+ * Check if a path points to a package directory (contains package.busy.md)
26
+ */
27
+ isPackageDirectory(dirPath: string): Promise<boolean>;
28
+ getLatestVersion(_parsed: ParsedURL): Promise<string>;
29
+ }
30
+ export declare const localProvider: LocalProvider;
31
+ //# sourceMappingURL=local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/providers/local.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAoB,MAAM,WAAW,CAAC;AAElE,qBAAa,aAAc,YAAW,QAAQ;IAC5C,IAAI,SAAW;IAEf;;OAEG;IACH,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,CAAC,EAAE,MAAM;IAI/B,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIhC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAmB7B,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS;IAiB7B,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM;IAU9B,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBzC;;OAEG;IACH,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAOzC;;OAEG;IACG,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrD,gBAAgB,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;CAG5D;AAGD,eAAO,MAAM,aAAa,eAAsB,CAAC"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Local File Provider
3
+ *
4
+ * Provider for local file system paths (relative or absolute).
5
+ * Handles both individual files and directories containing package.busy.md.
6
+ */
7
+ import { promises as fs } from 'node:fs';
8
+ import * as path from 'node:path';
9
+ import { providerRegistry } from './base.js';
10
+ export class LocalProvider {
11
+ name = 'local';
12
+ /**
13
+ * Working directory for resolving relative paths
14
+ */
15
+ workingDir;
16
+ constructor(workingDir) {
17
+ this.workingDir = workingDir || process.cwd();
18
+ }
19
+ setWorkingDir(dir) {
20
+ this.workingDir = dir;
21
+ }
22
+ matches(url) {
23
+ // Match relative paths (./ ../)
24
+ if (url.startsWith('./') || url.startsWith('../')) {
25
+ return true;
26
+ }
27
+ // Match absolute paths
28
+ if (url.startsWith('/')) {
29
+ return true;
30
+ }
31
+ // Match paths that look like local directories or files (no protocol)
32
+ if (!url.includes('://') && !url.startsWith('http')) {
33
+ // Check if it looks like a path (contains / or ends with .md or .busy.md)
34
+ if (url.includes('/') || url.endsWith('.md') || url.endsWith('.busy')) {
35
+ return true;
36
+ }
37
+ }
38
+ return false;
39
+ }
40
+ parse(url) {
41
+ // Extract anchor if present
42
+ const [pathWithoutAnchor, anchor] = url.split('#');
43
+ // Resolve to absolute path
44
+ let absolutePath = path.isAbsolute(pathWithoutAnchor)
45
+ ? pathWithoutAnchor
46
+ : path.resolve(this.workingDir, pathWithoutAnchor);
47
+ return {
48
+ provider: 'local',
49
+ path: absolutePath,
50
+ anchor,
51
+ rawUrl: url,
52
+ };
53
+ }
54
+ getRawUrl(parsed) {
55
+ // If path is a directory, return path to package.busy.md
56
+ // This is checked synchronously by checking if path ends with .md or .busy
57
+ const p = parsed.path;
58
+ if (!p.endsWith('.md') && !p.endsWith('.busy')) {
59
+ return path.join(p, 'package.busy.md');
60
+ }
61
+ return p;
62
+ }
63
+ async fetch(url) {
64
+ const parsed = this.parse(url);
65
+ let targetPath = parsed.path;
66
+ // Check if path is a directory
67
+ try {
68
+ const stat = await fs.stat(targetPath);
69
+ if (stat.isDirectory()) {
70
+ // Look for package.busy.md in the directory
71
+ targetPath = path.join(targetPath, 'package.busy.md');
72
+ }
73
+ }
74
+ catch {
75
+ // Path doesn't exist yet, try as-is
76
+ }
77
+ // Read the file
78
+ try {
79
+ const content = await fs.readFile(targetPath, 'utf-8');
80
+ return content;
81
+ }
82
+ catch (error) {
83
+ throw new Error(`Failed to read local file ${targetPath}: ${error instanceof Error ? error.message : error}`);
84
+ }
85
+ }
86
+ /**
87
+ * Resolve a path to an absolute path
88
+ */
89
+ resolvePath(relativePath) {
90
+ if (path.isAbsolute(relativePath)) {
91
+ return relativePath;
92
+ }
93
+ return path.resolve(this.workingDir, relativePath);
94
+ }
95
+ /**
96
+ * Check if a path points to a package directory (contains package.busy.md)
97
+ */
98
+ async isPackageDirectory(dirPath) {
99
+ const manifestPath = path.join(dirPath, 'package.busy.md');
100
+ try {
101
+ await fs.access(manifestPath);
102
+ return true;
103
+ }
104
+ catch {
105
+ return false;
106
+ }
107
+ }
108
+ // Local files don't support version resolution
109
+ async getLatestVersion(_parsed) {
110
+ throw new Error('Local provider does not support version resolution');
111
+ }
112
+ }
113
+ // Create and register the local provider (registered first for priority)
114
+ export const localProvider = new LocalProvider();
115
+ providerRegistry.register(localProvider);
116
+ //# sourceMappingURL=local.js.map
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Generic URL provider
3
+ *
4
+ * Fallback provider for direct HTTP(S) URLs that don't match specific providers.
5
+ */
6
+ import { Provider, ParsedURL } from './base.js';
7
+ export declare class URLProvider implements Provider {
8
+ name: string;
9
+ matches(url: string): boolean;
10
+ parse(url: string): ParsedURL;
11
+ getRawUrl(parsed: ParsedURL): string;
12
+ fetch(url: string): Promise<string>;
13
+ getLatestVersion(_parsed: ParsedURL): Promise<string>;
14
+ }
15
+ export declare const urlProvider: URLProvider;
16
+ //# sourceMappingURL=url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/providers/url.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAoB,MAAM,WAAW,CAAC;AAElE,qBAAa,WAAY,YAAW,QAAQ;IAC1C,IAAI,SAAS;IAEb,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAK7B,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS;IAe7B,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM;IAI9B,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAanC,gBAAgB,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;CAG5D;AAGD,eAAO,MAAM,WAAW,aAAoB,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Generic URL provider
3
+ *
4
+ * Fallback provider for direct HTTP(S) URLs that don't match specific providers.
5
+ */
6
+ import { providerRegistry } from './base.js';
7
+ export class URLProvider {
8
+ name = 'url';
9
+ matches(url) {
10
+ // Match any HTTP(S) URL as fallback
11
+ return url.startsWith('http://') || url.startsWith('https://');
12
+ }
13
+ parse(url) {
14
+ // Extract anchor if present
15
+ const [urlWithoutAnchor, anchor] = url.split('#');
16
+ // Parse URL to extract path
17
+ const urlObj = new URL(urlWithoutAnchor);
18
+ return {
19
+ provider: 'url',
20
+ path: urlObj.pathname,
21
+ anchor,
22
+ rawUrl: urlWithoutAnchor,
23
+ };
24
+ }
25
+ getRawUrl(parsed) {
26
+ return parsed.rawUrl || parsed.path;
27
+ }
28
+ async fetch(url) {
29
+ const parsed = this.parse(url);
30
+ const fetchUrl = parsed.rawUrl || url;
31
+ const response = await fetch(fetchUrl);
32
+ if (!response.ok) {
33
+ throw new Error(`Failed to fetch ${fetchUrl}: ${response.status} ${response.statusText}`);
34
+ }
35
+ return response.text();
36
+ }
37
+ // Generic URLs don't support version resolution
38
+ async getLatestVersion(_parsed) {
39
+ throw new Error('Generic URL provider does not support version resolution');
40
+ }
41
+ }
42
+ // Create and register the URL provider (registered last as fallback)
43
+ export const urlProvider = new URLProvider();
44
+ providerRegistry.register(urlProvider);
45
+ //# sourceMappingURL=url.js.map
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Package Registry for package.busy.md
3
+ *
4
+ * Parses and manages the package registry file.
5
+ */
6
+ /**
7
+ * Package entry in the registry
8
+ */
9
+ export interface PackageEntry {
10
+ id: string;
11
+ description: string;
12
+ source: string;
13
+ provider: string;
14
+ cached: string;
15
+ version: string;
16
+ fetched: string;
17
+ integrity?: string;
18
+ category: string;
19
+ }
20
+ /**
21
+ * Registry metadata from frontmatter
22
+ */
23
+ export interface RegistryMetadata {
24
+ name: string;
25
+ type: string;
26
+ description: string;
27
+ }
28
+ /**
29
+ * Parsed package registry
30
+ */
31
+ export interface ParsedRegistry {
32
+ metadata: RegistryMetadata;
33
+ packages: PackageEntry[];
34
+ }
35
+ /**
36
+ * Derive entry ID from URL
37
+ *
38
+ * If URL has #anchor, use anchor as ID
39
+ * Else, use filename without extension
40
+ * Slugify result (lowercase, hyphens)
41
+ */
42
+ export declare function deriveEntryId(url: string): string;
43
+ /**
44
+ * Derive category from URL path
45
+ */
46
+ export declare function deriveCategory(url: string): string;
47
+ /**
48
+ * Parse package.busy.md content
49
+ */
50
+ export declare function parsePackageRegistry(content: string): ParsedRegistry;
51
+ /**
52
+ * Package Registry Manager
53
+ *
54
+ * Manages the package.busy.md file in a workspace.
55
+ */
56
+ export declare class PackageRegistry {
57
+ private workspaceRoot;
58
+ private registryPath;
59
+ private metadata;
60
+ private packages;
61
+ constructor(workspaceRoot: string);
62
+ /**
63
+ * Initialize a new package.busy.md if it doesn't exist
64
+ */
65
+ init(): Promise<void>;
66
+ /**
67
+ * Load existing package.busy.md
68
+ */
69
+ load(): Promise<void>;
70
+ /**
71
+ * Save changes to package.busy.md
72
+ */
73
+ save(): Promise<void>;
74
+ /**
75
+ * Get all packages
76
+ */
77
+ getPackages(): PackageEntry[];
78
+ /**
79
+ * Get package by ID
80
+ */
81
+ getPackage(id: string): PackageEntry | undefined;
82
+ /**
83
+ * Add or update a package
84
+ */
85
+ addPackage(entry: PackageEntry): void;
86
+ /**
87
+ * Remove a package by ID
88
+ */
89
+ removePackage(id: string): boolean;
90
+ /**
91
+ * Get packages by category
92
+ */
93
+ getPackagesByCategory(category: string): PackageEntry[];
94
+ /**
95
+ * Get all unique categories
96
+ */
97
+ getCategories(): string[];
98
+ }
99
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAajD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAclD;AAuCD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CA0FpE;AA+FD;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,QAAQ,CAA4B;gBAEhC,aAAa,EAAE,MAAM;IAWjC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B;;OAEG;IACH,WAAW,IAAI,YAAY,EAAE;IAI7B;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIhD;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAIrC;;OAEG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIlC;;OAEG;IACH,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE;IAIvD;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;CAO1B"}