@alva-ai/toolkit 0.4.2 → 0.7.0-beta.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
@@ -5,7 +5,7 @@ interface AlvaClientConfig {
5
5
  arraysBaseUrl?: string;
6
6
  }
7
7
  interface UserProfile {
8
- id: number;
8
+ id: string;
9
9
  username: string;
10
10
  subscription_tier: 'free' | 'pro';
11
11
  telegram_username: string | null;
@@ -161,6 +161,14 @@ interface CronjobRun {
161
161
  duration_ms: number;
162
162
  credits_used: number;
163
163
  created_at: string;
164
+ /**
165
+ * Hatchet workflow run id captured at trigger time. Populated for runs
166
+ * persisted by recent worker binaries (both naturally-scheduled ticks and
167
+ * triggered runs); empty for older rows. External callers that issued
168
+ * `deploy.trigger()` filter by this field to find the run their request
169
+ * produced.
170
+ */
171
+ workflow_run_id?: string;
164
172
  }
165
173
  interface CronjobRunStats {
166
174
  total_runs: number;
@@ -177,6 +185,15 @@ interface CronjobRunsListResponse {
177
185
  interface CronjobRunLogsResponse {
178
186
  logs: string;
179
187
  }
188
+ interface CronjobTriggerResponse {
189
+ /**
190
+ * Hatchet workflow run id at enqueue. Async — the persisted
191
+ * `cronjob_runs` row appears only after the worker finishes the run.
192
+ * Callers verify completion by polling `deploy.listRuns({cronjob_id})`
193
+ * and matching `runs[].workflow_run_id` against this value.
194
+ */
195
+ workflow_run_id: string;
196
+ }
180
197
  interface FeedReleaseRequest {
181
198
  name: string;
182
199
  version: string;
@@ -201,6 +218,12 @@ interface PlaybookDraftRequest {
201
218
  feed_major?: number;
202
219
  }>;
203
220
  trading_symbols?: string[];
221
+ /**
222
+ * Optional source-template reference in "username/name" form (matches
223
+ * playbook_templates PK, e.g. "alva/screener"). Persisted set-once on
224
+ * the playbook's first draft; subsequent drafts ignore the field.
225
+ */
226
+ template_id?: string;
204
227
  }
205
228
  interface PlaybookDraftResponse {
206
229
  playbook_id: number;
@@ -216,6 +239,14 @@ interface PlaybookReleaseRequest {
216
239
  feed_major?: number;
217
240
  }>;
218
241
  changelog: string;
242
+ /**
243
+ * Owner-attested README location. Server validates the value is one of:
244
+ * - relative: `<name>/README.md`
245
+ * - absolute: `/alva/home/<username>/playbooks/<name>/README.md`
246
+ * The owner is responsible for placing the README at that path on ALFS
247
+ * before publish; the server does not write the file.
248
+ */
249
+ readme_url: string;
219
250
  }
220
251
  interface PlaybookReleaseResponse {
221
252
  playbook_id: number;
@@ -288,6 +319,9 @@ interface ScreenshotParams {
288
319
  url: string;
289
320
  selector?: string;
290
321
  xpath?: string;
322
+ compress?: boolean;
323
+ compressQuality?: number;
324
+ compressMaxWidth?: number;
291
325
  }
292
326
  interface TradingAccount {
293
327
  id: string;
@@ -474,6 +508,53 @@ interface SubscribeFeedPushTargetResponse {
474
508
  interface UnsubscribePushTargetResponse {
475
509
  ok: true;
476
510
  }
511
+ type ChannelGroupSubscriptionTargetType = 'feed' | 'playbook';
512
+ interface ChannelGroupSubscriptionTarget {
513
+ type: ChannelGroupSubscriptionTargetType | '';
514
+ id: number;
515
+ }
516
+ interface ChannelGroupSubscription {
517
+ event_type: string;
518
+ target: ChannelGroupSubscriptionTarget | null;
519
+ subscribed_by_user_id: number;
520
+ enabled: boolean;
521
+ created_at_ms: number;
522
+ updated_at_ms: number;
523
+ }
524
+ interface ChannelGroupCallerInfo {
525
+ user_id: number;
526
+ is_admin: boolean;
527
+ }
528
+ interface ChannelGroupAdminInfo {
529
+ user_id: number;
530
+ username: string;
531
+ telegram_user_id: string;
532
+ telegram_username: string;
533
+ }
534
+ interface ChannelGroupSubscriptionSessionParams {
535
+ session_id: number | string;
536
+ }
537
+ interface ChannelGroupSubscriptionMutationParams extends ChannelGroupSubscriptionSessionParams {
538
+ target_type: ChannelGroupSubscriptionTargetType;
539
+ target_id: number | string;
540
+ }
541
+ interface ChannelGroupSubscriptionContextResponse {
542
+ channel_id: string;
543
+ remote_chat_id: string;
544
+ caller: ChannelGroupCallerInfo;
545
+ admin: ChannelGroupAdminInfo | null;
546
+ subscriptions: ChannelGroupSubscription[];
547
+ }
548
+ interface ChannelGroupSubscriptionListResponse {
549
+ subscriptions: ChannelGroupSubscription[];
550
+ }
551
+ interface ChannelGroupSubscriptionMutationResponse {
552
+ ok: boolean;
553
+ reason: string;
554
+ caller: ChannelGroupCallerInfo;
555
+ admin: ChannelGroupAdminInfo | null;
556
+ subscriptions: ChannelGroupSubscription[];
557
+ }
477
558
 
478
559
  declare class FsResource {
479
560
  private client;
@@ -525,6 +606,21 @@ declare class DeployResource {
525
606
  resume(params: {
526
607
  id: number;
527
608
  }): Promise<void>;
609
+ /**
610
+ * Fire the cronjob workflow once, immediately, bypassing the schedule.
611
+ * Async — returns the Hatchet workflow run id at enqueue. The
612
+ * `cronjob_runs` row appears only after the worker finishes the run;
613
+ * callers verify completion by polling `listRuns({cronjob_id})` and
614
+ * matching `runs[].workflow_run_id` against the returned id.
615
+ *
616
+ * Surfaces backend status as HTTP errors (handled by AlvaClient):
617
+ * - 404 not found / cross-user
618
+ * - 412 cronjob is paused (resume before triggering)
619
+ * - 503 worker workflow handle not yet connected (startup race)
620
+ */
621
+ trigger(params: {
622
+ id: number;
623
+ }): Promise<CronjobTriggerResponse>;
528
624
  listRuns(params: CronjobRunsListParams): Promise<CronjobRunsListResponse>;
529
625
  getRunLogs(params: {
530
626
  cronjob_id: number;
@@ -571,16 +667,40 @@ declare class SdkDocsResource {
571
667
  }): Promise<PartitionSummaryResponse>;
572
668
  }
573
669
 
670
+ type SkillEndpointTier = 'public' | 'alternative' | 'unstructured';
671
+ interface SkillEndpointMetadata {
672
+ skill: string;
673
+ file: string;
674
+ method: string;
675
+ path: string;
676
+ tier: SkillEndpointTier;
677
+ required_subscription_tier: 'free' | 'pro';
678
+ access: 'free_and_pro' | 'pro_only';
679
+ pro_required: boolean;
680
+ }
681
+
682
+ type SkillTierCounts = Partial<Record<SkillEndpointTier, number>>;
683
+
684
+ interface SkillMetadata {
685
+ endpoint_count: number;
686
+ endpoint_tier_counts: SkillTierCounts;
687
+ pro_count: number;
688
+ }
574
689
  interface SkillSummary {
575
690
  name: string;
576
691
  description: string;
692
+ metadata?: SkillMetadata;
693
+ endpoint_tier_counts?: SkillTierCounts;
577
694
  }
578
695
  interface SkillDoc {
579
696
  name: string;
580
697
  description: string;
581
698
  content: string;
699
+ metadata?: SkillMetadata | SkillEndpointMetadata;
700
+ endpoint_metadata?: SkillEndpointMetadata[];
701
+ endpoint_tier_counts?: SkillTierCounts;
582
702
  }
583
- declare class SkillsResource {
703
+ declare class DataSkillsResource {
584
704
  private client;
585
705
  constructor(client: AlvaClient);
586
706
  list(): Promise<{
@@ -595,6 +715,47 @@ declare class SkillsResource {
595
715
  }): Promise<SkillDoc>;
596
716
  }
597
717
 
718
+ interface PlaybookSkillSummary {
719
+ username: string;
720
+ name: string;
721
+ description: string;
722
+ tags: string[];
723
+ creator_uid: number;
724
+ updated_at: string;
725
+ }
726
+ interface PlaybookSkillFileMeta {
727
+ path: string;
728
+ size_bytes: number;
729
+ }
730
+ interface PlaybookSkillMeta extends PlaybookSkillSummary {
731
+ files: PlaybookSkillFileMeta[];
732
+ }
733
+ interface PlaybookSkillFile {
734
+ username: string;
735
+ name: string;
736
+ path: string;
737
+ content: string;
738
+ updated_at: string;
739
+ }
740
+ interface PlaybookSkillTagEntry {
741
+ name: string;
742
+ }
743
+ declare class PlaybookSkillsResource {
744
+ private client;
745
+ constructor(client: AlvaClient);
746
+ list(params?: {
747
+ tag?: string;
748
+ username?: string;
749
+ }): Promise<{
750
+ skills: PlaybookSkillSummary[];
751
+ }>;
752
+ tags(): Promise<{
753
+ tags: PlaybookSkillTagEntry[];
754
+ }>;
755
+ get(id: string): Promise<PlaybookSkillMeta>;
756
+ file(id: string, path: string): Promise<PlaybookSkillFile>;
757
+ }
758
+
598
759
  declare class CommentsResource {
599
760
  private client;
600
761
  constructor(client: AlvaClient);
@@ -738,9 +899,27 @@ declare class PushSubscriptionsResource {
738
899
  list(params?: PushSubscriptionListParams): Promise<PushSubscriptionListResponse>;
739
900
  }
740
901
 
902
+ /**
903
+ * Group push subscriptions for an external channel session.
904
+ *
905
+ * These APIs subscribe the Telegram/Discord group attached to `session_id`
906
+ * to public feed/playbook push events. Mutations are idempotent no-ops unless
907
+ * the authenticated caller is that group's Alva admin.
908
+ */
909
+ declare class ChannelGroupSubscriptionsResource {
910
+ private client;
911
+ constructor(client: AlvaClient);
912
+ context(params: ChannelGroupSubscriptionSessionParams): Promise<ChannelGroupSubscriptionContextResponse>;
913
+ list(params: ChannelGroupSubscriptionSessionParams): Promise<ChannelGroupSubscriptionListResponse>;
914
+ subscribe(params: ChannelGroupSubscriptionMutationParams): Promise<ChannelGroupSubscriptionMutationResponse>;
915
+ unsubscribe(params: ChannelGroupSubscriptionMutationParams): Promise<ChannelGroupSubscriptionMutationResponse>;
916
+ }
917
+
741
918
  interface RequestOptions {
742
919
  query?: Record<string, unknown>;
743
920
  body?: unknown;
921
+ /** Raw JSON body, used when callers must preserve int64 numeric literals. */
922
+ jsonBody?: string;
744
923
  /** Send raw body with application/octet-stream content type (for binary writes). */
745
924
  rawBody?: BodyInit;
746
925
  /** Override the base URL for this request (e.g. the Arrays data-tools endpoint). */
@@ -759,7 +938,8 @@ declare class AlvaClient {
759
938
  private _release?;
760
939
  private _secrets?;
761
940
  private _sdk?;
762
- private _skills?;
941
+ private _dataSkills?;
942
+ private _playbookSkills?;
763
943
  private _comments?;
764
944
  private _remix?;
765
945
  private _screenshot?;
@@ -768,6 +948,7 @@ declare class AlvaClient {
768
948
  private _arraysJwt?;
769
949
  private _notifications?;
770
950
  private _pushSubscriptions?;
951
+ private _channelGroupSubscriptions?;
771
952
  constructor(config: AlvaClientConfig);
772
953
  get fs(): FsResource;
773
954
  get run(): RunResource;
@@ -775,7 +956,8 @@ declare class AlvaClient {
775
956
  get release(): ReleaseResource;
776
957
  get secrets(): SecretsResource;
777
958
  get sdk(): SdkDocsResource;
778
- get skills(): SkillsResource;
959
+ get dataSkills(): DataSkillsResource;
960
+ get playbookSkills(): PlaybookSkillsResource;
779
961
  get comments(): CommentsResource;
780
962
  get remix(): RemixResource;
781
963
  get screenshot(): ScreenshotResource;
@@ -784,6 +966,7 @@ declare class AlvaClient {
784
966
  get arraysJwt(): ArraysJwtResource;
785
967
  get notifications(): NotificationsResource;
786
968
  get pushSubscriptions(): PushSubscriptionsResource;
969
+ get channelGroupSubscriptions(): ChannelGroupSubscriptionsResource;
787
970
  _requireAuth(): void;
788
971
  _request(method: string, path: string, options?: RequestOptions): Promise<unknown>;
789
972
  }
@@ -797,4 +980,4 @@ declare class AlvaError extends Error {
797
980
  /** SDK version, injected at build time from package.json. */
798
981
  declare const VERSION: string;
799
982
 
800
- export { AlvaClient, type AlvaClientConfig, AlvaError, type FsChmodParams, type FsCopyParams, type FsEntry, type FsGrantParams, type FsMkdirParams, type FsRawWriteParams, type FsReadParams, type FsReaddirParams, type FsReaddirResponse, type FsReadlinkParams, type FsRemoveParams, type FsRenameParams, type FsRevokeParams, type FsStat, type FsSymlinkParams, type FsWriteParams, type FsWriteResponse, VERSION };
983
+ export { AlvaClient, type AlvaClientConfig, AlvaError, type ChannelGroupAdminInfo, type ChannelGroupCallerInfo, type ChannelGroupSubscription, type ChannelGroupSubscriptionContextResponse, type ChannelGroupSubscriptionListResponse, type ChannelGroupSubscriptionMutationParams, type ChannelGroupSubscriptionMutationResponse, type ChannelGroupSubscriptionSessionParams, type ChannelGroupSubscriptionTarget, type ChannelGroupSubscriptionTargetType, type FsChmodParams, type FsCopyParams, type FsEntry, type FsGrantParams, type FsMkdirParams, type FsRawWriteParams, type FsReadParams, type FsReaddirParams, type FsReaddirResponse, type FsReadlinkParams, type FsRemoveParams, type FsRenameParams, type FsRevokeParams, type FsStat, type FsSymlinkParams, type FsWriteParams, type FsWriteResponse, type SkillDoc, type SkillEndpointMetadata, type SkillEndpointTier, type SkillMetadata, type SkillSummary, VERSION };
package/dist/index.d.ts CHANGED
@@ -5,7 +5,7 @@ interface AlvaClientConfig {
5
5
  arraysBaseUrl?: string;
6
6
  }
7
7
  interface UserProfile {
8
- id: number;
8
+ id: string;
9
9
  username: string;
10
10
  subscription_tier: 'free' | 'pro';
11
11
  telegram_username: string | null;
@@ -161,6 +161,14 @@ interface CronjobRun {
161
161
  duration_ms: number;
162
162
  credits_used: number;
163
163
  created_at: string;
164
+ /**
165
+ * Hatchet workflow run id captured at trigger time. Populated for runs
166
+ * persisted by recent worker binaries (both naturally-scheduled ticks and
167
+ * triggered runs); empty for older rows. External callers that issued
168
+ * `deploy.trigger()` filter by this field to find the run their request
169
+ * produced.
170
+ */
171
+ workflow_run_id?: string;
164
172
  }
165
173
  interface CronjobRunStats {
166
174
  total_runs: number;
@@ -177,6 +185,15 @@ interface CronjobRunsListResponse {
177
185
  interface CronjobRunLogsResponse {
178
186
  logs: string;
179
187
  }
188
+ interface CronjobTriggerResponse {
189
+ /**
190
+ * Hatchet workflow run id at enqueue. Async — the persisted
191
+ * `cronjob_runs` row appears only after the worker finishes the run.
192
+ * Callers verify completion by polling `deploy.listRuns({cronjob_id})`
193
+ * and matching `runs[].workflow_run_id` against this value.
194
+ */
195
+ workflow_run_id: string;
196
+ }
180
197
  interface FeedReleaseRequest {
181
198
  name: string;
182
199
  version: string;
@@ -201,6 +218,12 @@ interface PlaybookDraftRequest {
201
218
  feed_major?: number;
202
219
  }>;
203
220
  trading_symbols?: string[];
221
+ /**
222
+ * Optional source-template reference in "username/name" form (matches
223
+ * playbook_templates PK, e.g. "alva/screener"). Persisted set-once on
224
+ * the playbook's first draft; subsequent drafts ignore the field.
225
+ */
226
+ template_id?: string;
204
227
  }
205
228
  interface PlaybookDraftResponse {
206
229
  playbook_id: number;
@@ -216,6 +239,14 @@ interface PlaybookReleaseRequest {
216
239
  feed_major?: number;
217
240
  }>;
218
241
  changelog: string;
242
+ /**
243
+ * Owner-attested README location. Server validates the value is one of:
244
+ * - relative: `<name>/README.md`
245
+ * - absolute: `/alva/home/<username>/playbooks/<name>/README.md`
246
+ * The owner is responsible for placing the README at that path on ALFS
247
+ * before publish; the server does not write the file.
248
+ */
249
+ readme_url: string;
219
250
  }
220
251
  interface PlaybookReleaseResponse {
221
252
  playbook_id: number;
@@ -288,6 +319,9 @@ interface ScreenshotParams {
288
319
  url: string;
289
320
  selector?: string;
290
321
  xpath?: string;
322
+ compress?: boolean;
323
+ compressQuality?: number;
324
+ compressMaxWidth?: number;
291
325
  }
292
326
  interface TradingAccount {
293
327
  id: string;
@@ -474,6 +508,53 @@ interface SubscribeFeedPushTargetResponse {
474
508
  interface UnsubscribePushTargetResponse {
475
509
  ok: true;
476
510
  }
511
+ type ChannelGroupSubscriptionTargetType = 'feed' | 'playbook';
512
+ interface ChannelGroupSubscriptionTarget {
513
+ type: ChannelGroupSubscriptionTargetType | '';
514
+ id: number;
515
+ }
516
+ interface ChannelGroupSubscription {
517
+ event_type: string;
518
+ target: ChannelGroupSubscriptionTarget | null;
519
+ subscribed_by_user_id: number;
520
+ enabled: boolean;
521
+ created_at_ms: number;
522
+ updated_at_ms: number;
523
+ }
524
+ interface ChannelGroupCallerInfo {
525
+ user_id: number;
526
+ is_admin: boolean;
527
+ }
528
+ interface ChannelGroupAdminInfo {
529
+ user_id: number;
530
+ username: string;
531
+ telegram_user_id: string;
532
+ telegram_username: string;
533
+ }
534
+ interface ChannelGroupSubscriptionSessionParams {
535
+ session_id: number | string;
536
+ }
537
+ interface ChannelGroupSubscriptionMutationParams extends ChannelGroupSubscriptionSessionParams {
538
+ target_type: ChannelGroupSubscriptionTargetType;
539
+ target_id: number | string;
540
+ }
541
+ interface ChannelGroupSubscriptionContextResponse {
542
+ channel_id: string;
543
+ remote_chat_id: string;
544
+ caller: ChannelGroupCallerInfo;
545
+ admin: ChannelGroupAdminInfo | null;
546
+ subscriptions: ChannelGroupSubscription[];
547
+ }
548
+ interface ChannelGroupSubscriptionListResponse {
549
+ subscriptions: ChannelGroupSubscription[];
550
+ }
551
+ interface ChannelGroupSubscriptionMutationResponse {
552
+ ok: boolean;
553
+ reason: string;
554
+ caller: ChannelGroupCallerInfo;
555
+ admin: ChannelGroupAdminInfo | null;
556
+ subscriptions: ChannelGroupSubscription[];
557
+ }
477
558
 
478
559
  declare class FsResource {
479
560
  private client;
@@ -525,6 +606,21 @@ declare class DeployResource {
525
606
  resume(params: {
526
607
  id: number;
527
608
  }): Promise<void>;
609
+ /**
610
+ * Fire the cronjob workflow once, immediately, bypassing the schedule.
611
+ * Async — returns the Hatchet workflow run id at enqueue. The
612
+ * `cronjob_runs` row appears only after the worker finishes the run;
613
+ * callers verify completion by polling `listRuns({cronjob_id})` and
614
+ * matching `runs[].workflow_run_id` against the returned id.
615
+ *
616
+ * Surfaces backend status as HTTP errors (handled by AlvaClient):
617
+ * - 404 not found / cross-user
618
+ * - 412 cronjob is paused (resume before triggering)
619
+ * - 503 worker workflow handle not yet connected (startup race)
620
+ */
621
+ trigger(params: {
622
+ id: number;
623
+ }): Promise<CronjobTriggerResponse>;
528
624
  listRuns(params: CronjobRunsListParams): Promise<CronjobRunsListResponse>;
529
625
  getRunLogs(params: {
530
626
  cronjob_id: number;
@@ -571,16 +667,40 @@ declare class SdkDocsResource {
571
667
  }): Promise<PartitionSummaryResponse>;
572
668
  }
573
669
 
670
+ type SkillEndpointTier = 'public' | 'alternative' | 'unstructured';
671
+ interface SkillEndpointMetadata {
672
+ skill: string;
673
+ file: string;
674
+ method: string;
675
+ path: string;
676
+ tier: SkillEndpointTier;
677
+ required_subscription_tier: 'free' | 'pro';
678
+ access: 'free_and_pro' | 'pro_only';
679
+ pro_required: boolean;
680
+ }
681
+
682
+ type SkillTierCounts = Partial<Record<SkillEndpointTier, number>>;
683
+
684
+ interface SkillMetadata {
685
+ endpoint_count: number;
686
+ endpoint_tier_counts: SkillTierCounts;
687
+ pro_count: number;
688
+ }
574
689
  interface SkillSummary {
575
690
  name: string;
576
691
  description: string;
692
+ metadata?: SkillMetadata;
693
+ endpoint_tier_counts?: SkillTierCounts;
577
694
  }
578
695
  interface SkillDoc {
579
696
  name: string;
580
697
  description: string;
581
698
  content: string;
699
+ metadata?: SkillMetadata | SkillEndpointMetadata;
700
+ endpoint_metadata?: SkillEndpointMetadata[];
701
+ endpoint_tier_counts?: SkillTierCounts;
582
702
  }
583
- declare class SkillsResource {
703
+ declare class DataSkillsResource {
584
704
  private client;
585
705
  constructor(client: AlvaClient);
586
706
  list(): Promise<{
@@ -595,6 +715,47 @@ declare class SkillsResource {
595
715
  }): Promise<SkillDoc>;
596
716
  }
597
717
 
718
+ interface PlaybookSkillSummary {
719
+ username: string;
720
+ name: string;
721
+ description: string;
722
+ tags: string[];
723
+ creator_uid: number;
724
+ updated_at: string;
725
+ }
726
+ interface PlaybookSkillFileMeta {
727
+ path: string;
728
+ size_bytes: number;
729
+ }
730
+ interface PlaybookSkillMeta extends PlaybookSkillSummary {
731
+ files: PlaybookSkillFileMeta[];
732
+ }
733
+ interface PlaybookSkillFile {
734
+ username: string;
735
+ name: string;
736
+ path: string;
737
+ content: string;
738
+ updated_at: string;
739
+ }
740
+ interface PlaybookSkillTagEntry {
741
+ name: string;
742
+ }
743
+ declare class PlaybookSkillsResource {
744
+ private client;
745
+ constructor(client: AlvaClient);
746
+ list(params?: {
747
+ tag?: string;
748
+ username?: string;
749
+ }): Promise<{
750
+ skills: PlaybookSkillSummary[];
751
+ }>;
752
+ tags(): Promise<{
753
+ tags: PlaybookSkillTagEntry[];
754
+ }>;
755
+ get(id: string): Promise<PlaybookSkillMeta>;
756
+ file(id: string, path: string): Promise<PlaybookSkillFile>;
757
+ }
758
+
598
759
  declare class CommentsResource {
599
760
  private client;
600
761
  constructor(client: AlvaClient);
@@ -738,9 +899,27 @@ declare class PushSubscriptionsResource {
738
899
  list(params?: PushSubscriptionListParams): Promise<PushSubscriptionListResponse>;
739
900
  }
740
901
 
902
+ /**
903
+ * Group push subscriptions for an external channel session.
904
+ *
905
+ * These APIs subscribe the Telegram/Discord group attached to `session_id`
906
+ * to public feed/playbook push events. Mutations are idempotent no-ops unless
907
+ * the authenticated caller is that group's Alva admin.
908
+ */
909
+ declare class ChannelGroupSubscriptionsResource {
910
+ private client;
911
+ constructor(client: AlvaClient);
912
+ context(params: ChannelGroupSubscriptionSessionParams): Promise<ChannelGroupSubscriptionContextResponse>;
913
+ list(params: ChannelGroupSubscriptionSessionParams): Promise<ChannelGroupSubscriptionListResponse>;
914
+ subscribe(params: ChannelGroupSubscriptionMutationParams): Promise<ChannelGroupSubscriptionMutationResponse>;
915
+ unsubscribe(params: ChannelGroupSubscriptionMutationParams): Promise<ChannelGroupSubscriptionMutationResponse>;
916
+ }
917
+
741
918
  interface RequestOptions {
742
919
  query?: Record<string, unknown>;
743
920
  body?: unknown;
921
+ /** Raw JSON body, used when callers must preserve int64 numeric literals. */
922
+ jsonBody?: string;
744
923
  /** Send raw body with application/octet-stream content type (for binary writes). */
745
924
  rawBody?: BodyInit;
746
925
  /** Override the base URL for this request (e.g. the Arrays data-tools endpoint). */
@@ -759,7 +938,8 @@ declare class AlvaClient {
759
938
  private _release?;
760
939
  private _secrets?;
761
940
  private _sdk?;
762
- private _skills?;
941
+ private _dataSkills?;
942
+ private _playbookSkills?;
763
943
  private _comments?;
764
944
  private _remix?;
765
945
  private _screenshot?;
@@ -768,6 +948,7 @@ declare class AlvaClient {
768
948
  private _arraysJwt?;
769
949
  private _notifications?;
770
950
  private _pushSubscriptions?;
951
+ private _channelGroupSubscriptions?;
771
952
  constructor(config: AlvaClientConfig);
772
953
  get fs(): FsResource;
773
954
  get run(): RunResource;
@@ -775,7 +956,8 @@ declare class AlvaClient {
775
956
  get release(): ReleaseResource;
776
957
  get secrets(): SecretsResource;
777
958
  get sdk(): SdkDocsResource;
778
- get skills(): SkillsResource;
959
+ get dataSkills(): DataSkillsResource;
960
+ get playbookSkills(): PlaybookSkillsResource;
779
961
  get comments(): CommentsResource;
780
962
  get remix(): RemixResource;
781
963
  get screenshot(): ScreenshotResource;
@@ -784,6 +966,7 @@ declare class AlvaClient {
784
966
  get arraysJwt(): ArraysJwtResource;
785
967
  get notifications(): NotificationsResource;
786
968
  get pushSubscriptions(): PushSubscriptionsResource;
969
+ get channelGroupSubscriptions(): ChannelGroupSubscriptionsResource;
787
970
  _requireAuth(): void;
788
971
  _request(method: string, path: string, options?: RequestOptions): Promise<unknown>;
789
972
  }
@@ -797,4 +980,4 @@ declare class AlvaError extends Error {
797
980
  /** SDK version, injected at build time from package.json. */
798
981
  declare const VERSION: string;
799
982
 
800
- export { AlvaClient, type AlvaClientConfig, AlvaError, type FsChmodParams, type FsCopyParams, type FsEntry, type FsGrantParams, type FsMkdirParams, type FsRawWriteParams, type FsReadParams, type FsReaddirParams, type FsReaddirResponse, type FsReadlinkParams, type FsRemoveParams, type FsRenameParams, type FsRevokeParams, type FsStat, type FsSymlinkParams, type FsWriteParams, type FsWriteResponse, VERSION };
983
+ export { AlvaClient, type AlvaClientConfig, AlvaError, type ChannelGroupAdminInfo, type ChannelGroupCallerInfo, type ChannelGroupSubscription, type ChannelGroupSubscriptionContextResponse, type ChannelGroupSubscriptionListResponse, type ChannelGroupSubscriptionMutationParams, type ChannelGroupSubscriptionMutationResponse, type ChannelGroupSubscriptionSessionParams, type ChannelGroupSubscriptionTarget, type ChannelGroupSubscriptionTargetType, type FsChmodParams, type FsCopyParams, type FsEntry, type FsGrantParams, type FsMkdirParams, type FsRawWriteParams, type FsReadParams, type FsReaddirParams, type FsReaddirResponse, type FsReadlinkParams, type FsRemoveParams, type FsRenameParams, type FsRevokeParams, type FsStat, type FsSymlinkParams, type FsWriteParams, type FsWriteResponse, type SkillDoc, type SkillEndpointMetadata, type SkillEndpointTier, type SkillMetadata, type SkillSummary, VERSION };