@fractary/core 0.3.2 → 0.4.0

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 (122) hide show
  1. package/dist/__tests__/factories.test.d.ts +5 -0
  2. package/dist/__tests__/factories.test.d.ts.map +1 -0
  3. package/dist/__tests__/factories.test.js +66 -0
  4. package/dist/__tests__/factories.test.js.map +1 -0
  5. package/dist/auth/__tests__/create-token-provider.test.d.ts +5 -0
  6. package/dist/auth/__tests__/create-token-provider.test.d.ts.map +1 -0
  7. package/dist/auth/__tests__/create-token-provider.test.js +104 -0
  8. package/dist/auth/__tests__/create-token-provider.test.js.map +1 -0
  9. package/dist/auth/__tests__/github-app-auth.test.d.ts +5 -0
  10. package/dist/auth/__tests__/github-app-auth.test.d.ts.map +1 -0
  11. package/dist/auth/__tests__/github-app-auth.test.js +293 -0
  12. package/dist/auth/__tests__/github-app-auth.test.js.map +1 -0
  13. package/dist/auth/__tests__/static-token-provider.test.d.ts +5 -0
  14. package/dist/auth/__tests__/static-token-provider.test.d.ts.map +1 -0
  15. package/dist/auth/__tests__/static-token-provider.test.js +54 -0
  16. package/dist/auth/__tests__/static-token-provider.test.js.map +1 -0
  17. package/dist/auth/github-app-auth.d.ts +109 -0
  18. package/dist/auth/github-app-auth.d.ts.map +1 -0
  19. package/dist/auth/github-app-auth.js +262 -0
  20. package/dist/auth/github-app-auth.js.map +1 -0
  21. package/dist/auth/github-app-token-provider.d.ts +59 -0
  22. package/dist/auth/github-app-token-provider.d.ts.map +1 -0
  23. package/dist/auth/github-app-token-provider.js +68 -0
  24. package/dist/auth/github-app-token-provider.js.map +1 -0
  25. package/dist/auth/index.d.ts +45 -0
  26. package/dist/auth/index.d.ts.map +1 -0
  27. package/dist/auth/index.js +74 -0
  28. package/dist/auth/index.js.map +1 -0
  29. package/dist/auth/static-token-provider.d.ts +35 -0
  30. package/dist/auth/static-token-provider.d.ts.map +1 -0
  31. package/dist/auth/static-token-provider.js +45 -0
  32. package/dist/auth/static-token-provider.js.map +1 -0
  33. package/dist/auth/types.d.ts +49 -0
  34. package/dist/auth/types.d.ts.map +1 -0
  35. package/dist/auth/types.js +8 -0
  36. package/dist/auth/types.js.map +1 -0
  37. package/dist/common/yaml-config.d.ts +10 -0
  38. package/dist/common/yaml-config.d.ts.map +1 -1
  39. package/dist/common/yaml-config.js.map +1 -1
  40. package/dist/config/__tests__/loader.test.d.ts +5 -0
  41. package/dist/config/__tests__/loader.test.d.ts.map +1 -0
  42. package/dist/config/__tests__/loader.test.js +129 -0
  43. package/dist/config/__tests__/loader.test.js.map +1 -0
  44. package/dist/config/index.d.ts +8 -0
  45. package/dist/config/index.d.ts.map +1 -0
  46. package/dist/config/index.js +27 -0
  47. package/dist/config/index.js.map +1 -0
  48. package/dist/config/loader.d.ts +126 -0
  49. package/dist/config/loader.d.ts.map +1 -0
  50. package/dist/config/loader.js +277 -0
  51. package/dist/config/loader.js.map +1 -0
  52. package/dist/docs/index.d.ts +5 -0
  53. package/dist/docs/index.d.ts.map +1 -1
  54. package/dist/docs/index.js +6 -1
  55. package/dist/docs/index.js.map +1 -1
  56. package/dist/docs/manager.d.ts +27 -0
  57. package/dist/docs/manager.d.ts.map +1 -1
  58. package/dist/docs/manager.js +168 -15
  59. package/dist/docs/manager.js.map +1 -1
  60. package/dist/docs/type-registry.d.ts +123 -0
  61. package/dist/docs/type-registry.d.ts.map +1 -0
  62. package/dist/docs/type-registry.js +393 -0
  63. package/dist/docs/type-registry.js.map +1 -0
  64. package/dist/docs/types.d.ts +93 -0
  65. package/dist/docs/types.d.ts.map +1 -1
  66. package/dist/factories.d.ts +89 -0
  67. package/dist/factories.d.ts.map +1 -0
  68. package/dist/factories.js +228 -0
  69. package/dist/factories.js.map +1 -0
  70. package/dist/file/factory.d.ts +41 -0
  71. package/dist/file/factory.d.ts.map +1 -0
  72. package/dist/file/factory.js +237 -0
  73. package/dist/file/factory.js.map +1 -0
  74. package/dist/file/gcs.d.ts +66 -0
  75. package/dist/file/gcs.d.ts.map +1 -0
  76. package/dist/file/gcs.js +226 -0
  77. package/dist/file/gcs.js.map +1 -0
  78. package/dist/file/gdrive.d.ts +78 -0
  79. package/dist/file/gdrive.d.ts.map +1 -0
  80. package/dist/file/gdrive.js +302 -0
  81. package/dist/file/gdrive.js.map +1 -0
  82. package/dist/file/index.d.ts +13 -1
  83. package/dist/file/index.d.ts.map +1 -1
  84. package/dist/file/index.js +25 -1
  85. package/dist/file/index.js.map +1 -1
  86. package/dist/file/manager.d.ts +83 -2
  87. package/dist/file/manager.d.ts.map +1 -1
  88. package/dist/file/manager.js +125 -4
  89. package/dist/file/manager.js.map +1 -1
  90. package/dist/file/r2.d.ts +56 -0
  91. package/dist/file/r2.d.ts.map +1 -0
  92. package/dist/file/r2.js +96 -0
  93. package/dist/file/r2.js.map +1 -0
  94. package/dist/file/s3.d.ts +61 -0
  95. package/dist/file/s3.d.ts.map +1 -0
  96. package/dist/file/s3.js +258 -0
  97. package/dist/file/s3.js.map +1 -0
  98. package/dist/file/types.d.ts +145 -2
  99. package/dist/file/types.d.ts.map +1 -1
  100. package/dist/index.d.ts +3 -0
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +6 -0
  103. package/dist/index.js.map +1 -1
  104. package/dist/logs/index.d.ts +1 -0
  105. package/dist/logs/index.d.ts.map +1 -1
  106. package/dist/logs/index.js +3 -1
  107. package/dist/logs/index.js.map +1 -1
  108. package/dist/logs/manager.d.ts +29 -2
  109. package/dist/logs/manager.d.ts.map +1 -1
  110. package/dist/logs/manager.js +48 -7
  111. package/dist/logs/manager.js.map +1 -1
  112. package/dist/logs/type-registry.d.ts +180 -0
  113. package/dist/logs/type-registry.d.ts.map +1 -0
  114. package/dist/logs/type-registry.js +421 -0
  115. package/dist/logs/type-registry.js.map +1 -0
  116. package/dist/logs/type-registry.test.d.ts +5 -0
  117. package/dist/logs/type-registry.test.d.ts.map +1 -0
  118. package/dist/logs/type-registry.test.js +671 -0
  119. package/dist/logs/type-registry.test.js.map +1 -0
  120. package/dist/logs/types.d.ts +2 -0
  121. package/dist/logs/types.d.ts.map +1 -1
  122. package/package.json +62 -8
