@levr-one/cli 0.10.14 → 0.10.15

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.
@@ -705,12 +705,13 @@ function requireScope(harness, scope) {
705
705
  /**
706
706
  * Substitute `{name}` / `{url}` / `{scope}` into a `cli-command` argv. Returns
707
707
  * argv rather than a string so the executor can spawn it WITHOUT a shell.
708
+ * `serverName` defaults to {@link SERVER_NAME}; see {@link buildHarnessConfig}.
708
709
  */
709
- function renderHarnessCommand(harness, mcpUrl, scope) {
710
+ function renderHarnessCommand(harness, mcpUrl, scope, serverName = SERVER_NAME) {
710
711
  const def = requireScope(harness, scope);
711
712
  if (!def.command) throw new Error(`harness "${harness.id}" scope "${scope}" declares no command argv`);
712
713
  const substitutions = {
713
- "{name}": SERVER_NAME,
714
+ "{name}": serverName,
714
715
  "{url}": mcpUrl,
715
716
  "{scope}": scope
716
717
  };
@@ -729,7 +730,8 @@ function mcpRemoteInvocation(mcpUrl) {
729
730
  }
730
731
  /**
731
732
  * The structured server entry to merge under the scope's server property,
732
- * keyed by {@link SERVER_NAME}. Shape is per-transport, then per-property:
733
+ * keyed by `serverName` (default {@link SERVER_NAME}). Shape is per-transport,
734
+ * then per-property:
733
735
  * - `native-http`: the entry's declared {@link NativeHttpEntryShape} —
734
736
  * `{ url, type: 'http' }` by default (Claude Code's `.mcp.json`, Gemini).
735
737
  * - `mcpServers` (Claude Desktop, Cursor, Windsurf): flat `{ command, args }`.
@@ -737,24 +739,24 @@ function mcpRemoteInvocation(mcpUrl) {
737
739
  *
738
740
  * Not used for `cli-command` scopes (see {@link buildHarnessConfig}).
739
741
  */
740
- function buildServerEntry(harness, mcpUrl, scope = defaultScope(harness)) {
742
+ function buildServerEntry(harness, mcpUrl, scope = defaultScope(harness), serverName = SERVER_NAME) {
741
743
  requireScope(harness, scope);
742
744
  if (harness.transport === "native-http") {
743
745
  const shape = harness.nativeHttpEntry ?? DEFAULT_NATIVE_HTTP_ENTRY;
744
- return { [SERVER_NAME]: {
746
+ return { [serverName]: {
745
747
  [shape.urlKey]: mcpUrl,
746
748
  ...shape.constants ?? {}
747
749
  } };
748
750
  }
749
751
  const { command, args } = mcpRemoteInvocation(mcpUrl);
750
- if (serverPropertyFor(harness, scope) === "context_servers") return { [SERVER_NAME]: {
752
+ if (serverPropertyFor(harness, scope) === "context_servers") return { [serverName]: {
751
753
  source: "custom",
752
754
  command: {
753
755
  path: command,
754
756
  args
755
757
  }
756
758
  } };
757
- return { [SERVER_NAME]: {
759
+ return { [serverName]: {
758
760
  command,
759
761
  args
760
762
  } };
package/dist/cli.js CHANGED
@@ -175,7 +175,7 @@ Examples:
175
175
  aliases: { y: "yes" }
176
176
  },
177
177
  loader: async () => {
178
- const { mcpAddHandler } = await import("./addHandler-g1oxms3Q.js");
178
+ const { mcpAddHandler } = await import("./addHandler-r0Yw1vu-.js");
179
179
  return mcpAddHandler;
180
180
  }
181
181
  });
@@ -213,7 +213,7 @@ Examples:
213
213
  aliases: { d: "device-code" }
214
214
  },
215
215
  loader: async () => {
216
- const { loginHandler } = await import("./loginHandler-DK2x2NVu.js");
216
+ const { loginHandler } = await import("./loginHandler-DQ6Y9MNs.js");
217
217
  return loginHandler;
218
218
  }
219
219
  });
@@ -252,7 +252,7 @@ Examples:
252
252
  },
253
253
  parameters: {},
254
254
  loader: async () => {
255
- const { statusHandler } = await import("./statusHandler-Bb1CBDCB.js");
255
+ const { statusHandler } = await import("./statusHandler-C34Hsy7I.js");
256
256
  return statusHandler;
257
257
  }
258
258
  });
@@ -356,7 +356,7 @@ Examples:
356
356
  }
357
357
  },
