premiere-pro-mcp 1.11.0 → 1.11.2

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/CHANGELOG.md CHANGED
@@ -6,6 +6,66 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.11.2] - 2026-08-18
10
+
11
+ ### Added
12
+
13
+ - Added a durable local project-context engine with active-sequence capture,
14
+ transcript/shot/audio/note enrichment, bounded retrieval, and non-mutating
15
+ edit-plan scaffolds. Source-media and timeline revisions are tracked
16
+ independently so ordinary timeline changes do not repeat expensive source
17
+ analysis.
18
+ - Added a context-aware rough-cut prompt and `config://premiere-project-context`
19
+ resource documenting privacy, invalidation, retrieval, and preview requirements.
20
+
21
+ ### Fixed
22
+
23
+ - `add_track` and QE-backed `add_tracks` now validate their inputs and return success
24
+ only after the active sequence reports the exact requested track-count increase. The
25
+ single-track call uses a bounded QE fallback only when the public DOM call made no
26
+ change, and never retries a partially applied call.
27
+ - `overwrite_clip` now rejects invalid video and audio track indices before invoking
28
+ Premiere and confirms the requested source item appears at the requested frame. A
29
+ no-op or an unverifiable repeat placement returns an error instead of false success.
30
+ - `trim_clip` now proves the requested source point also produced the expected visible timeline
31
+ edge and duration. It refuses retimed clips and, by default, trims that would strand effect
32
+ keyframes instead of treating source-metadata-only changes as success on Premiere Pro 26.x.
33
+ - `split_clip` now verifies that a clip spans the requested cut and that QE produced each expected
34
+ left/right segment, rather than accepting any increase in track clip count. QE keyframe
35
+ redistribution remains explicitly unverified.
36
+ - `remove_effect` and `remove_effect_by_name` now preflight `Component.remove()` support before
37
+ mutation. Unsupported Premiere 26.x components such as Essential Sound's Amplify return an
38
+ actionable capability error without crashing or partially removing matched effects.
39
+
40
+ ### Security
41
+
42
+ - Native media paths are hashed before persistence, credential-like enrichment
43
+ metadata is discarded, stale source/timeline enrichments are rejected, and
44
+ context clearing remains an explicit filesystem-authorized action.
45
+
46
+ ### Validation
47
+
48
+ - Added fail-closed CEP/QE contract coverage for trim, split, track creation, overwrite placement,
49
+ and component removal. Licensed Premiere Pro 26.x host confirmation remains a separate gate.
50
+
51
+ ## [1.11.1] - 2026-08-16
52
+
53
+ ### Fixed
54
+
55
+ - Extensionless landing routes such as `/changelog` now resolve to their
56
+ exported `index.html` file instead of attempting to stream a directory. The
57
+ previous behavior emitted an unhandled `EISDIR` error on Linux and restarted
58
+ the remote HTTP process.
59
+ - Static asset candidates are required to remain inside the landing directory
60
+ and resolve to regular files, and read-stream failures are handled without
61
+ terminating the server.
62
+
63
+ ### Validation
64
+
65
+ - Added regression coverage for extensionless exported routes and asynchronous
66
+ static-file read failures. The complete release gates remain distinct from
67
+ validation inside a licensed Premiere host.
68
+
9
69
  ## [1.11.0] - 2026-08-16
10
70
 
11
71
  ### Fixed
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  **Give compatible AI assistants structured control over supported Adobe Premiere Pro workflows.**
8
8
 
9
- 282 core tools across 31 modules, 3 resources, and 4 guided workflows. A connected UXP host adds 48 capability-gated tools.
9
+ 285 core tools across 32 modules, 4 resources, and 5 guided workflows. A connected UXP host adds 48 capability-gated tools.
10
10
 
