@odla-ai/cli 0.32.1 → 0.33.0

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/index.d.cts CHANGED
@@ -419,6 +419,35 @@ interface IntegrationProbe {
419
419
  /** Expected unauthenticated HTTP status, normally 401. */
420
420
  expectedStatus: number;
421
421
  }
422
+ /**
423
+ * One tenant-vault secret a capability or app needs in order to work.
424
+ *
425
+ * This is the declaration half of the declaration/storage split: the contract
426
+ * is committed, the value never is. Declaring a secret does not store, read, or
427
+ * transmit it — `odla-ai secrets set` remains the only write path and values
428
+ * stay write-only afterwards. Declarations exist so `doctor` can tell "not set
429
+ * yet" apart from "not needed", so an agent can discover what to ask a human
430
+ * for instead of learning it from prose, and so `check:secrets` can prove the
431
+ * declared name is the name the runtime actually reads.
432
+ */
433
+ interface IntegrationSecret {
434
+ /** Vault name, byte-identical to what `odla-ai secrets set <name>` writes and
435
+ * what the runtime passes to `getSecret`. Reserved slots keep their `$`. */
436
+ name: string;
437
+ /** What the secret is for, and what breaks without it. */
438
+ description: string;
439
+ /** Expected value prefix, e.g. `whsec_`. Advisory: never matched against a
440
+ * stored value (the CLI cannot read one back), only against a value on its
441
+ * way in. */
442
+ pattern?: string;
443
+ /** Platform-managed `$`-prefixed slot. Reserved secrets are never readable by
444
+ * an app key and are written by a dedicated command, not `secrets set`. */
445
+ reserved?: boolean;
446
+ /** Whether the capability is broken without it. Defaults to `true`; set
447
+ * `false` for secrets only some configurations need, so `doctor` reports them
448
+ * as available rather than missing. */
449
+ required?: boolean;
450
+ }
422
451
  /** Structural, data-only capability descriptor consumed from
423
452
  * `odla.config.mjs`. Capability packages do not depend on the CLI; their
424
453
  * descriptors only need to conform to this shape. */
@@ -440,6 +469,8 @@ interface OdlaIntegration {
440
469
  seeds?: IntegrationSeed[];
441
470
  /** Read-only unauthenticated checks run against `links.<env>`. */
442
471
  probes?: IntegrationProbe[];
472
+ /** Tenant-vault secrets this capability reads. Names only — never values. */
473
+ secrets?: IntegrationSecret[];
443
474
  }
