@eyeauras/insight-cli 0.3.0 → 0.3.2

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.
Files changed (80) hide show
  1. package/.cli-package-build.json +1 -1
  2. package/SKILL.md +6 -1
  3. package/dist/src/analysis-default.d.ts +26 -0
  4. package/dist/src/analysis-default.js +149 -0
  5. package/dist/src/analysis-storage.d.ts +39 -20
  6. package/dist/src/analysis-storage.js +112 -16
  7. package/dist/src/cli.js +9 -2
  8. package/dist/src/initial-model.js +26 -5
  9. package/dist/src/initial-progress.d.ts +4 -0
  10. package/dist/src/initial-progress.js +64 -0
  11. package/dist/src/native-inputs.js +2 -1
  12. package/dist/src/server.js +14 -0
  13. package/package.json +1 -1
  14. package/references/native/InsightImportProgress.java +42 -0
  15. package/references/native/InsightInitialImport.java +8 -2
  16. package/references/native/InsightSdkFiles.java +13 -10
  17. package/references/setup.md +27 -0
  18. package/references/storage.md +35 -7
  19. package/skill-bundle/insight-artifacts/SKILL.md +1 -1
  20. package/skill-bundle/insight-artifacts/references/storage.md +35 -7
  21. package/skill-bundle/insight-binary/SKILL.md +1 -1
  22. package/skill-bundle/insight-capture/SKILL.md +1 -1
  23. package/skill-bundle/insight-cli/SKILL.md +6 -1
  24. package/skill-bundle/insight-cli/references/archive.md +32 -0
  25. package/skill-bundle/insight-cli/references/managed-runtime.md +162 -0
  26. package/skill-bundle/insight-cli/references/setup.md +98 -0
  27. package/skill-bundle/insight-cli/references/storage.md +35 -7
  28. package/skill-bundle/insight-die/SKILL.md +1 -1
  29. package/skill-bundle/insight-dnspy/SKILL.md +1 -1
  30. package/skill-bundle/insight-dotnet-dump/SKILL.md +1 -1
  31. package/skill-bundle/insight-dotnet-stack/SKILL.md +1 -1
  32. package/skill-bundle/insight-dotnet-trace/SKILL.md +1 -1
  33. package/skill-bundle/insight-frida/SKILL.md +1 -1
  34. package/skill-bundle/insight-ghidra/SKILL.md +27 -1
  35. package/skill-bundle/insight-ghidra/references/setup.md +27 -0
  36. package/skill-bundle/insight-ghidra/references/storage.md +35 -7
  37. package/skill-bundle/insight-ilspy/SKILL.md +1 -1
  38. package/skill-bundle/insight-interop/SKILL.md +1 -1
  39. package/skill-bundle/insight-lldb/SKILL.md +1 -1
  40. package/skill-bundle/insight-llvm/SKILL.md +1 -1
  41. package/skill-bundle/insight-managed-heap/SKILL.md +1 -1
  42. package/skill-bundle/insight-managed-metadata/SKILL.md +1 -1
  43. package/skill-bundle/insight-mitmproxy/SKILL.md +1 -1
  44. package/skill-bundle/insight-overview/SKILL.md +1 -1
  45. package/skill-bundle/insight-procmon/SKILL.md +1 -1
  46. package/skill-bundle/insight-re/SKILL.md +6 -1
  47. package/skill-bundle/insight-re/references/storage.md +35 -7
  48. package/skill-bundle/insight-sevenzip/SKILL.md +1 -1
  49. package/skill-bundle/insight-strace/SKILL.md +1 -1
  50. package/skill-bundle/insight-tshark/SKILL.md +1 -1
  51. package/skill-bundle/insight-windbg/SKILL.md +1 -1
  52. package/skill-bundle/manifest.json +1 -1
  53. package/skills/insight-artifacts/SKILL.md +1 -1
  54. package/skills/insight-artifacts/references/storage.md +35 -7
  55. package/skills/insight-binary/SKILL.md +1 -1
  56. package/skills/insight-capture/SKILL.md +1 -1
  57. package/skills/insight-die/SKILL.md +1 -1
  58. package/skills/insight-dnspy/SKILL.md +1 -1
  59. package/skills/insight-dotnet-dump/SKILL.md +1 -1
  60. package/skills/insight-dotnet-stack/SKILL.md +1 -1
  61. package/skills/insight-dotnet-trace/SKILL.md +1 -1
  62. package/skills/insight-frida/SKILL.md +1 -1
  63. package/skills/insight-ghidra/SKILL.md +27 -1
  64. package/skills/insight-ghidra/references/setup.md +27 -0
  65. package/skills/insight-ghidra/references/storage.md +35 -7
  66. package/skills/insight-ilspy/SKILL.md +1 -1
  67. package/skills/insight-interop/SKILL.md +1 -1
  68. package/skills/insight-lldb/SKILL.md +1 -1
  69. package/skills/insight-llvm/SKILL.md +1 -1
  70. package/skills/insight-managed-heap/SKILL.md +1 -1
  71. package/skills/insight-managed-metadata/SKILL.md +1 -1
  72. package/skills/insight-mitmproxy/SKILL.md +1 -1
  73. package/skills/insight-overview/SKILL.md +1 -1
  74. package/skills/insight-procmon/SKILL.md +1 -1
  75. package/skills/insight-re/SKILL.md +6 -1
  76. package/skills/insight-re/references/storage.md +35 -7
  77. package/skills/insight-sevenzip/SKILL.md +1 -1
  78. package/skills/insight-strace/SKILL.md +1 -1
  79. package/skills/insight-tshark/SKILL.md +1 -1
  80. package/skills/insight-windbg/SKILL.md +1 -1
