@growthub/cli 0.13.2 → 0.13.5
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/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/workspace/metadata-graph/route.js +184 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/workspace/refresh-sources/route.js +24 -2
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/workspace/route.js +14 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/workspace/sandbox-agent-auth/login/route.js +74 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/workspace/sandbox-agent-auth/logout/route.js +67 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/workspace/sandbox-agent-auth/status/route.js +77 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/api/workspace/sandbox-run/route.js +72 -4
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/data-model/components/AgentSwarmPanel.jsx +326 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/data-model/components/DataModelShell.jsx +123 -27
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/data-model/components/OrchestrationGraphEmptyCanvas.jsx +6 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/data-model/components/OrchestrationNodeConfigPanel.jsx +224 -1
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/data-model/components/OrchestrationRunTracePanel.jsx +754 -92
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/data-model/components/SandboxAgentAuthPanel.jsx +224 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/data-model/components/SandboxRunPanel.jsx +32 -1
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/data-model/components/WorkspaceGraphInspectorPanel.jsx +226 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/globals.css +530 -9
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/page.jsx +8 -1
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/settings/integrations/page.jsx +10 -7
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/workflows/RunSetupPanel.jsx +261 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/workflows/WorkflowSurface.jsx +119 -9
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/workspace-builder.jsx +779 -138
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/app/workspace-rail.jsx +91 -14
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/docs/sandbox-environment-primitive.md +35 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/orchestration-agent-swarm.js +923 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/orchestration-graph-runner.js +28 -3
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/orchestration-graph.js +216 -5
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/orchestration-run-console.js +412 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/orchestration-run-inputs.js +366 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/orchestration-run-trace.js +34 -3
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/sandbox-agent-auth-eligibility.js +50 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/sandbox-agent-auth-redaction.js +64 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/sandbox-agent-auth.js +665 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/sandbox-agent-host-catalog.js +168 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-chart-values.js +595 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-data-model.js +164 -7
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-helper.js +11 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-metadata-graph.js +646 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-metadata-selectors.js +249 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-metadata-store.js +1186 -0
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/apps/workspace/lib/workspace-schema.js +111 -1
- package/assets/worker-kits/growthub-custom-workspace-starter-v1/kit.json +14 -0
- package/package.json +1 -1
|
@@ -7,10 +7,33 @@ import {
|
|
|
7
7
|
FILTER_OPERATORS,
|
|
8
8
|
isApiRegistryTestSuccessful
|
|
9
9
|
} from "@/lib/orchestration-graph";
|
|
10
|
+
import { SandboxAgentAuthPanel } from "./SandboxAgentAuthPanel.jsx";
|
|
11
|
+
import { isSandboxLocalAgentHost } from "@/lib/sandbox-agent-auth-eligibility";
|
|
12
|
+
import { HOST_AUTH_CATALOG } from "@/lib/sandbox-agent-host-catalog";
|
|
10
13
|
|
|
11
14
|
const HTTP_METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE"];
|
|
12
15
|
const MODEL_OPTIONS = ["Claude Opus 4.6", "Claude Sonnet 4.5", "GPT-5.2", "Local agent host"];
|
|
13
16
|
const OUTPUT_TYPES = ["Text", "Number", "Boolean", "JSON", "Record ID"];
|
|
17
|
+
const LOCAL_AGENT_ADAPTERS = [
|
|
18
|
+
{ value: "local-process", label: "Local process" },
|
|
19
|
+
{ value: "local-agent-host", label: "Local agent host" },
|
|
20
|
+
{ value: "local-intelligence", label: "Local intelligence" }
|
|
21
|
+
];
|
|
22
|
+
const EMPTY_AGENT_AUTH_PATCH = {
|
|
23
|
+
agentAuthStatus: "",
|
|
24
|
+
agentAuthProvider: "",
|
|
25
|
+
agentAuthLastChecked: "",
|
|
26
|
+
agentAuthLastExitCode: "",
|
|
27
|
+
agentAuthLastMessage: "",
|
|
28
|
+
agentAuthLastLoginUrl: ""
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
function getAgentHostOptions() {
|
|
32
|
+
return Object.entries(HOST_AUTH_CATALOG || {}).map(([slug, host]) => ({
|
|
33
|
+
value: slug,
|
|
34
|
+
label: host?.label || slug
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
14
37
|
function normalizeTags(tags) {
|
|
15
38
|
return Array.from(new Set((Array.isArray(tags) ? tags : [])
|
|
16
39
|
.map((tag) => String(tag || "").trim().toLowerCase())
|
|
@@ -378,6 +401,107 @@ function VersionDeltaControls({ node, config, sandboxRow, onChange, disabled })
|
|
|
378
401
|
);
|
|
379
402
|
}
|
|
380
403
|
|
|
404
|
+
function LocalAgentHostControls({
|
|
405
|
+
sandboxRow,
|
|
406
|
+
objectId,
|
|
407
|
+
rowName,
|
|
408
|
+
disabled,
|
|
409
|
+
onSandboxRowPatch
|
|
410
|
+
}) {
|
|
411
|
+
const row = sandboxRow && typeof sandboxRow === "object" ? sandboxRow : {};
|
|
412
|
+
const runLocality = String(row.runLocality || "local").trim().toLowerCase() === "serverless" ? "serverless" : "local";
|
|
413
|
+
const adapter = String(row.adapter || "local-process").trim() || "local-process";
|
|
414
|
+
const agentHost = String(row.agentHost || "").trim();
|
|
415
|
+
const hostOptions = getAgentHostOptions();
|
|
416
|
+
const canPatch = typeof onSandboxRowPatch === "function";
|
|
417
|
+
|
|
418
|
+
function patch(fields) {
|
|
419
|
+
onSandboxRowPatch?.(fields);
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
function patchWithClearedAgentAuth(fields) {
|
|
423
|
+
patch({ ...fields, ...EMPTY_AGENT_AUTH_PATCH });
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
return (
|
|
427
|
+
<div className="dm-orchestration-config__section dm-workflow-agent-runtime">
|
|
428
|
+
<span>Local agent runtime</span>
|
|
429
|
+
<div className="dm-sandbox-locality-toggle" role="group" aria-label="Run locality">
|
|
430
|
+
{["local", "serverless"].map((mode) => (
|
|
431
|
+
<button
|
|
432
|
+
key={mode}
|
|
433
|
+
type="button"
|
|
434
|
+
className={runLocality === mode ? "is-active" : ""}
|
|
435
|
+
disabled={disabled || !canPatch}
|
|
436
|
+
onClick={() => {
|
|
437
|
+
const fields = { runLocality: mode };
|
|
438
|
+
if (mode === "serverless" && ["local-agent-host", "local-intelligence"].includes(adapter)) {
|
|
439
|
+
fields.adapter = "local-process";
|
|
440
|
+
fields.agentHost = "";
|
|
441
|
+
patchWithClearedAgentAuth(fields);
|
|
442
|
+
return;
|
|
443
|
+
}
|
|
444
|
+
patch(fields);
|
|
445
|
+
}}
|
|
446
|
+
>
|
|
447
|
+
{mode === "local" ? "Local" : "Serverless"}
|
|
448
|
+
</button>
|
|
449
|
+
))}
|
|
450
|
+
</div>
|
|
451
|
+
<p className="dm-orchestration-config__hint">
|
|
452
|
+
Same runtime fields as the Data Model sandbox sidecar. Local agent host uses the Paperclip thin adapter on this machine.
|
|
453
|
+
</p>
|
|
454
|
+
{runLocality === "serverless" && (
|
|
455
|
+
<p className="dm-orchestration-config__hint">
|
|
456
|
+
Serverless delegates execution to the configured scheduler/API Registry row; local CLI auth is not used.
|
|
457
|
+
</p>
|
|
458
|
+
)}
|
|
459
|
+
<label className="dm-orchestration-config__field">
|
|
460
|
+
<span>Execution adapter</span>
|
|
461
|
+
<select
|
|
462
|
+
value={adapter}
|
|
463
|
+
disabled={disabled || !canPatch}
|
|
464
|
+
onChange={(event) => {
|
|
465
|
+
const nextAdapter = event.target.value;
|
|
466
|
+
patchWithClearedAgentAuth({
|
|
467
|
+
adapter: nextAdapter,
|
|
468
|
+
agentHost: nextAdapter === "local-agent-host" ? (agentHost || "claude_local") : ""
|
|
469
|
+
});
|
|
470
|
+
}}
|
|
471
|
+
>
|
|
472
|
+
{LOCAL_AGENT_ADAPTERS.map((item) => (
|
|
473
|
+
<option key={item.value} value={item.value}>{item.label}</option>
|
|
474
|
+
))}
|
|
475
|
+
</select>
|
|
476
|
+
</label>
|
|
477
|
+
{runLocality === "local" && adapter === "local-agent-host" && (
|
|
478
|
+
<label className="dm-orchestration-config__field">
|
|
479
|
+
<span>Agent host (Paperclip)</span>
|
|
480
|
+
<select
|
|
481
|
+
value={agentHost}
|
|
482
|
+
disabled={disabled || !canPatch}
|
|
483
|
+
onChange={(event) => patchWithClearedAgentAuth({ agentHost: event.target.value })}
|
|
484
|
+
>
|
|
485
|
+
<option value="">Select host...</option>
|
|
486
|
+
{hostOptions.map((item) => (
|
|
487
|
+
<option key={item.value} value={item.value}>{item.label}</option>
|
|
488
|
+
))}
|
|
489
|
+
</select>
|
|
490
|
+
</label>
|
|
491
|
+
)}
|
|
492
|
+
{runLocality === "local" && adapter === "local-agent-host" && isSandboxLocalAgentHost(row) && (
|
|
493
|
+
<SandboxAgentAuthPanel
|
|
494
|
+
objectId={objectId}
|
|
495
|
+
rowName={rowName}
|
|
496
|
+
draft={row}
|
|
497
|
+
disabled={disabled || !canPatch}
|
|
498
|
+
onPatchDraft={patch}
|
|
499
|
+
/>
|
|
500
|
+
)}
|
|
501
|
+
</div>
|
|
502
|
+
);
|
|
503
|
+
}
|
|
504
|
+
|
|
381
505
|
export function OrchestrationNodeConfigPanel({
|
|
382
506
|
node,
|
|
383
507
|
onConfigChange,
|
|
@@ -386,6 +510,9 @@ export function OrchestrationNodeConfigPanel({
|
|
|
386
510
|
registryRow,
|
|
387
511
|
workspaceConfig,
|
|
388
512
|
sandboxRow,
|
|
513
|
+
objectId,
|
|
514
|
+
rowName,
|
|
515
|
+
onSandboxRowPatch,
|
|
389
516
|
activeTab: controlledTab,
|
|
390
517
|
onTabChange
|
|
391
518
|
}) {
|
|
@@ -770,7 +897,94 @@ export function OrchestrationNodeConfigPanel({
|
|
|
770
897
|
</div>
|
|
771
898
|
)}
|
|
772
899
|
|
|
773
|
-
{activeTab === "configuration" && type === "ai-agent" && (
|
|
900
|
+
{activeTab === "configuration" && type === "ai-agent" && (config.role || config.taskPrompt || config.required != null) && (
|
|
901
|
+
<div className="dm-orchestration-config__pane">
|
|
902
|
+
<label className="dm-orchestration-config__field">
|
|
903
|
+
<span>Role</span>
|
|
904
|
+
<input
|
|
905
|
+
value={config.role || node.label || ""}
|
|
906
|
+
disabled={disabled}
|
|
907
|
+
onChange={(e) => patchConfig({ role: e.target.value, __nodePatch: { label: e.target.value } })}
|
|
908
|
+
/>
|
|
909
|
+
</label>
|
|
910
|
+
<label className="dm-orchestration-config__field">
|
|
911
|
+
<span>Description</span>
|
|
912
|
+
<input
|
|
913
|
+
placeholder="One-sentence charter"
|
|
914
|
+
value={config.description || ""}
|
|
915
|
+
disabled={disabled}
|
|
916
|
+
onChange={(e) => patchConfig({ description: e.target.value })}
|
|
917
|
+
/>
|
|
918
|
+
</label>
|
|
919
|
+
<label className="dm-orchestration-config__field">
|
|
920
|
+
<span>Task</span>
|
|
921
|
+
<textarea
|
|
922
|
+
rows={4}
|
|
923
|
+
value={config.taskPrompt || ""}
|
|
924
|
+
disabled={disabled}
|
|
925
|
+
onChange={(e) => patchConfig({ taskPrompt: e.target.value })}
|
|
926
|
+
/>
|
|
927
|
+
</label>
|
|
928
|
+
<label className="dm-orchestration-config__field">
|
|
929
|
+
<span>Tools</span>
|
|
930
|
+
<input
|
|
931
|
+
placeholder="read, summarize"
|
|
932
|
+
value={Array.isArray(config.tools) ? config.tools.join(", ") : ""}
|
|
933
|
+
disabled={disabled}
|
|
934
|
+
onChange={(e) => patchConfig({
|
|
935
|
+
tools: e.target.value.split(",").map((t) => t.trim()).filter(Boolean)
|
|
936
|
+
})}
|
|
937
|
+
/>
|
|
938
|
+
</label>
|
|
939
|
+
<label className="dm-orchestration-config__field">
|
|
940
|
+
<span>Max tokens</span>
|
|
941
|
+
<input
|
|
942
|
+
type="number"
|
|
943
|
+
min="0"
|
|
944
|
+
placeholder="0 = inherit"
|
|
945
|
+
value={config.maxTokens || 0}
|
|
946
|
+
disabled={disabled}
|
|
947
|
+
onChange={(e) => patchConfig({ maxTokens: Math.max(0, Number(e.target.value) || 0) })}
|
|
948
|
+
/>
|
|
949
|
+
</label>
|
|
950
|
+
<label className="dm-orchestration-config__field">
|
|
951
|
+
<span>Agent host</span>
|
|
952
|
+
<select
|
|
953
|
+
value={config.agentHost || ""}
|
|
954
|
+
disabled={disabled}
|
|
955
|
+
onChange={(e) => patchConfig({ agentHost: e.target.value })}
|
|
956
|
+
>
|
|
957
|
+
<option value="">Inherit</option>
|
|
958
|
+
{Object.entries(HOST_AUTH_CATALOG || {}).map(([slug, host]) => (
|
|
959
|
+
<option key={slug} value={slug}>{host?.label || slug}</option>
|
|
960
|
+
))}
|
|
961
|
+
</select>
|
|
962
|
+
</label>
|
|
963
|
+
<label className="dm-orchestration-config__field dm-orchestration-config__field-inline">
|
|
964
|
+
<input
|
|
965
|
+
type="checkbox"
|
|
966
|
+
checked={config.required !== false}
|
|
967
|
+
disabled={disabled}
|
|
968
|
+
onChange={(e) => patchConfig({ required: e.target.checked })}
|
|
969
|
+
/>
|
|
970
|
+
<span>Required</span>
|
|
971
|
+
</label>
|
|
972
|
+
<label
|
|
973
|
+
className="dm-orchestration-config__field dm-orchestration-config__field-inline"
|
|
974
|
+
title="Network is granted only when both this and the row's networkAllow are on."
|
|
975
|
+
>
|
|
976
|
+
<input
|
|
977
|
+
type="checkbox"
|
|
978
|
+
checked={config.networkAccess === true}
|
|
979
|
+
disabled={disabled}
|
|
980
|
+
onChange={(e) => patchConfig({ networkAccess: e.target.checked })}
|
|
981
|
+
/>
|
|
982
|
+
<span>Network</span>
|
|
983
|
+
</label>
|
|
984
|
+
</div>
|
|
985
|
+
)}
|
|
986
|
+
|
|
987
|
+
{activeTab === "configuration" && type === "ai-agent" && !(config.role || config.taskPrompt || config.required != null) && (
|
|
774
988
|
<div className="dm-orchestration-config__pane">
|
|
775
989
|
<label className="dm-orchestration-config__field">
|
|
776
990
|
<span>Model</span>
|
|
@@ -778,6 +992,15 @@ export function OrchestrationNodeConfigPanel({
|
|
|
778
992
|
{MODEL_OPTIONS.map((model) => <option key={model} value={model}>{model}</option>)}
|
|
779
993
|
</select>
|
|
780
994
|
</label>
|
|
995
|
+
{(config.model || MODEL_OPTIONS[0]) === "Local agent host" && (
|
|
996
|
+
<LocalAgentHostControls
|
|
997
|
+
sandboxRow={sandboxRow}
|
|
998
|
+
objectId={objectId}
|
|
999
|
+
rowName={rowName}
|
|
1000
|
+
disabled={disabled}
|
|
1001
|
+
onSandboxRowPatch={onSandboxRowPatch}
|
|
1002
|
+
/>
|
|
1003
|
+
)}
|
|
781
1004
|
<label className="dm-orchestration-config__field">
|
|
782
1005
|
<span>Input prompt</span>
|
|
783
1006
|
<textarea
|