@lazehq/cli 0.1.33 → 0.1.34
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/laze.mjs +359 -22
- package/package.json +1 -1
package/dist/laze.mjs
CHANGED
|
@@ -35708,7 +35708,7 @@ function flagText({
|
|
|
35708
35708
|
}
|
|
35709
35709
|
|
|
35710
35710
|
// src/rules/cli-version.rules.ts
|
|
35711
|
-
var STAMPED = "0.1.
|
|
35711
|
+
var STAMPED = "0.1.34";
|
|
35712
35712
|
function cliVersionOf({ stamped = STAMPED } = {}) {
|
|
35713
35713
|
return stamped.startsWith("__") ? "dev" : stamped;
|
|
35714
35714
|
}
|
|
@@ -59189,6 +59189,18 @@ var saveDraftInputSchemaDefinition = external_exports.object({
|
|
|
59189
59189
|
var saveDraftInputSchema = saveDraftInputSchemaDefinition;
|
|
59190
59190
|
var draftSavedSchemaDefinition = external_exports.object({ saved: external_exports.boolean() });
|
|
59191
59191
|
var draftSavedSchema = draftSavedSchemaDefinition;
|
|
59192
|
+
var draftsParamsSchemaDefinition = external_exports.object({ workspaceId: workspaceIdSchema });
|
|
59193
|
+
var draftPlaceParamsSchemaDefinition = external_exports.object({
|
|
59194
|
+
workspaceId: workspaceIdSchema,
|
|
59195
|
+
channelId: idSchema4
|
|
59196
|
+
});
|
|
59197
|
+
var draftThreadQuerySchemaDefinition = external_exports.object({ threadRootId: idSchema4.optional() });
|
|
59198
|
+
var draftBodySchemaDefinition = saveDraftInputSchemaDefinition.pick({
|
|
59199
|
+
text: true,
|
|
59200
|
+
picks: true,
|
|
59201
|
+
files: true,
|
|
59202
|
+
savedAt: true
|
|
59203
|
+
});
|
|
59192
59204
|
var SIDEBAR_SECTIONS_MAX = 50;
|
|
59193
59205
|
var SIDEBAR_STARRED_MAX = 200;
|
|
59194
59206
|
var sidebarFilterSchemaDefinition = external_exports.enum(["active", "unreads", "mentions", "all"]);
|
|
@@ -60370,12 +60382,27 @@ var liveStepSchemaDefinition = external_exports.object({
|
|
|
60370
60382
|
steps: external_exports.number().int().nonnegative().optional()
|
|
60371
60383
|
});
|
|
60372
60384
|
var liveStepSchema = liveStepSchemaDefinition;
|
|
60385
|
+
var harnessModelSchemaDefinition = external_exports.object({
|
|
60386
|
+
/** What the harness's `--model` takes, such as `gpt-6-sol` or `opus`. */
|
|
60387
|
+
id: external_exports.string().min(1).max(200),
|
|
60388
|
+
name: external_exports.string().max(200),
|
|
60389
|
+
description: external_exports.string().max(500).default(""),
|
|
60390
|
+
/** The model's own window in tokens, when the harness says it. */
|
|
60391
|
+
contextWindow: external_exports.number().int().positive().nullable().default(null),
|
|
60392
|
+
/** The thinking levels the model takes, lowest first; empty when it takes none. */
|
|
60393
|
+
efforts: external_exports.array(external_exports.string().min(1).max(40)).max(20).default([]),
|
|
60394
|
+
defaultEffort: external_exports.string().max(40).nullable().default(null)
|
|
60395
|
+
});
|
|
60396
|
+
var harnessModelSchema = harnessModelSchemaDefinition;
|
|
60373
60397
|
var lazeAgentEventSchemaDefinition = external_exports.discriminatedUnion("type", [
|
|
60374
60398
|
external_exports.object({
|
|
60375
60399
|
type: external_exports.literal("harness_started"),
|
|
60376
60400
|
harness: harnessKindSchema,
|
|
60377
60401
|
resumed: external_exports.boolean(),
|
|
60378
|
-
sessionRef: external_exports.string().optional()
|
|
60402
|
+
sessionRef: external_exports.string().optional(),
|
|
60403
|
+
/** The model and thinking effort the session runs on, when the supervisor knows them. */
|
|
60404
|
+
model: external_exports.string().max(200).optional(),
|
|
60405
|
+
effort: external_exports.string().max(40).optional()
|
|
60379
60406
|
}),
|
|
60380
60407
|
external_exports.object({
|
|
60381
60408
|
type: external_exports.literal("turn_started"),
|
|
@@ -60463,6 +60490,17 @@ var lazeAgentEventSchemaDefinition = external_exports.discriminatedUnion("type",
|
|
|
60463
60490
|
message: external_exports.string(),
|
|
60464
60491
|
retryable: external_exports.boolean()
|
|
60465
60492
|
}),
|
|
60493
|
+
/** What the harness lists for its login, read as it starts: its default model first. */
|
|
60494
|
+
external_exports.object({
|
|
60495
|
+
type: external_exports.literal("harness_models"),
|
|
60496
|
+
models: external_exports.array(harnessModelSchemaDefinition).max(100),
|
|
60497
|
+
defaultModel: external_exports.string().max(200).nullable()
|
|
60498
|
+
}),
|
|
60499
|
+
/** The login no longer lists the agent's chosen model: the harness started on its default. */
|
|
60500
|
+
external_exports.object({
|
|
60501
|
+
type: external_exports.literal("model_gone"),
|
|
60502
|
+
model: external_exports.string().min(1).max(200)
|
|
60503
|
+
}),
|
|
60466
60504
|
external_exports.object({ type: external_exports.literal("idle_stopping"), idleMs: external_exports.number().int().nonnegative() }),
|
|
60467
60505
|
/** A running turn has said nothing, with no tool running, for `silentMs`. */
|
|
60468
60506
|
external_exports.object({ type: external_exports.literal("stalled"), silentMs: external_exports.number().int().nonnegative() }),
|
|
@@ -60552,6 +60590,8 @@ var agentSandboxSpecSchemaDefinition = external_exports.object({
|
|
|
60552
60590
|
harness: harnessKindSchema,
|
|
60553
60591
|
/** Claude Code or Codex model name. */
|
|
60554
60592
|
model: external_exports.string().min(1).optional(),
|
|
60593
|
+
/** The thinking effort the harness runs at, such as `high`; absent for the model's default. */
|
|
60594
|
+
effort: external_exports.string().min(1).max(40).optional(),
|
|
60555
60595
|
/** Claude Code on a Laze model: the gateway through the relay connection, and its models. */
|
|
60556
60596
|
claudeGateway: external_exports.object({ connectionId: external_exports.string().min(1), models: claudeGatewayModelsSchema }).optional(),
|
|
60557
60597
|
/** The harness model's context window, when Laze knows it: compaction is set against it. */
|
|
@@ -60739,6 +60779,8 @@ var supervisorLaunchSchemaDefinition = external_exports.object({
|
|
|
60739
60779
|
marginTokens: external_exports.number().int().nonnegative()
|
|
60740
60780
|
}),
|
|
60741
60781
|
model: external_exports.string().optional(),
|
|
60782
|
+
/** The thinking effort the harness runs at; absent for the model's default. */
|
|
60783
|
+
effort: external_exports.string().optional(),
|
|
60742
60784
|
/** The harness model's context window, when Laze knows it: compaction is set against it. */
|
|
60743
60785
|
contextWindow: external_exports.number().int().positive().optional(),
|
|
60744
60786
|
/** Claude Code on a Laze model: the relay as its API, a placeholder as its token. */
|
|
@@ -64019,6 +64061,79 @@ var harnessSignInPollSchemaDefinition = external_exports.discriminatedUnion("sta
|
|
|
64019
64061
|
]);
|
|
64020
64062
|
var harnessSignInPollSchema = harnessSignInPollSchemaDefinition;
|
|
64021
64063
|
|
|
64064
|
+
// ../../modules/agent/contract/src/agent-run-config.ts
|
|
64065
|
+
var harnessModelsSchemaDefinition = external_exports.object({
|
|
64066
|
+
models: external_exports.array(harnessModelSchema).max(100),
|
|
64067
|
+
/** The model the harness runs when Laze names none; null when it did not say. */
|
|
64068
|
+
defaultModel: external_exports.string().max(200).nullable(),
|
|
64069
|
+
readAt: external_exports.iso.datetime()
|
|
64070
|
+
});
|
|
64071
|
+
var harnessModelsSchema = harnessModelsSchemaDefinition;
|
|
64072
|
+
var runModelInputSchema = external_exports.string().trim().min(1).max(200).nullable();
|
|
64073
|
+
var runEffortInputSchema = external_exports.string().trim().min(1).max(40).regex(/^[a-z]+$/).nullable();
|
|
64074
|
+
var EFFORT_LABELS = {
|
|
64075
|
+
minimal: "Minimal",
|
|
64076
|
+
low: "Low",
|
|
64077
|
+
medium: "Medium",
|
|
64078
|
+
high: "High",
|
|
64079
|
+
xhigh: "Extra high",
|
|
64080
|
+
max: "Max",
|
|
64081
|
+
ultra: "Ultra"
|
|
64082
|
+
};
|
|
64083
|
+
function effortLabelOf({ effort }) {
|
|
64084
|
+
return EFFORT_LABELS[effort] ?? `${effort.charAt(0).toUpperCase()}${effort.slice(1)}`;
|
|
64085
|
+
}
|
|
64086
|
+
function tokensLabelOf({ tokens }) {
|
|
64087
|
+
if (tokens >= 1e6) return `${Math.round(tokens / 1e5) / 10}M`;
|
|
64088
|
+
return `${Math.round(tokens / 1e3)}k`;
|
|
64089
|
+
}
|
|
64090
|
+
function pickRunningModel({ agent: agent2 }) {
|
|
64091
|
+
if (agent2.harness === "laze-models") return null;
|
|
64092
|
+
const listed = agent2.harnessModels?.models ?? [];
|
|
64093
|
+
const wanted = agent2.model ?? agent2.harnessModels?.defaultModel ?? null;
|
|
64094
|
+
return listed.find((one) => one.id === wanted) ?? (agent2.model ? null : listed[0] ?? null);
|
|
64095
|
+
}
|
|
64096
|
+
function contextCapOf({ agent: agent2 }) {
|
|
64097
|
+
if (agent2.harness === "laze-models") return { tokens: AGENT_CONTEXT_WINDOW.max, known: true };
|
|
64098
|
+
const window2 = pickRunningModel({ agent: agent2 })?.contextWindow ?? null;
|
|
64099
|
+
return window2 ? { tokens: window2, known: true } : { tokens: AGENT_CONTEXT_WINDOW.max, known: false };
|
|
64100
|
+
}
|
|
64101
|
+
var LEVEL_NAMES = { fast: "Laze Fast", frontier: "Laze Frontier" };
|
|
64102
|
+
function modelLineOf({ agent: agent2 }) {
|
|
64103
|
+
if (agent2.harness === "laze-models") return LEVEL_NAMES[agent2.modelLevel ?? "fast"];
|
|
64104
|
+
const running = pickRunningModel({ agent: agent2 });
|
|
64105
|
+
if (agent2.model) return running?.name || agent2.model;
|
|
64106
|
+
return running ? `Default (${running.name || running.id})` : "Default";
|
|
64107
|
+
}
|
|
64108
|
+
function describeEffort({ agent: agent2 }) {
|
|
64109
|
+
const running = pickRunningModel({ agent: agent2 });
|
|
64110
|
+
if (agent2.effort) return effortLabelOf({ effort: agent2.effort });
|
|
64111
|
+
if (running && running.efforts.length === 0) return null;
|
|
64112
|
+
const fallback = running?.defaultEffort;
|
|
64113
|
+
return fallback ? `Default (${effortLabelOf({ effort: fallback })})` : "Default";
|
|
64114
|
+
}
|
|
64115
|
+
function contextLineOf({ agent: agent2 }) {
|
|
64116
|
+
const cap = contextCapOf({ agent: agent2 });
|
|
64117
|
+
if (agent2.harness === "laze-models") {
|
|
64118
|
+
const tokens = agent2.contextWindow ?? AGENT_CONTEXT_WINDOW.default;
|
|
64119
|
+
return `${tokensLabelOf({ tokens })}, up to ${tokensLabelOf({ tokens: cap.tokens })}`;
|
|
64120
|
+
}
|
|
64121
|
+
if (!cap.known) {
|
|
64122
|
+
return agent2.contextWindow ? `${tokensLabelOf({ tokens: agent2.contextWindow })}, or the model's window if smaller` : "The model's own window";
|
|
64123
|
+
}
|
|
64124
|
+
const set2 = agent2.contextWindow ? Math.min(agent2.contextWindow, cap.tokens) : null;
|
|
64125
|
+
if (!set2 || set2 === cap.tokens)
|
|
64126
|
+
return `${tokensLabelOf({ tokens: cap.tokens })}, the most this model takes`;
|
|
64127
|
+
return `${tokensLabelOf({ tokens: set2 })} of the ${tokensLabelOf({ tokens: cap.tokens })} this model takes`;
|
|
64128
|
+
}
|
|
64129
|
+
function agentRunSummaryOf({ agent: agent2 }) {
|
|
64130
|
+
return {
|
|
64131
|
+
model: modelLineOf({ agent: agent2 }),
|
|
64132
|
+
effort: describeEffort({ agent: agent2 }),
|
|
64133
|
+
context: contextLineOf({ agent: agent2 })
|
|
64134
|
+
};
|
|
64135
|
+
}
|
|
64136
|
+
|
|
64022
64137
|
// ../../modules/agent/contract/src/agent-manage.ts
|
|
64023
64138
|
var hostedHarnessSchema = external_exports.enum(["laze-models", "claude-code", "codex"]);
|
|
64024
64139
|
var nameSchema = external_exports.string().trim().min(1).max(80);
|
|
@@ -64048,8 +64163,12 @@ var updateAgentAsCallerInputSchemaDefinition = external_exports.object({
|
|
|
64048
64163
|
name: nameSchema.optional(),
|
|
64049
64164
|
description: descriptionSchema.optional(),
|
|
64050
64165
|
avatar: agentAvatarInputSchema.optional(),
|
|
64051
|
-
/** The context
|
|
64052
|
-
contextWindow: contextWindowInputSchema.optional(),
|
|
64166
|
+
/** The max context of an agent Laze runs, in tokens, 100k to 1M; null for its default. */
|
|
64167
|
+
contextWindow: contextWindowInputSchema.nullable().optional(),
|
|
64168
|
+
/** The model its login lists, or null for the harness's default. */
|
|
64169
|
+
model: runModelInputSchema.optional(),
|
|
64170
|
+
/** The thinking level its model lists, or null for the model's default. */
|
|
64171
|
+
effort: runEffortInputSchema.optional(),
|
|
64053
64172
|
/** Pauses or resumes an agent Laze runs. */
|
|
64054
64173
|
paused: external_exports.boolean().optional(),
|
|
64055
64174
|
pauseReason: external_exports.string().trim().max(200).optional()
|
|
@@ -64278,8 +64397,14 @@ var agentSchemaDefinition = external_exports.object({
|
|
|
64278
64397
|
/** A Laze agent's SOUL.md. */
|
|
64279
64398
|
instructions: external_exports.string().default(""),
|
|
64280
64399
|
modelLevel: agentModelLevelSchema.nullable().default(null),
|
|
64281
|
-
/** The context
|
|
64400
|
+
/** The max context of an agent Laze runs, in tokens; null for its default or a connected one. */
|
|
64282
64401
|
contextWindow: external_exports.number().int().positive().nullable().default(null),
|
|
64402
|
+
/** The model a Claude Code or Codex agent runs; null for its harness's default. */
|
|
64403
|
+
model: external_exports.string().nullable().default(null),
|
|
64404
|
+
/** The thinking effort it runs at; null for its model's default. */
|
|
64405
|
+
effort: external_exports.string().nullable().default(null),
|
|
64406
|
+
/** The models its harness listed for its login when it last started; null before then. */
|
|
64407
|
+
harnessModels: harnessModelsSchema.nullable().default(null),
|
|
64283
64408
|
/** The GitHub identity a Laze agent works as; null when it has none. */
|
|
64284
64409
|
github: agentGithubSchema.nullable().default(null),
|
|
64285
64410
|
/** Out of usage (its login or its Laze models budget) until this time; null when it can work. */
|
|
@@ -64336,8 +64461,12 @@ var updateAgentInputSchemaDefinition = external_exports.object({
|
|
|
64336
64461
|
name: agentNameSchema.optional(),
|
|
64337
64462
|
avatar: agentAvatarInputSchema.optional(),
|
|
64338
64463
|
modelLevel: agentModelLevelSchema.optional(),
|
|
64339
|
-
/** Agents Laze runs only; a connected agent refuses it. */
|
|
64340
|
-
contextWindow: contextWindowInputSchema.optional(),
|
|
64464
|
+
/** Agents Laze runs only; a connected agent refuses it. Null puts back the default. */
|
|
64465
|
+
contextWindow: contextWindowInputSchema.nullable().optional(),
|
|
64466
|
+
/** A model its login lists, or null for the harness's default; Claude Code and Codex only. */
|
|
64467
|
+
model: runModelInputSchema.optional(),
|
|
64468
|
+
/** A thinking level its model lists, or null for the model's default. */
|
|
64469
|
+
effort: runEffortInputSchema.optional(),
|
|
64341
64470
|
instructions: instructionsSchema.optional(),
|
|
64342
64471
|
/** The whole set: channels left out are left. */
|
|
64343
64472
|
channelIds: external_exports.array(idSchema14).max(50).optional(),
|
|
@@ -64718,8 +64847,6 @@ var agentConfig = Config.define((c) => ({
|
|
|
64718
64847
|
"AGENT_CLAUDE_GATEWAY_THINKING",
|
|
64719
64848
|
external_exports.enum(["on", "off"]).default("on")
|
|
64720
64849
|
),
|
|
64721
|
-
/** The Codex model's window, which caps a Codex agent's context window setting. */
|
|
64722
|
-
codexContextWindow: c.env("AGENT_CODEX_CONTEXT", positiveInt3.default(4e5)),
|
|
64723
64850
|
/** A harness prompt or question no one answers is denied or dismissed after this long. */
|
|
64724
64851
|
attentionTimeoutMinutes: c.env("AGENT_ATTENTION_TIMEOUT_MINUTES", positiveInt3.default(30)),
|
|
64725
64852
|
/** Where a GitHub signature links back; the origin the connect command fetches the CLI from. */
|
|
@@ -65357,6 +65484,11 @@ var requestConnectionInputSchemaDefinition = external_exports.object({
|
|
|
65357
65484
|
name: external_exports.string().trim().max(80).optional()
|
|
65358
65485
|
});
|
|
65359
65486
|
|
|
65487
|
+
// ../../modules/agent/contract/src/agent-profile.ui.ts
|
|
65488
|
+
var agentProfileUi = uiTokens("agent");
|
|
65489
|
+
var AgentProfileSlot = agentProfileUi.component("profile");
|
|
65490
|
+
var AgentOwnedListSlot = agentProfileUi.component("ownedList");
|
|
65491
|
+
|
|
65360
65492
|
// src/services/laze-client.service.ts
|
|
65361
65493
|
var CLI_VERSION_HEADER = "x-laze-cli-version";
|
|
65362
65494
|
var LazeApiError = class extends Error {
|
|
@@ -65727,6 +65859,7 @@ function agentProfileOf({
|
|
|
65727
65859
|
baseUrl
|
|
65728
65860
|
}) {
|
|
65729
65861
|
const owner = ownerName || "its owner";
|
|
65862
|
+
const run4 = agent2.hosting === "laze" ? agentRunSummaryOf({ agent: agent2 }) : null;
|
|
65730
65863
|
return {
|
|
65731
65864
|
id: agent2.id,
|
|
65732
65865
|
name: agent2.name,
|
|
@@ -65735,6 +65868,9 @@ function agentProfileOf({
|
|
|
65735
65868
|
intelligence: intelligenceOf({ agent: agent2, owner }),
|
|
65736
65869
|
status: statusOf({ agent: agent2 }),
|
|
65737
65870
|
login: loginOf({ agent: agent2 }),
|
|
65871
|
+
model: run4?.model ?? null,
|
|
65872
|
+
effort: run4?.effort ?? null,
|
|
65873
|
+
maxContext: run4?.context ?? null,
|
|
65738
65874
|
createdAt: agent2.createdAt.slice(0, 10),
|
|
65739
65875
|
channels: agent2.channels.filter((channel) => channel.kind === "public" || channel.kind === "private").map((channel) => `#${channel.name}`),
|
|
65740
65876
|
link: `${baseUrl.replace(/\/$/, "")}/workspaces/${agent2.workspaceId}/agents`
|
|
@@ -65747,6 +65883,9 @@ function formatAgentProfile({ profile }) {
|
|
|
65747
65883
|
["Intelligence", profile.intelligence],
|
|
65748
65884
|
["Status", profile.status],
|
|
65749
65885
|
["Login", profile.login],
|
|
65886
|
+
["Model", profile.model],
|
|
65887
|
+
["Thinking effort", profile.effort],
|
|
65888
|
+
["Max context", profile.maxContext],
|
|
65750
65889
|
["Created", profile.createdAt],
|
|
65751
65890
|
["Channels", profile.channels.length > 0 ? profile.channels.join(", ") : "none"],
|
|
65752
65891
|
["Profile", profile.link]
|
|
@@ -66015,7 +66154,7 @@ var slackBookmarksSchema = slackBookmarksSchemaDefinition;
|
|
|
66015
66154
|
// ../../modules/slack/contract/src/slack-direct.ts
|
|
66016
66155
|
var slackPeopleInputSchemaDefinition = external_exports.object({
|
|
66017
66156
|
workspaceId: external_exports.string().min(1),
|
|
66018
|
-
/** Part of a name; empty lists the first people. */
|
|
66157
|
+
/** Part of a Slack name, full name or email; empty lists the first people. */
|
|
66019
66158
|
query: external_exports.string().trim().max(80).default("")
|
|
66020
66159
|
});
|
|
66021
66160
|
var slackPeopleInputSchema = slackPeopleInputSchemaDefinition;
|
|
@@ -66024,6 +66163,10 @@ var slackPersonSchemaDefinition = external_exports.object({
|
|
|
66024
66163
|
teamName: external_exports.string(),
|
|
66025
66164
|
slackUserId: external_exports.string(),
|
|
66026
66165
|
name: external_exports.string(),
|
|
66166
|
+
/** Their full name in Slack, empty when it is the same as `name` or Slack gave none. */
|
|
66167
|
+
realName: external_exports.string().default(""),
|
|
66168
|
+
/** Their Slack profile email; null when Slack does not share it. */
|
|
66169
|
+
email: external_exports.string().nullable().default(null),
|
|
66027
66170
|
avatarUrl: external_exports.string().nullable()
|
|
66028
66171
|
});
|
|
66029
66172
|
var slackPeopleSchemaDefinition = external_exports.object({ people: external_exports.array(slackPersonSchemaDefinition) });
|
|
@@ -69831,6 +69974,9 @@ are waiting, if you think one was missed.
|
|
|
69831
69974
|
- \`laze history <channel>\` and \`laze thread <id>\` read a conversation.
|
|
69832
69975
|
- \`laze search "words"\` searches messages.
|
|
69833
69976
|
- \`laze channels list\` lists the conversations you are in.
|
|
69977
|
+
- \`laze channel info <channel>\` shows its members and the apps pinned there. Read a pinned app
|
|
69978
|
+
with \`laze app pull --app <app>\` (its files: page, plan, code) and
|
|
69979
|
+
\`laze app records list <collection> --app <app>\` (its data).
|
|
69834
69980
|
|
|
69835
69981
|
If \`laze\` is not on the PATH, run the same commands through \`npx -y @lazehq/cli@latest\`.
|
|
69836
69982
|
Never print or repeat your Laze key.
|
|
@@ -70652,7 +70798,7 @@ function formatLoginActivity({ activity: activity2 }) {
|
|
|
70652
70798
|
|
|
70653
70799
|
// src/services/agent-manage-commands.service.ts
|
|
70654
70800
|
var CREATE_USAGE = "Usage: laze agent create --name <name> [--description <text>] [--harness laze-models|claude-code|codex] [--team] [--pool <pool>] [--avatar <file>]";
|
|
70655
|
-
var UPDATE_USAGE = "Usage: laze agent update <agent> [--name <name>] [--description <text>] [--avatar <file>] [--context
|
|
70801
|
+
var UPDATE_USAGE = "Usage: laze agent update <agent> [--name <name>] [--description <text>] [--avatar <file>] [--model <model>|default] [--effort <level>|default] [--max-context <tokens, such as 200k>|default]";
|
|
70656
70802
|
var ARCHIVE_USAGE = "Usage: laze agent archive <agent>";
|
|
70657
70803
|
var PAUSE_USAGE = 'Usage: laze agent pause <agent> [--reason "<why>"] | laze agent resume <agent>';
|
|
70658
70804
|
var TRANSFER_USAGE = "Usage: laze agent transfer <agent> <member: user id, email or name>";
|
|
@@ -70685,13 +70831,40 @@ async function avatarOf({
|
|
|
70685
70831
|
return uploaded.avatar;
|
|
70686
70832
|
}
|
|
70687
70833
|
function contextWindowOf2({ args }) {
|
|
70688
|
-
const value = args.flags["context-window"];
|
|
70834
|
+
const value = args.flags["max-context"] ?? args.flags["context-window"];
|
|
70689
70835
|
if (value === void 0) return void 0;
|
|
70836
|
+
if (value === "default") return null;
|
|
70690
70837
|
const match = typeof value === "string" ? /^(\d+(?:\.\d+)?)([kKmM]?)$/.exec(value.trim()) : null;
|
|
70691
70838
|
if (!match) throw new CliUsageError(UPDATE_USAGE);
|
|
70692
70839
|
const unit = { k: 1e3, m: 1e6 }[match[2]?.toLowerCase() ?? ""] ?? 1;
|
|
70693
70840
|
return Math.round(Number(match[1]) * unit);
|
|
70694
70841
|
}
|
|
70842
|
+
function runFlagOf({ args, name: name2 }) {
|
|
70843
|
+
const value = args.flags[name2];
|
|
70844
|
+
if (value === void 0) return void 0;
|
|
70845
|
+
if (typeof value !== "string" || !value.trim()) throw new CliUsageError(UPDATE_USAGE);
|
|
70846
|
+
return value.trim() === "default" ? null : value.trim();
|
|
70847
|
+
}
|
|
70848
|
+
function runChangesOf({ args }) {
|
|
70849
|
+
const contextWindow = contextWindowOf2({ args });
|
|
70850
|
+
const model = runFlagOf({ args, name: "model" });
|
|
70851
|
+
const effort = runFlagOf({ args, name: "effort" });
|
|
70852
|
+
return {
|
|
70853
|
+
...contextWindow !== void 0 && { contextWindow },
|
|
70854
|
+
...model !== void 0 && { model },
|
|
70855
|
+
...effort !== void 0 && { effort }
|
|
70856
|
+
};
|
|
70857
|
+
}
|
|
70858
|
+
function runLinesOf({ agent: agent2 }) {
|
|
70859
|
+
if (agent2.hosting !== "laze") return [];
|
|
70860
|
+
const summary = agentRunSummaryOf({ agent: agent2 });
|
|
70861
|
+
return [
|
|
70862
|
+
`Model: ${summary.model}.`,
|
|
70863
|
+
...summary.effort ? [`Thinking effort: ${summary.effort}.`] : [],
|
|
70864
|
+
`Max context: ${summary.context}.`,
|
|
70865
|
+
"It takes effect on its next turn."
|
|
70866
|
+
];
|
|
70867
|
+
}
|
|
70695
70868
|
function descriptionOf({ args }) {
|
|
70696
70869
|
const value = args.flags.description;
|
|
70697
70870
|
return typeof value === "string" ? value : void 0;
|
|
@@ -70773,9 +70946,9 @@ async function updateAgent({
|
|
|
70773
70946
|
const agent2 = args.words[2];
|
|
70774
70947
|
const name2 = flagText({ args, name: "name" }).trim();
|
|
70775
70948
|
const description = descriptionOf({ args });
|
|
70776
|
-
const
|
|
70949
|
+
const run4 = runChangesOf({ args });
|
|
70777
70950
|
const nothing = !name2 && description === void 0 && !args.flags.avatar;
|
|
70778
|
-
if (!agent2 || nothing &&
|
|
70951
|
+
if (!agent2 || nothing && Object.keys(run4).length === 0) throw new CliUsageError(UPDATE_USAGE);
|
|
70779
70952
|
const { client } = await signedIn({ context, args });
|
|
70780
70953
|
const avatar = await avatarOf({ context, args, client });
|
|
70781
70954
|
const updated = await client.post("/api/agents/update", {
|
|
@@ -70783,14 +70956,14 @@ async function updateAgent({
|
|
|
70783
70956
|
...name2 && { name: name2 },
|
|
70784
70957
|
...description !== void 0 && { description },
|
|
70785
70958
|
...avatar !== void 0 && { avatar },
|
|
70786
|
-
...
|
|
70959
|
+
...run4
|
|
70787
70960
|
});
|
|
70788
70961
|
if (args.flags.json) return context.out(`${JSON.stringify(updated, null, 2)}
|
|
70789
70962
|
`);
|
|
70790
70963
|
context.out(
|
|
70791
70964
|
[
|
|
70792
70965
|
`Updated ${updated.name}.`,
|
|
70793
|
-
...
|
|
70966
|
+
...runLinesOf({ agent: updated }),
|
|
70794
70967
|
...mentionLinesOf({ agentId: updated.id, name: updated.name }),
|
|
70795
70968
|
""
|
|
70796
70969
|
].join("\n")
|
|
@@ -71783,6 +71956,13 @@ var appPreviewSchemaDefinition = external_exports.object({
|
|
|
71783
71956
|
/** The site's own origin; opening it signs the person in through Laze. */
|
|
71784
71957
|
url: external_exports.string()
|
|
71785
71958
|
});
|
|
71959
|
+
var appPullSchemaDefinition = external_exports.object({
|
|
71960
|
+
app: external_exports.object({ id: external_exports.string(), name: external_exports.string(), slug: external_exports.string() }),
|
|
71961
|
+
site: appSiteSchema,
|
|
71962
|
+
version: appVersionIdSchema,
|
|
71963
|
+
files: external_exports.array(appFileSchema),
|
|
71964
|
+
collections: external_exports.array(collectionSchema)
|
|
71965
|
+
});
|
|
71786
71966
|
var exportRecordsInputSchemaDefinition = external_exports.object({
|
|
71787
71967
|
...siteRefSchemaDefinition.shape,
|
|
71788
71968
|
collection: collectionNameSchema,
|
|
@@ -72031,6 +72211,27 @@ var appAccessRequestSchemaDefinition = external_exports.object({
|
|
|
72031
72211
|
decidedAt: external_exports.iso.datetime().nullable()
|
|
72032
72212
|
});
|
|
72033
72213
|
var appAccessRequestSchema = appAccessRequestSchemaDefinition;
|
|
72214
|
+
var appMemberSourceSchemaDefinition = external_exports.object({
|
|
72215
|
+
kind: external_exports.enum(["owner", "admin", "direct", "channel", "workspace", "agent-owner"]),
|
|
72216
|
+
/** The channel, for `channel`: a pin there, a share with it, or the app's own channel. */
|
|
72217
|
+
channelId: external_exports.string().nullable(),
|
|
72218
|
+
channelName: external_exports.string().nullable(),
|
|
72219
|
+
/** The person an agent holds the app through, for `agent-owner`. */
|
|
72220
|
+
ownerName: external_exports.string().nullable()
|
|
72221
|
+
});
|
|
72222
|
+
var appMemberSchemaDefinition = external_exports.object({
|
|
72223
|
+
member: external_exports.object({ type: external_exports.enum(["user", "agent"]), id: external_exports.string().min(1) }),
|
|
72224
|
+
name: external_exports.string(),
|
|
72225
|
+
role: appRoleSchema,
|
|
72226
|
+
sources: external_exports.array(appMemberSourceSchemaDefinition).min(1),
|
|
72227
|
+
/** Whether a Builder can take this access away here: only a direct share is removable. */
|
|
72228
|
+
removable: external_exports.boolean()
|
|
72229
|
+
});
|
|
72230
|
+
var appMembersSchemaDefinition = external_exports.object({
|
|
72231
|
+
appId: external_exports.string().min(1),
|
|
72232
|
+
members: external_exports.array(appMemberSchemaDefinition)
|
|
72233
|
+
});
|
|
72234
|
+
var appMembersSchema = appMembersSchemaDefinition;
|
|
72034
72235
|
var appAccessSchemaDefinition = external_exports.object({
|
|
72035
72236
|
appId: external_exports.string().min(1),
|
|
72036
72237
|
visibility: appVisibilitySchema,
|
|
@@ -72510,7 +72711,7 @@ var appBackupCheckAlertsSchemaDefinition = external_exports.object({
|
|
|
72510
72711
|
});
|
|
72511
72712
|
|
|
72512
72713
|
// ../../modules/app/contract/src/app.trpc.ts
|
|
72513
|
-
var appMainTrpc = defineTrpcContract("app").query("list").withInput(listAppsInputSchema).withOutput(external_exports.array(appSchema)).query("get").withInput(appRefSchema).withOutput(appSchema).mutation("create").withInput(createAppInputSchema).withOutput(appSchema).mutation("rename").withInput(renameAppInputSchema).withOutput(appSchema).mutation("archive").withInput(appRefSchema).withOutput(appSchema).mutation("unarchive").withInput(appRefSchema).withOutput(appSchema).mutation("delete").withInput(deleteAppInputSchema).withOutput(external_exports.object({ deleted: external_exports.literal(true) })).query("versions").withInput(appRefSchema).withOutput(external_exports.array(appVersionSchema)).mutation("revert").withInput(revertInputSchema).withOutput(appVersionSchema).mutation("publish").withInput(publishInputSchema).withOutput(publishOutcomeSchema).query("collections").withInput(siteRefSchema).withOutput(external_exports.array(collectionSchema)).query("records").withInput(listRecordsInputSchema).withOutput(recordPageSchema).mutation("writeRecord").withInput(writeRecordInputSchema).withOutput(appRecordSchema).mutation("deleteRecord").withInput(deleteRecordInputSchema).withOutput(external_exports.object({ deleted: external_exports.literal(true) })).query("views").withInput(siteRefSchema).withOutput(external_exports.array(appViewSchema)).mutation("saveView").withInput(saveViewInputSchema).withOutput(appViewSchema).mutation("deleteView").withInput(deleteViewInputSchema).withOutput(external_exports.object({ deleted: external_exports.literal(true) })).mutation("chooseCardRows").withInput(chooseCardRowsInputSchema).withOutput(appCardChoiceSchema).query("exportRecords").withInput(exportRecordsInputSchema).withOutput(recordExportSchema).mutation("importRecords").withInput(importRecordsInputSchema).withOutput(recordImportSchema).mutation("decidePublish").withInput(decidePublishInputSchema).withOutput(publishOutcomeSchema).mutation("nameVersion").withInput(nameVersionInputSchema).withOutput(appVersionSchema).mutation("makeInternal").withInput(appRefSchema).withOutput(appSchema).mutation("revokePublishLease").withInput(appRefSchema).withOutput(appSchema).mutation("signInHandoff").withInput(signInHandoffInputSchema).withOutput(signInHandoffSchema).query("functionLogs").withInput(listFunctionLogsInputSchema).withOutput(external_exports.array(appFunctionLogEntrySchema)).query("functionSettings").withInput(appWorkspaceRefSchema).withOutput(appFunctionSettingsSchema).query("access").withInput(appRefSchema).withOutput(appAccessSchema).mutation("grantAccess").withInput(grantAppAccessInputSchema).withOutput(appAccessSchema).mutation("revokeAccess").withInput(revokeAppAccessInputSchema).withOutput(appAccessSchema).mutation("setVisibility").withInput(setAppVisibilityInputSchema).withOutput(visibilityOutcomeSchema).mutation("setMemberRole").withInput(setMemberRoleInputSchema).withOutput(appAccessSchema).mutation("unpublish").withInput(appRefSchema).withOutput(appSchema).query("door").withInput(appRefSchema).withOutput(appDoorSchema).mutation("requestAccess").withInput(appRefSchema).withOutput(appDoorSchema).mutation("decideAccess").withInput(decideAppAccessInputSchema).withOutput(appAccessRequestSchema).query("users").withInput(appRefSchema).withOutput(appUsersSchema).mutation("blockUser").withInput(blockAppUserInputSchema).withOutput(appUsersSchema).mutation("deleteUser").withInput(deleteAppUserInputSchema).withOutput(deletedAppUserSchema).mutation("setFunctionsEnabled").withInput(setFunctionsEnabledInputSchema).withOutput(appFunctionSettingsSchema).query("backups").withInput(appRefSchema).withOutput(appBackupStatusSchema).mutation("restoreData").withInput(restoreAppDataInputSchema).withOutput(appRestoreSchema).query("cost").withInput(appRefSchema).withOutput(appCostSchema).mutation("setBudget").withInput(setAppBudgetInputSchema).withOutput(appCostSchema).query("triggers").withInput(appRefSchema).withOutput(appTriggersSchema).mutation("setTriggerPaused").withInput(setAppTriggerPausedInputSchema).withOutput(appTriggerSchema).mutation("removeTrigger").withInput(appTriggerRefSchema).withOutput(external_exports.object({ removed: external_exports.literal(true) })).build();
|
|
72714
|
+
var appMainTrpc = defineTrpcContract("app").query("list").withInput(listAppsInputSchema).withOutput(external_exports.array(appSchema)).query("get").withInput(appRefSchema).withOutput(appSchema).mutation("create").withInput(createAppInputSchema).withOutput(appSchema).mutation("rename").withInput(renameAppInputSchema).withOutput(appSchema).mutation("archive").withInput(appRefSchema).withOutput(appSchema).mutation("unarchive").withInput(appRefSchema).withOutput(appSchema).mutation("delete").withInput(deleteAppInputSchema).withOutput(external_exports.object({ deleted: external_exports.literal(true) })).query("versions").withInput(appRefSchema).withOutput(external_exports.array(appVersionSchema)).mutation("revert").withInput(revertInputSchema).withOutput(appVersionSchema).mutation("publish").withInput(publishInputSchema).withOutput(publishOutcomeSchema).query("collections").withInput(siteRefSchema).withOutput(external_exports.array(collectionSchema)).query("records").withInput(listRecordsInputSchema).withOutput(recordPageSchema).mutation("writeRecord").withInput(writeRecordInputSchema).withOutput(appRecordSchema).mutation("deleteRecord").withInput(deleteRecordInputSchema).withOutput(external_exports.object({ deleted: external_exports.literal(true) })).query("views").withInput(siteRefSchema).withOutput(external_exports.array(appViewSchema)).mutation("saveView").withInput(saveViewInputSchema).withOutput(appViewSchema).mutation("deleteView").withInput(deleteViewInputSchema).withOutput(external_exports.object({ deleted: external_exports.literal(true) })).mutation("chooseCardRows").withInput(chooseCardRowsInputSchema).withOutput(appCardChoiceSchema).query("exportRecords").withInput(exportRecordsInputSchema).withOutput(recordExportSchema).mutation("importRecords").withInput(importRecordsInputSchema).withOutput(recordImportSchema).mutation("decidePublish").withInput(decidePublishInputSchema).withOutput(publishOutcomeSchema).mutation("nameVersion").withInput(nameVersionInputSchema).withOutput(appVersionSchema).mutation("makeInternal").withInput(appRefSchema).withOutput(appSchema).mutation("revokePublishLease").withInput(appRefSchema).withOutput(appSchema).mutation("signInHandoff").withInput(signInHandoffInputSchema).withOutput(signInHandoffSchema).query("functionLogs").withInput(listFunctionLogsInputSchema).withOutput(external_exports.array(appFunctionLogEntrySchema)).query("functionSettings").withInput(appWorkspaceRefSchema).withOutput(appFunctionSettingsSchema).query("access").withInput(appRefSchema).withOutput(appAccessSchema).query("members").withInput(appRefSchema).withOutput(appMembersSchema).mutation("grantAccess").withInput(grantAppAccessInputSchema).withOutput(appAccessSchema).mutation("revokeAccess").withInput(revokeAppAccessInputSchema).withOutput(appAccessSchema).mutation("setVisibility").withInput(setAppVisibilityInputSchema).withOutput(visibilityOutcomeSchema).mutation("setMemberRole").withInput(setMemberRoleInputSchema).withOutput(appAccessSchema).mutation("unpublish").withInput(appRefSchema).withOutput(appSchema).query("door").withInput(appRefSchema).withOutput(appDoorSchema).mutation("requestAccess").withInput(appRefSchema).withOutput(appDoorSchema).mutation("decideAccess").withInput(decideAppAccessInputSchema).withOutput(appAccessRequestSchema).query("users").withInput(appRefSchema).withOutput(appUsersSchema).mutation("blockUser").withInput(blockAppUserInputSchema).withOutput(appUsersSchema).mutation("deleteUser").withInput(deleteAppUserInputSchema).withOutput(deletedAppUserSchema).mutation("setFunctionsEnabled").withInput(setFunctionsEnabledInputSchema).withOutput(appFunctionSettingsSchema).query("backups").withInput(appRefSchema).withOutput(appBackupStatusSchema).mutation("restoreData").withInput(restoreAppDataInputSchema).withOutput(appRestoreSchema).query("cost").withInput(appRefSchema).withOutput(appCostSchema).mutation("setBudget").withInput(setAppBudgetInputSchema).withOutput(appCostSchema).query("triggers").withInput(appRefSchema).withOutput(appTriggersSchema).mutation("setTriggerPaused").withInput(setAppTriggerPausedInputSchema).withOutput(appTriggerSchema).mutation("removeTrigger").withInput(appTriggerRefSchema).withOutput(external_exports.object({ removed: external_exports.literal(true) })).build();
|
|
72514
72715
|
var appConnectionsTrpc = defineTrpcContract("app").query("connections").withInput(appRefSchema).withOutput(appConnectionsSchema).mutation("allowConnection").withInput(appConnectionRefSchema).withOutput(appConnectionsSchema).mutation("revokeConnection").withInput(appConnectionRefSchema).withOutput(appConnectionsSchema).build();
|
|
72515
72716
|
var appPinsTrpc = defineTrpcContract("app").query("pins").withInput(channelPinsInputSchema).withOutput(channelAppPinsSchema).mutation("pin").withInput(pinAppInputSchema).withOutput(channelAppPinsSchema).mutation("unpin").withInput(pinAppInputSchema).withOutput(channelAppPinsSchema).mutation("setPinView").withInput(setPinViewInputSchema).withOutput(channelAppPinsSchema).mutation("reorderPins").withInput(reorderPinsInputSchema).withOutput(channelAppPinsSchema).build();
|
|
72516
72717
|
var appTrpc = joinTrpcContracts("app", appMainTrpc, appConnectionsTrpc, appPinsTrpc);
|
|
@@ -72624,6 +72825,12 @@ var appCliCommands = [
|
|
|
72624
72825
|
arguments: ["--site draft|published"],
|
|
72625
72826
|
summary: "Print the address of the draft preview (or the published app)"
|
|
72626
72827
|
},
|
|
72828
|
+
{
|
|
72829
|
+
command: "laze app pull",
|
|
72830
|
+
operation: "pullFiles",
|
|
72831
|
+
arguments: ["[dir]", "--site published|draft"],
|
|
72832
|
+
summary: "Download the app's files and a laze.app.json into a folder (default ./<slug>), to read its page, plan or code; anyone who may open the app can pull it"
|
|
72833
|
+
},
|
|
72627
72834
|
{
|
|
72628
72835
|
command: "laze app publish",
|
|
72629
72836
|
operation: "requestPublish",
|
|
@@ -72642,6 +72849,12 @@ var appCliCommands = [
|
|
|
72642
72849
|
arguments: [],
|
|
72643
72850
|
summary: "Take the published address offline at once; the data stays"
|
|
72644
72851
|
},
|
|
72852
|
+
{
|
|
72853
|
+
command: "laze app members",
|
|
72854
|
+
operation: "listMembers",
|
|
72855
|
+
arguments: ["[app]"],
|
|
72856
|
+
summary: "Everyone who can open the app, people and agents, each with how: Owner, Shared directly, via #channel or the workspace"
|
|
72857
|
+
},
|
|
72645
72858
|
{
|
|
72646
72859
|
command: "laze app access",
|
|
72647
72860
|
operation: "getAccess",
|
|
@@ -73722,6 +73935,16 @@ function print3({
|
|
|
73722
73935
|
context.out(args.flags.json ? `${JSON.stringify(value, null, 2)}
|
|
73723
73936
|
` : text2);
|
|
73724
73937
|
}
|
|
73938
|
+
function readLineOf(pin) {
|
|
73939
|
+
if (pin.kind === "browser") return ` read it: laze browser read ${pin.appId}
|
|
73940
|
+
`;
|
|
73941
|
+
if (pin.role === null) {
|
|
73942
|
+
return ` you cannot open it: ask ${pin.pinnedByName ?? "whoever pinned it"} to give you access
|
|
73943
|
+
`;
|
|
73944
|
+
}
|
|
73945
|
+
return ` read it: laze app pull --app ${pin.appId} (its files), laze app records list <collection> --app ${pin.appId} (its data)
|
|
73946
|
+
`;
|
|
73947
|
+
}
|
|
73725
73948
|
function pinsText({ channel, listed }) {
|
|
73726
73949
|
if (listed.pins.length === 0) {
|
|
73727
73950
|
return `No apps are pinned to ${channel}. laze app pin --channel ${channel} pins one.
|
|
@@ -73729,7 +73952,7 @@ function pinsText({ channel, listed }) {
|
|
|
73729
73952
|
}
|
|
73730
73953
|
const lines = listed.pins.map(
|
|
73731
73954
|
(pin) => `${pin.name} ${pin.appId} pinned by ${pin.pinnedByName ?? pin.pinnedBy.id} ${pin.pinnedAt.slice(0, 10)}
|
|
73732
|
-
`
|
|
73955
|
+
` + readLineOf(pin)
|
|
73733
73956
|
);
|
|
73734
73957
|
return `Pinned to ${channel}:
|
|
73735
73958
|
${lines.join("")}`;
|
|
@@ -74211,6 +74434,80 @@ var appPreview = async ({ context, args }) => {
|
|
|
74211
74434
|
print5({ context, args, value: preview, text: `${preview.url}
|
|
74212
74435
|
` });
|
|
74213
74436
|
};
|
|
74437
|
+
async function folderClaim({
|
|
74438
|
+
folder,
|
|
74439
|
+
appId
|
|
74440
|
+
}) {
|
|
74441
|
+
const entries = await readdir6(folder).catch(() => []);
|
|
74442
|
+
if (entries.length === 0) return "empty";
|
|
74443
|
+
const manifest = await readManifest(folder).catch(() => void 0);
|
|
74444
|
+
if (!manifest) return "other-files";
|
|
74445
|
+
return manifest.app.id === appId ? "same" : "other-app";
|
|
74446
|
+
}
|
|
74447
|
+
var appPull = async ({ context, args }) => {
|
|
74448
|
+
const client = await appClient({ context, args });
|
|
74449
|
+
const word3 = args.words[2];
|
|
74450
|
+
const appId = await appIdOf({ client, args, folder: folderOf({ context, word: word3 }) });
|
|
74451
|
+
const site = siteOf(args, "published");
|
|
74452
|
+
let pulled;
|
|
74453
|
+
try {
|
|
74454
|
+
pulled = await client.post("/api/apps/pull", { appId, site });
|
|
74455
|
+
} catch (error62) {
|
|
74456
|
+
if (error62 instanceof LazeApiError && error62.code === "app_has_no_version") {
|
|
74457
|
+
throw new CliUsageError(
|
|
74458
|
+
"Nothing is published yet; `laze app pull --site draft` pulls the draft preview (app_has_no_version)"
|
|
74459
|
+
);
|
|
74460
|
+
}
|
|
74461
|
+
throw error62;
|
|
74462
|
+
}
|
|
74463
|
+
const folder = folderOf({
|
|
74464
|
+
context,
|
|
74465
|
+
word: word3 ?? (flagText({ args, name: "app" }) ? pulled.app.slug : void 0)
|
|
74466
|
+
});
|
|
74467
|
+
const claim3 = await folderClaim({ folder, appId: pulled.app.id });
|
|
74468
|
+
if (claim3 === "other-app") {
|
|
74469
|
+
throw new CliUsageError(
|
|
74470
|
+
`${folder} holds another app's ${APP_MANIFEST_FILE}; pull into an empty folder. Nothing was written.`
|
|
74471
|
+
);
|
|
74472
|
+
}
|
|
74473
|
+
if (claim3 === "other-files" && !args.flags.force) {
|
|
74474
|
+
throw new CliUsageError(
|
|
74475
|
+
`${folder} already holds files that are not this app's; pull into an empty folder, or pass --force. Nothing was written.`
|
|
74476
|
+
);
|
|
74477
|
+
}
|
|
74478
|
+
for (const file3 of pulled.files) {
|
|
74479
|
+
const target = join17(folder, ...file3.path.split("/"));
|
|
74480
|
+
await mkdir15(dirname15(target), { recursive: true });
|
|
74481
|
+
await writeFile16(
|
|
74482
|
+
target,
|
|
74483
|
+
file3.encoding === "base64" ? Buffer.from(file3.content, "base64") : file3.content
|
|
74484
|
+
);
|
|
74485
|
+
}
|
|
74486
|
+
const manifest = {
|
|
74487
|
+
app: pulled.app,
|
|
74488
|
+
collections: Object.fromEntries(
|
|
74489
|
+
pulled.collections.map((collection) => [
|
|
74490
|
+
collection.name,
|
|
74491
|
+
{
|
|
74492
|
+
fields: collection.schema.fields,
|
|
74493
|
+
...collection.schema.rules ? { rules: collection.schema.rules } : {}
|
|
74494
|
+
}
|
|
74495
|
+
])
|
|
74496
|
+
)
|
|
74497
|
+
};
|
|
74498
|
+
await writeFile16(join17(folder, APP_MANIFEST_FILE), `${JSON.stringify(manifest, null, 2)}
|
|
74499
|
+
`);
|
|
74500
|
+
const names = pulled.collections.map((collection) => collection.name);
|
|
74501
|
+
const where = relative3(context.cwd, folder) || ".";
|
|
74502
|
+
print5({
|
|
74503
|
+
context,
|
|
74504
|
+
args,
|
|
74505
|
+
value: { ...pulled, folder },
|
|
74506
|
+
text: `Pulled ${pulled.files.length} files of ${pulled.app.name} (${site} version ${pulled.version.slice(0, 7)}) into ${where}
|
|
74507
|
+
` + (names.length ? `Its data: laze app records list <${names.join("|")}> --app ${pulled.app.slug}
|
|
74508
|
+
` : "It keeps no records.\n")
|
|
74509
|
+
});
|
|
74510
|
+
};
|
|
74214
74511
|
var appPublish = async ({ context, args }) => {
|
|
74215
74512
|
const client = await appClient({ context, args });
|
|
74216
74513
|
const appId = await appIdOf({ client, args, folder: folderOf({ context, word: void 0 }) });
|
|
@@ -74661,6 +74958,40 @@ var ACCESS_ACTIONS = {
|
|
|
74661
74958
|
approve: ({ client, appId, first, second }) => decideAsk({ client, appId, requestId: first, decision: "granted", role: second }),
|
|
74662
74959
|
decline: ({ client, appId, first }) => decideAsk({ client, appId, requestId: first, decision: "declined", role: void 0 })
|
|
74663
74960
|
};
|
|
74961
|
+
function sourceText(source) {
|
|
74962
|
+
switch (source.kind) {
|
|
74963
|
+
case "owner":
|
|
74964
|
+
return "Owner";
|
|
74965
|
+
case "admin":
|
|
74966
|
+
return "Workspace admin";
|
|
74967
|
+
case "direct":
|
|
74968
|
+
return "Shared directly";
|
|
74969
|
+
case "channel":
|
|
74970
|
+
return `via #${source.channelName ?? source.channelId}`;
|
|
74971
|
+
case "workspace":
|
|
74972
|
+
return "Everyone in the workspace";
|
|
74973
|
+
case "agent-owner":
|
|
74974
|
+
return `through its owner ${source.ownerName ?? ""}`.trim();
|
|
74975
|
+
}
|
|
74976
|
+
}
|
|
74977
|
+
var appMembers = async ({ context, args }) => {
|
|
74978
|
+
const { client, appId, name: name2 } = await appOfWord({ context, args, word: args.words[2] });
|
|
74979
|
+
const listed = await client.post("/api/apps/members", { appId });
|
|
74980
|
+
const lines = listed.members.map(
|
|
74981
|
+
(member) => `${member.name} ${member.member.type === "user" ? "person" : "agent"} ${member.role} ${member.sources.map(sourceText).join(", ")}
|
|
74982
|
+
`
|
|
74983
|
+
);
|
|
74984
|
+
const viaChannel = listed.members.some(
|
|
74985
|
+
(member) => !member.removable && member.sources.some((source) => source.kind === "channel")
|
|
74986
|
+
);
|
|
74987
|
+
print5({
|
|
74988
|
+
context,
|
|
74989
|
+
args,
|
|
74990
|
+
value: listed,
|
|
74991
|
+
text: `${name2}: ${listed.members.length} with access
|
|
74992
|
+
${lines.join("")}` + (viaChannel ? "Access via a channel follows the channel: unpin the app there (laze app unpin --channel <c>) to take it away.\n" : "")
|
|
74993
|
+
});
|
|
74994
|
+
};
|
|
74664
74995
|
var appAccess = async ({ context, args }) => {
|
|
74665
74996
|
const client = await appClient({ context, args });
|
|
74666
74997
|
const appId = await appIdOf({ client, args, folder: folderOf({ context, word: void 0 }) });
|
|
@@ -74753,10 +75084,12 @@ var APP_COMMANDS = {
|
|
|
74753
75084
|
list: appList,
|
|
74754
75085
|
push: appPush,
|
|
74755
75086
|
preview: appPreview,
|
|
75087
|
+
pull: appPull,
|
|
74756
75088
|
publish: appPublish,
|
|
74757
75089
|
"make-internal": appMakeInternal,
|
|
74758
75090
|
unpublish: appUnpublish,
|
|
74759
75091
|
access: appAccess,
|
|
75092
|
+
members: appMembers,
|
|
74760
75093
|
name: appName,
|
|
74761
75094
|
versions: appVersions,
|
|
74762
75095
|
log: appVersions,
|
|
@@ -75969,15 +76302,19 @@ async function channelInfo({ context, args }) {
|
|
|
75969
76302
|
const own2 = profile.kind === "agent" ? (await client.get("/api/agents/me/channels")).find(
|
|
75970
76303
|
(each) => each.id === detail.id
|
|
75971
76304
|
) ?? null : null;
|
|
76305
|
+
const pinned = await client.post("/api/apps/pins", { channel: detail.id }).catch(() => null);
|
|
75972
76306
|
if (args.flags.json) {
|
|
75973
|
-
return context.out(
|
|
75974
|
-
|
|
76307
|
+
return context.out(
|
|
76308
|
+
`${JSON.stringify({ ...detail, setting: own2, pins: pinned?.pins ?? [] }, null, 2)}
|
|
76309
|
+
`
|
|
76310
|
+
);
|
|
75975
76311
|
}
|
|
75976
76312
|
const topic = detail.topic ? `Topic: ${detail.topic}
|
|
75977
76313
|
` : "";
|
|
75978
76314
|
const setting = own2 ? `Your setting here: ${settingTextOf({ channel: own2 })}
|
|
75979
76315
|
` : "";
|
|
75980
|
-
|
|
76316
|
+
const tabs = pinned?.pins.length ? pinsText({ channel, listed: pinned }) : "";
|
|
76317
|
+
context.out(`${topic}${formatMembers({ detail })}${setting}${tabs}`);
|
|
75981
76318
|
}
|
|
75982
76319
|
async function channelRole({
|
|
75983
76320
|
context,
|
|
@@ -85936,7 +86273,7 @@ var HELP = `laze: work in a Laze workspace from your terminal or your agent.
|
|
|
85936
86273
|
laze agent create --name <name> [--description <text>] [--harness laze-models|claude-code|codex] [--avatar <file>]
|
|
85937
86274
|
make an agent for your owner (or for you): personal, opened in their direct messages
|
|
85938
86275
|
--team makes a team agent; on Claude Code or Codex it needs --pool <pool>, a login pool to draw from
|
|
85939
|
-
laze agent update <agent> [--name] [--description] [--avatar] [--context
|
|
86276
|
+
laze agent update <agent> [--name] [--description] [--avatar] [--model] [--effort] [--max-context] change an agent your owner owns
|
|
85940
86277
|
laze agent archive <agent> remove an agent your owner owns; kept 30 days
|
|
85941
86278
|
laze agent archived removed agents you may restore, with the day each goes
|
|
85942
86279
|
laze agent restore|delete <agent> bring an archived agent back, or delete it for good now
|
package/package.json
CHANGED