@moda-ai/cli 1.55.2 → 1.55.4

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/README.md CHANGED
@@ -32,6 +32,30 @@ export MODA_API_KEY="moda_sk_..."
32
32
 
33
33
  Get your API key from [moda.dev/settings](https://moda.dev/settings).
34
34
 
35
+ ### Read-only keys
36
+
37
+ Turn on **Read-only** when you create a key in Settings → Ingestion keys. A
38
+ read-only key works with every read command (`overview`, `search`, `context`,
39
+ `problems`, ...) but the API rejects writes (`false-positive`, `signals create`,
40
+ `problem-feedback`, `ask`, ...) with 403, and it cannot ingest data. Use one for
41
+ agents and evaluations that should never change anything.
42
+
43
+ ### Platform admin keys
44
+
45
+ Platform admins can create `moda_pk_` keys on the admin page (`/admin/api-keys`).
46
+ They are not tied to an organization, so name one on each run:
47
+
48
+ ```bash
49
+ export MODA_API_KEY="moda_pk_..."
50
+ export MODA_TENANT_ID="<organization-id>"
51
+ moda overview
52
+ moda users --tenant-id=<organization-id> # tenant-scoped commands also take --tenant-id
53
+ ```
54
+
55
+ They are read-only by default and stop working when the owner loses platform
56
+ admin access. Usage is not counted in the organization's CLI analytics. Ordinary
57
+ `moda_sk_` keys cannot choose another organization: the API rejects them with 403.
58
+
35
59
  ## Diagnostics
36
60
 
37
61
  `moda doctor --online` checks configuration and cloud data flow. Experimental
@@ -19,8 +19,9 @@ import {
19
19
  require_typescript,
20
20
  resolvePromptSource,
21
21
  safePromptEvidencePath,
22
- scanHarness
23
- } from "./cli-9250ckvg.js";
22
+ scanHarness,
23
+ setPlatformTenantOverride
24
+ } from "./cli-9v0c1xe1.js";
24
25
  import {
25
26
  SKILL_SOURCE_HARNESS,
26
27
  SKILL_SOURCE_INTEGRATION_BUNDLED,
@@ -33,7 +34,7 @@ import {
33
34
  import {
34
35
  isAuthSessionValid,
35
36
  loadAuthSession
36
- } from "./cli-kxwm7y62.js";
37
+ } from "./cli-t5v7mhvj.js";
37
38
  import {
38
39
  CliInputError,
39
40
  EXIT_ERROR,
@@ -52,7 +53,7 @@ import {
52
53
  resolveTenantId,
53
54
  secretFilePathFromRef,
54
55
  validateConfig
55
- } from "./cli-ac3p2byq.js";
56
+ } from "./cli-zp7a97sp.js";
56
57
  import {
57
58
  __commonJS,
58
59
  __require,
@@ -5606,6 +5607,7 @@ async function runPromptAb(flags, profileOptions, context) {
5606
5607
  if (!tenantId) {
5607
5608
  throw new Error("Missing tenant id. Run `moda init` or pass --tenant-id=<id>.");
5608
5609
  }
5610
+ setPlatformTenantOverride(tenantId);
5609
5611
  const baselineSource = flags.baseline || flags["baseline-file"] || flags["baseline-key"];
5610
5612
  const candidateSource = flags.candidate || flags["candidate-file"] || flags["candidate-key"];
5611
5613
  if (!baselineSource || !candidateSource) {
@@ -6749,7 +6751,7 @@ async function runPromptSyncExclusive(flags, profileOptions, options) {
6749
6751
  const analyzedDefinitions = new Map;
6750
6752
  if (flags["no-analyze"] !== "true") {
6751
6753
  options.onProgress?.("Analyzing prompt sources before sync.");
6752
- const { analyzeHarnessPrompts } = await import("./harness-sd44jsaw.js");
6754
+ const { analyzeHarnessPrompts } = await import("./harness-x6kaz47j.js");
6753
6755
  const result = await analyzeHarnessPrompts({
6754
6756
  rootDir: process.cwd(),
6755
6757
  existing: established.flatMap((prompt) => prompt.sourceDefinition ? [prompt.sourceDefinition.source] : []),
@@ -7079,7 +7081,7 @@ async function migratePromptManifest(options = {}) {
7079
7081
  let addedSources = [];
7080
7082
  let pendingSources = [];
7081
7083
  if (options.discover) {
7082
- const { analyzeHarnessPrompts } = await import("./harness-sd44jsaw.js");
7084
+ const { analyzeHarnessPrompts } = await import("./harness-x6kaz47j.js");
7083
7085
  const result = await analyzeHarnessPrompts({
7084
7086
  rootDir: root,
7085
7087
  existing: manifest.sources,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  authFetch,
3
3
  getCachedLoginContext
4
- } from "./cli-kxwm7y62.js";
4
+ } from "./cli-t5v7mhvj.js";
5
5
  import {
6
6
  CliAccessError,
7
7
  CliInputError,
@@ -15,7 +15,7 @@ import {
15
15
  resolveTenantIdFromActiveProfile,
16
16
  saveCliConfig,
17
17
  writeSecretJsonFile
18
- } from "./cli-ac3p2byq.js";
18
+ } from "./cli-zp7a97sp.js";
19
19
 
20
20
  // src/init/tenant.ts
21
21
  import { randomUUID } from "node:crypto";
@@ -174,7 +174,7 @@ async function selectTenantAndCreateKey(options = {}) {
174
174
  }
175
175
  log(` Authenticated as ${ctx.user.email}`);
176
176
  if (ctx.tenants.length === 0) {
177
- throw new CliAccessError("No organizations found. Create one at https://moda.dev");
177
+ throw new CliAccessError("This account has no Moda organization yet. Moda is invite-only: finish your access request at https://moda.dev/request-access, or ask a workspace admin to invite you.");
178
178
  }
179
179
  let selected;
180
180
  if (options.tenantId !== undefined) {
@@ -25,7 +25,7 @@ import {
25
25
  resolveTenantId,
26
26
  shouldInventoryFile,
27
27
  stringOption
28
- } from "./cli-ac3p2byq.js";
28
+ } from "./cli-zp7a97sp.js";
29
29
  import {
30
30
  __commonJS,
31
31
  __require,
@@ -177899,6 +177899,31 @@ import { confirm as confirm2, select } from "@inquirer/prompts";
177899
177899
  import { readFileSync } from "node:fs";
177900
177900
  import { resolve } from "node:path";
177901
177901
 
177902
+ // src/api-key-headers.ts
177903
+ var PLATFORM_API_KEY_PREFIX = "moda_pk_";
177904
+ var TENANT_HEADER = "x-moda-tenant-id";
177905
+ function isPlatformApiKey(key) {
177906
+ return Boolean(key?.startsWith(PLATFORM_API_KEY_PREFIX));
177907
+ }
177908
+ var platformTenantOverride;
177909
+ function setPlatformTenantOverride(tenantId) {
177910
+ platformTenantOverride = tenantId;
177911
+ }
177912
+ var TENANT_PATH = /\/tenants\/([^/?#]+)/;
177913
+ function tenantFromUrl(url) {
177914
+ const match = url ? TENANT_PATH.exec(url) : null;
177915
+ return match ? decodeURIComponent(match[1]) : undefined;
177916
+ }
177917
+ function apiKeyHeaders(key, options = {}, url) {
177918
+ const headers = { "x-api-key": key };
177919
+ if (isPlatformApiKey(key)) {
177920
+ const tenantId = tenantFromUrl(url) || platformTenantOverride || resolveTenantId(options);
177921
+ if (tenantId)
177922
+ headers[TENANT_HEADER] = tenantId;
177923
+ }
177924
+ return headers;
177925
+ }
177926
+
177902
177927
  // src/api-client.ts
177903
177928
  var REQUEST_TIMEOUT_MS = 30000;
177904
177929
  var MAX_RETRIES = 3;
@@ -178006,7 +178031,7 @@ async function callModaAPI(url, options, profileOptions = {}, requestOptions = {
178006
178031
  const response = await fetch(url, {
178007
178032
  ...options,
178008
178033
  headers: {
178009
- "x-api-key": resolveApiKey(profileOptions) ?? "",
178034
+ ...apiKeyHeaders(resolveApiKey(profileOptions) ?? "", profileOptions, url),
178010
178035
  "Content-Type": "application/json",
178011
178036
  ...options.headers ?? {},
178012
178037
  ...connectionClose ? { Connection: "close" } : {}
@@ -178077,6 +178102,8 @@ function requireTenant(context) {
178077
178102
  if (!tenantId) {
178078
178103
  throw new CliInputError("Could not determine the tenant.", "Use a signed API key (it names its tenant), set MODA_TENANT_ID, or pass --tenant-id=<id>.");
178079
178104
  }
178105
+ if (isPlatformApiKey(key))
178106
+ setPlatformTenantOverride(tenantId);
178080
178107
  return tenantId;
178081
178108
  }
178082
178109
  function assertFlags(command, flags, allowed) {
@@ -184870,7 +184897,7 @@ async function runHarnessCommand(context) {
184870
184897
  throw new CliInputError("Focused remote prompt analysis is not supported yet.", "Use local --analyst=claude|codex|cursor|local-scan, or drop --concern for a full remote report.");
184871
184898
  }
184872
184899
  if (context.flags["github-actions"] === "true") {
184873
- const { runGithubActionsAnalyze } = await import("./harness-github-actions-075xzdvp.js");
184900
+ const { runGithubActionsAnalyze } = await import("./harness-github-actions-5syjp1sz.js");
184874
184901
  const result = await runGithubActionsAnalyze(rootDir, {
184875
184902
  writeReport: (report2) => {
184876
184903
  const normalized = normalizeHarnessReport(report2);
@@ -188915,4 +188942,4 @@ function hashText(text) {
188915
188942
  return createHash4("sha256").update(text).digest("hex");
188916
188943
  }
188917
188944
 
188918
- export { ApiError, callDataAPI, callControlAPI, getApiRequestCount, resetApiRequestCount, $isSeq, $parseDocument, $stringify, require_typescript, inspectCodeSelectors, inspectPythonSelectors, resolvePromptSource, backfillPromptSource, HARNESS_REPORT_PATH, HARNESS_REPORT_APPROVAL_PATH, HARNESS_ANALYZE_CONCERNS, validateHarnessReport, readHarnessReport, normalizeHarnessReport, hashHarnessReport, hashStableJson, assertFlags, assertPositionals, runUsersCommand, runUserCommand, runProblemReopenCommand, runSignalsManagementCommand, SIGNALS_MANAGEMENT_SUBCOMMANDS, unknownSignalsSubcommandError, shouldColorTerminalOutput, terminalStyles, stripAnsi2 as stripAnsi, renderMarkdownForTerminal, startRemoteAnalyze, pollRemoteAnalyzeUntilDone, isRecoverableRemoteRun, checkPromptMapping, safePromptEvidencePath, discoverHarnessPromptSources, renderDoctorHuman, renderStatusHuman, renderInitBanner, renderInitStep, renderInitNote, renderInitSetupPlan, renderInitComplete, runHarnessCommand, writeHarnessAnalyzeResult, emitWrittenArtifacts, analyzeHarnessPrompts, repairExternalAnalystReport, deriveRelationshipsFromGraph, mergeDeterministicArtifacts, describeCodingAgentEvent, analystEventProgress, isRetryableExternalAnalystFailure, sleep, summarizeInvalidAnalystReport, isDeterministicLocalAnalyst, resolveHarnessAnalyzeConcern, detectAvailableCodingAgents, codingAgentDisplayName, runCodingAgent, resolveAnalystModel, renderExternalHarnessAnalystPrompt, CONCERN_CANDIDATE_KINDS, SEED_CANDIDATE_KIND_LABELS, renderAnalystCandidateLines, renderAnalystSeedLines, truncateText, scanHarness, summarizeHarness, buildSourceSnapshot, writeHumanProgress, readHarnessSyncState, describeSyncIdentity, describeSyncTenantLabel, findFresherHarnessReports, writeHarnessArtifacts, assertHarnessGraphSyncQuality, graphForSync, inventoryFiles, numericEnv, numericEnvAllowZero, computeDeterministicFloor, stableId2 as stableId, titleFromId2 as titleFromId, promptNameFromPath };
188945
+ export { isPlatformApiKey, setPlatformTenantOverride, apiKeyHeaders, ApiError, callDataAPI, callControlAPI, getApiRequestCount, resetApiRequestCount, $isSeq, $parseDocument, $stringify, require_typescript, inspectCodeSelectors, inspectPythonSelectors, resolvePromptSource, backfillPromptSource, HARNESS_REPORT_PATH, HARNESS_REPORT_APPROVAL_PATH, HARNESS_ANALYZE_CONCERNS, validateHarnessReport, readHarnessReport, normalizeHarnessReport, hashHarnessReport, hashStableJson, assertFlags, assertPositionals, runUsersCommand, runUserCommand, runProblemReopenCommand, runSignalsManagementCommand, SIGNALS_MANAGEMENT_SUBCOMMANDS, unknownSignalsSubcommandError, shouldColorTerminalOutput, terminalStyles, stripAnsi2 as stripAnsi, renderMarkdownForTerminal, startRemoteAnalyze, pollRemoteAnalyzeUntilDone, isRecoverableRemoteRun, checkPromptMapping, safePromptEvidencePath, discoverHarnessPromptSources, renderDoctorHuman, renderStatusHuman, renderInitBanner, renderInitStep, renderInitNote, renderInitSetupPlan, renderInitComplete, runHarnessCommand, writeHarnessAnalyzeResult, emitWrittenArtifacts, analyzeHarnessPrompts, repairExternalAnalystReport, deriveRelationshipsFromGraph, mergeDeterministicArtifacts, describeCodingAgentEvent, analystEventProgress, isRetryableExternalAnalystFailure, sleep, summarizeInvalidAnalystReport, isDeterministicLocalAnalyst, resolveHarnessAnalyzeConcern, detectAvailableCodingAgents, codingAgentDisplayName, runCodingAgent, resolveAnalystModel, renderExternalHarnessAnalystPrompt, CONCERN_CANDIDATE_KINDS, SEED_CANDIDATE_KIND_LABELS, renderAnalystCandidateLines, renderAnalystSeedLines, truncateText, scanHarness, summarizeHarness, buildSourceSnapshot, writeHumanProgress, readHarnessSyncState, describeSyncIdentity, describeSyncTenantLabel, findFresherHarnessReports, writeHarnessArtifacts, assertHarnessGraphSyncQuality, graphForSync, inventoryFiles, numericEnv, numericEnvAllowZero, computeDeterministicFloor, stableId2 as stableId, titleFromId2 as titleFromId, promptNameFromPath };
@@ -7,7 +7,7 @@ import {
7
7
  saveProfileConfig,
8
8
  secretFilePathFromRef,
9
9
  writeSecretJsonFile
10
- } from "./cli-ac3p2byq.js";
10
+ } from "./cli-zp7a97sp.js";
11
11
  import {
12
12
  __require
13
13
  } from "./cli-0v6na3yp.js";
@@ -804,6 +804,7 @@ var SECRET_KEYS = new Set([
804
804
  ]);
805
805
  var SECRET_PATTERNS = [
806
806
  { pattern: /\bmoda_sk_[A-Za-z0-9_-]+\b/g, prefixLength: 8 },
807
+ { pattern: /\bmoda_pk_[A-Za-z0-9_-]+\b/g, prefixLength: 8 },
807
808
  { pattern: /\bmoda_ct_[A-Za-z0-9_-]+\b/g, prefixLength: 8 },
808
809
  { pattern: /\bBearer\s+([A-Za-z0-9._~+/-]+=*)\b/gi, prefixLength: 8 },
809
810
  { pattern: /\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g, prefixLength: 8 },
package/dist/cli.js CHANGED
@@ -8,13 +8,14 @@ import {
8
8
  runPromptsCommand,
9
9
  runSkillsCommand,
10
10
  runStatusCommand
11
- } from "./cli-a2jq9yd5.js";
11
+ } from "./cli-73v8mqh1.js";
12
12
  import"./cli-mm48br00.js";
13
13
  import {
14
14
  ApiError,
15
15
  HARNESS_REPORT_APPROVAL_PATH,
16
16
  HARNESS_REPORT_PATH,
17
17
  SIGNALS_MANAGEMENT_SUBCOMMANDS,
18
+ apiKeyHeaders,
18
19
  assertFlags,
19
20
  assertPositionals,
20
21
  callControlAPI,
@@ -23,6 +24,7 @@ import {
23
24
  graphForSync,
24
25
  hashHarnessReport,
25
26
  hashStableJson,
27
+ isPlatformApiKey,
26
28
  readHarnessReport,
27
29
  readHarnessSyncState,
28
30
  renderMarkdownForTerminal,
@@ -32,13 +34,14 @@ import {
32
34
  runSignalsManagementCommand,
33
35
  runUserCommand,
34
36
  runUsersCommand,
37
+ setPlatformTenantOverride,
35
38
  shouldColorTerminalOutput,
36
39
  stripAnsi,
37
40
  summarizeHarness,
38
41
  terminalStyles,
39
42
  unknownSignalsSubcommandError,
40
43
  validateHarnessReport
41
- } from "./cli-9250ckvg.js";
44
+ } from "./cli-9v0c1xe1.js";
42
45
  import"./cli-ssfq84k5.js";
43
46
  import {
44
47
  authFetch,
@@ -47,7 +50,7 @@ import {
47
50
  loadAuthSession,
48
51
  login,
49
52
  revokeCliSessionToken
50
- } from "./cli-kxwm7y62.js";
53
+ } from "./cli-t5v7mhvj.js";
51
54
  import {
52
55
  AGENT_ERROR_CODES,
53
56
  CliAccessError,
@@ -98,7 +101,7 @@ import {
98
101
  validateConfig,
99
102
  wasOutputCancelled,
100
103
  writeSecretJsonFile
101
- } from "./cli-ac3p2byq.js";
104
+ } from "./cli-zp7a97sp.js";
102
105
  import {
103
106
  __require
104
107
  } from "./cli-0v6na3yp.js";
@@ -3346,6 +3349,8 @@ function requireTenant(context) {
3346
3349
  if (!tenantId) {
3347
3350
  throw new CliInputError("Could not determine the tenant.", "Use a signed API key (it names its tenant), set MODA_TENANT_ID, or pass --tenant-id=<id>.");
3348
3351
  }
3352
+ if (isPlatformApiKey(key))
3353
+ setPlatformTenantOverride(tenantId);
3349
3354
  return tenantId;
3350
3355
  }
3351
3356
  function intFlag(name, value, min, max) {
@@ -3582,7 +3587,7 @@ async function sendCliUsageTelemetry(input) {
3582
3587
  await fetch(`${resolveModaBaseUrl()}/api/v1/data/cli-usage`, {
3583
3588
  method: "POST",
3584
3589
  headers: {
3585
- "x-api-key": input.apiKey,
3590
+ ...apiKeyHeaders(input.apiKey),
3586
3591
  "Content-Type": "application/json"
3587
3592
  },
3588
3593
  body: JSON.stringify({
@@ -4815,7 +4820,7 @@ async function probeApiKey(key, options = {}) {
4815
4820
  try {
4816
4821
  response = await fetch(`${resolveModaBaseUrl(options)}/api/v1/data/overview`, {
4817
4822
  method: "GET",
4818
- headers: { "x-api-key": key },
4823
+ headers: apiKeyHeaders(key, options),
4819
4824
  signal: AbortSignal.timeout(PROBE_TIMEOUT_MS)
4820
4825
  });
4821
4826
  } catch (error) {
@@ -6159,7 +6164,7 @@ async function streamAsk(options) {
6159
6164
  response = await fetchImpl(url, {
6160
6165
  method: "POST",
6161
6166
  headers: {
6162
- "x-api-key": resolveApiKey(profileOptions2) ?? "",
6167
+ ...apiKeyHeaders(resolveApiKey(profileOptions2) ?? "", profileOptions2),
6163
6168
  "Content-Type": "application/json",
6164
6169
  Accept: "text/event-stream"
6165
6170
  },
@@ -10265,7 +10270,7 @@ var commandRegistry = createCommandRegistry([
10265
10270
  resetApiRequestCountBeforeRun: true,
10266
10271
  telemetry: "result",
10267
10272
  handler: async (context) => {
10268
- const { runInit } = await import("./index-hn9t95tr.js");
10273
+ const { runInit } = await import("./index-8vvznb36.js");
10269
10274
  if (context.outputMode === "agent-stream") {
10270
10275
  context.output.writeEvent({
10271
10276
  event: "started",
@@ -10306,7 +10311,7 @@ var commandRegistry = createCommandRegistry([
10306
10311
  resetApiRequestCountBeforeRun: true,
10307
10312
  telemetry: "result-and-error",
10308
10313
  handler: async (context) => {
10309
- const { runProvision } = await import("./provision-d1dfj6as.js");
10314
+ const { runProvision } = await import("./provision-2z73642d.js");
10310
10315
  return runProvision(context, {
10311
10316
  resumeCommand: buildResumeCommand("provision", context.rawFlags)
10312
10317
  });
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  buildSourceSnapshot
3
- } from "./cli-9250ckvg.js";
4
- import"./cli-ac3p2byq.js";
3
+ } from "./cli-9v0c1xe1.js";
4
+ import"./cli-zp7a97sp.js";
5
5
  import"./cli-0v6na3yp.js";
6
6
 
7
7
  // src/harness-github-actions.ts
@@ -42,8 +42,8 @@ import {
42
42
  writeHarnessAnalyzeResult,
43
43
  writeHarnessArtifacts,
44
44
  writeHumanProgress
45
- } from "./cli-9250ckvg.js";
46
- import"./cli-ac3p2byq.js";
45
+ } from "./cli-9v0c1xe1.js";
46
+ import"./cli-zp7a97sp.js";
47
47
  import"./cli-0v6na3yp.js";
48
48
  export {
49
49
  writeHumanProgress,
@@ -3,7 +3,7 @@ import {
3
3
  initPrompts,
4
4
  runPromptSync,
5
5
  runSkillSync
6
- } from "./cli-a2jq9yd5.js";
6
+ } from "./cli-73v8mqh1.js";
7
7
  import"./cli-mm48br00.js";
8
8
  import {
9
9
  codingAgentDisplayName,
@@ -23,7 +23,7 @@ import {
23
23
  runHarnessCommand,
24
24
  startRemoteAnalyze,
25
25
  stripAnsi
26
- } from "./cli-9250ckvg.js";
26
+ } from "./cli-9v0c1xe1.js";
27
27
  import {
28
28
  bundledSkillsDir,
29
29
  installIntegrationSkill,
@@ -35,14 +35,14 @@ import {
35
35
  } from "./cli-ssfq84k5.js";
36
36
  import {
37
37
  selectTenantAndCreateKey
38
- } from "./cli-sq6g0tk5.js";
38
+ } from "./cli-9kyw5qx0.js";
39
39
  import {
40
40
  ConnectCodeError,
41
41
  connectWithCode,
42
42
  loadAuthSession,
43
43
  loadToken,
44
44
  login
45
- } from "./cli-kxwm7y62.js";
45
+ } from "./cli-t5v7mhvj.js";
46
46
  import {
47
47
  CliAuthError,
48
48
  CliInputError,
@@ -50,7 +50,7 @@ import {
50
50
  createCommandContext,
51
51
  resolveIngestUrl,
52
52
  resolveModaBaseUrl
53
- } from "./cli-ac3p2byq.js";
53
+ } from "./cli-zp7a97sp.js";
54
54
  import"./cli-0v6na3yp.js";
55
55
 
56
56
  // src/init/index.ts
@@ -5,8 +5,8 @@ import {
5
5
  inspectCodeSelectors,
6
6
  inspectPythonSelectors,
7
7
  safePromptEvidencePath
8
- } from "./cli-9250ckvg.js";
9
- import"./cli-ac3p2byq.js";
8
+ } from "./cli-9v0c1xe1.js";
9
+ import"./cli-zp7a97sp.js";
10
10
  import {
11
11
  __commonJS,
12
12
  __toESM
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  selectTenantAndCreateKey
3
- } from "./cli-sq6g0tk5.js";
3
+ } from "./cli-9kyw5qx0.js";
4
4
  import {
5
5
  loadAuthSession
6
- } from "./cli-kxwm7y62.js";
6
+ } from "./cli-t5v7mhvj.js";
7
7
  import {
8
8
  CliAuthError,
9
9
  resolveIngestUrl,
10
10
  resolveModaBaseUrl,
11
11
  stringOption
12
- } from "./cli-ac3p2byq.js";
12
+ } from "./cli-zp7a97sp.js";
13
13
  import"./cli-0v6na3yp.js";
14
14
 
15
15
  // src/provision.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moda-ai/cli",
3
- "version": "1.55.2",
3
+ "version": "1.55.4",
4
4
  "description": "CLI for Moda - AI agent analytics and observability",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema_version": "moda.skill_index.v1",
3
- "bundled_at": "2026-10-13T03:17:21.446Z",
4
- "cli_version": "1.55.2",
3
+ "bundled_at": "2026-10-14T00:26:25.137Z",
4
+ "cli_version": "1.55.4",
5
5
  "skills": [
6
6
  {
7
7
  "id": "integration-cloudflare-think",