@appilots/cli 0.11.3 → 0.13.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/README.md CHANGED
@@ -22,14 +22,14 @@ appilots watch # re-sync automatically on file changes
22
22
 
23
23
  ## All commands
24
24
 
25
- | Command | Description |
26
- |---------|-------------|
25
+ | Command | Description |
26
+ | ------------------------------- | ------------------------------------------------------------- |
27
27
  | `appilots init --api-key <key>` | Configure project, validate credentials, create `.appilotsrc` |
28
- | `appilots sync` | Analyze source, generate context document, upload to Appilots |
29
- | `appilots sync --force` | Force upload even if nothing changed |
30
- | `appilots watch` | Watch for file changes and auto-sync |
31
- | `appilots generate` | Generate context document locally (no upload) |
32
- | `appilots status` | Show local config and remote project status |
28
+ | `appilots sync` | Analyze source, generate context document, upload to Appilots |
29
+ | `appilots sync --force` | Force upload even if nothing changed |
30
+ | `appilots watch` | Watch for file changes and auto-sync |
31
+ | `appilots generate` | Generate context document locally (no upload) |
32
+ | `appilots status` | Show local config and remote project status |
33
33
 
34
34
  ## Configuration (`.appilotsrc`)
35
35
 
@@ -59,9 +59,9 @@ Created by `appilots init`. Supports these fields:
59
59
 
60
60
  All commands accept configuration via environment variables, so CI pipelines can run without a `.appilotsrc`:
61
61
 
62
- | Variable | Overrides |
63
- |----------|-----------|
64
- | `APPILOTS_API_KEY` | `apiKey` |
62
+ | Variable | Overrides |
63
+ | --------------------- | ----------- |
64
+ | `APPILOTS_API_KEY` | `apiKey` |
65
65
  | `APPILOTS_PROJECT_ID` | `projectId` |
66
66
  | `APPILOTS_SERVER_URL` | `serverUrl` |
67
67
 
@@ -80,7 +80,19 @@ appilots sync --api-key ak_xxx --server https://api.appilots.com
80
80
  2. `registerScreen()` calls (from `@appilots/sdk`) are the primary metadata source; JSX analysis enriches anything not declared
81
81
  3. A context document (JSON) is generated with a SHA-256 checksum
82
82
  4. On `sync`, the document is uploaded to Appilots only if the checksum changed (skip with `--force`)
83
- 5. The Appilots backend uses this document to give AI agents full awareness of your app structure
83
+ 5. The Appilots backend combines this document with the current SDK observation to ground agent decisions
84
+
85
+ ### Icon controls without labels
86
+
87
+ `generate` and `sync` also produce `control-evidence.json` in `outputDir`. This local sidecar preserves icon symbols, handler references, symbolic arguments, mounting conditions, and supported native confirmation evidence for source controls with `onPress`. Screen descriptors include `controlCandidates`; these are evidence, not new executable actions.
88
+
89
+ The extractor follows direct icon-library imports, including aliases and namespace imports, and inspects JSX in presentation slots and nested render props. It preserves exported glyph names even when the local name does not contain `Icon`. Handler analysis follows local function aliases, React's `useCallback`, class methods, and invoked local helpers within bounded lexical analysis. JSX spread order is respected: if a later opaque spread can replace the callback, the known child glyph can remain as evidence, but uncertain handler calls and arguments are withheld. Literal business arguments and handler bodies are not copied into this evidence.
90
+
91
+ With a compatible SDK, the existing `withAppilots` Metro integration chains the app's configured Babel transformer and adds source metadata to the compiled JSX. It does not edit client source files. The SDK binds that metadata to a currently mounted control and its list entity before offering an executable identifier. Annotated wrappers may forward the same callback to a single native pressable; a different nested callback or multiple pressables remains ambiguous. Ambiguous, disabled, removed, or unbound controls remain unavailable. An icon name alone never authorizes a destructive operation.
92
+
93
+ Regenerate after changing source and restart Metro so the new sidecar participates in transformation and caching. Source hashes must match; stale evidence is not inserted. If the CLI uses a custom `outputDir`, pass the same directory to `withAppilots(config, { outputDir: 'your-directory' })`. This bridge requires a configured `babelTransformerPath` and compatible CLI, SDK, and API versions; a CLI-only update cannot enable runtime dispatch.
94
+
95
+ Static analysis is partial: cross-file barrel/re-export chains, imported/opaque handler bodies, arbitrary hook wrappers, dynamically drawn icons, and unsupported build systems may need additional evidence. Presentation-slot JSX is source evidence, not proof that the slot is currently rendered. The runtime binding remains necessary. This feature does not add screenshot interpretation, discover every off-screen gesture, or prove that an action's effect persisted.
84
96
 
85
97
  ## Recommended project structure
86
98