358
358
  loader: async () => {
359
- const { pushHandler } = await import("./pushHandler-BNKLthjU.js");
359
+ const { pushHandler } = await import("./pushHandler-BYLnrNOV.js");
360
360
  return pushHandler;
361
361
  }
362
362
  });
@@ -476,7 +476,7 @@ Examples:
476
476
  }
477
477
  },
478
478
  loader: async () => {
479
- const { importHandler } = await import("./importHandler-0eMQhI21.js");
479
+ const { importHandler } = await import("./importHandler-DyuUKYBD.js");
480
480
  return importHandler;
481
481
  }
482
482
  });
@@ -497,7 +497,7 @@ Examples:
497
497
  },
498
498
  parameters: {},
499
499
  loader: async () => {
500
- const { listHandler } = await import("./listHandler-BIFi8m2j.js");
500
+ const { listHandler } = await import("./listHandler-CeCpGMsT.js");
501
501
  return listHandler;
502
502
  }
503
503
  });
@@ -530,7 +530,7 @@ Examples:
530
530
  flags: {}
531
531
  },
532
532
  loader: async () => {
533
- const { selectHandler } = await import("./selectHandler-D3VcEjHe.js");
533
+ const { selectHandler } = await import("./selectHandler-CTrAYc_1.js");
534
534
  return selectHandler;
535
535
  }
536
536
  });
@@ -616,14 +616,14 @@ Examples:
616
616
  }
617
617
  },
618
618
  loader: async () => {
619
- const { gatesRunHandler } = await import("./runHandler-DMX3SNe1.js");
619
+ const { gatesRunHandler } = await import("./runHandler-Ba6FM0t1.js");
620
620
  return gatesRunHandler;
621
621
  }
622
622
  });
623
623
 
624
624
  //#endregion
625
625
  //#region package.json
626
- var version = "0.10.14";
626
+ var version = "0.10.15";
627
627
 
628
628
  //#endregion
629
629
  //#region src/app.ts
@@ -1,7 +1,7 @@
1
1
  import { getApiUrl, getTeamId } from "./env-CHeKHu5S.js";
2
- import { authGetProfileV1, configureClient, teamFindAllV1, testCaseImportCommitV1, testCaseImportPreviewV1 } from "./sdk-client-jSZwL5vX.js";
2
+ import { authGetProfileV1, configureClient, teamFindAllV1, testCaseImportCommitV1, testCaseImportPreviewV1 } from "./sdk-client-BQIK9Bkq.js";
3
3
  import "./workspace-store-DDOxnut1.js";
4
- import { resolveWorkspace } from "./resolve-workspace-B9NQxa09.js";
4
+ import { resolveWorkspace } from "./resolve-workspace-BIaTcB92.js";
5
5
  import "./token-refresh-Cu5RpkLJ.js";
6
6
  import { resolveToken } from "./resolve-token-DbQsmn03.js";
7
7
  import chalk from "chalk";
@@ -1,5 +1,5 @@
1
1
  import "./env-CHeKHu5S.js";
2
- import { authGetSitesV1, configureClient } from "./sdk-client-jSZwL5vX.js";
2
+ import { authGetSitesV1, configureClient } from "./sdk-client-BQIK9Bkq.js";
3
3
  import { loadWorkspace } from "./workspace-store-DDOxnut1.js";
4
4
  import "./token-refresh-Cu5RpkLJ.js";
5
5
  import { resolveToken } from "./resolve-token-DbQsmn03.js";
@@ -1,7 +1,7 @@
1
1
  import { CLI_CLIENT_ID, getApiUrl, getAuthUrl, setSessionApiUrl, writeCredentials } from "./env-CHeKHu5S.js";
