@odla-ai/cli 0.25.3 → 0.25.6

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
@@ -65,6 +65,23 @@ the first provision, use a focused commit/checkpoint, then initialize PM and
65
65
  backfill that evidence immediately after registration. Never use a parallel
66
66
  status diary or put a secret in PM.
67
67
 
68
+ When diagnosing a deployed app, agents can request one parseable observability
69
+ snapshot instead of scraping Studio or composing collector routes themselves:
70
+
71
+ ```bash
72
+ npx odla-ai o11y status --app <appId> --env prod --minutes 60 --json
73
+ ```
74
+
75
+ Schema v3 keeps application RED, reconciled live-sync load/freshness, the exact
76
+ latest protected commit-to-visible canary, collector ingest/scheduler trust,
77
+ and Cloudflare-owned Worker runtime evidence separate. It derives one
78
+ `healthy`, `degraded`, or `unhealthy` verdict with stable reason codes while
79
+ retaining every source response for diagnosis. Provider unavailability,
80
+ adaptive sampling, publication delay, collector loss, quota rejection, stale
81
+ jobs, missing canary configuration, stale probes, and partial
82
+ socket-reconciliation coverage remain explicit fields. Authentication progress
83
+ is stderr-only, so stdout is a single JSON document.
84
+
68
85
  **Runbooks are procedure; JSDoc is API.** What a function takes, returns, and
69
86
  guarantees is documented on the export itself, ships in the installed
70
87
  `.d.ts`, and renders per package at <https://odla.ai/docs>. A runbook will tell
@@ -343,19 +360,22 @@ but does not revoke a token already copied elsewhere, so use Studio revocation
343
360
  when compromise or accidental approval is possible.
344
361
 
345
362
  `smoke` verifies a provisioned environment from local credentials. It fetches
346
- the platform public config, checks the configured AI provider, fetches the live
347
- odla-db schema with the tenant key, compares the fully composed schema entities,
348
- runs a count aggregate against the first entity, and executes declared
349
- integration route probes without credentials. It fails early with a clear message
350
- when provisioning has not written `.odla/credentials.local.json`.
363
+ the platform public config, checks configured service credentials and AI
364
+ provider, exercises schema and aggregate checks only when db is enabled, checks
365
+ owner-visible booking health when calendar is enabled, and executes declared
366
+ integration route probes without credentials. An o11y-only project therefore
367
+ does not need or mint a db key. It fails early with a clear message when
368
+ provisioning has not written `.odla/credentials.local.json`.
351
369
 
352
- ### Read-only Google Calendar
370
+ ### Google Calendar booking
353
371
 
354
372
  Calendar is a platform-custodied connector, not a Google credential stored by
355
373
  the application. Enable both `db` and `calendar`, configure calendar ids per
356
374
  environment, then run normal provision. The first run has two distinct human
357
375
  checkpoints: the odla device code establishes app-owner authority, and the
358
- subsequent server-issued Google page grants `calendar.events.readonly` consent.
376
+ subsequent server-issued Google page grants `calendar.events` and
377
+ `calendar.freebusy` consent so availability and booking writes stay
378
+ server-side.
359
379
 
360
380
  For parity with a static Google Appointment Schedule embed/link, set the public
361
381
  `bookingPageUrl` per environment. Provision applies it through the owner-only
@@ -605,17 +625,13 @@ export default {
605
625
  },
606
626
  calendar: {
607
627
  google: {
608
- calendars: { dev: ["primary"] },
628
+ availabilityCalendars: { dev: ["primary"] },
629
+ // Optional; defaults to the first availability calendar.
630
+ bookingCalendar: { dev: "primary" },
609
631
  bookingPageUrl: {
610
632
  dev: "https://calendar.google.com/calendar/appointments/schedules/…",
611
633
  },
612
- match: {
613
- summaryPrefix: "Intro", // optional
614
- organizerSelf: true, // default true
615
- requireAttendees: true, // default true
616
- },
617
- attendeePolicy: "full", // or "hashed"
618
- // This CLI release always requests calendar.events.readonly.
634
+ // Consent requests calendar.events + calendar.freebusy.
619
635
  },
620
636
  },
621
637
  auth: {
package/REQUIREMENTS.md CHANGED
@@ -68,11 +68,11 @@ Agnacl, but none should mention or special-case Agnacl.
68
68
  - Google consent must be a separate, state-bound platform checkpoint. The CLI may
69
69
  print/open and poll an opaque attempt, but must never receive an OAuth code,
70
70
  access token, or refresh token.
71
- - Read-only calendar intent must request only
72
- `calendar.events.readonly`; scope elevation belongs in a later explicit flow.
73
- - Calendar connect/status/discovery/resync/disconnect must be resumable and
74
- machine-readable. Disconnect must be explicit and disclose that retained
75
- mirror rows can remain stale.
71
+ - Calendar booking consent must request the exact writable event and free/busy
72
+ scopes required by the live proxy; no Google credential belongs in app code.
73
+ - Calendar connect/status/discovery/disconnect must be resumable and
74
+ machine-readable. Disconnect must be explicit and disclose that odla stores
75
+ no mirrored event or attendee rows.
76
76
  - A public per-env `bookingPageUrl` must be validated and applied independently
77
77
  of connector config so static Appointment Schedule embeds need no Google/app
78
78
  credential in browser code.