@rslsp1/fa-app-tools 2.0.72 → 2.0.78

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.
@@ -100,20 +100,23 @@ function tsFromEventPath(repoPath) {
100
100
  }
101
101
  async function loadHFState(namespace, token) {
102
102
  const files = await hfListDir(namespace, "", token);
103
- const stateFiles = files.filter((f) => f.type === "file" && /state-[\dT\-]+Z\.zip$/.test(f.path.split("/").pop() || "")).sort((a, b) => b.path.localeCompare(a.path));
103
+ const stateFiles = files.filter((f) => f.type === "file" && /^state-[\dT\-]+Z\.zip$/.test(f.path.split("/").pop() || "")).sort((a, b) => b.path.localeCompare(a.path));
104
104
  if (!stateFiles.length) return null;
105
105
  const zipBytes = await hfDownloadBinaryByPath(stateFiles[0].path, token);
106
106
  const zip = await JSZip.loadAsync(zipBytes);
107
- const [metadataStr, tagsStr, metaStr] = await Promise.all([
107
+ const [metadataStr, tagsStr, metaStr, openTasksStr] = await Promise.all([
108
108
  zip.file("metadata.json")?.async("string"),
109
109
  zip.file("tags.json")?.async("string"),
110
- zip.file("state_meta.json")?.async("string")
110
+ zip.file("state_meta.json")?.async("string"),
111
+ zip.file("open_tasks.json")?.async("string")
112
+ // optional — ältere Snapshots haben es nicht
111
113
  ]);
112
114
  if (!metadataStr || !tagsStr || !metaStr) throw new Error("state.zip: fehlende Pflicht-Dateien");
113
115
  return {
114
116
  metadata: JSON.parse(metadataStr),
115
117
  tags: JSON.parse(tagsStr),
116
- meta: JSON.parse(metaStr)
118
+ meta: JSON.parse(metaStr),
119
+ openTasks: openTasksStr ? JSON.parse(openTasksStr) : {}
117
120
  };
118
121
  }
119
122
  async function loadPendingEvents(namespace, token, sinceTs, knownPaths) {
@@ -24,7 +24,7 @@ import {
24
24
  setHFToken,
25
25
  tsFromEventPath,
26
26
  writeHFEvent
27
- } from "./chunk-VVLKEBHL.mjs";
27
+ } from "./chunk-BYD4RMYM.mjs";
28
28
  export {
29
29
  HF_TOKEN_KEY,
30
30
  getHFToken,
package/dist/index.d.mts CHANGED
@@ -1,6 +1,9 @@
1
1
  import * as React from 'react';
2
2
  import React__default, { RefObject, ReactNode } from 'react';
3
3
  import { Node, Edge } from '@xyflow/react';
4
+ import * as zustand_vanilla from 'zustand/vanilla';
5
+
6
+ var version = "2.0.78";
4
7
 
5
8
  declare function useOnClickOutside(ref: RefObject<HTMLElement | null>, handler: (e: MouseEvent | TouchEvent) => void): void;
6
9
 
@@ -563,6 +566,423 @@ interface TagManagerPanelProps {
563
566
  }
564
567
  declare function TagManagerPanel({ workspaceTags, onTagCreate, onTagUpdate, onTagDelete, onTagReorder, onTagMove }: TagManagerPanelProps): React__default.JSX.Element;
565
568
 
569
+ type FeatureSliceId = 'library' | 'tags' | 'prompt.builder' | 'prompt.negative' | 'labs.compare' | 'labs.remix' | 'labs.loop' | 'labs.blend' | 'labs.frameExtractor';
570
+ type WorkspaceTabId = `react.${string}` | `flow.${string}`;
571
+ interface PersistenceDescriptor<I extends FeatureSliceId = FeatureSliceId> {
572
+ sliceId: I;
573
+ tabId: WorkspaceTabId;
574
+ schemaVersion: number;
575
+ }
576
+ interface PersistedSlice<T> {
577
+ workspaceId: string;
578
+ tabId: WorkspaceTabId;
579
+ schemaVersion: number;
580
+ revision: number;
581
+ data: T;
582
+ updatedAt: number;
583
+ resetAt?: number;
584
+ }
585
+ type LoadResult<T> = {
586
+ kind: 'loaded';
587
+ slice: PersistedSlice<T>;
588
+ } | {
589
+ kind: 'notFound';
590
+ } | {
591
+ kind: 'invalidVersion';
592
+ found: number;
593
+ supported: number;
594
+ } | {
595
+ kind: 'transportError';
596
+ message: string;
597
+ retryable: boolean;
598
+ };
599
+ type WriteResult<T> = {
600
+ kind: 'saved';
601
+ slice: PersistedSlice<T>;
602
+ } | {
603
+ kind: 'conflict';
604
+ expectedRevision: number;
605
+ current: PersistedSlice<T>;
606
+ } | {
607
+ kind: 'notFound';
608
+ } | {
609
+ kind: 'invalidVersion';
610
+ found: number;
611
+ supported: number;
612
+ } | {
613
+ kind: 'transportError';
614
+ message: string;
615
+ retryable: boolean;
616
+ };
617
+ interface WorkspacePersistence {
618
+ load<T>(workspaceId: string, descriptor: PersistenceDescriptor, signal: AbortSignal): Promise<LoadResult<T>>;
619
+ save<T>(slice: PersistedSlice<T>, expectedRevision: number, signal: AbortSignal): Promise<WriteResult<T>>;
620
+ reset<T>(sliceWithDefault: PersistedSlice<T>, expectedRevision: number, signal: AbortSignal): Promise<WriteResult<T>>;
621
+ }
622
+ interface SliceContract<T> {
623
+ id: FeatureSliceId;
624
+ schemaVersion: number;
625
+ createDefault(): T;
626
+ serialize(value: T): unknown;
627
+ validate(value: unknown): T;
628
+ migrate(fromVersion: number, value: unknown): T;
629
+ }
630
+ interface RequestContext {
631
+ requestId: string;
632
+ signal: AbortSignal;
633
+ }
634
+ type QueryResult<T> = {
635
+ kind: 'ok';
636
+ value: T;
637
+ } | {
638
+ kind: 'error';
639
+ message: string;
640
+ retryable: boolean;
641
+ };
642
+ type CommandResult<T> = {
643
+ kind: 'ok';
644
+ value: T;
645
+ } | {
646
+ kind: 'unsupported';
647
+ capability: string;
648
+ } | {
649
+ kind: 'error';
650
+ message: string;
651
+ retryable: boolean;
652
+ };
653
+
654
+ type SaveState = 'idle' | 'saving' | 'restoring' | 'conflict';
655
+ interface SliceMeta {
656
+ revision: number;
657
+ dirty: boolean;
658
+ saveState: SaveState;
659
+ conflict: PersistedSlice<unknown> | null;
660
+ loadRequestId: string | null;
661
+ }
662
+ interface FaStoreState {
663
+ workspaceId: string;
664
+ slices: Partial<Record<FeatureSliceId, unknown>>;
665
+ meta: Partial<Record<FeatureSliceId, SliceMeta>>;
666
+ loadSlice(sliceId: FeatureSliceId, signal?: AbortSignal, requestId?: string): Promise<LoadResult<unknown>>;
667
+ updateSlice<T>(sliceId: FeatureSliceId, updater: (current: T) => T): void;
668
+ saveSlice(sliceId: FeatureSliceId, signal?: AbortSignal): Promise<WriteResult<unknown>>;
669
+ resetSlice(sliceId: FeatureSliceId, signal?: AbortSignal, options?: {
670
+ confirmed?: boolean;
671
+ }): Promise<WriteResult<unknown>>;
672
+ acceptRemote(sliceId: FeatureSliceId): void;
673
+ overwriteRemote(sliceId: FeatureSliceId, signal?: AbortSignal): Promise<WriteResult<unknown>>;
674
+ }
675
+ interface CreateFaStoreOptions {
676
+ contracts: Partial<Record<FeatureSliceId, SliceContract<unknown>>>;
677
+ descriptors: Partial<Record<FeatureSliceId, PersistenceDescriptor>>;
678
+ persistence: WorkspacePersistence;
679
+ workspaceId: string;
680
+ }
681
+ type FaStore = ReturnType<typeof createFaStore>;
682
+ declare function createFaStore({ contracts, descriptors, persistence, workspaceId }: CreateFaStoreOptions): zustand_vanilla.StoreApi<FaStoreState>;
683
+
684
+ interface InMemoryWorkspacePersistence extends WorkspacePersistence {
685
+ /** Nur für Tests: rohen Persistenz-Eintrag lesen, ohne Kopie-Semantik zu brechen. */
686
+ peek(workspaceId: string, tabId: WorkspaceTabId): PersistedSlice<unknown> | undefined;
687
+ }
688
+ declare function createInMemoryWorkspacePersistence(now?: () => number): InMemoryWorkspacePersistence;
689
+
690
+ declare function useFaSlice<T>(store: FaStore, sliceId: FeatureSliceId): T;
691
+ declare function useFaSliceMeta(store: FaStore, sliceId: FeatureSliceId): SliceMeta | undefined;
692
+
693
+ interface CreatePersistenceCoordinatorOptions {
694
+ store: FaStore;
695
+ /**
696
+ * Muss derselbe Adapter sein, der in den Store injiziert wurde. Der
697
+ * Coordinator ruft die Persistenz nicht direkt auf (alle IO-Aktionen
698
+ * laufen über die Store-Actions); der Parameter macht die Kopplung an
699
+ * der Konstruktionsstelle sichtbar und ist für spätere Direktzugriffe
700
+ * (z.B. Batch-Restore) reserviert.
701
+ */
702
+ persistence: WorkspacePersistence;
703
+ debounceMs?: number;
704
+ now?: () => number;
705
+ requestId?: () => string;
706
+ }
707
+ interface PersistenceCoordinator {
708
+ load(sliceId: FeatureSliceId): Promise<LoadResult<unknown>>;
709
+ scheduleSave(sliceId: FeatureSliceId): void;
710
+ flush(sliceId: FeatureSliceId): Promise<void>;
711
+ retry(sliceId: FeatureSliceId): Promise<void>;
712
+ dispose(): void;
713
+ }
714
+ declare function createPersistenceCoordinator({ store, debounceMs, requestId, }: CreatePersistenceCoordinatorOptions): PersistenceCoordinator;
715
+
716
+ type LegacySourceResult<S> = {
717
+ kind: 'found';
718
+ value: S;
719
+ version: number;
720
+ } | {
721
+ kind: 'notFound';
722
+ };
723
+ type LegacyMigrationResult = {
724
+ kind: 'migrated';
725
+ } | {
726
+ kind: 'alreadyMigrated';
727
+ } | {
728
+ kind: 'markedExistingTarget';
729
+ } | {
730
+ kind: 'nothingToMigrate';
731
+ } | {
732
+ kind: 'unsupportedVersion';
733
+ found: number;
734
+ supported: number[];
735
+ };
736
+ interface LegacyMigrationOptions<S, T> {
737
+ migrationId: string;
738
+ readSource(): Promise<LegacySourceResult<S>>;
739
+ transform(source: S, version: number): T;
740
+ writeTarget(value: T): Promise<void>;
741
+ readMarker(): Promise<boolean>;
742
+ writeMarker(): Promise<void>;
743
+ /** Optional: Ziel lesen, um teilweise erfolgte Läufe zu erkennen und das Ergebnis zu validieren. */
744
+ readTarget?(): Promise<T | undefined>;
745
+ /** Optional: wirft bei ungültigem Ziel; Default akzeptiert jeden Wert ungleich undefined. */
746
+ validateTarget?(value: unknown): T;
747
+ /** Zulässige Quellversionen; Default [1]. */
748
+ supportedVersions?: number[];
749
+ }
750
+ declare function runLegacyMigration<S, T>(options: LegacyMigrationOptions<S, T>): Promise<LegacyMigrationResult>;
751
+
752
+ interface LibraryWorkspaceState {
753
+ filterTagIds: string[];
754
+ filterMode: 'and' | 'or';
755
+ selectedItemId: string | null;
756
+ galleryIndex: number;
757
+ /** Zuletzt umgeschaltete Filter-Tags (max 5, jüngster zuerst). */
758
+ recentFilterTagIds: string[];
759
+ }
760
+ declare const LIBRARY_SLICE_SCHEMA_VERSION = 1;
761
+ declare function createLibraryDefault(): LibraryWorkspaceState;
762
+ declare const libraryContract: SliceContract<LibraryWorkspaceState>;
763
+ declare const libraryReactDescriptor: PersistenceDescriptor<'library'>;
764
+ declare const LIBRARY_CUTOVER_MARKER = "cutover.library.v1";
765
+ interface LibraryLegacySource {
766
+ /** Rohwert von localStorage 'libraryFilterTags' (JSON) oder null. */
767
+ filterTagsRaw: string | null;
768
+ /** Rohwert von localStorage 'libraryFilterMode' oder null. */
769
+ filterModeRaw: string | null;
770
+ /** Rohwert von localStorage 'fineart_recent_filters' (JSON) oder null. */
771
+ recentFiltersRaw?: string | null;
772
+ }
773
+ interface RunLibraryLegacyImportOptions {
774
+ readLocalStorage(key: string): string | null;
775
+ /** IDs/Labels der tatsächlich existierenden Tags — nur diese werden übernommen. */
776
+ knownTagIds: Set<string>;
777
+ readTarget(): Promise<LibraryWorkspaceState | undefined>;
778
+ writeTarget(value: LibraryWorkspaceState): Promise<void>;
779
+ readMarker(): Promise<boolean>;
780
+ writeMarker(): Promise<void>;
781
+ }
782
+ declare function parseLegacyLibraryFilters(source: LibraryLegacySource, knownTagIds: Set<string>): LibraryWorkspaceState | null;
783
+ declare function runLibraryLegacyImport(options: RunLibraryLegacyImportOptions): Promise<LegacyMigrationResult>;
784
+
785
+ interface LibraryViewTag {
786
+ label: string;
787
+ category?: string;
788
+ inherited?: boolean;
789
+ }
790
+ interface LibraryViewItem {
791
+ /** Stabile Host-Referenz (Library-ID bzw. Gruppen-Repräsentant). */
792
+ id: string;
793
+ title: string;
794
+ timestamp: number;
795
+ rating?: number;
796
+ notes?: string;
797
+ tags: LibraryViewTag[];
798
+ /** Fertige Thumb-Quelle (URL oder data:-URI); Auflösung ist Host-Sache. */
799
+ thumbUrl?: string | null;
800
+ /** Anzahl Bilder der Gruppe/Galerie (Badge ab 2). */
801
+ galleryCount?: number;
802
+ }
803
+ interface LibraryListQuery {
804
+ filterTagIds: string[];
805
+ filterMode: 'and' | 'or';
806
+ sortBy: 'rating' | 'timestamp' | 'title';
807
+ sortOrder: 'asc' | 'desc';
808
+ limit: number;
809
+ }
810
+ interface LibraryPage {
811
+ items: LibraryViewItem[];
812
+ /** Gesamtzahl nach Filter (für "weitere laden"). */
813
+ total: number;
814
+ }
815
+ interface LibraryDataSource {
816
+ listLibraryItems(query: LibraryListQuery, ctx: RequestContext): Promise<QueryResult<LibraryPage>>;
817
+ }
818
+ type LabSlotId = 'A' | 'B';
819
+ /** Optionale Commands; jeder fehlende Key ist eine im Host nicht vorhandene Capability. */
820
+ interface LibraryCommands {
821
+ deleteItem?: (item: LibraryViewItem) => Promise<CommandResult<void>>;
822
+ setCover?: (item: LibraryViewItem) => Promise<CommandResult<void>>;
823
+ assignToLab?: (slot: LabSlotId, item: LibraryViewItem) => Promise<CommandResult<void>>;
824
+ editMetadata?: (item: LibraryViewItem) => Promise<CommandResult<void>>;
825
+ }
826
+ type LibraryCommandName = keyof LibraryCommands;
827
+ /**
828
+ * In-Memory-DataSource über bereits geladene Items: wendet Tag-Filter,
829
+ * Sortierung und Limit deterministisch an. Für Hosts, die ihre Items selbst
830
+ * beschaffen (React: Server-Fetch im Host; Flow: HF-Snapshot/Projekt).
831
+ */
832
+ declare function createInMemoryLibraryDataSource(getItems: () => LibraryViewItem[]): LibraryDataSource;
833
+
834
+ interface LibraryViewProps {
835
+ dataSource: LibraryDataSource;
836
+ query: LibraryListQuery;
837
+ onQueryChange: (next: LibraryListQuery) => void;
838
+ commands?: LibraryCommands;
839
+ onSelectItem?: (item: LibraryViewItem) => void;
840
+ selectedItemId?: string | null;
841
+ /** Aktuelle Lab-Slot-Belegung (Item-IDs) zur Markierung von A/B. */
842
+ labAssignments?: Partial<Record<LabSlotId, string>>;
843
+ layout?: 'list' | 'grid';
844
+ emptyText?: string;
845
+ /** Host-gerenderte Zusatzaktionen je Item (z.B. Flow-Referenzgenerierung). */
846
+ renderItemExtras?: (item: LibraryViewItem) => React__default.ReactNode;
847
+ /** Host-Datenversion: Änderung erzwingt Re-Query (z.B. nach Reload/Import). */
848
+ dataVersion?: number;
849
+ /** Schrittweite für "weitere laden" (Default 20). */
850
+ pageStep?: number;
851
+ }
852
+ declare const LibraryView: React__default.FC<LibraryViewProps>;
853
+
854
+ /** Kanonischer flacher Tag (Server = Master; Flow-TagBase trägt dieselben Felder). */
855
+ interface TagEntry {
856
+ id: string;
857
+ context_id: string | null;
858
+ category: string;
859
+ label: string;
860
+ value: string;
861
+ ord: number;
862
+ enabled: boolean;
863
+ }
864
+ /**
865
+ * Eingabeform für den Selector: flache Rows aus /api/v2/tags bzw. TagBase.
866
+ * `id` ist Pflicht (fehlend → Selector wirft); Zusatzfelder wie
867
+ * `is_inherited`/`context_name` reicht die Ableitung durch.
868
+ */
869
+ interface TagEntryInput {
870
+ id?: string | number | null;
871
+ category?: string | null;
872
+ label?: string | null;
873
+ value?: string | null;
874
+ ord?: number;
875
+ enabled?: boolean;
876
+ is_inherited?: boolean;
877
+ context_name?: string;
878
+ }
879
+ interface TagViewOption {
880
+ /** Pflicht-ID (Entscheidung Nr. 4: Fail fast statt „Cannot move tag"). */
881
+ id: string;
882
+ l: string;
883
+ v: string;
884
+ /** Originale DB-Kategorie (mit Prefix) für Edit/Clone/Move. */
885
+ cat: string;
886
+ is_inherited?: boolean;
887
+ context_name?: string;
888
+ }
889
+ interface TagViewCategory {
890
+ title: string;
891
+ type: 'multi' | 'single';
892
+ options: TagViewOption[];
893
+ }
894
+ type TagViewScope = Record<string, TagViewCategory>;
895
+ type TagViewModel = Record<string, TagViewScope>;
896
+ interface TagQueries {
897
+ listTags(ctx: RequestContext): Promise<QueryResult<TagEntry[]>>;
898
+ }
899
+ interface TagUpdateDelta {
900
+ label?: string;
901
+ value?: string;
902
+ category?: string;
903
+ ord?: number;
904
+ enabled?: boolean;
905
+ }
906
+ /**
907
+ * Optionale Commands; fehlender Key = Capability im Host nicht vorhanden.
908
+ * React-Adapter schreibt `/api/v2/tags` (Master), Flow-Adapter schreibt
909
+ * Workspace-Tags bzw. Vorschlags-Events (Follower, HF_TAG_SYNC.md) — der
910
+ * Vertrag ist identisch, die Schreibwege liegen im jeweiligen Host.
911
+ */
912
+ interface TagCommands {
913
+ createTag?: (input: {
914
+ category: string;
915
+ label: string;
916
+ value: string;
917
+ }) => Promise<CommandResult<void>>;
918
+ updateTag?: (id: string, delta: TagUpdateDelta) => Promise<CommandResult<void>>;
919
+ deleteTag?: (id: string) => Promise<CommandResult<void>>;
920
+ moveTag?: (id: string, targetCategory: string) => Promise<CommandResult<void>>;
921
+ reorderTags?: (category: string, orderedIds: string[]) => Promise<CommandResult<void>>;
922
+ }
923
+ type TagCommandName = keyof TagCommands;
924
+
925
+ interface TagManagerSelection {
926
+ scopeKey: string | null;
927
+ categoryKey: string | null;
928
+ }
929
+ interface TagManagerProps {
930
+ tags: TagEntryInput[];
931
+ commands?: TagCommands;
932
+ /** Optional kontrollierte Auswahl (Host bindet sie an den tags-Slice). */
933
+ selection?: TagManagerSelection;
934
+ onSelectionChange?: (next: TagManagerSelection) => void;
935
+ emptyText?: string;
936
+ /**
937
+ * Wenn gesetzt, bietet das Create-Formular ein „Neue Kategorie"-Feld an;
938
+ * der Host bestimmt das DB-Kategorie-Format (React: `${scope}:${name}`).
939
+ */
940
+ newCategoryName?: (scopeKey: string, name: string) => string;
941
+ /** Diese Scopes sind immer als Tab wählbar, auch ohne vorhandene Tags. */
942
+ ensureScopes?: string[];
943
+ }
944
+ declare const TagManager: React__default.FC<TagManagerProps>;
945
+
946
+ /** DB-Kategorien (Subkategorien) → App-Scopes. Nicht gemappte Kategorien sind selbst Scope. */
947
+ declare const SCOPE_MAP: Record<string, string>;
948
+ declare function deriveTagViewModel(tags: TagEntryInput[]): TagViewModel;
949
+ /** Flache Kategorie-Liste eines View-Models (für Kategorie-Auswahl im Manager). */
950
+ declare function listCategories(model: TagViewModel): {
951
+ scopeKey: string;
952
+ categoryKey: string;
953
+ title: string;
954
+ dbCategory: string | null;
955
+ }[];
956
+
957
+ interface TagsWorkspaceState {
958
+ /** Aktiver Scope-Tab im Manager (null = erster verfügbarer). */
959
+ selectedScopeKey: string | null;
960
+ /** Aktive Kategorie im Scope (null = erste verfügbare). */
961
+ selectedCategoryKey: string | null;
962
+ /** Zuletzt vergebene Tags als ID-Referenzliste (max 10, jüngste zuerst). */
963
+ recentAssignedTagIds: string[];
964
+ }
965
+ declare const TAGS_SLICE_SCHEMA_VERSION = 1;
966
+ declare function createTagsDefault(): TagsWorkspaceState;
967
+ declare const tagsContract: SliceContract<TagsWorkspaceState>;
968
+ declare const tagsReactDescriptor: PersistenceDescriptor<'tags'>;
969
+ declare const TAGS_CUTOVER_MARKER = "cutover.tags.v1";
970
+ interface LegacyRecentTagRef {
971
+ label: string;
972
+ category: string | null;
973
+ }
974
+ declare function parseLegacyRecentTags(raw: string | null): LegacyRecentTagRef[];
975
+ interface RunTagsLegacyImportOptions {
976
+ readLocalStorage(key: string): string | null;
977
+ /** Label(+Kategorie) → existierende Tag-ID; null = nicht auflösbar (fällt weg). */
978
+ resolveTagId(ref: LegacyRecentTagRef): string | null;
979
+ readTarget(): Promise<TagsWorkspaceState | undefined>;
980
+ writeTarget(value: TagsWorkspaceState): Promise<void>;
981
+ readMarker(): Promise<boolean>;
982
+ writeMarker(): Promise<void>;
983
+ }
984
+ declare function runTagsLegacyImport(options: RunTagsLegacyImportOptions): Promise<LegacyMigrationResult>;
985
+
566
986
  interface LabsTabProps {
567
987
  services: LabServices;
568
988
  onResult?: (item: LabItem) => void;
@@ -665,6 +1085,7 @@ interface HFStateSnapshot {
665
1085
  metadata: HFMetadataEntry[];
666
1086
  tags: WorkspaceTags;
667
1087
  meta: HFStateMeta;
1088
+ openTasks?: Record<string, TaskRequestedPayload>;
668
1089
  }
669
1090
  interface HFFileInfo$1 {
670
1091
  type: 'file' | 'directory';
@@ -672,6 +1093,7 @@ interface HFFileInfo$1 {
672
1093
  size: number;
673
1094
  }
674
1095
  interface ImageAddedPayload extends HFMetadataEntry {
1096
+ taskId?: string;
675
1097
  }
676
1098
  interface TagUpsertedPayload {
677
1099
  category: string;
@@ -684,6 +1106,20 @@ interface MetadataUpdatedPayload {
684
1106
  id: string;
685
1107
  delta: Partial<HFMetadataEntry>;
686
1108
  }
1109
+ interface TaskRequestedPayload {
1110
+ taskId: string;
1111
+ taskType: string;
1112
+ params: {
1113
+ prompt: string;
1114
+ tags?: string[];
1115
+ book?: string;
1116
+ kapitel?: string;
1117
+ ankerId?: string;
1118
+ promptVersion?: number;
1119
+ [key: string]: any;
1120
+ };
1121
+ expiresAt?: number;
1122
+ }
687
1123
 
688
1124
  declare function getHFToken(): string | null;
689
1125
  declare function setHFToken(token: string): void;
@@ -743,23 +1179,6 @@ interface HFStateResult {
743
1179
  }
744
1180
  declare function useHFState(token: string, namespace: string): HFStateResult;
745
1181
 
746
- declare function applyEvent(state: HFStateSnapshot, event: HFEvent): HFStateSnapshot;
747
- declare function applyEvents(state: HFStateSnapshot, events: HFEvent[]): HFStateSnapshot;
748
-
749
- interface DagNode {
750
- event: HFEvent;
751
- children: number[];
752
- }
753
- interface DagFork {
754
- parentTs: number;
755
- childTs: number[];
756
- }
757
- type Dag = Map<number, DagNode>;
758
- declare function buildDag(events: HFEvent[]): Dag;
759
- declare function findTips(dag: Dag): number[];
760
- declare function findForks(dag: Dag): DagFork[];
761
- declare function topoSort(events: HFEvent[]): HFEvent[];
762
-
763
1182
  interface UseTagBaseResult {
764
1183
  tagBase: TagBase | null;
765
1184
  isLoading: boolean;
@@ -783,6 +1202,4 @@ interface UseTagBaseResult {
783
1202
  }
784
1203
  declare function useTagBase(token: string, namespace: string): UseTagBaseResult;
785
1204
 
786
- declare const LIB_VERSION = "2.0.72";
787
-
788
- export { AvatarArchitectApp, type AvatarArchitectAppProps, CURRENT_TAG_EVENT_VERSION, CollapsibleCard, CompactDropdown, type DagFork, type ExtractedCharacter, FaApp, type FaAppProps, FaToolsBadge, type FlowSdk, GLOBAL_STYLES, type Generation, type HFEvent, type HFEventVersion, type HFFileInfo$1 as HFFileInfo, type HFMetadataEntry, type HFStateMeta, type HFStateResult, type HFStateSnapshot, HistoryPanel, type ImageAddedPayload, InspectPanel, LIB_VERSION, LabBlend, LabCompare, type LabFrame, LabFrameExtractor, type LabFrameExtractorProps, LabImagePicker, type LabItem, LabLoop, LabRemix, type LabServices, LabsTab, ListView, type MediaItem, MediaLibrary, type MetadataUpdatedPayload, PillButton, type ProjectMeta, type ProjectSettings, ProjectSyncTab, PromptTab, SectionLabel, type SelectedLabImage, type SelectedTag, type SelectionValidation, ServerTab, SetupPanel, type SyncDiff, type TagBase, type TagBaseContext, type TagBaseEvent, type TagBaseMeta, TagBaseSection, type TagBaseSectionProps, type TagBaseTagEntry, type TagBaseTagOption, type TagBaseUser, type TagBaseWorkspaceTags, type TagCreatedEvent, type TagCreatedPayload, TagManagerPanel, type TagOption, type TagUpdatedDelta, type TagUpdatedEvent, type TagUpdatedPayload, type TagUpsertedPayload, type UseTagBaseResult, type WorkspaceTags, applyEvent, applyEvents, autoLabel, buildBlendInstruction, buildCompareInstruction, buildDag, buildFallbackPrompt, buildGenerationPrompt, buildImageGenerationOptions, buildLoopInstruction, buildPromptTabPayload, buildReferenceImageMediaIds, buildRemixInstruction, buildScanInstruction, cleanAiResponse, createFlowServices, createTagCreatedEvent, createTagUpdatedEvent, deriveTagBaseWorkspaceTags, exportProjectToZip, findForks, findTips, formatTreeToMarkdown, frameToGeneration, getFormattedTimestamp, getHFToken, getSessionClientId, groupGenerationsToLabItems, hfBatchArchive, hfBootstrapFromLegacy, hfDeleteProject, hfDownloadProject, hfListDir, hfListProjects, hfLoadImageAsBase64, hfUploadImage, hfUploadProjectForm, hfUploadSmallFile, importProjectFromZip, injectXMPMetadata, interpretSdkError, loadHFState, loadPendingEvents, loadTagBase, parsePromptFile, parsePromptResponse, setHFToken, topoSort, tsFromEventPath, useHFState, useKeyboardNavigation, useOnClickOutside, useTagBase, validateTagBaseSelection, writeHFEvent, writeTagEvent };
1205
+ export { AvatarArchitectApp, type AvatarArchitectAppProps, CURRENT_TAG_EVENT_VERSION, CollapsibleCard, type CommandResult, CompactDropdown, type CreateFaStoreOptions, type CreatePersistenceCoordinatorOptions, type ExtractedCharacter, FaApp, type FaAppProps, type FaStore, type FaStoreState, FaToolsBadge, type FeatureSliceId, type FlowSdk, GLOBAL_STYLES, type Generation, type HFEvent, type HFEventVersion, type HFFileInfo$1 as HFFileInfo, type HFMetadataEntry, type HFStateMeta, type HFStateResult, type HFStateSnapshot, HistoryPanel, type ImageAddedPayload, type InMemoryWorkspacePersistence, InspectPanel, LIBRARY_CUTOVER_MARKER, LIBRARY_SLICE_SCHEMA_VERSION, version as LIB_VERSION, LabBlend, LabCompare, type LabFrame, LabFrameExtractor, type LabFrameExtractorProps, LabImagePicker, type LabItem, LabLoop, LabRemix, type LabServices, type LabSlotId, LabsTab, type LegacyMigrationOptions, type LegacyMigrationResult, type LegacyRecentTagRef, type LegacySourceResult, type LibraryCommandName, type LibraryCommands, type LibraryDataSource, type LibraryLegacySource, type LibraryListQuery, type LibraryPage, LibraryView, type LibraryViewItem, type LibraryViewProps, type LibraryViewTag, type LibraryWorkspaceState, ListView, type LoadResult, type MediaItem, MediaLibrary, type MetadataUpdatedPayload, type PersistedSlice, type PersistenceCoordinator, type PersistenceDescriptor, PillButton, type ProjectMeta, type ProjectSettings, ProjectSyncTab, PromptTab, type QueryResult, type RequestContext, type RunLibraryLegacyImportOptions, type RunTagsLegacyImportOptions, SCOPE_MAP, type SaveState, SectionLabel, type SelectedLabImage, type SelectedTag, type SelectionValidation, ServerTab, SetupPanel, type SliceContract, type SliceMeta, type SyncDiff, TAGS_CUTOVER_MARKER, TAGS_SLICE_SCHEMA_VERSION, type TagBase, type TagBaseContext, type TagBaseEvent, type TagBaseMeta, TagBaseSection, type TagBaseSectionProps, type TagBaseTagEntry, type TagBaseTagOption, type TagBaseUser, type TagBaseWorkspaceTags, type TagCommandName, type TagCommands, type TagCreatedEvent, type TagCreatedPayload, type TagEntry, type TagEntryInput, TagManager, TagManagerPanel, type TagManagerProps, type TagManagerSelection, type TagOption, type TagQueries, type TagUpdateDelta, type TagUpdatedDelta, type TagUpdatedEvent, type TagUpdatedPayload, type TagUpsertedPayload, type TagViewCategory, type TagViewModel, type TagViewOption, type TagViewScope, type TagsWorkspaceState, type UseTagBaseResult, type WorkspacePersistence, type WorkspaceTabId, type WorkspaceTags, type WriteResult, autoLabel, buildBlendInstruction, buildCompareInstruction, buildFallbackPrompt, buildGenerationPrompt, buildImageGenerationOptions, buildLoopInstruction, buildPromptTabPayload, buildReferenceImageMediaIds, buildRemixInstruction, buildScanInstruction, cleanAiResponse, createFaStore, createFlowServices, createInMemoryLibraryDataSource, createInMemoryWorkspacePersistence, createLibraryDefault, createPersistenceCoordinator, createTagCreatedEvent, createTagUpdatedEvent, createTagsDefault, deriveTagBaseWorkspaceTags, deriveTagViewModel, exportProjectToZip, formatTreeToMarkdown, frameToGeneration, getFormattedTimestamp, getHFToken, getSessionClientId, groupGenerationsToLabItems, hfBatchArchive, hfBootstrapFromLegacy, hfDeleteProject, hfDownloadProject, hfListDir, hfListProjects, hfLoadImageAsBase64, hfUploadImage, hfUploadProjectForm, hfUploadSmallFile, importProjectFromZip, injectXMPMetadata, interpretSdkError, libraryContract, libraryReactDescriptor, listCategories, loadHFState, loadPendingEvents, loadTagBase, parseLegacyLibraryFilters, parseLegacyRecentTags, parsePromptFile, parsePromptResponse, runLegacyMigration, runLibraryLegacyImport, runTagsLegacyImport, setHFToken, tagsContract, tagsReactDescriptor, tsFromEventPath, useFaSlice, useFaSliceMeta, useHFState, useKeyboardNavigation, useOnClickOutside, useTagBase, validateTagBaseSelection, writeHFEvent, writeTagEvent };