@eyeauras/insight-cli 0.2.4 → 0.3.1
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/.cli-package-build.json +1 -1
- package/SKILL.md +9 -1
- package/dist/src/analysis-storage.d.ts +165 -0
- package/dist/src/analysis-storage.js +562 -0
- package/dist/src/cli.js +33 -8
- package/dist/src/contexts.js +8 -8
- package/dist/src/ghidra-processes.js +5 -4
- package/dist/src/initial-model.js +28 -6
- package/dist/src/initial-progress.d.ts +4 -0
- package/dist/src/initial-progress.js +64 -0
- package/dist/src/native-inputs.js +4 -3
- package/dist/src/runtime-manager.js +6 -5
- package/dist/src/runtime-selection.d.ts +2 -2
- package/dist/src/runtime-selection.js +13 -6
- package/dist/src/saved-materials.js +2 -1
- package/dist/src/server.js +14 -0
- package/dist/src/tool-runtime/installer.js +7 -6
- package/dist/src/tool-runtime/launch-worker.js +3 -1
- package/package.json +2 -2
- package/references/artifacts.md +1 -1
- package/references/managed-runtime.md +1 -1
- package/references/native/InsightImportProgress.java +42 -0
- package/references/native/InsightInitialImport.java +8 -2
- package/references/native/InsightSdkFiles.java +13 -10
- package/references/setup.md +31 -0
- package/references/storage.md +99 -0
- package/runtime/toolbox.json +10 -4
- package/skill-bundle/insight-artifacts/SKILL.md +1 -1
- package/skill-bundle/insight-artifacts/references/artifacts.md +1 -1
- package/skill-bundle/insight-artifacts/references/recovery.md +79 -0
- package/skill-bundle/insight-artifacts/references/storage.md +99 -0
- package/skill-bundle/insight-binary/SKILL.md +1 -1
- package/skill-bundle/insight-capture/SKILL.md +1 -1
- package/skill-bundle/insight-cli/SKILL.md +9 -1
- package/skill-bundle/insight-cli/references/archive.md +32 -0
- package/skill-bundle/insight-cli/references/managed-runtime.md +162 -0
- package/skill-bundle/insight-cli/references/recovery.md +79 -0
- package/skill-bundle/insight-cli/references/setup.md +98 -0
- package/skill-bundle/insight-cli/references/storage.md +99 -0
- package/skill-bundle/insight-die/SKILL.md +1 -1
- package/skill-bundle/insight-dnspy/SKILL.md +1 -1
- package/skill-bundle/insight-dotnet-dump/SKILL.md +1 -1
- package/skill-bundle/insight-dotnet-stack/SKILL.md +1 -1
- package/skill-bundle/insight-dotnet-trace/SKILL.md +1 -1
- package/skill-bundle/insight-frida/SKILL.md +1 -1
- package/skill-bundle/insight-ghidra/SKILL.md +27 -1
- package/skill-bundle/insight-ghidra/references/artifacts.md +1 -1
- package/skill-bundle/insight-ghidra/references/managed-runtime.md +1 -1
- package/skill-bundle/insight-ghidra/references/setup.md +31 -0
- package/skill-bundle/insight-ghidra/references/storage.md +99 -0
- package/skill-bundle/insight-ilspy/SKILL.md +1 -1
- package/skill-bundle/insight-interop/SKILL.md +1 -1
- package/skill-bundle/insight-lldb/SKILL.md +1 -1
- package/skill-bundle/insight-llvm/SKILL.md +1 -1
- package/skill-bundle/insight-managed-heap/SKILL.md +1 -1
- package/skill-bundle/insight-managed-metadata/SKILL.md +1 -1
- package/skill-bundle/insight-mitmproxy/SKILL.md +1 -1
- package/skill-bundle/insight-overview/SKILL.md +1 -1
- package/skill-bundle/insight-procmon/SKILL.md +1 -1
- package/skill-bundle/insight-re/SKILL.md +6 -1
- package/skill-bundle/insight-re/references/artifacts.md +1 -1
- package/skill-bundle/insight-re/references/storage.md +99 -0
- package/skill-bundle/insight-sevenzip/SKILL.md +1 -1
- package/skill-bundle/insight-strace/SKILL.md +1 -1
- package/skill-bundle/insight-tshark/SKILL.md +1 -1
- package/skill-bundle/insight-windbg/SKILL.md +1 -1
- package/skill-bundle/manifest.json +1 -1
- package/skills/insight-artifacts/SKILL.md +1 -1
- package/skills/insight-artifacts/references/artifacts.md +1 -1
- package/skills/insight-artifacts/references/recovery.md +79 -0
- package/skills/insight-artifacts/references/storage.md +99 -0
- package/skills/insight-binary/SKILL.md +1 -1
- package/skills/insight-capture/SKILL.md +1 -1
- package/skills/insight-die/SKILL.md +1 -1
- package/skills/insight-dnspy/SKILL.md +1 -1
- package/skills/insight-dotnet-dump/SKILL.md +1 -1
- package/skills/insight-dotnet-stack/SKILL.md +1 -1
- package/skills/insight-dotnet-trace/SKILL.md +1 -1
- package/skills/insight-frida/SKILL.md +1 -1
- package/skills/insight-ghidra/SKILL.md +27 -1
- package/skills/insight-ghidra/references/artifacts.md +1 -1
- package/skills/insight-ghidra/references/managed-runtime.md +1 -1
- package/skills/insight-ghidra/references/setup.md +31 -0
- package/skills/insight-ghidra/references/storage.md +99 -0
- package/skills/insight-ilspy/SKILL.md +1 -1
- package/skills/insight-interop/SKILL.md +1 -1
- package/skills/insight-lldb/SKILL.md +1 -1
- package/skills/insight-llvm/SKILL.md +1 -1
- package/skills/insight-managed-heap/SKILL.md +1 -1
- package/skills/insight-managed-metadata/SKILL.md +1 -1
- package/skills/insight-mitmproxy/SKILL.md +1 -1
- package/skills/insight-overview/SKILL.md +1 -1
- package/skills/insight-procmon/SKILL.md +1 -1
- package/skills/insight-re/SKILL.md +6 -1
- package/skills/insight-re/references/artifacts.md +1 -1
- package/skills/insight-re/references/storage.md +99 -0
- package/skills/insight-sevenzip/SKILL.md +1 -1
- package/skills/insight-strace/SKILL.md +1 -1
- package/skills/insight-tshark/SKILL.md +1 -1
- 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,79 @@
|
|
|
1
|
+
# Continue saved work
|
|
2
|
+
|
|
3
|
+
Retain the session/target returned by initial open. Continue the tuple through
|
|
4
|
+
`insight-cli ghidra open --session <id> --target <id> --json`. Saved private snapshots and
|
|
5
|
+
pending scalar comparisons persist independently of a backend process. Reopening preserves
|
|
6
|
+
private work; it does not silently receive a newer shared version.
|
|
7
|
+
|
|
8
|
+
First-import recovery uses the same scoped `ghidra open` or the original request ID/input.
|
|
9
|
+
Import/analysis writes a private snapshot and completion receipt before any initial publication.
|
|
10
|
+
If its worker is still running, continuation reports busy; wait and continue the same scope.
|
|
11
|
+
If that worker stopped before completing its receipt, continuation can repeat private analysis
|
|
12
|
+
from the immutable input while retaining previous attempts. A completed snapshot is reused.
|
|
13
|
+
Initial publication first creates a uniquely named staging object. A separate read-only process
|
|
14
|
+
verifies its complete saved DB buffers before a conditional server move to the absent canonical
|
|
15
|
+
path. It never checks in a new version of an existing canonical item. Lost promotion replies
|
|
16
|
+
are reconciled against the retained identity, one-version history and complete saved buffers.
|
|
17
|
+
Interrupted staging objects remain retained and can be replaced by another private stage;
|
|
18
|
+
they are not adopted as the canonical model. Foreign or mismatched canonical state stays blocked.
|
|
19
|
+
An older direct create that is provably owned and left only an incomplete `<Recovered>` entry
|
|
20
|
+
can be moved aside without deletion; its bytes and original receipt remain preserved.
|
|
21
|
+
|
|
22
|
+
Legacy first-import failures are also recoverable in the original profile. Continuation first
|
|
23
|
+
establishes that the old owned bootstrap worker has ended, then uses an authoritative repository
|
|
24
|
+
probe. An absent canonical item permits private preparation; an existing first version requires
|
|
25
|
+
independent readback. The old project, intent and original session/target remain preserved.
|
|
26
|
+
|
|
27
|
+
If a response was lost, inspect `sessions status <session> --target <target>`. Never infer
|
|
28
|
+
`applied` from a connection failure. A changing command's optional request ID binds one effective
|
|
29
|
+
intent inside the profile. Repeating the same ID/input retrieves its recorded outcome or
|
|
30
|
+
unresolved state; changing input under that ID fails. Without an ID, calls are new intentions.
|
|
31
|
+
|
|
32
|
+
An unknown or partial effect retains its request intent, snapshots and native stage. Open the
|
|
33
|
+
same tuple to reconcile supported outcomes. A committed merge is verified against its recorded
|
|
34
|
+
server version and complete saved buffers through independent read authority; it is never
|
|
35
|
+
checked in again merely because its response was lost. Until verification succeeds, publication
|
|
36
|
+
for this shared target is blocked across sessions. Saved private work remains retained.
|
|
37
|
+
|
|
38
|
+
Scalar reconciliation observes and saves an already present effect; it does not execute the
|
|
39
|
+
setter again. Supported structural/function edits retain a candidate snapshot after an incomplete
|
|
40
|
+
response; continuation can verify every requested effect in that immutable snapshot and adopt it
|
|
41
|
+
without replay. If the complete result cannot be established, the candidate and previous saved
|
|
42
|
+
private view remain retained. An unproved program/script/external outcome remains unresolved. Preserve the profile
|
|
43
|
+
storage and credential store. Do not delete another session's project, stop a process by guessed
|
|
44
|
+
PID/port, or blindly repeat a script/external action to turn uncertainty into success.
|
|
45
|
+
|
|
46
|
+
The older prototype's `workers`, `findings`, `integrate` and batch `recover` commands are not the
|
|
47
|
+
public facade API. Its coordinator journals remain separate and are never silently migrated.
|
|
48
|
+
|
|
49
|
+
A lost UI navigation response can be verified from the live authenticated cursor without another
|
|
50
|
+
goto. If its original owned GUI process has exited, continuation reports the uncertain UI action
|
|
51
|
+
as disconnected and retains saved program work. It does not recreate the old cursor or re-enable
|
|
52
|
+
a previous prompt policy. Other unproved live UI effects remain retained until their outcome is
|
|
53
|
+
established or the original process is known to have ended.
|
|
54
|
+
|
|
55
|
+
## Abandon an uncertain private program attempt
|
|
56
|
+
|
|
57
|
+
A post-mutation save timeout does not repeat the script or issue another save in the
|
|
58
|
+
error handler. Status exposes the original request identity and retained phase/budget.
|
|
59
|
+
Arbitrary script effects are never inferred from metadata or from an unverified DB.
|
|
60
|
+
After inspecting the retained attempt, explicitly stop only its verified owned worker
|
|
61
|
+
(`tools processes`, then `tools processes kill <process>` if required). Resume the
|
|
62
|
+
last acknowledged private snapshot with:
|
|
63
|
+
|
|
64
|
+
```sh
|
|
65
|
+
insight-cli permissions grant Destructive
|
|
66
|
+
insight-cli ghidra abandon --session <session> --target <target> \
|
|
67
|
+
--request-id <original-request> --acknowledge-unknown-effects --json
|
|
68
|
+
insight-cli ghidra open --session <session> --target <target> --json
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Abandon requires exactly one unresolved private program operation, an unchanged verified
|
|
72
|
+
previous snapshot/generation, a stopped original worker and no active publication or live
|
|
73
|
+
debugger. It retains the native project, candidate artifacts, original intent/execution and
|
|
74
|
+
previous diagnostic result. Its terminal request is `failed` / `state: abandoned` with
|
|
75
|
+
`outcome: unknown`; no effect is marked applied. Repeating abandonment retrieves the same
|
|
76
|
+
result. Earlier saved private edits remain pending. The original changing request ID cannot
|
|
77
|
+
execute again. Abandoning never undoes external effects or establishes what an arbitrary
|
|
78
|
+
script did; the acknowledgement explicitly accepts that uncertainty. Publication recovery,
|
|
79
|
+
initial import, UI and debugger attempts use their own protocols and cannot use this command.
|
|
@@ -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.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Analysis storage and migration
|
|
2
|
+
|
|
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.
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
insight-cli permissions grant Update
|
|
11
|
+
insight-cli storage show --json
|
|
12
|
+
insight-cli storage configure --directory "/mnt/analysis volume" --json
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
`configure` requires no existing analysis entries. With existing data use `migrate`.
|
|
16
|
+
The directory is a **base**: the effective root appends `insight-cli/<profile>`, preserving
|
|
17
|
+
profile isolation. Choose an ordinary empty destination profile directory on a mounted local
|
|
18
|
+
filesystem. Spaces and Unicode are supported. Factory restricts the dedicated destination root to the
|
|
19
|
+
current user, including a Windows ACL; a filesystem that cannot apply this protection fails
|
|
20
|
+
before copying.
|
|
21
|
+
|
|
22
|
+
The complete `workspace`, `materials`, `temp` and `runtime` trees move: immutable inputs,
|
|
23
|
+
artifact/candidate snapshots, workspace SQLite DB/WAL, native private project/context DBs,
|
|
24
|
+
local Ghidra Server repositories, operation/publication/import journals, debugger traces,
|
|
25
|
+
process captures, exports, native helper compilation and verification working data.
|
|
26
|
+
**Runtime installations, acquisition caches, selections and process receipts move too**;
|
|
27
|
+
installation staging and activation must share a filesystem. External tool installations and
|
|
28
|
+
user-selected outputs outside these trees keep their locations.
|
|
29
|
+
|
|
30
|
+
Factory keeps profiles, permissions, IPC election/socket, migration-control metadata and
|
|
31
|
+
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.
|
|
33
|
+
|
|
34
|
+
## Move an existing profile
|
|
35
|
+
|
|
36
|
+
Finish changing commands, close native contexts, and stop this profile's owned server/tool
|
|
37
|
+
processes through ordinary CLI commands. Inspect `tools processes --json`. Unverified lifetimes
|
|
38
|
+
also block migration. Do not kill guessed PIDs or stop other profiles to make preflight pass.
|
|
39
|
+
Factory retains IPC ownership and command admission; other profiles can keep working.
|
|
40
|
+
|
|
41
|
+
```sh
|
|
42
|
+
insight-cli storage migrate --directory "/mnt/analysis volume" --dry-run --json
|
|
43
|
+
insight-cli storage migrate --directory "/mnt/analysis volume" --json
|
|
44
|
+
insight-cli storage show --json
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Dry-run checks separation, destination contents, access, conservative capacity and quiescence
|
|
48
|
+
without reserving/copying a migration. Source/destination/configuration roots cannot be equal
|
|
49
|
+
or nested. Destination symlink roots, escaping source links, special files, unresolved links
|
|
50
|
+
and inventories above one million entries or 128 directory levels are rejected. Internal
|
|
51
|
+
links retain their exact target strings. Preflight does not reserve space; concurrent disk use
|
|
52
|
+
can still cause a copy failure.
|
|
53
|
+
|
|
54
|
+
Migration durably reserves its journal, hashes stable source bytes, streams/syncs the copy,
|
|
55
|
+
independently hashes destination bytes and rechecks the source. Only then does it replace source
|
|
56
|
+
trees with permanent compatibility links and commit the Factory setting. Original trees are
|
|
57
|
+
renamed into `.storage-retained/<migration>` on their original volume. Copy/activation never
|
|
58
|
+
deletes them, including on failures. Existing IDs, requests, journals, candidate snapshots and
|
|
59
|
+
receipts retain exact bytes. Compatibility paths preserve old absolute references: do not remove
|
|
60
|
+
those links or their profile/source ancestors manually after migrating.
|
|
61
|
+
|
|
62
|
+
## Interruptions, uncertainty and retention
|
|
63
|
+
|
|
64
|
+
```sh
|
|
65
|
+
insight-cli storage resume --json
|
|
66
|
+
insight-cli storage rollback --json
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Ordinary research freezes during incomplete copy/activation/rollback/cleanup. `show` and Factory
|
|
70
|
+
profile inspection remain available. Resume verifies completed files, recopies an incomplete
|
|
71
|
+
file, rechecks capacity and finishes the retained transaction. Source and destination filesystem
|
|
72
|
+
anchor identities are bound durably. Missing/replaced volumes fail without creating a system-disk
|
|
73
|
+
fallback; mount the original volume before resuming.
|
|
74
|
+
|
|
75
|
+
Rollback restores retained source and the prior Factory setting. After activation it requires
|
|
76
|
+
an unchanged destination and a verified retained source. Native reopening or later findings can
|
|
77
|
+
make rollback unsafe, in which case it refuses and preserves both copies. Use forward migration
|
|
78
|
+
to another empty base after using the new location. A rolled-back destination remains for manual
|
|
79
|
+
inspection/removal and is never automatically adopted. Cleanup permanently disables rollback.
|
|
80
|
+
|
|
81
|
+
Unknown script/publication effects do **not** need abandonment before migrating a stopped
|
|
82
|
+
profile. Migration starts no worker, replays no script/check-in and marks no unknown outcome
|
|
83
|
+
applied. Inspect the original request after migrating; existing [recovery](recovery.md)
|
|
84
|
+
restrictions and independent readback requirements still apply.
|
|
85
|
+
|
|
86
|
+
After independent native reopen and saved-file readback, free retained source explicitly:
|
|
87
|
+
|
|
88
|
+
```sh
|
|
89
|
+
insight-cli permissions grant Destructive
|
|
90
|
+
insight-cli storage cleanup --json
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Cleanup verifies retained bytes, records irreversible intent, then deletes only that owned
|
|
94
|
+
backup. Interrupted cleanup continues through `storage resume`; rollback is already disabled.
|
|
95
|
+
Compatibility links, receipts and manifests remain. Clean or roll back the current migration
|
|
96
|
+
before starting another. This release provides no nonempty-destination adoption, reverse
|
|
97
|
+
synchronization, live-DB snapshotting or network-filesystem guarantees. POSIX directory fsync
|
|
98
|
+
is used. Windows has file fsync and rename/junction semantics; Node cannot fsync directories
|
|
99
|
+
there, and internal symlinks can require OS privileges.
|
|
@@ -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.
|
|
6
|
+
# Insight Detect It Easy 0.3.1
|
|
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.
|
|
6
|
+
# Insight dnSpyEx 0.3.1
|
|
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.
|
|
6
|
+
# Insight .NET Dump 0.3.1
|
|
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.
|
|
6
|
+
# Insight .NET Stack 0.3.1
|
|
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.
|
|
6
|
+
# Insight .NET Trace 0.3.1
|
|
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.
|
|
6
|
+
# Insight Frida 0.3.1
|
|
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.
|
|
6
|
+
# Insight Ghidra 0.3.1
|
|
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
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Save ordinary research materials
|
|
2
2
|
|
|
3
3
|
`insight-cli artifacts save <path> --json` saves a file or a settled directory tree in
|
|
4
|
-
the selected profile's AppData. It needs Factory Update permission and does not require
|
|
4
|
+
the selected profile's [analysis storage](storage.md), which defaults to AppData. It needs Factory Update permission and does not require
|
|
5
5
|
Ghidra, Java, authentication, target/session selectors or evidence metadata. Relative input
|
|
6
6
|
paths resolve against the caller's working directory. Use `--help` for generated syntax.
|
|
7
7
|
|
|
@@ -79,7 +79,7 @@ operations until `connect`/`start`. `server connect/disconnect` retain their con
|
|
|
79
79
|
An external server remains configured through profile server/repository/account fields and Factory
|
|
80
80
|
secrets; `server stop` cannot stop that external service.
|
|
81
81
|
|
|
82
|
-
Code/cache/installation receipts live under
|
|
82
|
+
Code/cache/installation receipts live under configured [analysis storage](storage.md) `runtime/`; research remains under
|
|
83
83
|
`workspace/`, and saved files under `materials/`. One selected immutable installation serves many
|
|
84
84
|
isolated JVM contexts; each has its own projects, home, settings, cache/temp and authenticated
|
|
85
85
|
endpoint. No per-agent copy of the Ghidra code distribution is required. This is process and data
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Setup
|
|
2
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
|
+
|
|
3
7
|
Use Node 24+ and `ghidra install` to deliver Ghidra 12.1.2, JDK 21, native components and
|
|
4
8
|
server support. See [managed runtime](managed-runtime.md) for download/install/offline archives,
|
|
5
9
|
external executable paths, status/doctor and safe removal. Existing Factory profile `java` and
|
|
@@ -65,3 +69,30 @@ After an import timeout, wait for the original worker to end, raise its budget a
|
|
|
65
69
|
the original scope. Incomplete private analysis restarts; a completed receipt is reused.
|
|
66
70
|
A save timeout reports `phase: save`, the effective budget and `saveSeconds`. Inspect
|
|
67
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.
|