@@ -0,0 +1,162 @@
1
+ # Managed Ghidra runtime
2
+
3
+ Use `ghidra install` for a complete compatible installation. Node 24+ is the bootstrap dependency;
4
+ no existing Java, Ghidra, Homebrew, Gradle, compiler or Python MCP bridge is required. Factory
5
+ profiles, permissions and OS secret storage remain in use. Follow the project's tool rules when
6
+ it specifies an external installation or server.
7
+
8
+ ```sh
9
+ insight-cli profile create local
10
+ insight-cli --profile local permissions grant Update
11
+ insight-cli --profile local ghidra install
12
+ insight-cli --profile local ghidra status
13
+ insight-cli --profile local ghidra open ./client.exe --session new --json
14
+ ```
15
+
16
+ `download` caches the complete pinned Ghidra/JDK archives, without selecting or starting a runtime.
17
+ `install` uses that cache or downloads missing archives, unpacks to a new stage, checks JDK 21 and
18
+ Ghidra 12.1.2, decompiles a known x86 function and starts a disposable local Ghidra Server. The
19
+ server probe authenticates its identity and reader/publisher permissions. Selection changes only
20
+ after all checks pass. The bridge and helper sources come from the version-matched npm package.
21
+ A failed install preserves its stage/diagnostics and the old selection. Retrying uses a fresh stage;
22
+ completed cached archives are reused. A later install/doctor/uninstall authenticates and stops
23
+ any leftover disposable probe server before proceeding; an unverified live identity blocks recovery. Interrupted partial downloads are never used as complete files.
24
+
25
+ On Windows, long Ghidra Java classpaths use an owned per-execution argument file, retained with
26
+ the process diagnostics. `javac` files use UTF-8; `java` launcher files use the Windows system
27
+ code page. Java 21's launcher still requires paths representable in that code page. Unmappable
28
+ characters fail before launch rather than selecting different files through lossy conversion.
29
+
30
+ `status` without scope is passive: selection, paths, missing components, installations, retained
31
+ stages, recorded checks and live process receipts. It works before installation. It does not start
32
+ Java or create a research workspace. `status --session S --target T` retains the scoped live health
33
+ check. `server status` also works without an installed runtime and explains missing prerequisites.
34
+ `doctor` explicitly runs disposable native decompiler/server probes and checks macOS LLDB Python.
35
+ It never imports a research target or publishes research changes. Readiness recorded by a doctor
36
+ run includes its runtime fingerprint; status identifies whether that record matches the selection.
37
+
38
+ ## Local archives and external installations
39
+
40
+ ```sh
41
+ insight-cli --profile local ghidra download
42
+ insight-cli --profile local ghidra install --offline
43
+ insight-cli --profile local ghidra install --archive ./ghidra.zip
44
+ insight-cli --profile local ghidra install --archive ./ghidra.zip \
45
+ --java-archive ./jdk.tar.gz --debugger-archive ./lldb-python.tar.gz --offline
46
+ insight-cli --profile local ghidra install --executable /tools/ghidra/ghidraRun
47
+ insight-cli --profile local ghidra install --executable /tools/ghidra \
48
+ --java /tools/jdk/bin/java --debugger-archive ./lldb-python.tar.gz --offline
49
+ ```
50
+
51
+ `--executable` accepts the actual Ghidra launcher (`ghidraRun[.bat]`, or
52
+ `support/analyzeHeadless[.bat]`) or installation directory. It needs the complete compatible
53
+ installation, including host native components. A target EXE is not a Ghidra launcher.
54
+ Common Homebrew launcher wrappers are resolved through the adjacent complete `libexec` tree.
55
+ The external Ghidra tree is never modified or deleted. Java is delivered automatically unless
56
+ `--java` or `--java-archive` is supplied. Legacy profile `java`/`ghidraHome` configuration still works
57
+ when no explicit selection exists; an explicit selection takes precedence and never silently
58
+ falls back to profile paths after failure or uninstall.
59
+
60
+ Local archives are caller-selected inputs, consumed into owned hash-addressed copies before
61
+ extraction so later source edits cannot change the installed bytes. Optional `--archive-sha256` and
62
+ `--java-archive-sha256` and `--debugger-archive-sha256` check the expected bytes; the actual digests are recorded in the installation
63
+ identity. `--offline` prohibits network acquisition: provide/cache every required archive. On macOS,
64
+ an official Ghidra zip also needs the pinned prebuilt native archive in cache. The managed macOS
65
+ distribution already includes these natives. Executable modes are preserved; paths, links and
66
+ expanded sizes are checked during portable Node extraction. Downloads use exact assets retained
67
+ in `iXab3r/insight-cli` GitHub Releases, with hashes and sizes pinned in the installed package.
68
+ There is no runtime upstream/latest fallback; supplied archives and verified cache support offline use.
69
+ No external unzip, tar or Python executable is needed for extraction.
70
+
71
+ ## Server, process and data ownership
72
+
73
+ The Ghidra distribution includes Ghidra Server. It uses the selected JDK and immutable tool code;
74
+ its repository, certificates, credentials and process settings are separate profile data.
75
+ Ordinary `open` starts it automatically. `server start` explicitly starts/enables it, and
76
+ `server stop` stops the identified owned server after all contexts are closed. It refuses to stop
77
+ a server under live clients. A later open can start it again; explicit `disconnect` disables shared
78
+ operations until `connect`/`start`. `server connect/disconnect` retain their connection-management API.
79
+ An external server remains configured through profile server/repository/account fields and Factory
80
+ secrets; `server stop` cannot stop that external service.
81
+
82
+ Code/cache/installation receipts live under configured [analysis storage](storage.md) `runtime/`; research remains under
83
+ `workspace/`, and saved files under `materials/`. One selected immutable installation serves many
84
+ isolated JVM contexts; each has its own projects, home, settings, cache/temp and authenticated
85
+ endpoint. No per-agent copy of the Ghidra code distribution is required. This is process and data
86
+ isolation; it does not restrict arbitrary user scripts to an OS security sandbox.
87
+
88
+ Close scoped contexts and stop the owned server before selecting/reinstalling/removing a runtime.
89
+ A live receipt conservatively blocks these operations; it never authorizes killing a PID.
90
+ Download and doctor can run without switching the current runtime. Runtime commands serialize
91
+ within the Factory owner. Changing a selected runtime invalidates cached backend handles, without
92
+ removing saved research. There is no automatic version migration or floating upstream upgrade.
93
+
94
+ ```sh
95
+ insight-cli --profile local ghidra close --session S --target T
96
+ insight-cli --profile local ghidra server stop
97
+ insight-cli --profile local permissions grant Destructive
98
+ insight-cli --profile local ghidra uninstall
99
+ # Optional cache deletion; research and external installations remain preserved:
100
+ insight-cli --profile local ghidra uninstall --purge-cache
101
+ ```
102
+
103
+ Uninstall removes only selected owned installation files. It preserves the selection as an
104
+ uninstalled receipt, so later research reports a missing runtime instead of changing bindings.
105
+ Archives remain reusable unless `--purge-cache` is selected. It removes recorded archives for
106
+ this installation, preserving other tools' cache and unrecorded legacy entries. Reinstalling the same archives restores
107
+ the same runtime identity. Sessions, private snapshots, unresolved publication journals, server
108
+ repositories and artifacts survive. Uninstall does not resolve an uncertain merge or replay it.
109
+
110
+ ## Process inventory and recovery
111
+
112
+ ```sh
113
+ insight-cli --profile local tools processes --tool ghidra
114
+ insight-cli --profile local tools processes show <process-id>
115
+ insight-cli --profile local tools processes stop <process-id>
116
+ insight-cli --profile local tools processes kill <process-id>
117
+ ```
118
+
119
+ These IDs describe executions, not new research selectors. Context records include the existing
120
+ session/target; server, GUI, debugger and helper roles remain separate. `stop` saves a selected
121
+ Ghidra context through its ordinary close path. Stopping a server requires closed contexts.
122
+ `kill` requires Destructive and explicitly interrupts verified owned work; it does not prove a
123
+ merge/save completed. Live debugger cleanup goes through the owning GUI so inferior termination
124
+ can be verified. Research and unknown journals are retained.
125
+
126
+ After an owner crash, inventory reconnects to authenticated owned endpoints without re-executing
127
+ research. macOS process birth times alone cannot prove recovered ownership; an ambiguous process
128
+ stays `unverified` and is not signalled. Original child handles and authenticated tool identities
129
+ provide the supported stop/kill authority. This is lifecycle management, not an OS security sandbox.
130
+
131
+ ## Sources and host boundary
132
+
133
+ The catalog pins Ghidra 12.1.2 and Temurin JDK 21.0.11+10. macOS uses public Homebrew-built Ghidra
134
+ bottles with native components (macOS 14+, ARM64 or x64); no installed Homebrew is used. Linux x64
135
+ and Windows x64 use the official Ghidra zip and Temurin archive. The installed `runtime/tool-catalog.json` pins mirror assets; repository
136
+ `scripts/tool-distributions/` recipes retain upstream provenance. Published tool releases include
137
+ original licenses/notices and required source/build companions, independent of CLI releases.
138
+ Unsupported platforms fail explicitly and may use compatible external profile paths. Native
139
+ acceptance for this delivery is macOS ARM64; catalog availability is not Windows/Linux native proof.
140
+
141
+ The host provides Node/npm, OS frameworks, display/keychain access and debugger authorization.
142
+ macOS LLDB and its embedded Python come from Apple's developer tools; they are OS prerequisites,
143
+ not downloaded third-party Python dependencies. `doctor` reports a missing host debugger as a partial
144
+ failure even when static analysis/server pass. No root installation, developer-tools installer,
145
+ Gatekeeper disabling, shell-profile edit or global Java/Python selection is performed. Ghidra GUI
146
+ agents receive private copies of the Ghidra SDK's pinned debugger Python wheels.
147
+
148
+ ## Managed debugger dependency
149
+
150
+ On macOS 15+ ARM64, download/install also prepares pinned LLDB 23.1.3 with its own
151
+ Python 3.15 and native library closure. It is a private Ghidra dependency; the separate
152
+ `insight-cli lldb` application retains its own installation. `--debugger-archive` supplies
153
+ the exact pinned debugger archive for offline installation, including an external Ghidra
154
+ selection. Status reports this dependency and doctor probes its actual Python interpreter.
155
+ GUI startup prepares it for legacy profiles as needed. The backend does not use Homebrew
156
+ or Python from Apple developer tools. OS debugger authorization is still a host prerequisite.
157
+
158
+ A GUI context pins the verified debugger receipt. Its supervisor verifies those code and
159
+ library bytes again before launching LLDB. Close contexts and stop the local server before
160
+ changing/removing the Ghidra runtime; uninstall removes this owned dependency while retaining
161
+ research and external installations. Existing running GUI contexts must be closed/reopened
162
+ to adopt a different backend. Other host debugger profiles retain their declared host requirements.
@@ -0,0 +1,98 @@
1
+ # Setup
2
+
3
+ Inspect `storage show --json` and read [analysis storage](storage.md) before moving databases.
4
+ Use `storage configure` for an empty profile or `storage migrate` for existing work. Factory
5
+ control metadata and keyring identity stay in their original locations.
6
+
7
+ Use Node 24+ and `ghidra install` to deliver Ghidra 12.1.2, JDK 21, native components and
8
+ server support. See [managed runtime](managed-runtime.md) for download/install/offline archives,
9
+ external executable paths, status/doctor and safe removal. Existing Factory profile `java` and
10
+ `ghidraHome` paths remain supported when no managed/external selection exists.
11
+ The package contains the verified GhidraMCP 7.0.0 bridge, its Apache-2.0 license/notice and
12
+ artifact provenance. Its pinned functionality catalog is from source
13
+ `57e37a8bf388b1279cff46378f85be1554548f61`, with SHA256
14
+ `7084e2fda16dc779dd05398e48821ff3f9ace4d32757ea143b257b39689e5fbd`.
15
+ `mcpJar` optionally selects another copy of those exact verified bytes. Runtime startup needs no
16
+ bridge/Factory source checkout or Python MCP bridge. Packaged native helper sources compile
17
+ against the installed Ghidra/JDK.
18
+
19
+ Omitting `server` enables owned local startup. The facade creates profile storage, a private
20
+ repository and distinct read-only/publisher accounts with random credentials in Factory's secret
21
+ store. It manages isolated headless contexts and introduces GUI mode on demand.
22
+
23
+ For an external server profile, configure `server` (`ghidra://host:port`), `repository`,
24
+ `readerUser` and `publisherUser`. They are distinct accounts with actual read-only and write
25
+ permissions respectively. Store each password using `auth login --role reader|publisher
26
+ --password-stdin`. Passwords are stdin/secret-store values, never profile JSON or argv values.
27
+ Connecting does not transfer ownership of that external server or allow the facade to stop it.
28
+
29
+ Factory's Update permission is initially disabled. Enable it through `permissions grant Update`
30
+ in the selected profile before creating contexts or editing. Research scope is explicit; local
31
+ skill discovery and help require no authentication or native process startup.
32
+ Deletion and replacement commands also require `permissions grant Destructive`.
33
+
34
+ All target bytes, snapshots, journals, projects and process receipts derive from the selected
35
+ profile's AppData. Stop the owner through `ipc-server stop` before changing its code/runtime
36
+ configuration. Restoring a saved context preserves its private view. Server settings and initial
37
+ loader settings remain bound to the target/workspace, so changing those cannot silently replace
38
+ retained work. This revision conservatively protects retained profile research state from deletion.
39
+ Runtime identity covers installed Ghidra code, language/compiler data, native modules and Python
40
+ inputs together with JDK tools, modules and configuration. Generated Python caches are isolated.
41
+ Changing those runtime inputs requires stopping the old owner before continuing with the new build.
42
+
43
+ Native acceptance separates macOS GUI/LLDB workflows from selected headless Windows/Linux
44
+ SDK, Version Tracking and FID/BSim workflows. Native Windows/Linux debugger/GUI acceptance
45
+ remains deferred. The ordinary CI lane stays offline; disposable native CI is explicit.
46
+
47
+ On macOS 15+ ARM64, `ghidra install` delivers an owned LLDB/Python debugger backend;
48
+ OS debugger authorization remains required. Other host profiles need their supported debugger. Its
49
+ Ghidra Python dependencies are prepared from the installed SDK wheels into owned GUI storage.
50
+ `debuggerPython` optionally configures a Python-backed offer; `windbgDir` configures the Windows
51
+ debugger runtime directory when relevant. These are runtime profile settings, not research scope.
52
+
53
+ Archive exchange is opt-in through `archiveUrl`; its optional token uses Factory secrets.
54
+ See [archive](archive.md) for the service contract and submission recovery behavior.
55
+
56
+ ## Native operation budgets
57
+
58
+ Profile `initialImportSeconds` defaults to 3600 (1–86400 seconds); `saveSeconds`
59
+ defaults to 120 (1–3600 seconds). Configure them with `ghidra budgets set
60
+ --initial-import-seconds 7200 --save-seconds 300`; `ghidra budgets show` reads effective values.
61
+ This uses Factory ProfileStore without invalidating research or stopping native contexts.
62
+ Active requests retain their original budget. Generic `profile set` remains guarded for
63
+ profiles containing research; initial profile creation also accepts these fields. Both are execution policy, independent
64
+ of immutable target/load identity. Save and packed snapshot export use the save budget;
65
+ discovery and ordinary HTTP queries keep their 30-second budget. Each native request has
66
+ its own budget, not a total command deadline. Cancellation remains independent.
67
+
68
+ After an import timeout, wait for the original worker to end, raise its budget and continue
69
+ the original scope. Incomplete private analysis restarts; a completed receipt is reused.
70
+ A save timeout reports `phase: save`, the effective budget and `saveSeconds`. Inspect
71
+ `sessions status`; a native log or broken response stream cannot prove a saved snapshot.
72
+
73
+ ## Initial import and progress
74
+
75
+ New targets import **without automatic analysis**. Reuse existing selectors/projects before
76
+ opening another copy; `ghidra open --session <session> --target <target>` preserves its bound
77
+ load settings, including older analysis choices. `--no-analysis` makes the fast choice explicit;
78
+ `--analysis` opts into a full analysis only during the first import of a new target.
79
+ After a fast import, use scoped `ghidra analysis run` to process pending analysis, or
80
+ `ghidra analysis reanalyze` to deliberately queue full reanalysis. These are saved private
81
+ mutations; merge deliberately. For a narrow question prefer bounded function disassembly,
82
+ function creation and decompilation first; inspect help for the exact operation.
83
+
84
+ For long first opens, `ghidra progress --session <session> --target <target> --json`
85
+ reads retained progress without starting Java or repeating the operation. It reports the
86
+ current stage, elapsed time, heartbeat age and native task message/counters when available;
87
+ those counters belong to the current task, not the whole import. Human output also reports
88
+ progress through Factory; `--json` keeps one final JSON result on stdout and stays quiet.
89
+ If the execution host yields, keep its same running execution and inspect progress every
90
+ 5-10 seconds when useful; relay stage changes or meaningful stalls, and do other independent
91
+ work. Do not silently extend waits to minutes or start a second import. Until selectors are
92
+ returned, use the existing `sessions list/status` and `tools processes` inventory to locate the
93
+ reserved scope. A stale heartbeat, dead worker or unknown result is not completion: inspect
94
+ `sessions status` and recovery before continuing. Pre-upgrade workers have no progress record;
95
+ null progress means unavailable, never success. Progress is observational, not a completion receipt. This command tracks first open only;
96
+ its old complete record does not describe later `analysis run`/`reanalyze` operations.
97
+ `operation: initial-model` completes after verified shared-model publication; the private
98
+ session context can still be opening. Inspect `sessions status` for context readiness.
@@ -1,10 +1,19 @@
1
1
  # Analysis storage and migration
