@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 +3 -3
- package/dist/Tooltip.d.ts +29 -0
- package/dist/Tooltip.d.ts.map +1 -0
- package/dist/Tooltip.js +68 -0
- package/dist/Tooltip.js.map +1 -0
- package/dist/domain-types.d.ts +0 -2
- package/dist/domain-types.d.ts.map +1 -1
- package/dist/editor-service.d.ts +18 -0
- package/dist/editor-service.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/layout-service.d.ts +7 -0
- package/dist/layout-service.d.ts.map +1 -1
- package/dist/search-service.d.ts +117 -0
- package/dist/search-service.d.ts.map +1 -0
- package/dist/search-service.js +6 -0
- package/dist/search-service.js.map +1 -0
- package/dist/types.d.ts +51 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/ui-service.d.ts +15 -0
- package/dist/ui-service.d.ts.map +1 -1
- package/package.json +23 -17
- package/src/Tooltip.tsx +116 -0
- package/src/domain-types.ts +0 -2
- package/src/editor-service.ts +18 -0
- package/src/index.ts +13 -0
- package/src/layout-service.ts +7 -0
- package/src/search-service.ts +125 -0
- package/src/types.ts +52 -0
- package/src/ui-service.ts +15 -0
- package/LICENSE +0 -21
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://
|
|
62
|
-
· [Publishing an extension](https://
|
|
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://
|
|
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"}
|
package/dist/Tooltip.js
ADDED
|
@@ -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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"}
|
package/dist/domain-types.d.ts
CHANGED
|
@@ -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":"AAAA;;;;;;;;GAQG;AAEH;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC;AAErD;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mGAAmG;IACnG,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,kGAAkG;IAClG,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,aAAa,GAAG,cAAc,CAAC;AAE9E;;;;;;GAMG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,2FAA2F;IAC3F,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,2EAA2E;IAC3E,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtE;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,2EAA2E;IAC3E,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,wBAAwB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACzD,
|
|
1
|
+
{"version":3,"file":"domain-types.d.ts","sourceRoot":"","sources":["../src/domain-types.ts"],"names":[],"mappings":"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"}
|
package/dist/editor-service.d.ts
CHANGED
|
@@ -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;
|
|
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";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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;
|
|
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"}
|
package/dist/layout-service.d.ts
CHANGED
|
@@ -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;
|
|
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
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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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"}
|
package/dist/ui-service.d.ts
CHANGED
|
@@ -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
|
package/dist/ui-service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-service.d.ts","sourceRoot":"","sources":["../src/ui-service.ts"],"names":[],"mappings":"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
|
|
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.
|
|
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
|
-
|
|
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
|
+
}
|
package/src/Tooltip.tsx
ADDED
|
@@ -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
|
+
}
|
package/src/domain-types.ts
CHANGED
|
@@ -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
|
}
|
package/src/editor-service.ts
CHANGED
|
@@ -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";
|
package/src/layout-service.ts
CHANGED
|
@@ -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.
|