11
11
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
12
12
  [![Node.js](https://img.shields.io/badge/Node.js-20.19%2B-green.svg)](https://nodejs.org)
@@ -29,22 +29,20 @@ An [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that l
29
29
  "Add the B-roll clips to V2, apply a cross dissolve between each, color correct them to match the A-roll, and export a 1080p ProRes."
30
30
  ```
31
31
 
32
- The AI handles the entire workflow through 282 core tools spanning the supported ExtendScript, QE DOM, local media analysis, safe edit-planning, and connection-verification surfaces. A compatible, authenticated UXP panel adds 48 documented, capability-gated tools without replacing the production CEP bridge.
32
+ The AI handles the entire workflow through 285 core tools spanning the supported ExtendScript, QE DOM, local media analysis, revisioned project-context retrieval, safe edit-planning, and connection-verification surfaces. A compatible, authenticated UXP panel adds 48 documented, capability-gated tools without replacing the production CEP bridge.
33
33
 
34
- ### Latest release: 1.11.0
34
+ ### Latest release: 1.11.2
35
35
 
36
- - **Host evidence and readiness:** a bounded UXP event journal, AME terminal receipts, and
37
- explicit readiness gates distinguish verified completion, pending work, and lost history.
38
- - **Guarded production workflows:** GUID-targeted project sessions, growing-media pause leases,
39
- transactional checkpoints, and bounded media-health inspection fail closed on stale state.
40
- - **Timeline precision:** caption-aware track controls and source-clip trim and framing add
41
- readback-verified mutations; clip-volume writes now convert dB correctly and support batches.
42
- - **Performance and support evidence:** a hybrid-acceleration benchmark gate and the generated
43
- [supported-actions catalog](docs/supported-actions.md) document every current action and boundary.
44
- - **Truthful compatibility:** CEP remains the production-compatible bridge, and automated UXP
45
- contracts do not claim validation inside a real Premiere host.
36
+ - **Honest timeline mutations:** trim, split, track creation, and overwrite placement now verify
37
+ observable postconditions instead of trusting Premiere 26.x calls that can silently no-op.
38
+ - **Safe effect removal:** unsupported components such as Essential Sound's Amplify return an
39
+ actionable capability error instead of crashing or partially removing matched effects.
40
+ - **Durable project context:** local, revision-aware context capture and retrieval adds bounded,
41
+ non-mutating edit-plan scaffolds while hashing persisted native media paths.
42
+ - **Truthful compatibility:** the fixes have automated CEP/QE contract coverage; confirmation in
43
+ a licensed Premiere Pro 26.x host remains a separate validation boundary.
46
44
 
47
- See the [v1.11.0 release notes](https://github.com/leancoderkavy/premiere-pro-mcp/releases/tag/v1.11.0)
45
+ See the [v1.11.2 release notes](https://github.com/leancoderkavy/premiere-pro-mcp/releases/tag/v1.11.2)
48
46
  for complete details. Live installation in Premiere Pro still requires host verification.
49
47
 
50
48
  ---
@@ -53,9 +51,9 @@ for complete details. Live installation in Premiere Pro still requires host veri
53
51
 
54
52
  ### Easiest supported path: Claude Desktop
55
53
 
56
- 1. Download the current [Claude Desktop bundle (`.mcpb`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.11.0/premiere-pro-mcp-1.11.0.mcpb).
54
+ 1. Download the current [Claude Desktop bundle (`.mcpb`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.11.2/premiere-pro-mcp-1.11.2.mcpb).
57
55
  2. In Claude Desktop, open **Settings > Extensions > Advanced settings > Install Extension**, select the downloaded bundle, and restart Claude Desktop.
58
- 3. Download the separate [signed Premiere connector (`.zxp`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.11.0/MCPBridgeCEP.zxp). Open it with your trusted ZXP installer. If your computer has no ZXP installer, use the npm connector installer in **Advanced setup** below.
56
+ 3. Download the separate [signed Premiere connector (`.zxp`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.11.2/MCPBridgeCEP.zxp). Open it with your trusted ZXP installer. If your computer has no ZXP installer, use the npm connector installer in **Advanced setup** below.
59
57
  4. Restart Premiere, open a project, then open **Window > Extensions > MCP Bridge**.
60
58
  5. In Claude, enter: `Safely check my Premiere connection with verify_premiere_connection. Make no changes.`
61
59
 
@@ -279,11 +277,11 @@ From a clone of this repository:
279
277
  ```bash
280
278
  codex plugin marketplace add .
281
279
  codex plugin add premiere-pro@premiere-pro-mcp
282
- npx -y premiere-pro-mcp@1.11.0 --install-cep
280
+ npx -y premiere-pro-mcp@1.11.2 --install-cep
283
281
  ```
284
282
 
285
283
  Restart Premiere Pro and start a new Codex session after installation. The plugin
286
- launches `premiere-pro-mcp@1.11.0` through `npx`; the separate CEP installation is
284
+ launches `premiere-pro-mcp@1.11.2` through `npx`; the separate CEP installation is
287
285
  required because the MCP server communicates with the running Premiere host through
288
286
  the local bridge.
289
287
 
@@ -303,7 +301,7 @@ For Claude Code, add this repository as a marketplace and install the plugin:
303
301
  Then install the Premiere bridge and start a new Claude Code session:
304
302
 
305
303
  ```bash
306
- npx -y premiere-pro-mcp@1.11.0 --install-cep
304
+ npx -y premiere-pro-mcp@1.11.2 --install-cep
307
305
  ```
308
306
 
309
307
  The Claude Code package lives in
@@ -342,7 +340,7 @@ installed separately.
342
340
  QE-backed tools are reported as `experimental` because QE is undocumented and can vary between Premiere builds. Authority availability is reported separately from implementation support, so disabling `edit`, for example, does not incorrectly label editing tools as unsupported. Static metadata never claims that a Premiere operation succeeded; use `ping` and inspect each tool result for runtime evidence.
343
341
 
344
342
  MCP `tools/list` is filtered to the active authority profile. The default
345
- `inspect,edit,export,filesystem` profile advertises 280 of the 282 registered
343
+ `inspect,edit,export,filesystem` profile advertises 283 of the 285 registered
346
344
  tools and omits `execute_extendscript` and `evaluate_expression`, which require
347
345
  explicit `unsafe-script` authority. `ping` and `get_capabilities` remain visible
348
346
  under every profile so a restricted or misconfigured server can still explain
@@ -383,6 +381,23 @@ capability negotiation.
383
381
  - The server never uses menu automation, private APIs, clip-name heuristics, or
384
382
  duration changes as proof that an AI operation occurred.
385
383
 
384
+ ### Reusable project context
385
+
386
+ For projects where repeatedly inspecting clips, transcripts, audio, and timeline
387
+ placements is expensive, call `manage_project_context` with `action: "capture"`.
388
+ The local context engine indexes a bounded active-sequence snapshot, hashes native
389
+ project/media paths before persistence, and returns independent source, timeline,
390
+ and combined context revisions. Add transcript passages, shot descriptions, audio
391
+ observations, or editor notes once with `action: "enrich"`; ordinary trims and moves
392
+ update the timeline revision without discarding unchanged source analysis.
393
+
394
+ Use `search_project_context` to retrieve only evidence relevant to the current
395
+ editing intent. `create_context_edit_plan` returns a non-mutating candidate scaffold
396
+ and stale-state guards; exact identities must still be resolved and passed through
397
+ `preview_edit_plan` before any application. See the [project context engine guide](docs/project-context-engine.md)
398
+ for storage controls, privacy boundaries, invalidation behavior, and the complete
399
+ workflow.
400
+
386
401
  ### Authenticated UXP connection
387
402
 
388
403
  The MCP server can accept a local UXP panel connection and invoke the UXP commands that are currently implemented:
@@ -468,7 +483,7 @@ The file-based IPC bridge is simple, reliable, and works across macOS and Window
468
483
 
469
484
  ---
470
485
 
471
- ## Tools (282 core total; 280 under the default profile; 328 with a connected UXP bridge)
486
+ ## Tools (285 core total; 283 under the default profile; 331 with a connected UXP bridge)
472
487
 
473
488
  The [complete supported-actions catalog](docs/supported-actions.md) lists every
474
489
  registered core tool, the two tools restricted behind explicit `unsafe-script`
@@ -514,7 +529,7 @@ the tables below are a shorter workflow-oriented overview.
514
529
  | `roll_edit` / `slide_edit` / `slip_edit` | Professional trim modes (QE) |
515
530
  | `move_clip_to_track` | Move between tracks (QE) |
516
531
  | `set_clip_speed_qe` / `reverse_clip` | Speed/reverse (QE) |
517
- | `split_clip` / `trim_clip` / `move_clip` | Basic edits |
532
+ | `split_clip` / `trim_clip` / `move_clip` | Basic edits; trim verifies source points and visible timeline edges |
518
533
  | `set_clip_properties` | Opacity, scale, rotation, position |
519
534
  | `link_selection` / `unlink_selection` | Link/unlink A/V |
520
535
 
@@ -526,6 +541,24 @@ the tables below are a shorter workflow-oriented overview.
526
541
  > `qeTrack.addTransition`; overlay clips remain a workaround for transitions that do not need
527
542
  > to blend adjacent source frames. See [issue #21](https://github.com/leancoderkavy/premiere-pro-mcp/issues/21).
528
543
 
544
+ > **Verified track edits:** `add_track` and `add_tracks` validate requested counts and
545
+ > return success only when the active sequence's track counts exactly match the request.
546
+ > `overwrite_clip` validates both selected track indices and confirms the requested source
547
+ > item appears at the requested frame on a target track. On a Premiere 26.x build that
548
+ > ignores any of these calls, the MCP response is an error with the observed state rather
549
+ > than a false success. These are automated CEP contracts, not proof of a particular
550
+ > licensed host configuration.
551
+
552
+ `trim_clip` accepts exactly one source-relative `new_in_seconds` or `new_out_seconds` per
553
+ call. It refuses retimed clips because CEP cannot prove their source-to-timeline mapping, then
554
+ reads both source points and visible timeline start/end/duration before reporting success. The
555
+ default `keyframe_policy: "reject"` stops before a trim that would leave effect keyframes beyond
556
+ the visible clip; `keyframe_policy: "preserve"` is an explicit opt-in and reports the remaining
557
+ count. `split_clip` verifies a spanning clip, the expected count increase, and the left/right
558
+ cut boundaries. Its QE path cannot prove effect-keyframe redistribution, so a successful result
559
+ labels those semantics `unverified`. These are CEP contract checks, not validation in a licensed
560
+ Premiere Pro 26.x host.
561
+
529
562
  ### Effects & Color (8)
530
563
 
531
564
  | Tool | Description |
@@ -536,6 +569,19 @@ the tables below are a shorter workflow-oriented overview.
536
569
  | `apply_lut` | Apply LUT files |
537
570
  | `stabilize_clip` | Warp Stabilizer with configurable settings |
538
571
 
572
+ > **Premiere 26.x component removal:** `remove_effect` and `remove_effect_by_name`
573
+ > require the CEP `Component.remove()` method. Some 26.x components, including
574
+ > Essential Sound's **Amplify**, do not expose that method. The tools return an
575
+ > actionable capability error and leave the component unchanged; use Effect Controls
576
+ > to remove it manually. The QE DOM has no safe targeted-removal fallback.
577
+
578
+ > **Essential Sound audio automation:** Essential Sound can write ducking or level
579
+ > automation to an **Amplify** component rather than the clip's **Volume > Level**.
580
+ > `adjust_audio_levels`, `set_clip_volume`, and `get_clip_volume` operate only on
581
+ > Volume > Level, so they do not read, change, or verify Amplify automation. Inspect
582
+ > the clip's components (or Effect Controls) before treating a Volume readback as the
583
+ > clip's final gain.
584
+
539
585
  ### Keyframes (8)
540
586
 
541
587
  | Tool | Description |
@@ -694,6 +740,8 @@ Then connect with:
694
740
  | `PREMIERE_DEFAULT_SEQUENCE_PRESET` | Override the auto-discovered `.sqpreset` used by `create_sequence` | auto-discovered |
695
741
  | `PREMIERE_MCP_CAPABILITIES` | Comma-separated authority profile; add `unsafe-script` only when raw scripting is required | `inspect,edit,export,filesystem` |
696
742
  | `PREMIERE_MCP_DEBUG` | Set to `1` (or `true`) to emit verbose server diagnostics to stderr | unset |
743
+ | `PREMIERE_CONTEXT_BACKEND` | Local project-context store: `auto`, `sqlite`, `json`, or `memory` | `auto` |
744
+ | `PREMIERE_CONTEXT_DIR` | Override the local project-context storage directory | OS application-data directory |
697
745
  | `PORT` | HTTP port (HTTP/SSE transport only) | `3000` |
698
746
  | `MCP_AUTH_TOKEN` | Bearer token required by the HTTP transport | unset |
699
747
  | `ALLOW_UNAUTHENTICATED` | Set to `1` to run HTTP without auth (unsafe; throwaway instances only) | unset |
@@ -717,7 +765,7 @@ premiere-pro-mcp/
717
765
  ├── src/
718
766
  │ ├── index.ts # Entry point — stdio transport setup
719
767
  │ ├── http-server.ts # Entry point — HTTP/SSE transport (Fly.io / remote)
720
- │ ├── server.ts # MCP server — registers 280 tools, filtered by authority profile
768
+ │ ├── server.ts # MCP server — registers 285 tools, filtered by authority profile
721
769
  │ ├── bridge/
722
770
  │ │ ├── file-bridge.ts # File-based IPC (write .jsx, poll .json)
723
771
  │ │ └── script-builder.ts # ExtendScript generator with ES3 helpers
Binary file
@@ -1,8 +1,8 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.premiere.bridge" ExtensionBundleVersion="1.11.0" ExtensionBundleName="MCP Bridge">
2
+ <ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.premiere.bridge" ExtensionBundleVersion="1.11.2" ExtensionBundleName="MCP Bridge">
3
3
  <ExtensionList>
4
- <Extension Id="com.mcp.premiere.bridge.panel" Version="1.11.0"/>
5
- <Extension Id="com.mcp.premiere.bridge.headless" Version="1.11.0"/>
4
+ <Extension Id="com.mcp.premiere.bridge.panel" Version="1.11.2"/>
5
+ <Extension Id="com.mcp.premiere.bridge.headless" Version="1.11.2"/>
6
6
  </ExtensionList>
7
7
  <ExecutionEnvironment>
8
8
  <HostList>
@@ -81,7 +81,7 @@
81
81
  <section class="update-section" aria-live="polite">
82
82
  <div class="update-copy">
83
83
  <span class="section-label">Connector updates</span>
84
- <strong id="updateTitle">Version 1.11.0</strong>
84
+ <strong id="updateTitle">Version 1.11.2</strong>
85
85
  <span id="updateDetail">Checking for updates…</span>
86
86
  </div>
87
87
  <button id="btnUpdate" class="button button-update" onclick="handleUpdateClick()" type="button" disabled>
@@ -7,7 +7,7 @@
7
7
  })(this, function () {
8
8
  "use strict";
9
9
 
10
- var CURRENT_VERSION = "1.11.0";
10
+ var CURRENT_VERSION = "1.11.2";
11
11
  var LATEST_RELEASE_API =
12
12
  "https://api.github.com/repos/leancoderkavy/premiere-pro-mcp/releases/latest";
13
13
  var RELEASES_URL =
@@ -0,0 +1,2 @@
1
+ export declare const PROJECT_CONTEXT_RESOURCE: string;
2
+ //# sourceMappingURL=project-context-resource.d.ts.map
@@ -0,0 +1,29 @@
1
+ export const PROJECT_CONTEXT_RESOURCE = JSON.stringify({
2
+ version: 1,
3
+ purpose: "Reuse clip, audio, transcript, shot, and timeline context without sending the full Premiere project on every model turn.",
4
+ workflow: [
5
+ "Call manage_project_context with action=capture for the active sequence.",
6
+ "Add expensive analysis once with action=enrich, using source_revision and timeline_revision guards when available.",
7
+ "Call search_project_context with the user's edit intent and only the relevant context kinds.",
8
+ "Use create_context_edit_plan to produce evidence candidates and expected revision guards.",
9
+ "Re-capture if the sequence changed, resolve exact identities, then use preview_edit_plan before apply_edit_plan.",
10
+ ],
11
+ revisionRules: {
12
+ sourceRevision: "Changes only when captured source-media identity changes; transcript, shot, and audio enrichments are reusable while it matches.",
13
+ timelineRevision: "Changes when timeline placement changes; it guards plans without invalidating unchanged source analysis.",
14
+ contextRevision: "Covers source state, timeline state, and enrichment content.",
15
+ },
16
+ privacy: [
17
+ "Context is stored locally and only after an explicit tool call.",
18
+ "Captured native media paths are hashed before persistence and are not returned by search.",
19
+ "Do not store credentials, unrelated customer data, or sensitive notes that are unnecessary for editing.",
20
+ "Use manage_project_context action=clear when the local context is no longer needed.",
21
+ ],
22
+ boundaries: [
23
+ "Capture indexes active-sequence structure and source identity; it does not transcribe or visually analyze footage.",
24
+ "Premiere transcript import/export support does not expose a documented API for starting Speech-to-Text.",
25
+ "create_context_edit_plan is non-mutating and does not prove that a candidate is editorially correct.",
26
+ "Every mutation still requires current Premiere identities, preview, authority checks, and post-state verification.",
27
+ ],
28
+ }, null, 2);
29
+ //# sourceMappingURL=project-context-resource.js.map
@@ -0,0 +1,79 @@
1
+ export declare const PROJECT_CONTEXT_SCHEMA_VERSION = 1;
2
+ export declare const MAX_CONTEXT_RECORDS = 10000;
3
+ export declare const MAX_CONTEXT_TEXT_LENGTH = 20000;
4
+ export type ProjectContextKind = "project" | "sequence" | "source" | "timeline" | "transcript" | "shot" | "audio" | "note";
5
+ export interface ProjectContextRecord {
6
+ id: string;
7
+ kind: ProjectContextKind;
8
+ name: string;
9
+ text: string;
10
+ keywords: string[];
11
+ sequenceId?: string;
12
+ sourceId?: string;
13
+ timelineItemId?: string;
14
+ startSeconds?: number;
15
+ endSeconds?: number;
16
+ trackType?: "video" | "audio";
17
+ trackIndex?: number;
18
+ sourceRevision?: string;
19
+ timelineRevision?: string;
20
+ mediaPathHash?: string;
21
+ metadata?: Record<string, unknown>;
22
+ indexedAt: string;
23
+ }
24
+ export interface ProjectContextDocument {
25
+ schemaVersion: typeof PROJECT_CONTEXT_SCHEMA_VERSION;
26
+ projectId: string;
27
+ projectName: string;
28
+ projectPathHash?: string;
29
+ revision: string;
30
+ sourceRevision: string;
31
+ timelineRevision: string;
32
+ updatedAt: string;
33
+ records: ProjectContextRecord[];
34
+ }
35
+ export interface ProjectContextSummary {
36
+ projectId: string;
37
+ projectName: string;
38
+ revision: string;
39
+ sourceRevision: string;
40
+ timelineRevision: string;
41
+ recordCount: number;
42
+ updatedAt: string;
43
+ }
44
+ export type ContextBackendName = "sqlite" | "json" | "memory";
45
+ export declare function defaultProjectContextDirectory(): string;
46
+ export interface ProjectContextRepositoryOptions {
47
+ backend?: "auto" | ContextBackendName;
48
+ directory?: string;
49
+ }
50
+ export declare class ProjectContextRepository {
51
+ private readonly options;
52
+ private backendPromise?;
53
+ constructor(options?: ProjectContextRepositoryOptions);
54
+ private createBackend;
55
+ private backend;
56
+ backendName(): Promise<ContextBackendName>;
57
+ get(projectId: string): Promise<ProjectContextDocument | undefined>;
58
+ put(document: ProjectContextDocument): Promise<void>;
59
+ delete(projectId: string): Promise<boolean>;
60
+ list(): Promise<ProjectContextSummary[]>;
61
+ close(): Promise<void>;
62
+ }
63
+ export interface ProjectContextSearchOptions {
64
+ query: string;
65
+ sequenceId?: string;
66
+ kinds?: ProjectContextKind[];
67
+ limit?: number;
68
+ }
69
+ export interface ProjectContextSearchResult {
70
+ score: number;
71
+ record: ProjectContextRecord;
72
+ matchedTerms: string[];
73
+ }
74
+ export declare function searchProjectContext(document: ProjectContextDocument, options: ProjectContextSearchOptions): ProjectContextSearchResult[];
75
+ export declare function contextRevision(sourceRevision: string, timelineRevision: string, records: ProjectContextRecord[]): string;
76
+ export declare function stableContextId(...parts: unknown[]): string;
77
+ export declare function normalizeContextText(value: unknown): string;
78
+ export declare function normalizeContextKeywords(value: unknown): string[];
79
+ //# sourceMappingURL=project-context-store.d.ts.map