@convilyn/sdk 0.2.0 → 0.4.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
@@ -22,10 +22,29 @@
22
22
  * `code` / `statusCode` fields for typed handling.
23
23
  */
24
24
  type ErrorDetails = Record<string, unknown>;
25
+ /**
26
+ * Well-known brand for {@link ConvilynError}. `Symbol.for` resolves to the
27
+ * *same* symbol from the global registry regardless of which module instance
28
+ * (ESM vs. CJS) created it, so {@link isConvilynError} stays reliable even
29
+ * when a process ends up loading both entry points of this package (a classic
30
+ * Node.js dual-package hazard where `instanceof` across the two module graphs
31
+ * can false-negative). Prefer the guard function over `instanceof` unless you
32
+ * can guarantee a single module graph.
33
+ */
34
+ declare const CONVILYN_ERROR_BRAND: unique symbol;
25
35
  /** Base class for every error this SDK throws. */
26
36
  declare class ConvilynError extends Error {
37
+ /** @internal brand marker — see {@link isConvilynError} */
38
+ readonly [CONVILYN_ERROR_BRAND] = true;
27
39
  constructor(message: string);
28
40
  }
41
+ /**
42
+ * Reliable `err instanceof ConvilynError` replacement across module graphs.
43
+ * Use this (not `instanceof`) when the error may have crossed an ESM/CJS
44
+ * boundary — e.g. a dependency `require()`s this package while your own code
45
+ * `import`s it.
46
+ */
47
+ declare function isConvilynError(err: unknown): err is ConvilynError;
29
48
  /** Authentication / authorization failed before any HTTP call. */
