@fractary/core-cli 0.1.0 → 0.2.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.
- package/README.md +35 -3
- package/dist/cli.js +7 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/config.d.ts +13 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +240 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/utils/config.d.ts +56 -33
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +64 -157
- package/dist/utils/config.js.map +1 -1
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -2,10 +2,29 @@
|
|
|
2
2
|
|
|
3
3
|
Command-line interface for Fractary Core SDK - work tracking, repository management, specifications, logging, file storage, and documentation.
|
|
4
4
|
|
|
5
|
+
[](https://www.npmjs.com/package/@fractary/core-cli)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
The Fractary Core CLI provides command-line access to all core operations including work tracking, repository management, specification management, logging, file storage, and documentation. It's designed for automation, scripting, and CI/CD integration.
|
|
11
|
+
|
|
12
|
+
### Key Features
|
|
13
|
+
|
|
14
|
+
- **6 Command Modules**: work, repo, spec, logs, file, docs
|
|
15
|
+
- **Multi-Platform Support**: GitHub, GitLab, Bitbucket, Jira, Linear
|
|
16
|
+
- **JSON Output**: Machine-readable output for scripting
|
|
17
|
+
- **Configuration Files**: YAML/JSON configuration support
|
|
18
|
+
- **Environment Variables**: Flexible configuration options
|
|
19
|
+
|
|
5
20
|
## Installation
|
|
6
21
|
|
|
7
22
|
```bash
|
|
23
|
+
# Install globally
|
|
8
24
|
npm install -g @fractary/core-cli
|
|
25
|
+
|
|
26
|
+
# Or use with npx (no installation required)
|
|
27
|
+
npx @fractary/core-cli [command]
|
|
9
28
|
```
|
|
10
29
|
|
|
11
30
|
## Usage
|
|
@@ -307,7 +326,20 @@ program.parse();
|
|
|
307
326
|
|
|
308
327
|
MIT
|
|
309
328
|
|
|
310
|
-
##
|
|
329
|
+
## Documentation
|
|
330
|
+
|
|
331
|
+
- **[Complete CLI Reference](../../README.md#cli)** - Full command documentation
|
|
332
|
+
- **[Configuration Guide](../../docs/guides/configuration.md)** - Configuration options
|
|
333
|
+
- **[Integration Guide](../../docs/guides/integration.md)** - CI/CD integration
|
|
334
|
+
- **[Examples](../../docs/examples/)** - Usage examples and scripts
|
|
335
|
+
|
|
336
|
+
## Related Packages
|
|
337
|
+
|
|
338
|
+
- **[@fractary/core](../sdk/js/)** - Core SDK for JavaScript/TypeScript
|
|
339
|
+
- **[@fractary/core-mcp](../mcp/server/)** - MCP server for AI agents
|
|
340
|
+
|
|
341
|
+
## Links
|
|
311
342
|
|
|
312
|
-
- [
|
|
313
|
-
- [fractary/core
|
|
343
|
+
- [GitHub Repository](https://github.com/fractary/core)
|
|
344
|
+
- [Issue Tracker](https://github.com/fractary/core/issues)
|
|
345
|
+
- [NPM Package](https://www.npmjs.com/package/@fractary/core-cli)
|
package/dist/cli.js
CHANGED
|
@@ -17,6 +17,7 @@ const spec_1 = require("./commands/spec");
|
|
|
17
17
|
const logs_1 = require("./commands/logs");
|
|
18
18
|
const file_1 = require("./commands/file");
|
|
19
19
|
const docs_1 = require("./commands/docs");
|
|
20
|
+
const config_1 = require("./commands/config");
|
|
20
21
|
// Package information
|
|
21
22
|
const packageJson = require('../package.json');
|
|
22
23
|
// Create main program
|
|
@@ -32,9 +33,12 @@ program.addCommand((0, spec_1.createSpecCommand)());
|
|
|
32
33
|
program.addCommand((0, logs_1.createLogsCommand)());
|
|
33
34
|
program.addCommand((0, file_1.createFileCommand)());
|
|
34
35
|
program.addCommand((0, docs_1.createDocsCommand)());
|
|
36
|
+
// Add config command
|
|
37
|
+
(0, config_1.registerConfigCommand)(program);
|
|
35
38
|
// Custom help text
|
|
36
39
|
program.addHelpText('after', `
|
|
37
40
|
${chalk_1.default.bold('Commands:')}
|
|
41
|
+
config Manage configuration (validate, show)
|
|
38
42
|
work Work item tracking (issues, comments, labels, milestones)
|
|
39
43
|
repo Repository operations (branches, commits, PRs, tags, worktrees)
|
|
40
44
|
spec Specification management (create, validate, refine)
|
|
@@ -43,6 +47,8 @@ ${chalk_1.default.bold('Commands:')}
|
|
|
43
47
|
docs Documentation management (create, search, export)
|
|
44
48
|
|
|
45
49
|
${chalk_1.default.bold('Examples:')}
|
|
50
|
+
$ fractary-core config validate
|
|
51
|
+
$ fractary-core config show
|
|
46
52
|
$ fractary-core work issue fetch 123
|
|
47
53
|
$ fractary-core repo commit --message "Add feature" --type feat
|
|
48
54
|
$ fractary-core spec validate SPEC-20241216
|
|
@@ -70,7 +76,7 @@ async function main() {
|
|
|
70
76
|
}
|
|
71
77
|
if (error.code === 'commander.unknownCommand') {
|
|
72
78
|
console.error(chalk_1.default.red('Unknown command:'), error.message);
|
|
73
|
-
console.log(chalk_1.default.gray('\nAvailable commands: work, repo, spec, logs, file, docs'));
|
|
79
|
+
console.log(chalk_1.default.gray('\nAvailable commands: config, work, repo, spec, logs, file, docs'));
|
|
74
80
|
console.log(chalk_1.default.gray('Run "fractary-core --help" for more information.'));
|
|
75
81
|
process.exit(1);
|
|
76
82
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;AAEA;;;;GAIG;;;;;AAEH,yCAAoC;AACpC,kDAA0B;AAC1B,0CAAoD;AACpD,0CAAoD;AACpD,0CAAoD;AACpD,0CAAoD;AACpD,0CAAoD;AACpD,0CAAoD;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config command - Validate and display Fractary Core configuration
|
|
3
|
+
*
|
|
4
|
+
* Commands:
|
|
5
|
+
* - validate: Validate .fractary/core/config.yaml
|
|
6
|
+
* - show: Display config (redacted)
|
|
7
|
+
*/
|
|
8
|
+
import { Command } from 'commander';
|
|
9
|
+
/**
|
|
10
|
+
* Register config command
|
|
11
|
+
*/
|
|
12
|
+
export declare function registerConfigCommand(program: Command): void;
|
|
13
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkPpC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAe5D"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Config command - Validate and display Fractary Core configuration
|
|
4
|
+
*
|
|
5
|
+
* Commands:
|
|
6
|
+
* - validate: Validate .fractary/core/config.yaml
|
|
7
|
+
* - show: Display config (redacted)
|
|
8
|
+
*/
|
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.registerConfigCommand = registerConfigCommand;
|
|
14
|
+
const config_js_1 = require("../utils/config.js");
|
|
15
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
16
|
+
const fs_1 = require("fs");
|
|
17
|
+
const yaml_config_1 = require("@fractary/core/common/yaml-config");
|
|
18
|
+
/**
|
|
19
|
+
* Redact sensitive values from config for display
|
|
20
|
+
*/
|
|
21
|
+
function redactConfig(config) {
|
|
22
|
+
if (!config)
|
|
23
|
+
return config;
|
|
24
|
+
const redacted = JSON.parse(JSON.stringify(config));
|
|
25
|
+
function redactObject(obj) {
|
|
26
|
+
for (const key in obj) {
|
|
27
|
+
if (typeof obj[key] === 'string') {
|
|
28
|
+
// Redact values that look like tokens or contain ${ENV_VAR}
|
|
29
|
+
if (key.toLowerCase().includes('token') ||
|
|
30
|
+
key.toLowerCase().includes('key') ||
|
|
31
|
+
key.toLowerCase().includes('secret') ||
|
|
32
|
+
key.toLowerCase().includes('password') ||
|
|
33
|
+
obj[key].includes('${')) {
|
|
34
|
+
if (obj[key].includes('${')) {
|
|
35
|
+
// Keep environment variable references
|
|
36
|
+
obj[key] = obj[key];
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
// Redact actual values
|
|
40
|
+
obj[key] = '********';
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else if (typeof obj[key] === 'object' && obj[key] !== null) {
|
|
45
|
+
redactObject(obj[key]);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
redactObject(redacted);
|
|
50
|
+
return redacted;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Validate configuration command
|
|
54
|
+
*/
|
|
55
|
+
async function validateCommand(options) {
|
|
56
|
+
try {
|
|
57
|
+
const projectRoot = (0, yaml_config_1.findProjectRoot)();
|
|
58
|
+
const configPath = (0, config_js_1.getConfigPath)(projectRoot);
|
|
59
|
+
console.log(chalk_1.default.blue('🔍 Validating Fractary Core configuration\n'));
|
|
60
|
+
console.log(chalk_1.default.gray(`Config file: ${configPath}\n`));
|
|
61
|
+
// Check if config file exists
|
|
62
|
+
if (!(0, fs_1.existsSync)(configPath)) {
|
|
63
|
+
console.log(chalk_1.default.red('❌ Configuration file not found'));
|
|
64
|
+
console.log(chalk_1.default.yellow('\nTo create a configuration file, run:'));
|
|
65
|
+
console.log(chalk_1.default.cyan(' fractary-core:configure'));
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
// Check if it's a valid YAML file by trying to load it
|
|
69
|
+
let config;
|
|
70
|
+
try {
|
|
71
|
+
config = (0, config_js_1.loadConfig)(projectRoot);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
console.log(chalk_1.default.red('❌ Invalid YAML format'));
|
|
75
|
+
console.log(chalk_1.default.yellow('\nError:'), error instanceof Error ? error.message : String(error));
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
if (!config) {
|
|
79
|
+
console.log(chalk_1.default.red('❌ Failed to load configuration'));
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
// Validation checks
|
|
83
|
+
const errors = [];
|
|
84
|
+
const warnings = [];
|
|
85
|
+
// Check version field
|
|
86
|
+
if (!config.version) {
|
|
87
|
+
errors.push('Missing required field: version');
|
|
88
|
+
}
|
|
89
|
+
else if (config.version !== '2.0') {
|
|
90
|
+
warnings.push(`Unexpected version: ${config.version} (expected: 2.0)`);
|
|
91
|
+
}
|
|
92
|
+
// Check for at least one plugin section
|
|
93
|
+
const pluginSections = ['work', 'repo', 'logs', 'file', 'spec', 'docs'];
|
|
94
|
+
const presentSections = pluginSections.filter((section) => config[section]);
|
|
95
|
+
if (presentSections.length === 0) {
|
|
96
|
+
warnings.push('No plugin sections found in configuration');
|
|
97
|
+
}
|
|
98
|
+
// Validate work section
|
|
99
|
+
if (config.work) {
|
|
100
|
+
if (!config.work.active_handler) {
|
|
101
|
+
errors.push('Missing required field: work.active_handler');
|
|
102
|
+
}
|
|
103
|
+
if (!config.work.handlers) {
|
|
104
|
+
errors.push('Missing required field: work.handlers');
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
const activeHandler = config.work.active_handler;
|
|
108
|
+
if (!config.work.handlers[activeHandler]) {
|
|
109
|
+
errors.push(`Configuration for work handler '${activeHandler}' not found in work.handlers`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Validate repo section
|
|
114
|
+
if (config.repo) {
|
|
115
|
+
if (!config.repo.active_handler) {
|
|
116
|
+
errors.push('Missing required field: repo.active_handler');
|
|
117
|
+
}
|
|
118
|
+
if (!config.repo.handlers) {
|
|
119
|
+
errors.push('Missing required field: repo.handlers');
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
const activeHandler = config.repo.active_handler;
|
|
123
|
+
if (!config.repo.handlers[activeHandler]) {
|
|
124
|
+
errors.push(`Configuration for repo handler '${activeHandler}' not found in repo.handlers`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Validate file section
|
|
129
|
+
if (config.file) {
|
|
130
|
+
if (!config.file.active_handler) {
|
|
131
|
+
errors.push('Missing required field: file.active_handler');
|
|
132
|
+
}
|
|
133
|
+
if (!config.file.handlers) {
|
|
134
|
+
errors.push('Missing required field: file.handlers');
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
const activeHandler = config.file.active_handler;
|
|
138
|
+
if (!config.file.handlers[activeHandler]) {
|
|
139
|
+
errors.push(`Configuration for file handler '${activeHandler}' not found in file.handlers`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Check for missing environment variables
|
|
144
|
+
const missingEnvVars = (0, yaml_config_1.validateEnvVars)(config);
|
|
145
|
+
if (missingEnvVars.length > 0) {
|
|
146
|
+
warnings.push(`Missing environment variables: ${missingEnvVars.join(', ')}`);
|
|
147
|
+
}
|
|
148
|
+
// Display results
|
|
149
|
+
console.log(chalk_1.default.bold('Validation Results:\n'));
|
|
150
|
+
if (errors.length === 0 && warnings.length === 0) {
|
|
151
|
+
console.log(chalk_1.default.green('✅ Configuration is valid'));
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
if (errors.length > 0) {
|
|
155
|
+
console.log(chalk_1.default.red(`❌ ${errors.length} error(s) found:\n`));
|
|
156
|
+
errors.forEach((error) => {
|
|
157
|
+
console.log(chalk_1.default.red(` • ${error}`));
|
|
158
|
+
});
|
|
159
|
+
console.log();
|
|
160
|
+
}
|
|
161
|
+
if (warnings.length > 0) {
|
|
162
|
+
console.log(chalk_1.default.yellow(`⚠️ ${warnings.length} warning(s) found:\n`));
|
|
163
|
+
warnings.forEach((warning) => {
|
|
164
|
+
console.log(chalk_1.default.yellow(` • ${warning}`));
|
|
165
|
+
});
|
|
166
|
+
console.log();
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Display summary
|
|
170
|
+
console.log(chalk_1.default.bold('Configuration Summary:\n'));
|
|
171
|
+
console.log(chalk_1.default.gray(` Version: ${config.version || 'not specified'}`));
|
|
172
|
+
console.log(chalk_1.default.gray(` Plugins configured: ${presentSections.join(', ') || 'none'}`));
|
|
173
|
+
if (config.work) {
|
|
174
|
+
console.log(chalk_1.default.gray(` Work platform: ${config.work.active_handler}`));
|
|
175
|
+
}
|
|
176
|
+
if (config.repo) {
|
|
177
|
+
console.log(chalk_1.default.gray(` Repo platform: ${config.repo.active_handler}`));
|
|
178
|
+
}
|
|
179
|
+
if (config.file) {
|
|
180
|
+
console.log(chalk_1.default.gray(` File storage: ${config.file.active_handler}`));
|
|
181
|
+
}
|
|
182
|
+
if (options.verbose) {
|
|
183
|
+
console.log(chalk_1.default.gray('\nRaw configuration (redacted):'));
|
|
184
|
+
console.log(JSON.stringify(redactConfig(config), null, 2));
|
|
185
|
+
}
|
|
186
|
+
if (errors.length > 0) {
|
|
187
|
+
process.exit(1);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
console.error(chalk_1.default.red('❌ Validation failed:'), error);
|
|
192
|
+
process.exit(1);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Show configuration command
|
|
197
|
+
*/
|
|
198
|
+
async function showCommand() {
|
|
199
|
+
try {
|
|
200
|
+
const projectRoot = (0, yaml_config_1.findProjectRoot)();
|
|
201
|
+
const configPath = (0, config_js_1.getConfigPath)(projectRoot);
|
|
202
|
+
if (!(0, fs_1.existsSync)(configPath)) {
|
|
203
|
+
console.log(chalk_1.default.red('❌ Configuration file not found'));
|
|
204
|
+
console.log(chalk_1.default.yellow('\nTo create a configuration file, run:'));
|
|
205
|
+
console.log(chalk_1.default.cyan(' fractary-core:configure'));
|
|
206
|
+
process.exit(1);
|
|
207
|
+
}
|
|
208
|
+
const config = (0, config_js_1.loadConfig)(projectRoot);
|
|
209
|
+
if (!config) {
|
|
210
|
+
console.log(chalk_1.default.red('❌ Failed to load configuration'));
|
|
211
|
+
process.exit(1);
|
|
212
|
+
}
|
|
213
|
+
console.log(chalk_1.default.blue('📋 Fractary Core Configuration\n'));
|
|
214
|
+
console.log(chalk_1.default.gray(`Config file: ${configPath}\n`));
|
|
215
|
+
const redacted = redactConfig(config);
|
|
216
|
+
console.log(JSON.stringify(redacted, null, 2));
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
console.error(chalk_1.default.red('❌ Failed to display configuration:'), error);
|
|
220
|
+
process.exit(1);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Register config command
|
|
225
|
+
*/
|
|
226
|
+
function registerConfigCommand(program) {
|
|
227
|
+
const config = program
|
|
228
|
+
.command('config')
|
|
229
|
+
.description('Manage Fractary Core configuration');
|
|
230
|
+
config
|
|
231
|
+
.command('validate')
|
|
232
|
+
.description('Validate .fractary/core/config.yaml')
|
|
233
|
+
.option('-v, --verbose', 'Show detailed output')
|
|
234
|
+
.action(validateCommand);
|
|
235
|
+
config
|
|
236
|
+
.command('show')
|
|
237
|
+
.description('Display configuration (with sensitive values redacted)')
|
|
238
|
+
.action(showCommand);
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/config.d.ts
CHANGED
|
@@ -1,63 +1,79 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Configuration Management Utilities
|
|
3
3
|
*
|
|
4
|
-
* Handles
|
|
4
|
+
* Handles unified YAML configuration loading from .fractary/core/config.yaml
|
|
5
5
|
*/
|
|
6
|
+
import { findProjectRoot, CoreYamlConfig } from '@fractary/core/common/yaml-config';
|
|
6
7
|
/**
|
|
7
|
-
* Core configuration structure
|
|
8
|
+
* Core configuration structure (alias for CoreYamlConfig)
|
|
8
9
|
*/
|
|
9
|
-
export
|
|
10
|
-
work?: any;
|
|
11
|
-
repo?: any;
|
|
12
|
-
spec?: any;
|
|
13
|
-
logs?: any;
|
|
14
|
-
file?: any;
|
|
15
|
-
docs?: any;
|
|
16
|
-
}
|
|
10
|
+
export type CoreConfig = CoreYamlConfig;
|
|
17
11
|
/**
|
|
18
|
-
*
|
|
12
|
+
* Load configuration from .fractary/core/config.yaml
|
|
19
13
|
*
|
|
20
|
-
* @param
|
|
21
|
-
* @returns
|
|
14
|
+
* @param projectRoot - Project root directory (auto-detected if not provided)
|
|
15
|
+
* @returns Configuration object or null if not found
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const config = loadConfig();
|
|
20
|
+
* if (config) {
|
|
21
|
+
* console.log('Work config:', config.work);
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
22
24
|
*/
|
|
23
|
-
export declare function
|
|
25
|
+
export declare function loadConfig(projectRoot?: string): CoreConfig | null;
|
|
24
26
|
/**
|
|
25
|
-
*
|
|
27
|
+
* Write configuration to .fractary/core/config.yaml
|
|
28
|
+
*
|
|
29
|
+
* @param config - Configuration object to write
|
|
30
|
+
* @param projectRoot - Project root directory (auto-detected if not provided)
|
|
26
31
|
*
|
|
27
|
-
* @
|
|
28
|
-
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* writeConfig({
|
|
35
|
+
* version: '2.0',
|
|
36
|
+
* work: {
|
|
37
|
+
* active_handler: 'github',
|
|
38
|
+
* handlers: { github: { token: '${GITHUB_TOKEN}' } }
|
|
39
|
+
* }
|
|
40
|
+
* });
|
|
41
|
+
* ```
|
|
29
42
|
*/
|
|
30
|
-
export declare function
|
|
43
|
+
export declare function writeConfig(config: CoreConfig, projectRoot?: string): void;
|
|
31
44
|
/**
|
|
32
|
-
*
|
|
45
|
+
* Check if configuration file exists
|
|
33
46
|
*
|
|
34
|
-
* @param
|
|
35
|
-
* @returns
|
|
47
|
+
* @param projectRoot - Project root directory (auto-detected if not provided)
|
|
48
|
+
* @returns true if .fractary/core/config.yaml exists
|
|
36
49
|
*/
|
|
37
|
-
export declare function
|
|
50
|
+
export declare function configExists(projectRoot?: string): boolean;
|
|
38
51
|
/**
|
|
39
|
-
*
|
|
52
|
+
* Get the configuration file path
|
|
40
53
|
*
|
|
41
|
-
* @param
|
|
42
|
-
* @
|
|
54
|
+
* @param projectRoot - Project root directory (auto-detected if not provided)
|
|
55
|
+
* @returns Full path to .fractary/core/config.yaml
|
|
43
56
|
*/
|
|
44
|
-
export declare function
|
|
57
|
+
export declare function getConfigPath(projectRoot?: string): string;
|
|
45
58
|
/**
|
|
46
|
-
* Get the
|
|
59
|
+
* Get the .fractary/core directory path
|
|
47
60
|
*
|
|
48
|
-
* @
|
|
61
|
+
* @param projectRoot - Project root directory (auto-detected if not provided)
|
|
62
|
+
* @returns Full path to .fractary/core directory
|
|
49
63
|
*/
|
|
50
|
-
export declare function
|
|
64
|
+
export declare function getCoreDir(projectRoot?: string): string;
|
|
51
65
|
/**
|
|
52
|
-
*
|
|
66
|
+
* Get the default configuration file path for the current project
|
|
53
67
|
*
|
|
54
|
-
* @returns
|
|
68
|
+
* @returns Default config path (.fractary/core/config.yaml)
|
|
69
|
+
* @deprecated Use getConfigPath() instead
|
|
55
70
|
*/
|
|
56
|
-
export declare function
|
|
71
|
+
export declare function getDefaultConfigPath(): string;
|
|
57
72
|
/**
|
|
58
73
|
* Get configuration directory path
|
|
59
74
|
*
|
|
60
|
-
* @returns Config directory path
|
|
75
|
+
* @returns Config directory path (.fractary/core)
|
|
76
|
+
* @deprecated Use getCoreDir() instead
|
|
61
77
|
*/
|
|
62
78
|
export declare function getConfigDir(): string;
|
|
63
79
|
/**
|
|
@@ -68,4 +84,11 @@ export declare function getConfigDir(): string;
|
|
|
68
84
|
* @returns Merged configuration
|
|
69
85
|
*/
|
|
70
86
|
export declare function mergeConfig(base: CoreConfig, override: Partial<CoreConfig>): CoreConfig;
|
|
87
|
+
/**
|
|
88
|
+
* Find project root by looking for .fractary or .git directory
|
|
89
|
+
*
|
|
90
|
+
* @param startDir - Directory to start searching from (default: current working directory)
|
|
91
|
+
* @returns Project root directory path
|
|
92
|
+
*/
|
|
93
|
+
export { findProjectRoot };
|
|
71
94
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAML,eAAe,EACf,cAAc,EACf,MAAM,mCAAmC,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC;AAExC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAQlE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAE1E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAUvF;AAED;;;;;GAKG;AACH,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
package/dist/utils/config.js
CHANGED
|
@@ -2,202 +2,108 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Configuration Management Utilities
|
|
4
4
|
*
|
|
5
|
-
* Handles
|
|
5
|
+
* Handles unified YAML configuration loading from .fractary/core/config.yaml
|
|
6
6
|
*/
|
|
7
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
-
if (k2 === undefined) k2 = k;
|
|
9
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
-
}
|
|
13
|
-
Object.defineProperty(o, k2, desc);
|
|
14
|
-
}) : (function(o, m, k, k2) {
|
|
15
|
-
if (k2 === undefined) k2 = k;
|
|
16
|
-
o[k2] = m[k];
|
|
17
|
-
}));
|
|
18
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
-
}) : function(o, v) {
|
|
21
|
-
o["default"] = v;
|
|
22
|
-
});
|
|
23
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
-
var ownKeys = function(o) {
|
|
25
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
-
var ar = [];
|
|
27
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
-
return ar;
|
|
29
|
-
};
|
|
30
|
-
return ownKeys(o);
|
|
31
|
-
};
|
|
32
|
-
return function (mod) {
|
|
33
|
-
if (mod && mod.__esModule) return mod;
|
|
34
|
-
var result = {};
|
|
35
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
-
__setModuleDefault(result, mod);
|
|
37
|
-
return result;
|
|
38
|
-
};
|
|
39
|
-
})();
|
|
40
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
41
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
42
|
-
};
|
|
43
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
-
exports.
|
|
45
|
-
exports.findLegacyConfigPath = findLegacyConfigPath;
|
|
8
|
+
exports.findProjectRoot = void 0;
|
|
46
9
|
exports.loadConfig = loadConfig;
|
|
47
10
|
exports.writeConfig = writeConfig;
|
|
48
|
-
exports.getDefaultConfigPath = getDefaultConfigPath;
|
|
49
11
|
exports.configExists = configExists;
|
|
12
|
+
exports.getConfigPath = getConfigPath;
|
|
13
|
+
exports.getCoreDir = getCoreDir;
|
|
14
|
+
exports.getDefaultConfigPath = getDefaultConfigPath;
|
|
50
15
|
exports.getConfigDir = getConfigDir;
|
|
51
16
|
exports.mergeConfig = mergeConfig;
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
55
|
-
/**
|
|
56
|
-
* Configuration paths
|
|
57
|
-
*/
|
|
58
|
-
const CONFIG_DIR = '.fractary/core';
|
|
59
|
-
const CONFIG_FILE = 'config.json';
|
|
60
|
-
const LEGACY_CONFIG_DIR = '.fractary/faber';
|
|
17
|
+
const yaml_config_1 = require("@fractary/core/common/yaml-config");
|
|
18
|
+
Object.defineProperty(exports, "findProjectRoot", { enumerable: true, get: function () { return yaml_config_1.findProjectRoot; } });
|
|
61
19
|
/**
|
|
62
|
-
*
|
|
20
|
+
* Load configuration from .fractary/core/config.yaml
|
|
21
|
+
*
|
|
22
|
+
* @param projectRoot - Project root directory (auto-detected if not provided)
|
|
23
|
+
* @returns Configuration object or null if not found
|
|
63
24
|
*
|
|
64
|
-
* @
|
|
65
|
-
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const config = loadConfig();
|
|
28
|
+
* if (config) {
|
|
29
|
+
* console.log('Work config:', config.work);
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
66
32
|
*/
|
|
67
|
-
function
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
// Reached filesystem root
|
|
76
|
-
if (parentDir === currentDir) {
|
|
77
|
-
break;
|
|
78
|
-
}
|
|
79
|
-
currentDir = parentDir;
|
|
33
|
+
function loadConfig(projectRoot) {
|
|
34
|
+
try {
|
|
35
|
+
return (0, yaml_config_1.loadYamlConfig)({ projectRoot });
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
// Return null instead of throwing to maintain backward compatibility
|
|
39
|
+
console.error('Error loading config:', error);
|
|
40
|
+
return null;
|
|
80
41
|
}
|
|
81
|
-
return null;
|
|
82
42
|
}
|
|
83
43
|
/**
|
|
84
|
-
*
|
|
44
|
+
* Write configuration to .fractary/core/config.yaml
|
|
45
|
+
*
|
|
46
|
+
* @param config - Configuration object to write
|
|
47
|
+
* @param projectRoot - Project root directory (auto-detected if not provided)
|
|
85
48
|
*
|
|
86
|
-
* @
|
|
87
|
-
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* writeConfig({
|
|
52
|
+
* version: '2.0',
|
|
53
|
+
* work: {
|
|
54
|
+
* active_handler: 'github',
|
|
55
|
+
* handlers: { github: { token: '${GITHUB_TOKEN}' } }
|
|
56
|
+
* }
|
|
57
|
+
* });
|
|
58
|
+
* ```
|
|
88
59
|
*/
|
|
89
|
-
function
|
|
90
|
-
|
|
91
|
-
while (true) {
|
|
92
|
-
const legacyPath = path.join(currentDir, LEGACY_CONFIG_DIR, CONFIG_FILE);
|
|
93
|
-
if (fs.existsSync(legacyPath)) {
|
|
94
|
-
return legacyPath;
|
|
95
|
-
}
|
|
96
|
-
const parentDir = path.dirname(currentDir);
|
|
97
|
-
if (parentDir === currentDir) {
|
|
98
|
-
break;
|
|
99
|
-
}
|
|
100
|
-
currentDir = parentDir;
|
|
101
|
-
}
|
|
102
|
-
return null;
|
|
60
|
+
function writeConfig(config, projectRoot) {
|
|
61
|
+
(0, yaml_config_1.writeYamlConfig)(config, projectRoot);
|
|
103
62
|
}
|
|
104
63
|
/**
|
|
105
|
-
*
|
|
64
|
+
* Check if configuration file exists
|
|
106
65
|
*
|
|
107
|
-
* @param
|
|
108
|
-
* @returns
|
|
66
|
+
* @param projectRoot - Project root directory (auto-detected if not provided)
|
|
67
|
+
* @returns true if .fractary/core/config.yaml exists
|
|
109
68
|
*/
|
|
110
|
-
function
|
|
111
|
-
|
|
112
|
-
const actualPath = configPath || findConfigPath();
|
|
113
|
-
if (!actualPath) {
|
|
114
|
-
// Try to migrate from legacy path
|
|
115
|
-
const legacyPath = findLegacyConfigPath();
|
|
116
|
-
if (legacyPath) {
|
|
117
|
-
return migrateLegacyConfig(legacyPath);
|
|
118
|
-
}
|
|
119
|
-
return null;
|
|
120
|
-
}
|
|
121
|
-
const content = fs.readFileSync(actualPath, 'utf-8');
|
|
122
|
-
return JSON.parse(content);
|
|
123
|
-
}
|
|
124
|
-
catch (error) {
|
|
125
|
-
// Failed to load config
|
|
126
|
-
return null;
|
|
127
|
-
}
|
|
69
|
+
function configExists(projectRoot) {
|
|
70
|
+
return (0, yaml_config_1.configExists)(projectRoot);
|
|
128
71
|
}
|
|
129
72
|
/**
|
|
130
|
-
*
|
|
73
|
+
* Get the configuration file path
|
|
131
74
|
*
|
|
132
|
-
* @param
|
|
133
|
-
* @returns
|
|
75
|
+
* @param projectRoot - Project root directory (auto-detected if not provided)
|
|
76
|
+
* @returns Full path to .fractary/core/config.yaml
|
|
134
77
|
*/
|
|
135
|
-
function
|
|
136
|
-
|
|
137
|
-
console.log(chalk_1.default.yellow('Notice:'), 'Migrating configuration from', LEGACY_CONFIG_DIR, 'to', CONFIG_DIR);
|
|
138
|
-
const content = fs.readFileSync(legacyPath, 'utf-8');
|
|
139
|
-
const legacyConfig = JSON.parse(content);
|
|
140
|
-
// Extract relevant configuration sections
|
|
141
|
-
const coreConfig = {
|
|
142
|
-
work: legacyConfig.work,
|
|
143
|
-
repo: legacyConfig.repo,
|
|
144
|
-
spec: legacyConfig.spec,
|
|
145
|
-
logs: legacyConfig.logs,
|
|
146
|
-
file: legacyConfig.file,
|
|
147
|
-
docs: legacyConfig.docs,
|
|
148
|
-
};
|
|
149
|
-
// Write to new location
|
|
150
|
-
const legacyDir = path.dirname(legacyPath);
|
|
151
|
-
const projectRoot = path.dirname(path.dirname(legacyDir));
|
|
152
|
-
const newPath = path.join(projectRoot, CONFIG_DIR, CONFIG_FILE);
|
|
153
|
-
writeConfig(coreConfig, newPath);
|
|
154
|
-
console.log(chalk_1.default.green('✓'), 'Configuration migrated successfully');
|
|
155
|
-
return coreConfig;
|
|
156
|
-
}
|
|
157
|
-
catch (error) {
|
|
158
|
-
console.error(chalk_1.default.red('Failed to migrate configuration:'), error);
|
|
159
|
-
return null;
|
|
160
|
-
}
|
|
78
|
+
function getConfigPath(projectRoot) {
|
|
79
|
+
return (0, yaml_config_1.getConfigPath)(projectRoot);
|
|
161
80
|
}
|
|
162
81
|
/**
|
|
163
|
-
*
|
|
82
|
+
* Get the .fractary/core directory path
|
|
164
83
|
*
|
|
165
|
-
* @param
|
|
166
|
-
* @
|
|
84
|
+
* @param projectRoot - Project root directory (auto-detected if not provided)
|
|
85
|
+
* @returns Full path to .fractary/core directory
|
|
167
86
|
*/
|
|
168
|
-
function
|
|
169
|
-
|
|
170
|
-
// Ensure directory exists
|
|
171
|
-
const dir = path.dirname(actualPath);
|
|
172
|
-
if (!fs.existsSync(dir)) {
|
|
173
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
174
|
-
}
|
|
175
|
-
// Write configuration with pretty formatting
|
|
176
|
-
fs.writeFileSync(actualPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
87
|
+
function getCoreDir(projectRoot) {
|
|
88
|
+
return (0, yaml_config_1.getCoreDir)(projectRoot);
|
|
177
89
|
}
|
|
178
90
|
/**
|
|
179
91
|
* Get the default configuration file path for the current project
|
|
180
92
|
*
|
|
181
|
-
* @returns Default config path
|
|
93
|
+
* @returns Default config path (.fractary/core/config.yaml)
|
|
94
|
+
* @deprecated Use getConfigPath() instead
|
|
182
95
|
*/
|
|
183
96
|
function getDefaultConfigPath() {
|
|
184
|
-
return
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Check if configuration exists
|
|
188
|
-
*
|
|
189
|
-
* @returns True if config exists, false otherwise
|
|
190
|
-
*/
|
|
191
|
-
function configExists() {
|
|
192
|
-
return findConfigPath() !== null || findLegacyConfigPath() !== null;
|
|
97
|
+
return getConfigPath();
|
|
193
98
|
}
|
|
194
99
|
/**
|
|
195
100
|
* Get configuration directory path
|
|
196
101
|
*
|
|
197
|
-
* @returns Config directory path
|
|
102
|
+
* @returns Config directory path (.fractary/core)
|
|
103
|
+
* @deprecated Use getCoreDir() instead
|
|
198
104
|
*/
|
|
199
105
|
function getConfigDir() {
|
|
200
|
-
return
|
|
106
|
+
return getCoreDir();
|
|
201
107
|
}
|
|
202
108
|
/**
|
|
203
109
|
* Merge configuration objects
|
|
@@ -208,6 +114,7 @@ function getConfigDir() {
|
|
|
208
114
|
*/
|
|
209
115
|
function mergeConfig(base, override) {
|
|
210
116
|
return {
|
|
117
|
+
version: override.version || base.version,
|
|
211
118
|
work: override.work !== undefined ? override.work : base.work,
|
|
212
119
|
repo: override.repo !== undefined ? override.repo : base.repo,
|
|
213
120
|
spec: override.spec !== undefined ? override.spec : base.spec,
|
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":";AAAA;;;;GAIG
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AA+BH,gCAQC;AAmBD,kCAEC;AAQD,oCAEC;AAQD,sCAEC;AAQD,gCAEC;AAQD,oDAEC;AAQD,oCAEC;AASD,kCAUC;AA/HD,mEAQ2C;AA+HlC,gGAjIP,6BAAe,OAiIO;AAxHxB;;;;;;;;;;;;;GAaG;AACH,SAAgB,UAAU,CAAC,WAAoB;IAC7C,IAAI,CAAC;QACH,OAAO,IAAA,4BAAiB,EAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,qEAAqE;QACrE,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,WAAW,CAAC,MAAkB,EAAE,WAAoB;IAClE,IAAA,6BAAkB,EAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,WAAoB;IAC/C,OAAO,IAAA,0BAAe,EAAC,WAAW,CAAC,CAAC;AACtC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,WAAoB;IAChD,OAAO,IAAA,2BAAgB,EAAC,WAAW,CAAC,CAAC;AACvC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,UAAU,CAAC,WAAoB;IAC7C,OAAO,IAAA,wBAAa,EAAC,WAAW,CAAC,CAAC;AACpC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,oBAAoB;IAClC,OAAO,aAAa,EAAE,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,YAAY;IAC1B,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,WAAW,CAAC,IAAgB,EAAE,QAA6B;IACzE,OAAO;QACL,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;QACzC,IAAI,EAAE,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;QAC7D,IAAI,EAAE,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;QAC7D,IAAI,EAAE,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;QAC7D,IAAI,EAAE,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;QAC7D,IAAI,EAAE,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;QAC7D,IAAI,EAAE,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;KAC9D,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fractary/core-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "CLI for Fractary Core SDK - work tracking, repository management, specifications, logging, file storage, and documentation",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -44,14 +44,16 @@
|
|
|
44
44
|
"author": "Fractary Team",
|
|
45
45
|
"license": "MIT",
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@fractary/core": "^0.
|
|
47
|
+
"@fractary/core": "^0.3.0",
|
|
48
48
|
"chalk": "^5.3.0",
|
|
49
49
|
"cli-table3": "^0.6.5",
|
|
50
50
|
"commander": "^11.1.0",
|
|
51
|
-
"inquirer": "^13.1.0"
|
|
51
|
+
"inquirer": "^13.1.0",
|
|
52
|
+
"js-yaml": "^4.1.1"
|
|
52
53
|
},
|
|
53
54
|
"devDependencies": {
|
|
54
55
|
"@types/jest": "^30.0.0",
|
|
56
|
+
"@types/js-yaml": "^4.0.9",
|
|
55
57
|
"@types/node": "^20.19.26",
|
|
56
58
|
"@typescript-eslint/eslint-plugin": "^6.19.0",
|
|
57
59
|
"@typescript-eslint/parser": "^6.19.0",
|