mesurer-solid 0.2.3-beta.11 → 0.2.3-beta.12

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.
@@ -218,16 +218,16 @@ See [Direct text editing and Typography](../../docs/TEXT_EDITING.md).
218
218
 
219
219
  ## Annotation and context review
220
220
 
221
- A saved annotation carries target-bound intent and an immutable baseline:
221
+ A saved annotation carries target-bound intent and an immutable baseline. Its original note remains unchanged as replies are added, edited, or deleted; resolution status is open by default and can be explicitly reopened:
222
222
 
223
223
  ```js
224
224
  const context = await window.__MESURER__.context({ annotation: annotationId })
225
225
  ```
226
226
 
227
- Saved annotation UI is source-linked presentation, not the durable state itself. Saved annotations survive a same-tab reload and conservatively rebind through their stored selector/fingerprint identity; ambiguous targets remain unresolved rather than attaching to a different element. Add Note, its composer, saved markers and panels, and the ownership edge move with their target through window and nested scrolling. A saved panel keeps its target-relative page point and may leave the viewport with its source. Several notes on one target keep separate nearby markers, and Add Note remains available while an existing note is open.
227
+ Saved annotation UI is source-linked presentation, not the durable state itself. Saved annotations and replies survive a same-tab reload and conservatively rebind through their stored selector/fingerprint identity; ambiguous targets remain unresolved rather than attaching to a different element. Read `annotations()` and annotation-scoped `context()` to consume the original note and all replies. Resolved notes remain readable and are excluded from bulk Codex delivery; explicitly requesting one note's Context still works. Add Note, its composer, saved markers and panels, and the ownership edge move with their target through window and nested scrolling. A saved panel keeps its target-relative page point and may leave the viewport with its source. Several notes on one target keep separate nearby markers, and Add Note remains available while an existing note is open.
228
228
  The composer is a compact auto-growing text field with an in-field Send button. Enter sends, Shift+Enter inserts a newline, and Escape discards. The first outside click on a non-empty draft prompts rather than discarding it; a second outside click closes it.
229
229
 
230
- Do not infer that an annotation disappeared because its card or marker is currently offscreen. Read `annotations()` and annotation-scoped `context()` instead. When a note is highlighted, the temporary ownership emphasis uses one exact target boundary rather than a second fill, glow, or rounded frame.
230
+ Do not infer that an annotation disappeared because its card or marker is currently offscreen. Read `annotations()` and annotation-scoped `context()` instead. These reads are non-destructive: they never open Responsive, reveal a saved target, scroll the page, or change the user's presentation. The human can explicitly use the Notes toolbar list to reveal a saved note. When a note is highlighted, the temporary ownership emphasis uses one exact target boundary rather than a second fill, glow, or rounded frame.
231
231
 
232
232
  Context cards are Mesurer inspector UI. Live Select hover and selection evidence must paint underneath the composer and saved panels, including when the outer Mesurer host is in the browser top layer. Agents should treat the cards as interaction boundaries rather than attempting to select page content through them.
233
233
 
@@ -14,7 +14,10 @@ export type MesurerContextService = {
14
14
  select(selectors: string | readonly string[]): Promise<MesurerContextV1>;
15
15
  annotations(): Promise<MesurerAnnotation[]>;
16
16
  /** Remove one saved annotation after a trusted workflow has completed it. */
17
- removeAnnotation(annotationId: string): Promise<void>;
17
+ removeAnnotation(annotationId: string, expectedContent?: {
18
+ note: string;
19
+ replies: NonNullable<MesurerAnnotation["replies"]>;
20
+ }): Promise<void>;
18
21
  review(annotationId?: string): Promise<MesurerReviewV1 | MesurerReviewV1[]>;
19
22
  capturePlan(request?: MesurerContextRequest): Promise<MesurerCapturePlanV1>;
20
23
  prepareCapture(): Promise<void>;
package/dist/context.d.ts CHANGED
@@ -134,6 +134,12 @@ export type MesurerAnnotationBaseline = {
134
134
  } | null;
135
135
  }>;
136
136
  };