2
2
 
3
3
  `storage show --json` reports effective profile storage, availability, active file/byte usage,
4
- exact included trees and retained migration. The default is Factory profile AppData. No
5
- checkout, environment or automatic disk fallback changes it. The non-secret setting is
6
- `analysisDirectory` in Factory's profile (`profile show` also displays it). Use storage commands
7
- to change it safely.
4
+ exact included trees, retained migration and installation default base. Before selecting a
5
+ base, storage starts in Factory profile AppData. `configure` and `migrate` select that base
6
+ for subsequent new/empty profiles as well as moving the current profile. Add `--profile-only`
7
+ to keep the installation default unchanged. The effective root appends `insight-cli/<profile>`.
8
+ Initialized profiles keep their existing locations when the default changes; profiles with
9
+ ordinary AppData analysis trees stay there until explicitly migrated.
10
+
11
+ The per-profile non-secret `analysisDirectory` setting remains in Factory's profile. The
12
+ installation default is bound storage-control metadata beside Factory's profile store, paired
13
+ with ownership metadata on the chosen base. It is not an environment or checkout setting.
14
+ Missing/replaced storage fails before creating analysis data; there is no system-disk fallback.
15
+ New profiles initialize on their first ordinary command, durably bind their own empty directory,
16
+ and keep permanent compatibility paths. `storage show` remains passive.
8
17
 
