forkit-ai-footprints 0.2.0 → 0.2.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/PRIVACY.md +44 -18
- package/README.md +42 -41
- package/STATUS.md +70 -31
- package/dist/activity-page.d.ts +13 -0
- package/dist/activity-page.js +104 -0
- package/dist/activity-view-model.d.ts +150 -0
- package/dist/activity-view-model.js +358 -0
- package/dist/agents.d.ts +2 -0
- package/dist/agents.js +108 -6
- package/dist/bootstrap/.metadata_never_index +0 -0
- package/dist/bootstrap/Forkit AI Footprint.app.zip +0 -0
- package/dist/cli.js +86 -10
- package/dist/device-presence.d.ts +17 -0
- package/dist/device-presence.js +64 -0
- package/dist/insights.d.ts +1 -1
- package/dist/insights.js +10 -8
- package/dist/local-observation-state.d.ts +42 -0
- package/dist/local-observation-state.js +113 -0
- package/dist/locales.json +556 -106
- package/dist/localization.d.ts +556 -106
- package/dist/localization.js +40 -30
- package/dist/monitor.d.ts +33 -2
- package/dist/monitor.js +183 -11
- package/dist/runtime-activity.d.ts +4 -1
- package/dist/runtime-activity.js +21 -5
- package/dist/server.d.ts +3 -0
- package/dist/server.js +112 -16
- package/dist/share-page.d.ts +2 -1
- package/dist/share-page.js +16 -52
- package/dist/sharing.d.ts +12 -1
- package/dist/sharing.js +59 -1
- package/dist/types.d.ts +1 -1
- package/dist/workflow-context.d.ts +13 -0
- package/dist/workflow-context.js +144 -0
- package/docs/GLOBAL_DISTRIBUTION.md +7 -3
- package/docs/MACOS_ACCURACY_GATE.md +3 -3
- package/docs/MACOS_TESTER_GUIDE.md +8 -8
- package/package.json +6 -6
- package/release/channels.json +4 -4
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Info.plist +0 -5
- 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 +0 -22
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/agents.js +0 -281
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/aggregate.d.ts +0 -28
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/aggregate.js +0 -151
- 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 +0 -3
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/census.js +0 -196
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/cli.d.ts +0 -32
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/cli.js +0 -404
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/doctor.d.ts +0 -14
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/doctor.js +0 -71
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/endpoints.d.ts +0 -8
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/endpoints.js +0 -45
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/evaluate.d.ts +0 -44
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/evaluate.js +0 -102
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/filesystem.d.ts +0 -11
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/filesystem.js +0 -226
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/format.d.ts +0 -7
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/format.js +0 -78
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/hash.d.ts +0 -4
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/hash.js +0 -16
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/index.d.ts +0 -22
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/index.js +0 -58
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/insights.d.ts +0 -13
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/insights.js +0 -76
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/local-device.d.ts +0 -19
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/local-device.js +0 -81
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/locales.json +0 -272
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/localization.d.ts +0 -277
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/localization.js +0 -55
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/mcp.d.ts +0 -9
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/mcp.js +0 -93
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/monitor.d.ts +0 -99
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/monitor.js +0 -285
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/base.d.ts +0 -34
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/base.js +0 -88
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/index.d.ts +0 -6
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/index.js +0 -24
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/lmstudio.d.ts +0 -9
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/lmstudio.js +0 -71
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/ollama.d.ts +0 -12
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/ollama.js +0 -171
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/openai-compatible.d.ts +0 -10
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/openai-compatible.js +0 -68
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/resource-evidence.d.ts +0 -17
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/resource-evidence.js +0 -52
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/runtime-activity.d.ts +0 -5
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/runtime-activity.js +0 -66
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/runtime-identity.d.ts +0 -7
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/runtime-identity.js +0 -66
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/server.d.ts +0 -21
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/server.js +0 -308
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/share-page.d.ts +0 -75
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/share-page.js +0 -167
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/sharing.d.ts +0 -35
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/sharing.js +0 -67
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/tools.d.ts +0 -9
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/tools.js +0 -106
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/types.d.ts +0 -166
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/types.js +0 -3
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/version.d.ts +0 -4
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/version.js +0 -13
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/node_modules/ps-list/index.d.ts +0 -76
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/node_modules/ps-list/index.js +0 -366
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/node_modules/ps-list/license +0 -9
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/node_modules/ps-list/package.json +0 -44
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/node_modules/ps-list/readme.md +0 -56
- 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 +0 -6
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/runtime/node +0 -0
- package/dist/bootstrap/Forkit AI Footprint.app/Contents/_CodeSignature/CodeResources +0 -931
package/PRIVACY.md
CHANGED
|
@@ -11,8 +11,12 @@ Forkit AI Footprints (`forkit-ai-footprints`) is metadata-only by design.
|
|
|
11
11
|
executable, module, or package-runner evidence; raw commands are not included
|
|
12
12
|
in the report or in the evidence hash;
|
|
13
13
|
- cumulative CPU time, current CPU percentage, and resident memory for supported
|
|
14
|
-
process trees, held locally for repeated activity classification
|
|
15
|
-
entries are never
|
|
14
|
+
process trees, held locally for repeated activity classification and bounded
|
|
15
|
+
aggregate per-app resource-history buckets; raw process entries are never
|
|
16
|
+
exported;
|
|
17
|
+
- the macOS console-lock flag and aggregate HID idle duration, used only to
|
|
18
|
+
pause observation while the device is locked or has not recently been used;
|
|
19
|
+
no keys, pointer movements, or input content are recorded;
|
|
16
20
|
- directory entries and file metadata for supported model extensions;
|
|
17
21
|
- loopback runtime API responses from explicitly supported local endpoints.
|
|
18
22
|
- known AI-tool installation/configuration path existence;
|
|
@@ -21,7 +25,9 @@ Forkit AI Footprints (`forkit-ai-footprints`) is metadata-only by design.
|
|
|
21
25
|
supported active tool product name, while model names and all item names are
|
|
22
26
|
excluded from saved HTML and anonymous/global payloads;
|
|
23
27
|
- optional chat/workspace labels supplied explicitly by a cooperating app for
|
|
24
|
-
local display only;
|
|
28
|
+
local display only; for Codex, the most recent local catalog display title,
|
|
29
|
+
recency, and project path may be read, with only the project folder basename
|
|
30
|
+
retained in memory;
|
|
25
31
|
- macOS major version, CPU architecture, and Node major in aggregate field-test
|
|
26
32
|
results;
|
|
27
33
|
- aggregate counts, exact recognized model-file bytes, architecture, Node major, product version,
|
|
@@ -31,7 +37,7 @@ Forkit AI Footprints (`forkit-ai-footprints`) is metadata-only by design.
|
|
|
31
37
|
|
|
32
38
|
## Prohibited collection or export
|
|
33
39
|
|
|
34
|
-
|
|
40
|
+
AI Footprints must not retain or emit:
|
|
35
41
|
|
|
36
42
|
- raw process commands;
|
|
37
43
|
- process IDs;
|
|
@@ -39,7 +45,7 @@ Census must not retain or emit:
|
|
|
39
45
|
- full filesystem paths;
|
|
40
46
|
- prompts, responses, terminal logs, or source-code content;
|
|
41
47
|
- credentials, cookies, tokens, API keys, or passwords;
|
|
42
|
-
- hostname or Mac display name in
|
|
48
|
+
- hostname or Mac display name in AI Footprints reports, saved share pages, anonymous
|
|
43
49
|
contributions, or global payloads; username, email, and Forkit.dev account
|
|
44
50
|
identity are prohibited everywhere.
|
|
45
51
|
- MCP server names, commands, URLs, environment keys, or environment values;
|
|
@@ -48,21 +54,23 @@ Census must not retain or emit:
|
|
|
48
54
|
|
|
49
55
|
## Network boundary
|
|
50
56
|
|
|
51
|
-
|
|
57
|
+
AI Footprints may call HTTP(S) endpoints only when the hostname is one of:
|
|
52
58
|
|
|
53
59
|
- `localhost`
|
|
54
60
|
- `127.0.0.1`
|
|
55
61
|
- `::1`
|
|
56
62
|
|
|
57
63
|
Remote endpoints and endpoints containing embedded credentials are rejected.
|
|
58
|
-
|
|
64
|
+
AI Footprints contains no Forkit.dev login, registry-write, passport-publish,
|
|
59
65
|
Runtime_C2-write, billing, telemetry-upload, or deployment client.
|
|
60
66
|
|
|
61
67
|
`forkit-ai-footprints serve` binds only to `127.0.0.1`. Its rescan route
|
|
62
68
|
requires the same page origin and a random in-memory session token. The route
|
|
63
69
|
may return local runtime, model, AI-app, and AI-tool display names to that
|
|
64
70
|
protected local page. It never returns full paths, raw commands, endpoints,
|
|
65
|
-
configuration values, prompts,
|
|
71
|
+
configuration values, prompts, or account data. A supported app's recent local
|
|
72
|
+
workflow title and project folder basename may appear only in this protected
|
|
73
|
+
local page and are never written to a report or share/global artifact.
|
|
66
74
|
The numeric guess is compared inside the browser and is not submitted to the
|
|
67
75
|
local server. Start, Stop, Clear history, Scan again, and contribution preview
|
|
68
76
|
all require the same-origin random session token. Closing a browser or native
|
|
@@ -71,11 +79,14 @@ window does not stop monitoring; native Quit stops the monitor and local service
|
|
|
71
79
|
The interactive app keeps `device-journal.json` under the user's macOS
|
|
72
80
|
Application Support directory with directory mode `0700` and file mode `0600`.
|
|
73
81
|
It contains only the sanitized Mac display name, first/last scan timestamps, and
|
|
74
|
-
scan count. It is never placed in the
|
|
82
|
+
scan count. It is never placed in the AI Footprints report, rescan snapshot, share
|
|
75
83
|
image, saved share page, or anonymous/global contribution. The local monitor
|
|
76
84
|
stream is same-origin and session-token protected. Sampling runs at a one-second
|
|
77
85
|
target interval; durations exclude stopped time and gaps longer than three
|
|
78
|
-
intervals.
|
|
86
|
+
intervals. Observation also pauses while macOS is locked or after 60 seconds
|
|
87
|
+
without user input, and resumes with a new continuous activity block. The lock
|
|
88
|
+
and idle signals remain local and are excluded from reports, share artifacts,
|
|
89
|
+
and global aggregates. The stream makes no external request.
|
|
79
90
|
|
|
80
91
|
The packaged app uses a native launcher to query Apple DeviceCheck capability.
|
|
81
92
|
The status check makes no network request and writes no key. On a future
|
|
@@ -84,11 +95,17 @@ generate one App Attest key and store only its opaque key identifier in the
|
|
|
84
95
|
device-only Keychain. The current UI and CLI do not invoke enrollment,
|
|
85
96
|
attestation, assertion generation, or upload.
|
|
86
97
|
|
|
98
|
+
On first launch, the native app asks whether aggregate measurements may be
|
|
99
|
+
prepared for global comparison. The answer is stored locally in macOS user
|
|
100
|
+
defaults as two booleans (asked and allowed). It is not a device identifier and
|
|
101
|
+
is never transmitted. A user who chose “Not now” can reopen the same permission
|
|
102
|
+
from the comparison view.
|
|
103
|
+
|
|
87
104
|
## Filesystem identity
|
|
88
105
|
|
|
89
106
|
Filesystem model identity is derived from metadata such as relative location,
|
|
90
107
|
name, size, and modification time. The absolute path participates only inside a
|
|
91
|
-
local one-way root fingerprint helper and is not included in
|
|
108
|
+
local one-way root fingerprint helper and is not included in an AI Footprints report.
|
|
92
109
|
Model bytes are never read for hashing.
|
|
93
110
|
|
|
94
111
|
## Model storage measurement
|
|
@@ -106,10 +123,15 @@ and unsupported model locations can make actual disk blocks differ.
|
|
|
106
123
|
**Working now** requires sustained cumulative CPU-time deltas across repeated
|
|
107
124
|
samples of a supported process tree. Two positive samples enter working and
|
|
108
125
|
three negative samples exit it. Process presence alone remains **Open / idle**.
|
|
109
|
-
This is still not exclusive per-prompt proof.
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
and
|
|
126
|
+
This is still not exclusive per-prompt proof. Supported AI-app CPU/RAM history
|
|
127
|
+
is retained only as bounded local aggregate buckets by app signature/name,
|
|
128
|
+
observed time, active time, average/peak CPU, average/peak memory, peak process
|
|
129
|
+
count, and sample count. It excludes raw process rows, process IDs, commands,
|
|
130
|
+
paths, prompts, responses, and account identity, and it is not included in the
|
|
131
|
+
anonymous/global payload. Forkit's own process tree is excluded from AI activity
|
|
132
|
+
and measured separately for CPU, RAM, and bounded history overhead. Static
|
|
133
|
+
hardware metadata describes capability, not use. GPU and per-process network
|
|
134
|
+
attribution remain unavailable; no estimate is used.
|
|
113
135
|
|
|
114
136
|
## Review rule
|
|
115
137
|
|
|
@@ -119,11 +141,12 @@ used as automatic evidence of ownership, safety, provenance, or passport status.
|
|
|
119
141
|
## Anonymous contribution boundary
|
|
120
142
|
|
|
121
143
|
The local app can create an allowlisted schema `2.0` preview only after at least
|
|
122
|
-
600 valid observed seconds.
|
|
144
|
+
3,600 valid observed seconds. First-launch permission and exact payload review are
|
|
145
|
+
separate actions. The preview
|
|
123
146
|
contains valid seconds, AI-active seconds, activity ratio, supported app count
|
|
124
147
|
and categories, model/loaded/runtime counts, recognized model-file bytes,
|
|
125
148
|
macOS major, architecture, and scanner/runtime schema versions. It excludes
|
|
126
|
-
names, process counts, CPU/RAM values, guess, device identity, local
|
|
149
|
+
names, process counts, CPU/RAM values, guess, device identity, local scan ID,
|
|
127
150
|
timestamps, and all item-level records. The CLI and app still have no uploader. A
|
|
128
151
|
separate Forkit.dev aggregate endpoint candidate exists with contribution writes
|
|
129
152
|
disabled by default. That candidate now fails closed without Apple App Attest
|
|
@@ -136,7 +159,7 @@ either remains a founder/security release gate.
|
|
|
136
159
|
`forkit-ai-footprints share-page --output ...` saves a self-contained HTML result only
|
|
137
160
|
after the user supplies an output path. The page contains aggregate counts and
|
|
138
161
|
limitations, not item names, paths, commands, endpoints, configuration values,
|
|
139
|
-
account identity, or the local
|
|
162
|
+
account identity, or the local scan ID. It loads no external assets and makes
|
|
140
163
|
no automatic network requests. Its copy/share controls act only after a user
|
|
141
164
|
click and use aggregate text.
|
|
142
165
|
|
|
@@ -148,3 +171,6 @@ process counts, device/account identifiers, workspace/chat titles, or external
|
|
|
148
171
|
assets.
|
|
149
172
|
Downloading it or opening the operating system share sheet requires a separate
|
|
150
173
|
user click; AI Footprints does not receive the image.
|
|
174
|
+
Inside the native macOS app, Save PNG, Copy Image, Copy Caption, and Share use a
|
|
175
|
+
loopback-page-to-AppKit bridge restricted to the current local service port. The
|
|
176
|
+
bridge accepts only a validated 1080×1080 PNG and a bounded aggregate caption.
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Forkit AI Footprints is a private, metadata-only view of the models, runtimes,
|
|
4
4
|
and AI agents present on a Mac. The prepared package and command are
|
|
5
|
-
`forkit-ai-footprints
|
|
5
|
+
`forkit-ai-footprints`.
|
|
6
6
|
|
|
7
7
|
It is derived from the discovery lessons in Forkit Connect, but it has a
|
|
8
8
|
different safety boundary: AI Footprints does not authenticate to Forkit.dev and has
|
|
@@ -54,11 +54,11 @@ Requirements:
|
|
|
54
54
|
- npm
|
|
55
55
|
|
|
56
56
|
```bash
|
|
57
|
-
git clone https://github.com/arpitasarker01/forkit-
|
|
58
|
-
cd forkit-
|
|
57
|
+
git clone https://github.com/arpitasarker01/forkit-ai-footprints.git
|
|
58
|
+
cd forkit-ai-footprints
|
|
59
59
|
npm ci
|
|
60
60
|
npm pack
|
|
61
|
-
npm install -g ./forkit-ai-footprints-0.2.
|
|
61
|
+
npm install -g ./forkit-ai-footprints-0.2.1.tgz
|
|
62
62
|
forkit-ai-footprints serve
|
|
63
63
|
```
|
|
64
64
|
|
|
@@ -114,43 +114,50 @@ claims disabled. See [`docs/MACOS_TESTER_GUIDE.md`](./docs/MACOS_TESTER_GUIDE.md
|
|
|
114
114
|
`share-page` performs the same local scan and writes a self-contained,
|
|
115
115
|
aggregate-only HTML snapshot. It loads no external assets and contains no model
|
|
116
116
|
names, paths, commands, endpoints, configuration values, account identity, or
|
|
117
|
-
|
|
117
|
+
local scan ID. Its copy/share controls include only the visible aggregate summary
|
|
118
118
|
and run only after a user click.
|
|
119
119
|
|
|
120
120
|
`serve` binds only to `127.0.0.1`, keeps the report and monitor in memory, and
|
|
121
|
-
opens the AI activity →
|
|
121
|
+
opens the local AI-app activity → Insights → Global vision → Share experience. `Scan again` calls a random-token-protected local
|
|
122
122
|
endpoint. The protected local page can name detected runtimes, models, AI apps,
|
|
123
123
|
and tools. The explicitly created local share image may include the supported
|
|
124
124
|
active tool product name; saved HTML and anonymous/global payloads remain
|
|
125
125
|
aggregate-only.
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
does not stop it, while native Quit stops the monitor and loopback service.
|
|
126
|
+
Start/Stop controls monitoring explicitly; browser/window closure does not stop
|
|
127
|
+
it, while native Quit stops the monitor and loopback service.
|
|
129
128
|
|
|
130
129
|
The local app also keeps an owner-only device journal containing the sanitized
|
|
131
130
|
Mac display name, first/last scan timestamps, and scan count. This lets the Mac
|
|
132
131
|
resume its local state without placing the device name in a report, saved share
|
|
133
132
|
page, image, anonymous preview, or website payload. The single result view uses
|
|
134
133
|
a token-protected local stream with a one-second target interval. Repeated
|
|
135
|
-
cumulative CPU-time deltas and hysteresis distinguish
|
|
136
|
-
|
|
134
|
+
cumulative CPU-time deltas and hysteresis distinguish Active now from Ready;
|
|
135
|
+
process presence alone is never activity. It is near-real-time, not zero delay.
|
|
136
|
+
|
|
137
|
+
For Codex, the local view can also show the most recent workflow title and the
|
|
138
|
+
final folder name from Codex's private local catalog. This is contextual local
|
|
139
|
+
metadata, not prompt inspection or per-workflow resource attribution. It never
|
|
140
|
+
enters the share image, caption, saved share page, or global payload.
|
|
137
141
|
|
|
138
142
|
The revealed resource view reports deduplicated recognized logical model-file
|
|
139
|
-
bytes
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
143
|
+
bytes, provider-native loaded-model evidence, current supported-process CPU/RAM,
|
|
144
|
+
and bounded per-AI-app aggregate CPU/RAM history buckets retained locally for the
|
|
145
|
+
observation. The activity view uses private process-tree CPU-time deltas and
|
|
146
|
+
separately displays Forkit's measured CPU, resident memory, and bounded-history
|
|
147
|
+
overhead. None is an energy, token, cost, prompt, task, or lifetime-usage
|
|
148
|
+
measurement.
|
|
149
|
+
|
|
150
|
+
AI Footprints does not claim prompt, task, or local-model inference ownership.
|
|
151
|
+
**Active now** means sustained recent CPU time inside a supported local AI-app
|
|
152
|
+
process tree, which may be foreground or background. The result does not
|
|
153
|
+
measure GPU, energy, tokens, cost, disk I/O, or per-process network usage.
|
|
154
|
+
|
|
155
|
+
`Create share card` renders a 1080×1080 (1:1) PNG entirely on the device. Its
|
|
156
|
+
result-based line and cards use measured local insights,
|
|
151
157
|
model-record count, recognized model storage, activity ratio, and the supported
|
|
152
|
-
active tool product name.
|
|
153
|
-
|
|
158
|
+
active tool product name. Browser controls download or copy it; the installed
|
|
159
|
+
app uses native macOS save, clipboard, and share-sheet actions after an explicit
|
|
160
|
+
click. No model names, chat/workspace
|
|
154
161
|
context, paths, device identity, or scan records are placed in the image or
|
|
155
162
|
uploaded by AI Footprints.
|
|
156
163
|
|
|
@@ -178,26 +185,20 @@ forkit-ai-footprints scan --no-mcp
|
|
|
178
185
|
```
|
|
179
186
|
|
|
180
187
|
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
|
-
|
|
188
|
+
an exact schema `2.0` aggregate preview only after 3,600 valid observed seconds;
|
|
189
|
+
the installed app asks once on first launch whether aggregate comparison is
|
|
190
|
+
allowed, and no upload transport exists. The
|
|
183
191
|
payload excludes app/model names, process counts, CPU/RAM, chat, workspace,
|
|
184
|
-
repository, device, guess,
|
|
192
|
+
repository, device, guess, local scan, and account identifiers.
|
|
185
193
|
|
|
186
194
|
## Shared core API
|
|
187
195
|
|
|
188
|
-
Forkit Connect should delegate to
|
|
189
|
-
than copy its detector implementation
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
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.
|
|
196
|
+
Forkit Connect should delegate to this package's public, read-only core rather
|
|
197
|
+
than copy its detector implementation. The package root exports the local scan
|
|
198
|
+
runner, individual metadata detectors, formatters, provider adapters, endpoint
|
|
199
|
+
validation, anonymous-preview builder, and TypeScript types. A fresh-install
|
|
200
|
+
smoke test imports the package root and verifies that an all-disabled core scan
|
|
201
|
+
makes zero external requests and writes no local state.
|
|
201
202
|
|
|
202
203
|
## What AI Footprints reports
|
|
203
204
|
|
package/STATUS.md
CHANGED
|
@@ -1,45 +1,75 @@
|
|
|
1
1
|
# Forkit AI Footprints Status
|
|
2
2
|
|
|
3
|
-
Last updated: 2026-08-
|
|
3
|
+
Last updated: 2026-08-27
|
|
4
4
|
|
|
5
|
-
Version: `0.2.
|
|
5
|
+
Version: `0.2.1`
|
|
6
6
|
|
|
7
7
|
Production classification: `current` for Apple Silicon macOS
|
|
8
8
|
|
|
9
|
-
Release state:
|
|
9
|
+
Release state: local v0.2.1 npm-first release candidate. The npm
|
|
10
10
|
bootstrap installs a persistent unsigned local app; Developer ID signing and
|
|
11
11
|
notarization remain future work.
|
|
12
12
|
|
|
13
13
|
## What is implemented
|
|
14
14
|
|
|
15
|
-
- One local experience: AI activity first,
|
|
16
|
-
|
|
15
|
+
- One local experience: local AI-app activity first, deterministic personal
|
|
16
|
+
insights, a user-initiated link to the Forkit global vision, a square aggregate
|
|
17
|
+
share card, Scan again, and technical details. The link sends no observation
|
|
18
|
+
payload.
|
|
19
|
+
- The protected local view names the current device and observation number,
|
|
20
|
+
keeps the activity explorer on the left, and uses the right observation rail
|
|
21
|
+
for pulse evidence, deterministic insights, runtime totals, live CPU/RAM,
|
|
22
|
+
retained local aggregate resource history, recognized model space, verified
|
|
23
|
+
local runtimes, and per-app filtering. GPU and per-app disk use remain
|
|
24
|
+
explicitly unavailable rather than estimated.
|
|
25
|
+
- Four compact observation controls on the right switch the left explorer
|
|
26
|
+
between pulse, runtime, resources, and per-app evidence. Hover text explains
|
|
27
|
+
each control; selecting a pulse shows its exact local date/time, duration and
|
|
28
|
+
state, while selecting an app filters the timeline and shows that app's
|
|
29
|
+
measured runtime, contribution, first/last observation, current CPU/RAM, and
|
|
30
|
+
retained local aggregate resource-history summary when available.
|
|
31
|
+
- The app shell uses responsive text sizing so labels, values, controls,
|
|
32
|
+
timeline blocks, inspector cards, and detail rows scale with available window
|
|
33
|
+
width instead of staying at tiny fixed pixel sizes.
|
|
17
34
|
- Explicit Start/Stop Monitoring with repeated one-second macOS process-tree
|
|
18
35
|
sampling, cumulative CPU-time deltas, two-sample entry and three-sample exit
|
|
19
|
-
hysteresis, and sleep-gap exclusion.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
36
|
+
hysteresis, and sleep-gap exclusion. Observation pauses while macOS is locked
|
|
37
|
+
or after 60 seconds without user input; every invalid interval starts a new
|
|
38
|
+
continuous activity block when valid observation resumes.
|
|
39
|
+
- Clear states: **Active now**, **Ready**, **Monitoring**, and **Stopped**.
|
|
40
|
+
Process presence alone never becomes active activity.
|
|
41
|
+
- Durations retain seconds at every scale, including observations longer than
|
|
42
|
+
one hour.
|
|
43
|
+
- One to three deterministic insights from valid measured time: local AI-app
|
|
44
|
+
activity share, longest continuous active block, supported-tool workflow,
|
|
45
|
+
mostly-idle state, and stored local model records. Stop/restart boundaries
|
|
46
|
+
cannot inflate the longest block.
|
|
26
47
|
- The monitor is owned by the local service, not a browser tab. Closing the
|
|
27
48
|
window does not end a session; stopping preserves the summary; clearing is a
|
|
28
49
|
separate explicit action.
|
|
29
50
|
- A persistent native AppKit/WebKit app installed into the current user's
|
|
30
51
|
Applications folder by a one-time npm bootstrap. Later launches use normal
|
|
31
52
|
macOS surfaces and do not require Terminal.
|
|
53
|
+
- A one-time native first-launch permission for aggregate global comparison,
|
|
54
|
+
stored only in macOS user defaults. The in-app global action opens the public
|
|
55
|
+
Forkit AI Footprint global vision section after the observation gate and does
|
|
56
|
+
not transmit the local result.
|
|
32
57
|
- A native AppKit/WebKit window and retained menu-bar controller with Open,
|
|
33
58
|
Start/Stop, and Quit actions. Closing hides the window without quitting; Quit
|
|
34
59
|
stops the service and has a process-exit fallback so the bundled Node service
|
|
35
60
|
cannot remain orphaned.
|
|
36
61
|
- One English/German localization source drives the app, deterministic insights,
|
|
37
62
|
share caption, menu-bar menu, and close/quit notices.
|
|
38
|
-
- Local-only optional
|
|
39
|
-
|
|
40
|
-
|
|
63
|
+
- Local-only optional workflow/project display. Cooperating apps may explicitly
|
|
64
|
+
supply it; Codex can also use its most recent private local catalog title and
|
|
65
|
+
project folder basename. No window-title, prompt, response, or command-text
|
|
66
|
+
inspection is attempted, and the context never enters share/global artifacts.
|
|
41
67
|
- Forkit's own process tree is excluded from detected AI activity. Its CPU,
|
|
42
68
|
RAM, and bounded-history overhead are measured and labelled separately.
|
|
69
|
+
- Supported AI-app resource history is retained locally only as bounded aggregate
|
|
70
|
+
per-app buckets: observed/active seconds, average/peak CPU, average/peak RAM,
|
|
71
|
+
peak process count, and sample count. It is not prompt/task attribution and is
|
|
72
|
+
excluded from share/global payloads.
|
|
43
73
|
- Exact recognized logical model-file bytes for supported roots, with hard-link,
|
|
44
74
|
symlink, overlapping-root, Hugging Face snapshot, and Ollama content-addressed
|
|
45
75
|
deduplication.
|
|
@@ -48,7 +78,7 @@ notarization remain future work.
|
|
|
48
78
|
valid `/api/ps` response.
|
|
49
79
|
- A schema `2.0` candidate global aggregate based on valid observed seconds and
|
|
50
80
|
AI-active seconds. It excludes names, process counts, paths, commands, chat,
|
|
51
|
-
workspace, device identity, guess, and
|
|
81
|
+
workspace, device identity, guess, and local scan ID. Review and consent are
|
|
52
82
|
separate; upload transport remains disabled.
|
|
53
83
|
- A 1080×1080 local share card with Share, Save PNG, Copy Image, and Copy
|
|
54
84
|
Caption controls. It contains only measured totals and supported tool names.
|
|
@@ -77,19 +107,23 @@ notarization remain future work.
|
|
|
77
107
|
p95 CPU**, about **53.3 MB current RAM**, **117.1 MB maximum RAM**, and **627
|
|
78
108
|
bytes** of bounded serialized history at the final payload sample.
|
|
79
109
|
- A final source-identical bundled-app observation reached **63.3 seconds** of
|
|
80
|
-
valid time and **62.1 seconds** AI-active (ratio **0.981**)
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
preview
|
|
110
|
+
valid time and **62.1 seconds** AI-active (ratio **0.981**). The deterministic
|
|
111
|
+
evidence reports the supported app activity share, longest continuous signal,
|
|
112
|
+
and stored local model records without attributing prompts or tasks.
|
|
113
|
+
- A separate earlier real session crossed the previous 10-minute gate at exactly
|
|
114
|
+
**600 valid seconds** and **598 AI-active seconds**. The current global
|
|
115
|
+
comparison candidate now requires **3,600 valid seconds** before the local
|
|
116
|
+
preview becomes available; no transport is enabled.
|
|
87
117
|
|
|
88
118
|
## Validation completed locally
|
|
89
119
|
|
|
90
|
-
- TypeScript build and the complete local test suite.
|
|
91
|
-
-
|
|
92
|
-
|
|
120
|
+
- TypeScript build and the complete local test suite: **119/119** tests passed.
|
|
121
|
+
- Deterministic active → idle/locked → resumed lifecycle coverage confirms that
|
|
122
|
+
paused time changes neither observed nor AI-active seconds and cannot bridge
|
|
123
|
+
the longest continuous activity block.
|
|
124
|
+
- Curated agent detector corpus: **68/68** fixtures, 30 positive and 38 negative,
|
|
125
|
+
with zero fixture errors and fixture precision/recall/accuracy of 1.0. This is
|
|
126
|
+
conformance evidence, not field accuracy.
|
|
93
127
|
- Isolated packed-package installation/import/CLI smoke.
|
|
94
128
|
- Native Swift compilation, bundled CLI/version smoke, bundled official Node
|
|
95
129
|
checksum, App Attest capability probe, and unsigned `.app`/`.pkg` build.
|
|
@@ -100,9 +134,10 @@ notarization remain future work.
|
|
|
100
134
|
- Accessibility evidence placed the retained 24×24 status item at `y=-59` while
|
|
101
135
|
macOS auto-hid the menu bar and at `y=3` after revealing the bar. Its help text
|
|
102
136
|
was “Forkit AI Footprint” and its complete localized menu was exposed.
|
|
103
|
-
- Real-browser QA in English and German for the
|
|
104
|
-
|
|
105
|
-
|
|
137
|
+
- Real-browser QA in English and German for the Activity Explorer, interval
|
|
138
|
+
evidence, reconnect persistence, stable system colors, correct GB/GiB labels,
|
|
139
|
+
deterministic captions, 1080×1080 PNG export, image clipboard/share payloads,
|
|
140
|
+
and the one-page Forkit.dev installation/global page.
|
|
106
141
|
- Forkit.dev production website build and registry AI Footprints route tests.
|
|
107
142
|
|
|
108
143
|
## Intentionally not enabled or not yet field-validated
|
|
@@ -114,6 +149,9 @@ notarization remain future work.
|
|
|
114
149
|
test, or clean external-Mac installation test.
|
|
115
150
|
- No representative multi-device macOS field-accuracy result and no Intel Mac
|
|
116
151
|
release claim.
|
|
152
|
+
- The live Mac reproduced the HID-idle paused state while monitoring remained
|
|
153
|
+
active. The saved scorecard, timeline, insights, and stable system colors
|
|
154
|
+
remained visible and unchanged through the paused state and reconnect.
|
|
117
155
|
- App Attest reports unsupported on this macOS 26 device, so this Mac cannot
|
|
118
156
|
produce a verified global contribution under the proposed proof policy.
|
|
119
157
|
- No prompt, task, token, energy, cost, GPU, disk-I/O, or per-process network
|
|
@@ -126,8 +164,9 @@ runner matches and verified runtime identities are strong implementation rules,
|
|
|
126
164
|
but one real Mac and a curated fixture corpus cannot establish a global
|
|
127
165
|
precision/recall percentage. Model storage is exact only for recognized files
|
|
128
166
|
inside supported roots when `storage_complete=true`; it is not whole-disk AI
|
|
129
|
-
storage or APFS physical allocation. **
|
|
130
|
-
time in a supported process tree and nothing more
|
|
167
|
+
storage or APFS physical allocation. **Active now** means sustained recent CPU
|
|
168
|
+
time in a supported local AI-app process tree and nothing more; it does not
|
|
169
|
+
claim that a cloud model is running locally.
|
|
131
170
|
|
|
132
171
|
## Smallest release gate
|
|
133
172
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AiFootprintPageOptions, CensusShareSnapshot, LocalScanView } from './share-page';
|
|
2
|
+
import { type UiLocale } from './localization';
|
|
3
|
+
export interface ActivityApplicationPageInput {
|
|
4
|
+
locale: UiLocale;
|
|
5
|
+
snapshot: CensusShareSnapshot;
|
|
6
|
+
view: LocalScanView | null;
|
|
7
|
+
rescan: AiFootprintPageOptions['rescan'];
|
|
8
|
+
device: string;
|
|
9
|
+
brand: string;
|
|
10
|
+
shareLogo: string | null;
|
|
11
|
+
}
|
|
12
|
+
export declare function renderActivityApplicationPage(input: ActivityApplicationPageInput): string;
|
|
13
|
+
//# sourceMappingURL=activity-page.d.ts.map
|