@fractary/faber-cli 1.5.9 → 1.5.13

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BpC;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAehD;AAojBD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAM3C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAehD;AAojBD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAM3C"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Config command - Read FABER configuration from unified config.yaml
3
+ *
4
+ * This command provides access to configuration values for scripts and tools.
5
+ * It uses the SDK's config loading logic, ensuring consistency across all tools.
6
+ */
7
+ import { Command } from 'commander';
8
+ export declare function createConfigCommand(): Command;
9
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,wBAAgB,mBAAmB,IAAI,OAAO,CAkF7C"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Config command - Read FABER configuration from unified config.yaml
3
+ *
4
+ * This command provides access to configuration values for scripts and tools.
5
+ * It uses the SDK's config loading logic, ensuring consistency across all tools.
6
+ */
7
+ import { Command } from 'commander';
8
+ import { loadYamlConfig, configExists, getConfigPath, } from '../lib/yaml-config.js';
9
+ /**
10
+ * Get a nested value from an object using dot notation
11
+ * @param obj The object to search
12
+ * @param path Dot-separated path (e.g., "faber.default_workflow")
13
+ * @returns The value at the path, or undefined if not found
14
+ */
15
+ function getNestedValue(obj, path) {
16
+ const parts = path.split('.');
17
+ let current = obj;
18
+ for (const part of parts) {
19
+ if (current === null || current === undefined) {
20
+ return undefined;
21
+ }
22
+ if (typeof current !== 'object') {
23
+ return undefined;
24
+ }
25
+ current = current[part];
26
+ }
27
+ return current;
28
+ }
29
+ export function createConfigCommand() {
30
+ const configCmd = new Command('config')
31
+ .description('Manage FABER configuration');
32
+ configCmd
33
+ .command('get')
34
+ .description('Get configuration values')
35
+ .argument('[key]', 'Configuration key path (e.g., faber.default_workflow). Omit for full config.')
36
+ .option('--json', 'Output as JSON (default when no key specified)')
37
+ .option('--raw', 'Output raw value without quotes (for shell scripts)')
38
+ .action(async (key, options) => {
39
+ try {
40
+ // Check if config exists
41
+ if (!configExists()) {
42
+ const configPath = getConfigPath();
43
+ console.error(`Error: Configuration not found at ${configPath}`);
44
+ console.error('Run: fractary-core:init to create configuration');
45
+ process.exit(1);
46
+ }
47
+ // Load configuration using SDK logic
48
+ const config = loadYamlConfig({ warnMissingEnvVars: false });
49
+ if (!config) {
50
+ console.error('Error: Failed to load configuration');
51
+ process.exit(1);
52
+ }
53
+ // If no key specified, output full config
54
+ if (!key) {
55
+ console.log(JSON.stringify(config, null, options.json ? 2 : 0));
56
+ return;
57
+ }
58
+ // Get nested value
59
+ const value = getNestedValue(config, key);
60
+ if (value === undefined) {
61
+ if (options.raw) {
62
+ // Output empty string for undefined (useful for shell scripts)
63
+ console.log('');
64
+ }
65
+ else {
66
+ console.log('null');
67
+ }
68
+ return;
69
+ }
70
+ // Output value
71
+ if (options.raw && typeof value === 'string') {
72
+ // Raw output - no quotes, no JSON
73
+ console.log(value);
74
+ }
75
+ else if (typeof value === 'object') {
76
+ // Objects are always JSON
77
+ console.log(JSON.stringify(value, null, options.json ? 2 : 0));
78
+ }
79
+ else if (options.json) {
80
+ // JSON output
81
+ console.log(JSON.stringify(value));
82
+ }
83
+ else {
84
+ // Default: string values without quotes, others as JSON
85
+ console.log(typeof value === 'string' ? value : JSON.stringify(value));
86
+ }
87
+ }
88
+ catch (error) {
89
+ console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
90
+ process.exit(1);
91
+ }
92
+ });
93
+ configCmd
94
+ .command('path')
95
+ .description('Show configuration file path')
96
+ .action(() => {
97
+ console.log(getConfigPath());
98
+ });
99
+ configCmd
100
+ .command('exists')
101
+ .description('Check if configuration file exists (exit 0 if yes, 1 if no)')
102
+ .action(() => {
103
+ process.exit(configExists() ? 0 : 1);
104
+ });
105
+ return configCmd;
106
+ }
package/dist/index.js CHANGED
@@ -13,24 +13,24 @@ import chalk from 'chalk';
13
13
  import { createRunCommand, createStatusCommand, createResumeCommand, createPauseCommand, createRecoverCommand, createCleanupCommand } from './commands/workflow/index.js';