9
18
  ```sh
10
19
  insight-cli permissions grant Update
@@ -29,7 +38,20 @@ user-selected outputs outside these trees keep their locations.
29
38
 
30
39
  Factory keeps profiles, permissions, IPC election/socket, migration-control metadata and
31
40
  application logs in current-user AppData. Secrets stay in the OS keyring. Credential/profile
32
- identities do not change. Updating/installing npm never migrates a profile automatically.
41
+ identities do not change. Updating/installing npm preserves existing profile locations and does not select a disk on its own.
42
+
43
+ ## Select a default after an earlier migration
44
+
45
+ For installations migrated with an older CLI, select their existing mounted base once:
46
+
47
+ ```sh
48
+ insight-cli storage default --directory "/mnt/analysis volume" --json
49
+ ```
50
+
51
+ This Update operation changes the installation default without moving existing data. Future
52
+ profiles inherit it without repeating configuration. The base cannot be inside a profile data
53
+ root or overlap Factory control storage. A base owned by another installation is rejected.
54
+ A missing volume or replaced base/ownership marker is never adopted automatically.
33
55
 
34
56
  ## Move an existing profile
35
57
 
@@ -44,7 +66,7 @@ insight-cli storage migrate --directory "/mnt/analysis volume" --json
44
66
  insight-cli storage show --json
45
67
  ```
