@clickraft/cli 0.7.3 → 0.8.1
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/CHANGELOG.md +2 -2
- package/dist/cli.js +319 -107
- package/dist/cli.js.map +1 -1
- package/dist/index.js +319 -107
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -144,7 +144,7 @@ var EXIT_CODE_MAP = {
|
|
|
144
144
|
exitCode: 2,
|
|
145
145
|
category: "usage",
|
|
146
146
|
retryable: false,
|
|
147
|
-
hint: "Run `
|
|
147
|
+
hint: "Run `clickraft nodes list` for the current set of node types."
|
|
148
148
|
},
|
|
149
149
|
CANVAS_REV_MISMATCH: {
|
|
150
150
|
exitCode: 7,
|
|
@@ -188,6 +188,12 @@ var EXIT_CODE_MAP = {
|
|
|
188
188
|
retryable: false,
|
|
189
189
|
hint: "Resource not found."
|
|
190
190
|
},
|
|
191
|
+
NODE_TYPE_NOT_FOUND: {
|
|
192
|
+
exitCode: 2,
|
|
193
|
+
category: "usage",
|
|
194
|
+
retryable: false,
|
|
195
|
+
hint: "Run `clickraft nodes list` for the current set of node types."
|
|
196
|
+
},
|
|
191
197
|
FEATURE_DISABLED: {
|
|
192
198
|
exitCode: 2,
|
|
193
199
|
category: "usage",
|
|
@@ -2587,12 +2593,19 @@ var ModelSummarySchema = z8.object({
|
|
|
2587
2593
|
output: z8.array(z8.string())
|
|
2588
2594
|
}).passthrough().nullable(),
|
|
2589
2595
|
bestFor: z8.array(z8.string()),
|
|
2590
|
-
badges: z8.array(
|
|
2596
|
+
badges: z8.array(
|
|
2597
|
+
z8.object({
|
|
2598
|
+
type: z8.string(),
|
|
2599
|
+
label: z8.string(),
|
|
2600
|
+
color: z8.string(),
|
|
2601
|
+
expires_at: z8.string().nullable().optional()
|
|
2602
|
+
}).strict()
|
|
2603
|
+
),
|
|
2591
2604
|
isFeatured: z8.boolean(),
|
|
2592
2605
|
isDefault: z8.boolean(),
|
|
2593
2606
|
docsUrl: z8.string().nullable(),
|
|
2594
2607
|
llmContext: z8.string().nullable(),
|
|
2595
|
-
constraints: z8.record(z8.unknown()).nullable(),
|
|
2608
|
+
constraints: z8.record(z8.string(), z8.unknown()).nullable(),
|
|
2596
2609
|
modelFamily: z8.string().nullable(),
|
|
2597
2610
|
isFamilyPrimary: z8.boolean().nullable()
|
|
2598
2611
|
}).strict();
|
|
@@ -2633,28 +2646,86 @@ async function listModels(opts) {
|
|
|
2633
2646
|
return data;
|
|
2634
2647
|
}
|
|
2635
2648
|
|
|
2636
|
-
// src/
|
|
2649
|
+
// src/schemas/node-types.ts
|
|
2637
2650
|
import { z as z9 } from "zod";
|
|
2638
|
-
var
|
|
2639
|
-
|
|
2640
|
-
|
|
2641
|
-
|
|
2642
|
-
|
|
2643
|
-
|
|
2651
|
+
var NodeTypeSummarySchema = z9.object({
|
|
2652
|
+
type: z9.string(),
|
|
2653
|
+
portCount: z9.number()
|
|
2654
|
+
}).strict();
|
|
2655
|
+
var NodeTypePortSchema = z9.object({
|
|
2656
|
+
handleId: z9.string(),
|
|
2657
|
+
direction: z9.enum(["input", "output"]),
|
|
2658
|
+
dataType: z9.string()
|
|
2659
|
+
}).strict();
|
|
2660
|
+
var NodeTypeDetailSchema = z9.object({
|
|
2661
|
+
type: z9.string(),
|
|
2662
|
+
ports: z9.array(NodeTypePortSchema),
|
|
2663
|
+
agentWritableFields: z9.array(z9.string())
|
|
2664
|
+
}).strict();
|
|
2665
|
+
var NodeTypesListResponseSchema = z9.object({
|
|
2666
|
+
nodeTypes: z9.array(NodeTypeSummarySchema)
|
|
2667
|
+
}).strict();
|
|
2668
|
+
|
|
2669
|
+
// src/commands/nodes/internal.ts
|
|
2670
|
+
async function buildNodesClient(opts) {
|
|
2671
|
+
const cfg = await loadConfig({
|
|
2672
|
+
flagProfile: opts.profile,
|
|
2673
|
+
flagApiBaseUrl: opts.apiBaseUrl,
|
|
2674
|
+
flagToken: opts.token
|
|
2675
|
+
});
|
|
2676
|
+
return new ApiClient({
|
|
2677
|
+
apiBaseUrl: cfg.apiBaseUrl,
|
|
2678
|
+
accessToken: cfg.accessToken,
|
|
2679
|
+
signal: opts.signal,
|
|
2680
|
+
cloudflareAccess: cfg.cloudflareAccess
|
|
2681
|
+
});
|
|
2682
|
+
}
|
|
2683
|
+
|
|
2684
|
+
// src/commands/nodes/describe.ts
|
|
2685
|
+
async function describeNode(opts) {
|
|
2686
|
+
const client = opts.client ?? await buildNodesClient(opts);
|
|
2687
|
+
return client.request({
|
|
2688
|
+
method: "GET",
|
|
2689
|
+
path: `/node-types/${encodeURIComponent(opts.type)}`,
|
|
2690
|
+
responseSchema: NodeTypeDetailSchema,
|
|
2691
|
+
signal: opts.signal
|
|
2692
|
+
});
|
|
2693
|
+
}
|
|
2694
|
+
|
|
2695
|
+
// src/commands/nodes/list.ts
|
|
2696
|
+
async function listNodes(opts) {
|
|
2697
|
+
const client = opts.client ?? await buildNodesClient(opts);
|
|
2698
|
+
const data = await client.request({
|
|
2699
|
+
method: "GET",
|
|
2700
|
+
path: "/node-types",
|
|
2701
|
+
responseSchema: NodeTypesListResponseSchema,
|
|
2702
|
+
signal: opts.signal
|
|
2703
|
+
});
|
|
2704
|
+
return data;
|
|
2705
|
+
}
|
|
2706
|
+
|
|
2707
|
+
// src/commands/product/list.ts
|
|
2708
|
+
import { z as z10 } from "zod";
|
|
2709
|
+
var ProductImageSummarySchema = z10.object({
|
|
2710
|
+
id: z10.string().uuid(),
|
|
2711
|
+
url: z10.string(),
|
|
2712
|
+
altText: z10.string().nullable(),
|
|
2713
|
+
isPrimary: z10.boolean(),
|
|
2714
|
+
sortOrder: z10.number().int()
|
|
2644
2715
|
});
|
|
2645
|
-
var ProductSummarySchema =
|
|
2646
|
-
id:
|
|
2647
|
-
title:
|
|
2648
|
-
sourceType:
|
|
2649
|
-
syncStatus:
|
|
2650
|
-
vendor:
|
|
2651
|
-
productType:
|
|
2652
|
-
tags:
|
|
2653
|
-
images:
|
|
2716
|
+
var ProductSummarySchema = z10.object({
|
|
2717
|
+
id: z10.string().uuid(),
|
|
2718
|
+
title: z10.string(),
|
|
2719
|
+
sourceType: z10.string(),
|
|
2720
|
+
syncStatus: z10.enum(["synced", "pending", "stale", "error", "deleted_upstream"]).nullable(),
|
|
2721
|
+
vendor: z10.string().nullable(),
|
|
2722
|
+
productType: z10.string().nullable(),
|
|
2723
|
+
tags: z10.array(z10.string()),
|
|
2724
|
+
images: z10.array(ProductImageSummarySchema)
|
|
2654
2725
|
});
|
|
2655
|
-
var ProductsListResponseSchema =
|
|
2656
|
-
items:
|
|
2657
|
-
nextCursor:
|
|
2726
|
+
var ProductsListResponseSchema = z10.object({
|
|
2727
|
+
items: z10.array(ProductSummarySchema),
|
|
2728
|
+
nextCursor: z10.string().nullable()
|
|
2658
2729
|
});
|
|
2659
2730
|
var DEFAULT_LIMIT = 50;
|
|
2660
2731
|
async function listProducts(options) {
|
|
@@ -2785,33 +2856,33 @@ async function buildTemplateClient(opts) {
|
|
|
2785
2856
|
}
|
|
2786
2857
|
|
|
2787
2858
|
// src/schemas/templates.ts
|
|
2788
|
-
import { z as
|
|
2789
|
-
var DeclaredParamSchema =
|
|
2790
|
-
name:
|
|
2791
|
-
type:
|
|
2792
|
-
required:
|
|
2793
|
-
defaultValue:
|
|
2794
|
-
enumValues:
|
|
2795
|
-
description:
|
|
2859
|
+
import { z as z11 } from "zod";
|
|
2860
|
+
var DeclaredParamSchema = z11.object({
|
|
2861
|
+
name: z11.string(),
|
|
2862
|
+
type: z11.string(),
|
|
2863
|
+
required: z11.boolean(),
|
|
2864
|
+
defaultValue: z11.string().nullable().optional(),
|
|
2865
|
+
enumValues: z11.array(z11.string()).nullable().optional(),
|
|
2866
|
+
description: z11.string().nullable().optional()
|
|
2796
2867
|
}).strict();
|
|
2797
|
-
var TemplateSummarySchema =
|
|
2798
|
-
id:
|
|
2799
|
-
source:
|
|
2800
|
-
name:
|
|
2801
|
-
description:
|
|
2802
|
-
category:
|
|
2803
|
-
thumbnailUrl:
|
|
2804
|
-
tags:
|
|
2805
|
-
createdAt:
|
|
2868
|
+
var TemplateSummarySchema = z11.object({
|
|
2869
|
+
id: z11.string().uuid(),
|
|
2870
|
+
source: z11.enum(["own", "system"]),
|
|
2871
|
+
name: z11.string(),
|
|
2872
|
+
description: z11.string().nullable(),
|
|
2873
|
+
category: z11.string().nullable(),
|
|
2874
|
+
thumbnailUrl: z11.string().nullable(),
|
|
2875
|
+
tags: z11.array(z11.string()),
|
|
2876
|
+
createdAt: z11.string()
|
|
2806
2877
|
}).strict();
|
|
2807
2878
|
var TemplateDetailSchema = TemplateSummarySchema.extend({
|
|
2808
|
-
declaredParams:
|
|
2809
|
-
timesUsed:
|
|
2879
|
+
declaredParams: z11.array(DeclaredParamSchema),
|
|
2880
|
+
timesUsed: z11.number()
|
|
2810
2881
|
}).strict();
|
|
2811
|
-
var TemplatesListResponseSchema =
|
|
2812
|
-
templates:
|
|
2813
|
-
cursor:
|
|
2814
|
-
hasMore:
|
|
2882
|
+
var TemplatesListResponseSchema = z11.object({
|
|
2883
|
+
templates: z11.array(TemplateSummarySchema),
|
|
2884
|
+
cursor: z11.string().nullable(),
|
|
2885
|
+
hasMore: z11.boolean()
|
|
2815
2886
|
}).strict();
|
|
2816
2887
|
|
|
2817
2888
|
// src/commands/template/list.ts
|
|
@@ -2861,20 +2932,20 @@ async function getTemplate(opts) {
|
|
|
2861
2932
|
}
|
|
2862
2933
|
|
|
2863
2934
|
// src/commands/tokens/list.ts
|
|
2864
|
-
import { z as
|
|
2865
|
-
var TokenRowSchema =
|
|
2866
|
-
id:
|
|
2867
|
-
organizationId:
|
|
2868
|
-
userId:
|
|
2869
|
-
clientId:
|
|
2870
|
-
tokenPrefix:
|
|
2871
|
-
name:
|
|
2872
|
-
scopes:
|
|
2873
|
-
lastUsedAt:
|
|
2874
|
-
expiresAt:
|
|
2875
|
-
createdAt:
|
|
2935
|
+
import { z as z12 } from "zod";
|
|
2936
|
+
var TokenRowSchema = z12.object({
|
|
2937
|
+
id: z12.string().uuid(),
|
|
2938
|
+
organizationId: z12.string().uuid(),
|
|
2939
|
+
userId: z12.string().uuid(),
|
|
2940
|
+
clientId: z12.string().nullable(),
|
|
2941
|
+
tokenPrefix: z12.string(),
|
|
2942
|
+
name: z12.string().nullable(),
|
|
2943
|
+
scopes: z12.array(z12.string()),
|
|
2944
|
+
lastUsedAt: z12.string().nullable(),
|
|
2945
|
+
expiresAt: z12.string(),
|
|
2946
|
+
createdAt: z12.string()
|
|
2876
2947
|
}).strict();
|
|
2877
|
-
var TokensListResponseSchema =
|
|
2948
|
+
var TokensListResponseSchema = z12.array(TokenRowSchema);
|
|
2878
2949
|
async function listTokens(options) {
|
|
2879
2950
|
const config = await loadConfig({
|
|
2880
2951
|
flagProfile: options.profile,
|
|
@@ -2900,51 +2971,51 @@ async function listTokens(options) {
|
|
|
2900
2971
|
}
|
|
2901
2972
|
|
|
2902
2973
|
// src/schemas/workflows.ts
|
|
2903
|
-
import { z as
|
|
2904
|
-
var WorkflowDeclaredParamSchema =
|
|
2905
|
-
name:
|
|
2906
|
-
type:
|
|
2907
|
-
required:
|
|
2908
|
-
defaultValue:
|
|
2909
|
-
description:
|
|
2974
|
+
import { z as z13 } from "zod";
|
|
2975
|
+
var WorkflowDeclaredParamSchema = z13.object({
|
|
2976
|
+
name: z13.string(),
|
|
2977
|
+
type: z13.string(),
|
|
2978
|
+
required: z13.boolean().optional(),
|
|
2979
|
+
defaultValue: z13.unknown().optional(),
|
|
2980
|
+
description: z13.unknown().optional()
|
|
2910
2981
|
}).passthrough();
|
|
2911
|
-
var WorkflowSummarySchema =
|
|
2912
|
-
id:
|
|
2913
|
-
name:
|
|
2914
|
-
tags:
|
|
2915
|
-
declared_params:
|
|
2916
|
-
canvas_rev:
|
|
2917
|
-
updated_at:
|
|
2982
|
+
var WorkflowSummarySchema = z13.object({
|
|
2983
|
+
id: z13.string().uuid(),
|
|
2984
|
+
name: z13.string(),
|
|
2985
|
+
tags: z13.array(z13.string()),
|
|
2986
|
+
declared_params: z13.array(WorkflowDeclaredParamSchema).nullable().default([]),
|
|
2987
|
+
canvas_rev: z13.number().int().nonnegative(),
|
|
2988
|
+
updated_at: z13.string()
|
|
2918
2989
|
}).strict();
|
|
2919
|
-
var WorkflowsListResponseSchema =
|
|
2920
|
-
items:
|
|
2921
|
-
nextCursor:
|
|
2990
|
+
var WorkflowsListResponseSchema = z13.object({
|
|
2991
|
+
items: z13.array(WorkflowSummarySchema),
|
|
2992
|
+
nextCursor: z13.string().nullable()
|
|
2922
2993
|
}).strict();
|
|
2923
|
-
var WorkflowDetailSchema =
|
|
2924
|
-
id:
|
|
2925
|
-
name:
|
|
2926
|
-
description:
|
|
2927
|
-
tags:
|
|
2928
|
-
declared_params:
|
|
2929
|
-
canvas_rev:
|
|
2930
|
-
nodes:
|
|
2931
|
-
edges:
|
|
2932
|
-
created_at:
|
|
2933
|
-
updated_at:
|
|
2994
|
+
var WorkflowDetailSchema = z13.object({
|
|
2995
|
+
id: z13.string().uuid(),
|
|
2996
|
+
name: z13.string(),
|
|
2997
|
+
description: z13.string().nullable(),
|
|
2998
|
+
tags: z13.array(z13.string()),
|
|
2999
|
+
declared_params: z13.array(WorkflowDeclaredParamSchema).nullable().default([]),
|
|
3000
|
+
canvas_rev: z13.number().int().nonnegative(),
|
|
3001
|
+
nodes: z13.array(z13.unknown()),
|
|
3002
|
+
edges: z13.array(z13.unknown()),
|
|
3003
|
+
created_at: z13.string(),
|
|
3004
|
+
updated_at: z13.string()
|
|
2934
3005
|
}).strict();
|
|
2935
|
-
var WorkflowCreateResponseSchema =
|
|
2936
|
-
id:
|
|
2937
|
-
name:
|
|
2938
|
-
description:
|
|
2939
|
-
tags:
|
|
2940
|
-
declared_params:
|
|
2941
|
-
canvas_rev:
|
|
2942
|
-
created_at:
|
|
2943
|
-
updated_at:
|
|
3006
|
+
var WorkflowCreateResponseSchema = z13.object({
|
|
3007
|
+
id: z13.string().uuid(),
|
|
3008
|
+
name: z13.string(),
|
|
3009
|
+
description: z13.string().nullable(),
|
|
3010
|
+
tags: z13.array(z13.string()),
|
|
3011
|
+
declared_params: z13.array(WorkflowDeclaredParamSchema).nullable().default([]),
|
|
3012
|
+
canvas_rev: z13.number().int().nonnegative(),
|
|
3013
|
+
created_at: z13.string(),
|
|
3014
|
+
updated_at: z13.string()
|
|
2944
3015
|
}).strict();
|
|
2945
|
-
var WorkflowMutateResponseSchema =
|
|
2946
|
-
canvas_rev:
|
|
2947
|
-
applied:
|
|
3016
|
+
var WorkflowMutateResponseSchema = z13.object({
|
|
3017
|
+
canvas_rev: z13.number().int().nonnegative(),
|
|
3018
|
+
applied: z13.number().int().nonnegative(),
|
|
2948
3019
|
workflow: WorkflowDetailSchema
|
|
2949
3020
|
}).strict();
|
|
2950
3021
|
|
|
@@ -3439,6 +3510,40 @@ function renderTemplateDetail(detail, out) {
|
|
|
3439
3510
|
}
|
|
3440
3511
|
out.write(lines.join("\n") + "\n");
|
|
3441
3512
|
}
|
|
3513
|
+
function renderNodesList(result, out) {
|
|
3514
|
+
const { nodeTypes } = result;
|
|
3515
|
+
if (nodeTypes.length === 0) {
|
|
3516
|
+
out.write("No node types.\n");
|
|
3517
|
+
return;
|
|
3518
|
+
}
|
|
3519
|
+
const headers = ["TYPE", "PORTS"];
|
|
3520
|
+
const data = nodeTypes.map((n) => [n.type, String(n.portCount)]);
|
|
3521
|
+
const widths = headers.map(
|
|
3522
|
+
(header, i) => Math.max(header.length, ...data.map((cells) => cells[i].length))
|
|
3523
|
+
);
|
|
3524
|
+
const padRow = (cells) => cells.map((cell, i) => cell.padEnd(widths[i])).join(" ").trimEnd();
|
|
3525
|
+
out.write(padRow(headers) + "\n");
|
|
3526
|
+
for (const cells of data) out.write(padRow(cells) + "\n");
|
|
3527
|
+
}
|
|
3528
|
+
function renderNodeDetail(detail, out) {
|
|
3529
|
+
const lines = [detail.type, "", "Ports:"];
|
|
3530
|
+
if (detail.ports.length === 0) {
|
|
3531
|
+
lines.push(" (none)");
|
|
3532
|
+
} else {
|
|
3533
|
+
for (const p of detail.ports) {
|
|
3534
|
+
lines.push(` - ${p.handleId} (${p.direction}, ${p.dataType})`);
|
|
3535
|
+
}
|
|
3536
|
+
}
|
|
3537
|
+
lines.push("", "Agent-writable fields:");
|
|
3538
|
+
if (detail.agentWritableFields.length === 0) {
|
|
3539
|
+
lines.push(" (none)");
|
|
3540
|
+
} else {
|
|
3541
|
+
for (const field of detail.agentWritableFields) {
|
|
3542
|
+
lines.push(` - ${field}`);
|
|
3543
|
+
}
|
|
3544
|
+
}
|
|
3545
|
+
out.write(lines.join("\n") + "\n");
|
|
3546
|
+
}
|
|
3442
3547
|
var TIER_ORDER = { premium: 0, pro: 1, standard: 2 };
|
|
3443
3548
|
function renderModelsList(result, out, options) {
|
|
3444
3549
|
const { models } = result;
|
|
@@ -3464,15 +3569,22 @@ function renderModelsList(result, out, options) {
|
|
|
3464
3569
|
out.write(`${sorted.length} models${filterSuffix}
|
|
3465
3570
|
|
|
3466
3571
|
`);
|
|
3467
|
-
const
|
|
3468
|
-
const
|
|
3469
|
-
|
|
3470
|
-
m.
|
|
3471
|
-
|
|
3472
|
-
|
|
3473
|
-
|
|
3474
|
-
|
|
3475
|
-
|
|
3572
|
+
const MAX_BADGES = 3;
|
|
3573
|
+
const headers = ["SLUG", "NAME", "CATEGORY", "TIER", "CREDITS", "DEFAULT", "BADGES"];
|
|
3574
|
+
const data = sorted.map((m) => {
|
|
3575
|
+
const labels = m.badges.map((b) => b.label);
|
|
3576
|
+
const shown = labels.slice(0, MAX_BADGES).join(", ");
|
|
3577
|
+
const extra = labels.length > MAX_BADGES ? ` +${labels.length - MAX_BADGES} more` : "";
|
|
3578
|
+
return [
|
|
3579
|
+
m.slug,
|
|
3580
|
+
m.displayName,
|
|
3581
|
+
m.category,
|
|
3582
|
+
m.costTier,
|
|
3583
|
+
String(m.creditCost),
|
|
3584
|
+
m.isDefault ? "\u2713" : "",
|
|
3585
|
+
labels.length > 0 ? shown + extra : "\u2014"
|
|
3586
|
+
];
|
|
3587
|
+
});
|
|
3476
3588
|
const widths = headers.map(
|
|
3477
3589
|
(header, i) => Math.max(header.length, ...data.map((cells) => cells[i].length))
|
|
3478
3590
|
);
|
|
@@ -3808,6 +3920,8 @@ function renderRootHelp(version) {
|
|
|
3808
3920
|
" brand-model list List available brand models",
|
|
3809
3921
|
" product list List products in your organization",
|
|
3810
3922
|
" models list List available AI models",
|
|
3923
|
+
" nodes list List available workflow node types",
|
|
3924
|
+
" nodes describe Describe a node type's ports and fields",
|
|
3811
3925
|
" telemetry inspect Show current telemetry state and payload shape",
|
|
3812
3926
|
" template list List available templates",
|
|
3813
3927
|
" template get Fetch a template by ID",
|
|
@@ -3949,6 +4063,42 @@ function renderCommandHelp(command) {
|
|
|
3949
4063
|
" clickraft models list --featured --json",
|
|
3950
4064
|
""
|
|
3951
4065
|
].join("\n");
|
|
4066
|
+
case "nodes":
|
|
4067
|
+
return [
|
|
4068
|
+
"Usage: clickraft nodes <subcommand> [options]",
|
|
4069
|
+
"",
|
|
4070
|
+
"Subcommands:",
|
|
4071
|
+
" list List available workflow node types",
|
|
4072
|
+
" describe Show a node type's ports and agent-writable fields",
|
|
4073
|
+
""
|
|
4074
|
+
].join("\n");
|
|
4075
|
+
case "nodes list":
|
|
4076
|
+
return [
|
|
4077
|
+
"Usage: clickraft nodes list [options]",
|
|
4078
|
+
"",
|
|
4079
|
+
"Lists the workflow node types available to the API, with port counts.",
|
|
4080
|
+
"",
|
|
4081
|
+
"Options:",
|
|
4082
|
+
" --profile <name>",
|
|
4083
|
+
" --api-base-url <url>",
|
|
4084
|
+
" --token <token>",
|
|
4085
|
+
" --json",
|
|
4086
|
+
""
|
|
4087
|
+
].join("\n");
|
|
4088
|
+
case "nodes describe":
|
|
4089
|
+
return [
|
|
4090
|
+
"Usage: clickraft nodes describe <type> [options]",
|
|
4091
|
+
"",
|
|
4092
|
+
"Shows a node type's ports (handleId, direction, dataType) and the fields",
|
|
4093
|
+
"an agent may write. Handle ids are printed verbatim for use in edges.",
|
|
4094
|
+
"",
|
|
4095
|
+
"Options:",
|
|
4096
|
+
" --profile <name>",
|
|
4097
|
+
" --api-base-url <url>",
|
|
4098
|
+
" --token <token>",
|
|
4099
|
+
" --json",
|
|
4100
|
+
""
|
|
4101
|
+
].join("\n");
|
|
3952
4102
|
case "telemetry inspect":
|
|
3953
4103
|
return [
|
|
3954
4104
|
"Usage: clickraft telemetry inspect [options]",
|
|
@@ -4236,6 +4386,13 @@ function matchNewCommand(argv) {
|
|
|
4236
4386
|
if (sub === void 0 || sub.startsWith("-")) return { kind: "sub-help", verb: "models" };
|
|
4237
4387
|
return { kind: "unknown-sub", verb: "models", sub };
|
|
4238
4388
|
}
|
|
4389
|
+
if (verb === "nodes") {
|
|
4390
|
+
const sub = argv[1];
|
|
4391
|
+
if (sub === "list") return { kind: "cmd", path: "nodes.list", verbTokenCount: 2 };
|
|
4392
|
+
if (sub === "describe") return { kind: "cmd", path: "nodes.describe", verbTokenCount: 2 };
|
|
4393
|
+
if (sub === void 0 || sub.startsWith("-")) return { kind: "sub-help", verb: "nodes" };
|
|
4394
|
+
return { kind: "unknown-sub", verb: "nodes", sub };
|
|
4395
|
+
}
|
|
4239
4396
|
if (verb === "workflow") {
|
|
4240
4397
|
const sub = argv[1];
|
|
4241
4398
|
if (sub === "create") return { kind: "cmd", path: "workflow.create", verbTokenCount: 2 };
|
|
@@ -4305,6 +4462,10 @@ async function runNewCommand(newCmd, options, stdout, stderr) {
|
|
|
4305
4462
|
return await runProductList(argvAfterVerb, ctx, rc);
|
|
4306
4463
|
case "models.list":
|
|
4307
4464
|
return await runModelsList(argvAfterVerb, ctx, rc);
|
|
4465
|
+
case "nodes.list":
|
|
4466
|
+
return await runNodesList(argvAfterVerb, ctx, rc);
|
|
4467
|
+
case "nodes.describe":
|
|
4468
|
+
return await runNodesDescribe(argvAfterVerb, ctx, rc);
|
|
4308
4469
|
case "workflow.create":
|
|
4309
4470
|
return await runWorkflowCreate(argvAfterVerb, ctx, rc);
|
|
4310
4471
|
case "workflow.list":
|
|
@@ -4691,6 +4852,57 @@ function emitModelsList(result, ctx, rc, parsed) {
|
|
|
4691
4852
|
}
|
|
4692
4853
|
});
|
|
4693
4854
|
}
|
|
4855
|
+
async function runNodesList(argv, ctx, rc) {
|
|
4856
|
+
const parsed = parseArgs(argv, {
|
|
4857
|
+
string: [...COMMON_RICH_STRING_FLAGS],
|
|
4858
|
+
boolean: [...COMMON_RICH_BOOL_FLAGS]
|
|
4859
|
+
});
|
|
4860
|
+
const result = await listNodes({
|
|
4861
|
+
profile: parsed.string.profile,
|
|
4862
|
+
apiBaseUrl: parsed.string["api-base-url"],
|
|
4863
|
+
token: parsed.string.token,
|
|
4864
|
+
signal: rc.signal
|
|
4865
|
+
});
|
|
4866
|
+
emitNodesList(result, ctx, rc);
|
|
4867
|
+
return 0;
|
|
4868
|
+
}
|
|
4869
|
+
async function runNodesDescribe(argv, ctx, rc) {
|
|
4870
|
+
const parsed = parseArgs(argv, {
|
|
4871
|
+
string: [...COMMON_RICH_STRING_FLAGS],
|
|
4872
|
+
boolean: [...COMMON_RICH_BOOL_FLAGS]
|
|
4873
|
+
});
|
|
4874
|
+
const type = parsed.positional[0];
|
|
4875
|
+
if (!type) throw new ArgError("Missing required <type> argument.");
|
|
4876
|
+
const detail = await describeNode({
|
|
4877
|
+
type,
|
|
4878
|
+
profile: parsed.string.profile,
|
|
4879
|
+
apiBaseUrl: parsed.string["api-base-url"],
|
|
4880
|
+
token: parsed.string.token,
|
|
4881
|
+
signal: rc.signal
|
|
4882
|
+
});
|
|
4883
|
+
emitNodeDetail(detail, ctx, rc);
|
|
4884
|
+
return 0;
|
|
4885
|
+
}
|
|
4886
|
+
function emitNodesList(result, ctx, rc) {
|
|
4887
|
+
if (rc.signal?.aborted) {
|
|
4888
|
+
throw new AuthError("AUTH_FLOW_CANCELLED", "Cancelled.");
|
|
4889
|
+
}
|
|
4890
|
+
if (rc.jsonMode) {
|
|
4891
|
+
rc.stdout.write(JSON.stringify(wrapSuccess(result, ctx)) + "\n");
|
|
4892
|
+
return;
|
|
4893
|
+
}
|
|
4894
|
+
renderNodesList(result, rc.stdout);
|
|
4895
|
+
}
|
|
4896
|
+
function emitNodeDetail(detail, ctx, rc) {
|
|
4897
|
+
if (rc.signal?.aborted) {
|
|
4898
|
+
throw new AuthError("AUTH_FLOW_CANCELLED", "Cancelled.");
|
|
4899
|
+
}
|
|
4900
|
+
if (rc.jsonMode) {
|
|
4901
|
+
rc.stdout.write(JSON.stringify(wrapSuccess(detail, ctx)) + "\n");
|
|
4902
|
+
return;
|
|
4903
|
+
}
|
|
4904
|
+
renderNodeDetail(detail, rc.stdout);
|
|
4905
|
+
}
|
|
4694
4906
|
async function runWorkflowCreate(argv, ctx, rc) {
|
|
4695
4907
|
const parsed = parseArgs(argv, {
|
|
4696
4908
|
string: [...COMMON_RICH_STRING_FLAGS, "name", "description", "from-file"],
|