444
475
  interface ClerkAuthConfig {
445
476
  publishableKey?: string;
@@ -486,6 +517,9 @@ interface OdlaProjectConfig {
486
517
  /** App capabilities composed into schema/rules/seeds. Integrations are npm
487
518
  * modules, not hosted platform services, so they do not belong in services. */
488
519
  integrations?: OdlaIntegration[];
520
+ /** Vault secrets this app needs beyond the ones its capabilities declare.
521
+ * Names and descriptions only; values are never authored here. */
522
+ secrets?: IntegrationSecret[];
489
523
  db?: {
490
524
  /** Inline SerializedSchema, JSON file, or JS module path exporting default/schema. */
491
525
  schema?: unknown;
@@ -624,13 +658,22 @@ interface SmokeOptions {
624
658
  stdout?: Pick<typeof console, "log" | "error">;
625
659
  }
626
660
 
627
- /** The Google OAuth scope that authorizes booking writes (events read/write). */
628
- declare const GOOGLE_CALENDAR_EVENTS_SCOPE = "https://www.googleapis.com/auth/calendar.events";
661
+ /**
662
+ * The calendar half of `odla.config.mjs`: resolving the checked-in Google
663
+ * booking block into a controller payload, and validating it.
664
+ *
665
+ * Split out of config.ts because calendar validation and its four value
666
+ * guards are used by nothing else in config loading — the guards were private
667
+ * to this one validator already.
668
+ */
629
669
  /** Resolve the checked-in calendar block into one controller-safe env payload. */
630
670
  declare function calendarServiceConfig(cfg: LoadedProjectConfig, env: string): CalendarServiceConfig;
631
671
  /** Public Appointment Schedule URL to apply separately from connector config. */
632
672
  declare function calendarBookingPageUrl(cfg: LoadedProjectConfig, env: string): string | null | undefined;
633
673
 
674
+ /** The Google OAuth scope that authorizes booking writes (events read/write). */
675
+ declare const GOOGLE_CALENDAR_EVENTS_SCOPE = "https://www.googleapis.com/auth/calendar.events";
676
+
634
677
  /** Canonical SHA-256 identifier for normalized configuration or a frozen plan. */
635
678
  type ConfigDigest = `sha256:${string}`;
636
679
  /** Overall relationship between repository-managed intent and observed state. */
package/dist/index.d.ts CHANGED
@@ -419,6 +419,35 @@ interface IntegrationProbe {
419
419
  /** Expected unauthenticated HTTP status, normally 401. */
420
420
  expectedStatus: number;
421
421
  }
422
+ /**
423
+ * One tenant-vault secret a capability or app needs in order to work.
424
+ *
425
+ * This is the declaration half of the declaration/storage split: the contract
426
+ * is committed, the value never is. Declaring a secret does not store, read, or
427
+ * transmit it — `odla-ai secrets set` remains the only write path and values
428
+ * stay write-only afterwards. Declarations exist so `doctor` can tell "not set
429
+ * yet" apart from "not needed", so an agent can discover what to ask a human
430
+ * for instead of learning it from prose, and so `check:secrets` can prove the
431
+ * declared name is the name the runtime actually reads.
432
+ */
433
+ interface IntegrationSecret {
434
+ /** Vault name, byte-identical to what `odla-ai secrets set <name>` writes and
435
+ * what the runtime passes to `getSecret`. Reserved slots keep their `$`. */
436
+ name: string;
437
+ /** What the secret is for, and what breaks without it. */
438
+ description: string;
439
+ /** Expected value prefix, e.g. `whsec_`. Advisory: never matched against a
440
+ * stored value (the CLI cannot read one back), only against a value on its
441
+ * way in. */
442
+ pattern?: string;
443
+ /** Platform-managed `$`-prefixed slot. Reserved secrets are never readable by
444
+ * an app key and are written by a dedicated command, not `secrets set`. */
445
+ reserved?: boolean;
446
+ /** Whether the capability is broken without it. Defaults to `true`; set
447
+ * `false` for secrets only some configurations need, so `doctor` reports them
448
+ * as available rather than missing. */
449
+ required?: boolean;
450
+ }
422
451
  /** Structural, data-only capability descriptor consumed from
423
452
  * `odla.config.mjs`. Capability packages do not depend on the CLI; their
424
453
  * descriptors only need to conform to this shape. */
@@ -440,6 +469,8 @@ interface OdlaIntegration {
440
469
  seeds?: IntegrationSeed[];
441
470
  /** Read-only unauthenticated checks run against `links.<env>`. */
442
471
  probes?: IntegrationProbe[];
472
+ /** Tenant-vault secrets this capability reads. Names only — never values. */
473
+ secrets?: IntegrationSecret[];
443
474
  }
444
475
  interface ClerkAuthConfig {
445
476
  publishableKey?: string;
@@ -486,6 +517,9 @@ interface OdlaProjectConfig {
486
517
  /** App capabilities composed into schema/rules/seeds. Integrations are npm
487
518
  * modules, not hosted platform services, so they do not belong in services. */
488
519
  integrations?: OdlaIntegration[];
520
+ /** Vault secrets this app needs beyond the ones its capabilities declare.
521
+ * Names and descriptions only; values are never authored here. */
522
+ secrets?: IntegrationSecret[];
489
523
  db?: {
490
524
  /** Inline SerializedSchema, JSON file, or JS module path exporting default/schema. */
491
525
  schema?: unknown;
@@ -624,13 +658,22 @@ interface SmokeOptions {
624
658
  stdout?: Pick<typeof console, "log" | "error">;
625
659
  }
626
660
 
627
- /** The Google OAuth scope that authorizes booking writes (events read/write). */
628
- declare const GOOGLE_CALENDAR_EVENTS_SCOPE = "https://www.googleapis.com/auth/calendar.events";
661
+ /**
662
+ * The calendar half of `odla.config.mjs`: resolving the checked-in Google
663
+ * booking block into a controller payload, and validating it.
664
+ *
665
+ * Split out of config.ts because calendar validation and its four value
666
+ * guards are used by nothing else in config loading — the guards were private
667
+ * to this one validator already.
668
+ */
629
669
  /** Resolve the checked-in calendar block into one controller-safe env payload. */
630
670
  declare function calendarServiceConfig(cfg: LoadedProjectConfig, env: string): CalendarServiceConfig;
631
671
  /** Public Appointment Schedule URL to apply separately from connector config. */
632
672
  declare function calendarBookingPageUrl(cfg: LoadedProjectConfig, env: string): string | null | undefined;
633
673
 
674
+ /** The Google OAuth scope that authorizes booking writes (events read/write). */
675
+ declare const GOOGLE_CALENDAR_EVENTS_SCOPE = "https://www.googleapis.com/auth/calendar.events";
676
+
634
677
  /** Canonical SHA-256 identifier for normalized configuration or a frozen plan. */
635
678
  type ConfigDigest = `sha256:${string}`;
636
679
  /** Overall relationship between repository-managed intent and observed state. */
package/dist/index.js CHANGED
@@ -54,7 +54,7 @@ import {
54
54
  startHostedSecurityJob,
55
55
  surfacePaths,
56
56
  validateInvocation
57
- } from "./chunk-L6YTOTWU.js";
57
+ } from "./chunk-YSQORU5J.js";
58
58
  import {
59
59
  exitCodeFor,
60
60
  redactSecrets
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odla-ai/cli",
3
- "version": "0.32.1",
3
+ "version": "0.33.0",
4
4
  "description": "Agent-operable CLI for odla provisioning, calendar consent and connection lifecycle, System AI administration, Worker secrets, security jobs, and smoke checks.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://odla.ai/docs/packages/cli",