@stoneforge/quarry 0.1.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.
- package/LICENSE +13 -0
- package/README.md +160 -0
- package/dist/api/index.d.ts +8 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +8 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/quarry-api.d.ts +268 -0
- package/dist/api/quarry-api.d.ts.map +1 -0
- package/dist/api/quarry-api.js +3905 -0
- package/dist/api/quarry-api.js.map +1 -0
- package/dist/api/types.d.ts +1359 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +204 -0
- package/dist/api/types.js.map +1 -0
- package/dist/bin/sf.d.ts +3 -0
- package/dist/bin/sf.d.ts.map +1 -0
- package/dist/bin/sf.js +9 -0
- package/dist/bin/sf.js.map +1 -0
- package/dist/cli/commands/admin.d.ts +11 -0
- package/dist/cli/commands/admin.d.ts.map +1 -0
- package/dist/cli/commands/admin.js +465 -0
- package/dist/cli/commands/admin.js.map +1 -0
- package/dist/cli/commands/alias.d.ts +8 -0
- package/dist/cli/commands/alias.d.ts.map +1 -0
- package/dist/cli/commands/alias.js +70 -0
- package/dist/cli/commands/alias.js.map +1 -0
- package/dist/cli/commands/channel.d.ts +13 -0
- package/dist/cli/commands/channel.d.ts.map +1 -0
- package/dist/cli/commands/channel.js +680 -0
- package/dist/cli/commands/channel.js.map +1 -0
- package/dist/cli/commands/completion.d.ts +8 -0
- package/dist/cli/commands/completion.d.ts.map +1 -0
- package/dist/cli/commands/completion.js +87 -0
- package/dist/cli/commands/completion.js.map +1 -0
- package/dist/cli/commands/config.d.ts +12 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +242 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/crud.d.ts +64 -0
- package/dist/cli/commands/crud.d.ts.map +1 -0
- package/dist/cli/commands/crud.js +805 -0
- package/dist/cli/commands/crud.js.map +1 -0
- package/dist/cli/commands/dep.d.ts +16 -0
- package/dist/cli/commands/dep.d.ts.map +1 -0
- package/dist/cli/commands/dep.js +499 -0
- package/dist/cli/commands/dep.js.map +1 -0
- package/dist/cli/commands/document.d.ts +12 -0
- package/dist/cli/commands/document.d.ts.map +1 -0
- package/dist/cli/commands/document.js +1039 -0
- package/dist/cli/commands/document.js.map +1 -0
- package/dist/cli/commands/embeddings.d.ts +12 -0
- package/dist/cli/commands/embeddings.d.ts.map +1 -0
- package/dist/cli/commands/embeddings.js +273 -0
- package/dist/cli/commands/embeddings.js.map +1 -0
- package/dist/cli/commands/entity.d.ts +16 -0
- package/dist/cli/commands/entity.d.ts.map +1 -0
- package/dist/cli/commands/entity.js +522 -0
- package/dist/cli/commands/entity.js.map +1 -0
- package/dist/cli/commands/gc.d.ts +10 -0
- package/dist/cli/commands/gc.d.ts.map +1 -0
- package/dist/cli/commands/gc.js +257 -0
- package/dist/cli/commands/gc.js.map +1 -0
- package/dist/cli/commands/help.d.ts +11 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +169 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/history.d.ts +9 -0
- package/dist/cli/commands/history.d.ts.map +1 -0
- package/dist/cli/commands/history.js +160 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/identity.d.ts +18 -0
- package/dist/cli/commands/identity.d.ts.map +1 -0
- package/dist/cli/commands/identity.js +698 -0
- package/dist/cli/commands/identity.js.map +1 -0
- package/dist/cli/commands/inbox.d.ts +20 -0
- package/dist/cli/commands/inbox.d.ts.map +1 -0
- package/dist/cli/commands/inbox.js +493 -0
- package/dist/cli/commands/inbox.js.map +1 -0
- package/dist/cli/commands/init.d.ts +20 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +144 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +9 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +200 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/library.d.ts +12 -0
- package/dist/cli/commands/library.d.ts.map +1 -0
- package/dist/cli/commands/library.js +665 -0
- package/dist/cli/commands/library.js.map +1 -0
- package/dist/cli/commands/message.d.ts +11 -0
- package/dist/cli/commands/message.d.ts.map +1 -0
- package/dist/cli/commands/message.js +608 -0
- package/dist/cli/commands/message.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +17 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +698 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/playbook.d.ts +12 -0
- package/dist/cli/commands/playbook.d.ts.map +1 -0
- package/dist/cli/commands/playbook.js +730 -0
- package/dist/cli/commands/playbook.js.map +1 -0
- package/dist/cli/commands/reset.d.ts +12 -0
- package/dist/cli/commands/reset.d.ts.map +1 -0
- package/dist/cli/commands/reset.js +306 -0
- package/dist/cli/commands/reset.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +11 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +106 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/stats.d.ts +8 -0
- package/dist/cli/commands/stats.d.ts.map +1 -0
- package/dist/cli/commands/stats.js +82 -0
- package/dist/cli/commands/stats.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +14 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +370 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/task.d.ts +25 -0
- package/dist/cli/commands/task.d.ts.map +1 -0
- package/dist/cli/commands/task.js +1153 -0
- package/dist/cli/commands/task.js.map +1 -0
- package/dist/cli/commands/team.d.ts +13 -0
- package/dist/cli/commands/team.d.ts.map +1 -0
- package/dist/cli/commands/team.js +471 -0
- package/dist/cli/commands/team.js.map +1 -0
- package/dist/cli/commands/workflow.d.ts +16 -0
- package/dist/cli/commands/workflow.d.ts.map +1 -0
- package/dist/cli/commands/workflow.js +753 -0
- package/dist/cli/commands/workflow.js.map +1 -0
- package/dist/cli/completion.d.ts +28 -0
- package/dist/cli/completion.d.ts.map +1 -0
- package/dist/cli/completion.js +295 -0
- package/dist/cli/completion.js.map +1 -0
- package/dist/cli/db.d.ts +38 -0
- package/dist/cli/db.d.ts.map +1 -0
- package/dist/cli/db.js +90 -0
- package/dist/cli/db.js.map +1 -0
- package/dist/cli/formatter.d.ts +87 -0
- package/dist/cli/formatter.d.ts.map +1 -0
- package/dist/cli/formatter.js +464 -0
- package/dist/cli/formatter.js.map +1 -0
- package/dist/cli/index.d.ts +33 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +38 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/parser.d.ts +45 -0
- package/dist/cli/parser.d.ts.map +1 -0
- package/dist/cli/parser.js +256 -0
- package/dist/cli/parser.js.map +1 -0
- package/dist/cli/plugin-loader.d.ts +39 -0
- package/dist/cli/plugin-loader.d.ts.map +1 -0
- package/dist/cli/plugin-loader.js +165 -0
- package/dist/cli/plugin-loader.js.map +1 -0
- package/dist/cli/plugin-registry.d.ts +50 -0
- package/dist/cli/plugin-registry.d.ts.map +1 -0
- package/dist/cli/plugin-registry.js +206 -0
- package/dist/cli/plugin-registry.js.map +1 -0
- package/dist/cli/plugin-types.d.ts +106 -0
- package/dist/cli/plugin-types.d.ts.map +1 -0
- package/dist/cli/plugin-types.js +103 -0
- package/dist/cli/plugin-types.js.map +1 -0
- package/dist/cli/runner.d.ts +35 -0
- package/dist/cli/runner.d.ts.map +1 -0
- package/dist/cli/runner.js +340 -0
- package/dist/cli/runner.js.map +1 -0
- package/dist/cli/suggest.d.ts +15 -0
- package/dist/cli/suggest.d.ts.map +1 -0
- package/dist/cli/suggest.js +49 -0
- package/dist/cli/suggest.js.map +1 -0
- package/dist/cli/types.d.ts +138 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +63 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/config/config.d.ts +86 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +348 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/defaults.d.ts +66 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +114 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/duration.d.ts +75 -0
- package/dist/config/duration.d.ts.map +1 -0
- package/dist/config/duration.js +190 -0
- package/dist/config/duration.js.map +1 -0
- package/dist/config/env.d.ts +67 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +207 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/file.d.ts +97 -0
- package/dist/config/file.d.ts.map +1 -0
- package/dist/config/file.js +365 -0
- package/dist/config/file.js.map +1 -0
- package/dist/config/index.d.ts +35 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +41 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/merge.d.ts +53 -0
- package/dist/config/merge.d.ts.map +1 -0
- package/dist/config/merge.js +226 -0
- package/dist/config/merge.js.map +1 -0
- package/dist/config/types.d.ts +257 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +72 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validation.d.ts +55 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +251 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/http/index.d.ts +8 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +12 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/sync-handlers.d.ts +162 -0
- package/dist/http/sync-handlers.d.ts.map +1 -0
- package/dist/http/sync-handlers.js +271 -0
- package/dist/http/sync-handlers.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/server/index.d.ts +34 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +3329 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/static.d.ts +18 -0
- package/dist/server/static.d.ts.map +1 -0
- package/dist/server/static.js +71 -0
- package/dist/server/static.js.map +1 -0
- package/dist/server/ws/broadcaster.d.ts +8 -0
- package/dist/server/ws/broadcaster.d.ts.map +1 -0
- package/dist/server/ws/broadcaster.js +7 -0
- package/dist/server/ws/broadcaster.js.map +1 -0
- package/dist/server/ws/handler.d.ts +55 -0
- package/dist/server/ws/handler.d.ts.map +1 -0
- package/dist/server/ws/handler.js +160 -0
- package/dist/server/ws/handler.js.map +1 -0
- package/dist/services/blocked-cache.d.ts +297 -0
- package/dist/services/blocked-cache.d.ts.map +1 -0
- package/dist/services/blocked-cache.js +755 -0
- package/dist/services/blocked-cache.js.map +1 -0
- package/dist/services/dependency.d.ts +205 -0
- package/dist/services/dependency.d.ts.map +1 -0
- package/dist/services/dependency.js +566 -0
- package/dist/services/dependency.js.map +1 -0
- package/dist/services/embeddings/fusion.d.ts +33 -0
- package/dist/services/embeddings/fusion.d.ts.map +1 -0
- package/dist/services/embeddings/fusion.js +34 -0
- package/dist/services/embeddings/fusion.js.map +1 -0
- package/dist/services/embeddings/index.d.ts +12 -0
- package/dist/services/embeddings/index.d.ts.map +1 -0
- package/dist/services/embeddings/index.js +10 -0
- package/dist/services/embeddings/index.js.map +1 -0
- package/dist/services/embeddings/local-provider.d.ts +31 -0
- package/dist/services/embeddings/local-provider.d.ts.map +1 -0
- package/dist/services/embeddings/local-provider.js +80 -0
- package/dist/services/embeddings/local-provider.js.map +1 -0
- package/dist/services/embeddings/service.d.ts +76 -0
- package/dist/services/embeddings/service.d.ts.map +1 -0
- package/dist/services/embeddings/service.js +153 -0
- package/dist/services/embeddings/service.js.map +1 -0
- package/dist/services/embeddings/types.d.ts +70 -0
- package/dist/services/embeddings/types.d.ts.map +1 -0
- package/dist/services/embeddings/types.js +8 -0
- package/dist/services/embeddings/types.js.map +1 -0
- package/dist/services/id-length-cache.d.ts +156 -0
- package/dist/services/id-length-cache.d.ts.map +1 -0
- package/dist/services/id-length-cache.js +197 -0
- package/dist/services/id-length-cache.js.map +1 -0
- package/dist/services/inbox.d.ts +147 -0
- package/dist/services/inbox.d.ts.map +1 -0
- package/dist/services/inbox.js +428 -0
- package/dist/services/inbox.js.map +1 -0
- package/dist/services/index.d.ts +10 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +10 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/priority-service.d.ts +145 -0
- package/dist/services/priority-service.d.ts.map +1 -0
- package/dist/services/priority-service.js +272 -0
- package/dist/services/priority-service.js.map +1 -0
- package/dist/services/search-utils.d.ts +47 -0
- package/dist/services/search-utils.d.ts.map +1 -0
- package/dist/services/search-utils.js +83 -0
- package/dist/services/search-utils.js.map +1 -0
- package/dist/sync/hash.d.ts +48 -0
- package/dist/sync/hash.d.ts.map +1 -0
- package/dist/sync/hash.js +136 -0
- package/dist/sync/hash.js.map +1 -0
- package/dist/sync/index.d.ts +11 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +16 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/merge.d.ts +80 -0
- package/dist/sync/merge.d.ts.map +1 -0
- package/dist/sync/merge.js +310 -0
- package/dist/sync/merge.js.map +1 -0
- package/dist/sync/serialization.d.ts +132 -0
- package/dist/sync/serialization.d.ts.map +1 -0
- package/dist/sync/serialization.js +306 -0
- package/dist/sync/serialization.js.map +1 -0
- package/dist/sync/service.d.ts +102 -0
- package/dist/sync/service.d.ts.map +1 -0
- package/dist/sync/service.js +493 -0
- package/dist/sync/service.js.map +1 -0
- package/dist/sync/types.d.ts +275 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/sync/types.js +76 -0
- package/dist/sync/types.js.map +1 -0
- package/dist/systems/identity.d.ts +479 -0
- package/dist/systems/identity.d.ts.map +1 -0
- package/dist/systems/identity.js +817 -0
- package/dist/systems/identity.js.map +1 -0
- package/dist/systems/index.d.ts +8 -0
- package/dist/systems/index.d.ts.map +1 -0
- package/dist/systems/index.js +29 -0
- package/dist/systems/index.js.map +1 -0
- package/package.json +121 -0
- package/web/assets/charts-vendor-D1YcbGux.js +55 -0
- package/web/assets/dnd-vendor-DmxE-_ZH.js +5 -0
- package/web/assets/editor-vendor-BxraAWts.js +279 -0
- package/web/assets/index-B77vv208.js +341 -0
- package/web/assets/index-CF_XnVLh.css +1 -0
- package/web/assets/router-vendor-BCKpRBrB.js +41 -0
- package/web/assets/ui-vendor-DUahGnbT.js +45 -0
- package/web/assets/utils-vendor-CfYKiENT.js +813 -0
- package/web/favicon.ico +0 -0
- package/web/index.html +23 -0
- package/web/logo.png +0 -0
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Runner
|
|
3
|
+
*
|
|
4
|
+
* Main entry point for command execution.
|
|
5
|
+
*/
|
|
6
|
+
import { failure, ExitCode } from './types.js';
|
|
7
|
+
import { parseArgs, validateRequiredOptions } from './parser.js';
|
|
8
|
+
import { getFormatter, getOutputMode } from './formatter.js';
|
|
9
|
+
import { getCommandHelp } from './commands/help.js';
|
|
10
|
+
import { discoverPlugins, logPluginWarnings } from './plugin-loader.js';
|
|
11
|
+
import { registerAllPlugins, logConflictWarnings } from './plugin-registry.js';
|
|
12
|
+
import { suggestCommands } from './suggest.js';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Command Registry
|
|
15
|
+
// ============================================================================
|
|
16
|
+
const commands = new Map();
|
|
17
|
+
const aliases = new Map();
|
|
18
|
+
/**
|
|
19
|
+
* Registers a command
|
|
20
|
+
*/
|
|
21
|
+
export function registerCommand(command) {
|
|
22
|
+
commands.set(command.name, command);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Registers a command alias
|
|
26
|
+
*/
|
|
27
|
+
export function registerAlias(alias, commandName) {
|
|
28
|
+
aliases.set(alias, commandName);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Gets a registered command (checking aliases first)
|
|
32
|
+
*/
|
|
33
|
+
export function getCommand(name) {
|
|
34
|
+
// Check if it's an alias
|
|
35
|
+
const resolvedName = aliases.get(name) ?? name;
|
|
36
|
+
return commands.get(resolvedName);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Gets all registered commands
|
|
40
|
+
*/
|
|
41
|
+
export function getAllCommands() {
|
|
42
|
+
return Array.from(commands.values());
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Gets all registered aliases
|
|
46
|
+
*/
|
|
47
|
+
export function getAllAliases() {
|
|
48
|
+
return new Map(aliases);
|
|
49
|
+
}
|
|
50
|
+
// ============================================================================
|
|
51
|
+
// Command Resolution
|
|
52
|
+
// ============================================================================
|
|
53
|
+
/**
|
|
54
|
+
* Resolves a command path to a command definition
|
|
55
|
+
*/
|
|
56
|
+
function resolveCommand(commandPath) {
|
|
57
|
+
if (commandPath.length === 0) {
|
|
58
|
+
return { command: undefined, args: [] };
|
|
59
|
+
}
|
|
60
|
+
const [first, ...rest] = commandPath;
|
|
61
|
+
// Check aliases first, then commands
|
|
62
|
+
const resolvedFirst = aliases.get(first) ?? first;
|
|
63
|
+
let command = commands.get(resolvedFirst);
|
|
64
|
+
if (!command) {
|
|
65
|
+
return { command: undefined, args: commandPath };
|
|
66
|
+
}
|
|
67
|
+
// Resolve subcommands
|
|
68
|
+
let args = rest;
|
|
69
|
+
let subcommandSuggestion;
|
|
70
|
+
while (args.length > 0 && command && command.subcommands) {
|
|
71
|
+
const subName = args[0];
|
|
72
|
+
const subCommand = command.subcommands[subName];
|
|
73
|
+
if (subCommand) {
|
|
74
|
+
command = subCommand;
|
|
75
|
+
args = args.slice(1);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
// Check if the unmatched arg looks like a subcommand attempt (not an option or ID)
|
|
79
|
+
if (!subName.startsWith('-') && !subName.startsWith('el-') && command.subcommands) {
|
|
80
|
+
const subNames = Object.keys(command.subcommands);
|
|
81
|
+
const suggestions = suggestCommands(subName, subNames);
|
|
82
|
+
if (suggestions.length > 0) {
|
|
83
|
+
subcommandSuggestion = `Unknown subcommand: ${subName}\n\nDid you mean?\n${suggestions.map(s => ` ${s}`).join('\n')}\n\nRun "sf ${command.name} --help" to see available subcommands.`;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return { command, args, subcommandSuggestion };
|
|
90
|
+
}
|
|
91
|
+
// ============================================================================
|
|
92
|
+
// Runner
|
|
93
|
+
// ============================================================================
|
|
94
|
+
/**
|
|
95
|
+
* Runs the CLI with the given arguments
|
|
96
|
+
*/
|
|
97
|
+
export async function run(argv) {
|
|
98
|
+
// First pass: parse for global options and command path
|
|
99
|
+
// Use non-strict mode to skip unknown options (command-specific options)
|
|
100
|
+
let parsed;
|
|
101
|
+
try {
|
|
102
|
+
parsed = parseArgs(argv, [], { strict: false });
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
106
|
+
console.error(`Error: ${message}`);
|
|
107
|
+
return ExitCode.INVALID_ARGUMENTS;
|
|
108
|
+
}
|
|
109
|
+
const { command: commandPath, options } = parsed;
|
|
110
|
+
// Handle version flag
|
|
111
|
+
if (options.version) {
|
|
112
|
+
const version = await import('./commands/help.js').then(m => m.versionCommand);
|
|
113
|
+
const result = await version.handler([], { ...options });
|
|
114
|
+
return outputResult(result, options);
|
|
115
|
+
}
|
|
116
|
+
// Handle help flag with no command
|
|
117
|
+
if (options.help && commandPath.length === 0) {
|
|
118
|
+
const help = await import('./commands/help.js').then(m => m.helpCommand);
|
|
119
|
+
const result = await help.handler([], { ...options });
|
|
120
|
+
return outputResult(result, options);
|
|
121
|
+
}
|
|
122
|
+
// No command specified - validate there are no unknown options with strict parsing
|
|
123
|
+
if (commandPath.length === 0) {
|
|
124
|
+
try {
|
|
125
|
+
// Re-parse with strict mode to catch unknown options
|
|
126
|
+
parseArgs(argv, [], { strict: true });
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
130
|
+
console.error(`Error: ${message}`);
|
|
131
|
+
return ExitCode.INVALID_ARGUMENTS;
|
|
132
|
+
}
|
|
133
|
+
const help = await import('./commands/help.js').then(m => m.helpCommand);
|
|
134
|
+
const result = await help.handler([], { ...options });
|
|
135
|
+
return outputResult(result, options);
|
|
136
|
+
}
|
|
137
|
+
// Resolve command
|
|
138
|
+
const { command, subcommandSuggestion } = resolveCommand(commandPath);
|
|
139
|
+
if (!command) {
|
|
140
|
+
const input = commandPath[0];
|
|
141
|
+
const allCommandNames = Array.from(commands.keys());
|
|
142
|
+
const suggestions = suggestCommands(input, allCommandNames);
|
|
143
|
+
let msg = `Unknown command: ${input}`;
|
|
144
|
+
if (suggestions.length > 0) {
|
|
145
|
+
msg += `\n\nDid you mean?\n${suggestions.map(s => ` ${s}`).join('\n')}`;
|
|
146
|
+
}
|
|
147
|
+
msg += '\n\nRun "sf --help" to see available commands.';
|
|
148
|
+
const result = failure(msg, ExitCode.INVALID_ARGUMENTS);
|
|
149
|
+
return outputResult(result, options);
|
|
150
|
+
}
|
|
151
|
+
// Show subcommand suggestion if available
|
|
152
|
+
if (subcommandSuggestion) {
|
|
153
|
+
const result = failure(subcommandSuggestion, ExitCode.INVALID_ARGUMENTS);
|
|
154
|
+
return outputResult(result, options);
|
|
155
|
+
}
|
|
156
|
+
// Handle help flag for specific command
|
|
157
|
+
if (options.help) {
|
|
158
|
+
const helpText = getCommandHelp(command);
|
|
159
|
+
console.log(helpText);
|
|
160
|
+
return ExitCode.SUCCESS;
|
|
161
|
+
}
|
|
162
|
+
// Re-parse with command-specific options
|
|
163
|
+
try {
|
|
164
|
+
const fullParsed = parseArgs(argv, command.options);
|
|
165
|
+
// Validate required options
|
|
166
|
+
if (command.options) {
|
|
167
|
+
validateRequiredOptions(fullParsed.commandOptions, command.options);
|
|
168
|
+
}
|
|
169
|
+
// Re-resolve args from full parse to handle command options correctly
|
|
170
|
+
// The first parse may have included option values as positional args
|
|
171
|
+
const { args: fullSubcommandArgs } = resolveCommand(fullParsed.command);
|
|
172
|
+
const fullResolvedArgs = [...fullSubcommandArgs, ...fullParsed.args];
|
|
173
|
+
// Execute command
|
|
174
|
+
const result = await command.handler(fullResolvedArgs, { ...fullParsed.options, ...fullParsed.commandOptions });
|
|
175
|
+
return outputResult(result, fullParsed.options);
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
179
|
+
const result = failure(message, ExitCode.GENERAL_ERROR);
|
|
180
|
+
return outputResult(result, options);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// ============================================================================
|
|
184
|
+
// Output
|
|
185
|
+
// ============================================================================
|
|
186
|
+
/**
|
|
187
|
+
* Outputs a command result and returns the exit code
|
|
188
|
+
*/
|
|
189
|
+
function outputResult(result, options) {
|
|
190
|
+
const mode = getOutputMode(options);
|
|
191
|
+
const formatter = getFormatter(mode);
|
|
192
|
+
if (result.error) {
|
|
193
|
+
const output = formatter.error(result);
|
|
194
|
+
if (output) {
|
|
195
|
+
console.error(output);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
const output = formatter.success(result);
|
|
200
|
+
if (output) {
|
|
201
|
+
console.log(output);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return result.exitCode;
|
|
205
|
+
}
|
|
206
|
+
// ============================================================================
|
|
207
|
+
// CLI Entry Point
|
|
208
|
+
// ============================================================================
|
|
209
|
+
/**
|
|
210
|
+
* Main CLI entry point
|
|
211
|
+
*/
|
|
212
|
+
export async function main(argv = process.argv.slice(2)) {
|
|
213
|
+
// Register all commands
|
|
214
|
+
const { initCommand } = await import('./commands/init.js');
|
|
215
|
+
const { resetCommand } = await import('./commands/reset.js');
|
|
216
|
+
const { configCommand } = await import('./commands/config.js');
|
|
217
|
+
const { helpCommand, versionCommand } = await import('./commands/help.js');
|
|
218
|
+
const { showCommand, updateCommand, deleteCommand } = await import('./commands/crud.js');
|
|
219
|
+
const { readyCommand, blockedCommand, backlogCommand, closeCommand, reopenCommand, assignCommand, deferCommand, undeferCommand, taskCommand, } = await import('./commands/task.js');
|
|
220
|
+
const { depCommand } = await import('./commands/dep.js');
|
|
221
|
+
const { syncCommand, exportCommand, importCommand, statusCommand } = await import('./commands/sync.js');
|
|
222
|
+
const { identityCommand, whoamiCommand } = await import('./commands/identity.js');
|
|
223
|
+
const { entityCommand } = await import('./commands/entity.js');
|
|
224
|
+
const { statsCommand } = await import('./commands/stats.js');
|
|
225
|
+
const { doctorCommand, migrateCommand } = await import('./commands/admin.js');
|
|
226
|
+
const { gcCommand } = await import('./commands/gc.js');
|
|
227
|
+
const { historyCommand } = await import('./commands/history.js');
|
|
228
|
+
const { planCommand } = await import('./commands/plan.js');
|
|
229
|
+
const { workflowCommand } = await import('./commands/workflow.js');
|
|
230
|
+
const { playbookCommand } = await import('./commands/playbook.js');
|
|
231
|
+
const { channelCommand } = await import('./commands/channel.js');
|
|
232
|
+
const { libraryCommand } = await import('./commands/library.js');
|
|
233
|
+
const { teamCommand } = await import('./commands/team.js');
|
|
234
|
+
const { documentCommand } = await import('./commands/document.js');
|
|
235
|
+
const { embeddingsCommand } = await import('./commands/embeddings.js');
|
|
236
|
+
const { messageCommand } = await import('./commands/message.js');
|
|
237
|
+
const { inboxCommand } = await import('./commands/inbox.js');
|
|
238
|
+
const { completionCommand } = await import('./commands/completion.js');
|
|
239
|
+
const { aliasCommand } = await import('./commands/alias.js');
|
|
240
|
+
const { installCommand } = await import('./commands/install.js');
|
|
241
|
+
const { serveCommand } = await import('./commands/serve.js');
|
|
242
|
+
registerCommand(initCommand);
|
|
243
|
+
registerCommand(resetCommand);
|
|
244
|
+
registerCommand(configCommand);
|
|
245
|
+
registerCommand(helpCommand);
|
|
246
|
+
registerCommand(versionCommand);
|
|
247
|
+
registerCommand(showCommand);
|
|
248
|
+
registerCommand(updateCommand);
|
|
249
|
+
registerCommand(deleteCommand);
|
|
250
|
+
// Task commands
|
|
251
|
+
registerCommand(readyCommand);
|
|
252
|
+
registerCommand(blockedCommand);
|
|
253
|
+
registerCommand(backlogCommand);
|
|
254
|
+
registerCommand(closeCommand);
|
|
255
|
+
registerCommand(reopenCommand);
|
|
256
|
+
registerCommand(assignCommand);
|
|
257
|
+
registerCommand(deferCommand);
|
|
258
|
+
registerCommand(undeferCommand);
|
|
259
|
+
registerCommand(taskCommand);
|
|
260
|
+
// Dependency commands
|
|
261
|
+
registerCommand(depCommand);
|
|
262
|
+
// Sync commands
|
|
263
|
+
registerCommand(syncCommand);
|
|
264
|
+
registerCommand(exportCommand);
|
|
265
|
+
registerCommand(importCommand);
|
|
266
|
+
registerCommand(statusCommand);
|
|
267
|
+
// Identity commands
|
|
268
|
+
registerCommand(identityCommand);
|
|
269
|
+
registerCommand(whoamiCommand);
|
|
270
|
+
// Entity commands
|
|
271
|
+
registerCommand(entityCommand);
|
|
272
|
+
// Admin commands
|
|
273
|
+
registerCommand(statsCommand);
|
|
274
|
+
registerCommand(doctorCommand);
|
|
275
|
+
registerCommand(migrateCommand);
|
|
276
|
+
registerCommand(gcCommand);
|
|
277
|
+
// History command
|
|
278
|
+
registerCommand(historyCommand);
|
|
279
|
+
// Collection commands
|
|
280
|
+
registerCommand(planCommand);
|
|
281
|
+
registerCommand(workflowCommand);
|
|
282
|
+
registerCommand(playbookCommand);
|
|
283
|
+
registerCommand(channelCommand);
|
|
284
|
+
registerCommand(libraryCommand);
|
|
285
|
+
registerCommand(teamCommand);
|
|
286
|
+
registerCommand(documentCommand);
|
|
287
|
+
registerCommand(embeddingsCommand);
|
|
288
|
+
registerCommand(messageCommand);
|
|
289
|
+
registerCommand(inboxCommand);
|
|
290
|
+
// Completion command
|
|
291
|
+
registerCommand(completionCommand);
|
|
292
|
+
// Alias command
|
|
293
|
+
registerCommand(aliasCommand);
|
|
294
|
+
// Install command
|
|
295
|
+
registerCommand(installCommand);
|
|
296
|
+
// Serve command
|
|
297
|
+
registerCommand(serveCommand);
|
|
298
|
+
// Command aliases
|
|
299
|
+
registerAlias('rm', 'delete'); // Common shell convention
|
|
300
|
+
registerAlias('remove', 'delete'); // Alternative delete alias
|
|
301
|
+
registerAlias('s', 'show'); // Short form
|
|
302
|
+
registerAlias('get', 'show'); // Alternative show alias
|
|
303
|
+
registerAlias('todo', 'ready'); // User-friendly alias
|
|
304
|
+
registerAlias('tasks', 'ready'); // User-friendly alias
|
|
305
|
+
registerAlias('done', 'close'); // User-friendly alias
|
|
306
|
+
registerAlias('st', 'status'); // Short form for sync status
|
|
307
|
+
registerAlias('dep', 'dependency'); // Short form
|
|
308
|
+
registerAlias('msg', 'message'); // Short form
|
|
309
|
+
registerAlias('doc', 'document'); // Short form
|
|
310
|
+
// ============================================================================
|
|
311
|
+
// Plugin Loading
|
|
312
|
+
// ============================================================================
|
|
313
|
+
const isVerbose = argv.includes('--verbose') || argv.includes('-v');
|
|
314
|
+
// Load config for plugin settings (Strategy 2)
|
|
315
|
+
let pluginsConfig;
|
|
316
|
+
try {
|
|
317
|
+
const { loadConfig } = await import('../config/index.js');
|
|
318
|
+
const config = loadConfig();
|
|
319
|
+
pluginsConfig = config.plugins;
|
|
320
|
+
}
|
|
321
|
+
catch {
|
|
322
|
+
// Continue without config-based plugins
|
|
323
|
+
}
|
|
324
|
+
// Discover plugins (Strategy 1 + 2)
|
|
325
|
+
const discoveryResult = await discoverPlugins(pluginsConfig, { verbose: isVerbose });
|
|
326
|
+
logPluginWarnings(discoveryResult, { verbose: isVerbose });
|
|
327
|
+
// Register plugin commands AFTER built-ins (built-ins take precedence)
|
|
328
|
+
const registrationResults = await registerAllPlugins(discoveryResult.plugins, { verbose: isVerbose });
|
|
329
|
+
// Log conflict warnings in non-verbose mode
|
|
330
|
+
if (!isVerbose) {
|
|
331
|
+
// Only log if there were actual conflicts (not just skipped for not being plugins)
|
|
332
|
+
const hasConflicts = registrationResults.some(r => r.skippedCommands.length > 0 || r.skippedAliases.length > 0);
|
|
333
|
+
if (hasConflicts) {
|
|
334
|
+
logConflictWarnings(registrationResults);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
const exitCode = await run(argv);
|
|
338
|
+
process.exit(exitCode);
|
|
339
|
+
}
|
|
340
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command suggestion - "Did you mean?" for unknown commands
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Computes Damerau-Levenshtein distance between two strings.
|
|
6
|
+
* Handles insertions, deletions, substitutions, and transpositions.
|
|
7
|
+
*/
|
|
8
|
+
export declare function damerauLevenshtein(a: string, b: string): number;
|
|
9
|
+
/**
|
|
10
|
+
* Suggests commands similar to the input.
|
|
11
|
+
* Returns up to 3 suggestions with distance <= 3, sorted by distance.
|
|
12
|
+
* Also matches prefix as a secondary signal.
|
|
13
|
+
*/
|
|
14
|
+
export declare function suggestCommands(input: string, commandNames: string[]): string[];
|
|
15
|
+
//# sourceMappingURL=suggest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../src/cli/suggest.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAsB/D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAc/E"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command suggestion - "Did you mean?" for unknown commands
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Computes Damerau-Levenshtein distance between two strings.
|
|
6
|
+
* Handles insertions, deletions, substitutions, and transpositions.
|
|
7
|
+
*/
|
|
8
|
+
export function damerauLevenshtein(a, b) {
|
|
9
|
+
const la = a.length;
|
|
10
|
+
const lb = b.length;
|
|
11
|
+
const d = Array.from({ length: la + 1 }, () => Array(lb + 1).fill(0));
|
|
12
|
+
for (let i = 0; i <= la; i++)
|
|
13
|
+
d[i][0] = i;
|
|
14
|
+
for (let j = 0; j <= lb; j++)
|
|
15
|
+
d[0][j] = j;
|
|
16
|
+
for (let i = 1; i <= la; i++) {
|
|
17
|
+
for (let j = 1; j <= lb; j++) {
|
|
18
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
19
|
+
d[i][j] = Math.min(d[i - 1][j] + 1, // deletion
|
|
20
|
+
d[i][j - 1] + 1, // insertion
|
|
21
|
+
d[i - 1][j - 1] + cost // substitution
|
|
22
|
+
);
|
|
23
|
+
if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {
|
|
24
|
+
d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + cost); // transposition
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return d[la][lb];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Suggests commands similar to the input.
|
|
32
|
+
* Returns up to 3 suggestions with distance <= 3, sorted by distance.
|
|
33
|
+
* Also matches prefix as a secondary signal.
|
|
34
|
+
*/
|
|
35
|
+
export function suggestCommands(input, commandNames) {
|
|
36
|
+
const scored = [];
|
|
37
|
+
for (const name of commandNames) {
|
|
38
|
+
const distance = damerauLevenshtein(input.toLowerCase(), name.toLowerCase());
|
|
39
|
+
if (distance <= 3) {
|
|
40
|
+
scored.push({ name, distance });
|
|
41
|
+
}
|
|
42
|
+
else if (name.startsWith(input.toLowerCase()) || input.toLowerCase().startsWith(name)) {
|
|
43
|
+
scored.push({ name, distance: 4 }); // prefix match as fallback
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
scored.sort((a, b) => a.distance - b.distance);
|
|
47
|
+
return scored.slice(0, 3).map(s => s.name);
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=suggest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../src/cli/suggest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Types - Type definitions for command-line interface
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Output format modes supported by the CLI
|
|
6
|
+
*/
|
|
7
|
+
export declare const OutputMode: {
|
|
8
|
+
/** Human-readable formatted output */
|
|
9
|
+
readonly HUMAN: "human";
|
|
10
|
+
/** Verbose output with extra details and stack traces for errors */
|
|
11
|
+
readonly VERBOSE: "verbose";
|
|
12
|
+
/** Machine-parseable JSON output */
|
|
13
|
+
readonly JSON: "json";
|
|
14
|
+
/** Minimal output, IDs only */
|
|
15
|
+
readonly QUIET: "quiet";
|
|
16
|
+
};
|
|
17
|
+
export type OutputMode = (typeof OutputMode)[keyof typeof OutputMode];
|
|
18
|
+
/**
|
|
19
|
+
* Global CLI options available to all commands
|
|
20
|
+
*/
|
|
21
|
+
export interface GlobalOptions {
|
|
22
|
+
/** Database file path */
|
|
23
|
+
db?: string;
|
|
24
|
+
/** Actor name for operations */
|
|
25
|
+
actor?: string;
|
|
26
|
+
/** Private key for signing requests (base64-encoded PKCS8 format) */
|
|
27
|
+
signKey?: string;
|
|
28
|
+
/** Path to file containing private key for signing requests */
|
|
29
|
+
signKeyFile?: string;
|
|
30
|
+
/** Enable JSON output mode */
|
|
31
|
+
json: boolean;
|
|
32
|
+
/** Enable quiet mode (minimal output) */
|
|
33
|
+
quiet: boolean;
|
|
34
|
+
/** Enable verbose/debug output */
|
|
35
|
+
verbose: boolean;
|
|
36
|
+
/** Show help */
|
|
37
|
+
help: boolean;
|
|
38
|
+
/** Show version */
|
|
39
|
+
version: boolean;
|
|
40
|
+
/** Allow additional command-specific options */
|
|
41
|
+
[key: string]: unknown;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Default values for global options
|
|
45
|
+
*/
|
|
46
|
+
export declare const DEFAULT_GLOBAL_OPTIONS: GlobalOptions;
|
|
47
|
+
/**
|
|
48
|
+
* Command handler function signature
|
|
49
|
+
*/
|
|
50
|
+
export type CommandHandler = (args: string[], options: GlobalOptions & Record<string, unknown>) => Promise<CommandResult> | CommandResult;
|
|
51
|
+
/**
|
|
52
|
+
* Command definition
|
|
53
|
+
*/
|
|
54
|
+
export interface Command {
|
|
55
|
+
/** Command name */
|
|
56
|
+
name: string;
|
|
57
|
+
/** Short description for help */
|
|
58
|
+
description: string;
|
|
59
|
+
/** Usage pattern */
|
|
60
|
+
usage: string;
|
|
61
|
+
/** Detailed help text */
|
|
62
|
+
help?: string;
|
|
63
|
+
/** Command handler */
|
|
64
|
+
handler: CommandHandler;
|
|
65
|
+
/** Subcommands */
|
|
66
|
+
subcommands?: Record<string, Command>;
|
|
67
|
+
/** Command-specific options */
|
|
68
|
+
options?: CommandOption[];
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Command-specific option definition
|
|
72
|
+
*/
|
|
73
|
+
export interface CommandOption {
|
|
74
|
+
/** Option name (long form) */
|
|
75
|
+
name: string;
|
|
76
|
+
/** Short form (single character) */
|
|
77
|
+
short?: string;
|
|
78
|
+
/** Description */
|
|
79
|
+
description: string;
|
|
80
|
+
/** Whether option requires a value */
|
|
81
|
+
hasValue?: boolean;
|
|
82
|
+
/** Whether option is required */
|
|
83
|
+
required?: boolean;
|
|
84
|
+
/** Default value */
|
|
85
|
+
defaultValue?: unknown;
|
|
86
|
+
/** Whether option can be repeated to accumulate multiple values into an array */
|
|
87
|
+
array?: boolean;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Result of command execution
|
|
91
|
+
*/
|
|
92
|
+
export interface CommandResult {
|
|
93
|
+
/** Exit code */
|
|
94
|
+
exitCode: number;
|
|
95
|
+
/** Output data (for JSON mode) */
|
|
96
|
+
data?: unknown;
|
|
97
|
+
/** Human-readable output */
|
|
98
|
+
message?: string;
|
|
99
|
+
/** Error message */
|
|
100
|
+
error?: string;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Factory for successful command results
|
|
104
|
+
*/
|
|
105
|
+
export declare function success(data?: unknown, message?: string): CommandResult;
|
|
106
|
+
/**
|
|
107
|
+
* Factory for error command results
|
|
108
|
+
*/
|
|
109
|
+
export declare function failure(error: string, exitCode?: number): CommandResult;
|
|
110
|
+
export declare const ExitCode: {
|
|
111
|
+
/** Success */
|
|
112
|
+
readonly SUCCESS: 0;
|
|
113
|
+
/** General error */
|
|
114
|
+
readonly GENERAL_ERROR: 1;
|
|
115
|
+
/** Invalid arguments */
|
|
116
|
+
readonly INVALID_ARGUMENTS: 2;
|
|
117
|
+
/** Not found */
|
|
118
|
+
readonly NOT_FOUND: 3;
|
|
119
|
+
/** Validation error */
|
|
120
|
+
readonly VALIDATION: 4;
|
|
121
|
+
/** Permission error */
|
|
122
|
+
readonly PERMISSION: 5;
|
|
123
|
+
};
|
|
124
|
+
export type ExitCode = (typeof ExitCode)[keyof typeof ExitCode];
|
|
125
|
+
/**
|
|
126
|
+
* Result of parsing command line arguments
|
|
127
|
+
*/
|
|
128
|
+
export interface ParsedCommandLine {
|
|
129
|
+
/** Command path (e.g., ['dep', 'add']) */
|
|
130
|
+
command: string[];
|
|
131
|
+
/** Positional arguments after command */
|
|
132
|
+
args: string[];
|
|
133
|
+
/** Global options */
|
|
134
|
+
options: GlobalOptions;
|
|
135
|
+
/** Command-specific options */
|
|
136
|
+
commandOptions: Record<string, unknown>;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Types - Type definitions for command-line interface
|
|
3
|
+
*/
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// Output Modes
|
|
6
|
+
// ============================================================================
|
|
7
|
+
/**
|
|
8
|
+
* Output format modes supported by the CLI
|
|
9
|
+
*/
|
|
10
|
+
export const OutputMode = {
|
|
11
|
+
/** Human-readable formatted output */
|
|
12
|
+
HUMAN: 'human',
|
|
13
|
+
/** Verbose output with extra details and stack traces for errors */
|
|
14
|
+
VERBOSE: 'verbose',
|
|
15
|
+
/** Machine-parseable JSON output */
|
|
16
|
+
JSON: 'json',
|
|
17
|
+
/** Minimal output, IDs only */
|
|
18
|
+
QUIET: 'quiet',
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Default values for global options
|
|
22
|
+
*/
|
|
23
|
+
export const DEFAULT_GLOBAL_OPTIONS = {
|
|
24
|
+
db: undefined,
|
|
25
|
+
actor: undefined,
|
|
26
|
+
signKey: undefined,
|
|
27
|
+
signKeyFile: undefined,
|
|
28
|
+
json: false,
|
|
29
|
+
quiet: false,
|
|
30
|
+
verbose: false,
|
|
31
|
+
help: false,
|
|
32
|
+
version: false,
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Factory for successful command results
|
|
36
|
+
*/
|
|
37
|
+
export function success(data, message) {
|
|
38
|
+
return { exitCode: 0, data, message };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Factory for error command results
|
|
42
|
+
*/
|
|
43
|
+
export function failure(error, exitCode = 1) {
|
|
44
|
+
return { exitCode, error };
|
|
45
|
+
}
|
|
46
|
+
// ============================================================================
|
|
47
|
+
// Exit Codes (from spec)
|
|
48
|
+
// ============================================================================
|
|
49
|
+
export const ExitCode = {
|
|
50
|
+
/** Success */
|
|
51
|
+
SUCCESS: 0,
|
|
52
|
+
/** General error */
|
|
53
|
+
GENERAL_ERROR: 1,
|
|
54
|
+
/** Invalid arguments */
|
|
55
|
+
INVALID_ARGUMENTS: 2,
|
|
56
|
+
/** Not found */
|
|
57
|
+
NOT_FOUND: 3,
|
|
58
|
+
/** Validation error */
|
|
59
|
+
VALIDATION: 4,
|
|
60
|
+
/** Permission error */
|
|
61
|
+
PERMISSION: 5,
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,sCAAsC;IACtC,KAAK,EAAE,OAAO;IACd,oEAAoE;IACpE,OAAO,EAAE,SAAS;IAClB,oCAAoC;IACpC,IAAI,EAAE,MAAM;IACZ,+BAA+B;IAC/B,KAAK,EAAE,OAAO;CACN,CAAC;AAkCX;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAkB;IACnD,EAAE,EAAE,SAAS;IACb,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,SAAS;IACtB,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,KAAK;CACf,CAAC;AAwEF;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,IAAc,EAAE,OAAgB;IACtD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,WAAmB,CAAC;IACzD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,cAAc;IACd,OAAO,EAAE,CAAC;IACV,oBAAoB;IACpB,aAAa,EAAE,CAAC;IAChB,wBAAwB;IACxB,iBAAiB,EAAE,CAAC;IACpB,gBAAgB;IAChB,SAAS,EAAE,CAAC;IACZ,uBAAuB;IACvB,UAAU,EAAE,CAAC;IACb,uBAAuB;IACvB,UAAU,EAAE,CAAC;CACL,CAAC"}
|