forkit-ai-footprints 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/PRIVACY.md +150 -0
- package/README.md +313 -0
- package/STATUS.md +136 -0
- package/dist/agents.d.ts +22 -0
- package/dist/agents.js +281 -0
- package/dist/aggregate.d.ts +28 -0
- package/dist/aggregate.js +151 -0
- package/dist/assets/forkit-icon-dark.png +0 -0
- package/dist/assets/forkit-icon-light.png +0 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Info.plist +5 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/MacOS/Forkit AI Footprint +0 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/ForkitAIFootprint.icns +0 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/ForkitStatusTemplate.png +0 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/agents.d.ts +22 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/agents.js +281 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/aggregate.d.ts +28 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/aggregate.js +151 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/assets/forkit-icon-dark.png +0 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/assets/forkit-icon-light.png +0 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/census.d.ts +3 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/census.js +196 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/cli.d.ts +32 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/cli.js +404 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/doctor.d.ts +14 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/doctor.js +71 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/endpoints.d.ts +8 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/endpoints.js +45 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/evaluate.d.ts +44 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/evaluate.js +102 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/filesystem.d.ts +11 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/filesystem.js +226 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/format.d.ts +7 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/format.js +78 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/hash.d.ts +4 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/hash.js +16 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/index.d.ts +22 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/index.js +58 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/insights.d.ts +13 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/insights.js +76 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/local-device.d.ts +19 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/local-device.js +81 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/locales.json +272 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/localization.d.ts +277 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/localization.js +55 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/mcp.d.ts +9 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/mcp.js +93 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/monitor.d.ts +99 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/monitor.js +285 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/base.d.ts +34 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/base.js +88 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/index.d.ts +6 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/index.js +24 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/lmstudio.d.ts +9 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/lmstudio.js +71 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/ollama.d.ts +12 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/ollama.js +171 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/openai-compatible.d.ts +10 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/openai-compatible.js +68 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/resource-evidence.d.ts +17 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/resource-evidence.js +52 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/runtime-activity.d.ts +5 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/runtime-activity.js +66 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/runtime-identity.d.ts +7 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/runtime-identity.js +66 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/server.d.ts +21 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/server.js +308 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/share-page.d.ts +75 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/share-page.js +167 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/sharing.d.ts +35 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/sharing.js +67 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/tools.d.ts +9 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/tools.js +106 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/types.d.ts +166 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/types.js +3 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/version.d.ts +4 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/version.js +13 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/node_modules/ps-list/index.d.ts +76 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/node_modules/ps-list/index.js +366 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/node_modules/ps-list/license +9 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/node_modules/ps-list/package.json +44 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/node_modules/ps-list/readme.md +56 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/node_modules/ps-list/vendor/fastlist-0.3.0-x64.exe +0 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/node_modules/ps-list/vendor/fastlist-0.3.0-x86.exe +0 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/package.json +6 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/runtime/node +0 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/_CodeSignature/CodeResources +931 -0
- package/dist/census.d.ts +3 -0
- package/dist/census.js +196 -0
- package/dist/cli.d.ts +32 -0
- package/dist/cli.js +404 -0
- package/dist/doctor.d.ts +14 -0
- package/dist/doctor.js +71 -0
- package/dist/endpoints.d.ts +8 -0
- package/dist/endpoints.js +45 -0
- package/dist/evaluate.d.ts +44 -0
- package/dist/evaluate.js +102 -0
- package/dist/filesystem.d.ts +11 -0
- package/dist/filesystem.js +226 -0
- package/dist/format.d.ts +7 -0
- package/dist/format.js +78 -0
- package/dist/hash.d.ts +4 -0
- package/dist/hash.js +16 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.js +58 -0
- package/dist/insights.d.ts +13 -0
- package/dist/insights.js +76 -0
- package/dist/local-device.d.ts +19 -0
- package/dist/local-device.js +81 -0
- package/dist/locales.json +272 -0
- package/dist/localization.d.ts +277 -0
- package/dist/localization.js +55 -0
- package/dist/mcp.d.ts +9 -0
- package/dist/mcp.js +93 -0
- package/dist/monitor.d.ts +99 -0
- package/dist/monitor.js +285 -0
- package/dist/providers/base.d.ts +34 -0
- package/dist/providers/base.js +88 -0
- package/dist/providers/index.d.ts +6 -0
- package/dist/providers/index.js +24 -0
- package/dist/providers/lmstudio.d.ts +9 -0
- package/dist/providers/lmstudio.js +71 -0
- package/dist/providers/ollama.d.ts +12 -0
- package/dist/providers/ollama.js +171 -0
- package/dist/providers/openai-compatible.d.ts +10 -0
- package/dist/providers/openai-compatible.js +68 -0
- package/dist/resource-evidence.d.ts +17 -0
- package/dist/resource-evidence.js +52 -0
- package/dist/runtime-activity.d.ts +5 -0
- package/dist/runtime-activity.js +66 -0
- package/dist/runtime-identity.d.ts +7 -0
- package/dist/runtime-identity.js +66 -0
- package/dist/server.d.ts +21 -0
- package/dist/server.js +308 -0
- package/dist/share-page.d.ts +75 -0
- package/dist/share-page.js +167 -0
- package/dist/sharing.d.ts +35 -0
- package/dist/sharing.js +67 -0
- package/dist/tools.d.ts +9 -0
- package/dist/tools.js +106 -0
- package/dist/types.d.ts +166 -0
- package/dist/types.js +3 -0
- package/dist/version.d.ts +4 -0
- package/dist/version.js +13 -0
- package/docs/GLOBAL_DISTRIBUTION.md +79 -0
- package/docs/MACOS_ACCURACY_GATE.md +140 -0
- package/docs/MACOS_TESTER_GUIDE.md +88 -0
- package/examples/macos-truth.template.json +10 -0
- package/package.json +75 -0
- package/release/channels.json +41 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Forkit Dev
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/PRIVACY.md
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Privacy Boundary
|
|
2
|
+
|
|
3
|
+
Forkit AI Footprints (`forkit-ai-footprints`) is metadata-only by design.
|
|
4
|
+
|
|
5
|
+
## Allowed local reads
|
|
6
|
+
|
|
7
|
+
- local operating-system and Node version metadata;
|
|
8
|
+
- the macOS Computer Name for display and storage only in the private local
|
|
9
|
+
device journal;
|
|
10
|
+
- process name and command metadata held only long enough to classify explicit
|
|
11
|
+
executable, module, or package-runner evidence; raw commands are not included
|
|
12
|
+
in the report or in the evidence hash;
|
|
13
|
+
- cumulative CPU time, current CPU percentage, and resident memory for supported
|
|
14
|
+
process trees, held locally for repeated activity classification; raw process
|
|
15
|
+
entries are never exported;
|
|
16
|
+
- directory entries and file metadata for supported model extensions;
|
|
17
|
+
- loopback runtime API responses from explicitly supported local endpoints.
|
|
18
|
+
- known AI-tool installation/configuration path existence;
|
|
19
|
+
- local runtime, model, AI-app, and AI-tool display names in the interactive
|
|
20
|
+
loopback UI; an explicitly created local share image may include only the
|
|
21
|
+
supported active tool product name, while model names and all item names are
|
|
22
|
+
excluded from saved HTML and anonymous/global payloads;
|
|
23
|
+
- optional chat/workspace labels supplied explicitly by a cooperating app for
|
|
24
|
+
local display only; absent cooperation, the fields remain empty;
|
|
25
|
+
- macOS major version, CPU architecture, and Node major in aggregate field-test
|
|
26
|
+
results;
|
|
27
|
+
- aggregate counts, exact recognized model-file bytes, architecture, Node major, product version,
|
|
28
|
+
and scan date in an explicitly saved local HTML share page;
|
|
29
|
+
- up to 1 MiB from a known MCP JSON/TOML configuration file solely to count
|
|
30
|
+
server entries.
|
|
31
|
+
|
|
32
|
+
## Prohibited collection or export
|
|
33
|
+
|
|
34
|
+
Census must not retain or emit:
|
|
35
|
+
|
|
36
|
+
- raw process commands;
|
|
37
|
+
- process IDs;
|
|
38
|
+
- model weights or file contents;
|
|
39
|
+
- full filesystem paths;
|
|
40
|
+
- prompts, responses, terminal logs, or source-code content;
|
|
41
|
+
- credentials, cookies, tokens, API keys, or passwords;
|
|
42
|
+
- hostname or Mac display name in Census reports, saved share pages, anonymous
|
|
43
|
+
contributions, or global payloads; username, email, and Forkit.dev account
|
|
44
|
+
identity are prohibited everywhere.
|
|
45
|
+
- MCP server names, commands, URLs, environment keys, or environment values;
|
|
46
|
+
- chat, workspace, or repository names in reports, saved/shareable artifacts,
|
|
47
|
+
contribution previews, or global payloads.
|
|
48
|
+
|
|
49
|
+
## Network boundary
|
|
50
|
+
|
|
51
|
+
Census may call HTTP(S) endpoints only when the hostname is one of:
|
|
52
|
+
|
|
53
|
+
- `localhost`
|
|
54
|
+
- `127.0.0.1`
|
|
55
|
+
- `::1`
|
|
56
|
+
|
|
57
|
+
Remote endpoints and endpoints containing embedded credentials are rejected.
|
|
58
|
+
Census contains no Forkit.dev login, registry-write, passport-publish,
|
|
59
|
+
Runtime_C2-write, billing, telemetry-upload, or deployment client.
|
|
60
|
+
|
|
61
|
+
`forkit-ai-footprints serve` binds only to `127.0.0.1`. Its rescan route
|
|
62
|
+
requires the same page origin and a random in-memory session token. The route
|
|
63
|
+
may return local runtime, model, AI-app, and AI-tool display names to that
|
|
64
|
+
protected local page. It never returns full paths, raw commands, endpoints,
|
|
65
|
+
configuration values, prompts, chat titles, workspace names, or account data.
|
|
66
|
+
The numeric guess is compared inside the browser and is not submitted to the
|
|
67
|
+
local server. Start, Stop, Clear history, Scan again, and contribution preview
|
|
68
|
+
all require the same-origin random session token. Closing a browser or native
|
|
69
|
+
window does not stop monitoring; native Quit stops the monitor and local service.
|
|
70
|
+
|
|
71
|
+
The interactive app keeps `device-journal.json` under the user's macOS
|
|
72
|
+
Application Support directory with directory mode `0700` and file mode `0600`.
|
|
73
|
+
It contains only the sanitized Mac display name, first/last scan timestamps, and
|
|
74
|
+
scan count. It is never placed in the Census report, rescan snapshot, share
|
|
75
|
+
image, saved share page, or anonymous/global contribution. The local monitor
|
|
76
|
+
stream is same-origin and session-token protected. Sampling runs at a one-second
|
|
77
|
+
target interval; durations exclude stopped time and gaps longer than three
|
|
78
|
+
intervals. The stream makes no external request.
|
|
79
|
+
|
|
80
|
+
The packaged app uses a native launcher to query Apple DeviceCheck capability.
|
|
81
|
+
The status check makes no network request and writes no key. On a future
|
|
82
|
+
supported, signed macOS 27+ build, a separate explicit enrollment action may
|
|
83
|
+
generate one App Attest key and store only its opaque key identifier in the
|
|
84
|
+
device-only Keychain. The current UI and CLI do not invoke enrollment,
|
|
85
|
+
attestation, assertion generation, or upload.
|
|
86
|
+
|
|
87
|
+
## Filesystem identity
|
|
88
|
+
|
|
89
|
+
Filesystem model identity is derived from metadata such as relative location,
|
|
90
|
+
name, size, and modification time. The absolute path participates only inside a
|
|
91
|
+
local one-way root fingerprint helper and is not included in a Census Report.
|
|
92
|
+
Model bytes are never read for hashing.
|
|
93
|
+
|
|
94
|
+
## Model storage measurement
|
|
95
|
+
|
|
96
|
+
Storage is the exact logical byte total (`stat.size`) of recognized model files
|
|
97
|
+
inside the supported or explicitly selected roots when the scan reports
|
|
98
|
+
`storage_complete=true`. Device/inode identity prevents the same file from being
|
|
99
|
+
counted twice through hard links, symlinks, or overlapping roots. Provider API
|
|
100
|
+
size fields are excluded from the total to avoid double-counting the same model.
|
|
101
|
+
This is not APFS physical allocation: clones, compression, filesystem metadata,
|
|
102
|
+
and unsupported model locations can make actual disk blocks differ.
|
|
103
|
+
|
|
104
|
+
## Resource evidence
|
|
105
|
+
|
|
106
|
+
**Working now** requires sustained cumulative CPU-time deltas across repeated
|
|
107
|
+
samples of a supported process tree. Two positive samples enter working and
|
|
108
|
+
three negative samples exit it. Process presence alone remains **Open / idle**.
|
|
109
|
+
This is still not exclusive per-prompt proof. Forkit's own process tree is
|
|
110
|
+
excluded from AI activity and measured separately for CPU, RAM, and bounded
|
|
111
|
+
history overhead. Static hardware metadata describes capability, not use. GPU
|
|
112
|
+
and per-process network attribution remain unavailable; no estimate is used.
|
|
113
|
+
|
|
114
|
+
## Review rule
|
|
115
|
+
|
|
116
|
+
Runtime, model, and agent findings are inventory suggestions. They must not be
|
|
117
|
+
used as automatic evidence of ownership, safety, provenance, or passport status.
|
|
118
|
+
|
|
119
|
+
## Anonymous contribution boundary
|
|
120
|
+
|
|
121
|
+
The local app can create an allowlisted schema `2.0` preview only after at least
|
|
122
|
+
600 valid observed seconds. Preview and consent are separate actions. It
|
|
123
|
+
contains valid seconds, AI-active seconds, activity ratio, supported app count
|
|
124
|
+
and categories, model/loaded/runtime counts, recognized model-file bytes,
|
|
125
|
+
macOS major, architecture, and scanner/runtime schema versions. It excludes
|
|
126
|
+
names, process counts, CPU/RAM values, guess, device identity, local Census ID,
|
|
127
|
+
timestamps, and all item-level records. The CLI and app still have no uploader. A
|
|
128
|
+
separate Forkit.dev aggregate endpoint candidate exists with contribution writes
|
|
129
|
+
disabled by default. That candidate now fails closed without Apple App Attest
|
|
130
|
+
verification and excludes quarantined or revoked installations from the public
|
|
131
|
+
pulse. The CLI still contains no proof enrollment or upload transport. Enabling
|
|
132
|
+
either remains a founder/security release gate.
|
|
133
|
+
|
|
134
|
+
## Local share page
|
|
135
|
+
|
|
136
|
+
`forkit-ai-footprints share-page --output ...` saves a self-contained HTML result only
|
|
137
|
+
after the user supplies an output path. The page contains aggregate counts and
|
|
138
|
+
limitations, not item names, paths, commands, endpoints, configuration values,
|
|
139
|
+
account identity, or the local Census ID. It loads no external assets and makes
|
|
140
|
+
no automatic network requests. Its copy/share controls act only after a user
|
|
141
|
+
click and use aggregate text.
|
|
142
|
+
|
|
143
|
+
The interactive `serve` page can also render a 1080×1080 discovery card locally
|
|
144
|
+
with browser Canvas. It includes model-record count, recognized storage,
|
|
145
|
+
activity ratio, and the supported active tool product name. Its result line is
|
|
146
|
+
derived only from measured local insights. The image has no model names, paths,
|
|
147
|
+
process counts, device/account identifiers, workspace/chat titles, or external
|
|
148
|
+
assets.
|
|
149
|
+
Downloading it or opening the operating system share sheet requires a separate
|
|
150
|
+
user click; AI Footprints does not receive the image.
|
package/README.md
ADDED
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
# Forkit AI Footprints
|
|
2
|
+
|
|
3
|
+
Forkit AI Footprints is a private, metadata-only view of the models, runtimes,
|
|
4
|
+
and AI agents present on a Mac. The prepared package and command are
|
|
5
|
+
`forkit-ai-footprints`; `forkit-census` remains a temporary binary alias.
|
|
6
|
+
|
|
7
|
+
It is derived from the discovery lessons in Forkit Connect, but it has a
|
|
8
|
+
different safety boundary: AI Footprints does not authenticate to Forkit.dev and has
|
|
9
|
+
no passport, Mint, registry-write, Runtime_C2-write, or production deployment
|
|
10
|
+
path.
|
|
11
|
+
|
|
12
|
+
Product status: `current` for the approved Apple Silicon macOS release
|
|
13
|
+
|
|
14
|
+
Current support target: **macOS only**. The real-device validation so far is on
|
|
15
|
+
Apple Silicon. Ubuntu, Windows, Android, and Intel Mac are not part of the
|
|
16
|
+
current release claim.
|
|
17
|
+
|
|
18
|
+
## Install on macOS
|
|
19
|
+
|
|
20
|
+
The free global installation command is:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npx --yes forkit-ai-footprints@latest
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Mac users who already have Node can run it directly. Homebrew users can first
|
|
27
|
+
run `brew install node`; users with neither can use the official Node LTS
|
|
28
|
+
installer and verify `node`, `npm`, and `npx`. A Forkit-specific Homebrew formula
|
|
29
|
+
and direct download are deliberately not advertised because those channels do
|
|
30
|
+
not exist. The website presents the command only when the exact tested package
|
|
31
|
+
and release metadata agree. See
|
|
32
|
+
[`docs/GLOBAL_DISTRIBUTION.md`](./docs/GLOBAL_DISTRIBUTION.md).
|
|
33
|
+
|
|
34
|
+
The future click installer remains blocked until it can be Developer ID-signed
|
|
35
|
+
and Apple-notarized. Developers can build the local candidate with:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
npm ci
|
|
39
|
+
npm run preflight:macos:release
|
|
40
|
+
npm run build:macos:installer
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The current output is an unsigned local validation artifact because no valid
|
|
44
|
+
Developer ID Application or Installer identity is available on this Mac. It
|
|
45
|
+
must not be distributed until signing, notarization, stapling, Gatekeeper
|
|
46
|
+
verification, and clean-Mac installation tests pass.
|
|
47
|
+
|
|
48
|
+
### Developer fallback
|
|
49
|
+
|
|
50
|
+
Requirements:
|
|
51
|
+
|
|
52
|
+
- macOS;
|
|
53
|
+
- Node.js 20, 22, or 24
|
|
54
|
+
- npm
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
git clone https://github.com/arpitasarker01/forkit-census.git
|
|
58
|
+
cd forkit-census
|
|
59
|
+
npm ci
|
|
60
|
+
npm pack
|
|
61
|
+
npm install -g ./forkit-ai-footprints-0.2.0.tgz
|
|
62
|
+
forkit-ai-footprints serve
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The equivalent persistent global CLI installation is:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
npm install -g forkit-ai-footprints
|
|
69
|
+
forkit-ai-footprints serve
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
npm is the approved public bootstrap channel for this release. Homebrew remains
|
|
73
|
+
a future optional channel.
|
|
74
|
+
|
|
75
|
+
## Commands
|
|
76
|
+
|
|
77
|
+
Run a local scan, verify the installation, or score one manually labelled Mac:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
forkit-ai-footprints serve
|
|
81
|
+
forkit-ai-footprints monitor
|
|
82
|
+
forkit-ai-footprints scan
|
|
83
|
+
forkit-ai-footprints doctor
|
|
84
|
+
forkit-ai-footprints evaluate --truth /absolute/path/to/local-truth.json
|
|
85
|
+
forkit-ai-footprints aggregate --results /absolute/path/to/evaluation-results
|
|
86
|
+
forkit-ai-footprints share-page --output /absolute/path/to/local-ai-footprint.html
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
`evaluate` always runs locally and emits aggregate counts and metrics only. It
|
|
90
|
+
does not upload the truth file or include its item names in the output.
|
|
91
|
+
|
|
92
|
+
Create the truth file only after manually checking that Mac. Empty arrays are
|
|
93
|
+
valid when a surface is not installed or running:
|
|
94
|
+
|
|
95
|
+
```json
|
|
96
|
+
{
|
|
97
|
+
"schema_version": "1.0",
|
|
98
|
+
"expected": {
|
|
99
|
+
"agent_signatures": ["codex"],
|
|
100
|
+
"tool_names": ["Codex"],
|
|
101
|
+
"online_runtime_names": ["ollama"],
|
|
102
|
+
"model_keys": ["ollama:example-model:latest"],
|
|
103
|
+
"mcp_clients": ["Codex"]
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Keep truth files local; model names and installed-tool labels may be private.
|
|
109
|
+
The evaluation result adds only macOS major version, CPU architecture, Node
|
|
110
|
+
major, and aggregate counts. A coordinator can combine explicitly shared result
|
|
111
|
+
files with `aggregate`; this remains local and always keeps automatic accuracy
|
|
112
|
+
claims disabled. See [`docs/MACOS_TESTER_GUIDE.md`](./docs/MACOS_TESTER_GUIDE.md).
|
|
113
|
+
|
|
114
|
+
`share-page` performs the same local scan and writes a self-contained,
|
|
115
|
+
aggregate-only HTML snapshot. It loads no external assets and contains no model
|
|
116
|
+
names, paths, commands, endpoints, configuration values, account identity, or
|
|
117
|
+
Census ID. Its copy/share controls include only the visible aggregate summary
|
|
118
|
+
and run only after a user click.
|
|
119
|
+
|
|
120
|
+
`serve` binds only to `127.0.0.1`, keeps the report and monitor in memory, and
|
|
121
|
+
opens the AI activity → Guess → Reveal → Share experience. `Scan again` calls a random-token-protected local
|
|
122
|
+
endpoint. The protected local page can name detected runtimes, models, AI apps,
|
|
123
|
+
and tools. The explicitly created local share image may include the supported
|
|
124
|
+
active tool product name; saved HTML and anonymous/global payloads remain
|
|
125
|
+
aggregate-only.
|
|
126
|
+
The guess remains in the browser page and is never sent to the local server or
|
|
127
|
+
Forkit.dev. Start/Stop controls monitoring explicitly; browser/window closure
|
|
128
|
+
does not stop it, while native Quit stops the monitor and loopback service.
|
|
129
|
+
|
|
130
|
+
The local app also keeps an owner-only device journal containing the sanitized
|
|
131
|
+
Mac display name, first/last scan timestamps, and scan count. This lets the Mac
|
|
132
|
+
resume its local state without placing the device name in a report, saved share
|
|
133
|
+
page, image, anonymous preview, or website payload. The single result view uses
|
|
134
|
+
a token-protected local stream with a one-second target interval. Repeated
|
|
135
|
+
cumulative CPU-time deltas and hysteresis distinguish Working now from Open /
|
|
136
|
+
idle; process presence alone is never activity. It is near-real-time, not zero delay.
|
|
137
|
+
|
|
138
|
+
The revealed resource view reports deduplicated recognized logical model-file
|
|
139
|
+
bytes and provider-native loaded-model evidence. The activity view uses private
|
|
140
|
+
process-tree CPU-time deltas and separately displays Forkit's measured CPU,
|
|
141
|
+
resident memory, and bounded-history overhead. None is an energy, token, cost,
|
|
142
|
+
or lifetime-usage measurement.
|
|
143
|
+
|
|
144
|
+
AI Footprints does not claim prompt or task ownership. **Working now** means
|
|
145
|
+
sustained recent work inside a supported process tree, which may be foreground
|
|
146
|
+
or background. The result does not measure GPU, energy, tokens, cost, disk I/O,
|
|
147
|
+
or per-process network usage.
|
|
148
|
+
|
|
149
|
+
After revealing the result, `Create share card` renders a 1200×630 PNG entirely
|
|
150
|
+
in the browser. Its result-based line and cards use measured local insights,
|
|
151
|
+
model-record count, recognized model storage, activity ratio, and the supported
|
|
152
|
+
active tool product name. It can be downloaded or passed to the operating
|
|
153
|
+
system share sheet after an explicit click; no model names, chat/workspace
|
|
154
|
+
context, paths, device identity, or scan records are placed in the image or
|
|
155
|
+
uploaded by AI Footprints.
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
forkit-ai-footprints serve
|
|
159
|
+
forkit-ai-footprints scan
|
|
160
|
+
forkit-ai-footprints scan --json
|
|
161
|
+
forkit-ai-footprints scan --verbose --guess 5
|
|
162
|
+
forkit-ai-footprints scan --copy
|
|
163
|
+
forkit-ai-footprints report --json --output footprint.json
|
|
164
|
+
forkit-ai-footprints scan --model-dir /path/you/selected
|
|
165
|
+
forkit-ai-footprints doctor
|
|
166
|
+
forkit-ai-footprints --version
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
One `scan` includes runtime APIs, filesystem model metadata, and agent process
|
|
170
|
+
metadata by default. Individual surfaces can be disabled:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
forkit-ai-footprints scan --no-runtimes
|
|
174
|
+
forkit-ai-footprints scan --no-model-files
|
|
175
|
+
forkit-ai-footprints scan --no-agents
|
|
176
|
+
forkit-ai-footprints scan --no-tools
|
|
177
|
+
forkit-ai-footprints scan --no-mcp
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
CLI flags cannot bypass the required monitoring session. The local UI enables
|
|
181
|
+
an exact schema `2.0` aggregate preview only after 600 valid observed seconds;
|
|
182
|
+
preview and consent remain separate, and no upload transport exists. The
|
|
183
|
+
payload excludes app/model names, process counts, CPU/RAM, chat, workspace,
|
|
184
|
+
repository, device, guess, Census, and account identifiers.
|
|
185
|
+
|
|
186
|
+
## Shared core API
|
|
187
|
+
|
|
188
|
+
Forkit Connect should delegate to the package's public, read-only core rather
|
|
189
|
+
than copy its detector implementation:
|
|
190
|
+
|
|
191
|
+
```js
|
|
192
|
+
const { runCensus } = require('forkit-ai-footprints');
|
|
193
|
+
|
|
194
|
+
const report = await runCensus();
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
The package root also exports the individual metadata detectors, formatters,
|
|
198
|
+
provider adapters, endpoint validation, anonymous-preview builder, and TypeScript
|
|
199
|
+
types. A fresh-install smoke test imports the package root and verifies that an
|
|
200
|
+
all-disabled core scan makes zero external requests and writes no local state.
|
|
201
|
+
|
|
202
|
+
## What AI Footprints reports
|
|
203
|
+
|
|
204
|
+
- availability of supported loopback runtime APIs;
|
|
205
|
+
- model names and provider identities;
|
|
206
|
+
- models confirmed loaded by Ollama's read-only `/api/ps` response;
|
|
207
|
+
- Ollama content digests when exposed by the runtime;
|
|
208
|
+
- metadata-only fingerprints for supported local model files;
|
|
209
|
+
- known AI agent products with process-instance counts;
|
|
210
|
+
- passively configured or active Claude Code, Codex, Cursor, Windsurf, Gemini
|
|
211
|
+
CLI, GitHub Copilot, OpenCode, and OpenClaw surfaces;
|
|
212
|
+
- aggregate server counts from known MCP client configuration files;
|
|
213
|
+
- exact recognized logical model-file bytes when supported-root coverage is
|
|
214
|
+
complete, plus explicit completeness evidence and optional guess comparison;
|
|
215
|
+
- confidence labels and review warnings;
|
|
216
|
+
- platform, architecture, and Node major version.
|
|
217
|
+
|
|
218
|
+
## What AI Footprints does not collect
|
|
219
|
+
|
|
220
|
+
- model weights or file contents;
|
|
221
|
+
- prompts or responses;
|
|
222
|
+
- raw process commands;
|
|
223
|
+
- full model paths in reports;
|
|
224
|
+
- credentials, tokens, API keys, or passwords;
|
|
225
|
+
- device name or hostname in reports, saved/shareable artifacts, anonymous
|
|
226
|
+
previews, or website payloads; username, email address, and account identity
|
|
227
|
+
are never collected.
|
|
228
|
+
|
|
229
|
+
AI Footprints only connects to loopback HTTP(S) endpoints. Remote hosts and URLs with
|
|
230
|
+
embedded credentials are rejected.
|
|
231
|
+
|
|
232
|
+
Known MCP configuration files are read only to count configured server entries.
|
|
233
|
+
Server names, commands, URLs, environment variables, and values are neither
|
|
234
|
+
retained nor emitted.
|
|
235
|
+
|
|
236
|
+
See [`PRIVACY.md`](./PRIVACY.md), [`STATUS.md`](./STATUS.md), and
|
|
237
|
+
[`docs/PRODUCT_BOUNDARY.md`](./docs/PRODUCT_BOUNDARY.md).
|
|
238
|
+
|
|
239
|
+
## Model identity
|
|
240
|
+
|
|
241
|
+
| Source | Identity | Confidence |
|
|
242
|
+
|---|---|---|
|
|
243
|
+
| Ollama weights/manifest SHA-256 | Content-addressed SHA-256 | High |
|
|
244
|
+
| LM Studio/OpenAI-compatible API | Hashed provider/model identity | Medium |
|
|
245
|
+
| Filesystem model metadata | Hashed name, relative location, size, and modification time | Low |
|
|
246
|
+
|
|
247
|
+
A filesystem identity is not a content checksum. AI Footprints says so in every report
|
|
248
|
+
that includes filesystem-discovered models.
|
|
249
|
+
|
|
250
|
+
## Agent identity
|
|
251
|
+
|
|
252
|
+
Agent matching uses exact executable names, explicit `python -m` module
|
|
253
|
+
invocations, or explicit package-runner invocations such as `npx`. Product words
|
|
254
|
+
appearing in unrelated arguments or paths are rejected. Multiple processes with
|
|
255
|
+
the same product signature are aggregated into one agent product with an
|
|
256
|
+
`instance_count`; this is a process count, not a count of independent autonomous
|
|
257
|
+
agents or user sessions.
|
|
258
|
+
|
|
259
|
+
The checked-in curated conformance corpus covers all supported agent signatures
|
|
260
|
+
and difficult negative names on macOS, Linux, and Windows-style process
|
|
261
|
+
metadata. Run it with `npm run benchmark:agents`. Its result shows whether the
|
|
262
|
+
detector conforms to those labeled fixtures; it is not a representative sample
|
|
263
|
+
of real devices, so it must not be presented as field accuracy.
|
|
264
|
+
|
|
265
|
+
## Validation
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
npm ci
|
|
269
|
+
npm test
|
|
270
|
+
npm run benchmark:agents
|
|
271
|
+
npm run validate:macos
|
|
272
|
+
npm run smoke:package
|
|
273
|
+
npm run preflight:macos:release
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
The active GitHub Actions matrix covers Node 20, 22, and 24 on macOS, plus an
|
|
277
|
+
isolated installed-package smoke on macOS. `npm test` includes the conservative
|
|
278
|
+
agent conformance benchmark. See
|
|
279
|
+
[`benchmarks/README.md`](./benchmarks/README.md) for the benchmark method and
|
|
280
|
+
limitations.
|
|
281
|
+
|
|
282
|
+
`npm run validate:macos` performs two real-device scans, verifies stable item
|
|
283
|
+
sets, rejects non-loopback requests, checks the report privacy contract, and
|
|
284
|
+
fails if prohibited process/path keys appear. One machine is a release sanity
|
|
285
|
+
check, not a field-accuracy sample.
|
|
286
|
+
|
|
287
|
+
The multi-device protocol, local truth-file format, and quantitative public
|
|
288
|
+
release thresholds are defined in
|
|
289
|
+
[`docs/MACOS_ACCURACY_GATE.md`](./docs/MACOS_ACCURACY_GATE.md).
|
|
290
|
+
|
|
291
|
+
Storage, runtime-freshness, resource-attribution, and Developer ID truth
|
|
292
|
+
boundaries are defined in
|
|
293
|
+
[`docs/MACOS_MEASUREMENT_FOUNDATION.md`](./docs/MACOS_MEASUREMENT_FOUNDATION.md).
|
|
294
|
+
|
|
295
|
+
## Accuracy boundary
|
|
296
|
+
|
|
297
|
+
AI Footprints has no defensible global accuracy percentage yet. Runtime API evidence is
|
|
298
|
+
strongest; filesystem findings are explicitly best-effort; tool and MCP coverage
|
|
299
|
+
is limited to documented locations; and the agent benchmark is curated rather
|
|
300
|
+
than independently sampled. Do not market a benchmark pass as field precision
|
|
301
|
+
or recall. Global release requires a separately labelled, consented multi-device
|
|
302
|
+
macOS evaluation.
|
|
303
|
+
|
|
304
|
+
## Relationship to Forkit Connect
|
|
305
|
+
|
|
306
|
+
- Forkit AI Footprints: canonical read-only inventory core and report generation.
|
|
307
|
+
- Forkit Connect: supporting bridge for governed Model and Agent Passport flows.
|
|
308
|
+
- Forkit.dev website/registry: authoritative review and explicit final Mint.
|
|
309
|
+
|
|
310
|
+
AI Footprints is not a replacement production release for Connect. The intended
|
|
311
|
+
integration is for `forkit-connect census` to delegate to this package's public
|
|
312
|
+
core, avoiding two scanner implementations. Promotion requires an intentional
|
|
313
|
+
update to the Forkit.dev production lock.
|
package/STATUS.md
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Forkit AI Footprints Status
|
|
2
|
+
|
|
3
|
+
Last updated: 2026-08-23
|
|
4
|
+
|
|
5
|
+
Version: `0.2.0`
|
|
6
|
+
|
|
7
|
+
Production classification: `current` for Apple Silicon macOS
|
|
8
|
+
|
|
9
|
+
Release state: founder-approved public v0.2.0 npm-first release. The npm
|
|
10
|
+
bootstrap installs a persistent unsigned local app; Developer ID signing and
|
|
11
|
+
notarization remain future work.
|
|
12
|
+
|
|
13
|
+
## What is implemented
|
|
14
|
+
|
|
15
|
+
- One local experience: AI activity first, Guess → Reveal, an aggregate share
|
|
16
|
+
card, optional exact global-payload review, Scan again, and technical details.
|
|
17
|
+
- Explicit Start/Stop Monitoring with repeated one-second macOS process-tree
|
|
18
|
+
sampling, cumulative CPU-time deltas, two-sample entry and three-sample exit
|
|
19
|
+
hysteresis, and sleep-gap exclusion.
|
|
20
|
+
- Clear states: **Working now**, **Open / idle**, **Not running**, and **Stopped**.
|
|
21
|
+
Process presence alone never becomes working activity.
|
|
22
|
+
- One to three deterministic insights from valid measured time: activity share,
|
|
23
|
+
longest continuous active block, supported-tool workflow, mostly-idle state,
|
|
24
|
+
and available-but-unused local models. Stop/restart boundaries cannot inflate
|
|
25
|
+
the longest block.
|
|
26
|
+
- The monitor is owned by the local service, not a browser tab. Closing the
|
|
27
|
+
window does not end a session; stopping preserves the summary; clearing is a
|
|
28
|
+
separate explicit action.
|
|
29
|
+
- A persistent native AppKit/WebKit app installed into the current user's
|
|
30
|
+
Applications folder by a one-time npm bootstrap. Later launches use normal
|
|
31
|
+
macOS surfaces and do not require Terminal.
|
|
32
|
+
- A native AppKit/WebKit window and retained menu-bar controller with Open,
|
|
33
|
+
Start/Stop, and Quit actions. Closing hides the window without quitting; Quit
|
|
34
|
+
stops the service and has a process-exit fallback so the bundled Node service
|
|
35
|
+
cannot remain orphaned.
|
|
36
|
+
- One English/German localization source drives the app, deterministic insights,
|
|
37
|
+
share caption, menu-bar menu, and close/quit notices.
|
|
38
|
+
- Local-only optional chat/workspace display when a cooperating app explicitly
|
|
39
|
+
supplies those values. No inference from window titles, folders, prompts, or
|
|
40
|
+
commands is attempted.
|
|
41
|
+
- Forkit's own process tree is excluded from detected AI activity. Its CPU,
|
|
42
|
+
RAM, and bounded-history overhead are measured and labelled separately.
|
|
43
|
+
- Exact recognized logical model-file bytes for supported roots, with hard-link,
|
|
44
|
+
symlink, overlapping-root, Hugging Face snapshot, and Ollama content-addressed
|
|
45
|
+
deduplication.
|
|
46
|
+
- Verified Ollama availability requires the exact local listener owner, a valid
|
|
47
|
+
version response, and a valid tags response. Loaded state comes only from a
|
|
48
|
+
valid `/api/ps` response.
|
|
49
|
+
- A schema `2.0` candidate global aggregate based on valid observed seconds and
|
|
50
|
+
AI-active seconds. It excludes names, process counts, paths, commands, chat,
|
|
51
|
+
workspace, device identity, guess, and Census ID. Review and consent are
|
|
52
|
+
separate; upload transport remains disabled.
|
|
53
|
+
- A 1080×1080 local share card with Share, Save PNG, Copy Image, and Copy
|
|
54
|
+
Caption controls. It contains only measured totals and supported tool names.
|
|
55
|
+
- A single Forkit.dev `/ai-footprint` page with an honest benchmark-forming
|
|
56
|
+
state and one npm path using `npx --yes forkit-ai-footprints@latest`.
|
|
57
|
+
Unpublished Forkit Homebrew/download channels are not claimed.
|
|
58
|
+
- One release version sourced from `package.json`, release-coherence checks,
|
|
59
|
+
package smoke tooling, a bundled official Node runtime, official Forkit app
|
|
60
|
+
and menu-bar assets, and an unsigned local `.app`/`.pkg` candidate.
|
|
61
|
+
|
|
62
|
+
## Evidence from this Apple Silicon Mac
|
|
63
|
+
|
|
64
|
+
- Models discovered: **5**.
|
|
65
|
+
- Models loaded: **0**.
|
|
66
|
+
- Recognized model storage: **2,600,071,742 bytes** (**2.60 GB / 2.42 GiB**)
|
|
67
|
+
across **12** deduplicated recognized files with complete supported-root
|
|
68
|
+
coverage.
|
|
69
|
+
- Verified local runtime: **Ollama 0.20.5**, owned by the exact Homebrew
|
|
70
|
+
`ollama` executable on `127.0.0.1:11434`.
|
|
71
|
+
- Ollama inventory: `llama3.2:latest`; `/api/ps` was empty. The correct state is
|
|
72
|
+
**engine available, no model loaded**, not AI work.
|
|
73
|
+
- A real **984.1-second** valid session observed Codex activity for **982.9
|
|
74
|
+
seconds** (ratio **0.999**) while this development task was actively running.
|
|
75
|
+
This is real process-tree activity evidence, not prompt/task/token ownership.
|
|
76
|
+
- During the measured session, Forkit overhead was **1.3% median CPU**, **3.3%
|
|
77
|
+
p95 CPU**, about **53.3 MB current RAM**, **117.1 MB maximum RAM**, and **627
|
|
78
|
+
bytes** of bounded serialized history at the final payload sample.
|
|
79
|
+
- A final source-identical bundled-app observation reached **63.3 seconds** of
|
|
80
|
+
valid time and **62.1 seconds** AI-active (ratio **0.981**), producing: “Codex
|
|
81
|
+
was working during 98% of your observation.”, “Your longest continuous
|
|
82
|
+
AI-active period was 1m 1s.”, and “5 local models are available, but none ran
|
|
83
|
+
during this observation.”
|
|
84
|
+
- A separate real session crossed the 10-minute gate at exactly **600 valid
|
|
85
|
+
seconds** and **598 AI-active seconds**. Only then did the local comparison
|
|
86
|
+
preview become available; no transport was enabled.
|
|
87
|
+
|
|
88
|
+
## Validation completed locally
|
|
89
|
+
|
|
90
|
+
- TypeScript build and the complete local test suite.
|
|
91
|
+
- Curated agent detector corpus: **58/58** fixtures, 26 positive and 32 negative,
|
|
92
|
+
with zero fixture errors. This is conformance evidence, not field accuracy.
|
|
93
|
+
- Isolated packed-package installation/import/CLI smoke.
|
|
94
|
+
- Native Swift compilation, bundled CLI/version smoke, bundled official Node
|
|
95
|
+
checksum, App Attest capability probe, and unsigned `.app`/`.pkg` build.
|
|
96
|
+
- Real native 1120×787 window creation, visible-on-reveal menu-bar item, menu
|
|
97
|
+
Start, window close with continued monitoring, reopen with the same timeline,
|
|
98
|
+
Stop, restart, and monitoring-state Quit with zero remaining Forkit process or
|
|
99
|
+
loopback listener on this Mac.
|
|
100
|
+
- Accessibility evidence placed the retained 24×24 status item at `y=-59` while
|
|
101
|
+
macOS auto-hid the menu bar and at `y=3` after revealing the bar. Its help text
|
|
102
|
+
was “Forkit AI Footprint” and its complete localized menu was exposed.
|
|
103
|
+
- Real-browser QA in English and German for the local monitor, Guess → Reveal,
|
|
104
|
+
correct GB/GiB labels, deterministic captions, 1080×1080 PNG export, image
|
|
105
|
+
clipboard/share payloads, and the one-page Forkit.dev installation/global page.
|
|
106
|
+
- Forkit.dev production website build and registry AI Footprints route tests.
|
|
107
|
+
|
|
108
|
+
## Intentionally not enabled or not yet field-validated
|
|
109
|
+
|
|
110
|
+
- No upload, verified global contribution, public ranking, account, registry
|
|
111
|
+
write, passport, Mint, Runtime_C2 write, telemetry, or production deployment.
|
|
112
|
+
- No Homebrew tap, signed direct download, or click installer.
|
|
113
|
+
- No Developer ID signature, notarization, stapling, Gatekeeper distribution
|
|
114
|
+
test, or clean external-Mac installation test.
|
|
115
|
+
- No representative multi-device macOS field-accuracy result and no Intel Mac
|
|
116
|
+
release claim.
|
|
117
|
+
- App Attest reports unsupported on this macOS 26 device, so this Mac cannot
|
|
118
|
+
produce a verified global contribution under the proposed proof policy.
|
|
119
|
+
- No prompt, task, token, energy, cost, GPU, disk-I/O, or per-process network
|
|
120
|
+
attribution.
|
|
121
|
+
|
|
122
|
+
## Accuracy boundary
|
|
123
|
+
|
|
124
|
+
The detector is deliberately conservative. Exact executable/module/package
|
|
125
|
+
runner matches and verified runtime identities are strong implementation rules,
|
|
126
|
+
but one real Mac and a curated fixture corpus cannot establish a global
|
|
127
|
+
precision/recall percentage. Model storage is exact only for recognized files
|
|
128
|
+
inside supported roots when `storage_complete=true`; it is not whole-disk AI
|
|
129
|
+
storage or APFS physical allocation. **Working now** means sustained recent CPU
|
|
130
|
+
time in a supported process tree and nothing more.
|
|
131
|
+
|
|
132
|
+
## Smallest release gate
|
|
133
|
+
|
|
134
|
+
Future expansion requires representative multi-device field accuracy, Intel Mac
|
|
135
|
+
validation, and Apple signing/notarization. Global contribution remains closed
|
|
136
|
+
until its separate server-side verification and abuse-control gate passes.
|
package/dist/agents.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CensusAgent, Confidence, ProcessEntry } from './types';
|
|
2
|
+
export interface ClassifiedAgentProcess {
|
|
3
|
+
pid: number;
|
|
4
|
+
ppid: number | null;
|
|
5
|
+
signature: string;
|
|
6
|
+
name: string;
|
|
7
|
+
kind: string;
|
|
8
|
+
confidence: Confidence;
|
|
9
|
+
relationship: 'direct' | 'descendant';
|
|
10
|
+
cpu_percent: number | null;
|
|
11
|
+
memory_percent: number | null;
|
|
12
|
+
cpu_time_ms: number | null;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Builds private process-tree evidence for the activity monitor. PIDs and raw
|
|
16
|
+
* commands remain internal and are deliberately absent from public reports.
|
|
17
|
+
*/
|
|
18
|
+
export declare function classifyAgentProcessTrees(processes: ProcessEntry[], excludedRootPid?: number | null): ClassifiedAgentProcess[];
|
|
19
|
+
export declare function parseMacosCpuTime(value: string): number | null;
|
|
20
|
+
export declare function detectAgentProducts(processes: ProcessEntry[]): CensusAgent[];
|
|
21
|
+
export declare function listSystemProcesses(): Promise<ProcessEntry[]>;
|
|
22
|
+
//# sourceMappingURL=agents.d.ts.map
|