@silo-code/sdk 0.6.0 → 0.7.0

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
@@ -58,10 +58,10 @@ exactly this surface — no more, no less.
58
58
 
59
59
  ## Docs
60
60
 
61
- - **Guide:** [Your first extension](https://github.com/silo-code/silo/blob/main/apps/docs/guide/getting-started.md)
62
- · [Publishing an extension](https://github.com/silo-code/silo/blob/main/apps/docs/guide/publishing-an-extension.md)
61
+ - **Guide:** [Your first extension](https://silo.dev/guide/getting-started)
62
+ · [Publishing an extension](https://silo.dev/guide/publishing-an-extension)
63
63
  - **API reference:** generated from this package — see the
64
- [docs site](https://github.com/silo-code/silo/tree/main/apps/docs).
64
+ [docs site](https://silo.dev/).
65
65
  - **Examples:** [`examples/extensions`](https://github.com/silo-code/silo/tree/main/examples/extensions).
66
66
 
67
67
  ## License
@@ -0,0 +1,29 @@
1
+ import { type ReactNode } from "react";
2
+ /**
3
+ * Lightweight tooltip — wraps any trigger element and shows a styled popup
4
+ * above it after a 600 ms hover delay. Renders via a portal so `overflow:
5
+ * hidden` parents and stacking contexts never clip it.
6
+ *
7
+ * The popup uses the host's design tokens and matches the status-bar tooltip
8
+ * style exactly. Display-only: `pointer-events: none`.
9
+ *
10
+ * The CSS classes (`.silo-tooltip`, `.silo-tooltip-host`) are provided by the
11
+ * host — no stylesheet import is needed in the extension.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * <Tooltip content="New File">
16
+ * <button onClick={createFile}>
17
+ * <FilePlus size="1.2em" />
18
+ * </button>
19
+ * </Tooltip>
20
+ * ```
21
+ *
22
+ * @category Core Types
23
+ * @public
24
+ */
25
+ export declare function Tooltip({ content, children, }: {
26
+ content: string;
27
+ children: ReactNode;
28
+ }): import("react").JSX.Element;
29
+ //# sourceMappingURL=Tooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../src/Tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAO1E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,OAAO,CAAC,EACtB,OAAO,EACP,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BA0CA"}
@@ -0,0 +1,68 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useLayoutEffect, useRef, useState } from "react";
3
+ import { createPortal } from "react-dom";
4
+ const DELAY_MS = 600;
5
+ const GAP_PX = 6;
6
+ const MARGIN_PX = 8;
7
+ /**
8
+ * Lightweight tooltip — wraps any trigger element and shows a styled popup
9
+ * above it after a 600 ms hover delay. Renders via a portal so `overflow:
10
+ * hidden` parents and stacking contexts never clip it.
11
+ *
12
+ * The popup uses the host's design tokens and matches the status-bar tooltip
13
+ * style exactly. Display-only: `pointer-events: none`.
14
+ *
15
+ * The CSS classes (`.silo-tooltip`, `.silo-tooltip-host`) are provided by the
16
+ * host — no stylesheet import is needed in the extension.
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * <Tooltip content="New File">
21
+ * <button onClick={createFile}>
22
+ * <FilePlus size="1.2em" />
23
+ * </button>
24
+ * </Tooltip>
25
+ * ```
26
+ *
27
+ * @category Core Types
28
+ * @public
29
+ */
30
+ export function Tooltip({ content, children, }) {
31
+ const ref = useRef(null);
32
+ const [anchor, setAnchor] = useState(null);
33
+ const timer = useRef(null);
34
+ const show = () => {
35
+ timer.current = setTimeout(() => {
36
+ const r = ref.current?.getBoundingClientRect();
37
+ if (r)
38
+ setAnchor({ cx: r.left + r.width / 2, top: r.top - GAP_PX });
39
+ }, DELAY_MS);
40
+ };
41
+ const hide = () => {
42
+ if (timer.current) {
43
+ clearTimeout(timer.current);
44
+ timer.current = null;
45
+ }
46
+ setAnchor(null);
47
+ };
48
+ return (_jsxs("span", { ref: ref, className: "silo-tooltip-host", onMouseEnter: show, onMouseLeave: hide, onPointerDown: hide, children: [children, anchor &&
49
+ createPortal(_jsx(TooltipPopup, { content: content, cx: anchor.cx, anchorTop: anchor.top }), document.body)] }));
50
+ }
51
+ function TooltipPopup({ content, cx, anchorTop, }) {
52
+ const popupRef = useRef(null);
53
+ const [style, setStyle] = useState({
54
+ visibility: "hidden",
55
+ });
56
+ useLayoutEffect(() => {
57
+ const el = popupRef.current;
58
+ if (!el)
59
+ return;
60
+ const w = el.offsetWidth;
61
+ const h = el.offsetHeight;
62
+ const left = Math.max(MARGIN_PX, Math.min(cx - w / 2, window.innerWidth - w - MARGIN_PX));
63
+ const top = anchorTop - h < MARGIN_PX ? anchorTop + GAP_PX * 2 : anchorTop - h;
64
+ setStyle({ left, top, visibility: "visible" });
65
+ }, [cx, anchorTop]);
66
+ return (_jsx("div", { ref: popupRef, className: "silo-tooltip", style: style, children: content }));
67
+ }
68
+ //# sourceMappingURL=Tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../src/Tooltip.tsx"],"names":[],"mappings":"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"}
@@ -130,8 +130,6 @@ export interface Workspace {
130
130
  activeSidePanelTabs?: Record<string, string>;
131
131
  sidePanelScrollPositions?: Record<string, number>;
132
132
  extensionState?: Record<string, Record<string, unknown>>;
133
- leftPanelCollapsed?: boolean;
134
- rightPanelCollapsed?: boolean;
135
133
  /** ID of the current preview (temporary) editor, if any. */
136
134
  previewEditorId?: string | null;
137
135
  }
@@ -1 +1 @@
1
- {"version":3,"file":"domain-types.d.ts","sourceRoot":"","sources":["../src/domain-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"domain-types.d.ts","sourceRoot":"","sources":["../src/domain-types.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,24 @@ export interface OpenFileOptions {
21
21
  * used and any existing tab's view is left unchanged.
22
22
  */
23
23
  viewType?: string;
24
+ /**
25
+ * Reveal and select a range when the editor opens — used to jump to a search
26
+ * match or a definition. Applied whether the tab is newly opened or already
27
+ * open (re-jumps an existing tab). All positions are **1-indexed**; `column`
28
+ * defaults to 1, and an omitted `endLine`/`endColumn` collapses the selection
29
+ * to a caret (just scrolls the line into view). Best-effort: editor views that
30
+ * can't honor a selection ignore it.
31
+ */
32
+ selection?: {
33
+ /** 1-indexed start line. */
34
+ line: number;
35
+ /** 1-indexed start column. Defaults to 1. */
36
+ column?: number;
37
+ /** 1-indexed end line. Defaults to `line`. */
38
+ endLine?: number;
39
+ /** 1-indexed end column. Defaults to `column`. */
40
+ endColumn?: number;
41
+ };
24
42
  }
25
43
  /**
26
44
  * One editor view that can render a given file — its id, user-facing label, and
@@ -1 +1 @@
1
- {"version":3,"file":"editor-service.d.ts","sourceRoot":"","sources":["../src/editor-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAM1C;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAC;IACX,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,kCAAkC;IAClC,IAAI,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,YAAY;IAC3B,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,oEAAoE;IACpE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAChC,OAAO,EAAE,kBAAkB,KACxB,OAAO,CAAC,WAAW,CAAC,CAAC;AAE1B;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACjD,oCAAoC;IACpC,YAAY,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAC3C;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAC3D,kFAAkF;IAClF,IAAI,IAAI,OAAO,CAAC;IAChB,+DAA+D;IAC/D,MAAM,IAAI,OAAO,CAAC;IAClB,8EAA8E;IAC9E,WAAW,IAAI,OAAO,CAAC;IACvB;;;;;;;OAOG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,EAAE,CAAC;IAClD;;;;;;;OAOG;IACH,WAAW,CACT,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9B,IAAI,CAAC;IACR;;;;OAIG;IACH,mBAAmB,CACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,kBAAkB,GAC3B,UAAU,CAAC;IACd;;;;OAIG;IACH,2BAA2B,CACzB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,mBAAmB,GAC5B,UAAU,CAAC;CACf"}
1
+ {"version":3,"file":"editor-service.d.ts","sourceRoot":"","sources":["../src/editor-service.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -9,7 +9,7 @@
9
9
  *
10
10
  * @packageDocumentation
11
11
  */
12
- export type { Disposable, DockPanelApi, EditorProps, EditorCapabilities, Editor, NewFileTemplate, FileType, Command, MenuId, MenuItemContribution, Keybinding, SidePanelProps, SidePanel, DockPanelKind, StatusItem, SettingsPage, ExtensionContext, Extension, ExtensionHandle, } from "./types";
12
+ export type { Disposable, DockPanelApi, EditorProps, EditorCapabilities, Editor, NewFileTemplate, FileType, Command, MenuId, MenuItemContribution, Keybinding, SidePanelProps, SidePanel, DockPanelKind, StatusItem, SettingsPage, ExtensionContext, Extension, ExtensionManifest, ExtensionHandle, } from "./types";
13
13
  export type { Workspace, EditorMode, EditorRecord, SidePanelSlot, } from "./domain-types";
14
14
  export type { WorkspaceService, WorkspaceState, CreateWorkspaceInput, } from "./workspace-service";
15
15
  export type { EditorService, EditorSaveHandlers, OpenFileOptions, EditorViewInfo, OpenDiffSpec, DiffContent, DiffContentRequest, DiffContentProvider, } from "./editor-service";
@@ -17,6 +17,7 @@ export type { LayoutService, LayoutState, SidePanelColumnState, SideLocation, }
17
17
  export type { ProcessService, ProcessSession, ProcessSpawnOptions, ProcessExecOptions, ProcessExecResult, } from "./process-service";
18
18
  export type { TerminalService, CreateTerminalInput, TerminalKind, TerminalRecord, } from "./terminal-service";
19
19
  export type { FileService, FileMeta, FileChangeEvent } from "./file-service";
20
+ export type { SearchService, SearchOptions, SearchMatch, SearchFileResult, SearchResponse, } from "./search-service";
20
21
  export type { Permission } from "./permissions";
21
22
  export { PathDeniedError } from "./permissions";
22
23
  export type { ThemeService, ThemeState, ThemePreset, ResolvedTheme, ThemeBase, ThemeVars, CustomTheme, ThemeExport, } from "./theme-service";
@@ -25,6 +26,7 @@ export type { DndService, DndItem, DndMime, DragInit, DndMode, DropContext, Drop
25
26
  export { DND_MIME } from "./dnd-service";
26
27
  export type { UiService, FileFilter, MenuItem, MenuItemTrailing, MenuSeparator, MenuHeader, MenuEntry, ShowMenuOptions, ConfirmOptions, PromptOptions, ModalOptions, NotifyAction, NotifyOptions, } from "./ui-service";
27
28
  export type { ContextKeys } from "./context-keys";
29
+ export { Tooltip } from "./Tooltip";
28
30
  export { useServiceState } from "./use-service-state";
29
31
  export type { ReactiveService } from "./use-service-state";
30
32
  export { useFocusGroup, focusGroupNextIndex } from "./use-focus-group";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,YAAY,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,MAAM,EACN,eAAe,EACf,QAAQ,EACR,OAAO,EACP,MAAM,EACN,oBAAoB,EACpB,UAAU,EACV,cAAc,EACd,SAAS,EACT,aAAa,EACb,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,eAAe,GAChB,MAAM,SAAS,CAAC;AAKjB,YAAY,EACV,SAAS,EACT,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAI7E,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAIhD,YAAY,EACV,YAAY,EACZ,UAAU,EACV,WAAW,EACX,aAAa,EACb,SAAS,EACT,SAAS,EACT,WAAW,EACX,WAAW,GACZ,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,YAAY,EACV,UAAU,EACV,OAAO,EACP,OAAO,EACP,QAAQ,EACR,OAAO,EACP,WAAW,EACX,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzC,YAAY,EACV,SAAS,EACT,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,SAAS,EACT,eAAe,EACf,cAAc,EACd,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,MAAM,cAAc,CAAC;AAGtB,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAK3D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACvE,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,YAAY,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,MAAM,EACN,eAAe,EACf,QAAQ,EACR,OAAO,EACP,MAAM,EACN,oBAAoB,EACpB,UAAU,EACV,cAAc,EACd,SAAS,EACT,aAAa,EACb,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,iBAAiB,EACjB,eAAe,GAChB,MAAM,SAAS,CAAC;AAKjB,YAAY,EACV,SAAS,EACT,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE7E,YAAY,EACV,aAAa,EACb,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAI1B,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAIhD,YAAY,EACV,YAAY,EACZ,UAAU,EACV,WAAW,EACX,aAAa,EACb,SAAS,EACT,SAAS,EACT,WAAW,EACX,WAAW,GACZ,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,YAAY,EACV,UAAU,EACV,OAAO,EACP,OAAO,EACP,QAAQ,EACR,OAAO,EACP,WAAW,EACX,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzC,YAAY,EACV,SAAS,EACT,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,SAAS,EACT,eAAe,EACf,cAAc,EACd,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,MAAM,cAAc,CAAC;AAGtB,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAK3D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACvE,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -11,6 +11,9 @@
11
11
  */
12
12
  export { PathDeniedError } from "./permissions";
13
13
  export { DND_MIME } from "./dnd-service";
14
+ // Tooltip — the same styled hover popup the host uses in the status bar.
15
+ // Extensions use this instead of native `title` attributes to match host chrome.
16
+ export { Tooltip } from "./Tooltip";
14
17
  // Runtime helpers. The one blessed way for an extension to read a `ctx`
15
18
  // service's reactive state in React — replaces hand-rolled useSyncExternalStore.
16
19
  export { useServiceState } from "./use-service-state";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA2EH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AA0BhD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAuBzC,wEAAwE;AACxE,iFAAiF;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAC9E,8EAA8E;AAC9E,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAoFH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AA0BhD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAuBzC,yEAAyE;AACzE,iFAAiF;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,wEAAwE;AACxE,iFAAiF;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAC9E,8EAA8E;AAC9E,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -42,5 +42,12 @@ export interface LayoutService {
42
42
  toggleSidePanel(location: SideLocation): void;
43
43
  /** Set a side column's collapsed state explicitly. */
44
44
  setSidePanelCollapsed(location: SideLocation, collapsed: boolean): void;
45
+ /**
46
+ * Reveal a registered side panel by its {@link SidePanel.id}: make it the
47
+ * active panel in its column and expand that column if collapsed. Use to bring
48
+ * a panel to the foreground from a command or keybinding (e.g. "Find in Files"
49
+ * focusing the Search panel). No-op if no panel with that id is registered.
50
+ */
51
+ revealSidePanel(id: string): void;
45
52
  }
46
53
  //# sourceMappingURL=layout-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout-service.d.ts","sourceRoot":"","sources":["../src/layout-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,kDAAkD;IAClD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,QAAQ,IAAI,WAAW,CAAC;IACxB,oDAAoD;IACpD,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,IAAI,GAAG,UAAU,CAAC;IAC1D,2DAA2D;IAC3D,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9C,sDAAsD;IACtD,qBAAqB,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;CACzE"}
1
+ {"version":3,"file":"layout-service.d.ts","sourceRoot":"","sources":["../src/layout-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,kDAAkD;IAClD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,QAAQ,IAAI,WAAW,CAAC;IACxB,oDAAoD;IACpD,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,IAAI,GAAG,UAAU,CAAC;IAC1D,2DAA2D;IAC3D,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC9C,sDAAsD;IACtD,qBAAqB,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IACxE;;;;;OAKG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Options for {@link SearchService.search}. All flags default to off / empty;
3
+ * an omitted `options` runs a plain, case-insensitive substring search over the
4
+ * active workspace, respecting `.gitignore`.
5
+ *
6
+ * @category Consumer Services
7
+ * @public
8
+ */
9
+ export interface SearchOptions {
10
+ /**
11
+ * Search root. Defaults to the open **workspace folder** when omitted. A `cwd`
12
+ * outside the workspace throws {@link PathDeniedError} unless the extension
13
+ * declared the `process` {@link Permission}; first-party extensions are unscoped.
14
+ */
15
+ cwd?: string;
16
+ /** Treat `query` as a regular expression instead of a literal string. */
17
+ regex?: boolean;
18
+ /** Match case exactly. When false (default), the search is case-insensitive. */
19
+ caseSensitive?: boolean;
20
+ /** Match whole words only (word boundaries around the query). */
21
+ wholeWord?: boolean;
22
+ /**
23
+ * Glob patterns of files to include (e.g. `["*.ts", "src/**"]`). When empty,
24
+ * all files are eligible (still subject to `.gitignore` and `excludeGlobs`).
25
+ */
26
+ includeGlobs?: string[];
27
+ /** Glob patterns of files to exclude (e.g. `["**\/dist/**"]`), on top of `.gitignore`. */
28
+ excludeGlobs?: string[];
29
+ /**
30
+ * Cap on the total number of matches collected across all files. When the cap
31
+ * is hit, the search stops early and {@link SearchResponse.truncated} is true.
32
+ */
33
+ maxResults?: number;
34
+ }
35
+ /**
36
+ * One matching line within a file, returned in {@link SearchFileResult.matches}.
37
+ *
38
+ * @category Consumer Services
39
+ * @public
40
+ */
41
+ export interface SearchMatch {
42
+ /** 1-indexed line number of the match within the file. */
43
+ line: number;
44
+ /**
45
+ * The matched line's text, suitable for a preview. Very long lines are
46
+ * truncated by the host; `ranges` are adjusted to stay valid against this string.
47
+ */
48
+ preview: string;
49
+ /**
50
+ * Character ranges of the matches within {@link SearchMatch.preview}, each
51
+ * `[start, end)` (0-indexed, end-exclusive). A line can contain several matches.
52
+ */
53
+ ranges: Array<[number, number]>;
54
+ }
55
+ /**
56
+ * All matches for a single file, returned in {@link SearchResponse.files}.
57
+ *
58
+ * @category Consumer Services
59
+ * @public
60
+ */
61
+ export interface SearchFileResult {
62
+ /** File path **relative to** the search `cwd` (the workspace folder by default). */
63
+ path: string;
64
+ /** The matching lines within this file, in file order. */
65
+ matches: SearchMatch[];
66
+ }
67
+ /**
68
+ * The result of a {@link SearchService.search} call — matches grouped by file
69
+ * plus totals for the summary line ("N results in M files").
70
+ *
71
+ * @category Consumer Services
72
+ * @public
73
+ */
74
+ export interface SearchResponse {
75
+ /** Files that contained at least one match, in traversal order. */
76
+ files: SearchFileResult[];
77
+ /** Total number of matches across every file. */
78
+ totalMatches: number;
79
+ /**
80
+ * True when the search stopped early at {@link SearchOptions.maxResults} — the
81
+ * results are a prefix, not the complete set.
82
+ */
83
+ truncated: boolean;
84
+ }
85
+ /**
86
+ * Cross-file content search, exposed as {@link ExtensionContext.search}. Runs a
87
+ * native search engine in the host (off the UI thread) over the workspace,
88
+ * honoring `.gitignore`, and resolves with matches grouped by file.
89
+ *
90
+ * The contract is intentionally extensible: a future replace capability can be
91
+ * added as an additional method without breaking this one, and
92
+ * {@link SearchMatch.ranges} + {@link SearchFileResult.path} already carry the
93
+ * precise locations such a replace would target.
94
+ *
95
+ * @category Consumer Services
96
+ * @public
97
+ */
98
+ export interface SearchService {
99
+ /**
100
+ * Search file contents under {@link SearchOptions.cwd} (the active workspace
101
+ * folder by default). Resolves with an empty {@link SearchResponse} for an
102
+ * empty `query`. Rejects only if the search could not be started (e.g. the cwd
103
+ * is denied); a search that simply finds nothing resolves with no files.
104
+ *
105
+ * @param query - The text or regex (see {@link SearchOptions.regex}) to find.
106
+ * @param options - Optional {@link SearchOptions}.
107
+ * @example
108
+ * ```ts
109
+ * const { files, totalMatches } = await ctx.search.search("tokyo", {
110
+ * caseSensitive: false,
111
+ * excludeGlobs: ["**\/dist/**"],
112
+ * });
113
+ * ```
114
+ */
115
+ search(query: string, options?: SearchOptions): Promise<SearchResponse>;
116
+ }
117
+ //# sourceMappingURL=search-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-service.d.ts","sourceRoot":"","sources":["../src/search-service.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gFAAgF;IAChF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iEAAiE;IACjE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,0FAA0F;IAC1F,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACjC;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,mEAAmE;IACnE,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACzE"}
@@ -0,0 +1,6 @@
1
+ // `ctx.search` — cross-file content search over the workspace. The core
2
+ // primitive under the Search panel (and future quick-open / find-references).
3
+ // Backed by a native search engine in the host; results come back grouped by
4
+ // file so a UI can render collapsible per-file sections with line previews.
5
+ export {};
6
+ //# sourceMappingURL=search-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-service.js","sourceRoot":"","sources":["../src/search-service.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,8EAA8E;AAC9E,6EAA6E;AAC7E,4EAA4E"}
package/dist/types.d.ts CHANGED
@@ -26,6 +26,7 @@ import type { LayoutService } from "./layout-service";
26
26
  import type { ProcessService } from "./process-service";
27
27
  import type { TerminalService } from "./terminal-service";
28
28
  import type { FileService } from "./file-service";
29
+ import type { SearchService } from "./search-service";
29
30
  import type { ThemeService, ThemePreset } from "./theme-service";
30
31
  import type { DndService } from "./dnd-service";
31
32
  import type { UiService } from "./ui-service";
@@ -304,6 +305,14 @@ export interface StatusItem {
304
305
  alignment: "left" | "right";
305
306
  /** Sort order within its alignment group. Lower sorts first. Defaults to 0. */
306
307
  priority?: number;
308
+ /**
309
+ * Tooltip shown on hover over the entire status item. The host renders a
310
+ * custom-styled popup (not the browser's native `title` tooltip). For items
311
+ * that need per-button or reactive tooltips, omit this and manage tooltips
312
+ * inside the component instead (core extensions use `<Tooltip>` from the
313
+ * internal barrel; external extensions may use the native `title` attribute).
314
+ */
315
+ tooltip?: string;
307
316
  /** The React component (renders its own content; no props). */
308
317
  component: React.ComponentType;
309
318
  }
@@ -409,6 +418,13 @@ export interface ExtensionContext {
409
418
  * for the filesystem; watcher lifecycle is host-owned (see {@link FileService}).
410
419
  */
411
420
  readonly files: FileService;
421
+ /**
422
+ * Cross-file content search over the workspace — the core primitive under the
423
+ * Search panel (and future quick-open / find-references). Runs a native search
424
+ * engine in the host (off the UI thread), honoring `.gitignore`, and resolves
425
+ * with matches grouped by file. See {@link SearchService}.
426
+ */
427
+ readonly search: SearchService;
412
428
  /**
413
429
  * Consumer API for the theme domain — read the merged preset set + active
414
430
  * theme, switch themes, and manage custom themes. Read via getState /
@@ -462,6 +478,34 @@ export interface ExtensionHandle<API = unknown> {
462
478
  * hasn't activated or published nothing. */
463
479
  readonly api: API | undefined;
464
480
  }
481
+ /**
482
+ * Display metadata for an extension, surfaced in the **Extensions** settings
483
+ * page (name, one-line description, version, and {@link ExtensionManifest.publisher
484
+ * | publisher} brand). For built-in extensions this is declared in-code on the
485
+ * {@link Extension}; for runtime-loaded third-party extensions the host reads
486
+ * the equivalent fields from the package manifest (`displayName`/`description`/
487
+ * `version` and the `silo.publisher` key) instead. Every field is optional — the
488
+ * host falls back to the extension {@link Extension.id | id} (and the id's
489
+ * namespace for the publisher) when one is absent.
490
+ *
491
+ * @category Extension Contract
492
+ * @public
493
+ */
494
+ export interface ExtensionManifest {
495
+ /** Human-friendly name shown in the Extensions list (falls back to the id). */
496
+ readonly name?: string;
497
+ /** One-line description shown beneath the name. */
498
+ readonly description?: string;
499
+ /** Version string shown next to the name. */
500
+ readonly version?: string;
501
+ /**
502
+ * The publisher/brand shown beside the name (e.g. `"Silo"`). Built-in
503
+ * extensions are always branded `"Silo"` by the host regardless of this field;
504
+ * third-party extensions set it via the `silo.publisher` manifest key and fall
505
+ * back to their id's namespace (e.g. `"acme"` for `"acme.foo"`).
506
+ */
507
+ readonly publisher?: string;
508
+ }
465
509
  /**
466
510
  * The shape of a Silo extension: a stable id plus an
467
511
  * {@link Extension.activate | activate} function the host calls once, passing
@@ -482,6 +526,13 @@ export interface Extension<API = unknown> {
482
526
  * third parties (e.g. `"core.editor"`, `"silo.git"`, `"acme.foo"`).
483
527
  */
484
528
  id: string;
529
+ /**
530
+ * Optional display metadata for the **Extensions** settings page. Built-in
531
+ * extensions declare it here so they can be listed (and disabled) with a name
532
+ * and description; third-party extensions supply the equivalent through their
533
+ * package manifest instead. See {@link ExtensionManifest}.
534
+ */
535
+ manifest?: ExtensionManifest;
485
536
  /**
486
537
  * Called once by the host; register contributions against `ctx` here.
487
538
  * **Optionally return an API object** to publish it for other extensions to
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -465,5 +465,20 @@ export interface UiService {
465
465
  * ```
466
466
  */
467
467
  openExternal(url: string): Promise<void>;
468
+ /**
469
+ * The text currently selected in the **focused surface** — the active editor
470
+ * or a focused terminal — or `null` when nothing is selected. Reads the
471
+ * most-recently-focused of the two, so a command (e.g. "Find in Files") can
472
+ * seed itself with whatever the user has highlighted regardless of which
473
+ * surface has focus. Returns `null` (never throws) when no surface is focused
474
+ * or the selection is empty.
475
+ *
476
+ * @example
477
+ * ```ts
478
+ * const seed = ctx.ui.getActiveSelectionText();
479
+ * if (seed) runSearch(seed);
480
+ * ```
481
+ */
482
+ getActiveSelectionText(): string | null;
468
483
  }
469
484
  //# sourceMappingURL=ui-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui-service.d.ts","sourceRoot":"","sources":["../src/ui-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0DAA0D;IAC1D,IAAI,EAAE,SAAS,CAAC;IAChB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACvB,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,GAAG,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,gFAAgF;IAChF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,YAAY;IAC3B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sEAAsE;IACtE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC;AAE9D;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,0EAA0E;IAC1E,EAAE,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,mEAAmE;IACnE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,mFAAmF;IACnF,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACxB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,SAAS;IACxB;;;;;OAKG;IACH,UAAU,CAAC,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACpE;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;KACxB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3B;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;KACxB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,MAAM,CACJ,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,EAChC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,aAAa,GACtB,IAAI,CAAC;IACR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD;;;;;;;;;OASG;IACH,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,SAAS,CAAC,CAAC,GAAG,IAAI,EAChB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,KAAK,SAAS,EAClD,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C"}
1
+ {"version":3,"file":"ui-service.d.ts","sourceRoot":"","sources":["../src/ui-service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@silo-code/sdk",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "The public, types-first SDK for building Silo extensions — the only surface third-party extensions import.",
5
5
  "license": "MIT",
6
6
  "author": "Dave Weaver",
@@ -20,35 +20,41 @@
20
20
  "type": "module",
21
21
  "sideEffects": false,
22
22
  "exports": {
23
- ".": {
24
- "types": "./dist/index.d.ts",
25
- "import": "./dist/index.js"
26
- }
23
+ ".": "./src/index.ts"
27
24
  },
28
25
  "files": [
29
26
  "src",
30
27
  "dist"
31
28
  ],
29
+ "scripts": {
30
+ "build": "tsc -p tsconfig.build.json",
31
+ "prepack": "pnpm build",
32
+ "test": "vitest run",
33
+ "test:watch": "vitest"
34
+ },
32
35
  "publishConfig": {
33
- "access": "public"
36
+ "access": "public",
37
+ "exports": {
38
+ ".": {
39
+ "types": "./dist/index.d.ts",
40
+ "import": "./dist/index.js"
41
+ }
42
+ },
43
+ "main": "./dist/index.js",
44
+ "module": "./dist/index.js",
45
+ "types": "./dist/index.d.ts"
34
46
  },
35
47
  "peerDependencies": {
36
- "react": "^19.1.0"
48
+ "react": "^19.1.0",
49
+ "react-dom": "^19.1.0"
37
50
  },
38
51
  "dependencies": {
39
52
  "dockview": "~6.3.0"
40
53
  },
41
54
  "devDependencies": {
42
55
  "@types/react": "^19.1.8",
56
+ "@types/react-dom": "^19.1.0",
43
57
  "typescript": "~5.8.3",
44
58
  "vitest": "^4.1.7"
45
- },
46
- "scripts": {
47
- "build": "tsc -p tsconfig.build.json",
48
- "test": "vitest run",
49
- "test:watch": "vitest"
50
- },
51
- "main": "./dist/index.js",
52
- "module": "./dist/index.js",
53
- "types": "./dist/index.d.ts"
54
- }
59
+ }
60
+ }
@@ -0,0 +1,116 @@
1
+ import { useLayoutEffect, useRef, useState, type ReactNode } from "react";
2
+ import { createPortal } from "react-dom";
3
+
4
+ const DELAY_MS = 600;
5
+ const GAP_PX = 6;
6
+ const MARGIN_PX = 8;
7
+
8
+ /**
9
+ * Lightweight tooltip — wraps any trigger element and shows a styled popup
10
+ * above it after a 600 ms hover delay. Renders via a portal so `overflow:
11
+ * hidden` parents and stacking contexts never clip it.
12
+ *
13
+ * The popup uses the host's design tokens and matches the status-bar tooltip
14
+ * style exactly. Display-only: `pointer-events: none`.
15
+ *
16
+ * The CSS classes (`.silo-tooltip`, `.silo-tooltip-host`) are provided by the
17
+ * host — no stylesheet import is needed in the extension.
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * <Tooltip content="New File">
22
+ * <button onClick={createFile}>
23
+ * <FilePlus size="1.2em" />
24
+ * </button>
25
+ * </Tooltip>
26
+ * ```
27
+ *
28
+ * @category Core Types
29
+ * @public
30
+ */
31
+ export function Tooltip({
32
+ content,
33
+ children,
34
+ }: {
35
+ content: string;
36
+ children: ReactNode;
37
+ }) {
38
+ const ref = useRef<HTMLSpanElement>(null);
39
+ const [anchor, setAnchor] = useState<{ cx: number; top: number } | null>(
40
+ null,
41
+ );
42
+ const timer = useRef<ReturnType<typeof setTimeout> | null>(null);
43
+
44
+ const show = () => {
45
+ timer.current = setTimeout(() => {
46
+ const r = ref.current?.getBoundingClientRect();
47
+ if (r) setAnchor({ cx: r.left + r.width / 2, top: r.top - GAP_PX });
48
+ }, DELAY_MS);
49
+ };
50
+
51
+ const hide = () => {
52
+ if (timer.current) {
53
+ clearTimeout(timer.current);
54
+ timer.current = null;
55
+ }
56
+ setAnchor(null);
57
+ };
58
+
59
+ return (
60
+ <span
61
+ ref={ref}
62
+ className="silo-tooltip-host"
63
+ onMouseEnter={show}
64
+ onMouseLeave={hide}
65
+ onPointerDown={hide}
66
+ >
67
+ {children}
68
+ {anchor &&
69
+ createPortal(
70
+ <TooltipPopup
71
+ content={content}
72
+ cx={anchor.cx}
73
+ anchorTop={anchor.top}
74
+ />,
75
+ document.body,
76
+ )}
77
+ </span>
78
+ );
79
+ }
80
+
81
+ function TooltipPopup({
82
+ content,
83
+ cx,
84
+ anchorTop,
85
+ }: {
86
+ content: string;
87
+ cx: number;
88
+ anchorTop: number;
89
+ }) {
90
+ const popupRef = useRef<HTMLDivElement>(null);
91
+ const [style, setStyle] = useState<React.CSSProperties>({
92
+ visibility: "hidden",
93
+ });
94
+
95
+ useLayoutEffect(() => {
96
+ const el = popupRef.current;
97
+ if (!el) return;
98
+ const w = el.offsetWidth;
99
+ const h = el.offsetHeight;
100
+
101
+ const left = Math.max(
102
+ MARGIN_PX,
103
+ Math.min(cx - w / 2, window.innerWidth - w - MARGIN_PX),
104
+ );
105
+ const top =
106
+ anchorTop - h < MARGIN_PX ? anchorTop + GAP_PX * 2 : anchorTop - h;
107
+
108
+ setStyle({ left, top, visibility: "visible" });
109
+ }, [cx, anchorTop]);
110
+
111
+ return (
112
+ <div ref={popupRef} className="silo-tooltip" style={style}>
113
+ {content}
114
+ </div>
115
+ );
116
+ }
@@ -133,8 +133,6 @@ export interface Workspace {
133
133
  activeSidePanelTabs?: Record<string, string>;
134
134
  sidePanelScrollPositions?: Record<string, number>;
135
135
  extensionState?: Record<string, Record<string, unknown>>;
136
- leftPanelCollapsed?: boolean;
137
- rightPanelCollapsed?: boolean;
138
136
  /** ID of the current preview (temporary) editor, if any. */
139
137
  previewEditorId?: string | null;
140
138
  }
@@ -26,6 +26,24 @@ export interface OpenFileOptions {
26
26
  * used and any existing tab's view is left unchanged.
27
27
  */
28
28
  viewType?: string;
29
+ /**
30
+ * Reveal and select a range when the editor opens — used to jump to a search
31
+ * match or a definition. Applied whether the tab is newly opened or already
32
+ * open (re-jumps an existing tab). All positions are **1-indexed**; `column`
33
+ * defaults to 1, and an omitted `endLine`/`endColumn` collapses the selection
34
+ * to a caret (just scrolls the line into view). Best-effort: editor views that
35
+ * can't honor a selection ignore it.
36
+ */
37
+ selection?: {
38
+ /** 1-indexed start line. */
39
+ line: number;
40
+ /** 1-indexed start column. Defaults to 1. */
41
+ column?: number;
42
+ /** 1-indexed end line. Defaults to `line`. */
43
+ endLine?: number;
44
+ /** 1-indexed end column. Defaults to `column`. */
45
+ endColumn?: number;
46
+ };
29
47
  }
30
48
 
31
49
  /**
package/src/index.ts CHANGED
@@ -30,6 +30,7 @@ export type {
30
30
  SettingsPage,
31
31
  ExtensionContext,
32
32
  Extension,
33
+ ExtensionManifest,
33
34
  ExtensionHandle,
34
35
  } from "./types";
35
36
 
@@ -79,6 +80,14 @@ export type {
79
80
  TerminalRecord,
80
81
  } from "./terminal-service";
81
82
  export type { FileService, FileMeta, FileChangeEvent } from "./file-service";
83
+ // Cross-file content search exposed on the ExtensionContext as `ctx.search`.
84
+ export type {
85
+ SearchService,
86
+ SearchOptions,
87
+ SearchMatch,
88
+ SearchFileResult,
89
+ SearchResponse,
90
+ } from "./search-service";
82
91
  // The permission surface: the capability vocabulary an extension declares, and
83
92
  // the error the host throws when an extension reaches outside the workspace
84
93
  // without the matching grant. `PathDeniedError` is a class (a runtime value).
@@ -132,6 +141,10 @@ export type {
132
141
  // Context keys referenced by `when` predicates on menu items / keybindings.
133
142
  export type { ContextKeys } from "./context-keys";
134
143
 
144
+ // Tooltip — the same styled hover popup the host uses in the status bar.
145
+ // Extensions use this instead of native `title` attributes to match host chrome.
146
+ export { Tooltip } from "./Tooltip";
147
+
135
148
  // Runtime helpers. The one blessed way for an extension to read a `ctx`
136
149
  // service's reactive state in React — replaces hand-rolled useSyncExternalStore.
137
150
  export { useServiceState } from "./use-service-state";
@@ -46,4 +46,11 @@ export interface LayoutService {
46
46
  toggleSidePanel(location: SideLocation): void;
47
47
  /** Set a side column's collapsed state explicitly. */
48
48
  setSidePanelCollapsed(location: SideLocation, collapsed: boolean): void;
49
+ /**
50
+ * Reveal a registered side panel by its {@link SidePanel.id}: make it the
51
+ * active panel in its column and expand that column if collapsed. Use to bring
52
+ * a panel to the foreground from a command or keybinding (e.g. "Find in Files"
53
+ * focusing the Search panel). No-op if no panel with that id is registered.
54
+ */
55
+ revealSidePanel(id: string): void;
49
56
  }
@@ -0,0 +1,125 @@
1
+ // `ctx.search` — cross-file content search over the workspace. The core
2
+ // primitive under the Search panel (and future quick-open / find-references).
3
+ // Backed by a native search engine in the host; results come back grouped by
4
+ // file so a UI can render collapsible per-file sections with line previews.
5
+
6
+ /**
7
+ * Options for {@link SearchService.search}. All flags default to off / empty;
8
+ * an omitted `options` runs a plain, case-insensitive substring search over the
9
+ * active workspace, respecting `.gitignore`.
10
+ *
11
+ * @category Consumer Services
12
+ * @public
13
+ */
14
+ export interface SearchOptions {
15
+ /**
16
+ * Search root. Defaults to the open **workspace folder** when omitted. A `cwd`
17
+ * outside the workspace throws {@link PathDeniedError} unless the extension
18
+ * declared the `process` {@link Permission}; first-party extensions are unscoped.
19
+ */
20
+ cwd?: string;
21
+ /** Treat `query` as a regular expression instead of a literal string. */
22
+ regex?: boolean;
23
+ /** Match case exactly. When false (default), the search is case-insensitive. */
24
+ caseSensitive?: boolean;
25
+ /** Match whole words only (word boundaries around the query). */
26
+ wholeWord?: boolean;
27
+ /**
28
+ * Glob patterns of files to include (e.g. `["*.ts", "src/**"]`). When empty,
29
+ * all files are eligible (still subject to `.gitignore` and `excludeGlobs`).
30
+ */
31
+ includeGlobs?: string[];
32
+ /** Glob patterns of files to exclude (e.g. `["**\/dist/**"]`), on top of `.gitignore`. */
33
+ excludeGlobs?: string[];
34
+ /**
35
+ * Cap on the total number of matches collected across all files. When the cap
36
+ * is hit, the search stops early and {@link SearchResponse.truncated} is true.
37
+ */
38
+ maxResults?: number;
39
+ }
40
+
41
+ /**
42
+ * One matching line within a file, returned in {@link SearchFileResult.matches}.
43
+ *
44
+ * @category Consumer Services
45
+ * @public
46
+ */
47
+ export interface SearchMatch {
48
+ /** 1-indexed line number of the match within the file. */
49
+ line: number;
50
+ /**
51
+ * The matched line's text, suitable for a preview. Very long lines are
52
+ * truncated by the host; `ranges` are adjusted to stay valid against this string.
53
+ */
54
+ preview: string;
55
+ /**
56
+ * Character ranges of the matches within {@link SearchMatch.preview}, each
57
+ * `[start, end)` (0-indexed, end-exclusive). A line can contain several matches.
58
+ */
59
+ ranges: Array<[number, number]>;
60
+ }
61
+
62
+ /**
63
+ * All matches for a single file, returned in {@link SearchResponse.files}.
64
+ *
65
+ * @category Consumer Services
66
+ * @public
67
+ */
68
+ export interface SearchFileResult {
69
+ /** File path **relative to** the search `cwd` (the workspace folder by default). */
70
+ path: string;
71
+ /** The matching lines within this file, in file order. */
72
+ matches: SearchMatch[];
73
+ }
74
+
75
+ /**
76
+ * The result of a {@link SearchService.search} call — matches grouped by file
77
+ * plus totals for the summary line ("N results in M files").
78
+ *
79
+ * @category Consumer Services
80
+ * @public
81
+ */
82
+ export interface SearchResponse {
83
+ /** Files that contained at least one match, in traversal order. */
84
+ files: SearchFileResult[];
85
+ /** Total number of matches across every file. */
86
+ totalMatches: number;
87
+ /**
88
+ * True when the search stopped early at {@link SearchOptions.maxResults} — the
89
+ * results are a prefix, not the complete set.
90
+ */
91
+ truncated: boolean;
92
+ }
93
+
94
+ /**
95
+ * Cross-file content search, exposed as {@link ExtensionContext.search}. Runs a
96
+ * native search engine in the host (off the UI thread) over the workspace,
97
+ * honoring `.gitignore`, and resolves with matches grouped by file.
98
+ *
99
+ * The contract is intentionally extensible: a future replace capability can be
100
+ * added as an additional method without breaking this one, and
101
+ * {@link SearchMatch.ranges} + {@link SearchFileResult.path} already carry the
102
+ * precise locations such a replace would target.
103
+ *
104
+ * @category Consumer Services
105
+ * @public
106
+ */
107
+ export interface SearchService {
108
+ /**
109
+ * Search file contents under {@link SearchOptions.cwd} (the active workspace
110
+ * folder by default). Resolves with an empty {@link SearchResponse} for an
111
+ * empty `query`. Rejects only if the search could not be started (e.g. the cwd
112
+ * is denied); a search that simply finds nothing resolves with no files.
113
+ *
114
+ * @param query - The text or regex (see {@link SearchOptions.regex}) to find.
115
+ * @param options - Optional {@link SearchOptions}.
116
+ * @example
117
+ * ```ts
118
+ * const { files, totalMatches } = await ctx.search.search("tokyo", {
119
+ * caseSensitive: false,
120
+ * excludeGlobs: ["**\/dist/**"],
121
+ * });
122
+ * ```
123
+ */
124
+ search(query: string, options?: SearchOptions): Promise<SearchResponse>;
125
+ }
package/src/types.ts CHANGED
@@ -26,6 +26,7 @@ import type { LayoutService } from "./layout-service";
26
26
  import type { ProcessService } from "./process-service";
27
27
  import type { TerminalService } from "./terminal-service";
28
28
  import type { FileService } from "./file-service";
29
+ import type { SearchService } from "./search-service";
29
30
  import type { ThemeService, ThemePreset } from "./theme-service";
30
31
  import type { DndService } from "./dnd-service";
31
32
  import type { UiService } from "./ui-service";
@@ -319,6 +320,14 @@ export interface StatusItem {
319
320
  alignment: "left" | "right";
320
321
  /** Sort order within its alignment group. Lower sorts first. Defaults to 0. */
321
322
  priority?: number;
323
+ /**
324
+ * Tooltip shown on hover over the entire status item. The host renders a
325
+ * custom-styled popup (not the browser's native `title` tooltip). For items
326
+ * that need per-button or reactive tooltips, omit this and manage tooltips
327
+ * inside the component instead (core extensions use `<Tooltip>` from the
328
+ * internal barrel; external extensions may use the native `title` attribute).
329
+ */
330
+ tooltip?: string;
322
331
  /** The React component (renders its own content; no props). */
323
332
  component: React.ComponentType;
324
333
  }
@@ -426,6 +435,13 @@ export interface ExtensionContext {
426
435
  * for the filesystem; watcher lifecycle is host-owned (see {@link FileService}).
427
436
  */
428
437
  readonly files: FileService;
438
+ /**
439
+ * Cross-file content search over the workspace — the core primitive under the
440
+ * Search panel (and future quick-open / find-references). Runs a native search
441
+ * engine in the host (off the UI thread), honoring `.gitignore`, and resolves
442
+ * with matches grouped by file. See {@link SearchService}.
443
+ */
444
+ readonly search: SearchService;
429
445
  /**
430
446
  * Consumer API for the theme domain — read the merged preset set + active
431
447
  * theme, switch themes, and manage custom themes. Read via getState /
@@ -481,6 +497,35 @@ export interface ExtensionHandle<API = unknown> {
481
497
  readonly api: API | undefined;
482
498
  }
483
499
 
500
+ /**
501
+ * Display metadata for an extension, surfaced in the **Extensions** settings
502
+ * page (name, one-line description, version, and {@link ExtensionManifest.publisher
503
+ * | publisher} brand). For built-in extensions this is declared in-code on the
504
+ * {@link Extension}; for runtime-loaded third-party extensions the host reads
505
+ * the equivalent fields from the package manifest (`displayName`/`description`/
506
+ * `version` and the `silo.publisher` key) instead. Every field is optional — the
507
+ * host falls back to the extension {@link Extension.id | id} (and the id's
508
+ * namespace for the publisher) when one is absent.
509
+ *
510
+ * @category Extension Contract
511
+ * @public
512
+ */
513
+ export interface ExtensionManifest {
514
+ /** Human-friendly name shown in the Extensions list (falls back to the id). */
515
+ readonly name?: string;
516
+ /** One-line description shown beneath the name. */
517
+ readonly description?: string;
518
+ /** Version string shown next to the name. */
519
+ readonly version?: string;
520
+ /**
521
+ * The publisher/brand shown beside the name (e.g. `"Silo"`). Built-in
522
+ * extensions are always branded `"Silo"` by the host regardless of this field;
523
+ * third-party extensions set it via the `silo.publisher` manifest key and fall
524
+ * back to their id's namespace (e.g. `"acme"` for `"acme.foo"`).
525
+ */
526
+ readonly publisher?: string;
527
+ }
528
+
484
529
  /**
485
530
  * The shape of a Silo extension: a stable id plus an
486
531
  * {@link Extension.activate | activate} function the host calls once, passing
@@ -501,6 +546,13 @@ export interface Extension<API = unknown> {
501
546
  * third parties (e.g. `"core.editor"`, `"silo.git"`, `"acme.foo"`).
502
547
  */
503
548
  id: string;
549
+ /**
550
+ * Optional display metadata for the **Extensions** settings page. Built-in
551
+ * extensions declare it here so they can be listed (and disabled) with a name
552
+ * and description; third-party extensions supply the equivalent through their
553
+ * package manifest instead. See {@link ExtensionManifest}.
554
+ */
555
+ manifest?: ExtensionManifest;
504
556
  /**
505
557
  * Called once by the host; register contributions against `ctx` here.
506
558
  * **Optionally return an API object** to publish it for other extensions to
package/src/ui-service.ts CHANGED
@@ -484,4 +484,19 @@ export interface UiService {
484
484
  * ```
485
485
  */
486
486
  openExternal(url: string): Promise<void>;
487
+ /**
488
+ * The text currently selected in the **focused surface** — the active editor
489
+ * or a focused terminal — or `null` when nothing is selected. Reads the
490
+ * most-recently-focused of the two, so a command (e.g. "Find in Files") can
491
+ * seed itself with whatever the user has highlighted regardless of which
492
+ * surface has focus. Returns `null` (never throws) when no surface is focused
493
+ * or the selection is empty.
494
+ *
495
+ * @example
496
+ * ```ts
497
+ * const seed = ctx.ui.getActiveSelectionText();
498
+ * if (seed) runSearch(seed);
499
+ * ```
500
+ */
501
+ getActiveSelectionText(): string | null;
487
502
  }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Dave Weaver
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.