// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL // This file is automatically generated. DO NOT EDIT // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as mod$0 from "../internal/mod/models.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as pvf$0 from "../internal/pvf/models.js"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore: Unused imports import * as ruleconfig$0 from "../internal/ruleconfig/models.js"; /** * AdvancedSearchDetail explains why a file matched the query. */ export interface AdvancedSearchDetail { "kind": string; "value"?: string; "pool"?: string; "poolOffset"?: number; "occurrences": number; "tokenTypes"?: number[] | null; "fileFields"?: string[] | null; "byteOffsets"?: number[] | null; "tokenOffsets"?: number[] | null; "hex"?: string; "offsetsTruncated"?: boolean; } /** * AdvancedSearchHit is one file-level advanced-search result. */ export interface AdvancedSearchHit { "name"?: string; "path": string; "size": number; "dataType": number; "fileIndex": number; "details"?: (AdvancedSearchDetail | null)[] | null; } /** * AdvancedSearchIndexStatus describes the lazy string reverse-index state. */ export interface AdvancedSearchIndexStatus { "state": string; "stage": string; "done": number; "total": number; "error": string; } /** * AdvancedSearchResult is a paged file-level advanced-search response. */ export interface AdvancedSearchResult { "hits": (AdvancedSearchHit | null)[] | null; "nextCursor": number; "scanned": number; } /** * AniPreviewDocument is the structured preview model returned for .ani text. */ export interface AniPreviewDocument { "valid": boolean; "loop": boolean; "shadow": boolean; "frameMax": number; "frames": AniPreviewFrame[] | null; "issues": PreviewIssue[] | null; } /** * AniPreviewFrame is one decoded ANI frame. */ export interface AniPreviewFrame { "index": number; "delayMs": number; "layers": AniPreviewLayer[] | null; } /** * AniPreviewLayer is one image layer in an ANI frame. */ export interface AniPreviewLayer { "image": ImageReference; "x": number; "y": number; } export interface AnnotationReloadResult { "ruleCount": number; "relationCount": number; } export interface AppSettings { /** * CacheLimitGiB is the soft disk budget; zero disables automatic eviction. */ "cacheLimitGiB": number; "annotationTagPlacement": string; "explorerOpenMode": string; "vimMode": boolean; "backupSourceOnSave": boolean; "npkDirectory": string; "theme": string; /** * AutosaveEnabled turns the timed workspace snapshot on. It is off by * default: the snapshot rewrites a whole PVF, so the user opts in. */ "autosaveEnabled": boolean; /** * AutosavePath is the single-slot snapshot file. Empty means the platform * cache directory resolved by DefaultAutosavePath. */ "autosavePath": string; "autosaveIntervalSeconds": number; /** * ShortcutOverrides stores only bindings changed by the user. An empty * value explicitly disables a command's default binding. */ "shortcutOverrides": { [_ in string]?: string } | null; "maxEditableSizeMB": number; } export interface ArchiveDiffDraft { "fileIndex": number; "path": string; "text": string; } export interface ArchiveDiffFile { "path": string; "operation": string; "beforeHash": string; "afterHash": string; "beforeType": number; "afterType": number; "beforeSize": number; "afterSize": number; "beforeExists": boolean; "afterExists": boolean; "beforeText": string; "afterText": string; "textAvailable": boolean; "message": string; } /** * ArchiveDiffMergeResult 记录批量合并操作的结果汇总 */ export interface ArchiveDiffMergeResult { "successCount": number; "failedCount": number; "mergedPaths": string[] | null; "errors"?: string[] | null; } export interface ArchiveDiffNode { "path": string; "name": string; "isDir": boolean; "operation": string; "count": number; } export interface ArchiveDiffRequest { "path": string; "drafts": ArchiveDiffDraft[] | null; } export interface ArchiveDiffStatus { "id": string; "state": string; "currentPath": string; "otherPath": string; "processed": number; "total": number; "added": number; "modified": number; "deleted": number; "error": string; } /** * ArchiveInfo 是前端可观察的归档状态快照。 */ export type ArchiveInfo = pvf$0.ArchiveInfoView; /** * AutosaveStatus is the UI-facing state of the backup slot. */ export interface AutosaveStatus { "enabled": boolean; "path": string; "defaultPath": string; "exists": boolean; "cachedAt": number; "sourcePath": string; "sizeBytes": number; "running": boolean; "lastError": string; } export interface BatchApplyResult { "appliedFiles": number; "fileIndexes": number[] | null; "modifiedCount": number; "revision": number; } export interface BatchDiffLine { "kind": string; "text": string; "oldLine": number; "newLine": number; } export interface BatchFilePreview { "fileIndex": number; "path": string; "status": string; "matchCount": number; "reason"?: string; "warnings"?: string[] | null; "diff"?: (BatchDiffLine | null)[] | null; "diffTruncated"?: boolean; } export interface BatchPreviewPage { "planId": string; "nextCursor": number; "requestedFiles": number; "matchedFiles": number; "matchedOccurrences": number; "changedFiles": number; "rows": (BatchFilePreview | null)[] | null; } export interface BatchRequest { "mode": string; "paths": string[] | null; "text"?: TextReplaceSpec | null; "operations"?: StructuredOperation[] | null; } /** * BookmarkBook is a runtime bookmark book. Builtin books are read-only in * packaged applications and editable when running from the repository. */ export interface BookmarkBook { "id": string; "name": string; "builtin": boolean; "editable": boolean; "groups"?: BookmarkGroup[] | null; "entries"?: BookmarkEntry[] | null; } /** * BookmarkBookFile is the portable JSON representation of one bookmark book. * IDs and runtime flags are intentionally omitted so imports always receive * fresh local identities and are treated as editable books. */ export interface BookmarkBookFile { "version": number; "name": string; "groups"?: BookmarkGroup[] | null; "entries"?: BookmarkEntry[] | null; } /** * BookmarkDocument is the complete runtime bookmark state. */ export interface BookmarkDocument { "version": number; "activeBookId": string; "books": BookmarkBook[] | null; } /** * BookmarkEntry is one PVF-internal file bookmark. */ export interface BookmarkEntry { "path": string; "name": string; } /** * BookmarkGroup is a recursively nested bookmark group. */ export interface BookmarkGroup { "id": string; "name": string; "groups"?: BookmarkGroup[] | null; "entries"?: BookmarkEntry[] | null; } export interface BuiltinSkill { "id": string; "title": string; "description": string; } /** * CacheClearResult reports what one clear pass removed. */ export interface CacheClearResult { "freedBytes": number; "usage": CacheUsage; } /** * CacheUsage is the disk footprint reported to the settings page. */ export interface CacheUsage { "limitBytes": number; "indexBytes": number; "backupBytes": number; "reclaimableBytes": number; "overBudget": boolean; "path": string; "files": number; "totalBytes": number; /** * InUseBytes covers the indexes the running session holds open. They are * rebuilt once the archive is closed, so a clear pass has to skip them. */ "inUseBytes": number; } /** * DropRateApplyRequest applies the complete editor snapshot atomically. */ export interface DropRateApplyRequest { "revision": number; "sections": (DropRateSection | null)[] | null; } /** * DropRateApplyResult reports the in-memory archive state after applying. */ export interface DropRateApplyResult { "revision": number; "fileIndexes": number[] | null; "modifiedCount": number; } /** * DropRateDocument is the structured view consumed by the drop-rate editor. * Rates are percentage hundredths: 1234 means 12.34%. */ export interface DropRateDocument { "pvfVersion": string; "revision": number; "sections": (DropRateSection | null)[] | null; } /** * DropRateGroup contains five rarity probabilities in percentage hundredths. */ export interface DropRateGroup { "rates": number[] | null; } /** * DropRateSection identifies one of the four supported drop files. */ export interface DropRateSection { "key": string; "groups": (DropRateGroup | null)[] | null; } export interface EditorAnnotation { "start": number; "end": number; "title": string; "content": string; "type": string; "targetFileIndex": number; "ruleIds"?: string[] | null; "image"?: ImageReference | null; "inlineImage"?: boolean; "placeholder"?: PlaceholderRef | null; "rarity": number; } export interface EffectParticle { "life": number; "frequency": number; "maximum": number; "maximumTime": number; "gravity": number; "position": number[] | null; "area": number[] | null; "alpha": number[] | null; "velocity": number[] | null; "acceleration": number[] | null; } /** * EquipmentPreviewAttribute is one visible line in an equipment tooltip. */ export interface EquipmentPreviewAttribute { "label": string; "value": string; "negative": boolean; } /** * EquipmentPreviewDocument is the game-style data model rendered by the * frontend. Optional sections are represented by empty strings/slices. */ export interface EquipmentPreviewDocument { "icon": ImageReference | null; "name": string; "name2": string; "rarity": number; "rarityLabel": string; "qualityText": string; "equipmentType": string; "itemGroupName": string; "attachType": string; "minimumLevelText": string; "usableJobs": string[] | null; "fameText": string; "baseAttributes": EquipmentPreviewAttribute[] | null; "fourDimensions": EquipmentPreviewAttribute[] | null; "otherAttributes": EquipmentPreviewAttribute[] | null; "skillLevelups": EquipmentSkillLevelup[] | null; "baseExplain": string; "detailExplain": string; "buffBasicExplain": string; "flavorText": string; "durabilityText": string; "weightText": string; "priceText": string; "partSet"?: EquipmentSetPreviewDocument | null; "issues": PreviewIssue[] | null; } /** * EquipmentSetAbility is one bonus unlocked by wearing a number of set pieces. */ export interface EquipmentSetAbility { "pieces": number; "baseExplain": string; "detailExplain": string; } /** * EquipmentSetPreviewDocument is the set tooltip associated with an equipment. */ export interface EquipmentSetPreviewDocument { "name": string; "parts": string[] | null; "abilities": EquipmentSetAbility[] | null; } /** * EquipmentSkillLevelup is one profession-aware skill level bonus. */ export interface EquipmentSkillLevelup { "job": string; "skill": string; "level": number; } export interface ExportMergeSource { "path": string; "name": string; "version": string; "versionNotice": string; } export interface ExportPreview { "id": string; "fileCount": number; "dependencyCount": number; "skippedDeletes": number; "warnings": string[] | null; "files": ExportPreviewFile[] | null; } export interface ExportPreviewFile { "path": string; "required": boolean; "dependencyCount": number; } export interface ExportRequest { "source": string; "diffId"?: string; "reverse"?: boolean; "scopes": string[] | null; "commitId": string; "mode": string; "format": string; "name": string; "version": string; "modId": string; "includeDependencies": boolean; "mergePath"?: string; } /** * FileMeta 返回给前端的单个文件视图。 */ export interface FileMeta { "index": number; "path": string; "dataType": number; "size": number; "tags"?: TreeTag[] | null; "editable": boolean; "text": string; "modified": boolean; "annotations"?: EditorAnnotation[] | null; "icon"?: ImageReference | null; "fieldImage"?: ImageReference | null; } /** * FileRegistration describes one indexed id/path entry in an archive list. */ export interface FileRegistration { "id": string; "category": string; "fileIndex": number; "filePath": string; "listFileIndex": number; "listPath": string; "entryPath": string; } /** * FileRegistrationOptions contains the list choices for the current file. */ export interface FileRegistrationOptions { "fileIndex": number; "filePath": string; "targets": (ListRegistrationTarget | null)[] | null; } /** * FileSetDocument 是全部文件集的持久化文档,与当前打开的 PVF 无关。 */ export interface FileSetDocument { "version": number; "fileSets": StoredFileSet[] | null; "activeSetId": string; } export interface ForgeDocument { /** * Rows use the shared four-field editing contract. Six-column source rows * retain their two additional read-only coefficients in FieldsT2. */ "rows": UpgradeRow[] | null; "grades": UpgradeRow[] | null; "grades100": UpgradeRow[] | null; "maximum": SkillNumber; "extras": ForgeSection[] | null; } export interface ForgeSection { "name": string; "fields": SkillNumber[] | null; } /** * ImageBatchResult corresponds to the request at the same array position. * A corrupt frame does not prevent other frames in the batch from loading. */ export interface ImageBatchResult { "data": ImageData | null; "error": string; } /** * ImageData is always a PNG data URL. The source NPK path is intentionally * never exposed to the frontend. */ export interface ImageData { "dataUrl": string; "width": number; "height": number; } /** * ImageIndexStatus is emitted while the NPK directory is being scanned. */ export interface ImageIndexStatus { "state": string; "stage": string; "directory": string; "done": number; "total": number; "npkFiles": number; "imgFiles": number; "imageCount": number; "skipped": number; "duplicates": number; "error": string; "generation": number; "buildDurationMs": number; } /** * ImageReference is the PVF path plus zero-based frame index stored in an * [icon] or [field image] section. */ export interface ImageReference { "path": string; "index": number; } /** * ImportPreview describes the validated changes without modifying the live * archive. Entries is capped for large directory imports; the counters remain * complete. */ export interface ImportPreview { "targetDir": string; "mode": string; "totalFiles": number; "importedCount": number; "overwrittenCount": number; "entries": (ImportPreviewEntry | null)[] | null; "entriesTruncated": boolean; "convertedCount": number; } /** * ImportPreviewEntry is one validated source-to-archive mapping. */ export interface ImportPreviewEntry { "sourcePath": string; "targetPath": string; "dataType": number; "size": number; "overwrite": boolean; "sourceEncoding": string; } /** * ImportResult describes one atomically applied import operation. */ export interface ImportResult { "targetDir": string; "mode": string; "importedCount": number; "overwrittenCount": number; "changedPaths"?: string[] | null; } export interface IndependentDropDocument { "version": string; "rows": IndependentDropRow[] | null; "lists": IndependentDropList[] | null; "balance": SkillNumber[] | null; "bodyEnd": number; "isList": boolean; "issues": string[] | null; } export interface IndependentDropItem { "fields": SkillNumber[] | null; "name": string; } export interface IndependentDropList { "id": string; "path": string; "fileIndex": number; } export interface IndependentDropRow { "listTagStart": number; "fields": SkillNumber[] | null; "items": IndependentDropItem[] | null; "monsterName": string; "itemName": string; "start": number; "end": number; "listStart": number; "listEnd": number; "hasExtensions": boolean; } /** * IndexHashRegistrationResult summarizes a batch hash registration. */ export interface IndexHashRegistrationResult { "listPath": string; "indexHashPath": string; "requested": number; "added": number; "existing": number; "invalidIds"?: string[] | null; } /** * IndexHashTarget describes a list whose companion index-hash file exists. */ export interface IndexHashTarget { "listPath": string; "indexHashPath": string; } /** * IndexStatus is the current state of the semantic search index. */ export interface IndexStatus { "state": string; "stage": string; "done": number; "total": number; "skipped": number; "error": string; /** * Refreshing means an older ready snapshot is still serving queries while * a newer candidate is being built in the background. */ "refreshing": boolean; "refreshError": string; "cacheHit": boolean; "openDurationMs": number; "buildDurationMs": number; "stringTableIndex"?: pvf$0.StringTableIndexStats | null; } /** * ItemAppearance shares the item rarity and icon metadata used by shop views. */ export interface ItemAppearance { "icon": ImageReference | null; "rarity": number; } /** * ItemCreateRequest carries all relevant editor drafts, so unsaved list entries * participate in collision checks and survive registration. */ export interface ItemCreateRequest { "path": string; "id": string; "name": string; "text": string; "revision": number; "drafts": ShopDraft[] | null; } export interface ItemCreateResult { "fileIndex": number; "path": string; "id": string; "files": ShopEditedFile[] | null; } export interface ItemCreationCheck { "revision": number; "listPath": string; "entryPath": string; "conflicts": string[] | null; } export interface ItemEffectLayer { "path": string; "animation": AniPreviewDocument | null; "particle"?: EffectParticle | null; } export interface ItemEffectPreview { "objectPath": string; "layers": ItemEffectLayer[] | null; "issues": string[] | null; } /** * ListRegistrationTarget describes a list that can register one archive file. */ export interface ListRegistrationTarget { "listPath": string; "category": string; "entryPath": string; "suggestedId": string; "hasIndexHash": boolean; } export interface MCPStatus { "enabled": boolean; "port": number; "endpoint": string; "error"?: string; "busy": boolean; } export interface ModImportFile { "path": string; "operation": string; "overwrite": boolean; "pairs": ModImportPair[] | null; } export interface ModImportPair { "key": string; "value": string; "previous": string; "overwrite": boolean; } export interface ModImportPreview { "id": string; "name": string; "version": string; "format": string; "importedCount": number; "overwrittenCount": number; "files": ModImportFile[] | null; "components": mod$0.Component[] | null; "selectedComponents": string[] | null; "warnings": string[] | null; } /** * PlaceholderRef identifies the string-table entry a placeholder annotation * resolves through, so the editor can offer to rewrite — or create — that text. */ export interface PlaceholderRef { "tableIndex": number; "key": string; "fallback"?: boolean; /** * Missing reports a placeholder no table answers yet: the editor offers to * create the entry, which is how a new file gets its display text. */ "missing"?: boolean; } /** * PreviewIssue is a recoverable problem reported by a preview parser. */ export interface PreviewIssue { "severity": string; "line": number; "section"?: string; "message": string; } /** * RecoveryInfo describes a backup that can be restored on startup. */ export interface RecoveryInfo { "sourcePath": string; "sourceName": string; "cachedAt": number; "sizeBytes": number; "pendingFiles": number; "sourceExists": boolean; "sourceChanged": boolean; } /** * RenderingReloadResult describes the renderer that was activated. */ export interface RenderingReloadResult { "ruleCount": number; } export interface RuleQueryResult { "revision": string; "development": boolean; "entries": ruleconfig$0.Entry[] | null; "relations": string[] | null; } export interface RuleTarget { "category": string; "path": string; "section": string; "directory": boolean; } /** * SafeUpgradeRow preserves eight source fields. Column 2 is failure probability * with denominator 100000; 3 is correction, 5/6 are material ID/count, 7 is gold. * Columns 1/4 remain unidentified and are preserved by GUI edits. */ export interface SafeUpgradeRow { "fields": SkillNumber[] | null; "costName": string; } export interface ScriptApplyResult { "appliedFiles": number; "fileIndexes": number[] | null; "modifiedCount": number; "revision": number; /** * Structural reports whether the commit changed the entry table, which * means every previously previewed file index is now stale. */ "structural": boolean; /** * AppliedFileSets counts the file set mutations written to user config. */ "appliedFileSets": number; } export interface ScriptCompileResult { "valid": boolean; "diagnostics": (ScriptDiagnostic | null)[] | null; } export interface ScriptDiagnostic { "kind": string; "message": string; "stack"?: string; "line"?: number; "column"?: number; } export interface ScriptError { "kind": string; "message": string; "stack"?: string; "line"?: number; "column"?: number; } export interface ScriptFile { "name": string; "size": number; "modifiedAt": string; } export interface ScriptFilePreview { /** * ChangeKey is the stable selection key. Structural changes shift entry * indexes, so the frontend must select rows by this key, not FileIndex. */ "changeKey": string; "fileIndex": number; "path": string; "status": string; "matchCount": number; "reason"?: string; "warnings"?: string[] | null; "diff"?: (BatchDiffLine | null)[] | null; "diffTruncated"?: boolean; } /** * ScriptFileSetPreview describes one staged file set mutation. */ export interface ScriptFileSetPreview { "changeKey": string; "name": string; "status": string; /** * Added and Removed are the path-level difference against the persisted set, * so the UI can show what a setAll actually changed. */ "added"?: string[] | null; "removed"?: string[] | null; /** * Count is the resulting entry total after the change. */ "count": number; } export interface ScriptLog { "level": string; "message": string; } export interface ScriptPreviewPage { "planId": string; "nextCursor": number; /** * Filter echoes the path filter this page was built with. */ "filter"?: string; /** * MatchedFiles counts every row matching the filter across all pages, so * the UI can report an accurate total instead of only what is loaded. */ "matchedFiles": number; "scannedFiles": number; "modifiedFiles": number; "rows": (ScriptFilePreview | null)[] | null; /** * FileSetRows lists the staged file set mutations. They are not diffed rows, * but the apply step must show and select them alongside archive changes. */ "fileSetRows"?: (ScriptFileSetPreview | null)[] | null; /** * FileSetSelectKey is the change key the frontend selects to apply every * file set mutation, mirroring how archive rows use ChangeKey. */ "fileSetSelectKey"?: string; } export interface ScriptRunRequest { "name"?: string; "source": string; } export interface ScriptRunResult { "runId": string; "status": string; "planId"?: string; "scannedFiles": number; "modifiedFiles": number; "fileSetChanges": number; "durationMs": number; "logs": (ScriptLog | null)[] | null; "error"?: ScriptError | null; } /** * ScriptSession is the script editor state handed between the main window and * the detached script window. Every webview has its own Pinia store, so the * content has to travel explicitly. */ export interface ScriptSession { "name": string; "source": string; "savedSource": string; } /** * SearchHit is one searchable file/list record. */ export interface SearchHit { "name": string; "id": string; "path": string; "category": string; "size": number; "dataType": number; "fileIndex": number; "rarity": number; "changeKind"?: string; "annotations"?: TreeAnnotation[] | null; "pathAnnotations"?: { [_ in string]?: TreeAnnotation[] | null } | null; "icon"?: ImageReference | null; "fieldImage"?: ImageReference | null; } /** * SearchResult 是一页搜索命中;NextCursor < 0 表示已扫完。 */ export interface SearchResult { "hits": (SearchHit | null)[] | null; "nextCursor": number; "scanned": number; } export interface ShopCategory { "id": string; "name": string; } export interface ShopCost { "kind": string; "itemId": string; "quantity": string; "name": string; "icon": ImageReference | null; } export interface ShopDocument { "revision": number; "name": string; "categoryType": string; "categories": ShopCategory[] | null; "tabs": ShopTab[] | null; "issues": PreviewIssue[] | null; } export interface ShopDraft { "fileIndex": number; "path": string; "text": string; } export interface ShopEditRequest { "fileIndex": number; "path": string; "text": string; "revision": number; "action": string; "tabIndex": number; "sourceStart": number; "categoryId": string; "itemId": string; "name": string; "setGold": boolean; /** * empty removes [price], "0" is an explicit zero */ "gold": string; "setMaterials": boolean; "materials": ShopMaterialInput[] | null; "drafts": ShopDraft[] | null; } export interface ShopEditResult { "revision": number; "files": ShopEditedFile[] | null; "affectedItems": number; "modifiedCount": number; } export interface ShopEditedFile { "fileIndex": number; "path": string; "beforeText": string; "text": string; } export interface ShopEntry { "item": ShopItem; "sourceStart": number; "sourceEnd": number; "hasLocalCosts": boolean; } export interface ShopGroup { "categoryId": string; "sourceStart": number; "items": ShopEntry[] | null; } export interface ShopItem { "fileIndex": number; "path": string; "id": string; "name": string; "rarity": number; "icon": ImageReference | null; "costs": ShopCost[] | null; } export interface ShopMaterialInput { "itemId": string; "quantity": string; } export interface ShopTab { "name": string; "sourceStart": number; "groups": ShopGroup[] | null; "implicit": boolean; } export interface SkillDocument { "name": string; "modes": SkillMode[] | null; } export interface SkillEntry { "fileIndex": number; "path": string; "name": string; "job": string; } export interface SkillInstallResult { "id": string; "path": string; "status": string; "message": string; } export interface SkillMode { "id": string; "static": SkillNumber[] | null; "width": number; "levels": (SkillNumber[] | null)[] | null; "properties": SkillProperty[] | null; "issues": string[] | null; } /** * SkillNumber retains exact UTF-16 source positions so GUI edits preserve all * unrelated tags, formatting, and numeric token types in the editor draft. */ export interface SkillNumber { "value": number; "start": number; "end": number; "tokenType": number; } export interface SkillProperty { "template": string; "bindings": SkillPropertyBinding[] | null; } export interface SkillPropertyBinding { "dynamic": boolean; "index": number; "multiplier": number; } export interface SkillTreeBranch { "insertOffset": number; "job": string; "name": string; "nodes": SkillTreeNode[] | null; } export interface SkillTreeDocument { "text": string; "fileIndex": number; "path": string; "common": SkillTreeNode[] | null; "branches": SkillTreeBranch[] | null; "issues": string[] | null; } export interface SkillTreeNode { "sourceStart": number; "sourceClose": number; "positionTokens": SkillNumber[] | null; "nextTokens": SkillNumber[] | null; "id": number; "x": number; "y": number; "positionKind": string; "position": number[] | null; "next": number[] | null; "name": string; "explain": string; "path": string; "fileIndex": number; "icon": ImageReference | null; "requiredLevel": number | null; } /** * SkillTreeRegistration retains the job token: skill IDs are local to this job. */ export interface SkillTreeRegistration { "job": string; "kind": string; "path": string; } export interface SkillTreeSkill { "id": number; "name": string; "path": string; "fileIndex": number; } export interface StoredFileSet { "id": string; "name": string; "entries": StoredFileSetEntry[] | null; } /** * StoredFileSetEntry 是文件集落盘格式。fileIndex 不持久化,因为它只对当前 PVF 有效。 */ export interface StoredFileSetEntry { "path": string; "name": string; "ids"?: string[] | null; "size": number; "dataType": number; } export interface StructuredOperation { "kind": string; "section": string; "tokenIndex": number; "value": string; "createIfMissing": boolean; "operator": string; "operand": string; "operandEnd": string; "anchorSection": string; "hasEndTag": boolean; } export interface TextReplaceSpec { "find": string; "replacement": string; "regex": boolean; } /** * TreeAnnotation is one annotation attached to a path in the explorer. */ export interface TreeAnnotation { "title": string; "content": string; "type": string; "ruleIds"?: string[] | null; } /** * TreeNode is one entry in the explorer tree: either a directory or a file. */ export interface TreeNode { "name": string; "path": string; "isDir": boolean; "size": number; "dataType": number; "childCount": number; /** * -1 for directories */ "fileIndex": number; "changeKind"?: string; "tags"?: TreeTag[] | null; "annotations"?: TreeAnnotation[] | null; "icon"?: ImageReference | null; "fieldImage"?: ImageReference | null; } /** * TreeTag is one list mapping displayed after a file name in the explorer. */ export interface TreeTag { "id": string; "name": string; "category": string; /** * Rarity is the target file's [rarity] value, or pvf.RarityUnknown when the * file declares none. The explorer colors the tag with it. */ "rarity": number; } export interface UpgradeDocument { "rows": UpgradeRow[] | null; "safeRows": SafeUpgradeRow[] | null; "safeIssue": string; } /** * UpgradeRow exposes only the five editable columns. Level follows the source * tool's row order. Fields holds weapon settings and shared materials; * FieldsT2 holds armor probability, failure operation, and downgrade parameter. * All other table parameters retain their source text. */ export interface UpgradeRow { "level": number; "fields": SkillNumber[] | null; "fieldsT2": SkillNumber[] | null; "costName": string; } export interface VendingDocument { "groups": VendingGroup[] | null; } export interface VendingGroup { "start": number; "end": number; "number": SkillNumber; "material": SkillNumber[] | null; "materialName": string; "rewards": VendingReward[] | null; "outputClose": number; } export interface VendingReward { "fields": SkillNumber[] | null; "name": string; } /** * VersionChange is a path-level worktree or commit change. */ export interface VersionChange { "path": string; "operation": string; "beforeHash"?: string; "afterHash"?: string; "beforeType"?: number; "afterType"?: number; } export interface VersionChangePage { "changes": (VersionChange | null)[] | null; "nextCursor": number; "total": number; } export interface VersionCommit { "id": string; "parentId": string; "message": string; "createdAt": number; "changeCount": number; } /** * VersionFileDiff contains one commit change and its logical text values * when the underlying PVF type is editable. */ export interface VersionFileDiff { "path": string; "operation": string; "beforeHash"?: string; "afterHash"?: string; "beforeType"?: number; "afterType"?: number; "beforeText"?: string; "afterText"?: string; "textAvailable": boolean; } export interface VersionHistoryPage { "commits": (VersionCommit | null)[] | null; "nextCursor": number; } /** * VersionStatus is the UI-facing version session state. */ export interface VersionStatus { "enabled": boolean; "loading": boolean; "repositoryPath": string; "branch": string; "headId": string; "headMessage": string; "changedFiles": number; "pendingChangeSets": number; "needsSave": boolean; "viewCommitId": string; "error": string; } export interface WorldDropDocument { "revision": number; "levels": WorldDropLevel[] | null; } export interface WorldDropEditRequest { "fileIndex": number; "path": string; "text": string; "revision": number; "levels": WorldDropLevel[] | null; } export interface WorldDropEditResult { "revision": number; "files": ShopEditedFile[] | null; "modifiedCount": number; } export interface WorldDropItem { "id": number; "weight": number; "name": string; } export interface WorldDropLevel { "level": number; "items": WorldDropItem[] | null; }