46
68
 
47
- Dry-run checks separation, destination contents, access, conservative capacity and quiescence
69
+ Dry-run reports whether it would select the installation default and checks separation, destination contents, access, conservative capacity and quiescence
48
70
  without reserving/copying a migration. Source/destination/configuration roots cannot be equal
49
71
  or nested. Destination symlink roots, escaping source links, special files, unresolved links
50
72
  and inventories above one million entries or 128 directory levels are rejected. Internal
@@ -72,7 +94,9 @@ file, rechecks capacity and finishes the retained transaction. Source and destin
72
94
  anchor identities are bound durably. Missing/replaced volumes fail without creating a system-disk
73
95
  fallback; mount the original volume before resuming.
74
96
 
75
- Rollback restores retained source and the prior Factory setting. After activation it requires
97
+ Rollback restores retained source and the prior Factory setting. The installation default stays
98
+ selected because subsequent profiles may already use it; a resumed older migration cannot
99
+ overwrite a newer default selection. After activation it requires
76
100
  an unchanged destination and a verified retained source. Native reopening or later findings can
77
101
  make rollback unsafe, in which case it refuses and preserves both copies. Use forward migration
78
102
  to another empty base after using the new location. A rolled-back destination remains for manual
@@ -97,3 +121,7 @@ before starting another. This release provides no nonempty-destination adoption,
97
121
  synchronization, live-DB snapshotting or network-filesystem guarantees. POSIX directory fsync
98
122
  is used. Windows has file fsync and rename/junction semantics; Node cannot fsync directories
99
123
  there, and internal symlinks can require OS privileges.
124
+
125
+ Empty-profile initialization resumes automatically on its next command after interruption. Its
126
+ retained source contains no analysis entries, so the CLI cleans only that owned empty backup
127
+ automatically. Migration of existing data always retains its source for explicit cleanup.
@@ -3,7 +3,7 @@ name: insight-die
3
3
  description: Classify unknown executable or container inputs by format, architecture and compiler/runtime/packer signatures with Detect It Easy before choosing managed or native analysis. Use insight-cli die for static triage and preserve scan uncertainty.
4
4
  ---
5
5
 
6
- # Insight Detect It Easy 0.3.0
6
+ # Insight Detect It Easy 0.3.2
7
7
 
8
8
  If local help/status reports AppData or IPC access denied, retry that **read-only probe**
9
9
  with the agent host's normal permission escalation, then use that route for later authorized