14
14
  import { createWorkCommand } from './commands/work/index.js';
15
15
  import { createRepoCommand } from './commands/repo/index.js';
16
- import { createSpecCommand } from './commands/spec/index.js';
17
16
  import { createLogsCommand } from './commands/logs/index.js';
18
17
  import { createInitCommand } from './commands/init.js';
19
18
  import { createMigrateCommand } from './commands/migrate.js';
20
19
  import { createPlanCommand } from './commands/plan/index.js';
21
20
  import { createAuthCommand } from './commands/auth/index.js';
21
+ import { createConfigCommand } from './commands/config.js';
22
22
  // Force unbuffered output to prevent buffering issues in terminals
23
23
  if (process.stdout.isTTY) {
24
24
  process.stdout._handle?.setBlocking?.(true);
25
25
  }
26
- const version = '1.5.9';
26
+ const version = '1.5.13';
27
27
  /**
28
28
  * Create and configure the main CLI program
29
29
  */
30
30
  export function createFaberCLI() {
31
31
  const program = new Command('fractary-faber');
32
32
  program
33
- .description('FABER development toolkit (workflow, work, repo, spec, logs, auth)')
33
+ .description('FABER development toolkit (workflow, work, repo, logs, auth)')
34
34
  .version(version)
35
35
  .enablePositionalOptions();
36
36
  // Global options
@@ -38,6 +38,7 @@ export function createFaberCLI() {
38
38
  // Workflow commands (top-level)
39
39
  program.addCommand(createInitCommand()); // init
40
40
  program.addCommand(createMigrateCommand()); // migrate
41
+ program.addCommand(createConfigCommand()); // config get/path/exists
41
42
  program.addCommand(createPlanCommand()); // plan
42
43
  program.addCommand(createRunCommand()); // workflow-run
43
44
  program.addCommand(createStatusCommand()); // run-inspect
@@ -152,7 +153,6 @@ export function createFaberCLI() {
152
153
  program.addCommand(createAuthCommand());
153
154
  program.addCommand(createWorkCommand());
154
155
  program.addCommand(createRepoCommand());
155
- program.addCommand(createSpecCommand());
156
156
  program.addCommand(createLogsCommand());
157
157
  // Help command
158
158
  program.addCommand(new Command('help')
@@ -48,10 +48,6 @@ export declare class AnthropicClient {
48
48
  * Generate workflow plan via Claude API
49
49
  */
50
50
  generatePlan(input: GeneratePlanInput): Promise<WorkflowPlan>;
51
- /**
52
- * Load workflow configuration
53
- */
54
- private loadWorkflowConfig;
55
51
  /**
56
52
  * Construct planning prompt for Claude
57
53
  */
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic-client.d.ts","sourceRoot":"","sources":["../../src/lib/anthropic-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAK5D,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;QACX,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,GAAG,EAAE,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,UAAU,CAAM;gBAEZ,MAAM,EAAE,iBAAiB;IAerC;;OAEG;YACW,cAAc;IAiB5B;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;IA6DnE;;OAEG;YACW,kBAAkB;IAchC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAqD/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;OAEG;YACW,eAAe;CAqB9B"}
1
+ {"version":3,"file":"anthropic-client.d.ts","sourceRoot":"","sources":["../../src/lib/anthropic-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAK5D,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;QACX,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,GAAG,EAAE,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,UAAU,CAAM;gBAEZ,MAAM,EAAE,iBAAiB;IAiBrC;;OAEG;YACW,cAAc;IAiB5B;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;IA8DnE;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAqD/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;OAEG;YACW,eAAe;CAqB9B"}
@@ -8,7 +8,7 @@ import Ajv from 'ajv';
8
8
  import fs from 'fs/promises';
9
9
  import path from 'path';
10
10
  import { fileURLToPath } from 'url';
11
- import { Git } from '@fractary/faber';
11
+ import { Git, WorkflowResolver } from '@fractary/faber';
12
12
  import { validateJsonSize } from '../utils/validation.js';
13
13
  const __filename = fileURLToPath(import.meta.url);
14
14
  const __dirname = path.dirname(__filename);
@@ -19,7 +19,9 @@ export class AnthropicClient {
19
19
  constructor(config) {
20
20
  this.config = config;
21
21
  this.git = new Git();
22
- this.ajv = new Ajv({ strict: false }); // Allow additional properties
22
+ // validateFormats: false suppresses warnings about unknown formats (uri, date-time)
23
+ // These formats are used for documentation, not strict validation
24
+ this.ajv = new Ajv({ strict: false, validateFormats: false });
23
25
  const apiKey = config.anthropic?.api_key;
24
26
  if (!apiKey) {
25
27
  throw new Error('Anthropic API key not found. Set ANTHROPIC_API_KEY environment variable.');
@@ -68,8 +70,9 @@ export class AnthropicClient {
68
70
  async generatePlan(input) {
69
71
  // Load plan schema for validation
70
72
  await this.loadPlanSchema();
71
- // Load workflow configuration
72
- const workflowConfig = await this.loadWorkflowConfig(input.workflow);
73
+ // Resolve workflow with inheritance (uses SDK WorkflowResolver)
74
+ const resolver = new WorkflowResolver({ projectRoot: process.cwd() });
75
+ const workflowConfig = await resolver.resolveWorkflow(input.workflow);
73
76
  // Generate plan ID
74
77
  const timestamp = new Date().toISOString().replace(/[-:]/g, '').replace(/\.\d+Z/, '').replace('T', '-');
75
78
  const planId = `fractary-faber-${input.issueNumber}-${timestamp}`;
@@ -115,19 +118,6 @@ export class AnthropicClient {
115
118
  this.validatePlan(plan);
116
119
  return plan;
117
120
  }
118
- /**
119
- * Load workflow configuration
120
- */
121
- async loadWorkflowConfig(workflow) {
122
- const workflowPath = path.join(this.config.workflow?.config_path || './plugins/faber/config/workflows', `${workflow}.json`);
123
- try {
124
- const content = await fs.readFile(workflowPath, 'utf-8');
125
- return JSON.parse(content);
126
- }
127
- catch (error) {
128
- throw new Error(`Failed to load workflow config: ${workflow} (${workflowPath})`);
129
- }
130
- }
131
121
  /**
132
122
  * Construct planning prompt for Claude
133
123
  */
@@ -92,12 +92,6 @@ export declare function generateAppManifest(config: ManifestConfig): GitHubAppMa
92
92
  * @returns HTML content ready to save to file
93
93
  */
94
94
  export declare function generateManifestHtml(manifest: GitHubAppManifest, organization: string): string;
95
- /**
96
- * Generate GitHub App creation URL (legacy - prefer generateManifestHtml)
97
- *
98
- * @deprecated Use generateManifestHtml() instead for proper manifest flow
99
- */
100
- export declare function getManifestCreationUrl(manifest: GitHubAppManifest): string;
101
95
  /**
102
96
  * Exchange manifest code for app credentials
103
97
  *
@@ -1 +1 @@
1
- {"version":3,"file":"github-app-setup.d.ts","sourceRoot":"","sources":["../../src/lib/github-app-setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github-app-setup.d.ts","sourceRoot":"","sources":["../../src/lib/github-app-setup.ts"],"names":[],"mappings":"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"}
@@ -155,15 +155,6 @@ export function generateManifestHtml(manifest, organization) {
155
155
  </body>
156
156
  </html>`;
157
157
  }
158
- /**
159
- * Generate GitHub App creation URL (legacy - prefer generateManifestHtml)
160
- *
161
- * @deprecated Use generateManifestHtml() instead for proper manifest flow
162
- */
163
- export function getManifestCreationUrl(manifest) {
164
- // For backward compatibility, return the basic GitHub App creation page
165
- return 'https://github.com/settings/apps/new';
166
- }
167
158
  /**
168
159
  * Exchange manifest code for app credentials
169
160
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fractary/faber-cli",
3
- "version": "1.5.9",
3
+ "version": "1.5.13",
4
4
  "description": "FABER CLI - Command-line interface for FABER development toolkit",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@fractary/core": "^0.5.0",
41
- "@fractary/faber": "^2.1.2",
41
+ "@fractary/faber": "^2.3.0",
42
42
  "ajv": "^8.12.0",
43
43
  "chalk": "^5.0.0",
44
44
  "commander": "^12.0.0",