@treeseed/cli 0.8.7 → 0.8.9
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.
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { guidedResult } from "./utils.js";
|
|
2
|
+
import { createMarketClientForInvocation } from "./market-utils.js";
|
|
3
|
+
function required(value, message) {
|
|
4
|
+
if (typeof value === "string" && value.trim()) return value.trim();
|
|
5
|
+
throw new Error(message);
|
|
6
|
+
}
|
|
7
|
+
const handleCapacity = async (invocation, context) => {
|
|
8
|
+
const action = invocation.positionals[0] ?? "status";
|
|
9
|
+
const { profile, client } = createMarketClientForInvocation(invocation, context, { requireAuth: true });
|
|
10
|
+
const teamId = typeof invocation.args.team === "string" ? invocation.args.team : typeof profile.teamId === "string" ? profile.teamId : null;
|
|
11
|
+
if (action === "status") {
|
|
12
|
+
const team = required(teamId, "Usage: treeseed capacity status --team <team-id>");
|
|
13
|
+
const response = await client.teamCapacity(team);
|
|
14
|
+
const summary = response.payload.summary;
|
|
15
|
+
return guidedResult({
|
|
16
|
+
command: "capacity",
|
|
17
|
+
summary: "Team helper capacity status",
|
|
18
|
+
facts: [
|
|
19
|
+
{ label: "Market", value: profile.id },
|
|
20
|
+
{ label: "Team", value: team },
|
|
21
|
+
{ label: "Monthly remaining", value: summary?.monthlyRemainingCredits },
|
|
22
|
+
{ label: "Daily remaining", value: summary?.dailyRemainingCredits },
|
|
23
|
+
{ label: "Active providers", value: summary?.activeProviderCount }
|
|
24
|
+
],
|
|
25
|
+
report: { marketId: profile.id, teamId: team, capacity: response.payload }
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
if (action === "providers") {
|
|
29
|
+
const subcommand = invocation.positionals[1] ?? "list";
|
|
30
|
+
const team = required(teamId, "Usage: treeseed capacity providers list --team <team-id>");
|
|
31
|
+
if (subcommand === "list") {
|
|
32
|
+
const response = await client.teamCapacity(team);
|
|
33
|
+
const providers = response.payload.providers ?? [];
|
|
34
|
+
return guidedResult({
|
|
35
|
+
command: "capacity",
|
|
36
|
+
summary: `Found ${providers.length} helper capacity provider${providers.length === 1 ? "" : "s"}.`,
|
|
37
|
+
sections: [{
|
|
38
|
+
title: "Providers",
|
|
39
|
+
lines: providers.map((provider) => `${provider.id} ${provider.name} ${provider.status} workers=${provider.maxConcurrentWorkers ?? 0}`)
|
|
40
|
+
}],
|
|
41
|
+
report: { marketId: profile.id, teamId: team, providers }
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
if (subcommand === "connect") {
|
|
45
|
+
const response = await client.launchManagedCapacityProvider(team, { launchSource: "cli" });
|
|
46
|
+
return guidedResult({
|
|
47
|
+
command: "capacity",
|
|
48
|
+
summary: "TreeSeed-managed helper capacity is connected.",
|
|
49
|
+
facts: [
|
|
50
|
+
{ label: "Provider", value: response.payload.provider?.id },
|
|
51
|
+
{ label: "Security code prefix", value: response.payload.apiKey?.keyPrefix }
|
|
52
|
+
],
|
|
53
|
+
report: { marketId: profile.id, teamId: team, result: response.payload }
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if (subcommand === "keys") {
|
|
57
|
+
const keyAction = invocation.positionals[2] ?? "reset";
|
|
58
|
+
const providerId = required(invocation.args.provider, "Usage: treeseed capacity providers keys reset --provider <provider-id>");
|
|
59
|
+
if (keyAction === "reset") {
|
|
60
|
+
const response = await client.resetCapacityProviderApiKey(providerId, { name: "Provider security code" });
|
|
61
|
+
return guidedResult({
|
|
62
|
+
command: "capacity",
|
|
63
|
+
summary: "Provider security code was reset.",
|
|
64
|
+
facts: [
|
|
65
|
+
{ label: "Provider", value: providerId },
|
|
66
|
+
{ label: "Prefix", value: response.payload.key?.keyPrefix },
|
|
67
|
+
{ label: "Security access code", value: response.payload.plaintextKey }
|
|
68
|
+
],
|
|
69
|
+
report: { marketId: profile.id, providerId, result: response.payload }
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
if (keyAction === "revoke") {
|
|
73
|
+
const keyId = required(invocation.args.key, "Usage: treeseed capacity providers keys revoke --provider <provider-id> --key <key-id>");
|
|
74
|
+
const response = await client.revokeCapacityProviderApiKey(providerId, keyId);
|
|
75
|
+
return guidedResult({
|
|
76
|
+
command: "capacity",
|
|
77
|
+
summary: "Provider security code was revoked.",
|
|
78
|
+
facts: [
|
|
79
|
+
{ label: "Provider", value: providerId },
|
|
80
|
+
{ label: "Key", value: keyId }
|
|
81
|
+
],
|
|
82
|
+
report: { marketId: profile.id, providerId, keyId, result: response.payload }
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return { exitCode: 1, stderr: [`Unknown capacity providers action: ${subcommand}`] };
|
|
87
|
+
}
|
|
88
|
+
if (action === "grants") {
|
|
89
|
+
const subcommand = invocation.positionals[1] ?? "list";
|
|
90
|
+
const team = required(teamId, "Usage: treeseed capacity grants list --team <team-id>");
|
|
91
|
+
if (subcommand === "list") {
|
|
92
|
+
const response = await client.capacityGrants(team);
|
|
93
|
+
return guidedResult({
|
|
94
|
+
command: "capacity",
|
|
95
|
+
summary: `Found ${response.payload.length} capacity grant${response.payload.length === 1 ? "" : "s"}.`,
|
|
96
|
+
sections: [{
|
|
97
|
+
title: "Grants",
|
|
98
|
+
lines: response.payload.map((grant) => `${grant.id} ${grant.grantScope} daily=${grant.dailyCreditLimit ?? "policy"} monthly=${grant.monthlyCreditLimit ?? "policy"}`)
|
|
99
|
+
}],
|
|
100
|
+
report: { marketId: profile.id, teamId: team, grants: response.payload }
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
if (subcommand === "create") {
|
|
104
|
+
const providerId = required(invocation.args.provider, "Usage: treeseed capacity grants create --team <team-id> --provider <provider-id>");
|
|
105
|
+
const response = await client.createCapacityGrant(team, {
|
|
106
|
+
capacityProviderId: providerId,
|
|
107
|
+
projectId: typeof invocation.args.project === "string" ? invocation.args.project : null,
|
|
108
|
+
environment: typeof invocation.args.environment === "string" ? invocation.args.environment : null,
|
|
109
|
+
dailyCreditLimit: Number(invocation.args.daily ?? 25),
|
|
110
|
+
monthlyCreditLimit: Number(invocation.args.monthly ?? 500),
|
|
111
|
+
overflowPolicy: typeof invocation.args.overflow === "string" ? invocation.args.overflow : "approval_required"
|
|
112
|
+
});
|
|
113
|
+
return guidedResult({
|
|
114
|
+
command: "capacity",
|
|
115
|
+
summary: "Capacity grant created.",
|
|
116
|
+
facts: [
|
|
117
|
+
{ label: "Grant", value: response.payload.id },
|
|
118
|
+
{ label: "Provider", value: providerId }
|
|
119
|
+
],
|
|
120
|
+
report: { marketId: profile.id, teamId: team, grant: response.payload }
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
return { exitCode: 1, stderr: [`Unknown capacity grants action: ${subcommand}`] };
|
|
124
|
+
}
|
|
125
|
+
if (action === "enqueue") {
|
|
126
|
+
const projectId = required(invocation.args.project, "Usage: treeseed capacity enqueue --project <project-id> --task-kind <kind>");
|
|
127
|
+
const response = await client.enqueueAgentTask(projectId, {
|
|
128
|
+
taskKind: typeof invocation.args.taskKind === "string" ? invocation.args.taskKind : typeof invocation.args.task === "string" ? invocation.args.task : "proposal.draft",
|
|
129
|
+
environment: typeof invocation.args.environment === "string" ? invocation.args.environment : "staging"
|
|
130
|
+
});
|
|
131
|
+
return guidedResult({
|
|
132
|
+
command: "capacity",
|
|
133
|
+
summary: "Budgeted agent task enqueued.",
|
|
134
|
+
facts: [
|
|
135
|
+
{ label: "Task", value: response.payload.task?.id },
|
|
136
|
+
{ label: "Reserved credits", value: response.payload.reservation?.reservedCredits }
|
|
137
|
+
],
|
|
138
|
+
report: { marketId: profile.id, projectId, result: response.payload }
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
return { exitCode: 1, stderr: [`Unknown capacity action: ${action}`] };
|
|
142
|
+
};
|
|
143
|
+
export {
|
|
144
|
+
handleCapacity
|
|
145
|
+
};
|
|
@@ -128,7 +128,7 @@ function renderConfigResult(commandName, result) {
|
|
|
128
128
|
const resourceInventoryByScope = payload.result?.resourceInventoryByScope ?? payload.resourceInventoryByScope ?? {};
|
|
129
129
|
const secretSession = payload.secretSession;
|
|
130
130
|
const sharedStorageMigrations = payload.result?.sharedStorageMigrations;
|
|
131
|
-
const summary = payload.mode === "print-env-only" ? "Treeseed config environment report completed." : payload.mode === "rotate-machine-key" ? "Treeseed machine key rotated successfully." : payload.mode === "connect-market" ? "
|
|
131
|
+
const summary = payload.mode === "print-env-only" ? "Treeseed config environment report completed." : payload.mode === "rotate-machine-key" ? "Treeseed machine key rotated successfully." : payload.mode === "connect-market" ? "TreeSeed pairing completed successfully." : payload.mode === "bootstrap-preflight" ? "Treeseed bootstrap verification preflight completed." : payload.mode === "bootstrap" ? "Treeseed platform bootstrap completed successfully." : "Treeseed config completed successfully.";
|
|
132
132
|
const market = payload.market;
|
|
133
133
|
return guidedResult({
|
|
134
134
|
command: commandName,
|
|
@@ -939,14 +939,14 @@ const CLI_COMMAND_OVERLAYS = /* @__PURE__ */ new Map([
|
|
|
939
939
|
{ name: "printEnvOnly", flags: "--print-env-only", description: "Print resolved environment values, check provider connections, and exit without prompting or initializing remote resources.", kind: "boolean" },
|
|
940
940
|
{ name: "showSecrets", flags: "--show-secrets", description: "Print full secret values in environment reports instead of masking them.", kind: "boolean" },
|
|
941
941
|
{ name: "rotateMachineKey", flags: "--rotate-machine-key", description: "Regenerate the local home machine key and re-encrypt stored Treeseed secrets and remote auth sessions.", kind: "boolean" },
|
|
942
|
-
{ name: "connectMarket", flags: "--connect-market", description: "Pair the current local repo to a
|
|
943
|
-
{ name: "marketBaseUrl", flags: "--market-base-url <url>", description: "
|
|
944
|
-
{ name: "marketTeamId", flags: "--market-team-id <id>", description: "Team ID to record in the local
|
|
945
|
-
{ name: "marketTeamSlug", flags: "--market-team-slug <slug>", description: "Team slug to record in the local
|
|
942
|
+
{ name: "connectMarket", flags: "--connect-market", description: "Pair the current local repo to a TreeSeed project and register the hybrid runner connection.", kind: "boolean" },
|
|
943
|
+
{ name: "marketBaseUrl", flags: "--market-base-url <url>", description: "TreeSeed control-plane base URL for --connect-market. Defaults to the active remote host.", kind: "string" },
|
|
944
|
+
{ name: "marketTeamId", flags: "--market-team-id <id>", description: "Team ID to record in the local TreeSeed pairing metadata.", kind: "string" },
|
|
945
|
+
{ name: "marketTeamSlug", flags: "--market-team-slug <slug>", description: "Team slug to record in the local TreeSeed pairing metadata.", kind: "string" },
|
|
946
946
|
{ name: "marketProjectId", flags: "--market-project-id <id>", description: "Project ID to pair with when using --connect-market.", kind: "string" },
|
|
947
|
-
{ name: "marketProjectSlug", flags: "--market-project-slug <slug>", description: "Project slug to record in the local
|
|
948
|
-
{ name: "marketProjectApiBaseUrl", flags: "--market-project-api-base-url <url>", description: "Override the project API base URL recorded on the
|
|
949
|
-
{ name: "marketAccessToken", flags: "--market-access-token <token>", description: "Explicit
|
|
947
|
+
{ name: "marketProjectSlug", flags: "--market-project-slug <slug>", description: "Project slug to record in the local TreeSeed pairing metadata.", kind: "string" },
|
|
948
|
+
{ name: "marketProjectApiBaseUrl", flags: "--market-project-api-base-url <url>", description: "Override the project API base URL recorded on the TreeSeed project connection.", kind: "string" },
|
|
949
|
+
{ name: "marketAccessToken", flags: "--market-access-token <token>", description: "Explicit TreeSeed access token to use for pairing. Prefer an existing remote session when possible.", kind: "string" },
|
|
950
950
|
{ name: "rotateRunnerToken", flags: "--rotate-runner-token", description: "Rotate the project runner credential while pairing the local hybrid repo.", kind: "boolean" },
|
|
951
951
|
{ name: "json", flags: "--json", description: "Emit machine-readable JSON instead of human-readable text.", kind: "boolean" }
|
|
952
952
|
],
|
|
@@ -983,7 +983,7 @@ const CLI_COMMAND_OVERLAYS = /* @__PURE__ */ new Map([
|
|
|
983
983
|
example("treeseed config --environment local --sync none --non-interactive", "Apply deterministic local config in automation", "Use the resolved current and suggested values without opening the interactive UI."),
|
|
984
984
|
example("treeseed config --environment staging --print-env-only --show-secrets", "Inspect a resolved environment report", "Print the resolved staging environment with full secret visibility and exit."),
|
|
985
985
|
example("treeseed config --rotate-machine-key", "Rotate the local secret encryption key", "Regenerate the machine key and re-encrypt locally stored Treeseed secrets."),
|
|
986
|
-
example("treeseed config --connect-market --market-project-id kc_proj_123", "Pair a hybrid repo to
|
|
986
|
+
example("treeseed config --connect-market --market-project-id kc_proj_123", "Pair a hybrid repo to TreeSeed", "Register the current local repo as the hybrid runner connection for an existing TreeSeed project.")
|
|
987
987
|
],
|
|
988
988
|
optionDetails: [
|
|
989
989
|
detail("--full", "Enter the advanced editor directly instead of the startup wizard."),
|
|
@@ -1001,7 +1001,7 @@ const CLI_COMMAND_OVERLAYS = /* @__PURE__ */ new Map([
|
|
|
1001
1001
|
detail("--print-env", "Print the resolved environment values before remote initialization continues."),
|
|
1002
1002
|
detail("--print-env-only", "Print the environment report and exit without interactive editing or remote initialization."),
|
|
1003
1003
|
detail("--rotate-machine-key", "Rotate the local machine key used for encrypted Treeseed secret storage."),
|
|
1004
|
-
detail("--connect-market", "Pair the current repo to a
|
|
1004
|
+
detail("--connect-market", "Pair the current repo to a TreeSeed project and store the resulting market connection metadata locally.")
|
|
1005
1005
|
],
|
|
1006
1006
|
automationNotes: [
|
|
1007
1007
|
"Use `--json` for machine-readable automation, or `--non-interactive` when you want deterministic application without interactive UI.",
|
|
@@ -1217,14 +1217,14 @@ const CLI_COMMAND_OVERLAYS = /* @__PURE__ */ new Map([
|
|
|
1217
1217
|
["test:unit", command({ examples: ["treeseed test:unit"], help: { longSummary: ["Test:unit runs workspace unit tests in dependency order."], examples: [example("treeseed test:unit", "Run unit tests", "Execute the package unit test flow."), example("trsd test:unit", "Use the short alias", "Run the same unit tests via the short entrypoint."), example("treeseed test:unit && treeseed check", "Unit tests then validation", "Combine focused tests with broader tenant validation.")] }, executionMode: "adapter" })],
|
|
1218
1218
|
["preflight", command({
|
|
1219
1219
|
options: [
|
|
1220
|
-
{ name: "launch", flags: "--launch", description: "Validate managed
|
|
1220
|
+
{ name: "launch", flags: "--launch", description: "Validate managed TreeSeed launch prerequisites, provider auth, and required live configuration.", kind: "boolean" }
|
|
1221
1221
|
],
|
|
1222
1222
|
examples: ["treeseed preflight", "treeseed preflight --launch"],
|
|
1223
1223
|
help: {
|
|
1224
1224
|
longSummary: ["Preflight checks local prerequisites and authentication state before heavier workflows run."],
|
|
1225
1225
|
examples: [
|
|
1226
1226
|
example("treeseed preflight", "Run the preflight checklist", "Inspect local prerequisites and auth readiness."),
|
|
1227
|
-
example("treeseed preflight --launch", "Validate live launch readiness", "Check managed
|
|
1227
|
+
example("treeseed preflight --launch", "Validate live launch readiness", "Check managed TreeSeed launch prerequisites before creating live GitHub, Cloudflare, and Railway resources."),
|
|
1228
1228
|
example("trsd preflight", "Use the short alias", "Run the same readiness check via the short entrypoint."),
|
|
1229
1229
|
example("treeseed preflight && treeseed dev", "Validate before starting local runtime", "Confirm readiness before launching the integrated dev surface.")
|
|
1230
1230
|
]
|
|
@@ -1460,6 +1460,47 @@ const CLI_ONLY_OPERATION_SPECS = [
|
|
|
1460
1460
|
executionMode: "handler",
|
|
1461
1461
|
handlerName: "projects"
|
|
1462
1462
|
},
|
|
1463
|
+
{
|
|
1464
|
+
id: "market.capacity",
|
|
1465
|
+
name: "capacity",
|
|
1466
|
+
aliases: [],
|
|
1467
|
+
group: "Utilities",
|
|
1468
|
+
summary: "Manage team helper capacity from the selected market.",
|
|
1469
|
+
description: "Inspect team helper credits, connect managed providers, rotate provider security codes, manage grants, and enqueue budgeted agent tasks.",
|
|
1470
|
+
provider: "default",
|
|
1471
|
+
related: ["teams", "projects", "agents"],
|
|
1472
|
+
usage: "treeseed capacity [status|providers|grants|enqueue]",
|
|
1473
|
+
arguments: [{ name: "action", description: "Capacity action.", required: false }],
|
|
1474
|
+
options: [
|
|
1475
|
+
{ name: "market", flags: "--market <id-or-url>", description: "Select a configured market id or direct market API URL.", kind: "string" },
|
|
1476
|
+
{ name: "team", flags: "--team <team-id>", description: "Team id for capacity status and grants.", kind: "string" },
|
|
1477
|
+
{ name: "provider", flags: "--provider <provider-id>", description: "Capacity provider id for grant or key actions.", kind: "string" },
|
|
1478
|
+
{ name: "project", flags: "--project <project-id>", description: "Project id for grant allocation or agent enqueue.", kind: "string" },
|
|
1479
|
+
{ name: "key", flags: "--key <key-id>", description: "Provider security code id to revoke.", kind: "string" },
|
|
1480
|
+
{ name: "taskKind", flags: "--task-kind <kind>", description: "Agent task signature for budgeted enqueue.", kind: "string" },
|
|
1481
|
+
{ name: "environment", flags: "--environment <environment>", description: "Project environment for grants or enqueue.", kind: "enum", values: ["local", "staging", "prod"] },
|
|
1482
|
+
{ name: "daily", flags: "--daily <credits>", description: "Daily credit limit for a created grant.", kind: "string" },
|
|
1483
|
+
{ name: "monthly", flags: "--monthly <credits>", description: "Monthly credit limit for a created grant.", kind: "string" },
|
|
1484
|
+
{ name: "json", flags: "--json", description: "Emit machine-readable JSON instead of human-readable text.", kind: "boolean" }
|
|
1485
|
+
],
|
|
1486
|
+
examples: [
|
|
1487
|
+
"treeseed capacity status --team team_123",
|
|
1488
|
+
"treeseed capacity providers connect --team team_123",
|
|
1489
|
+
"treeseed capacity providers keys reset --provider provider_123",
|
|
1490
|
+
"treeseed capacity grants create --team team_123 --provider provider_123 --daily 25",
|
|
1491
|
+
"treeseed capacity enqueue --project project_123 --task-kind proposal.draft"
|
|
1492
|
+
],
|
|
1493
|
+
help: {
|
|
1494
|
+
longSummary: ["Capacity talks to the market control plane so technical stewards can inspect helper credits, provider security codes, and budgeted agent task routing without opening the browser."],
|
|
1495
|
+
whenToUse: ["Use this after connecting to a market when provider health, budget allocation, or budgeted agent enqueue needs to be checked from a terminal."],
|
|
1496
|
+
beforeYouRun: ["Authenticate to the selected market and know the team, project, or provider id for the action you are taking."],
|
|
1497
|
+
automationNotes: ["Use `--json` when capturing provider keys, grant ids, task ids, or dashboard summaries in automation."]
|
|
1498
|
+
},
|
|
1499
|
+
helpVisible: true,
|
|
1500
|
+
helpFeatured: false,
|
|
1501
|
+
executionMode: "handler",
|
|
1502
|
+
handlerName: "capacity"
|
|
1503
|
+
},
|
|
1463
1504
|
{
|
|
1464
1505
|
id: "market.packs",
|
|
1465
1506
|
name: "packs",
|
package/dist/cli/registry.d.ts
CHANGED
|
@@ -28,6 +28,7 @@ export declare const COMMAND_HANDLERS: {
|
|
|
28
28
|
readonly market: import("./operations-types.js").TreeseedCommandHandler;
|
|
29
29
|
readonly teams: import("./operations-types.js").TreeseedCommandHandler;
|
|
30
30
|
readonly projects: import("./operations-types.js").TreeseedCommandHandler;
|
|
31
|
+
readonly capacity: import("./operations-types.js").TreeseedCommandHandler;
|
|
31
32
|
readonly packs: import("./operations-types.js").TreeseedCommandHandler;
|
|
32
33
|
readonly gh: import("./operations-types.js").TreeseedCommandHandler;
|
|
33
34
|
readonly railway: import("./operations-types.js").TreeseedCommandHandler;
|
package/dist/cli/registry.js
CHANGED
|
@@ -22,6 +22,7 @@ import { handleAuthWhoAmI } from "./handlers/auth-whoami.js";
|
|
|
22
22
|
import { handleMarket } from "./handlers/market.js";
|
|
23
23
|
import { handleTeams } from "./handlers/teams.js";
|
|
24
24
|
import { handleProjects } from "./handlers/projects.js";
|
|
25
|
+
import { handleCapacity } from "./handlers/capacity.js";
|
|
25
26
|
import { handlePacks } from "./handlers/packs.js";
|
|
26
27
|
import { handleToolWrapper } from "./handlers/tool-wrapper.js";
|
|
27
28
|
import {
|
|
@@ -73,6 +74,7 @@ const COMMAND_HANDLERS = {
|
|
|
73
74
|
market: handleMarket,
|
|
74
75
|
teams: handleTeams,
|
|
75
76
|
projects: handleProjects,
|
|
77
|
+
capacity: handleCapacity,
|
|
76
78
|
packs: handlePacks,
|
|
77
79
|
gh: handleToolWrapper,
|
|
78
80
|
railway: handleToolWrapper,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@treeseed/cli",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.9",
|
|
4
4
|
"description": "Operator-facing Treeseed CLI package.",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"repository": {
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"release:publish": "node ./scripts/run-ts.mjs ./scripts/publish-package.ts"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@treeseed/sdk": "0.8.
|
|
48
|
+
"@treeseed/sdk": "0.8.9",
|
|
49
49
|
"ink": "^7.0.0",
|
|
50
50
|
"react": "^19.2.5"
|
|
51
51
|
},
|