@@ -3,7 +3,7 @@ name: insight-dnspy
3
3
  description: Debug a managed Windows EXE at an IL breakpoint and read primitive arguments, or change one expected IL Int32 constant in a new assembly copy through insight-cli dnspy. Use when C# decompilation needs observed execution or a controlled binary edit.
4
4
  ---
5
5
 
6
- # Insight dnSpyEx 0.3.0
6
+ # Insight dnSpyEx 0.3.2
7
7
 
8
8
  If local help/status reports AppData or IPC access denied, retry that **read-only probe**
9
9
  with the agent host's normal permission escalation, then use that route for later authorized
@@ -3,7 +3,7 @@ name: insight-dotnet-dump
3
3
  description: Capture a managed heap dump or inspect compatible .NET dumps with SOS to recover waiting stacks, objects, fields and retention evidence.
4
4
  ---
5
5
 
6
- # Insight .NET Dump 0.3.0
6
+ # Insight .NET Dump 0.3.2
7
7
 
8
8
  If local help/status reports AppData or IPC access denied, retry that **read-only probe**
9
9
  with the agent host's normal permission escalation, then use that route for later authorized
@@ -3,7 +3,7 @@ name: insight-dotnet-stack
3
3
  description: Inspect live managed thread stacks to identify active or waiting work in an explicitly selected .NET process without taking a dump.
4
4
  ---
5
5
 
6
- # Insight .NET Stack 0.3.0
6
+ # Insight .NET Stack 0.3.2
7
7
 
8
8
  If local help/status reports AppData or IPC access denied, retry that **read-only probe**
9
9
  with the agent host's normal permission escalation, then use that route for later authorized
@@ -3,7 +3,7 @@ name: insight-dotnet-trace
3
3
  description: Collect and inspect bounded .NET EventPipe traces to identify sampled thread work, waits or runtime activity; distinguish wall-clock samples from CPU consumption.
4
4
  ---
5
5
 
6
- # Insight .NET Trace 0.3.0
6
+ # Insight .NET Trace 0.3.2
7
7
 
8
8
  If local help/status reports AppData or IPC access denied, retry that **read-only probe**
9
9
  with the agent host's normal permission escalation, then use that route for later authorized
@@ -3,7 +3,7 @@ name: insight-frida
3
3
  description: Observe native call arguments/results or inspect runtime modules and exports in an explicitly selected authorized process with bounded Frida scripts. Use insight-cli frida to corroborate static findings with actual execution on macOS ARM64.
4
4
  ---
5
5
 
6
- # Insight Frida 0.3.0
6
+ # Insight Frida 0.3.2
7
7
 
8
8
  If local help/status reports AppData or IPC access denied, retry that **read-only probe**
9
9
  with the agent host's normal permission escalation, then use that route for later authorized
@@ -3,7 +3,7 @@ name: insight-ghidra
3
3
  description: Inspect or edit native binaries with Ghidra through insight-cli; use isolated contexts, multi-agent merge/refresh, server, GUI or debugger workflows. Choose this for static native behavior and references, not C# recovery from managed IL.
4
4
  ---
5
5
 
6
- # Insight Ghidra 0.3.0
6
+ # Insight Ghidra 0.3.2
7
7
 
8
8
  If local help/status reports AppData or IPC access denied, retry that **read-only probe**
9
9
  with the agent host's normal permission escalation, then use that route for later authorized
@@ -17,6 +17,32 @@ session/cell ID, await that same execution with the host's wait/poll facility un
17
17
  status and read its stdout/stderr. An empty first chunk is not a lost CLI response. Do not
18
18
  start another open or repeat a CPU mutation while the original command is still running.
19
19
 
20
+
21
+ New targets import **without automatic analysis**. Reuse existing selectors/projects before
22
+ opening another copy; `ghidra open --session <session> --target <target>` preserves its bound
23
+ load settings, including older analysis choices. `--no-analysis` makes the fast choice explicit;
24
+ `--analysis` opts into a full analysis only during the first import of a new target.
25
+ After a fast import, use scoped `ghidra analysis run` to process pending analysis, or
26
+ `ghidra analysis reanalyze` to deliberately queue full reanalysis. These are saved private
27
+ mutations; merge deliberately. For a narrow question prefer bounded function disassembly,
28
+ function creation and decompilation first; inspect help for the exact operation.
29
+
30
+ For long first opens, `ghidra progress --session <session> --target <target> --json`
31
+ reads retained progress without starting Java or repeating the operation. It reports the
32
+ current stage, elapsed time, heartbeat age and native task message/counters when available;
33
+ those counters belong to the current task, not the whole import. Human output also reports
34
+ progress through Factory; `--json` keeps one final JSON result on stdout and stays quiet.
35
+ If the execution host yields, keep its same running execution and inspect progress every
36
+ 5-10 seconds when useful; relay stage changes or meaningful stalls, and do other independent
37
+ work. Do not silently extend waits to minutes or start a second import. Until selectors are
38
+ returned, use the existing `sessions list/status` and `tools processes` inventory to locate the
39
+ reserved scope. A stale heartbeat, dead worker or unknown result is not completion: inspect
40
+ `sessions status` and recovery before continuing. Pre-upgrade workers have no progress record;
41
+ null progress means unavailable, never success. Progress is observational, not a completion receipt. This command tracks first open only;
42
+ its old complete record does not describe later `analysis run`/`reanalyze` operations.
43
+ `operation: initial-model` completes after verified shared-model publication; the private
44
+ session context can still be opening. Inspect `sessions status` for context readiness.
45
+
20
46
  Use `ghidra status` to inspect runtime readiness; `ghidra install` delivers the pinned runtime.
21
47
  For static managed C#/IL research, locate `insight-cli skill insight-ilspy`.
22
48
  For owned process inventory use `tools processes`; `stop` saves Ghidra contexts, while