137
+ export type MesurerAnnotationReply = {
138
+ id: string;
139
+ text: string;
140
+ createdAt: number;
141
+ };
142
+ export type MesurerAnnotationStatus = "open" | "resolved";
137
143
  export type MesurerAnnotation = {
138
144
  id: string;
139
145
  note: string;
@@ -147,6 +153,13 @@ export type MesurerAnnotation = {
147
153
  rect: MesurerContextRect;
148
154
  };
149
155
  baseline: MesurerAnnotationBaseline;
156
+ replies?: Array<{
157
+ id: string;
158
+ text: string;
159
+ createdAt: number;
160
+ }>;
161
+ status?: "open" | "resolved";
162
+ resolvedAt?: number;
150
163
  };
151
164
  export type MesurerContextTarget = {
152
165
  ref: string;
@@ -210,6 +223,13 @@ export type MesurerContextV1 = {
210
223
  kind: "annotation";
211
224
  annotationId: string;
212
225
  note: string;
226
+ replies?: Array<{
227
+ id: string;
228
+ text: string;
229
+ createdAt: number;
230
+ }>;
231
+ status?: "open" | "resolved";
232
+ resolvedAt?: number;
213
233
  targetStatus: "connected" | "partial" | "stale";
214
234
  };
215
235
  page: {
package/dist/index.d.ts CHANGED
@@ -254,7 +254,7 @@ export { MESURER_VERSION } from "./version";
254
254
  export type { AgentDistance, AgentEdges, AgentElementInspection, AgentFeedbackSnapshot, AgentRect, AgentViewportSnapshot, CreateMesurerAgentHarnessOptions, MesurerAgentHarness, MesurerTextEditIntent, MesurerTextEditService, MesurerTextStyleChange, MesurerTextStyleProperty, } from "./agent";
255
255
  export type { ArrangeCapturePlan, ArrangeIntent, ArrangeOffset, ArrangePresentation, ArrangeRect, ArrangeReview, ArrangeReviewTarget, ArrangeTarget, MesurerArrangeService, EditCapturePlan, EditIntent, EditOffset, EditPresentation, EditRect, EditReview, EditReviewTarget, EditTarget, MesurerEditService, } from "./arrange";
256
256
  export { captureMesurerContext, copyTextToClipboard, createMesurerCapturePlan, formatMesurerContext, reviewMesurerAnnotation, } from "./context";
257
- export type { MesurerAnnotation, MesurerAnnotationBaseline, MesurerAnnotationTarget, MesurerCapturePlanV1, MesurerContextDistance, MesurerContextEdges, MesurerContextGuide, MesurerContextLayoutGuide, MesurerContextMeasurement, MesurerContextRect, MesurerContextRequest, MesurerContextTarget, MesurerContextV1, MesurerElementFingerprint, MesurerElementInspection, MesurerReviewChange, MesurerReviewMetricChange, MesurerReviewPresenceChange, MesurerReviewV1, } from "./context";
257
+ export type { MesurerAnnotation, MesurerAnnotationBaseline, MesurerAnnotationReply, MesurerAnnotationStatus, MesurerAnnotationTarget, MesurerCapturePlanV1, MesurerContextDistance, MesurerContextEdges, MesurerContextGuide, MesurerContextLayoutGuide, MesurerContextMeasurement, MesurerContextRect, MesurerContextRequest, MesurerContextTarget, MesurerContextV1, MesurerElementFingerprint, MesurerElementInspection, MesurerReviewChange, MesurerReviewMetricChange, MesurerReviewPresenceChange, MesurerReviewV1, } from "./context";
258
258
  export { createMesurerPluginHost, createMesurerRuntime, defineMesurerPlugin } from "./core";
259
259
  export type { CommandHandler as MesurerCommandHandler, MesurerPlugin, MesurerPluginContext, MesurerPluginDescription, MesurerPluginHost, OverlayContribution, Registration as MesurerRegistration, SettingsContribution, StateSliceDefinition, ToolContribution, ToolbarMode, } from "./core";
260
260
  export type { MesurerHostLayerMode } from "./host-layer";