30
49
  declare class AuthError extends ConvilynError {
31
50
  constructor(message: string);
@@ -123,10 +142,17 @@ declare class GoalJobTimeoutError extends ConvilynError {
123
142
  readonly jobSpecId: string;
124
143
  readonly elapsed: number;
125
144
  readonly timeout: number;
145
+ /**
146
+ * `'total'` — the overall `timeout` budget lapsed; `'idle'` —
147
+ * `idleTimeout` lapsed with no status/progress change (the job may still
148
+ * be healthy on a long phase; `retrieve()` before assuming failure).
149
+ */
150
+ readonly reason: 'total' | 'idle';
126
151
  constructor(opts: {
127
152
  jobSpecId: string;
128
153
  elapsed: number;
129
154
  timeout: number;
155
+ reason?: 'total' | 'idle';
130
156
  });
131
157
  }
132
158
  /** Raised when the goal event stream cannot proceed. */
@@ -234,6 +260,35 @@ interface GoalJob {
234
260
  declare function isGoalJobTerminal(job: Pick<GoalJob, 'status'>): boolean;
235
261
  /** True when the agent is blocked waiting on the user (`slots_pending`). */
236
262
  declare function goalJobNeedsInput(job: Pick<GoalJob, 'status'>): boolean;
263
+ /**
264
+ * One output artifact produced by a goal (agentic) job. `downloadUrl` is a
265
+ * presigned storage URL valid for one hour from issuance — re-call
266
+ * `goals.artifacts()` (or `goals.downloadArtifactUrl()`) for a fresh one
267
+ * instead of persisting it.
268
+ */
269
+ interface Artifact {
270
+ readonly artifactId: string;
271
+ readonly fileName: string;
272
+ readonly mimeType: string;
273
+ readonly sizeBytes: number;
274
+ readonly downloadUrl: string | null;
275
+ readonly artifactType: string | null;
276
+ readonly platform: string | null;
277
+ readonly metadata: Record<string, unknown> | null;
278
+ readonly isPrimary: boolean;
279
+ readonly description: string;
280
+ }
281
+ /**
282
+ * A freshly minted presigned download URL for a single artifact. `expiresAt`
283
+ * marks the end of the URL's 1-hour validity window.
284
+ */
285
+ interface ArtifactDownload {
286
+ readonly downloadUrl: string;
287
+ readonly fileName: string;
288
+ readonly sizeBytes: number;
289
+ readonly mimeType: string;
290
+ readonly expiresAt: Date;
291
+ }
237
292
  /** Discriminator for a server-sent event in a goal execution stream. */
238
293
  type GoalEventType = 'tool_started' | 'tool_finished' | 'agent_step_started' | 'agent_step_finished' | 'orchestration_transition' | 'status' | 'progress' | 'completed' | 'failed' | 'slot_needed' | 'keepalive' | 'agent_text' | 'agent_text_done';
239
294
  /** The known event `type` values (forward-compat: pre-listed so the SDK need
@@ -297,6 +352,33 @@ interface WorkflowSearchPage {
297
352
  readonly items: WorkflowSummary[];
298
353
  readonly cursor: string | null;
299
354
  }
355
+ /**
356
+ * One built-in AI workflow from the platform catalog — distinct from
357
+ * the user-published community listing. Pass `workflowId` as
358
+ * `goals.start({ workflowId })` to run it directly.
359
+ *
360
+ * `tier` names the subscription tier the workflow is designed for (`null` =
361
+ * free); `freeTierAllowed` is a tri-state gate hint — only an explicit `false`
362
+ * means a Free-tier run is blocked.
363
+ */
364
+ interface CatalogWorkflow {
365
+ readonly workflowId: string;
366
+ readonly name: string;
367
+ readonly description: string;
368
+ readonly icon: string | null;
369
+ readonly supportedInputTypes: string[];
370
+ readonly supportedInputFormats: string[] | null;
371
+ readonly category: string;
372
+ readonly requiredSlotCount: number;
373
+ readonly subcategory: string | null;
374
+ readonly skuGroup: string | null;
375
+ readonly status: string;
376
+ readonly supportedLocales: string[] | null;
377
+ readonly maxInputSizeBytes: number | null;
378
+ readonly minFileCount: number | null;
379
+ readonly tier: string | null;
380
+ readonly freeTierAllowed: boolean | null;
381
+ }
300
382
  /** Result of `workflows.like` — toggle state + fresh count. */
301
383
  interface LikeResponse {
302
384
  readonly liked: boolean;
@@ -680,6 +762,17 @@ declare class Files {
680
762
  * `path` (Node) or `content` (bytes/string).
681
763
  */
682
764
  upload(options: UploadOptions): Promise<File>;
765
+ /**
766
+ * Delete an uploaded file's cloud copy (storage object + metadata record).
767
+ *
768
+ * Only the uploader can delete; a missing or unowned `fileId` surfaces as
769
+ * a 404 `APIError` and a file attached to a still-running job as a 409
770
+ * (`FILE_IN_USE`). The platform deletes input files automatically ~1 hour
771
+ * after upload anyway — call this when you want the cloud copy gone
772
+ * deterministically the moment your workflow is done (e.g. privacy-
773
+ * sensitive documents on an edge device). Port of Python `files.delete`.
774
+ */
775
+ delete(fileId: string): Promise<void>;
683
776
  }
684
777
 
685
778
  /**
@@ -714,6 +807,14 @@ interface StartGoalOptions {
714
807
  interface GoalWaitOptions {
715
808
  timeout?: number;
716
809
  pollInterval?: number;
810
+ /**
811
+ * Seconds tolerated WITHOUT any status or progress change before the wait
812
+ * gives up with `reason: 'idle'`. An agentic run's analyze/execute phases
813
+ * can legitimately take many minutes, so raise `timeout` to your hard
814
+ * deadline and bound stalls with this instead — a job that keeps advancing
815
+ * holds the loop open. Omitted = disabled (total `timeout` only).
816
+ */
817
+ idleTimeout?: number;
717
818
  }
718
819
  /** Constructor options + test seams for {@link Goals}. */
719
820
  interface GoalsResourceOptions {
@@ -748,7 +849,15 @@ declare class Goals {
748
849
  fillSlots(jobSpecId: string, answers: Record<string, unknown>, options?: {
749
850
  expectedVersion?: number;
750
851
  }): Promise<GoalJob>;
751
- /** Confirm a slots-filled job, queueing it for execution. */
852
+ /**
853
+ * Confirm a slots-filled job, queueing it for execution.
854
+ *
855
+ * `expectedVersion` is optional — the server re-reads the current version
856
+ * at submit time regardless, so most callers should simply omit it. The
857
+ * request always carries a JSON object (`{}` when empty): older backend
858
+ * builds declare the confirm body as a required parameter and reject a
859
+ * body-less POST with 422 before the handler runs.
860
+ */
752
861
  confirm(jobSpecId: string, options?: {
753
862
  expectedVersion?: number;
754
863
  }): Promise<GoalJob>;
@@ -759,6 +868,29 @@ declare class Goals {
759
868
  rerunMode?: 'retry_same_thread' | 'fresh_rerun';
760
869
  reason?: string;
761
870
  }): Promise<GoalJob>;
871
+ /**
872
+ * List a completed job's output artifacts with fresh download URLs.
873
+ *
874
+ * Available once the job is terminal-successful (`completed` or `partial`);
875
+ * any other status surfaces the backend's 400 as an `APIError`. Each
876
+ * artifact's `downloadUrl` is presigned and valid for one hour — re-call
877
+ * this method for fresh URLs rather than persisting one.
878
+ */
879
+ artifacts(jobSpecId: string): Promise<Artifact[]>;
880
+ /**
881
+ * Mint a fresh presigned download URL for one artifact. Prefer this over
882
+ * reusing a stale {@link Artifact.downloadUrl} when more than an hour may
883
+ * have passed since {@link artifacts}.
884
+ */
885
+ downloadArtifactUrl(jobSpecId: string, artifactId: string): Promise<ArtifactDownload>;
886
+ /**
887
+ * Download one artifact to `to` (Node) and return that path. Mints a fresh
888
+ * presigned URL first, then streams the body to disk (shares the size-cap
889
+ * and symlink-refusal contract with `convert.downloadTo`).
890
+ */
891
+ downloadArtifactTo(jobSpecId: string, artifactId: string, { to }: {
892
+ to: string;
893
+ }): Promise<string>;
762
894
  /**
763
895
  * Stream goal execution events for a job. Opens a WebSocket, subscribes,
764
896
  * then yields each {@link GoalEvent} in order; the iterator ends (and the
@@ -819,6 +951,15 @@ interface PatchWorkflowOptions {
819
951
  declare class Workflows {
820
952
  #private;
821
953
  constructor(http: HttpClient);
954
+ /**
955
+ * List the platform's built-in AI-workflow catalog.
956
+ *
957
+ * Distinct from {@link search}, which browses the user-published community
958
+ * marketplace — the catalog is the curated set of built-in workflows
959
+ * runnable directly via `goals.start({ workflowId })`. Anonymous callers
960
+ * are allowed; deprecated entries are filtered out server-side.
961
+ */
962
+ catalog(): Promise<CatalogWorkflow[]>;
822
963
  /** Browse the public community listing (one page + a `cursor`). */
823
964
  search(options?: WorkflowSearchOptions): Promise<WorkflowSearchPage>;
824
965
  /** Fetch a single workflow by id. */
@@ -888,6 +1029,6 @@ declare class Convilyn {
888
1029
  * Single source of truth for the package version. Kept in lockstep with
889
1030
  * package.json + CHANGELOG.md (guarded by test/packaging/version-changelog.test.ts).
890
1031
  */
891
- declare const VERSION = "0.2.0";
1032
+ declare const VERSION = "0.4.0";
892
1033
 
893
- export { APIError, AuthError, AutoThrottleConfig, CONVERT_JOB_TERMINAL_STATUSES, type ConvertJob, Convilyn, ConvilynError, type ConvilynOptions, type CostEstimate, type CreateConvertOptions, type ErrorDetails, ExponentialBackoffRetry, type File, type ForkWorkflowOptions, GOAL_EVENT_TERMINAL_TYPES, GOAL_EVENT_TYPES, GOAL_JOB_TERMINAL_STATUSES, type GetQuotaOptions, type GoalEvent, type GoalEventType, type GoalJob, GoalJobFailedError, type GoalJobStatus, GoalJobTimeoutError, type GoalWaitOptions, type JobError, JobFailedError, type JobStatus, JobTimeoutError, type LikeResponse, NoRetry, type PatchWorkflowOptions, type PendingSlot, type Plan, PlanRequiredError, type PlanTier, type QuotaCheck, QuotaExceededError, type QuotaState, RateLimitError, type ResultFile, RetryExhaustedError, type RetryPolicy, S3UploadError, type StartGoalOptions, type ToolCostEstimate, type UploadOptions, type UsageHistoryEntry, VERSION, type WSTransport, type WaitOptions, WebSocketError, type Workflow, type WorkflowSearchOptions, type WorkflowSearchPage, type WorkflowSortMode, type WorkflowStats, type WorkflowSummary, type WorkflowVisibility, goalJobNeedsInput, isConvertJobTerminal, isGoalEventTerminal, isGoalEventType, isGoalJobTerminal };
1034
+ export { APIError, type Artifact, type ArtifactDownload, AuthError, AutoThrottleConfig, CONVERT_JOB_TERMINAL_STATUSES, type CatalogWorkflow, type ConvertJob, Convilyn, ConvilynError, type ConvilynOptions, type CostEstimate, type CreateConvertOptions, type ErrorDetails, ExponentialBackoffRetry, type File, type ForkWorkflowOptions, GOAL_EVENT_TERMINAL_TYPES, GOAL_EVENT_TYPES, GOAL_JOB_TERMINAL_STATUSES, type GetQuotaOptions, type GoalEvent, type GoalEventType, type GoalJob, GoalJobFailedError, type GoalJobStatus, GoalJobTimeoutError, type GoalWaitOptions, type JobError, JobFailedError, type JobStatus, JobTimeoutError, type LikeResponse, NoRetry, type PatchWorkflowOptions, type PendingSlot, type Plan, PlanRequiredError, type PlanTier, type QuotaCheck, QuotaExceededError, type QuotaState, RateLimitError, type ResultFile, RetryExhaustedError, type RetryPolicy, S3UploadError, type StartGoalOptions, type ToolCostEstimate, type UploadOptions, type UsageHistoryEntry, VERSION, type WSTransport, type WaitOptions, WebSocketError, type Workflow, type WorkflowSearchOptions, type WorkflowSearchPage, type WorkflowSortMode, type WorkflowStats, type WorkflowSummary, type WorkflowVisibility, goalJobNeedsInput, isConvertJobTerminal, isConvilynError, isGoalEventTerminal, isGoalEventType, isGoalJobTerminal };
package/dist/index.d.ts CHANGED
@@ -22,10 +22,29 @@
22
22
  * `code` / `statusCode` fields for typed handling.
23
23
  */
24
24
  type ErrorDetails = Record<string, unknown>;
25
+ /**
26
+ * Well-known brand for {@link ConvilynError}. `Symbol.for` resolves to the
27
+ * *same* symbol from the global registry regardless of which module instance
28
+ * (ESM vs. CJS) created it, so {@link isConvilynError} stays reliable even
29
+ * when a process ends up loading both entry points of this package (a classic
30
+ * Node.js dual-package hazard where `instanceof` across the two module graphs
31
+ * can false-negative). Prefer the guard function over `instanceof` unless you
32
+ * can guarantee a single module graph.
33
+ */
34
+ declare const CONVILYN_ERROR_BRAND: unique symbol;
25
35
  /** Base class for every error this SDK throws. */
26
36
  declare class ConvilynError extends Error {
37
+ /** @internal brand marker — see {@link isConvilynError} */
38
+ readonly [CONVILYN_ERROR_BRAND] = true;
27
39
  constructor(message: string);
28
40
  }
41
+ /**
42
+ * Reliable `err instanceof ConvilynError` replacement across module graphs.
43
+ * Use this (not `instanceof`) when the error may have crossed an ESM/CJS
44
+ * boundary — e.g. a dependency `require()`s this package while your own code
45
+ * `import`s it.
46
+ */
47
+ declare function isConvilynError(err: unknown): err is ConvilynError;
29
48
  /** Authentication / authorization failed before any HTTP call. */
30
49
  declare class AuthError extends ConvilynError {
31
50
  constructor(message: string);
@@ -123,10 +142,17 @@ declare class GoalJobTimeoutError extends ConvilynError {
123
142
  readonly jobSpecId: string;
124
143
  readonly elapsed: number;
125
144
  readonly timeout: number;
145
+ /**
146
+ * `'total'` — the overall `timeout` budget lapsed; `'idle'` —
147
+ * `idleTimeout` lapsed with no status/progress change (the job may still
148
+ * be healthy on a long phase; `retrieve()` before assuming failure).
149
+ */
150
+ readonly reason: 'total' | 'idle';
126
151
  constructor(opts: {
127
152
  jobSpecId: string;
128
153
  elapsed: number;
129
154
  timeout: number;
155
+ reason?: 'total' | 'idle';
130
156
  });
131
157
  }
132
158
  /** Raised when the goal event stream cannot proceed. */
@@ -234,6 +260,35 @@ interface GoalJob {
234
260
  declare function isGoalJobTerminal(job: Pick<GoalJob, 'status'>): boolean;
235
261
  /** True when the agent is blocked waiting on the user (`slots_pending`). */
236
262
  declare function goalJobNeedsInput(job: Pick<GoalJob, 'status'>): boolean;
263
+ /**
264
+ * One output artifact produced by a goal (agentic) job. `downloadUrl` is a
265
+ * presigned storage URL valid for one hour from issuance — re-call
266
+ * `goals.artifacts()` (or `goals.downloadArtifactUrl()`) for a fresh one
267
+ * instead of persisting it.
268
+ */
269
+ interface Artifact {
270
+ readonly artifactId: string;
271
+ readonly fileName: string;
272
+ readonly mimeType: string;
273
+ readonly sizeBytes: number;
274
+ readonly downloadUrl: string | null;
275
+ readonly artifactType: string | null;
276
+ readonly platform: string | null;
277
+ readonly metadata: Record<string, unknown> | null;
278
+ readonly isPrimary: boolean;
279
+ readonly description: string;
280
+ }
281
+ /**
282
+ * A freshly minted presigned download URL for a single artifact. `expiresAt`
283
+ * marks the end of the URL's 1-hour validity window.
284
+ */
285
+ interface ArtifactDownload {
286
+ readonly downloadUrl: string;
287
+ readonly fileName: string;
288
+ readonly sizeBytes: number;
289
+ readonly mimeType: string;
290
+ readonly expiresAt: Date;
291
+ }
237
292
  /** Discriminator for a server-sent event in a goal execution stream. */
238
293
  type GoalEventType = 'tool_started' | 'tool_finished' | 'agent_step_started' | 'agent_step_finished' | 'orchestration_transition' | 'status' | 'progress' | 'completed' | 'failed' | 'slot_needed' | 'keepalive' | 'agent_text' | 'agent_text_done';
239
294
  /** The known event `type` values (forward-compat: pre-listed so the SDK need
@@ -297,6 +352,33 @@ interface WorkflowSearchPage {
297
352
  readonly items: WorkflowSummary[];
298
353
  readonly cursor: string | null;
299
354
  }
355
+ /**
356
+ * One built-in AI workflow from the platform catalog — distinct from
357
+ * the user-published community listing. Pass `workflowId` as
358
+ * `goals.start({ workflowId })` to run it directly.
359
+ *
360
+ * `tier` names the subscription tier the workflow is designed for (`null` =
361
+ * free); `freeTierAllowed` is a tri-state gate hint — only an explicit `false`
362
+ * means a Free-tier run is blocked.
363
+ */
364
+ interface CatalogWorkflow {
365
+ readonly workflowId: string;
366
+ readonly name: string;
367
+ readonly description: string;
368
+ readonly icon: string | null;
369
+ readonly supportedInputTypes: string[];
370
+ readonly supportedInputFormats: string[] | null;
371
+ readonly category: string;
372
+ readonly requiredSlotCount: number;
373
+ readonly subcategory: string | null;
374
+ readonly skuGroup: string | null;
375
+ readonly status: string;
376
+ readonly supportedLocales: string[] | null;
377
+ readonly maxInputSizeBytes: number | null;
378
+ readonly minFileCount: number | null;
379
+ readonly tier: string | null;
380
+ readonly freeTierAllowed: boolean | null;
381
+ }
300
382
  /** Result of `workflows.like` — toggle state + fresh count. */
301
383
  interface LikeResponse {
302
384
  readonly liked: boolean;
@@ -680,6 +762,17 @@ declare class Files {
680
762
  * `path` (Node) or `content` (bytes/string).
681
763
  */
682
764
  upload(options: UploadOptions): Promise<File>;
765
+ /**
766
+ * Delete an uploaded file's cloud copy (storage object + metadata record).
767
+ *
768
+ * Only the uploader can delete; a missing or unowned `fileId` surfaces as
769
+ * a 404 `APIError` and a file attached to a still-running job as a 409
770
+ * (`FILE_IN_USE`). The platform deletes input files automatically ~1 hour
771
+ * after upload anyway — call this when you want the cloud copy gone
772
+ * deterministically the moment your workflow is done (e.g. privacy-
773
+ * sensitive documents on an edge device). Port of Python `files.delete`.
774
+ */
775
+ delete(fileId: string): Promise<void>;
683
776
  }
684
777
 
685
778
  /**
@@ -714,6 +807,14 @@ interface StartGoalOptions {
714
807
  interface GoalWaitOptions {
715
808
  timeout?: number;
716
809
  pollInterval?: number;
810
+ /**
811
+ * Seconds tolerated WITHOUT any status or progress change before the wait
812
+ * gives up with `reason: 'idle'`. An agentic run's analyze/execute phases
813
+ * can legitimately take many minutes, so raise `timeout` to your hard
814
+ * deadline and bound stalls with this instead — a job that keeps advancing
815
+ * holds the loop open. Omitted = disabled (total `timeout` only).
816
+ */
817
+ idleTimeout?: number;
717
818
  }
718
819
  /** Constructor options + test seams for {@link Goals}. */
719
820
  interface GoalsResourceOptions {
@@ -748,7 +849,15 @@ declare class Goals {
748
849
  fillSlots(jobSpecId: string, answers: Record<string, unknown>, options?: {
749
850
  expectedVersion?: number;
750
851
  }): Promise<GoalJob>;
751
- /** Confirm a slots-filled job, queueing it for execution. */
852
+ /**
853
+ * Confirm a slots-filled job, queueing it for execution.
854
+ *
855
+ * `expectedVersion` is optional — the server re-reads the current version
856
+ * at submit time regardless, so most callers should simply omit it. The
857
+ * request always carries a JSON object (`{}` when empty): older backend
858
+ * builds declare the confirm body as a required parameter and reject a
859
+ * body-less POST with 422 before the handler runs.
860
+ */
752
861
  confirm(jobSpecId: string, options?: {
753
862
  expectedVersion?: number;
754
863
  }): Promise<GoalJob>;
@@ -759,6 +868,29 @@ declare class Goals {
759
868
  rerunMode?: 'retry_same_thread' | 'fresh_rerun';
760
869
  reason?: string;
761
870
  }): Promise<GoalJob>;
871
+ /**
872
+ * List a completed job's output artifacts with fresh download URLs.
873
+ *
874
+ * Available once the job is terminal-successful (`completed` or `partial`);
875
+ * any other status surfaces the backend's 400 as an `APIError`. Each
876
+ * artifact's `downloadUrl` is presigned and valid for one hour — re-call
877
+ * this method for fresh URLs rather than persisting one.
878
+ */
879
+ artifacts(jobSpecId: string): Promise<Artifact[]>;
880
+ /**
881
+ * Mint a fresh presigned download URL for one artifact. Prefer this over
882
+ * reusing a stale {@link Artifact.downloadUrl} when more than an hour may
883
+ * have passed since {@link artifacts}.
884
+ */
885
+ downloadArtifactUrl(jobSpecId: string, artifactId: string): Promise<ArtifactDownload>;
886
+ /**
887
+ * Download one artifact to `to` (Node) and return that path. Mints a fresh
888
+ * presigned URL first, then streams the body to disk (shares the size-cap
889
+ * and symlink-refusal contract with `convert.downloadTo`).
890
+ */
891
+ downloadArtifactTo(jobSpecId: string, artifactId: string, { to }: {
892
+ to: string;
893
+ }): Promise<string>;
762
894
  /**
763
895
  * Stream goal execution events for a job. Opens a WebSocket, subscribes,
764
896
  * then yields each {@link GoalEvent} in order; the iterator ends (and the
@@ -819,6 +951,15 @@ interface PatchWorkflowOptions {
819
951
  declare class Workflows {
820
952
  #private;
821
953
  constructor(http: HttpClient);
954
+ /**
955
+ * List the platform's built-in AI-workflow catalog.
956
+ *
957
+ * Distinct from {@link search}, which browses the user-published community
958
+ * marketplace — the catalog is the curated set of built-in workflows
959
+ * runnable directly via `goals.start({ workflowId })`. Anonymous callers
960
+ * are allowed; deprecated entries are filtered out server-side.
961
+ */
962
+ catalog(): Promise<CatalogWorkflow[]>;
822
963
  /** Browse the public community listing (one page + a `cursor`). */
823
964
  search(options?: WorkflowSearchOptions): Promise<WorkflowSearchPage>;
824
965
  /** Fetch a single workflow by id. */
@@ -888,6 +1029,6 @@ declare class Convilyn {
888
1029
  * Single source of truth for the package version. Kept in lockstep with
889
1030
  * package.json + CHANGELOG.md (guarded by test/packaging/version-changelog.test.ts).
890
1031
  */
891
- declare const VERSION = "0.2.0";
1032
+ declare const VERSION = "0.4.0";
892
1033
 
893
- export { APIError, AuthError, AutoThrottleConfig, CONVERT_JOB_TERMINAL_STATUSES, type ConvertJob, Convilyn, ConvilynError, type ConvilynOptions, type CostEstimate, type CreateConvertOptions, type ErrorDetails, ExponentialBackoffRetry, type File, type ForkWorkflowOptions, GOAL_EVENT_TERMINAL_TYPES, GOAL_EVENT_TYPES, GOAL_JOB_TERMINAL_STATUSES, type GetQuotaOptions, type GoalEvent, type GoalEventType, type GoalJob, GoalJobFailedError, type GoalJobStatus, GoalJobTimeoutError, type GoalWaitOptions, type JobError, JobFailedError, type JobStatus, JobTimeoutError, type LikeResponse, NoRetry, type PatchWorkflowOptions, type PendingSlot, type Plan, PlanRequiredError, type PlanTier, type QuotaCheck, QuotaExceededError, type QuotaState, RateLimitError, type ResultFile, RetryExhaustedError, type RetryPolicy, S3UploadError, type StartGoalOptions, type ToolCostEstimate, type UploadOptions, type UsageHistoryEntry, VERSION, type WSTransport, type WaitOptions, WebSocketError, type Workflow, type WorkflowSearchOptions, type WorkflowSearchPage, type WorkflowSortMode, type WorkflowStats, type WorkflowSummary, type WorkflowVisibility, goalJobNeedsInput, isConvertJobTerminal, isGoalEventTerminal, isGoalEventType, isGoalJobTerminal };
1034
+ export { APIError, type Artifact, type ArtifactDownload, AuthError, AutoThrottleConfig, CONVERT_JOB_TERMINAL_STATUSES, type CatalogWorkflow, type ConvertJob, Convilyn, ConvilynError, type ConvilynOptions, type CostEstimate, type CreateConvertOptions, type ErrorDetails, ExponentialBackoffRetry, type File, type ForkWorkflowOptions, GOAL_EVENT_TERMINAL_TYPES, GOAL_EVENT_TYPES, GOAL_JOB_TERMINAL_STATUSES, type GetQuotaOptions, type GoalEvent, type GoalEventType, type GoalJob, GoalJobFailedError, type GoalJobStatus, GoalJobTimeoutError, type GoalWaitOptions, type JobError, JobFailedError, type JobStatus, JobTimeoutError, type LikeResponse, NoRetry, type PatchWorkflowOptions, type PendingSlot, type Plan, PlanRequiredError, type PlanTier, type QuotaCheck, QuotaExceededError, type QuotaState, RateLimitError, type ResultFile, RetryExhaustedError, type RetryPolicy, S3UploadError, type StartGoalOptions, type ToolCostEstimate, type UploadOptions, type UsageHistoryEntry, VERSION, type WSTransport, type WaitOptions, WebSocketError, type Workflow, type WorkflowSearchOptions, type WorkflowSearchPage, type WorkflowSortMode, type WorkflowStats, type WorkflowSummary, type WorkflowVisibility, goalJobNeedsInput, isConvertJobTerminal, isConvilynError, isGoalEventTerminal, isGoalEventType, isGoalJobTerminal };
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { APIError, AuthError, AutoThrottleConfig, CONVERT_JOB_TERMINAL_STATUSES, Convilyn, ConvilynError, ExponentialBackoffRetry, GOAL_EVENT_TERMINAL_TYPES, GOAL_EVENT_TYPES, GOAL_JOB_TERMINAL_STATUSES, GoalJobFailedError, GoalJobTimeoutError, JobFailedError, JobTimeoutError, NoRetry, PlanRequiredError, QuotaExceededError, RateLimitError, RetryExhaustedError, S3UploadError, VERSION, WebSocketError, goalJobNeedsInput, isConvertJobTerminal, isGoalEventTerminal, isGoalEventType, isGoalJobTerminal } from './chunk-UJHZKIP6.js';
1
+ export { APIError, AuthError, AutoThrottleConfig, CONVERT_JOB_TERMINAL_STATUSES, Convilyn, ConvilynError, ExponentialBackoffRetry, GOAL_EVENT_TERMINAL_TYPES, GOAL_EVENT_TYPES, GOAL_JOB_TERMINAL_STATUSES, GoalJobFailedError, GoalJobTimeoutError, JobFailedError, JobTimeoutError, NoRetry, PlanRequiredError, QuotaExceededError, RateLimitError, RetryExhaustedError, S3UploadError, VERSION, WebSocketError, goalJobNeedsInput, isConvertJobTerminal, isConvilynError, isGoalEventTerminal, isGoalEventType, isGoalJobTerminal } from './chunk-Z5IPYRO3.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@convilyn/sdk",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "Official TypeScript/JavaScript SDK for Convilyn — file conversion, agentic goal workflows, and the community marketplace.",
5
5
  "license": "Apache-2.0",
6
6
  "publishConfig": {