@@ -69,3 +69,30 @@ After an import timeout, wait for the original worker to end, raise its budget a
69
69
  the original scope. Incomplete private analysis restarts; a completed receipt is reused.
70
70
  A save timeout reports `phase: save`, the effective budget and `saveSeconds`. Inspect
71
71
  `sessions status`; a native log or broken response stream cannot prove a saved snapshot.
72
+
73
+ ## Initial import and progress
74
+
75
+ New targets import **without automatic analysis**. Reuse existing selectors/projects before
76
+ opening another copy; `ghidra open --session <session> --target <target>` preserves its bound
77
+ load settings, including older analysis choices. `--no-analysis` makes the fast choice explicit;
78
+ `--analysis` opts into a full analysis only during the first import of a new target.
79
+ After a fast import, use scoped `ghidra analysis run` to process pending analysis, or
80
+ `ghidra analysis reanalyze` to deliberately queue full reanalysis. These are saved private
81
+ mutations; merge deliberately. For a narrow question prefer bounded function disassembly,
82
+ function creation and decompilation first; inspect help for the exact operation.
83
+
84
+ For long first opens, `ghidra progress --session <session> --target <target> --json`
85
+ reads retained progress without starting Java or repeating the operation. It reports the
86
+ current stage, elapsed time, heartbeat age and native task message/counters when available;
87
+ those counters belong to the current task, not the whole import. Human output also reports
88
+ progress through Factory; `--json` keeps one final JSON result on stdout and stays quiet.
89
+ If the execution host yields, keep its same running execution and inspect progress every
90
+ 5-10 seconds when useful; relay stage changes or meaningful stalls, and do other independent
91
+ work. Do not silently extend waits to minutes or start a second import. Until selectors are
92
+ returned, use the existing `sessions list/status` and `tools processes` inventory to locate the
93
+ reserved scope. A stale heartbeat, dead worker or unknown result is not completion: inspect
94
+ `sessions status` and recovery before continuing. Pre-upgrade workers have no progress record;
95
+ null progress means unavailable, never success. Progress is observational, not a completion receipt. This command tracks first open only;
96
+ its old complete record does not describe later `analysis run`/`reanalyze` operations.
97
+ `operation: initial-model` completes after verified shared-model publication; the private
98
+ session context can still be opening. Inspect `sessions status` for context readiness.
@@ -1,10 +1,19 @@
1
1
  # Analysis storage and migration
2
2
 
3
3
  `storage show --json` reports effective profile storage, availability, active file/byte usage,
4
- exact included trees and retained migration. The default is Factory profile AppData. No
5
- checkout, environment or automatic disk fallback changes it. The non-secret setting is
6
- `analysisDirectory` in Factory's profile (`profile show` also displays it). Use storage commands
7
- to change it safely.
4
+ exact included trees, retained migration and installation default base. Before selecting a
5
+ base, storage starts in Factory profile AppData. `configure` and `migrate` select that base
6
+ for subsequent new/empty profiles as well as moving the current profile. Add `--profile-only`
7
+ to keep the installation default unchanged. The effective root appends `insight-cli/<profile>`.
8
+ Initialized profiles keep their existing locations when the default changes; profiles with
9
+ ordinary AppData analysis trees stay there until explicitly migrated.
10
+
11
+ The per-profile non-secret `analysisDirectory` setting remains in Factory's profile. The
12
+ installation default is bound storage-control metadata beside Factory's profile store, paired
13
+ with ownership metadata on the chosen base. It is not an environment or checkout setting.
14
+ Missing/replaced storage fails before creating analysis data; there is no system-disk fallback.
15
+ New profiles initialize on their first ordinary command, durably bind their own empty directory,
16
+ and keep permanent compatibility paths. `storage show` remains passive.
8
17
 
9
18
  ```sh
10
19
  insight-cli permissions grant Update
@@ -29,7 +38,20 @@ user-selected outputs outside these trees keep their locations.
29
38
 
30
39
  Factory keeps profiles, permissions, IPC election/socket, migration-control metadata and
31
40
  application logs in current-user AppData. Secrets stay in the OS keyring. Credential/profile
32
- identities do not change. Updating/installing npm never migrates a profile automatically.
41
+ identities do not change. Updating/installing npm preserves existing profile locations and does not select a disk on its own.
42
+
43
+ ## Select a default after an earlier migration
44
+
45
+ For installations migrated with an older CLI, select their existing mounted base once:
46
+
47
+ ```sh
48
+ insight-cli storage default --directory "/mnt/analysis volume" --json
49
+ ```
50
+
51
+ This Update operation changes the installation default without moving existing data. Future
52
+ profiles inherit it without repeating configuration. The base cannot be inside a profile data
53
+ root or overlap Factory control storage. A base owned by another installation is rejected.
54
+ A missing volume or replaced base/ownership marker is never adopted automatically.
33
55
 
34
56
  ## Move an existing profile
35
57
 
@@ -44,7 +66,7 @@ insight-cli storage migrate --directory "/mnt/analysis volume" --json
44
66
  insight-cli storage show --json
45
67
  ```
46
68
 
47
- Dry-run checks separation, destination contents, access, conservative capacity and quiescence
69
+ Dry-run reports whether it would select the installation default and checks separation, destination contents, access, conservative capacity and quiescence
48
70
  without reserving/copying a migration. Source/destination/configuration roots cannot be equal
49
71
  or nested. Destination symlink roots, escaping source links, special files, unresolved links
50
72
  and inventories above one million entries or 128 directory levels are rejected. Internal
@@ -72,7 +94,9 @@ file, rechecks capacity and finishes the retained transaction. Source and destin
72
94
  anchor identities are bound durably. Missing/replaced volumes fail without creating a system-disk
73
95
  fallback; mount the original volume before resuming.
74
96
 