@@ -7,6 +7,12 @@
7
7
  * Documentation format types
8
8
  */
9
9
  export type DocFormat = 'markdown' | 'html' | 'pdf' | 'text';
10
+ /**
11
+ * Metadata storage mode
12
+ * - 'frontmatter': Metadata embedded in YAML frontmatter at start of markdown files (recommended)
13
+ * - 'sidecar': Metadata stored in separate .meta.yaml files alongside content files (legacy)
14
+ */
15
+ export type MetadataMode = 'frontmatter' | 'sidecar';
10
16
  /**
11
17
  * Documentation metadata
12
18
  */
@@ -39,6 +45,14 @@ export interface DocMetadata {
39
45
  * Tags for categorization
40
46
  */
41
47
  tags?: string[];
48
+ /**
49
+ * Document type (e.g., 'adr', 'api', 'architecture')
50
+ */
51
+ docType?: string;
52
+ /**
53
+ * Document status (e.g., 'draft', 'published', 'deprecated')
54
+ */
55
+ status?: string;
42
56
  /**
43
57
  * Custom metadata
44
58
  */
@@ -85,6 +99,10 @@ export interface DocSearchQuery {
85
99
  * Filter by author
86
100
  */
87
101
  author?: string;
102
+ /**
103
+ * Filter by document type
104
+ */
105
+ docType?: string;
88
106
  /**
89
107
  * Filter by date range
90
108
  */
@@ -109,5 +127,80 @@ export interface DocsManagerConfig {
109
127
  * Default format for new documents
110
128
  */
111
129
  defaultFormat?: DocFormat;
130
+ /**
131
+ * Metadata storage mode (default: 'frontmatter' for markdown, 'sidecar' for others)
132
+ */
133
+ metadataMode?: MetadataMode;
134
+ }
135
+ /**
136
+ * Document type definition
137
+ */
138
+ export interface DocType {
139
+ /**
140
+ * Type identifier (e.g., 'adr', 'api', 'architecture')
141
+ */
142
+ id: string;
143
+ /**
144
+ * Human-readable name
145
+ */
146
+ displayName: string;
147
+ /**
148
+ * Description of this document type
149
+ */
150
+ description: string;
151
+ /**
152
+ * Mustache template for document content
153
+ */
154
+ template: string;
155
+ /**
156
+ * Default output path relative to docs directory
157
+ */
158
+ outputPath: string;
159
+ /**
160
+ * File naming configuration
161
+ */
162
+ fileNaming: {
163
+ pattern: string;
164
+ autoNumber?: boolean;
165
+ numberFormat?: string;
166
+ slugSource?: string;
167
+ slugMaxLength?: number;
168
+ };
169
+ /**
170
+ * Frontmatter field configuration
171
+ */
172
+ frontmatter: {
173
+ requiredFields: string[];
174
+ optionalFields?: string[];
175
+ defaults?: Record<string, unknown>;
176
+ };
177
+ /**
178
+ * Document structure requirements
179
+ */
180
+ structure?: {
181
+ requiredSections?: string[];
182
+ optionalSections?: string[];
183
+ sectionOrder?: string[];
184
+ };
185
+ /**
186
+ * Status field configuration
187
+ */
188
+ status?: {
189
+ allowedValues: string[];
190
+ default: string;
191
+ };
192
+ /**
193
+ * Index configuration
194
+ */
195
+ indexConfig?: {
196
+ indexFile: string;
197
+ sortBy?: string;
198
+ sortOrder?: 'asc' | 'desc';
199
+ entryTemplate?: string;
200
+ };
201
+ /**
202
+ * Documentation standards (markdown content)
203
+ */
204
+ standards?: string;
112
205
  }
113
206
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/docs/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,IAAI,CAAC;IAEjB;;OAEG;IACH,SAAS,CAAC,EAAE,IAAI,CAAC;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB;;OAEG;IACH,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,GAAG;IAClB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,MAAM,EAAE,SAAS,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,WAAW,CAAC;IAEtB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,SAAS,CAAC,EAAE;QACV,IAAI,CAAC,EAAE,IAAI,CAAC;QACZ,EAAE,CAAC,EAAE,IAAI,CAAC;KACX,CAAC;IAEF;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/docs/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * @fractary/core - Manager Factories
3
+ *
4
+ * Factory functions for creating authenticated managers.
5
+ * Provides a convenient way to create WorkManager and RepoManager
6
+ * with automatic configuration loading and authentication.
7
+ */
8
+ import { WorkManager } from './work';
9
+ import { RepoManager } from './repo';
10
+ import { LoadedConfig } from './config/loader';
11
+ /**
12
+ * Options for creating managers
13
+ */
14
+ export interface CreateManagerOptions {
15
+ /** Pre-loaded configuration (optional - will load if not provided) */
16
+ config?: LoadedConfig;
17
+ /** Working directory for repository operations */
18
+ cwd?: string;
19
+ /** Skip authentication (use existing gh CLI auth instead) */
20
+ skipAuth?: boolean;
21
+ }
22
+ /**
23
+ * Create an authenticated WorkManager
24
+ *
25
+ * Loads configuration automatically and creates a WorkManager
26
+ * with proper authentication.
27
+ *
28
+ * @param options Creation options
29
+ * @returns Configured WorkManager instance
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * // Simple usage - auto-loads config and auth
34
+ * const workManager = await createWorkManager();
35
+ * const issues = await workManager.searchIssues('bug');
36
+ *
37
+ * // With pre-loaded config
38
+ * const config = await loadConfig();
39
+ * const workManager = await createWorkManager({ config });
40
+ * ```
41
+ */
42
+ export declare function createWorkManager(options?: CreateManagerOptions): Promise<WorkManager>;
43
+ /**
44
+ * Create an authenticated RepoManager
45
+ *
46
+ * Loads configuration automatically and creates a RepoManager
47
+ * with proper authentication.
48
+ *
49
+ * @param options Creation options
50
+ * @returns Configured RepoManager instance
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * // Simple usage - auto-loads config and auth
55
+ * const repoManager = await createRepoManager();
56
+ * const status = repoManager.getStatus();
57
+ *
58
+ * // With explicit working directory
59
+ * const repoManager = await createRepoManager({ cwd: '/path/to/repo' });
60
+ *
61
+ * // With pre-loaded config
62
+ * const config = await loadConfig();
63
+ * const repoManager = await createRepoManager({ config });
64
+ * ```
65
+ */
66
+ export declare function createRepoManager(options?: CreateManagerOptions): Promise<RepoManager>;
67
+ /**
68
+ * Create both WorkManager and RepoManager with shared config
69
+ *
70
+ * Useful when you need both managers and want to share
71
+ * configuration and authentication.
72
+ *
73
+ * @param options Creation options
74
+ * @returns Object with both managers
75
+ *
76
+ * @example
77
+ * ```typescript
78
+ * const { work, repo } = await createManagers();
79
+ *
80
+ * // Fetch issue and create branch
81
+ * const issue = await work.fetchIssue(123);
82
+ * await repo.createBranch(`feature/${issue.number}-${slug(issue.title)}`);
83
+ * ```
84
+ */
85
+ export declare function createManagers(options?: CreateManagerOptions): Promise<{
86
+ work: WorkManager;
87
+ repo: RepoManager;
88
+ }>;
89
+ //# sourceMappingURL=factories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../src/factories.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAc,YAAY,EAAE,MAAM,iBAAiB,CAAC;AA0C3D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,sEAAsE;IACtE,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,kDAAkD;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAkFD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,WAAW,CAAC,CAqBtB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,WAAW,CAAC,CAqBtB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,cAAc,CAClC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC,CAwBnD"}
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ /**
3
+ * @fractary/core - Manager Factories
4
+ *
5
+ * Factory functions for creating authenticated managers.
6
+ * Provides a convenient way to create WorkManager and RepoManager
7
+ * with automatic configuration loading and authentication.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.createWorkManager = createWorkManager;
11
+ exports.createRepoManager = createRepoManager;
12
+ exports.createManagers = createManagers;
13
+ const work_1 = require("./work");
14
+ const repo_1 = require("./repo");
15
+ const loader_1 = require("./config/loader");
16
+ const errors_1 = require("./common/errors");
17
+ /** Regex pattern for valid GitHub owner/repo format */
18
+ const PROJECT_FORMAT_REGEX = /^[a-zA-Z0-9_.-]+\/[a-zA-Z0-9_.-]+$/;
19
+ /**
20
+ * Validate and parse project string into owner/repo
21
+ *
22
+ * @param project Project string in "owner/repo" format
23
+ * @returns Tuple of [owner, repo] or null if invalid
24
+ * @throws ConfigurationError if format is invalid
25
+ */
26
+ function parseProject(project) {
27
+ if (!project || typeof project !== 'string') {
28
+ throw new errors_1.ConfigurationError('Invalid project configuration: project must be a non-empty string', { project });
29
+ }
30
+ const trimmed = project.trim();
31
+ if (!PROJECT_FORMAT_REGEX.test(trimmed)) {
32
+ throw new errors_1.ConfigurationError(`Invalid project format: "${project}". Expected "owner/repo" format (e.g., "fractary/core")`, { project });
33
+ }
34
+ const parts = trimmed.split('/');
35
+ if (parts.length !== 2 || !parts[0] || !parts[1]) {
36
+ throw new errors_1.ConfigurationError(`Invalid project format: "${project}". Expected exactly one "/" separator`, { project });
37
+ }
38
+ return [parts[0], parts[1]];
39
+ }
40
+ /**
41
+ * Build WorkConfig from LoadedConfig
42
+ *
43
+ * @param config Loaded configuration
44
+ * @param token Token from token provider (if available)
45
+ * @returns WorkConfig for WorkManager
46
+ * @throws ConfigurationError if project format is invalid
47
+ */
48
+ function buildWorkConfig(config, token) {
49
+ // Get platform from work config or default to github
50
+ const workConfig = config.work;
51
+ const activeHandler = workConfig?.active_handler || 'github';
52
+ // Map active_handler to platform
53
+ const platform = activeHandler;
54
+ // Get handler-specific config
55
+ const handlerConfig = workConfig?.handlers?.[activeHandler] || {};
56
+ // Extract owner/repo from project string if needed
57
+ let owner = handlerConfig.owner;
58
+ let repo = handlerConfig.repo;
59
+ const project = handlerConfig.project || config.github?.project;
60
+ // Parse and validate project format if we need to extract owner/repo
61
+ if (!owner && !repo && project) {
62
+ [owner, repo] = parseProject(project);
63
+ }
64
+ return {
65
+ platform,
66
+ owner,
67
+ repo,
68
+ project: project,
69
+ token: token || handlerConfig.token || config.github?.token,
70
+ };
71
+ }
72
+ /**
73
+ * Build RepoConfig from LoadedConfig
74
+ *
75
+ * @param config Loaded configuration
76
+ * @param token Token from token provider (if available)
77
+ * @returns RepoConfig for RepoManager
78
+ * @throws ConfigurationError if project format is invalid
79
+ */
80
+ function buildRepoConfig(config, token) {
81
+ // Get platform from repo config or default to github
82
+ const repoConfig = config.repo;
83
+ const activeHandler = repoConfig?.active_handler || 'github';
84
+ // Map active_handler to platform
85
+ const platform = activeHandler;
86
+ // Get handler-specific config
87
+ const handlerConfig = repoConfig?.handlers?.[activeHandler] || {};
88
+ // Get defaults
89
+ const defaults = repoConfig?.defaults || {};
90
+ // Extract owner/repo from project string if needed
91
+ let owner = handlerConfig.owner;
92
+ let repo = handlerConfig.repo;
93
+ const project = handlerConfig.project || config.github?.project;
94
+ // Parse and validate project format if we need to extract owner/repo
95
+ if (!owner && !repo && project) {
96
+ [owner, repo] = parseProject(project);
97
+ }
98
+ return {
99
+ platform,
100
+ owner,
101
+ repo,
102
+ defaultBranch: defaults.default_branch || handlerConfig.default_branch,
103
+ token: token || handlerConfig.token || config.github?.token,
104
+ branchPrefixes: defaults.branch_naming?.prefixes,
105
+ };
106
+ }
107
+ /**
108
+ * Create an authenticated WorkManager
109
+ *
110
+ * Loads configuration automatically and creates a WorkManager
111
+ * with proper authentication.
112
+ *
113
+ * @param options Creation options
114
+ * @returns Configured WorkManager instance
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * // Simple usage - auto-loads config and auth
119
+ * const workManager = await createWorkManager();
120
+ * const issues = await workManager.searchIssues('bug');
121
+ *
122
+ * // With pre-loaded config
123
+ * const config = await loadConfig();
124
+ * const workManager = await createWorkManager({ config });
125
+ * ```
126
+ */
127
+ async function createWorkManager(options = {}) {
128
+ const { config: providedConfig, skipAuth = false } = options;
129
+ // Load config if not provided
130
+ const config = providedConfig || await (0, loader_1.loadConfig)({ skipAuth });
131
+ // Get token from provider if available
132
+ let token;
133
+ if (!skipAuth && config.tokenProvider) {
134
+ try {
135
+ token = await config.tokenProvider.getToken();
136
+ }
137
+ catch {
138
+ // Token provider failed - continue without token
139
+ // The manager will fall back to gh CLI auth
140
+ }
141
+ }
142
+ // Build WorkConfig
143
+ const workConfig = buildWorkConfig(config, token);
144
+ return new work_1.WorkManager(workConfig);
145
+ }
146
+ /**
147
+ * Create an authenticated RepoManager
148
+ *
149
+ * Loads configuration automatically and creates a RepoManager
150
+ * with proper authentication.
151
+ *
152
+ * @param options Creation options
153
+ * @returns Configured RepoManager instance
154
+ *
155
+ * @example
156
+ * ```typescript
157
+ * // Simple usage - auto-loads config and auth
158
+ * const repoManager = await createRepoManager();
159
+ * const status = repoManager.getStatus();
160
+ *
161
+ * // With explicit working directory
162
+ * const repoManager = await createRepoManager({ cwd: '/path/to/repo' });
163
+ *
164
+ * // With pre-loaded config
165
+ * const config = await loadConfig();
166
+ * const repoManager = await createRepoManager({ config });
167
+ * ```
168
+ */
169
+ async function createRepoManager(options = {}) {
170
+ const { config: providedConfig, cwd, skipAuth = false } = options;
171
+ // Load config if not provided
172
+ const config = providedConfig || await (0, loader_1.loadConfig)({ skipAuth });
173
+ // Get token from provider if available
174
+ let token;
175
+ if (!skipAuth && config.tokenProvider) {
176
+ try {
177
+ token = await config.tokenProvider.getToken();
178
+ }
179
+ catch {
180
+ // Token provider failed - continue without token
181
+ // The manager will fall back to gh CLI auth
182
+ }
183
+ }
184
+ // Build RepoConfig
185
+ const repoConfig = buildRepoConfig(config, token);
186
+ return new repo_1.RepoManager(repoConfig, cwd);
187
+ }
188
+ /**
189
+ * Create both WorkManager and RepoManager with shared config
190
+ *
191
+ * Useful when you need both managers and want to share
192
+ * configuration and authentication.
193
+ *
194
+ * @param options Creation options
195
+ * @returns Object with both managers
196
+ *
197
+ * @example
198
+ * ```typescript
199
+ * const { work, repo } = await createManagers();
200
+ *
201
+ * // Fetch issue and create branch
202
+ * const issue = await work.fetchIssue(123);
203
+ * await repo.createBranch(`feature/${issue.number}-${slug(issue.title)}`);
204
+ * ```
205
+ */
206
+ async function createManagers(options = {}) {
207
+ const { config: providedConfig, cwd, skipAuth = false } = options;
208
+ // Load config once
209
+ const config = providedConfig || await (0, loader_1.loadConfig)({ skipAuth });
210
+ // Get token once
211
+ let token;
212
+ if (!skipAuth && config.tokenProvider) {
213
+ try {
214
+ token = await config.tokenProvider.getToken();
215
+ }
216
+ catch {
217
+ // Token provider failed - continue without token
218
+ }
219
+ }
220
+ // Build configs
221
+ const workConfig = buildWorkConfig(config, token);
222
+ const repoConfig = buildRepoConfig(config, token);
223
+ return {
224
+ work: new work_1.WorkManager(workConfig),
225
+ repo: new repo_1.RepoManager(repoConfig, cwd),
226
+ };
227
+ }
228
+ //# sourceMappingURL=factories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factories.js","sourceRoot":"","sources":["../src/factories.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AA8JH,8CAuBC;AAyBD,8CAuBC;AAoBD,wCA0BC;AAjRD,iCAAqC;AACrC,iCAAqC;AACrC,4CAA2D;AAE3D,4CAAqD;AAErD,uDAAuD;AACvD,MAAM,oBAAoB,GAAG,oCAAoC,CAAC;AAElE;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,OAAe;IACnC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,IAAI,2BAAkB,CAC1B,mEAAmE,EACnE,EAAE,OAAO,EAAE,CACZ,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAE/B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,2BAAkB,CAC1B,4BAA4B,OAAO,yDAAyD,EAC5F,EAAE,OAAO,EAAE,CACZ,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,2BAAkB,CAC1B,4BAA4B,OAAO,uCAAuC,EAC1E,EAAE,OAAO,EAAE,CACZ,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC;AAcD;;;;;;;GAOG;AACH,SAAS,eAAe,CAAC,MAAoB,EAAE,KAAc;IAC3D,qDAAqD;IACrD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;IAC/B,MAAM,aAAa,GAAG,UAAU,EAAE,cAAc,IAAI,QAAQ,CAAC;IAE7D,iCAAiC;IACjC,MAAM,QAAQ,GAAG,aAAuC,CAAC;IAEzD,8BAA8B;IAC9B,MAAM,aAAa,GAAG,UAAU,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IAElE,mDAAmD;IACnD,IAAI,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;IAChC,IAAI,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;IAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAEhE,qEAAqE;IACrE,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;QAC/B,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,OAAO;QACL,QAAQ;QACR,KAAK;QACL,IAAI;QACJ,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,KAAK,IAAI,aAAa,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK;KAC5D,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CAAC,MAAoB,EAAE,KAAc;IAC3D,qDAAqD;IACrD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;IAC/B,MAAM,aAAa,GAAG,UAAU,EAAE,cAAc,IAAI,QAAQ,CAAC;IAE7D,iCAAiC;IACjC,MAAM,QAAQ,GAAG,aAAuC,CAAC;IAEzD,8BAA8B;IAC9B,MAAM,aAAa,GAAG,UAAU,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IAElE,eAAe;IACf,MAAM,QAAQ,GAAG,UAAU,EAAE,QAAQ,IAAI,EAAE,CAAC;IAE5C,mDAAmD;IACnD,IAAI,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;IAChC,IAAI,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;IAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAEhE,qEAAqE;IACrE,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;QAC/B,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,OAAO;QACL,QAAQ;QACR,KAAK;QACL,IAAI;QACJ,aAAa,EAAE,QAAQ,CAAC,cAAc,IAAI,aAAa,CAAC,cAAc;QACtE,KAAK,EAAE,KAAK,IAAI,aAAa,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK;QAC3D,cAAc,EAAE,QAAQ,CAAC,aAAa,EAAE,QAAQ;KACjD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACI,KAAK,UAAU,iBAAiB,CACrC,UAAgC,EAAE;IAElC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAE7D,8BAA8B;IAC9B,MAAM,MAAM,GAAG,cAAc,IAAI,MAAM,IAAA,mBAAU,EAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEhE,uCAAuC;IACvC,IAAI,KAAyB,CAAC;IAC9B,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,iDAAiD;YACjD,4CAA4C;QAC9C,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAElD,OAAO,IAAI,kBAAW,CAAC,UAAU,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACI,KAAK,UAAU,iBAAiB,CACrC,UAAgC,EAAE;IAElC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAElE,8BAA8B;IAC9B,MAAM,MAAM,GAAG,cAAc,IAAI,MAAM,IAAA,mBAAU,EAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEhE,uCAAuC;IACvC,IAAI,KAAyB,CAAC;IAC9B,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,iDAAiD;YACjD,4CAA4C;QAC9C,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAElD,OAAO,IAAI,kBAAW,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACI,KAAK,UAAU,cAAc,CAClC,UAAgC,EAAE;IAElC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAElE,mBAAmB;IACnB,MAAM,MAAM,GAAG,cAAc,IAAI,MAAM,IAAA,mBAAU,EAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEhE,iBAAiB;IACjB,IAAI,KAAyB,CAAC;IAC9B,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,iDAAiD;QACnD,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAElD,OAAO;QACL,IAAI,EAAE,IAAI,kBAAW,CAAC,UAAU,CAAC;QACjC,IAAI,EAAE,IAAI,kBAAW,CAAC,UAAU,EAAE,GAAG,CAAC;KACvC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @fractary/core - Storage Factory
3
+ *
4
+ * Factory function for creating storage backends based on configuration.
5
+ * Supports automatic configuration loading from .fractary/config.yaml.
6
+ */
7
+ import { Storage, StorageConfig, StorageType, SourceConfig } from './types';
8
+ /**
9
+ * Create a storage backend from configuration
10
+ *
11
+ * @param config - Storage configuration
12
+ * @returns Storage instance
13
+ */
14
+ export declare function createStorage(config: StorageConfig): Storage;
15
+ /**
16
+ * Convert a source configuration from config.yaml to a StorageConfig
17
+ *
18
+ * @param source - Source configuration from config.yaml
19
+ * @returns StorageConfig for creating a storage backend
20
+ */
21
+ export declare function sourceConfigToStorageConfig(source: SourceConfig): StorageConfig;
22
+ /**
23
+ * Create a storage backend from a named source in config.yaml
24
+ *
25
+ * @param sourceName - Name of the source (e.g., 'specs', 'logs')
26
+ * @param fileConfig - File plugin configuration from config.yaml
27
+ * @returns Storage instance
28
+ */
29
+ export declare function createStorageFromSource(sourceName: string, fileConfig: {
30
+ sources?: Record<string, SourceConfig>;
31
+ }): Storage;
32
+ /**
33
+ * Get the default storage type based on configuration
34
+ *
35
+ * @param fileConfig - File plugin configuration
36
+ * @returns Default storage type
37
+ */
38
+ export declare function getDefaultStorageType(fileConfig?: {
39
+ sources?: Record<string, SourceConfig>;
40
+ }): StorageType;
41
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/file/factory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,OAAO,EACP,aAAa,EACb,WAAW,EAMX,YAAY,EACb,MAAM,SAAS,CAAC;AAGjB;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAqB5D;AA8ED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa,CAsD/E;AAiBD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;CAAE,GACrD,OAAO,CAaT;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;CAAE,GACtD,WAAW,CAQb"}