forkit-ai-footprints 0.2.1 → 0.2.5

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 CHANGED
@@ -59,10 +59,13 @@ AI Footprints may call HTTP(S) endpoints only when the hostname is one of:
59
59
  - `localhost`
60
60
  - `127.0.0.1`
61
61
  - `::1`
62
+ - `www.forkit.dev`, limited to `/api/v1/ai-footprints/challenges` and
63
+ `/api/v1/ai-footprints/contributions` after explicit Preview consent and the
64
+ one-hour eligibility gate.
62
65
 
63
- Remote endpoints and endpoints containing embedded credentials are rejected.
66
+ Other remote endpoints and endpoints containing embedded credentials are rejected.
64
67
  AI Footprints contains no Forkit.dev login, registry-write, passport-publish,
65
- Runtime_C2-write, billing, telemetry-upload, or deployment client.
68
+ Runtime_C2-write, billing, general telemetry, or deployment client.
66
69
 
67
70
  `forkit-ai-footprints serve` binds only to `127.0.0.1`. Its rescan route
68
71
  requires the same page origin and a random in-memory session token. The route
@@ -95,11 +98,11 @@ generate one App Attest key and store only its opaque key identifier in the
95
98
  device-only Keychain. The current UI and CLI do not invoke enrollment,
96
99
  attestation, assertion generation, or upload.
97
100
 
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.
101
+ On first launch of the v2 Preview consent, the native app states that an
102
+ anonymous aggregate will be sent after one valid observed hour and refreshed
103
+ when internet is available. The answer and consent version are stored locally
104
+ in macOS user defaults. A user who chose “Not now” can reopen the same
105
+ permission from the comparison view. No request is made before permission.
103
106
 
104
107
  ## Filesystem identity
105
108
 
@@ -140,19 +143,20 @@ used as automatic evidence of ownership, safety, provenance, or passport status.
140
143
 
141
144
  ## Anonymous contribution boundary
142
145
 
143
- The local app can create an allowlisted schema `2.0` preview only after at least
144
- 3,600 valid observed seconds. First-launch permission and exact payload review are
145
- separate actions. The preview
146
+ The local app can create and send an allowlisted schema `2.0` Preview only after
147
+ at least 3,600 valid observed seconds and explicit v2 native permission. The Preview
146
148
  contains valid seconds, AI-active seconds, activity ratio, supported app count
147
149
  and categories, model/loaded/runtime counts, recognized model-file bytes,
148
150
  macOS major, architecture, and scanner/runtime schema versions. It excludes
149
151
  names, process counts, CPU/RAM values, guess, device identity, local scan ID,
150
- timestamps, and all item-level records. The CLI and app still have no uploader. A
151
- separate Forkit.dev aggregate endpoint candidate exists with contribution writes
152
- disabled by default. That candidate now fails closed without Apple App Attest
153
- verification and excludes quarantined or revoked installations from the public
154
- pulse. The CLI still contains no proof enrollment or upload transport. Enabling
155
- either remains a founder/security release gate.
152
+ timestamps, and all item-level records. The native app generates one owner-only
153
+ local Ed25519 key, signs the exact aggregate against a one-time server challenge,
154
+ and stores a small local sync receipt. The server persists only a keyed hash of
155
+ the public contribution identity and one latest aggregate. Community Preview
156
+ signatures prevent undetected payload changes and simple replay; they do not
157
+ prove unique hardware or truthful measurement. Public Preview copy must say
158
+ community-reported and not hardware-verified. Apple App Attest verification and
159
+ verified ranking remain a separate founder/security release gate.
156
160
 
157
161
  ## Local share page
158
162
 
package/README.md CHANGED
@@ -1,8 +1,17 @@
1
1
  # Forkit AI Footprints
2
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`.
3
+ [![CI](https://github.com/arpitasarker01/forkit-ai-footprints/actions/workflows/ci.yml/badge.svg)](https://github.com/arpitasarker01/forkit-ai-footprints/actions/workflows/ci.yml)
4
+ [![npm](https://img.shields.io/npm/v/forkit-ai-footprints)](https://www.npmjs.com/package/forkit-ai-footprints)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-2f2361.svg)](./LICENSE)
6
+
7
+ Forkit AI Footprints is an open-source, private-by-default, metadata-only view
8
+ of the models, runtimes, and AI agents present on a device. The public package
9
+ and command are `forkit-ai-footprints`.
10
+
11
+ [Product page](https://www.forkit.dev/ai-footprint) ·
12
+ [npm](https://www.npmjs.com/package/forkit-ai-footprints) ·
13
+ [Releases](https://github.com/arpitasarker01/forkit-ai-footprints/releases) ·
14
+ [Contributing](./CONTRIBUTING.md) · [Security](./SECURITY.md)
6
15
 
7
16
  It is derived from the discovery lessons in Forkit Connect, but it has a
8
17
  different safety boundary: AI Footprints does not authenticate to Forkit.dev and has
@@ -58,7 +67,7 @@ git clone https://github.com/arpitasarker01/forkit-ai-footprints.git
58
67
  cd forkit-ai-footprints
59
68
  npm ci
60
69
  npm pack
61
- npm install -g ./forkit-ai-footprints-0.2.1.tgz
70
+ npm install -g ./forkit-ai-footprints-0.2.5.tgz
62
71
  forkit-ai-footprints serve
63
72
  ```