2
- import { configureClient } from "./sdk-client-jSZwL5vX.js";
2
+ import { configureClient } from "./sdk-client-BQIK9Bkq.js";
3
3
  import "./workspace-store-DDOxnut1.js";
4
- import { autoSelectWorkspace } from "./resolve-workspace-B9NQxa09.js";
4
+ import { autoSelectWorkspace } from "./resolve-workspace-BIaTcB92.js";
5
5
  import chalk from "chalk";
6
6
  import { createHash, randomBytes } from "node:crypto";
7
7
  import { createServer } from "node:http";
@@ -1,7 +1,7 @@
1
1
  import { getApiUrl, getAutomationSourceIdOverride, getSourceOverride, getTeamId } from "./env-CHeKHu5S.js";
2
- import { client, configureClient, uploadImport } from "./sdk-client-jSZwL5vX.js";
2
+ import { client, configureClient, uploadImport } from "./sdk-client-BQIK9Bkq.js";
3
3
  import "./workspace-store-DDOxnut1.js";
4
- import { resolveWorkspace } from "./resolve-workspace-B9NQxa09.js";
4
+ import { resolveWorkspace } from "./resolve-workspace-BIaTcB92.js";
5
5
  import "./token-refresh-Cu5RpkLJ.js";
6
6
  import { resolveToken } from "./resolve-token-DbQsmn03.js";
7
7
  import { readFileSync, statSync } from "node:fs";
@@ -1,4 +1,4 @@
1
- import { authGetSitesV1 } from "./sdk-client-jSZwL5vX.js";
1
+ import { authGetSitesV1 } from "./sdk-client-BQIK9Bkq.js";
2
2
  import { clearWorkspace, loadWorkspace, saveWorkspace } from "./workspace-store-DDOxnut1.js";
3
3
 
4
4
  //#region src/workspace/resolve-workspace.ts
@@ -1,7 +1,7 @@
1
1
  import "./env-CHeKHu5S.js";
2
- import { client, configureClient, issueFindAllV1, issueGateVerificationReportGateResultsV1, issueGateVerificationVerifyGatesV1 } from "./sdk-client-jSZwL5vX.js";
2
+ import { client, configureClient, issueFindAllV1, issueGateVerificationReportGateResultsV1, issueGateVerificationVerifyGatesV1 } from "./sdk-client-BQIK9Bkq.js";
3
3
  import "./workspace-store-DDOxnut1.js";
4
- import { resolveWorkspace } from "./resolve-workspace-B9NQxa09.js";
4
+ import { resolveWorkspace } from "./resolve-workspace-BIaTcB92.js";
5
5
  import "./token-refresh-Cu5RpkLJ.js";
6
6
  import { resolveToken } from "./resolve-token-DbQsmn03.js";
7
7
  import { existsSync } from "node:fs";
@@ -5160,6 +5160,138 @@ const zBriefAgentBulkOperationV1Data = z.object({
5160
5160
  url: z.literal("/v1/brief-agent/bulk")
5161
5161
  });
5162
5162
 
