toolcraft 0.0.53 → 0.0.55
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/dist/cli.js +84 -20
- package/package.json +2 -2
package/dist/cli.js
CHANGED
|
@@ -887,6 +887,31 @@ function describeHelpValueToken(schema, field) {
|
|
|
887
887
|
}
|
|
888
888
|
return describeFieldNameValueToken(field.displayPath, field.optionFlag) ?? "value";
|
|
889
889
|
}
|
|
890
|
+
function formatCompactEnumSignatureToken(schema) {
|
|
891
|
+
if (schema.kind !== "enum" || schema.values.length < 2 || schema.values.length > 3) {
|
|
892
|
+
return undefined;
|
|
893
|
+
}
|
|
894
|
+
const tokens = schema.values.map((value) => String(value));
|
|
895
|
+
const compact = tokens.every((token) => token.length > 0 &&
|
|
896
|
+
token.length <= 24 &&
|
|
897
|
+
token.trim() === token &&
|
|
898
|
+
!token.includes("|") &&
|
|
899
|
+
!token.includes("\t") &&
|
|
900
|
+
!token.includes("\n") &&
|
|
901
|
+
!token.includes("\r") &&
|
|
902
|
+
!token.includes(" "));
|
|
903
|
+
return compact ? tokens.join("|") : undefined;
|
|
904
|
+
}
|
|
905
|
+
function formatCommandParameterFieldFlags(field, globalLongOptionFlags) {
|
|
906
|
+
if (field.positionalIndex !== undefined || field.schema.kind === "boolean") {
|
|
907
|
+
return formatHelpFieldFlags(field, globalLongOptionFlags);
|
|
908
|
+
}
|
|
909
|
+
const enumToken = formatCompactEnumSignatureToken(field.schema);
|
|
910
|
+
if (enumToken !== undefined) {
|
|
911
|
+
return `${formatOptionFlags(field, globalLongOptionFlags)} ${enumToken}`;
|
|
912
|
+
}
|
|
913
|
+
return formatHelpFieldFlags(field, globalLongOptionFlags);
|
|
914
|
+
}
|
|
890
915
|
function describeDynamicFieldType(field) {
|
|
891
916
|
if (field.schema.kind === "record") {
|
|
892
917
|
const valueSchema = unwrapOptional(field.schema.value);
|
|
@@ -1035,7 +1060,7 @@ function formatCommandParameterTokens(command, casing, globalLongOptionFlags) {
|
|
|
1035
1060
|
const fields = assignPositionals(collected.fields, command.positional);
|
|
1036
1061
|
return fields
|
|
1037
1062
|
.filter((field) => field.global !== true)
|
|
1038
|
-
.map((field) => wrapOptionalCommandParameterToken(
|
|
1063
|
+
.map((field) => wrapOptionalCommandParameterToken(formatCommandParameterFieldFlags(field, globalLongOptionFlags), field.positionalIndex === undefined && (field.optional || field.hasDefault)))
|
|
1039
1064
|
.concat(collected.dynamicFields.flatMap((field) => formatCommandDynamicParameterTokens(field, casing)));
|
|
1040
1065
|
}
|
|
1041
1066
|
function formatCommandRowName(node, casing, globalLongOptionFlags) {
|
|
@@ -2011,6 +2036,40 @@ function renderApprovalDeclined(error) {
|
|
|
2011
2036
|
logger.error(error.message);
|
|
2012
2037
|
process.exitCode = 1;
|
|
2013
2038
|
}
|
|
2039
|
+
function renderCliErrorPattern(pattern) {
|
|
2040
|
+
const logger = createLogger();
|
|
2041
|
+
if (pattern.kind === "usage") {
|
|
2042
|
+
logger.error(appendUsagePointer(pattern.message, {
|
|
2043
|
+
rootUsageName: pattern.rootUsageName,
|
|
2044
|
+
commandPath: pattern.commandPath
|
|
2045
|
+
}));
|
|
2046
|
+
process.exitCode = 1;
|
|
2047
|
+
return;
|
|
2048
|
+
}
|
|
2049
|
+
if (pattern.kind === "runtime-user") {
|
|
2050
|
+
logger.error(pattern.message);
|
|
2051
|
+
process.exitCode = 1;
|
|
2052
|
+
return;
|
|
2053
|
+
}
|
|
2054
|
+
if (pattern.kind === "toolcraft-bug") {
|
|
2055
|
+
logger.error(`toolcraft hit an internal invariant: ${pattern.error.message}\n` +
|
|
2056
|
+
`This is a bug in toolcraft or in the command definition; ` +
|
|
2057
|
+
`it cannot be worked around by changing argv. ` +
|
|
2058
|
+
`Re-run with --debug for a stack trace and file an issue.`);
|
|
2059
|
+
if (pattern.debugStackMode !== undefined && pattern.error.stack) {
|
|
2060
|
+
process.stderr.write(`${formatDebugStack(pattern.error.stack, pattern.debugStackMode)}\n`);
|
|
2061
|
+
}
|
|
2062
|
+
process.exitCode = 1;
|
|
2063
|
+
return;
|
|
2064
|
+
}
|
|
2065
|
+
logger.error(pattern.debugStackMode !== undefined
|
|
2066
|
+
? pattern.message
|
|
2067
|
+
: `${pattern.message} Use --debug for a stack trace.`);
|
|
2068
|
+
if (pattern.debugStackMode !== undefined && pattern.stack !== undefined) {
|
|
2069
|
+
process.stderr.write(`${formatDebugStack(pattern.stack, pattern.debugStackMode)}\n`);
|
|
2070
|
+
}
|
|
2071
|
+
process.exitCode = 1;
|
|
2072
|
+
}
|
|
2014
2073
|
function validateServices(services) {
|
|
2015
2074
|
for (const name of Object.keys(services)) {
|
|
2016
2075
|
if (RESERVED_SERVICE_NAMES.has(name)) {
|
|
@@ -2837,22 +2896,25 @@ function renderHttpError(error, options) {
|
|
|
2837
2896
|
function handleRunError(error, options) {
|
|
2838
2897
|
const logger = createLogger();
|
|
2839
2898
|
if (error instanceof UserError) {
|
|
2840
|
-
|
|
2841
|
-
|
|
2842
|
-
|
|
2843
|
-
|
|
2844
|
-
|
|
2899
|
+
renderCliErrorPattern(options.userErrorPattern === "usage"
|
|
2900
|
+
? {
|
|
2901
|
+
kind: "usage",
|
|
2902
|
+
message: error.message,
|
|
2903
|
+
rootUsageName: options.rootUsageName,
|
|
2904
|
+
commandPath: options.commandPath
|
|
2905
|
+
}
|
|
2906
|
+
: {
|
|
2907
|
+
kind: "runtime-user",
|
|
2908
|
+
message: error.message
|
|
2909
|
+
});
|
|
2845
2910
|
return;
|
|
2846
2911
|
}
|
|
2847
2912
|
if (error instanceof Error && error.name === "ToolcraftBugError") {
|
|
2848
|
-
|
|
2849
|
-
|
|
2850
|
-
|
|
2851
|
-
|
|
2852
|
-
|
|
2853
|
-
process.stderr.write(`${formatDebugStack(error.stack, options.debugStackMode)}\n`);
|
|
2854
|
-
}
|
|
2855
|
-
process.exitCode = 1;
|
|
2913
|
+
renderCliErrorPattern({
|
|
2914
|
+
kind: "toolcraft-bug",
|
|
2915
|
+
error,
|
|
2916
|
+
debugStackMode: options.debugStackMode
|
|
2917
|
+
});
|
|
2856
2918
|
return;
|
|
2857
2919
|
}
|
|
2858
2920
|
if (error instanceof CommanderError) {
|
|
@@ -2891,11 +2953,12 @@ function handleRunError(error, options) {
|
|
|
2891
2953
|
return;
|
|
2892
2954
|
}
|
|
2893
2955
|
const message = error instanceof Error ? error.message : String(error);
|
|
2894
|
-
|
|
2895
|
-
|
|
2896
|
-
|
|
2897
|
-
|
|
2898
|
-
|
|
2956
|
+
renderCliErrorPattern({
|
|
2957
|
+
kind: "unexpected",
|
|
2958
|
+
message,
|
|
2959
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
2960
|
+
debugStackMode: options.debugStackMode
|
|
2961
|
+
});
|
|
2899
2962
|
}
|
|
2900
2963
|
function formatCommanderErrorMessage(error) {
|
|
2901
2964
|
return error.message.startsWith("error:") ? error.message : `error: ${error.message}`;
|
|
@@ -3195,7 +3258,8 @@ export async function runCLI(roots, options = {}) {
|
|
|
3195
3258
|
program,
|
|
3196
3259
|
argv: process.argv,
|
|
3197
3260
|
rootUsageName,
|
|
3198
|
-
commandPath: resolvedCommandPath
|
|
3261
|
+
commandPath: resolvedCommandPath,
|
|
3262
|
+
userErrorPattern: errorReportContext?.params === undefined ? "usage" : "runtime-user"
|
|
3199
3263
|
});
|
|
3200
3264
|
}
|
|
3201
3265
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "toolcraft",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.55",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"postpack": "node ../../scripts/manage-bundled-workspace-deps.mjs cleanup . toolcraft-design @poe-code/frontmatter @poe-code/agent-mcp-config @poe-code/agent-human-in-loop @poe-code/task-list @poe-code/agent-defs @poe-code/config-mutations @poe-code/process-runner tiny-mcp-client mcp-oauth auth-store"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"toolcraft-schema": "0.0.
|
|
50
|
+
"toolcraft-schema": "0.0.55",
|
|
51
51
|
"commander": "^14.0.3",
|
|
52
52
|
"fast-string-width": "^3.0.2",
|
|
53
53
|
"fast-wrap-ansi": "^0.2.0",
|