64
73
 
@@ -186,10 +195,36 @@ forkit-ai-footprints scan --no-mcp
186
195
 
187
196
  CLI flags cannot bypass the required monitoring session. The local UI enables
188
197
  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
191
- payload excludes app/model names, process counts, CPU/RAM, chat, workspace,
192
- repository, device, guess, local scan, and account identifiers.
198
+ the installed app asks with versioned consent whether the anonymous aggregate
199
+ may join the Global AI Preview. When allowed, the app sends one latest signed
200
+ aggregate after the one-hour eligibility gate and refreshes that same row when
201
+ new valid observation time is available. The server does not count refreshes as
202
+ new installations. The payload excludes app/model names, process counts,
203
+ CPU/RAM, chat, workspace, repository, device, guess, local scan, and account
204
+ identifiers.
205
+
206
+ ### How the community Preview is calculated
207
+
208
+ - A **contributing installation** is an opted-in local installation that has
209
+ reached at least 3,600 valid observed seconds and successfully submitted a
210
+ signed aggregate. Installing or downloading the package alone does not count.
211
+ - Repeated syncs use the same private local contribution key and replace that
212
+ installation's previous aggregate. They do not increase the participant
213
+ total.
214
+ - The global AI-active rate is duration-weighted:
215
+ `sum(AI-active seconds) / sum(valid observed seconds)` across eligible latest
216
+ rows. A long observation therefore contributes proportionally more evidence
217
+ than a short observation.
218
+ - npm downloads are reported separately as registry download events. They are
219
+ not unique people, devices, installations, or consenting participants.
220
+ - Percentile placement stays unavailable until at least 30 eligible
221
+ installations. Regional output stays hidden until its privacy threshold is
222
+ met.
223
+
224
+ The service evaluates Preview eligibility once a minute. Network submissions
225
+ are locally throttled and retried when internet is available; this is not a
226
+ promise to upload once every 60 minutes. See [the privacy boundary](./PRIVACY.md)
227
+ for the exact allowlist and exclusions.
193
228
 
194
229
  ## Shared core API
195
230
 
@@ -293,6 +328,18 @@ Storage, runtime-freshness, resource-attribution, and Developer ID truth
293
328
  boundaries are defined in
294
329
  [`docs/MACOS_MEASUREMENT_FOUNDATION.md`](./docs/MACOS_MEASUREMENT_FOUNDATION.md).
295
330
 
331
+ ## Contributing and security
332
+
333
+ Forkit AI Footprints is an MIT-licensed open-source client. Bug reports, focused
334
+ feature proposals, tests, accessibility and localization improvements, and
335
+ privacy-preserving detector fixes are welcome through GitHub issues and pull
336
+ requests. Maintainers review every accepted change; pull requests cannot publish
337
+ an npm release automatically.
338
+
339
+ Read [`CONTRIBUTING.md`](./CONTRIBUTING.md) before opening a pull request. Report
340
+ security or privacy vulnerabilities privately through the repository Security
341
+ tab as described in [`SECURITY.md`](./SECURITY.md), never in a public issue.
342
+
296
343
  ## Accuracy boundary
297
344
 
298
345
  AI Footprints has no defensible global accuracy percentage yet. Runtime API evidence is
package/STATUS.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # Forkit AI Footprints Status
2
2
 
3
- Last updated: 2026-08-27
3
+ Last updated: 2026-08-29
4
4
 
5
- Version: `0.2.1`
5
+ Version: `0.2.5`
6
6
 
7
7
  Production classification: `current` for Apple Silicon macOS
8
8
 
9
- Release state: local v0.2.1 npm-first release candidate. The npm
9
+ Release state: v0.2.5 npm-first community Preview is public. The npm
10
10
  bootstrap installs a persistent unsigned local app; Developer ID signing and
11
11
  notarization remain future work.
12
12
 
@@ -33,9 +33,15 @@ notarization remain future work.
33
33
  width instead of staying at tiny fixed pixel sizes.
34
34
  - Explicit Start/Stop Monitoring with repeated one-second macOS process-tree
