@dualityinstitute/blink 0.0.3 → 0.0.4

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/README.md CHANGED
@@ -24,7 +24,7 @@ credentials on the Mac.
24
24
  ## Install
25
25
 
26
26
  ```bash
27
- bunx @dualityinstitute/blink install
27
+ bunx @dualityinstitute/blink@latest install
28
28
  ```
29
29
 
30
30
  The terminal UI asks for the access token, writes `~/.blink/config.json`, and
@@ -34,7 +34,7 @@ at its default URL, so only the token is needed.
34
34
  For non-interactive installation:
35
35
 
36
36
  ```bash
37
- bunx @dualityinstitute/blink install --token blink_customer_token
37
+ bunx @dualityinstitute/blink@latest install --token blink_customer_token
38
38
  ```
39
39
 
40
40
  Pass `--api-url` as well to point the app at a different gateway, such as a
@@ -72,7 +72,9 @@ the signed **Blink** app identity.
72
72
 
73
73
  Enable **Meeting** in the tray or popup. Blink starts a new identity-scoped
74
74
  Meeting conversation, captures system audio as `Them` and microphone audio as
75
- `You`, and keeps a rolling two-minute transcript locally. Captures made with the
75
+ `You`, and keeps a rolling two-minute transcript for the model. The popup widens
76
+ to show the full running transcript beside the answer; scroll back at any point
77
+ and it stops following new speech until you return to the bottom. Captures made with the
76
78
  global shortcuts are retained in a private staging directory. The popup shows
77
79
  which transcript and screenshot context is ready.
78
80
 
@@ -89,15 +91,18 @@ Run `blink ungrant` to clear both permission records and make macOS ask again.
89
91
 
90
92
  ### Saving transcripts
91
93
 
92
- **Save transcript** is off by default. When enabled, the entire Meeting is
93
- appended to a Markdown file under:
94
+ Every Meeting is appended to a Markdown file on your Mac, one per session:
94
95
 
95
96
  ```text
96
97
  ~/.blink/transcripts/2026-08-30-143022.md
97
98
  ```
98
99
 
99
- This local setting is independent from submission: Ask always sends the current
100
- two-minute transcript snapshot when one is available.
100
+ Saving is local only and independent from submission: Ask always sends the
101
+ current two-minute transcript snapshot when one is available, no more.
102
+
103
+ Open **Meeting Transcripts…** from the tray to read, search, and filter past
104
+ sessions by date. Search runs across every saved transcript and reports how many
105
+ times each session matched.
101
106
 
102
107
  ## Answer lifecycle and cancellation
103
108
 
@@ -110,7 +115,7 @@ two-minute transcript snapshot when one is available.
110
115
 
