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.
Files changed (116) hide show
  1. package/PRIVACY.md +44 -18
  2. package/README.md +42 -41
  3. package/STATUS.md +70 -31
  4. package/dist/activity-page.d.ts +13 -0
  5. package/dist/activity-page.js +104 -0
  6. package/dist/activity-view-model.d.ts +150 -0
  7. package/dist/activity-view-model.js +358 -0
  8. package/dist/agents.d.ts +2 -0
  9. package/dist/agents.js +108 -6
  10. package/dist/bootstrap/.metadata_never_index +0 -0
  11. package/dist/bootstrap/Forkit AI Footprint.app.zip +0 -0
  12. package/dist/cli.js +86 -10
  13. package/dist/device-presence.d.ts +17 -0
  14. package/dist/device-presence.js +64 -0
  15. package/dist/insights.d.ts +1 -1
  16. package/dist/insights.js +10 -8
  17. package/dist/local-observation-state.d.ts +42 -0
  18. package/dist/local-observation-state.js +113 -0
  19. package/dist/locales.json +556 -106
  20. package/dist/localization.d.ts +556 -106
  21. package/dist/localization.js +40 -30
  22. package/dist/monitor.d.ts +33 -2
  23. package/dist/monitor.js +183 -11
  24. package/dist/runtime-activity.d.ts +4 -1
  25. package/dist/runtime-activity.js +21 -5
  26. package/dist/server.d.ts +3 -0
  27. package/dist/server.js +112 -16
  28. package/dist/share-page.d.ts +2 -1
  29. package/dist/share-page.js +16 -52
  30. package/dist/sharing.d.ts +12 -1
  31. package/dist/sharing.js +59 -1
  32. package/dist/types.d.ts +1 -1
  33. package/dist/workflow-context.d.ts +13 -0
  34. package/dist/workflow-context.js +144 -0
  35. package/docs/GLOBAL_DISTRIBUTION.md +7 -3
  36. package/docs/MACOS_ACCURACY_GATE.md +3 -3
  37. package/docs/MACOS_TESTER_GUIDE.md +8 -8
  38. package/package.json +6 -6
  39. package/release/channels.json +4 -4
  40. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Info.plist +0 -5
  41. package/dist/bootstrap/Forkit AI Footprint.app/Contents/MacOS/Forkit AI Footprint +0 -0
  42. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/ForkitAIFootprint.icns +0 -0
  43. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/ForkitStatusTemplate.png +0 -0
  44. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/agents.d.ts +0 -22
  45. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/agents.js +0 -281
  46. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/aggregate.d.ts +0 -28
  47. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/aggregate.js +0 -151
  48. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/assets/forkit-icon-dark.png +0 -0
  49. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/assets/forkit-icon-light.png +0 -0
  50. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/census.d.ts +0 -3
  51. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/census.js +0 -196
  52. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/cli.d.ts +0 -32
  53. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/cli.js +0 -404
  54. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/doctor.d.ts +0 -14
  55. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/doctor.js +0 -71
  56. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/endpoints.d.ts +0 -8
  57. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/endpoints.js +0 -45
  58. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/evaluate.d.ts +0 -44
  59. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/evaluate.js +0 -102
  60. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/filesystem.d.ts +0 -11
  61. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/filesystem.js +0 -226
  62. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/format.d.ts +0 -7
  63. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/format.js +0 -78
  64. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/hash.d.ts +0 -4
  65. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/hash.js +0 -16
  66. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/index.d.ts +0 -22
  67. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/index.js +0 -58
  68. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/insights.d.ts +0 -13
  69. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/insights.js +0 -76
  70. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/local-device.d.ts +0 -19
  71. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/local-device.js +0 -81
  72. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/locales.json +0 -272
  73. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/localization.d.ts +0 -277
  74. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/localization.js +0 -55
  75. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/mcp.d.ts +0 -9
  76. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/mcp.js +0 -93
  77. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/monitor.d.ts +0 -99
  78. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/monitor.js +0 -285
  79. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/base.d.ts +0 -34
  80. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/base.js +0 -88
  81. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/index.d.ts +0 -6
  82. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/index.js +0 -24
  83. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/lmstudio.d.ts +0 -9
  84. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/lmstudio.js +0 -71
  85. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/ollama.d.ts +0 -12
  86. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/ollama.js +0 -171
  87. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/openai-compatible.d.ts +0 -10
  88. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/providers/openai-compatible.js +0 -68
  89. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/resource-evidence.d.ts +0 -17
  90. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/resource-evidence.js +0 -52
  91. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/runtime-activity.d.ts +0 -5
  92. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/runtime-activity.js +0 -66
  93. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/runtime-identity.d.ts +0 -7
  94. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/runtime-identity.js +0 -66
  95. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/server.d.ts +0 -21
  96. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/server.js +0 -308
  97. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/share-page.d.ts +0 -75
  98. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/share-page.js +0 -167
  99. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/sharing.d.ts +0 -35
  100. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/sharing.js +0 -67
  101. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/tools.d.ts +0 -9
  102. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/tools.js +0 -106
  103. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/types.d.ts +0 -166
  104. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/types.js +0 -3
  105. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/version.d.ts +0 -4
  106. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/dist/version.js +0 -13
  107. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/node_modules/ps-list/index.d.ts +0 -76
  108. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/node_modules/ps-list/index.js +0 -366
  109. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/node_modules/ps-list/license +0 -9
  110. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/node_modules/ps-list/package.json +0 -44
  111. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/node_modules/ps-list/readme.md +0 -56
  112. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/node_modules/ps-list/vendor/fastlist-0.3.0-x64.exe +0 -0
  113. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/node_modules/ps-list/vendor/fastlist-0.3.0-x86.exe +0 -0
  114. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/app/package.json +0 -6
  115. package/dist/bootstrap/Forkit AI Footprint.app/Contents/Resources/runtime/node +0 -0
  116. 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; raw process
