@corenel/editor 0.1.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/dist/diagnostics.d.ts +9 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +2 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/dock/PanelChooser.d.ts +13 -0
- package/dist/dock/PanelChooser.d.ts.map +1 -0
- package/dist/dock/PanelChooser.js +72 -0
- package/dist/dock/PanelChooser.js.map +1 -0
- package/dist/dock/PanelFrame.d.ts +37 -0
- package/dist/dock/PanelFrame.d.ts.map +1 -0
- package/dist/dock/PanelFrame.js +102 -0
- package/dist/dock/PanelFrame.js.map +1 -0
- package/dist/dock/PanelHost.d.ts +12 -0
- package/dist/dock/PanelHost.d.ts.map +1 -0
- package/dist/dock/PanelHost.js +331 -0
- package/dist/dock/PanelHost.js.map +1 -0
- package/dist/dock/config.d.ts +35 -0
- package/dist/dock/config.d.ts.map +1 -0
- package/dist/dock/config.js +2 -0
- package/dist/dock/config.js.map +1 -0
- package/dist/dock/index.d.ts +9 -0
- package/dist/dock/index.d.ts.map +1 -0
- package/dist/dock/index.js +13 -0
- package/dist/dock/index.js.map +1 -0
- package/dist/dock/layouts.d.ts +12 -0
- package/dist/dock/layouts.d.ts.map +1 -0
- package/dist/dock/layouts.js +50 -0
- package/dist/dock/layouts.js.map +1 -0
- package/dist/dock/tree.d.ts +73 -0
- package/dist/dock/tree.d.ts.map +1 -0
- package/dist/dock/tree.js +276 -0
- package/dist/dock/tree.js.map +1 -0
- package/dist/dock/types.d.ts +51 -0
- package/dist/dock/types.d.ts.map +1 -0
- package/dist/dock/types.js +42 -0
- package/dist/dock/types.js.map +1 -0
- package/dist/dock/use-layout.d.ts +41 -0
- package/dist/dock/use-layout.d.ts.map +1 -0
- package/dist/dock/use-layout.js +114 -0
- package/dist/dock/use-layout.js.map +1 -0
- package/dist/engine/index.d.ts +6 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +8 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/runModel.d.ts +16 -0
- package/dist/engine/runModel.d.ts.map +1 -0
- package/dist/engine/runModel.js +7 -0
- package/dist/engine/runModel.js.map +1 -0
- package/dist/engine/useDocResults.d.ts +38 -0
- package/dist/engine/useDocResults.d.ts.map +1 -0
- package/dist/engine/useDocResults.js +51 -0
- package/dist/engine/useDocResults.js.map +1 -0
- package/dist/engine/useRunController.d.ts +18 -0
- package/dist/engine/useRunController.d.ts.map +1 -0
- package/dist/engine/useRunController.js +28 -0
- package/dist/engine/useRunController.js.map +1 -0
- package/dist/engine/useRunHistory.d.ts +22 -0
- package/dist/engine/useRunHistory.d.ts.map +1 -0
- package/dist/engine/useRunHistory.js +20 -0
- package/dist/engine/useRunHistory.js.map +1 -0
- package/dist/engine/useRunOutput.d.ts +32 -0
- package/dist/engine/useRunOutput.d.ts.map +1 -0
- package/dist/engine/useRunOutput.js +51 -0
- package/dist/engine/useRunOutput.js.map +1 -0
- package/dist/errorLog.d.ts +17 -0
- package/dist/errorLog.d.ts.map +1 -0
- package/dist/errorLog.js +44 -0
- package/dist/errorLog.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/inlineAssist.d.ts +109 -0
- package/dist/inlineAssist.d.ts.map +1 -0
- package/dist/inlineAssist.js +272 -0
- package/dist/inlineAssist.js.map +1 -0
- package/dist/panels/DesignView.d.ts +9 -0
- package/dist/panels/DesignView.d.ts.map +1 -0
- package/dist/panels/DesignView.js +36 -0
- package/dist/panels/DesignView.js.map +1 -0
- package/dist/panels/ParamCard.d.ts +14 -0
- package/dist/panels/ParamCard.d.ts.map +1 -0
- package/dist/panels/ParamCard.js +138 -0
- package/dist/panels/ParamCard.js.map +1 -0
- package/dist/panels/ProblemsPanel.d.ts +9 -0
- package/dist/panels/ProblemsPanel.d.ts.map +1 -0
- package/dist/panels/ProblemsPanel.js +46 -0
- package/dist/panels/ProblemsPanel.js.map +1 -0
- package/dist/panels/UsageButton.d.ts +9 -0
- package/dist/panels/UsageButton.d.ts.map +1 -0
- package/dist/panels/UsageButton.js +40 -0
- package/dist/panels/UsageButton.js.map +1 -0
- package/dist/panels/index.d.ts +5 -0
- package/dist/panels/index.d.ts.map +1 -0
- package/dist/panels/index.js +8 -0
- package/dist/panels/index.js.map +1 -0
- package/dist/params.d.ts +27 -0
- package/dist/params.d.ts.map +1 -0
- package/dist/params.js +142 -0
- package/dist/params.js.map +1 -0
- package/dist/useWorkbench.d.ts +9 -0
- package/dist/useWorkbench.d.ts.map +1 -0
- package/dist/useWorkbench.js +21 -0
- package/dist/useWorkbench.js.map +1 -0
- package/dist/workflowModel.d.ts +128 -0
- package/dist/workflowModel.d.ts.map +1 -0
- package/dist/workflowModel.js +135 -0
- package/dist/workflowModel.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { RunState, RunMeta } from './runModel';
|
|
2
|
+
import type { RunTool } from './useRunOutput';
|
|
3
|
+
import type { WorkflowRun } from '../workflowModel';
|
|
4
|
+
export interface DocResult {
|
|
5
|
+
runState: RunState;
|
|
6
|
+
output: string;
|
|
7
|
+
reveal: number;
|
|
8
|
+
runTools: RunTool[];
|
|
9
|
+
runMeta: RunMeta | null;
|
|
10
|
+
error: string;
|
|
11
|
+
/** Structured workflow run (.pdflow docs). */
|
|
12
|
+
workflowRun: WorkflowRun | null;
|
|
13
|
+
/** Test run (.test docs) — opaque; the host owns the TestRun shape. */
|
|
14
|
+
testRun: unknown;
|
|
15
|
+
/** A guard-blocked-run action (e.g. sign-in CTA) — opaque; host-shaped. */
|
|
16
|
+
guardAction: unknown;
|
|
17
|
+
}
|
|
18
|
+
export declare const EMPTY_RESULT: DocResult;
|
|
19
|
+
/** Methods bound to one doc id — every run path goes through these so its output
|
|
20
|
+
* lands in that doc's slot regardless of which doc is currently active. */
|
|
21
|
+
export interface DocResultApi {
|
|
22
|
+
patch(p: Partial<DocResult> | ((r: DocResult) => Partial<DocResult>)): void;
|
|
23
|
+
beginRun(estIn: number): void;
|
|
24
|
+
appendOutput(text: string): void;
|
|
25
|
+
recordTool(name: string, phase: 'call' | 'result', isError?: boolean): void;
|
|
26
|
+
settleRun(text: string, meta: RunMeta): void;
|
|
27
|
+
reset(): void;
|
|
28
|
+
}
|
|
29
|
+
export interface DocResults {
|
|
30
|
+
/** The active doc's result (or EMPTY when none / unknown doc). */
|
|
31
|
+
active: DocResult;
|
|
32
|
+
/** Point the view at a doc (call when the active editor doc changes). */
|
|
33
|
+
setActiveDoc(id: string | null): void;
|
|
34
|
+
/** Bound writers for a specific doc id. */
|
|
35
|
+
forDoc(id: string): DocResultApi;
|
|
36
|
+
}
|
|
37
|
+
export declare function useDocResults(): DocResults;
|
|
38
|
+
//# sourceMappingURL=useDocResults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDocResults.d.ts","sourceRoot":"","sources":["../../engine/useDocResults.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,uEAAuE;IACvE,OAAO,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,YAAY,EAAE,SAG1B,CAAC;AAaF;2EAC2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC;IAC5E,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5E,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,kEAAkE;IAClE,MAAM,EAAE,SAAS,CAAC;IAClB,yEAAyE;IACzE,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACtC,2CAA2C;IAC3C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAAC;CAClC;AAED,wBAAgB,aAAa,IAAI,UAAU,CA2B1C"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/* Per-doc run results — each open document keeps its OWN result (status, output,
|
|
2
|
+
* telemetry, tool chips, workflow/test run), so switching docs shows that doc's
|
|
3
|
+
* result and a run keeps writing to its own doc's slot even while you view another.
|
|
4
|
+
* The view reads the ACTIVE doc's slot; runs target a specific doc id (the doc
|
|
5
|
+
* that was run), so a background run never bleeds into the doc you switched to.
|
|
6
|
+
* In-memory (survives doc switch / panel close / dock re-render; completed runs
|
|
7
|
+
* still go to the persisted history). Doc-type-specific results (test/guard) are
|
|
8
|
+
* opaque here — the host casts them. */
|
|
9
|
+
import { useState, useCallback } from 'react';
|
|
10
|
+
export const EMPTY_RESULT = {
|
|
11
|
+
runState: 'idle', output: '', reveal: 0, runTools: [], runMeta: null,
|
|
12
|
+
error: '', workflowRun: null, testRun: null, guardAction: null,
|
|
13
|
+
};
|
|
14
|
+
/** Reduce tool activity (shared with useRunOutput's single-result variant). */
|
|
15
|
+
function reduceTool(list, name, phase, isError) {
|
|
16
|
+
if (phase === 'call')
|
|
17
|
+
return [...list, { name, done: false }];
|
|
18
|
+
const i = [...list].reverse().findIndex((t) => t.name === name && !t.done);
|
|
19
|
+
if (i < 0)
|
|
20
|
+
return list;
|
|
21
|
+
const idx = list.length - 1 - i;
|
|
22
|
+
const next = list.slice();
|
|
23
|
+
next[idx] = { name, done: true, error: isError };
|
|
24
|
+
return next;
|
|
25
|
+
}
|
|
26
|
+
export function useDocResults() {
|
|
27
|
+
const [map, setMap] = useState(() => new Map());
|
|
28
|
+
const [activeId, setActiveId] = useState(null);
|
|
29
|
+
const active = (activeId != null && map.get(activeId)) || EMPTY_RESULT;
|
|
30
|
+
const upd = useCallback((id, fn) => {
|
|
31
|
+
setMap((m) => {
|
|
32
|
+
const next = new Map(m);
|
|
33
|
+
next.set(id, fn(m.get(id) ?? EMPTY_RESULT));
|
|
34
|
+
return next;
|
|
35
|
+
});
|
|
36
|
+
}, []);
|
|
37
|
+
const forDoc = useCallback((id) => ({
|
|
38
|
+
patch: (p) => upd(id, (r) => ({ ...r, ...(typeof p === 'function' ? p(r) : p) })),
|
|
39
|
+
beginRun: (estIn) => upd(id, (r) => ({
|
|
40
|
+
...r, runState: 'running', output: '', reveal: 0, runTools: [],
|
|
41
|
+
runMeta: { inTok: estIn, outTok: null, ms: null, cost: null, source: null },
|
|
42
|
+
error: '', workflowRun: null, testRun: null, guardAction: null,
|
|
43
|
+
})),
|
|
44
|
+
appendOutput: (text) => upd(id, (r) => ({ ...r, output: text, reveal: text.length })),
|
|
45
|
+
recordTool: (name, phase, isError) => upd(id, (r) => ({ ...r, runTools: reduceTool(r.runTools, name, phase, isError) })),
|
|
46
|
+
settleRun: (text, meta) => upd(id, (r) => ({ ...r, output: text, reveal: text.length, runMeta: meta, runState: 'done' })),
|
|
47
|
+
reset: () => upd(id, () => EMPTY_RESULT),
|
|
48
|
+
}), [upd]);
|
|
49
|
+
return { active, setActiveDoc: setActiveId, forDoc };
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=useDocResults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDocResults.js","sourceRoot":"","sources":["../../engine/useDocResults.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface RunController {
|
|
2
|
+
/** Start a run: invalidate any prior, make a fresh AbortController, and return
|
|
3
|
+
* this run's token + signal. */
|
|
4
|
+
begin(): {
|
|
5
|
+
token: number;
|
|
6
|
+
signal: AbortSignal;
|
|
7
|
+
};
|
|
8
|
+
/** True while `token` is the current run — false once a newer run began or the
|
|
9
|
+
* run was superseded/cancelled. Used to drop stale callbacks / post-await work. */
|
|
10
|
+
isCurrent(token: number): boolean;
|
|
11
|
+
/** Invalidate the current run WITHOUT aborting its in-flight request (results
|
|
12
|
+
* are discarded via isCurrent). Used when navigating away (e.g. opening history). */
|
|
13
|
+
supersede(): void;
|
|
14
|
+
/** Invalidate AND abort the current run's in-flight request. Used by Stop. */
|
|
15
|
+
cancel(): void;
|
|
16
|
+
}
|
|
17
|
+
export declare function useRunController(): RunController;
|
|
18
|
+
//# sourceMappingURL=useRunController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRunController.d.ts","sourceRoot":"","sources":["../../engine/useRunController.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B;oCACgC;IAChC,KAAK,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAE,CAAC;IAChD;uFACmF;IACnF,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC;yFACqF;IACrF,SAAS,IAAI,IAAI,CAAC;IAClB,8EAA8E;IAC9E,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAmBhD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/* Run lifecycle / cancellation — one monotonic token + AbortController shared by
|
|
2
|
+
* every run path (prompt / test / history navigation) so a new run supersedes the
|
|
3
|
+
* prior and stale async work is dropped. Each run claims a token via begin() and
|
|
4
|
+
* checks isCurrent(token) after every await / in every callback; superseded work
|
|
5
|
+
* returns early. Stop cancels (token bump + abort); navigating away supersedes
|
|
6
|
+
* (token bump only, no abort — results are discarded via isCurrent). */
|
|
7
|
+
import { useRef, useCallback } from 'react';
|
|
8
|
+
export function useRunController() {
|
|
9
|
+
const token = useRef(0);
|
|
10
|
+
const abort = useRef(null);
|
|
11
|
+
const begin = useCallback(() => {
|
|
12
|
+
const t = ++token.current;
|
|
13
|
+
const ac = new AbortController();
|
|
14
|
+
abort.current = ac;
|
|
15
|
+
return { token: t, signal: ac.signal };
|
|
16
|
+
}, []);
|
|
17
|
+
const isCurrent = useCallback((t) => t === token.current, []);
|
|
18
|
+
const supersede = useCallback(() => { token.current++; }, []);
|
|
19
|
+
const cancel = useCallback(() => {
|
|
20
|
+
token.current++;
|
|
21
|
+
try {
|
|
22
|
+
abort.current?.abort();
|
|
23
|
+
}
|
|
24
|
+
catch { /* already settled */ }
|
|
25
|
+
}, []);
|
|
26
|
+
return { begin, isCurrent, supersede, cancel };
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=useRunController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRunController.js","sourceRoot":"","sources":["../../engine/useRunController.ts"],"names":[],"mappings":"AAAA;;;;;wEAKwE;AACxE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAgB5C,MAAM,UAAU,gBAAgB;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,KAAK,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IAEnD,MAAM,KAAK,GAAG,WAAW,CAAC,GAA2C,EAAE;QACrE,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC;QAC1B,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;QACjC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;QACnB,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC;IACzC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACtE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9B,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,IAAI,CAAC;YAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC;IACjE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type Dispatch, type SetStateAction } from 'react';
|
|
2
|
+
export interface RunHistoryApi<E> {
|
|
3
|
+
history: E[];
|
|
4
|
+
showHistory: boolean;
|
|
5
|
+
setShowHistory: Dispatch<SetStateAction<boolean>>;
|
|
6
|
+
/** Prepend a run; the list is capped (oldest dropped). */
|
|
7
|
+
add: (entry: E) => void;
|
|
8
|
+
/** Clear the list and close the history view. */
|
|
9
|
+
clear: () => void;
|
|
10
|
+
find: (id: string) => E | undefined;
|
|
11
|
+
}
|
|
12
|
+
export interface RunHistoryOptions<E> {
|
|
13
|
+
initial?: E[];
|
|
14
|
+
/** Max entries kept (default 25). */
|
|
15
|
+
cap?: number;
|
|
16
|
+
/** Persist the list whenever it changes (e.g. into the editor's saved state). */
|
|
17
|
+
persist?: (history: E[]) => void;
|
|
18
|
+
}
|
|
19
|
+
export declare function useRunHistory<E extends {
|
|
20
|
+
id: string;
|
|
21
|
+
}>(opts?: RunHistoryOptions<E>): RunHistoryApi<E>;
|
|
22
|
+
//# sourceMappingURL=useRunHistory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRunHistory.d.ts","sourceRoot":"","sources":["../../engine/useRunHistory.ts"],"names":[],"mappings":"AAKA,OAAO,EAA4C,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAErG,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAClD,0DAA0D;IAC1D,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IACxB,iDAAiD;IACjD,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC;CACrC;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;IACd,qCAAqC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;CAClC;AAED,wBAAgB,aAAa,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,GAAE,iBAAiB,CAAC,CAAC,CAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAczG"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/* Run-history engine state — the list of past runs the Result panel reopens,
|
|
2
|
+
* newest-first, capped. Generic over the entry type so it carries NO host
|
|
3
|
+
* run-model coupling (the host instantiates it with its HistoryEntry, which may
|
|
4
|
+
* reference workflow/test run shapes). First extracted piece of the editor engine
|
|
5
|
+
* (see docs/editor-decomposition.md). */
|
|
6
|
+
import { useState, useCallback, useRef, useEffect } from 'react';
|
|
7
|
+
export function useRunHistory(opts = {}) {
|
|
8
|
+
const cap = opts.cap ?? 25;
|
|
9
|
+
const [history, setHistory] = useState(opts.initial ?? []);
|
|
10
|
+
const [showHistory, setShowHistory] = useState(false);
|
|
11
|
+
// Persist on change without recreating callbacks when the persist fn identity moves.
|
|
12
|
+
const persistRef = useRef(opts.persist);
|
|
13
|
+
persistRef.current = opts.persist;
|
|
14
|
+
useEffect(() => { persistRef.current?.(history); }, [history]);
|
|
15
|
+
const add = useCallback((entry) => setHistory((h) => [entry, ...h].slice(0, cap)), [cap]);
|
|
16
|
+
const clear = useCallback(() => { setHistory([]); setShowHistory(false); }, []);
|
|
17
|
+
const find = useCallback((id) => history.find((x) => x.id === id), [history]);
|
|
18
|
+
return { history, showHistory, setShowHistory, add, clear, find };
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=useRunHistory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRunHistory.js","sourceRoot":"","sources":["../../engine/useRunHistory.ts"],"names":[],"mappings":"AAAA;;;;yCAIyC;AACzC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAsC,MAAM,OAAO,CAAC;AAqBrG,MAAM,UAAU,aAAa,CAA2B,OAA6B,EAAE;IACrF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;IAC3B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAM,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,qFAAqF;IACrF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAClC,SAAS,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAE/D,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,KAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7F,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChF,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEtF,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type Dispatch, type SetStateAction } from 'react';
|
|
2
|
+
import type { RunState, RunMeta } from './runModel';
|
|
3
|
+
/** A tool-activity chip for the live run; `done` flips when the result arrives. */
|
|
4
|
+
export interface RunTool {
|
|
5
|
+
name: string;
|
|
6
|
+
done: boolean;
|
|
7
|
+
error?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface RunOutputApi {
|
|
10
|
+
runState: RunState;
|
|
11
|
+
setRunState: Dispatch<SetStateAction<RunState>>;
|
|
12
|
+
output: string;
|
|
13
|
+
setOutput: Dispatch<SetStateAction<string>>;
|
|
14
|
+
reveal: number;
|
|
15
|
+
setReveal: Dispatch<SetStateAction<number>>;
|
|
16
|
+
runTools: RunTool[];
|
|
17
|
+
setRunTools: Dispatch<SetStateAction<RunTool[]>>;
|
|
18
|
+
runMeta: RunMeta | null;
|
|
19
|
+
setRunMeta: Dispatch<SetStateAction<RunMeta | null>>;
|
|
20
|
+
/** Enter the running state: clear output/reveal/tools, seed runMeta with the
|
|
21
|
+
* input-token estimate. */
|
|
22
|
+
beginRun(estIn: number): void;
|
|
23
|
+
/** Replace the streamed output (caller passes the accumulated text). */
|
|
24
|
+
appendOutput(text: string): void;
|
|
25
|
+
/** Record tool activity: 'call' adds a pending chip; 'result' flips the most
|
|
26
|
+
* recent unfinished chip of that tool to done. */
|
|
27
|
+
recordTool(name: string, phase: 'call' | 'result', isError?: boolean): void;
|
|
28
|
+
/** Settle a successful run: final output + telemetry + done. */
|
|
29
|
+
settleRun(text: string, meta: RunMeta): void;
|
|
30
|
+
}
|
|
31
|
+
export declare function useRunOutput(): RunOutputApi;
|
|
32
|
+
//# sourceMappingURL=useRunOutput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRunOutput.d.ts","sourceRoot":"","sources":["../../engine/useRunOutput.ts"],"names":[],"mappings":"AAMA,OAAO,EAAyB,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAClF,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAEpD,mFAAmF;AACnF,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACjD,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;IAErD;+BAC2B;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,wEAAwE;IACxE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC;sDACkD;IAClD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5E,gEAAgE;IAChE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9C;AAED,wBAAgB,YAAY,IAAI,YAAY,CA6C3C"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/* Run-output state — the live state a run flows through: status, streamed output,
|
|
2
|
+
* the reveal cursor, tool-activity chips, and token/cost telemetry. ONE source of
|
|
3
|
+
* truth shared by every run path (prompt / workflow / test / history-restore), so
|
|
4
|
+
* it lives in a single engine hook. The raw setters are exposed for the paths not
|
|
5
|
+
* yet migrated; the transition methods (beginRun/appendOutput/recordTool/settleRun)
|
|
6
|
+
* encapsulate the prompt-run state machine — notably the tool-list reducer. */
|
|
7
|
+
import { useState, useCallback } from 'react';
|
|
8
|
+
export function useRunOutput() {
|
|
9
|
+
const [runState, setRunState] = useState('idle');
|
|
10
|
+
const [output, setOutput] = useState('');
|
|
11
|
+
const [reveal, setReveal] = useState(0);
|
|
12
|
+
const [runTools, setRunTools] = useState([]);
|
|
13
|
+
const [runMeta, setRunMeta] = useState(null);
|
|
14
|
+
const beginRun = useCallback((estIn) => {
|
|
15
|
+
setRunState('running');
|
|
16
|
+
setOutput('');
|
|
17
|
+
setReveal(0);
|
|
18
|
+
setRunTools([]);
|
|
19
|
+
setRunMeta({ inTok: estIn, outTok: null, ms: null, cost: null, source: null });
|
|
20
|
+
}, []);
|
|
21
|
+
const appendOutput = useCallback((text) => {
|
|
22
|
+
setOutput(text);
|
|
23
|
+
setReveal(text.length);
|
|
24
|
+
}, []);
|
|
25
|
+
const recordTool = useCallback((name, phase, isError) => {
|
|
26
|
+
setRunTools((list) => {
|
|
27
|
+
if (phase === 'call')
|
|
28
|
+
return [...list, { name, done: false }];
|
|
29
|
+
// Flip the most recent unfinished call of this tool to done.
|
|
30
|
+
const i = [...list].reverse().findIndex((t) => t.name === name && !t.done);
|
|
31
|
+
if (i < 0)
|
|
32
|
+
return list;
|
|
33
|
+
const idx = list.length - 1 - i;
|
|
34
|
+
const next = list.slice();
|
|
35
|
+
next[idx] = { name, done: true, error: isError };
|
|
36
|
+
return next;
|
|
37
|
+
});
|
|
38
|
+
}, []);
|
|
39
|
+
const settleRun = useCallback((text, meta) => {
|
|
40
|
+
setOutput(text);
|
|
41
|
+
setReveal(text.length);
|
|
42
|
+
setRunMeta(meta);
|
|
43
|
+
setRunState('done');
|
|
44
|
+
}, []);
|
|
45
|
+
return {
|
|
46
|
+
runState, setRunState, output, setOutput, reveal, setReveal,
|
|
47
|
+
runTools, setRunTools, runMeta, setRunMeta,
|
|
48
|
+
beginRun, appendOutput, recordTool, settleRun,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=useRunOutput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRunOutput.js","sourceRoot":"","sources":["../../engine/useRunOutput.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface AppError {
|
|
2
|
+
id: number;
|
|
3
|
+
message: string;
|
|
4
|
+
/** epoch ms */
|
|
5
|
+
at: number;
|
|
6
|
+
/** optional origin tag, e.g. 'run' | 'compile' | 'save'. */
|
|
7
|
+
source?: string;
|
|
8
|
+
}
|
|
9
|
+
/** Record an error. Empty messages are ignored; an identical consecutive message
|
|
10
|
+
* is collapsed (a re-render setting the same error won't spam the log). */
|
|
11
|
+
export declare function pushError(message: string, source?: string): void;
|
|
12
|
+
export declare function listErrors(): AppError[];
|
|
13
|
+
export declare function clearErrors(): void;
|
|
14
|
+
export declare function subscribeErrors(cb: () => void): () => void;
|
|
15
|
+
/** Subscribe a component to the error log (newest first). */
|
|
16
|
+
export declare function useErrorLog(): AppError[];
|
|
17
|
+
//# sourceMappingURL=errorLog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorLog.d.ts","sourceRoot":"","sources":["../errorLog.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe;IACf,EAAE,EAAE,MAAM,CAAC;IACX,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAQD;2EAC2E;AAC3E,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAMhE;AAED,wBAAgB,UAAU,IAAI,QAAQ,EAAE,CAEvC;AAED,wBAAgB,WAAW,IAAI,IAAI,CAIlC;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAG1D;AAED,6DAA6D;AAC7D,wBAAgB,WAAW,IAAI,QAAQ,EAAE,CAExC"}
|
package/dist/errorLog.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/* App/run error log — a small in-memory ring the Problems panel reads. Errors
|
|
2
|
+
* that used to only flash in the Result card (failed runs, compile/save failures,
|
|
3
|
+
* guard denials) are recorded here with a timestamp so they don't vanish.
|
|
4
|
+
* Session-only (not persisted); newest first, capped. */
|
|
5
|
+
import { useSyncExternalStore } from 'react';
|
|
6
|
+
const CAP = 100;
|
|
7
|
+
let log = [];
|
|
8
|
+
let seq = 0;
|
|
9
|
+
const subs = new Set();
|
|
10
|
+
const emit = () => { for (const f of subs) {
|
|
11
|
+
try {
|
|
12
|
+
f();
|
|
13
|
+
}
|
|
14
|
+
catch { /* a bad listener can't break logging */ }
|
|
15
|
+
} };
|
|
16
|
+
/** Record an error. Empty messages are ignored; an identical consecutive message
|
|
17
|
+
* is collapsed (a re-render setting the same error won't spam the log). */
|
|
18
|
+
export function pushError(message, source) {
|
|
19
|
+
const msg = (message || '').trim();
|
|
20
|
+
if (!msg)
|
|
21
|
+
return;
|
|
22
|
+
if (log[0]?.message === msg)
|
|
23
|
+
return;
|
|
24
|
+
log = [{ id: ++seq, message: msg, at: Date.now(), source }, ...log].slice(0, CAP);
|
|
25
|
+
emit();
|
|
26
|
+
}
|
|
27
|
+
export function listErrors() {
|
|
28
|
+
return log;
|
|
29
|
+
}
|
|
30
|
+
export function clearErrors() {
|
|
31
|
+
if (!log.length)
|
|
32
|
+
return;
|
|
33
|
+
log = [];
|
|
34
|
+
emit();
|
|
35
|
+
}
|
|
36
|
+
export function subscribeErrors(cb) {
|
|
37
|
+
subs.add(cb);
|
|
38
|
+
return () => { subs.delete(cb); };
|
|
39
|
+
}
|
|
40
|
+
/** Subscribe a component to the error log (newest first). */
|
|
41
|
+
export function useErrorLog() {
|
|
42
|
+
return useSyncExternalStore(subscribeErrors, listErrors, listErrors);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=errorLog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorLog.js","sourceRoot":"","sources":["../errorLog.ts"],"names":[],"mappings":"AAAA;;;yDAGyD;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAW7C,MAAM,GAAG,GAAG,GAAG,CAAC;AAChB,IAAI,GAAG,GAAe,EAAE,CAAC;AACzB,IAAI,GAAG,GAAG,CAAC,CAAC;AACZ,MAAM,IAAI,GAAG,IAAI,GAAG,EAAc,CAAC;AACnC,MAAM,IAAI,GAAG,GAAS,EAAE,GAAG,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IAAC,IAAI,CAAC;QAAC,CAAC,EAAE,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,wCAAwC,CAAC,CAAC;AAAC,CAAC,CAAC,CAAC,CAAC;AAEvH;2EAC2E;AAC3E,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,MAAe;IACxD,MAAM,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,GAAG;QAAE,OAAO;IACpC,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClF,IAAI,EAAE,CAAC;AACT,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,GAAG,CAAC,MAAM;QAAE,OAAO;IACxB,GAAG,GAAG,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;AACT,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAc;IAC5C,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACb,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,WAAW;IACzB,OAAO,oBAAoB,CAAC,eAAe,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AACvE,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAGA,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/* @corenel/editor — the editor workbench. Today: the dockable-panel system.
|
|
2
|
+
* The composable editor (panels, engine hooks, Workbench) is being carved out of
|
|
3
|
+
* prompd-web's EditorApp; see docs/editor-decomposition.md. */
|
|
4
|
+
export * from './dock';
|
|
5
|
+
export { useWorkbench } from './useWorkbench';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAC/D,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
export type InlineAssistMode = 'always' | 'newlines' | 'hide';
|
|
2
|
+
export interface InlineSuggestion {
|
|
3
|
+
/** Chip label shown in the panel. */
|
|
4
|
+
label: string;
|
|
5
|
+
/** The instruction sent to the model when the chip is clicked. */
|
|
6
|
+
prompt: string;
|
|
7
|
+
}
|
|
8
|
+
export interface InlineAssistContext {
|
|
9
|
+
/** Full document text. */
|
|
10
|
+
docText: string;
|
|
11
|
+
/** 1-based cursor position. */
|
|
12
|
+
line: number;
|
|
13
|
+
column: number;
|
|
14
|
+
}
|
|
15
|
+
export interface AskRequest {
|
|
16
|
+
/** The user's instruction (a chip's prompt, or the typed text). */
|
|
17
|
+
request: string;
|
|
18
|
+
/** Full document text. */
|
|
19
|
+
docText: string;
|
|
20
|
+
/** 1-based cursor position where the generated text will be inserted. */
|
|
21
|
+
line: number;
|
|
22
|
+
column: number;
|
|
23
|
+
}
|
|
24
|
+
export interface InlineAssistPorts {
|
|
25
|
+
/** Current trigger mode (read live so a Settings change takes effect at once). */
|
|
26
|
+
getMode: () => InlineAssistMode;
|
|
27
|
+
/** Compose + stream the completion for an ask. The HOST owns composition — e.g.
|
|
28
|
+
* compiling a .prmd through @prompd/core — given the request, document, and
|
|
29
|
+
* cursor. Resolves the full text; onDelta fires per token. */
|
|
30
|
+
ask: (req: AskRequest, signal: AbortSignal, onDelta: (t: string) => void) => Promise<string>;
|
|
31
|
+
/** Context-derived suggestion chips (e.g. from .prmd frontmatter). */
|
|
32
|
+
suggest?: (ctx: InlineAssistContext) => InlineSuggestion[];
|
|
33
|
+
/** Optional brand mark as inline SVG markup, shown in the panel header. */
|
|
34
|
+
brandSvg?: string;
|
|
35
|
+
/** Label for the assistant (default "Corenel"). */
|
|
36
|
+
name?: string;
|
|
37
|
+
/** Gate a use before it runs — typically a feature guard (checkFeature). Called
|
|
38
|
+
* on every ask; when `allowed` is false the panel shows `reason` + a Sign-in CTA
|
|
39
|
+
* instead of running. May be async. Allowed by default when omitted. */
|
|
40
|
+
checkAccess?: () => {
|
|
41
|
+
allowed: boolean;
|
|
42
|
+
reason?: string;
|
|
43
|
+
} | Promise<{
|
|
44
|
+
allowed: boolean;
|
|
45
|
+
reason?: string;
|
|
46
|
+
}>;
|
|
47
|
+
/** Invoked when the user clicks the Sign-in CTA shown on a blocked use. */
|
|
48
|
+
signIn?: () => void;
|
|
49
|
+
}
|
|
50
|
+
interface Pos {
|
|
51
|
+
lineNumber: number;
|
|
52
|
+
column: number;
|
|
53
|
+
}
|
|
54
|
+
interface ContentWidgetLike {
|
|
55
|
+
getId(): string;
|
|
56
|
+
getDomNode(): HTMLElement;
|
|
57
|
+
getPosition(): {
|
|
58
|
+
position: Pos;
|
|
59
|
+
preference: number[];
|
|
60
|
+
} | null;
|
|
61
|
+
}
|
|
62
|
+
export interface MonacoLike {
|
|
63
|
+
KeyMod: {
|
|
64
|
+
CtrlCmd: number;
|
|
65
|
+
};
|
|
66
|
+
KeyCode: {
|
|
67
|
+
KeyI: number;
|
|
68
|
+
};
|
|
69
|
+
editor: {
|
|
70
|
+
ContentWidgetPositionPreference: {
|
|
71
|
+
EXACT: number;
|
|
72
|
+
ABOVE: number;
|
|
73
|
+
BELOW: number;
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export interface EditorLike {
|
|
78
|
+
getPosition(): Pos | null;
|
|
79
|
+
getModel(): {
|
|
80
|
+
getLineContent(line: number): string;
|
|
81
|
+
getValue(): string;
|
|
82
|
+
} | null;
|
|
83
|
+
executeEdits(source: string, edits: Array<{
|
|
84
|
+
range: {
|
|
85
|
+
startLineNumber: number;
|
|
86
|
+
startColumn: number;
|
|
87
|
+
endLineNumber: number;
|
|
88
|
+
endColumn: number;
|
|
89
|
+
};
|
|
90
|
+
text: string;
|
|
91
|
+
forceMoveMarkers?: boolean;
|
|
92
|
+
}>): boolean;
|
|
93
|
+
setPosition(p: Pos): void;
|
|
94
|
+
focus(): void;
|
|
95
|
+
addContentWidget(w: ContentWidgetLike): void;
|
|
96
|
+
layoutContentWidget(w: ContentWidgetLike): void;
|
|
97
|
+
removeContentWidget(w: ContentWidgetLike): void;
|
|
98
|
+
addCommand(keybinding: number, handler: () => void, context?: string): void;
|
|
99
|
+
onDidChangeCursorPosition(cb: () => void): {
|
|
100
|
+
dispose(): void;
|
|
101
|
+
};
|
|
102
|
+
onDidBlurEditorWidget(cb: () => void): {
|
|
103
|
+
dispose(): void;
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/** Attach the inline assistant to a Monaco editor. Returns a dispose function. */
|
|
107
|
+
export declare function installInlineAssist(editor: EditorLike, monaco: MonacoLike, ports: InlineAssistPorts): () => void;
|
|
108
|
+
export {};
|
|
109
|
+
//# sourceMappingURL=inlineAssist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inlineAssist.d.ts","sourceRoot":"","sources":["../inlineAssist.ts"],"names":[],"mappings":"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"}
|