35
35
  sampling, cumulative CPU-time deltas, two-sample entry and three-sample exit
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.
36
+ hysteresis, and sleep-gap exclusion. Locked and unavailable time is excluded.
37
+ Unlocked input-idle time remains excluded unless sustained supported AI work
38
+ is still measured, so long-running agents do not disappear merely because the
39
+ keyboard and pointer are untouched.
40
+ - One explicit Start-to-Stop run now keeps one stable observation identity.
41
+ Sleep, lock, and inactivity create separate continuity periods without
42
+ inventing new observations. Timeline intervals preserve every valid measured
43
+ second across state changes, and filtered period counts use continuous blocks
44
+ rather than raw render fragments.
39
45
  - Clear states: **Active now**, **Ready**, **Monitoring**, and **Stopped**.
40
46
  Process presence alone never becomes active activity.
41
47
  - Durations retain seconds at every scale, including observations longer than
@@ -47,6 +53,12 @@ notarization remain future work.
47
53
  - The monitor is owned by the local service, not a browser tab. Closing the
48
54
  window does not end a session; stopping preserves the summary; clearing is a
49
55
  separate explicit action.
56
+ - Service reconnect resumes the same observation without counting its offline
57
+ gap. An explicit Stop followed by Start creates a clean new observation and
58
+ never carries old totals, products, or timeline blocks into the new run.
59
+ - Detailed timeline, one-minute per-app resource buckets, and monitor-overhead
60
+ samples remain bounded locally; cumulative observed and AI-active totals are
61
+ maintained independently and are not reduced when old visual blocks age out.
50
62
  - A persistent native AppKit/WebKit app installed into the current user's
51
63
  Applications folder by a one-time npm bootstrap. Later launches use normal
52
64
  macOS surfaces and do not require Terminal.
@@ -76,10 +88,12 @@ notarization remain future work.
76
88
  - Verified Ollama availability requires the exact local listener owner, a valid
77
89
  version response, and a valid tags response. Loaded state comes only from a
78
90
  valid `/api/ps` response.
79
- - A schema `2.0` candidate global aggregate based on valid observed seconds and
91
+ - A schema `2.0` Global AI Preview aggregate based on valid observed seconds and
80
92
  AI-active seconds. It excludes names, process counts, paths, commands, chat,
81
93
  workspace, device identity, guess, and local scan ID. Review and consent are
82
- separate; upload transport remains disabled.
94
+ separate. After explicit v2 native permission and one valid observed hour,
95
+ the app signs and syncs the allowlisted aggregate to Forkit.dev, keeping one
96
+ latest community-reported Preview row per stable local contribution key.
83
97
  - A 1080×1080 local share card with Share, Save PNG, Copy Image, and Copy
84
98
  Caption controls. It contains only measured totals and supported tool names.
85
99
  - A single Forkit.dev `/ai-footprint` page with an honest benchmark-forming
@@ -112,12 +126,12 @@ notarization remain future work.
112
126
  and stored local model records without attributing prompts or tasks.
113
127
  - A separate earlier real session crossed the previous 10-minute gate at exactly
114
128
  **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.
129
+ comparison requires **3,600 valid seconds** before a consented community
130
+ Preview aggregate becomes eligible for sync.
117
131
 
118
132
  ## Validation completed locally
119
133
 
120
- - TypeScript build and the complete local test suite: **119/119** tests passed.
134
+ - TypeScript build and the complete local test suite: **135/135** tests passed.
121
135
  - Deterministic active → idle/locked → resumed lifecycle coverage confirms that
122
136
  paused time changes neither observed nor AI-active seconds and cannot bridge
123
137
  the longest continuous activity block.
@@ -142,8 +156,9 @@ notarization remain future work.
142
156
 
143
157
  ## Intentionally not enabled or not yet field-validated
144
158
 
145
- - No upload, verified global contribution, public ranking, account, registry
146
- write, passport, Mint, Runtime_C2 write, telemetry, or production deployment.
159
+ - No verified global contribution/ranking, account, passport registry
160
+ write, passport, Mint, Runtime_C2 write, or general telemetry. Only the
161
+ explicitly consented community Preview aggregate transport is enabled.
147
162
  - No Homebrew tap, signed direct download, or click installer.
148
163
  - No Developer ID signature, notarization, stapling, Gatekeeper distribution
149
164
  test, or clean external-Mac installation test.
@@ -171,5 +186,6 @@ claim that a cloud model is running locally.
171
186
  ## Smallest release gate
172
187
 
173
188
  Future expansion requires representative multi-device field accuracy, Intel Mac
174
- validation, and Apple signing/notarization. Global contribution remains closed
175
- until its separate server-side verification and abuse-control gate passes.
189
+ validation, and Apple signing/notarization. Community Preview contribution is
190
+ open under the v2 consent/integrity boundary; verified global ranking remains
191
+ closed until its separate hardware-verification and abuse-control gate passes.