75
- Rollback restores retained source and the prior Factory setting. After activation it requires
97
+ Rollback restores retained source and the prior Factory setting. The installation default stays
98
+ selected because subsequent profiles may already use it; a resumed older migration cannot
99
+ overwrite a newer default selection. After activation it requires
76
100
  an unchanged destination and a verified retained source. Native reopening or later findings can
77
101
  make rollback unsafe, in which case it refuses and preserves both copies. Use forward migration
78
102
  to another empty base after using the new location. A rolled-back destination remains for manual
@@ -97,3 +121,7 @@ before starting another. This release provides no nonempty-destination adoption,
97
121
  synchronization, live-DB snapshotting or network-filesystem guarantees. POSIX directory fsync
98
122
  is used. Windows has file fsync and rename/junction semantics; Node cannot fsync directories
99
123
  there, and internal symlinks can require OS privileges.
124
+
125
+ Empty-profile initialization resumes automatically on its next command after interruption. Its
126
+ retained source contains no analysis entries, so the CLI cleans only that owned empty backup
127
+ automatically. Migration of existing data always retains its source for explicit cleanup.
@@ -3,7 +3,7 @@ name: insight-ilspy
3
3
  description: Recover C#, inspect IL/types/metadata, extract resources or export projects from managed .NET assemblies through insight-cli ILSpy. Choose native analysis for NativeAOT or ordinary PE machine code.
4
4
  ---
5
5
 
6
- # Insight ILSpy 0.3.0
6
+ # Insight ILSpy 0.3.2
7
7
 
8
8
  If local help/status reports AppData or IPC access denied, retry that **read-only probe**
9
9
  with the agent host's normal permission escalation, then use that route for later authorized
@@ -3,7 +3,7 @@ name: insight-interop
3
3
  description: Trace a .NET P/Invoke declaration to an explicitly supplied native library export and Ghidra function through insight-cli ilspy query, binary query and scoped ghidra APIs. Use for managed/native linkage evidence while keeping static correspondence separate from observed loading or execution.
4
4
  ---
5
5
 
6
- # Insight Interop 0.3.0
6
+ # Insight Interop 0.3.2
7
7
 
8
8
  If local help/status reports AppData or IPC access denied, retry that **read-only probe**
9
9
  with the agent host's normal permission escalation, then use that route for later authorized
@@ -3,7 +3,7 @@ name: insight-lldb
3
3
  description: Observe native runtime arguments, return values, registers, stacks and bounded memory at a selected breakpoint using an owned LLDB launch. Use insight-cli lldb on macOS ARM64 when static findings need a concrete execution check.
4
4
  ---
5
5
 
6
- # Insight LLDB 0.3.0
6
+ # Insight LLDB 0.3.2
7
7
 
8
8
  If local help/status reports AppData or IPC access denied, retry that **read-only probe**
9
9
  with the agent host's normal permission escalation, then use that route for later authorized
@@ -3,7 +3,7 @@ name: insight-llvm
3
3
  description: Inspect PE, ELF and Mach-O headers, dependencies, exports and symbols; query PDB debug information or a small instruction window with insight-cli LLVM utilities before opening a full analysis project.
4
4
  ---
5
5
 
6
- # Insight LLVM 0.3.0
6
+ # Insight LLVM 0.3.2
7
7
 
8
8
  If local help/status reports AppData or IPC access denied, retry that **read-only probe**
9
9
  with the agent host's normal permission escalation, then use that route for later authorized
@@ -3,7 +3,7 @@ name: insight-managed-heap
3
3
  description: Query structured .NET heap objects, primitive fields and managed stacks from a retained CoreCLR dump through insight-cli dotnet-dump query. Use for bounded offline dump investigation with an explicit matching DAC, preserving uncertainty and immutable input identity.
4
4
  ---
5
5
 
6
- # Insight Managed Heap 0.3.0
6
+ # Insight Managed Heap 0.3.2
7
7
 
8
8
  If local help/status reports AppData or IPC access denied, retry that **read-only probe**
9
9
  with the agent host's normal permission escalation, then use that route for later authorized
@@ -3,7 +3,7 @@ name: insight-managed-metadata
3
3
  description: Query managed assembly metadata, MethodDef tokens, P/Invoke declarations and bounded IL, or compare two C#/.NET assemblies through insight-cli ilspy query/compare. Use for structured static evidence and changed-method research without executing the target.
4
4
  ---
5
5
 
6
- # Insight Managed Metadata 0.3.0
6
+ # Insight Managed Metadata 0.3.2
7
7
 
8
8
  If local help/status reports AppData or IPC access denied, retry that **read-only probe**
9
9
  with the agent host's normal permission escalation, then use that route for later authorized
@@ -3,7 +3,7 @@ name: insight-mitmproxy
3
3
  description: Record, inspect and compare HTTP request/response evidence with insight-cli mitmproxy. Use when an owned client can explicitly use a loopback proxy; read native flow archives or HAR without replaying traffic. System interception and global certificate trust are outside this facade.
4
4
  ---
5
5
 
6
- # Insight mitmproxy 0.3.0
6
+ # Insight mitmproxy 0.3.2
7
7
 
8
8
  If local help/status reports AppData or IPC access denied, retry that **read-only probe**
9
9
  with the agent host's normal permission escalation, then use that route for later authorized
@@ -3,7 +3,7 @@ name: insight-overview
3
3
  description: Choose bounded tool overviews and focused drilldown through insight-cli without flooding agent context with whole-program code, traces or dumps. Use for tool discovery, scoped evidence paging and keeping native partial coverage separate from complete results.
4
4
  ---
5
5
 
6
- # Insight Overview 0.3.0
6
+ # Insight Overview 0.3.2
7
7
 
8
8
  If local help/status reports AppData or IPC access denied, retry that **read-only probe**
9
9
  with the agent host's normal permission escalation, then use that route for later authorized