111
116
  Subscribe at [duality.institute/blink](https://duality.institute/blink). After
112
117
  Stripe Checkout the claim page shows your access token exactly once; paste it
113
- into `bunx @dualityinstitute/blink install`.
118
+ into `bunx @dualityinstitute/blink@latest install`.
114
119
 
115
120
  Every Monitor screenshot and every Meeting Ask counts as one answer against
116
121
  your monthly limit. The popup shows `used / limit` for the current period, and
@@ -136,7 +141,8 @@ Blink Cloud receives:
136
141
  - The bearer access token needed to authorize and isolate the request
137
142
 
138
143
  The desktop stores the access token in `~/.blink/config.json`. Answer metadata
139
- and text are appended locally to `~/.blink/answers.jsonl`. Presenter Notes stay
144
+ and text are appended locally to `~/.blink/answers.jsonl`, and meeting
145
+ transcripts to `~/.blink/transcripts/`. Presenter Notes stay
140
146
  local in `~/.blink/presenter.md` and are never submitted. Meeting captures are
141
147
  staged under `~/.blink/meeting-captures/` and cleared when Meeting ends.
142
148
 
@@ -153,8 +159,7 @@ and token totals are kept for billing.
153
159
  | `accessToken` | Empty | Bearer token issued for Blink Cloud |
154
160
  | `screenshotDir` | `~/blinkDir/` | Watched PNG directory |
155
161
  | `hideFromCapture` | `true` | Enables privacy mode |
156
- | `showTranscript` | `true` | Shows the live transcript strip |
157
- | `saveTranscript` | `false` | Saves full meeting transcripts locally |
162
+ | `showTranscript` | `true` | Shows the live transcript panel during a meeting |
158
163
 
159
164
  Blink materializes new defaults without deleting unrelated settings from an
160
165
  existing config file. The obsolete `sessionMode` and `hotkeyPreset` keys are
package/dist/cli.js CHANGED
@@ -19862,14 +19862,17 @@ function date4(params) {
19862
19862
  return _coercedDate(ZodDate, params);
19863
19863
  }
19864
19864
  // src/core/cloud-protocol.ts
19865
+ var OptionalPrompt = exports_external.preprocess((value) => value === null || value === "" ? undefined : value, exports_external.string().trim().min(1).max(4000).optional());
19865
19866
  var MonitorRequestSchema = exports_external.object({
19866
19867
  kind: exports_external.literal("monitor"),
19867
- image: exports_external.instanceof(File)
19868
+ image: exports_external.instanceof(File),
19869
+ prompt: OptionalPrompt
19868
19870
  });
19869
19871
  var MeetingRequestSchema = exports_external.object({
19870
19872
  kind: exports_external.literal("meeting"),
19871
19873
  text: exports_external.preprocess((value) => value === null ? undefined : value, exports_external.string().trim().min(1).optional()),
19872
- images: exports_external.array(exports_external.instanceof(File)).readonly()
19874
+ images: exports_external.array(exports_external.instanceof(File)).readonly(),
19875
+ prompt: OptionalPrompt
19873
19876
  });
19874
19877
  var CloudAnswerRequestSchema = exports_external.discriminatedUnion("kind", [MonitorRequestSchema, MeetingRequestSchema]).superRefine((request, context) => {
19875
19878
  if (request.kind === "meeting" && request.text === undefined && request.images.length === 0) {
@@ -19962,9 +19965,10 @@ var DEFAULTS = {
19962
19965
  accessToken: "",
19963
19966
  hideFromCapture: true,
19964
19967
  showTranscript: true,
19965
- saveTranscript: false
19968
+ monitorPrompt: "",
19969
+ meetingPrompt: ""
19966
19970
  };
19967
- var OBSOLETE_KEYS = ["sessionMode", "hotkeyPreset"];
19971
+ var OBSOLETE_KEYS = ["sessionMode", "hotkeyPreset", "saveTranscript"];
19968
19972
  var RawConfigSchema = exports_external.record(exports_external.string(), exports_external.unknown());
19969
19973
  var HttpUrlSchema = exports_external.url().refine((value) => {
19970
19974
  const protocol = new URL(value).protocol;
@@ -20048,8 +20052,13 @@ function loadConfig() {
20048
20052
  if (user["showTranscript"] !== undefined) {
20049
20053
  merged.showTranscript = user["showTranscript"] === true;
20050
20054
  }
20051
- if (user["saveTranscript"] !== undefined) {
20052
- merged.saveTranscript = user["saveTranscript"] === true;
20055
+ for (const key of ["monitorPrompt", "meetingPrompt"]) {
20056
+ if (user[key] === undefined)
20057
+ continue;
20058
+ const prompt = exports_external.string().safeParse(user[key]);
20059
+ if (!prompt.success)
20060
+ throw new ConfigFileError(`${key} must be a string`);
20061
+ merged[key] = prompt.data.trim();
20053
20062
  }
20054
20063
  const missing = Object.keys(merged).filter((key) => !(key in persisted));
20055
20064
  if (missing.length > 0 || hadObsolete) {