@lotics/cli 0.157.0 → 0.163.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.
@@ -1,4 +1,3 @@
1
- import type { ContractConfigEntry, KnowledgeUpgradeEntry, ModifiedArtifact, PackageContentBinding, UpgradeResolutions } from "./package_content_types";
2
1
  /** One sort key forwarded to the app query RPC (wire shape of a `TableRecordSort` entry). */
3
2
  export interface AppQuerySortKey {
4
3
  field_key: string;
@@ -121,22 +120,6 @@ export interface ExtractFinding {
121
120
  area: string;
122
121
  message: string;
123
122
  }
124
- /** A package's kind — a full app blueprint, or a standalone content package. */
125
- export type PackageKind = "app" | "content";
126
- /** One workspace's installation of a package's content (the standalone anchor). */
127
- export interface ContentInstallation {
128
- id: string;
129
- workspace_id: string;
130
- package_id: string;
131
- package_version: number;
132
- /** Set when the content arrived bundled with an app install; null for a standalone content package. */
133
- app_id: string | null;
134
- /** The namespaced content binding: `knowledge` (alias → `kdc_` id) + `templates` (alias → `tmpl_` id). */
135
- binding: PackageContentBinding;
136
- installed_by: string | null;
137
- created_at: string;
138
- updated_at: string;
139
- }
140
123
  /** Advisory knowledge warnings surfaced by install/upgrade (never block). */
141
124
  export interface KnowledgeWarnings {
142
125
  /** `knowledge_expects` doc names with no matching workspace doc. */
@@ -211,8 +194,21 @@ export declare class LoticsClient {
211
194
  id: string;
212
195
  deleted: boolean;
213
196
  }>;
214
- login(): Promise<{
197
+ login(body?: {
198
+ /**
199
+ * Return the sign-in link instead of mailing it — the browser handoff.
200
+ *
201
+ * Grants nothing new: an API key is member-bound, so the link mints a
202
+ * session for exactly the identity this client already holds. The returned
203
+ * URL IS a credential though: one-time, short-lived, and not for anywhere it
204
+ * persists.
205
+ */
206
+ return_link?: boolean;
207
+ /** Relative path to land on after signing in; server-validated as relative. */
208
+ redirect_path?: string;
209
+ }): Promise<{
215
210
  email: string;
211
+ url?: string;
216
212
  }>;
217
213
  listTools(): Promise<{
218
214
  tools: string[];
@@ -307,22 +303,6 @@ export declare class LoticsClient {
307
303
  query_aliases?: string[];
308
304
  workflow_aliases?: string[];
309
305
  }> | null;
310
- /**
311
- * Installation-level customization config values (the `useConfig()`
312
- * source). Null/undefined for a bespoke app. The dev harness serves these
313
- * through the `context` op for production parity.
314
- */
315
- config?: Record<string, string | number | boolean> | null;
316
- /** Package registry id this app was installed from; null for a bespoke/ejected app. */
317
- package_id?: string | null;
318
- /** The installed package version (upgrade pin); null for a bespoke/ejected app. */
319
- package_version?: number | null;
320
- /**
321
- * Package install join — per-namespace alias→id maps (entities/fields/
322
- * options/templates/roles) plus the `workflows` artifact registry. Null for
323
- * a bespoke app. Used to preview what `package uninstall` will archive.
324
- */
325
- binding?: Record<string, Record<string, string>> | null;
326
306
  }>;
327
307
  createApp(body: {
328
308
  name: string;
@@ -334,117 +314,6 @@ export declare class LoticsClient {
334
314
  workspace_id: string;
335
315
  current_version_id: string | null;
336
316
  }>;
337
- /**
338
- * Install a package version into the current workspace — ONE endpoint,
339
- * kind-branched into a discriminated response (`kind`). An `app` package
340
- * scaffolds the data model / deploys / materializes and returns the installation
341
- * app (+ advisory knowledge warnings); a `content` package installs only its
342
- * doc corpus and returns the installation row. `bind_to` (content only)
343
- * resolves a name collision by adopting an existing same-named doc as
344
- * package-managed. `version` omitted installs the latest published version.
345
- */
346
- installPackage(package_id: string, body: {
347
- version?: number;
348
- /** Content-kind only: consent to adopt a same-named workspace doc on a knowledge collision. */
349
- bind_to?: Record<string, string>;
350
- /** App-kind only: per-knob config overrides applied over the contract defaults at install. */
351
- config?: Record<string, string | number | boolean>;
352
- }): Promise<{
353
- kind: "app";
354
- app: {
355
- id: string;
356
- name: string;
357
- workspace_id: string;
358
- package_id: string | null;
359
- package_version: number | null;
360
- current_version_id: string | null;
361
- };
362
- knowledge_warnings: KnowledgeWarnings;
363
- } | {
364
- kind: "content";
365
- installation: ContentInstallation;
366
- warnings: KnowledgeWarnings;
367
- }>;
368
- /**
369
- * Uninstall a standalone content package — delete the installation row. By
370
- * default the package-bound docs are ARCHIVED; `keep_content` retains them as
371
- * ordinary workspace docs. Admin-only. Backs `opctl uninstall`.
372
- */
373
- uninstallContentPackage(installation_id: string, opts?: {
374
- keep_content?: boolean;
375
- }): Promise<{
376
- installation_id: string;
377
- archived_doc_ids: string[];
378
- archived_template_ids: string[];
379
- deleted: true;
380
- }>;
381
- /**
382
- * Preview upgrading a standalone content installation — the knowledge namespace's
383
- * per-alias `entries` (added/changed/removed/drifted + a `modified` flag) plus the
384
- * consent-requiring `templates` (a template the target changed whose live content
385
- * was locally edited; a clean one auto-updates and is absent). No writes.
386
- * Admin-only.
387
- */
388
- previewContentInstallationUpgrade(installation_id: string, opts?: {
389
- version?: number;
390
- }): Promise<{
391
- installation_id: string;
392
- package_id: string;
393
- from_version: number;
394
- to_version: number;
395
- changelog: string | null;
396
- update_available: boolean;
397
- entries: KnowledgeUpgradeEntry[];
398
- templates: ModifiedArtifact[];
399
- }>;
400
- /**
401
- * Apply a standalone content upgrade — propagate the target version's content per
402
- * the resolutions (`knowledge`: a modified change/removal or drift needs consent;
403
- * `templates`: a locally-edited changed template takes revert|keep), then advance
404
- * the pin + binding. Returns the updated installation row. Admin-only.
405
- */
406
- applyContentInstallationUpgrade(installation_id: string, body: {
407
- version?: number;
408
- resolutions?: UpgradeResolutions;
409
- }): Promise<ContentInstallation>;
410
- /**
411
- * List a workspace's package-managed knowledge installations, each folded with
412
- * registry status (name, kind, official badge, latest version, update-available).
413
- * Member-accessible (workspace-scoped); backs the settings "Managed by" badge.
414
- */
415
- listContentInstallations(workspace_id: string): Promise<Array<ContentInstallation & {
416
- package_registry: {
417
- name: string;
418
- kind: PackageKind;
419
- is_official: boolean;
420
- latest_version: number;
421
- update_available: boolean;
422
- } | null;
423
- }>>;
424
- /**
425
- * Uninstall a package installation (backs `opctl uninstall`). Does
426
- * everything DELETE does plus archives the installation's lifecycle
427
- * artifacts; with `archive_tables` it also archives the scaffolded entity
428
- * tables — refused server-side unless this installation created them
429
- * (provenance) and nothing else references them. Admin-only.
430
- */
431
- uninstallAppPackage(app_id: string, body: {
432
- archive_tables: boolean;
433
- }): Promise<{
434
- id: string;
435
- uninstalled: boolean;
436
- archived_table_ids: string[];
437
- }>;
438
- /**
439
- * Partial-merge a package installation's config (backs `opctl package config
440
- * --set`). Only the provided keys change; validated against the installed
441
- * contract. Returns the full effective config. Admin-only.
442
- */
443
- updateAppPackageConfig(app_id: string, body: {
444
- config: Record<string, string | number | boolean>;
445
- }): Promise<{
446
- config: Record<string, string | number | boolean>;
447
- }>;
448
317
  /**
449
318
  * Retire (or `undo` un-retire) a registry package (backs `lotics app
450
319
  * unpublish` — the endpoint/audit action keep the `retire` name to avoid API
@@ -460,67 +329,88 @@ export declare class LoticsClient {
460
329
  retired_at: string | null;
461
330
  }>;
462
331
  /**
463
- * Eject an installation from its package — re-deploy the pinned version's
464
- * source as a workspace-owned app version, then sever the package link
465
- * (clears `package_id`/`package_version`, stamps `ejected_at`). One-way: the
466
- * app becomes a normal bespoke app and can no longer be upgraded. Returns the
467
- * resulting app.
332
+ * The starters this organization can copy — Lotics-reviewed ones plus its own,
333
+ * never a catalogue of everything published. The server returns exactly what
334
+ * instantiate would accept, so the list cannot offer a refusal. Admin-only.
468
335
  */
469
- ejectPackage(app_id: string): Promise<{
336
+ listStarters(): Promise<Array<{
470
337
  id: string;
471
338
  name: string;
472
- workspace_id: string;
473
- current_version_id: string | null;
474
- }>;
339
+ description: string | null;
340
+ latest_version: number;
341
+ is_official: boolean;
342
+ owned_by_caller?: boolean;
343
+ }>>;
475
344
  /**
476
- * Fleet upgrade — bring every installation of a package across the CALLER'S
477
- * org to the target version (latest when omitted) in one call. Hands-off
478
- * applies only where the preview is clean; installations with breaking/
479
- * drift/modified-core findings are skipped and reported for the normal
480
- * per-installation consent flow. Backs `opctl upgrade <package_id>` (fleet).
481
- * Admin-only; org-scoped (no workspace header needed).
345
+ * Copy a starter into the current workspace.
346
+ *
347
+ * Server-side this scaffolds the schema, creates the templates, docs and
348
+ * sample records, creates a BESPOKE app and materializes onto it — then stops.
349
+ * It deploys nothing: a starter ships source only, and the source has to be
350
+ * built where codegen can bake THIS workspace's field ids. `bundle_url` is a
351
+ * presigned GET of that source, and finishing the job is the caller's half.
352
+ * Admin-only.
482
353
  */
354
+ instantiateStarter(starter_id: string, body: {
355
+ version?: number;
356
+ no_sample_data?: boolean;
357
+ adopt?: boolean;
358
+ }): Promise<{
359
+ app_id: string | null;
360
+ starter_id: string;
361
+ version: number;
362
+ bundle_url: string | null;
363
+ binding: Record<string, Record<string, string>>;
364
+ sample_record_ids: Record<string, string[]>;
365
+ knowledge_warnings: {
366
+ missing_expected_docs: string[];
367
+ };
368
+ }>;
483
369
  /**
484
- * Yank / unyank a published package version — refuses NEW installs/upgrades/
485
- * adopts targeting it; pinned installations keep running. Owner-org
486
- * admin-only. Backs `opctl package yank`.
370
+ * Which starter this app is the origin of. 404 when it has published none.
371
+ *
372
+ * The app row carries no pin, so this is the only app→starter direction there
373
+ * is — provenance lives on the published version. Admin-only.
487
374
  */
488
- yankPackageVersion(package_id: string, version: number, yanked: boolean): Promise<{
489
- package_id: string;
490
- version: number;
491
- yanked_at: string | null;
375
+ getAppOriginStarter(app_id: string): Promise<{
376
+ starter_id: string;
492
377
  latest_version: number;
493
378
  }>;
494
- fleetUpgradePackage(package_id: string, body: {
495
- version?: number;
379
+ /**
380
+ * Capture live records from this workspace as a starter's sample data.
381
+ *
382
+ * The alias-keyed shape is produced SERVER-side, because the contract alias
383
+ * space is minted by extract and exists nowhere a project can read it. Pure
384
+ * read — the caller writes the returned files into the project and reviews
385
+ * them, which matters: these rows are copied verbatim into every workspace
386
+ * that takes the starter. Admin-only.
387
+ */
388
+ captureStarterFixtures(app_id: string, opts?: {
389
+ entities?: string[];
390
+ limit?: number;
496
391
  }): Promise<{
497
- package_id: string;
498
- target_version: number;
499
- installations: Array<{
500
- app_id: string;
501
- app_name: string;
502
- workspace_id: string;
503
- workspace_name: string;
504
- from_version: number | null;
505
- outcome: "upgraded" | "up_to_date" | "skipped" | "failed";
506
- blockers?: {
507
- breaking: number;
508
- drift: number;
509
- modified: number;
510
- knowledge: number;
392
+ app_id: string;
393
+ available_entity_aliases: string[];
394
+ captured: Array<{
395
+ entity_alias: string;
396
+ content_ref: string;
397
+ file: {
398
+ rows: Array<{
399
+ ref: string;
400
+ fields: Record<string, unknown>;
401
+ }>;
511
402
  };
512
- message?: string;
403
+ notes: string[];
513
404
  }>;
514
405
  }>;
515
406
  /**
516
- * Fetch a registry app package's metadata (incl. `kind`, `latest_version` and
517
- * the Lotics-backed `is_official` trust badge). Admin-only; cross-tenant by id.
407
+ * Fetch a registry starter's metadata (`latest_version` and the Lotics-backed
408
+ * `is_official` trust badge). Admin-only; cross-tenant by id.
518
409
  */
519
410
  getPackage(package_id: string): Promise<{
520
411
  id: string;
521
412
  name: string;
522
413
  description: string | null;
523
- kind: PackageKind;
524
414
  latest_version: number;
525
415
  is_official: boolean;
526
416
  retired_at: string | null;
@@ -539,77 +429,6 @@ export declare class LoticsClient {
539
429
  created_at: string;
540
430
  }>;
541
431
  }>;
542
- /**
543
- * Upgrade a package installation to a newer published version — extends the
544
- * binding additively, re-materializes the target version's
545
- * queries/workflows/agents (preserving workspace overlay), prunes dropped
546
- * package artifacts, and bumps the pin. `version` omitted upgrades to the
547
- * latest. Returns the resulting app. Admin-only.
548
- */
549
- upgradePackage(app_id: string, body: {
550
- version?: number;
551
- /**
552
- * ONE map, one namespaced grammar, per preview finding: a drifted binding
553
- * entry (`<namespace>.<alias>`) takes `"recreate"` or `{ bind_to }`; a
554
- * modified artifact (`<kind>.<alias>`) takes `"revert"` or `"keep"`; a
555
- * bundled knowledge doc (`knowledge.<alias>`) takes
556
- * `apply|keep|archive|recreate|unbind` or `{ bind_to: "<kdc_id>" }`; and
557
- * `roles.<alias> = { bind_to: "<grp_id>" }` re-points a LIVE role.
558
- * Required for every finding — anything unresolved refuses the upgrade.
559
- */
560
- resolutions?: UpgradeResolutions;
561
- }): Promise<{
562
- id: string;
563
- name: string;
564
- workspace_id: string;
565
- package_id: string | null;
566
- package_version: number | null;
567
- current_version_id: string | null;
568
- }>;
569
- /**
570
- * Preview a package upgrade — the additive plan, informational removals,
571
- * breaking contract changes, the binding drift report, and the modified-core
572
- * report — with no writes. Admin-only.
573
- */
574
- previewPackageUpgrade(app_id: string, opts?: {
575
- version?: number;
576
- }): Promise<{
577
- app_id: string;
578
- package_id: string;
579
- from_version: number;
580
- to_version: number;
581
- changelog: string | null;
582
- diff: {
583
- added: Record<string, unknown[]>;
584
- removed: Record<string, unknown[]>;
585
- breaking: Array<{
586
- entity: string;
587
- alias: string;
588
- kind: "field_type" | "link_target";
589
- from: string;
590
- to: string;
591
- }>;
592
- changed: {
593
- templates: string[];
594
- };
595
- };
596
- drift: Array<{
597
- namespace: string;
598
- alias: string;
599
- id: string;
600
- }>;
601
- modified: Array<{
602
- kind: string;
603
- alias: string;
604
- baseline_unknown?: boolean;
605
- }>;
606
- /**
607
- * Bundled package-managed knowledge docs the version bump adds/changes/
608
- * removes/drifts — the app-install analogue of a standalone knowledge
609
- * upgrade's `entries`. Consent-requiring docs resolve via `knowledge.<alias>` resolutions.
610
- */
611
- knowledge: KnowledgeUpgradeEntry[];
612
- }>;
613
432
  /**
614
433
  * Workspace-wide dangling-reference sweep — active app/workflow artifacts
615
434
  * whose prefixed schema ids no longer resolve. Backs
@@ -624,52 +443,6 @@ export declare class LoticsClient {
624
443
  name: string;
625
444
  };
626
445
  }>>;
627
- /**
628
- * Health check for a package installation — version pin vs. registry latest,
629
- * binding drift, and locally modified core artifacts. Read-only; backs
630
- * `opctl package doctor`. Admin-only.
631
- */
632
- getPackageHealth(app_id: string): Promise<{
633
- app_id: string;
634
- package_id: string;
635
- package_name: string;
636
- /** The author's origin copy (installation #1) — doctor frames modified core as staged release work, not drift. */
637
- is_origin: boolean;
638
- installed_version: number;
639
- latest_version: number;
640
- update_available: boolean;
641
- drift: Array<{
642
- namespace: string;
643
- alias: string;
644
- id: string;
645
- }>;
646
- modified: Array<{
647
- kind: string;
648
- alias: string;
649
- }>;
650
- /** Package-managed knowledge docs whose bound id no longer resolves (recreate/unbind at upgrade). */
651
- knowledge_drift: Array<{
652
- alias: string;
653
- name: string;
654
- doc_id: string | null;
655
- }>;
656
- /** Package-managed knowledge docs the workspace edited since install (apply/keep at upgrade). */
657
- knowledge_modified: Array<{
658
- alias: string;
659
- name: string;
660
- doc_id: string | null;
661
- }>;
662
- /** `knowledge_expects` names the package's agents route to but it does not own (advisory). */
663
- missing_expected_docs: string[];
664
- /** Orphan duplicate link fields (unbound links between binding-covered tables). Always empty on an origin. */
665
- orphan_duplicate_links: Array<{
666
- field_id: string;
667
- field_name: string;
668
- table_id: string;
669
- table_name: string;
670
- target_table_id: string;
671
- }>;
672
- }>;
673
446
  /**
674
447
  * Preview a release — the dry run behind `opctl app release`. Runs the
675
448
  * binding-aware extract of the origin (aliases stable through the app's current
@@ -686,8 +459,6 @@ export declare class LoticsClient {
686
459
  alias: string;
687
460
  doc_id: string;
688
461
  }>;
689
- /** Config knob declarations re-declaring the config (from the manifest). */
690
- config?: ContractConfigEntry[];
691
462
  }): Promise<{
692
463
  package_id: string;
693
464
  version: number;
@@ -699,12 +470,6 @@ export declare class LoticsClient {
699
470
  removed: string[];
700
471
  changed: string[];
701
472
  };
702
- /** Absent from a pre-declaration server (deploy skew) — treat as empty delta. */
703
- config?: {
704
- added: string[];
705
- removed: string[];
706
- changed: string[];
707
- };
708
473
  findings: ExtractFinding[];
709
474
  }>;
710
475
  /**
@@ -724,8 +489,6 @@ export declare class LoticsClient {
724
489
  alias: string;
725
490
  doc_id: string;
726
491
  }>;
727
- /** Config knob declarations re-declaring the config (from the manifest). */
728
- config?: ContractConfigEntry[];
729
492
  }): Promise<{
730
493
  package_id: string;
731
494
  version: number;
@@ -737,12 +500,6 @@ export declare class LoticsClient {
737
500
  removed: string[];
738
501
  changed: string[];
739
502
  };
740
- /** Absent from a pre-declaration server (deploy skew) — treat as empty delta. */
741
- config?: {
742
- added: string[];
743
- removed: string[];
744
- changed: string[];
745
- };
746
503
  }>;
747
504
  /**
748
505
  * Dry-run preview of a first-release — the `GET` behind `opctl app publish`
@@ -762,8 +519,6 @@ export declare class LoticsClient {
762
519
  alias: string;
763
520
  doc_id: string;
764
521
  }>;
765
- /** Config knob declarations v1 would freeze (from the manifest's `lotics.config`). */
766
- config?: ContractConfigEntry[];
767
522
  }): Promise<{
768
523
  app_id: string;
769
524
  package_name: string;
@@ -798,8 +553,6 @@ export declare class LoticsClient {
798
553
  alias: string;
799
554
  doc_id: string;
800
555
  }>;
801
- /** Config knob declarations v1 freezes (from the manifest's `lotics.config`). */
802
- config?: ContractConfigEntry[];
803
556
  }): Promise<{
804
557
  package_id: string;
805
558
  version: number;
@@ -883,12 +636,6 @@ export declare class LoticsClient {
883
636
  image: string | null;
884
637
  }>;
885
638
  }>;
886
- /** A package installation's alias→id maps (fields/options/roles) — the app's runtime F/OPT resolution. */
887
- appBinding(app_id: string): Promise<{
888
- fields: Record<string, string>;
889
- options: Record<string, string>;
890
- roles: Record<string, string>;
891
- }>;
892
639
  /**
893
640
  * Resolve the full option set (key, label, color) of a named query's select
894
641
  * columns — the picker companion to `appQuery`. Mirrors