5163
+ //#endregion
5164
+ //#region ../sdk/dist/gen/browser-config/zod.js
5165
+ const zBrowserConfigGetConfigV1Data = z.object({ url: z.literal("/v1/browser/config") });
5166
+
5167
+ //#endregion
5168
+ //#region ../sdk/dist/gen/browser-device/zod.js
5169
+ const zEnrolDeviceDto = z.object({
5170
+ deviceKey: z.string().max(64),
5171
+ label: z.string().max(255),
5172
+ platform: z.string().max(64).nullable().optional(),
5173
+ extensionVersion: z.string().max(32).nullable().optional(),
5174
+ apiEnv: z.string().max(255).nullable().optional()
5175
+ });
5176
+ const zBridgeTokenRequestDto = z.object({ deviceId: z.string() });
5177
+ const zBrowserDeviceEnrolV1Data = z.object({
5178
+ body: zEnrolDeviceDto,
5179
+ url: z.literal("/v1/browser/devices")
5180
+ });
5181
+ const zBrowserDeviceBridgeTokenV1Data = z.object({
5182
+ body: zBridgeTokenRequestDto,
5183
+ url: z.literal("/v1/browser/bridge-token")
5184
+ });
5185
+
5186
+ //#endregion
5187
+ //#region ../sdk/dist/gen/browser-upload/zod.js
5188
+ const zBrowserUploadUploadV1Data = z.object({
5189
+ path: z.object({ "attachmentId": z.string() }),
5190
+ url: z.literal("/v1/browser/uploads/{attachmentId}")
5191
+ });
5192
+
5193
+ //#endregion
5194
+ //#region ../sdk/dist/gen/browsers/zod.js
5195
+ const zBrowserListingResponseDto = z.object({
5196
+ browsers: z.array(z.object({
5197
+ id: z.string(),
5198
+ label: z.string(),
5199
+ platform: z.string().nullable(),
5200
+ extensionVersion: z.string().nullable(),
5201
+ apiEnv: z.string().nullable(),
5202
+ firstSeenAt: z.string(),
5203
+ lastSeenAt: z.string().nullable(),
5204
+ status: z.enum([
5205
+ "online",
5206
+ "offline",
5207
+ "unknown"
5208
+ ]).describe(""),
5209
+ pod: z.string().nullable().describe(""),
5210
+ connectedAt: z.number().nullable(),
5211
+ lastFocusAt: z.number().nullable(),
5212
+ stopped: z.boolean().nullable().describe(""),
5213
+ sessions: z.array(z.object({
5214
+ sessionKey: z.string().describe(""),
5215
+ clientId: z.string(),
5216
+ clientName: z.string().describe(""),
5217
+ clientVersion: z.string().nullable(),
5218
+ source: z.string().nullable().describe(""),
5219
+ workspaceId: z.string().nullable(),
5220
+ since: z.number().describe(""),
5221
+ lastTool: z.string().nullable(),
5222
+ lastToolAt: z.number().nullable(),
5223
+ background: z.boolean(),
5224
+ disconnected: z.boolean()
5225
+ })).nullable()
5226
+ })),
5227
+ unassignedSessions: z.array(z.object({
5228
+ sessionKey: z.string().describe(""),
5229
+ clientId: z.string(),
5230
+ clientName: z.string().describe(""),
5231
+ clientVersion: z.string().nullable(),
5232
+ source: z.string().nullable().describe(""),
5233
+ workspaceId: z.string().nullable(),
5234
+ since: z.number().describe(""),
5235
+ lastTool: z.string().nullable(),
5236
+ lastToolAt: z.number().nullable(),
5237
+ background: z.boolean(),
5238
+ disconnected: z.boolean()
5239
+ })).nullable(),
5240
+ connectedAgents: z.array(z.object({
5241
+ clientId: z.string().describe(""),
5242
+ name: z.string().describe(""),
5243
+ harnessId: z.string().describe(""),
5244
+ harnessLabel: z.string().describe(""),
5245
+ connectedAt: z.string().nullable().describe(""),
5246
+ inUse: z.boolean().nullable().describe("")
5247
+ })).nullable().describe(""),
5248
+ presence: z.enum(["ok", "unavailable"]),
5249
+ sessionsState: z.enum(["ok", "unavailable"]),
5250
+ stopState: z.enum(["ok", "unavailable"]),
5251
+ agentsState: z.enum(["ok", "unavailable"]),
5252
+ errors: z.array(z.string())
5253
+ });
5254
+ const zRenameBrowserDto = z.object({ label: z.string().max(255) });
5255
+ const zRenamedBrowserResponseDto = z.object({
5256
+ id: z.string(),
5257
+ label: z.string()
5258
+ });
5259
+ const zBrowserRemovedResponseDto = z.object({
5260
+ removed: z.boolean(),
5261
+ pushed: z.enum([
5262
+ "delivered",
5263
+ "offline",
5264
+ "failed"
5265
+ ]).describe("")
5266
+ });
5267
+ const zBrowserStopStateResponseDto = z.object({ stopped: z.boolean() });
5268
+ const zBrowserSessionDisconnectedResponseDto = z.object({ disconnected: z.boolean() });
5269
+ const zBrowsersListV1Data = z.object({ url: z.literal("/v1/browsers") });
5270
+ const zBrowsersRenameV1Data = z.object({
5271
+ body: zRenameBrowserDto,
5272
+ path: z.object({ "id": z.string() }),
5273
+ url: z.literal("/v1/browsers/{id}")
5274
+ });
5275
+ const zBrowsersRemoveV1Data = z.object({
5276
+ path: z.object({ "id": z.string() }),
5277
+ url: z.literal("/v1/browsers/{id}")
5278
+ });
5279
+ const zBrowsersStopV1Data = z.object({
5280
+ path: z.object({ "id": z.string() }),
5281
+ url: z.literal("/v1/browsers/{id}/stop")
5282
+ });
5283
+ const zBrowsersResumeV1Data = z.object({
5284
+ path: z.object({ "id": z.string() }),
5285
+ url: z.literal("/v1/browsers/{id}/resume")
5286
+ });
5287
+ const zBrowsersDisconnectV1Data = z.object({
5288
+ path: z.object({
5289
+ "id": z.string(),
5290
+ "sessionKey": z.string()
5291
+ }),
5292
+ url: z.literal("/v1/browsers/{id}/sessions/{sessionKey}/disconnect")
5293
+ });
5294
+
5163
5295
  //#endregion
