Both discovery modes generate a local .deeep.index.json by default. Use deeep sync --dry-run to inspect it without uploading components. The index is generated output; change your source or deeep.json and regenerate it instead of editing entries manually.

Local index structure

Entries include names, source and import paths, exports, framework/language, props and analysis status, local dependencies, declared package versions, styles, asset paths, and a source hash. Storybook entries also include story file paths and story metadata. The local index is more detailed than the upload manifest. Props, asset lists, diagnostics, and the complete index file are not sent as the component-sync payload.

CLI discovery coverage

The scanner reads .js, .jsx, .mjs, .ts, .tsx, and .vue files matching components, then applies exclude. It skips .d.ts, symlinked files/directories, and common dependency/build directories, including node_modules, .git, dist, build, and storybook-static. Use repository-relative patterns such as src/components/**/*.{js,jsx,mjs,ts,tsx,vue}. Brace alternatives and **/ matching are supported. Re-export-only index files are skipped as component entries; point discovery at implementation directories. Analysis recognizes common exported components, Vue single-file components, and Angular component declarations. It extracts props from supported TypeScript declarations and local type imports, React PropTypes, Vue props, Angular inputs, JSDoc, defaults, and usage. Local source imports and supported TypeScript/JavaScript path aliases contribute dependency paths.
Analysis is static and heuristic. It does not execute your application or provide full TypeScript compiler resolution. Review propsAnalysis and diagnostics when types are inferred, partial, or unresolved. Svelte can be detected as a project framework, but .svelte files are not supported by the direct component scanner.
Source files larger than 2 MiB are skipped with SOURCE_TOO_LARGE. Unreadable or non-UTF-8 source produces SOURCE_READ_FAILED.

Storybook metadata

The reader recognizes index format versions 2, 3, 4, and 5 (the index’s v field, not the installed Storybook major version). Other versions are parsed on a best-effort basis with a warning. Both modern entries and legacy stories collections are accepted; modern docs-only entries are excluded. Component resolution supports common CSF metadata, typed Meta<typeof Component> patterns, namespace imports, local aliases, workspace package imports, and supported barrel re-exports. When a component implementation cannot be resolved, a synthetic entry based on the story file may be retained with COMPONENT_SOURCE_UNRESOLVED; inspect it before uploading. Story metadata includes available IDs, names, export names, titles, tags, JSON-safe args, and per-story argTypes. Meta-level args are merged with story overrides. Functions, expressions, JSX-like values, deeply nested values, and oversized values are omitted rather than executed. Sanitization limits nested containers to six levels and drops dictionary values whose JSON serialization exceeds 4,096 characters. When present, .storybook/preview.js, .jsx, .ts, or .tsx under the configured directory is attached as previewPath during manifest creation. It is not part of the component sourcePaths list or its content hash. Commit and push preview configuration as well so the referenced revision contains it. The Storybook index size limit is 25 MiB. A missing index generates a warning and empty local index; a real sync rejects the empty manifest. Invalid JSON or a missing entries/stories collection blocks index generation.

Package versions

For each component, package imports are matched against the nearest owning package.json, walking toward the repository root. The first manifest found is used; undeclared packages are omitted rather than guessed from ancestor manifests. Declaration precedence is dependencies, then peerDependencies, then devDependencies. Versions are declared ranges, not exact installed or lockfile-resolved versions. Registry ranges such as ^18.0.0 are preserved. Dist-tags without digits and recognized non-registry protocols such as workspace:, file:, and git+ become *.

Uploaded manifest

Each component contains externalId, name, exportName, entryPath, sourcePaths, and packages, with optional storybook metadata and contentHash. Source paths combine discovered local source dependencies, styles, and story files, excluding the entry path itself. Asset paths are not included in this list. The component contentHash is a SHA-256 digest of sorted, unique entry/source paths and their file bytes, separated by null bytes. It differs from the local index’s sourceHash, which hashes only the entry file and uses a sha256: prefix. The content hash is omitted if a required file is missing. The canonical manifest hash supports repeatable sync requests; timestamps from the local index are not included.

Common diagnostics

Warning/error counts in the generated index do not necessarily fail the command. Review them along with the discovered set before syncing.