15
- entries are never exported;
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; absent cooperation, the fields remain empty;
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
- Census must not retain or emit:
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 Census reports, saved share pages, anonymous
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
- Census may call HTTP(S) endpoints only when the hostname is one of:
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
- Census contains no Forkit.dev login, registry-write, passport-publish,
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, chat titles, workspace names, or account data.
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 Census report, rescan snapshot, share
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. The stream makes no external request.
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 a Census Report.
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. 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.
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. Preview and consent are separate actions. It
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 Census ID,
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 Census ID. It loads no external assets and makes
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`; `forkit-census` remains a temporary binary alias.
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-census.git
58
- cd forkit-census
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.0.tgz
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
- Census ID. Its copy/share controls include only the visible aggregate summary
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 → GuessReveal → Share experience. `Scan again` calls a random-token-protected local
121
+ opens the local AI-app activity → InsightsGlobal 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
- 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.
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 Working now from Open /
136
- idle; process presence alone is never activity. It is near-real-time, not zero delay.
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 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,
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. It can be downloaded or passed to the operating
153
- system share sheet after an explicit click; no model names, chat/workspace
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
- preview and consent remain separate, and no upload transport exists. The
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, Census, and account identifiers.
192
+ repository, device, guess, local scan, and account identifiers.
185
193
 
186
194
  ## Shared core API
187
195
 
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.
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-23
3
+ Last updated: 2026-08-27
4
4
 
5
- Version: `0.2.0`
5
+ Version: `0.2.1`
6
6
 
7
7
  Production classification: `current` for Apple Silicon macOS
8
8
 
9
- Release state: founder-approved public v0.2.0 npm-first release. The npm
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, Guess → Reveal, an aggregate share
16
- card, optional exact global-payload review, Scan again, and technical details.
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
- - 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.
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 chat/workspace display when a cooperating app explicitly
39
- supplies those values. No inference from window titles, folders, prompts, or
40
- commands is attempted.
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 Census ID. Review and consent are
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**), 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.
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
- - Curated agent detector corpus: **58/58** fixtures, 26 positive and 32 negative,
92
- with zero fixture errors. This is conformance evidence, not field accuracy.
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 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.
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. **Working now** means sustained recent CPU
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