5164
5296
  //#region ../sdk/dist/gen/build/zod.js
5165
5297
  const zBuildStreamBuildV1Data = z.object({ url: z.literal("/v1/build/stream") });
@@ -19755,6 +19887,9 @@ const zLlmProviderRestoreV1Data = z.object({
19755
19887
  const zMcpHandleMcpPostV1Data = z.object({ url: z.literal("/v1/mcp") });
19756
19888
  const zMcpHandleMcpGetV1Data = z.object({ url: z.literal("/v1/mcp") });
19757
19889
  const zMcpHandleMcpDeleteV1Data = z.object({ url: z.literal("/v1/mcp") });
19890
+ const zMcpHandleBrowserMcpPostV1Data = z.object({ url: z.literal("/v1/mcp/browser") });
19891
+ const zMcpHandleBrowserMcpGetV1Data = z.object({ url: z.literal("/v1/mcp/browser") });
19892
+ const zMcpHandleBrowserMcpDeleteV1Data = z.object({ url: z.literal("/v1/mcp/browser") });
19758
19893
 
19759
19894
  //#endregion
19760
19895
  //#region ../sdk/dist/gen/mention/zod.js
@@ -30666,6 +30801,7 @@ const zCreateUserPreferenceDto = z.object({
30666
30801
  auto_assign_on_start: z.boolean().nullable().optional().describe(""),
30667
30802
  auto_assign_on_result: z.boolean().nullable().optional().describe(""),
30668
30803
  auto_assign_on_done: z.boolean().nullable().optional().describe(""),
30804
+ capture_retention_hours: z.number().nullable().optional().describe(""),
30669
30805
  user_id: z.string()
30670
30806
  });
30671
30807
  const zResponseUserPreferenceDto = z.object({
@@ -30673,6 +30809,7 @@ const zResponseUserPreferenceDto = z.object({
30673
30809
  auto_assign_on_start: z.boolean().nullable().optional().describe(""),
30674
30810
  auto_assign_on_result: z.boolean().nullable().optional().describe(""),
30675
30811
  auto_assign_on_done: z.boolean().nullable().optional().describe(""),
30812
+ capture_retention_hours: z.number().nullable().optional().describe(""),
30676
30813
  user_id: z.string(),
30677
30814
  created_at: z.unknown().describe(""),
30678
30815
  updated_at: z.unknown().describe(""),
@@ -30688,6 +30825,7 @@ const zUpdateUserPreferenceDto = z.object({
30688
30825
  auto_assign_on_start: z.boolean().nullable().optional().describe(""),
30689
30826
  auto_assign_on_result: z.boolean().nullable().optional().describe(""),
30690
30827
  auto_assign_on_done: z.boolean().nullable().optional().describe(""),
30828
+ capture_retention_hours: z.number().nullable().optional().describe(""),
30691
30829
  user_id: z.string().optional()
30692
30830
  });
30693
30831
  const zUserPreferenceBulkOperationDto = z.object({
@@ -30734,6 +30872,7 @@ const zUserPreferenceFindAllV1Data = z.object({
30734
30872
  "filter.auto_assign_on_start": z.array(z.string()).optional(),
30735
30873
  "filter.auto_assign_on_result": z.array(z.string()).optional(),
30736
30874
  "filter.auto_assign_on_done": z.array(z.string()).optional(),
30875
+ "filter.capture_retention_hours": z.array(z.string()).optional(),
30737
30876
  "filter.user_id": z.array(z.string()).optional(),
30738
30877
  "filter.created_at": z.array(z.string()).optional(),
30739
30878
  "filter.updated_at": z.array(z.string()).optional(),
@@ -30741,6 +30880,8 @@ const zUserPreferenceFindAllV1Data = z.object({
30741
30880
  "sortBy": z.array(z.enum([
30742
30881
  "id:ASC",
30743
30882
  "id:DESC",
30883
+ "capture_retention_hours:ASC",
30884
+ "capture_retention_hours:DESC",
30744
30885
  "created_at:ASC",
30745
30886
  "created_at:DESC",
30746
30887
  "updated_at:ASC",
@@ -31260,6 +31401,7 @@ const zOpenIdConfigurationDto = z.object({
31260
31401
  const zWellKnownGetProtectedResourceMetadataData = z.object({ url: z.literal("/.well-known/oauth-protected-resource") });
31261
31402
  const zWellKnownGetProtectedResourceMetadataMcpData = z.object({ url: z.literal("/.well-known/oauth-protected-resource/mcp") });
31262
31403
  const zWellKnownGetProtectedResourceMetadataV1McpData = z.object({ url: z.literal("/.well-known/oauth-protected-resource/v1/mcp") });
31404
+ const zWellKnownGetProtectedResourceMetadataV1McpBrowserData = z.object({ url: z.literal("/.well-known/oauth-protected-resource/v1/mcp/browser") });
31263
31405
  const zWellKnownGetAuthorizationServerMetadataData = z.object({ url: z.literal("/.well-known/oauth-authorization-server") });
31264
31406
  const zWellKnownGetAuthorizationServerMetadataApiData = z.object({ url: z.literal("/.well-known/oauth-authorization-server/api") });
31265
31407
  const zWellKnownGetOpenIdConfigurationData = z.object({ url: z.literal("/.well-known/openid-configuration") });
@@ -1,5 +1,5 @@
1
1
  import "./env-CHeKHu5S.js";
2
- import { authGetSitesV1, configureClient } from "./sdk-client-jSZwL5vX.js";
2
+ import { authGetSitesV1, configureClient } from "./sdk-client-BQIK9Bkq.js";
3
3
  import { saveWorkspace } from "./workspace-store-DDOxnut1.js";
4
4
  import "./token-refresh-Cu5RpkLJ.js";
5
5
  import { resolveToken } from "./resolve-token-DbQsmn03.js";
@@ -1,5 +1,5 @@
1
1
  import { getApiUrl, getPatToken, readCredentials } from "./env-CHeKHu5S.js";
2
- import { authGetProfileV1, configureClient } from "./sdk-client-jSZwL5vX.js";
2
+ import { authGetProfileV1, configureClient } from "./sdk-client-BQIK9Bkq.js";
3
3
  import { isTokenExpired } from "./token-refresh-Cu5RpkLJ.js";
4
4
  import chalk from "chalk";
5
5
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@levr-one/cli",
3
- "version": "0.10.14",
3
+ "version": "0.10.15",
4
4
  "description": "The command-line interface for Levr",
5
5
  "type": "module",
6
6
  "license": "MIT",