@deepseek-ai/dsh-experimental-client-ui-forge 0.0.0-stage → 0.2.2-alpha.3
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/LICENSE +21 -0
- package/README.i18n.yaml +37 -0
- package/README.md +142 -2
- package/README.zh.md +143 -0
- package/lib/client.js +11802 -0
- package/lib/index.js +3238 -0
- package/lib/typert.host.d.ts +3 -0
- package/lib/typert.host.js +2502 -0
- package/lib/typert.remote-client.d.ts +85 -0
- package/lib/typert.remote-client.js +1538 -0
- package/lib/types/client/ActionToast.d.ts +14 -0
- package/lib/types/client/ChangeRequestCard.d.ts +56 -0
- package/lib/types/client/ChangedFiles.d.ts +36 -0
- package/lib/types/client/ChangesTab.d.ts +59 -0
- package/lib/types/client/ChangesTabTitle.d.ts +13 -0
- package/lib/types/client/DiffFile.d.ts +76 -0
- package/lib/types/client/FileLabel.d.ts +20 -0
- package/lib/types/client/FileTreePane.d.ts +15 -0
- package/lib/types/client/ForgeTab.d.ts +57 -0
- package/lib/types/client/ForgeTabTitle.d.ts +11 -0
- package/lib/types/client/HeaderButton.d.ts +27 -0
- package/lib/types/client/LocalChangesCard.d.ts +29 -0
- package/lib/types/client/RefreshGlyph.d.ts +18 -0
- package/lib/types/client/ReviewComposer.d.ts +40 -0
- package/lib/types/client/ReviewThread.d.ts +26 -0
- package/lib/types/client/SessionHoverForge.d.ts +20 -0
- package/lib/types/client/SessionRowForge.d.ts +39 -0
- package/lib/types/client/SubmitReview.d.ts +22 -0
- package/lib/types/client/WorktreeProgress.d.ts +44 -0
- package/lib/types/client/WorktreeToggle.d.ts +43 -0
- package/lib/types/client/changes-address.d.ts +70 -0
- package/lib/types/client/changes-store.d.ts +39 -0
- package/lib/types/client/checkout.d.ts +34 -0
- package/lib/types/client/code-selection.d.ts +23 -0
- package/lib/types/client/diff-rows.d.ts +96 -0
- package/lib/types/client/file-tree.d.ts +33 -0
- package/lib/types/client/format.d.ts +21 -0
- package/lib/types/client/glyphs.d.ts +33 -0
- package/lib/types/client/index.d.ts +25 -0
- package/lib/types/client/locales.d.ts +282 -0
- package/lib/types/client/mount.d.ts +17 -0
- package/lib/types/client/review-queue.d.ts +136 -0
- package/lib/types/client/review.d.ts +56 -0
- package/lib/types/client/session-list.d.ts +46 -0
- package/lib/types/client/source.d.ts +146 -0
- package/lib/types/client/status.d.ts +99 -0
- package/lib/types/diff.d.ts +32 -0
- package/lib/types/git.d.ts +93 -0
- package/lib/types/index.d.ts +296 -0
- package/lib/types/local-diff.d.ts +100 -0
- package/lib/types/panel.d.ts +135 -0
- package/lib/types/parse.d.ts +57 -0
- package/lib/types/patch-cache.d.ts +33 -0
- package/lib/types/states.d.ts +95 -0
- package/lib/types/types.d.ts +399 -0
- package/lib/types/worktree.d.ts +225 -0
- package/locale/de.json +6 -0
- package/locale/en.json +6 -0
- package/locale/es.json +6 -0
- package/locale/fr.json +6 -0
- package/locale/ja.json +6 -0
- package/locale/pt.json +6 -0
- package/locale/ru.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +123 -3
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host stream sources (per-Session panel states and the change request states
|
|
3
|
+
* of the Session list), the store behind action notices, and the tab visibility store.
|
|
4
|
+
*/
|
|
5
|
+
import type { HostObservable } from '@deepseek-ai/dsh-client-ui-slots';
|
|
6
|
+
import type { ForgeChangeRequestListState, ForgeChangeRequestStatesFrame, ForgePanelState } from '../types.ts';
|
|
7
|
+
import type { ForgePanelKey } from './locales.ts';
|
|
8
|
+
/** What a stream source publishes: the value its frames built, and whether the stream ended while read. */
|
|
9
|
+
export interface StreamSnapshot<S> {
|
|
10
|
+
/** Value built from the frames so far. */
|
|
11
|
+
readonly state: S;
|
|
12
|
+
/** Whether the stream ended while surfaces still read it. */
|
|
13
|
+
readonly disconnected: boolean;
|
|
14
|
+
}
|
|
15
|
+
/** What the panel surfaces of one Session read; `state` is null before the first one arrives. */
|
|
16
|
+
export type PanelSnapshot = StreamSnapshot<ForgePanelState | null>;
|
|
17
|
+
/** One open Host stream. */
|
|
18
|
+
export interface HostStream<F> extends AsyncIterable<F> {
|
|
19
|
+
/** Close the stream. */
|
|
20
|
+
dispose: () => void;
|
|
21
|
+
}
|
|
22
|
+
/** One open stream of panel states. */
|
|
23
|
+
export type PanelStream = HostStream<ForgePanelState>;
|
|
24
|
+
/** Stream opener and connection-reset subscription of a source. */
|
|
25
|
+
export interface StreamSourceDeps<F> {
|
|
26
|
+
/**
|
|
27
|
+
* Open the Host stream.
|
|
28
|
+
* @param signal - aborts the stream.
|
|
29
|
+
* @returns the stream.
|
|
30
|
+
*/
|
|
31
|
+
readonly open: (signal: AbortSignal) => HostStream<F>;
|
|
32
|
+
/**
|
|
33
|
+
* Subscribe to transport resets, after which an open stream no longer delivers.
|
|
34
|
+
* @param listener - called on each reset.
|
|
35
|
+
* @returns the unsubscribe function.
|
|
36
|
+
*/
|
|
37
|
+
readonly subscribeReset: (listener: () => void) => () => void;
|
|
38
|
+
}
|
|
39
|
+
/** Stream opener and connection-reset subscription of one Session's panel source. */
|
|
40
|
+
export type PanelSourceDeps = StreamSourceDeps<ForgePanelState>;
|
|
41
|
+
/** A value built from a Host stream that runs only while a surface subscribes. */
|
|
42
|
+
export interface StreamSource<S> {
|
|
43
|
+
/** Snapshot observable; the renderer binds it as a selector hook. */
|
|
44
|
+
readonly observable: HostObservable<StreamSnapshot<S>>;
|
|
45
|
+
/** Open the stream again after it ended; a no-op while it runs or nobody subscribes. */
|
|
46
|
+
readonly reconnect: () => void;
|
|
47
|
+
/** Close the stream and the reset subscription and drop every subscriber. */
|
|
48
|
+
readonly close: () => void;
|
|
49
|
+
}
|
|
50
|
+
/** Panel state of one Session, streamed only while a surface subscribes. */
|
|
51
|
+
export interface PanelSource {
|
|
52
|
+
/** Snapshot observable; the renderer binds it as `usePanel`. */
|
|
53
|
+
readonly hooks: {
|
|
54
|
+
readonly panel: HostObservable<PanelSnapshot>;
|
|
55
|
+
};
|
|
56
|
+
/** Open the stream again after it ended; a no-op while it runs or nobody subscribes. */
|
|
57
|
+
readonly reconnect: () => void;
|
|
58
|
+
/** Close the stream and the reset subscription and drop every subscriber. */
|
|
59
|
+
readonly close: () => void;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Create a source that folds a Host stream into one value. The first
|
|
63
|
+
* subscriber opens the stream and the last one closes it; the value stays
|
|
64
|
+
* readable for the next subscriber. A stream that ends or fails while
|
|
65
|
+
* subscribed marks the snapshot disconnected until `reconnect` or a transport
|
|
66
|
+
* reset reopens it.
|
|
67
|
+
* @param deps - stream opener and reset subscription.
|
|
68
|
+
* @param initial - value before the first frame.
|
|
69
|
+
* @param fold - the value after one frame.
|
|
70
|
+
* @returns the source.
|
|
71
|
+
*/
|
|
72
|
+
export declare function createStreamSource<F, S>(deps: StreamSourceDeps<F>, initial: S, fold: (state: S, frame: F) => S): StreamSource<S>;
|
|
73
|
+
/**
|
|
74
|
+
* Create the panel source of one Session: the latest state the Host streamed.
|
|
75
|
+
* @param deps - stream opener and reset subscription.
|
|
76
|
+
* @returns the source.
|
|
77
|
+
*/
|
|
78
|
+
export declare function createPanelSource(deps: PanelSourceDeps): PanelSource;
|
|
79
|
+
/**
|
|
80
|
+
* The known change request states after one `changeRequestStates` frame: a
|
|
81
|
+
* baseline replaces them, and a change replaces the states it carries.
|
|
82
|
+
* @param states - states by URL before the frame.
|
|
83
|
+
* @param frame - the frame.
|
|
84
|
+
* @returns states by URL after the frame.
|
|
85
|
+
*/
|
|
86
|
+
export declare function foldStates(states: ReadonlyMap<string, ForgeChangeRequestListState>, frame: ForgeChangeRequestStatesFrame): ReadonlyMap<string, ForgeChangeRequestListState>;
|
|
87
|
+
/** One action notice; `seq` keys the toast so a repeated notice restarts it. */
|
|
88
|
+
export interface ActionNotice {
|
|
89
|
+
/** Dictionary key of the notice text. */
|
|
90
|
+
readonly key: ForgePanelKey;
|
|
91
|
+
/** Values interpolated into the text. */
|
|
92
|
+
readonly params: Readonly<Record<string, string | number>>;
|
|
93
|
+
/** `success` reports a completed action; `failure` a refused or failed one. */
|
|
94
|
+
readonly tone: 'success' | 'failure';
|
|
95
|
+
/** Reverts the reported action, or undefined when it cannot be undone. */
|
|
96
|
+
readonly undo: (() => void) | undefined;
|
|
97
|
+
/** Increasing report number. */
|
|
98
|
+
readonly seq: number;
|
|
99
|
+
}
|
|
100
|
+
/** Optional parts of a reported notice. */
|
|
101
|
+
export interface NoticeOptions {
|
|
102
|
+
/** Values interpolated into the text. */
|
|
103
|
+
readonly params?: Readonly<Record<string, string | number>>;
|
|
104
|
+
/** Defaults to `failure`. */
|
|
105
|
+
readonly tone?: ActionNotice['tone'];
|
|
106
|
+
/** Reverts the reported action. */
|
|
107
|
+
readonly undo?: () => void;
|
|
108
|
+
}
|
|
109
|
+
/** Store that action wiring reports into and one `shell.overlay` entry reads. */
|
|
110
|
+
export interface NoticeSource {
|
|
111
|
+
/** Current notice, or null while none shows; the renderer binds it as `useNotice`. */
|
|
112
|
+
readonly hooks: {
|
|
113
|
+
readonly notice: HostObservable<ActionNotice | null>;
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Show one notice, replacing the shown one.
|
|
117
|
+
* @param key - dictionary key of the text.
|
|
118
|
+
* @param options - interpolated values, tone, and undo action.
|
|
119
|
+
*/
|
|
120
|
+
readonly report: (key: ForgePanelKey, options?: NoticeOptions) => void;
|
|
121
|
+
/** Clear the shown notice. */
|
|
122
|
+
readonly dismiss: () => void;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Create the action notice store.
|
|
126
|
+
* @returns the store.
|
|
127
|
+
*/
|
|
128
|
+
export declare function createNoticeSource(): NoticeSource;
|
|
129
|
+
/** Whether one Session's forge tab is visible; the header entry reads it for its pressed state. */
|
|
130
|
+
export interface VisibilitySource {
|
|
131
|
+
/** Current visibility; the renderer binds it as `useVisible`. */
|
|
132
|
+
readonly hooks: {
|
|
133
|
+
readonly visible: HostObservable<boolean>;
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Record the tab's visibility.
|
|
137
|
+
* @param visible - whether the tab is visible.
|
|
138
|
+
*/
|
|
139
|
+
readonly set: (visible: boolean) => void;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Create the visibility store of one Session's forge tab, initially hidden.
|
|
143
|
+
* @returns the store.
|
|
144
|
+
*/
|
|
145
|
+
export declare function createVisibilitySource(): VisibilitySource;
|
|
146
|
+
//# sourceMappingURL=source.d.ts.map
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/** Status derivations shared by the header entry, the change request cards, and the changes view. */
|
|
2
|
+
import type { ChangeRequestCheck, ChangeRequestSnapshot } from '@deepseek-ai/dsh-experimental-forge/types';
|
|
3
|
+
import type { ForgePanelChangeRequest, ForgePanelState } from '../types.ts';
|
|
4
|
+
import type { ForgePanelKey } from './locales.ts';
|
|
5
|
+
/**
|
|
6
|
+
* Glyph tone of a change request: its lifecycle state, `blocked` for an open
|
|
7
|
+
* one, not a draft, that needs its author, or `unknown` before the first snapshot.
|
|
8
|
+
*/
|
|
9
|
+
export type ChangeRequestTone = 'open' | 'blocked' | 'draft' | 'merged' | 'closed' | 'unknown';
|
|
10
|
+
/** Dictionary key of each tone's state name. */
|
|
11
|
+
export declare const TONE_LABEL: Record<ChangeRequestTone, ForgePanelKey>;
|
|
12
|
+
/** Combined check outcome shown on a collapsed card. */
|
|
13
|
+
export type CiSummary = {
|
|
14
|
+
readonly kind: 'none';
|
|
15
|
+
} | {
|
|
16
|
+
readonly kind: 'running';
|
|
17
|
+
} | {
|
|
18
|
+
readonly kind: 'passed';
|
|
19
|
+
}
|
|
20
|
+
/** `count` is the number of failed checks the host listed, which can be zero when the list is truncated. */
|
|
21
|
+
| {
|
|
22
|
+
readonly kind: 'failed';
|
|
23
|
+
readonly count: number;
|
|
24
|
+
} | {
|
|
25
|
+
readonly kind: 'cancelled';
|
|
26
|
+
readonly count: number;
|
|
27
|
+
};
|
|
28
|
+
/** Checks grouped by outcome; `other` holds neutral and skipped checks. */
|
|
29
|
+
export interface CheckCounts {
|
|
30
|
+
readonly failed: number;
|
|
31
|
+
readonly running: number;
|
|
32
|
+
readonly passed: number;
|
|
33
|
+
readonly cancelled: number;
|
|
34
|
+
readonly other: number;
|
|
35
|
+
}
|
|
36
|
+
/** The most urgent fact of an open change request that the collapsed card names. */
|
|
37
|
+
export type ChangeRequestFlag = 'changesRequested' | 'conflicting' | 'draft';
|
|
38
|
+
/** The facts of a change request that decide its tone. */
|
|
39
|
+
export type ToneFacts = Pick<ChangeRequestSnapshot, 'state' | 'draft' | 'checksRollup' | 'reviewDecision' | 'mergeability'>;
|
|
40
|
+
/**
|
|
41
|
+
* Pick the glyph tone of a change request: an open draft is always `draft`;
|
|
42
|
+
* any other open one is `blocked` while its checks failed, changes were
|
|
43
|
+
* requested, or it conflicts with its base, and running checks, a pending
|
|
44
|
+
* review, and an unknown mergeability only wait and keep it `open`.
|
|
45
|
+
* @param snapshot - latest snapshot or listed state, or null before the first one.
|
|
46
|
+
* @returns the tone.
|
|
47
|
+
*/
|
|
48
|
+
export declare function toneOf(snapshot: ToneFacts | null): ChangeRequestTone;
|
|
49
|
+
/**
|
|
50
|
+
* Count the listed checks by outcome.
|
|
51
|
+
* @param checks - checks of the head commit.
|
|
52
|
+
* @returns the counts.
|
|
53
|
+
*/
|
|
54
|
+
export declare function checkCounts(checks: readonly ChangeRequestCheck[]): CheckCounts;
|
|
55
|
+
/**
|
|
56
|
+
* Summarize the checks of a change request from the host's combined outcome.
|
|
57
|
+
* @param snapshot - change request status.
|
|
58
|
+
* @returns the combined outcome with its failure or cancellation count.
|
|
59
|
+
*/
|
|
60
|
+
export declare function ciSummary(snapshot: ChangeRequestSnapshot): CiSummary;
|
|
61
|
+
/**
|
|
62
|
+
* Pick the flag a collapsed card names: requested changes before merge
|
|
63
|
+
* conflicts before draft state; only open change requests carry one.
|
|
64
|
+
* @param snapshot - change request status.
|
|
65
|
+
* @returns the flag, or undefined when none applies.
|
|
66
|
+
*/
|
|
67
|
+
export declare function flagOf(snapshot: ChangeRequestSnapshot): ChangeRequestFlag | undefined;
|
|
68
|
+
/**
|
|
69
|
+
* Whether a change request needs the user, the condition its card draws as `blocked`.
|
|
70
|
+
* @param entry - bound change request.
|
|
71
|
+
* @returns whether the header marks it.
|
|
72
|
+
*/
|
|
73
|
+
export declare function needsAttention(entry: ForgePanelChangeRequest): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Pick the cards a Session's panel opens before the user expands or collapses
|
|
76
|
+
* one: the only open change request, drafts included, when exactly one is open.
|
|
77
|
+
* @param entries - bound change requests.
|
|
78
|
+
* @returns the URLs of the cards that start expanded.
|
|
79
|
+
*/
|
|
80
|
+
export declare function defaultExpanded(entries: readonly ForgePanelChangeRequest[]): ReadonlySet<string>;
|
|
81
|
+
/**
|
|
82
|
+
* Find the open change request, drafts included, whose head is the checked-out branch.
|
|
83
|
+
* @param state - panel state of the Session.
|
|
84
|
+
* @returns the change request, or undefined without one or while HEAD is detached.
|
|
85
|
+
*/
|
|
86
|
+
export declare function openChangeRequestOf(state: ForgePanelState): ForgePanelChangeRequest | undefined;
|
|
87
|
+
/**
|
|
88
|
+
* Read the change request number: the provider's reference, else the number at the end of the URL path.
|
|
89
|
+
* @param entry - bound change request.
|
|
90
|
+
* @returns the number, or null when neither names one.
|
|
91
|
+
*/
|
|
92
|
+
export declare function numberOf(entry: Pick<ForgePanelChangeRequest, 'ref' | 'url'>): number | null;
|
|
93
|
+
/**
|
|
94
|
+
* Measure how long a completed check ran.
|
|
95
|
+
* @param check - one check.
|
|
96
|
+
* @returns elapsed milliseconds, or undefined when either time is unknown or they are out of order.
|
|
97
|
+
*/
|
|
98
|
+
export declare function checkDuration(check: ChangeRequestCheck): number | undefined;
|
|
99
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** Unified patch parsing into the panel's browser-safe diff model, and the diff and size of an untracked file. */
|
|
2
|
+
import type { ForgeChangedFile, ForgeDiffFile } from './types.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Parse a Git-style unified patch, as `git diff` or a code host prints it,
|
|
5
|
+
* with `a/` and `b/` path prefixes. Hunk ranges follow jsdiff: a range that
|
|
6
|
+
* covers no line starts at the line it comes before.
|
|
7
|
+
* @param patch - the patch text.
|
|
8
|
+
* @returns one file per patch section in patch order.
|
|
9
|
+
*/
|
|
10
|
+
export declare function parseDiff(patch: string): ForgeDiffFile[];
|
|
11
|
+
/**
|
|
12
|
+
* Describe an untracked file as added in full.
|
|
13
|
+
* @param path - path relative to the repository root.
|
|
14
|
+
* @param content - the file's bytes.
|
|
15
|
+
* @returns the file with one hunk of added lines, none when it is empty, or none and `binary` when its content is not text.
|
|
16
|
+
*/
|
|
17
|
+
export declare function untrackedFile(path: string, content: Uint8Array): ForgeDiffFile;
|
|
18
|
+
/**
|
|
19
|
+
* Decode file content as text the way Git decides it is not binary: no NUL
|
|
20
|
+
* byte among the first 8000 bytes, and, here, valid UTF-8 throughout.
|
|
21
|
+
* @param content - the bytes.
|
|
22
|
+
* @returns the text, or undefined for binary content.
|
|
23
|
+
*/
|
|
24
|
+
export declare function decodeText(content: Uint8Array): string | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Parse `git diff --numstat -z` output, in which a rename prints its counts,
|
|
27
|
+
* an empty path, and then the old and new paths as separate fields.
|
|
28
|
+
* @param output - the command's standard output.
|
|
29
|
+
* @returns one file per record, named by its new path; a binary file counts no lines.
|
|
30
|
+
*/
|
|
31
|
+
export declare function parseNumstat(output: string): ForgeChangedFile[];
|
|
32
|
+
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/** Git queries in a Session's current directory, using its permissions and execution world. */
|
|
2
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
3
|
+
import type { Session } from '@deepseek-ai/dsh-session';
|
|
4
|
+
import type { GitRemote } from './parse.ts';
|
|
5
|
+
import type { ForgeBranches, ForgeCheckout } from './types.ts';
|
|
6
|
+
/** Resolved Git executable and process limits. */
|
|
7
|
+
export interface GitConfig {
|
|
8
|
+
/** Git executable name or absolute path. */
|
|
9
|
+
readonly gitCommand: string;
|
|
10
|
+
/** Deadline in milliseconds for one command, including executable lookup and confinement. */
|
|
11
|
+
readonly gitTimeoutMs: number;
|
|
12
|
+
/** Termination grace period in milliseconds for each process. */
|
|
13
|
+
readonly graceMs: number;
|
|
14
|
+
/** Maximum captured bytes per output stream. */
|
|
15
|
+
readonly maxOutputBytes: number;
|
|
16
|
+
}
|
|
17
|
+
/** Checkout facts with the upstream and remotes used to recognize the code host. */
|
|
18
|
+
export interface Inspection {
|
|
19
|
+
/** Facts the panel shows. */
|
|
20
|
+
readonly checkout: ForgeCheckout;
|
|
21
|
+
/** Canonical Git directory shared by every checkout of the repository. */
|
|
22
|
+
readonly commonDir: string;
|
|
23
|
+
/** Upstream branch such as `origin/main`, or null when none is configured or HEAD is detached. */
|
|
24
|
+
readonly upstream: string | null;
|
|
25
|
+
/** Remotes in listed order. */
|
|
26
|
+
readonly remotes: readonly GitRemote[];
|
|
27
|
+
}
|
|
28
|
+
/** Complete output of one Git command that exited with an allowed code. */
|
|
29
|
+
export interface GitOutput {
|
|
30
|
+
readonly stdout: string;
|
|
31
|
+
readonly stderr: string;
|
|
32
|
+
readonly exitCode: number;
|
|
33
|
+
}
|
|
34
|
+
/** Runs one Git subcommand with optional command-local configuration; output with an exit code outside `allowedExitCodes` throws. */
|
|
35
|
+
export type Git = (name: string, args: readonly string[], allowedExitCodes?: readonly number[], configOverrides?: Readonly<Record<string, string>>) => Promise<GitOutput>;
|
|
36
|
+
/** Thrown when a Git command prints more than `maxOutputBytes` on standard output. */
|
|
37
|
+
export declare class GitOutputTooLarge extends Error {
|
|
38
|
+
name: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Inspect the checkout containing `directory`. Every command runs through the
|
|
42
|
+
* mounted subprocess provider under the Session's sandbox policy and reads
|
|
43
|
+
* refs and configuration only, never the working tree.
|
|
44
|
+
* The top-level and shared Git directories Git prints are resolved
|
|
45
|
+
* through `ctx.fs` into canonical process paths, the form the
|
|
46
|
+
* working-directory service records.
|
|
47
|
+
* @param ctx - context that provides `fs`, `subprocess`, `sandbox`, and `sandboxPolicy`.
|
|
48
|
+
* @param config - executable and process limits.
|
|
49
|
+
* @param session - Session whose sandbox policy and execution world apply.
|
|
50
|
+
* @param directory - absolute directory to inspect.
|
|
51
|
+
* @param signal - cancellation of every command.
|
|
52
|
+
* @returns the checkout facts, shared Git directory, upstream, and remotes, or undefined when `directory` is not inside a checkout.
|
|
53
|
+
* @throws when Git cannot run, fails, times out, or prints more than `maxOutputBytes`.
|
|
54
|
+
*/
|
|
55
|
+
export declare function inspectCheckout(ctx: Context, config: GitConfig, session: Session, directory: string, signal: AbortSignal): Promise<Inspection | undefined>;
|
|
56
|
+
/**
|
|
57
|
+
* List the local branches that can start a worktree of the checkout containing
|
|
58
|
+
* `directory`, using the Session's permissions as in {@link inspectCheckout}.
|
|
59
|
+
* @param ctx - context that provides `subprocess`, `sandbox`, and `sandboxPolicy`.
|
|
60
|
+
* @param config - executable and process limits.
|
|
61
|
+
* @param session - Session whose sandbox policy and execution world apply.
|
|
62
|
+
* @param directory - absolute directory inside the checkout.
|
|
63
|
+
* @param limit - most branch names to return.
|
|
64
|
+
* @param signal - cancellation of every command.
|
|
65
|
+
* @returns the checked-out branch and local branches, the checked-out one first and then most recently committed first.
|
|
66
|
+
* @throws when `directory` is not inside a checkout, or Git cannot run, fails, times out, or prints more than `maxOutputBytes`.
|
|
67
|
+
*/
|
|
68
|
+
export declare function listBranches(ctx: Context, config: GitConfig, session: Session, directory: string, limit: number, signal: AbortSignal): Promise<ForgeBranches>;
|
|
69
|
+
/**
|
|
70
|
+
* Report whether a local branch exists, using the Session's permissions as in {@link inspectCheckout}.
|
|
71
|
+
* @param ctx - context that provides `subprocess`, `sandbox`, and `sandboxPolicy`.
|
|
72
|
+
* @param config - executable and process limits.
|
|
73
|
+
* @param session - Session whose sandbox policy and execution world apply.
|
|
74
|
+
* @param repositoryRoot - absolute root of a checkout of the repository.
|
|
75
|
+
* @param branch - local branch name.
|
|
76
|
+
* @param signal - cancellation of the command.
|
|
77
|
+
* @returns whether `refs/heads/<branch>` exists.
|
|
78
|
+
* @throws when Git cannot run, fails, times out, or prints more than `maxOutputBytes`.
|
|
79
|
+
*/
|
|
80
|
+
export declare function hasBranch(ctx: Context, config: GitConfig, session: Session, repositoryRoot: string, branch: string, signal: AbortSignal): Promise<boolean>;
|
|
81
|
+
/**
|
|
82
|
+
* Bind the Git runner to one Session and directory: every command
|
|
83
|
+
* runs under the Session's sandbox policy with the
|
|
84
|
+
* scrubbed environment, the fixed command prefix, and `config`'s limits.
|
|
85
|
+
* @param ctx - context that provides `subprocess`, `sandbox`, and `sandboxPolicy`.
|
|
86
|
+
* @param config - executable and process limits.
|
|
87
|
+
* @param session - Session whose sandbox policy and execution world apply.
|
|
88
|
+
* @param directory - working directory of every command.
|
|
89
|
+
* @param signal - cancellation of every command.
|
|
90
|
+
* @returns the runner.
|
|
91
|
+
*/
|
|
92
|
+
export declare function gitIn(ctx: Context, config: GitConfig, session: Session, directory: string, signal: AbortSignal): Git;
|
|
93
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/** Host Remote of the forge panel: checkout, code host, sign-in, change request, and worktree state per Session. */
|
|
2
|
+
import { Context, Service } from '@deepseek-ai/cordis';
|
|
3
|
+
import z from '@deepseek-ai/schemastery';
|
|
4
|
+
import type { ChangeRequestSnapshot, ForgeReviewRequest, ForgeReviewResult, MergeMethod } from '@deepseek-ai/dsh-experimental-forge';
|
|
5
|
+
import type { Session } from '@deepseek-ai/dsh-session';
|
|
6
|
+
import { TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
|
|
7
|
+
import type { Config, ForgeBranches, ForgeChangeRequestDiff, ForgeChangeRequestStatesFrame, ForgeLocalDiff, ForgeLocalScope, ForgePanelState } from './types.ts';
|
|
8
|
+
export type * from './types.ts';
|
|
9
|
+
declare module '@deepseek-ai/cordis' {
|
|
10
|
+
interface Context {
|
|
11
|
+
/** Remote that serves the forge panel of the GUI. */
|
|
12
|
+
forgePanel: ForgePanelController;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Serves the forge panel. Following a Session inspects the checkout of its
|
|
17
|
+
* current directory using the Session's permissions and execution world, recognizes the
|
|
18
|
+
* code host of the upstream remote or `origin`, probes sign-in for that host,
|
|
19
|
+
* and polls the Session's bound change requests through `ctx.forge` until the
|
|
20
|
+
* last follower of that Session leaves. A worktree request makes the panel
|
|
21
|
+
* create a branch and checkout through an optional `ctx.worktrees` and enter
|
|
22
|
+
* it while the Session's first message waits in the inbox, or at the first
|
|
23
|
+
* step proposal of a message no wait took. After a failed or stopped attempt
|
|
24
|
+
* the message keeps waiting for another attempt or for the request to be
|
|
25
|
+
* withdrawn. A message also waits while the worktree the Session works in is
|
|
26
|
+
* gone, until that worktree is checked out again or left for the source
|
|
27
|
+
* checkout. Changes to a Session's checkout run as Agent maintenance, so a
|
|
28
|
+
* message that arrives meanwhile waits for them.
|
|
29
|
+
*/
|
|
30
|
+
export declare class ForgePanelController extends TypertRemoteService {
|
|
31
|
+
static inject: string[];
|
|
32
|
+
static Config: z<Config>;
|
|
33
|
+
private readonly home;
|
|
34
|
+
private readonly config;
|
|
35
|
+
private readonly panels;
|
|
36
|
+
private worktreeStates;
|
|
37
|
+
private creations;
|
|
38
|
+
private readonly patches;
|
|
39
|
+
private states;
|
|
40
|
+
private readonly stopPanels;
|
|
41
|
+
private readonly stopStates;
|
|
42
|
+
constructor(ctx: Context, config: Config);
|
|
43
|
+
protected [Service.init](): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Stream the panel state of a Session: the current state first, then each
|
|
46
|
+
* later state. Intermediate states may be skipped when the reader is slower
|
|
47
|
+
* than the updates. The stream ends when `signal` aborts or the Remote stops.
|
|
48
|
+
* @param session - Session to follow.
|
|
49
|
+
* @param signal - ends the stream.
|
|
50
|
+
* @returns panel states in publication order.
|
|
51
|
+
*/
|
|
52
|
+
follow(session: Session, signal: AbortSignal): AsyncIterable<ForgePanelState>;
|
|
53
|
+
/**
|
|
54
|
+
* Stream the last known state of every change request that a listed
|
|
55
|
+
* Session the caller may read binds: the stored states first, then each
|
|
56
|
+
* state a poll changes or a new binding reveals. Listing reads no Session
|
|
57
|
+
* log: loaded Sessions report their bindings, others the cached Session
|
|
58
|
+
* summary, and a Session without one shows nothing until it is opened.
|
|
59
|
+
* Closed requests are polled at the idle cadence so reopening is observed. The
|
|
60
|
+
* stream ends when `signal` aborts or the Remote stops.
|
|
61
|
+
* @param signal - ends the stream.
|
|
62
|
+
* @returns frames in publication order.
|
|
63
|
+
* @throws when the Host lacks the Session query, projection cache, storage, or Session store service.
|
|
64
|
+
*/
|
|
65
|
+
changeRequestStates(signal: AbortSignal): AsyncIterable<ForgeChangeRequestStatesFrame>;
|
|
66
|
+
/**
|
|
67
|
+
* List the local branches that can start a worktree of the Session's current checkout.
|
|
68
|
+
* @param session - Session whose current directory is listed.
|
|
69
|
+
* @param signal - request cancellation.
|
|
70
|
+
* @returns the checked-out branch and at most `maxBranches` local branches, the checked-out one first.
|
|
71
|
+
* @throws when the current directory is not inside a checkout or Git fails.
|
|
72
|
+
*/
|
|
73
|
+
branches(session: Session, signal: AbortSignal): Promise<ForgeBranches>;
|
|
74
|
+
/**
|
|
75
|
+
* Bind a change request to a Session by URL, or restore a dismissed binding.
|
|
76
|
+
* @param session - Session that receives the binding.
|
|
77
|
+
* @param url - web URL of the change request.
|
|
78
|
+
* @param signal - request cancellation.
|
|
79
|
+
* @throws `forgePanel/unrecognized-url` when no registered provider serves the URL.
|
|
80
|
+
*/
|
|
81
|
+
track(session: Session, url: string, signal: AbortSignal): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Hide a visible binding of a Session; other URLs leave the Session unchanged.
|
|
84
|
+
* @param session - Session that owns the binding.
|
|
85
|
+
* @param url - web URL of the change request.
|
|
86
|
+
* @param signal - request cancellation.
|
|
87
|
+
*/
|
|
88
|
+
dismiss(session: Session, url: string, signal: AbortSignal): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Reinspect a followed Session's checkout, probe sign-in again, and poll its
|
|
91
|
+
* change requests at once; an unfollowed Session is unchanged.
|
|
92
|
+
* @param session - Session whose panel refreshes.
|
|
93
|
+
* @param signal - request cancellation.
|
|
94
|
+
* @returns settles once the inspection and the sign-in probe have ended; poll results reach the panel stream later.
|
|
95
|
+
*/
|
|
96
|
+
refresh(session: Session, signal: AbortSignal): Promise<void>;
|
|
97
|
+
/**
|
|
98
|
+
* Read the changes one scope covers in the checkout of the Session's
|
|
99
|
+
* current directory, with Git using the Session's sandbox policy.
|
|
100
|
+
* @param session - Session whose checkout is read.
|
|
101
|
+
* @param scope - which changes to read.
|
|
102
|
+
* @param signal - request cancellation.
|
|
103
|
+
* @returns the files, the base of the `branch` scope, and the untracked files left out.
|
|
104
|
+
* @throws `forgePanel/not-a-checkout` outside a checkout; `forgePanel/no-fork-point` for the `branch`
|
|
105
|
+
* scope of a checkout without one; `forgePanel/filter-config-failed` when filter configuration cannot be read
|
|
106
|
+
* completely, before any comparison; `forgePanel/diff-too-large` over `maxDiffBytes`; the Git error when Git fails.
|
|
107
|
+
*/
|
|
108
|
+
localDiff(session: Session, scope: ForgeLocalScope, signal: AbortSignal): Promise<ForgeLocalDiff>;
|
|
109
|
+
/**
|
|
110
|
+
* Read the new side of one changed file in a scope, which supplies the
|
|
111
|
+
* unchanged lines between its hunks: the index for `staged`, else the working tree.
|
|
112
|
+
* @param session - Session whose checkout is read.
|
|
113
|
+
* @param scope - the scope the diff was read in.
|
|
114
|
+
* @param path - path relative to the checkout's top-level directory, as the diff names it.
|
|
115
|
+
* @param signal - request cancellation.
|
|
116
|
+
* @returns the text.
|
|
117
|
+
* @throws `forgePanel/not-a-checkout` outside a checkout; `forgePanel/diff-too-large` over `maxDiffBytes`;
|
|
118
|
+
* an error for a path outside the checkout, binary content, or a failed read.
|
|
119
|
+
*/
|
|
120
|
+
localText(session: Session, scope: ForgeLocalScope, path: string, signal: AbortSignal): Promise<string>;
|
|
121
|
+
/**
|
|
122
|
+
* Load complete checks for the change request whose list the user opened.
|
|
123
|
+
* @param session - Session retaining the visible binding.
|
|
124
|
+
* @param url - binding URL.
|
|
125
|
+
* @param headSha - commit displayed by the card; a different head rejects the result.
|
|
126
|
+
* @param signal - cancellation when the list closes.
|
|
127
|
+
* @returns the complete snapshot at the displayed head.
|
|
128
|
+
* @throws `forgePanel/not-bound` for an invisible binding, `forgePanel/stale-head` for a moved head,
|
|
129
|
+
* or `forgePanel/checks-failed` when the provider cannot complete the read.
|
|
130
|
+
*/
|
|
131
|
+
changeRequestChecks(session: Session, url: string, headSha: string, signal: AbortSignal): Promise<ChangeRequestSnapshot>;
|
|
132
|
+
/**
|
|
133
|
+
* Read the changes of a change request of a Session as its code host
|
|
134
|
+
* computes them, at the head commit of its latest status. A patch already
|
|
135
|
+
* read at the same head commit and base branch is reused from memory, for
|
|
136
|
+
* any Session, until `maxCachedDiffBytes` evicts it.
|
|
137
|
+
* @param session - Session the change request is bound to.
|
|
138
|
+
* @param url - binding URL of the change request.
|
|
139
|
+
* @param signal - request cancellation.
|
|
140
|
+
* @returns the files, the head commit, each file's web page, and the commits the checkout has beyond the head.
|
|
141
|
+
* @throws `forgePanel/not-bound` unless the URL is a visible binding of the Session that a provider serves;
|
|
142
|
+
* `forgePanel/diff-too-large` when the host or its provider refuses the diff over a size limit;
|
|
143
|
+
* `forgePanel/diff-failed` before its status was read and when the host does not provide the diff otherwise.
|
|
144
|
+
*/
|
|
145
|
+
changeRequestDiff(session: Session, url: string, signal: AbortSignal): Promise<ForgeChangeRequestDiff>;
|
|
146
|
+
/**
|
|
147
|
+
* Read one file of a change request's repository at a commit, which
|
|
148
|
+
* supplies the unchanged lines between the hunks of its diff.
|
|
149
|
+
* @param session - Session the change request is bound to.
|
|
150
|
+
* @param url - binding URL of the change request.
|
|
151
|
+
* @param commit - commit object name, the head commit of the diff.
|
|
152
|
+
* @param path - path relative to the repository root.
|
|
153
|
+
* @param signal - request cancellation.
|
|
154
|
+
* @returns the text.
|
|
155
|
+
* @throws `forgePanel/not-bound` unless the URL is a visible binding of the Session that a provider serves;
|
|
156
|
+
* `forgePanel/diff-too-large` when the host or its provider refuses the file over a size limit;
|
|
157
|
+
* `forgePanel/diff-failed` when the host does not provide the file otherwise.
|
|
158
|
+
*/
|
|
159
|
+
changeRequestText(session: Session, url: string, commit: string, path: string, signal: AbortSignal): Promise<string>;
|
|
160
|
+
/**
|
|
161
|
+
* Publish a line comment or completed review for a visible Session binding.
|
|
162
|
+
* @param session - Session retaining the change request.
|
|
163
|
+
* @param url - visible binding URL.
|
|
164
|
+
* @param request - reviewed head, ranges, plain text, and explicit review decision.
|
|
165
|
+
* @param signal - request cancellation.
|
|
166
|
+
* @returns confirmed publication or a typed failure; unknown outcomes require reconciliation on the host.
|
|
167
|
+
*/
|
|
168
|
+
submitReview(session: Session, url: string, request: ForgeReviewRequest, signal: AbortSignal): Promise<ForgeReviewResult>;
|
|
169
|
+
/**
|
|
170
|
+
* Mark a draft change request of a Session ready for review; the change
|
|
171
|
+
* request is polled again once the host answers.
|
|
172
|
+
* @param session - Session the change request is bound to.
|
|
173
|
+
* @param url - binding URL of the change request.
|
|
174
|
+
* @param signal - request cancellation.
|
|
175
|
+
* @throws `forgePanel/not-bound` unless the URL is a visible binding of the Session that a provider serves;
|
|
176
|
+
* `forgePanel/action-failed` with the host's reason when the host refuses or cannot be reached.
|
|
177
|
+
*/
|
|
178
|
+
markReady(session: Session, url: string, signal: AbortSignal): Promise<void>;
|
|
179
|
+
/**
|
|
180
|
+
* Merge a change request of a Session while its head is still `headSha`;
|
|
181
|
+
* the change request is polled again once the host answers.
|
|
182
|
+
* @param session - Session the change request is bound to.
|
|
183
|
+
* @param url - binding URL of the change request.
|
|
184
|
+
* @param method - how the commits enter the base branch.
|
|
185
|
+
* @param headSha - head commit the user confirmed.
|
|
186
|
+
* @param signal - request cancellation.
|
|
187
|
+
* @throws `forgePanel/not-bound` unless the URL is a visible binding of the Session that a provider serves;
|
|
188
|
+
* `forgePanel/stale-head` when the head moved past `headSha`; `forgePanel/action-failed` with the host's
|
|
189
|
+
* reason when the host refuses otherwise or cannot be reached.
|
|
190
|
+
*/
|
|
191
|
+
merge(session: Session, url: string, method: MergeMethod, headSha: string, signal: AbortSignal): Promise<void>;
|
|
192
|
+
/**
|
|
193
|
+
* Ask for a new worktree before the Session's first turn, replacing an open
|
|
194
|
+
* request and forgetting a failed attempt. While the next message waits in
|
|
195
|
+
* the inbox, or else at the first step proposal, the panel creates a branch
|
|
196
|
+
* from `from`, or from HEAD of the current checkout when it is null, and
|
|
197
|
+
* enters its checkout. A message that already waits after a failed or
|
|
198
|
+
* stopped attempt keeps waiting for {@link ForgePanelController.retryWorktree}.
|
|
199
|
+
* @param session - Session without a started turn.
|
|
200
|
+
* @param from - local base branch, or null for HEAD.
|
|
201
|
+
* @param signal - request cancellation.
|
|
202
|
+
* @throws `forgePanel/invalid-branch` when `from` is empty; `forgePanel/worktrees-unavailable`
|
|
203
|
+
* without a worktree service; `forgePanel/session-started` after a turn started or the worktree was
|
|
204
|
+
* created; `forgePanel/session-busy` while the worktree is being created.
|
|
205
|
+
*/
|
|
206
|
+
requestWorktree(session: Session, from: string | null, signal: AbortSignal): Promise<void>;
|
|
207
|
+
/**
|
|
208
|
+
* Withdraw the open worktree request of a Session with its failed attempt,
|
|
209
|
+
* which lets a waiting message go on in the current checkout; without a
|
|
210
|
+
* request the Session is unchanged. Withdrawing needs no worktree service.
|
|
211
|
+
* @param session - Session without a started turn.
|
|
212
|
+
* @param signal - request cancellation.
|
|
213
|
+
* @throws `forgePanel/session-started` after a turn started or the worktree was created;
|
|
214
|
+
* `forgePanel/session-busy` while the worktree is being created.
|
|
215
|
+
*/
|
|
216
|
+
cancelWorktree(session: Session, signal: AbortSignal): Promise<void>;
|
|
217
|
+
/**
|
|
218
|
+
* Stop the creation a message of the Session waits for; the message keeps
|
|
219
|
+
* waiting with the request still open. Without such a creation the Session
|
|
220
|
+
* is unchanged.
|
|
221
|
+
* @param session - Session whose creation stops.
|
|
222
|
+
* @param signal - request cancellation.
|
|
223
|
+
*/
|
|
224
|
+
stopCreation(session: Session, signal: AbortSignal): Promise<void>;
|
|
225
|
+
/**
|
|
226
|
+
* Make another attempt, with a new branch name, at the worktree a message
|
|
227
|
+
* of the Session waits for after a failed or stopped attempt.
|
|
228
|
+
* @param session - Session whose message waits.
|
|
229
|
+
* @param signal - request cancellation.
|
|
230
|
+
* @throws `forgePanel/not-waiting` when no message waits or an attempt is running.
|
|
231
|
+
*/
|
|
232
|
+
retryWorktree(session: Session, signal: AbortSignal): Promise<void>;
|
|
233
|
+
/**
|
|
234
|
+
* Check out the created worktree of a Session again at its recorded
|
|
235
|
+
* directory when that directory is gone: its branch when the branch still
|
|
236
|
+
* exists, otherwise a new branch of the same name at the base commit. Changes
|
|
237
|
+
* that were never committed are not recovered. Runs as Agent maintenance,
|
|
238
|
+
* inside the wait of a message that waits for the restoration, which then
|
|
239
|
+
* goes on; without a missing directory the Session is unchanged.
|
|
240
|
+
* @param session - Session whose worktree directory is gone.
|
|
241
|
+
* @param signal - request cancellation, which aborts the restoration.
|
|
242
|
+
* @throws `forgePanel/no-worktree` without a created worktree; `forgePanel/worktrees-unavailable`
|
|
243
|
+
* without a worktree service; `forgePanel/session-busy` while the Session's Agent is not loaded or
|
|
244
|
+
* has other work; `forgePanel/restore-failed` when Git fails.
|
|
245
|
+
*/
|
|
246
|
+
restoreWorktree(session: Session, signal: AbortSignal): Promise<void>;
|
|
247
|
+
/**
|
|
248
|
+
* Move a Session from its created worktree to the source checkout the
|
|
249
|
+
* worktree came from; the Session no longer works in the worktree. Runs as
|
|
250
|
+
* Agent maintenance, inside the wait of a message that waits for the removed
|
|
251
|
+
* worktree, which then goes on.
|
|
252
|
+
* @param session - Session with a created worktree.
|
|
253
|
+
* @param signal - request cancellation.
|
|
254
|
+
* @throws `forgePanel/no-worktree` without a created worktree; `forgePanel/session-busy` while the
|
|
255
|
+
* Session's Agent is not loaded or has other work; the working-directory service's error when the
|
|
256
|
+
* source checkout no longer exists.
|
|
257
|
+
*/
|
|
258
|
+
continueInProject(session: Session, signal: AbortSignal): Promise<void>;
|
|
259
|
+
/**
|
|
260
|
+
* Hold the turn of a message entering a Session's inbox while the
|
|
261
|
+
* Session's requested worktree does not exist yet, or while the worktree
|
|
262
|
+
* the Session works in is checked and, when gone, until it is restored or
|
|
263
|
+
* left. The message is entering, so the delivery has not woken the Agent
|
|
264
|
+
* yet and its wake waits for the hold.
|
|
265
|
+
* @param agent - Agent whose inbox receives the message.
|
|
266
|
+
*/
|
|
267
|
+
private holdTurn;
|
|
268
|
+
/**
|
|
269
|
+
* Check whether the worktree the Session works in is gone.
|
|
270
|
+
* @param session - Session to check.
|
|
271
|
+
* @param signal - cancellation of the check.
|
|
272
|
+
* @returns the missing worktree, or null while it exists or once the Session works elsewhere.
|
|
273
|
+
* @throws when the filesystem or Git cannot answer.
|
|
274
|
+
*/
|
|
275
|
+
private missingFor;
|
|
276
|
+
/** Inspect the checkout of the Session's current directory, which local diffs read. */
|
|
277
|
+
private checkoutOf;
|
|
278
|
+
/** A visible binding of the Session that a provider serves, which actions and reads are limited to. */
|
|
279
|
+
private bound;
|
|
280
|
+
private worktreeState;
|
|
281
|
+
private editableWorktree;
|
|
282
|
+
/** The worktree state of a Session whose request may still change: no turn started, nothing created, and no attempt running. */
|
|
283
|
+
private changeableWorktree;
|
|
284
|
+
private createdWorktree;
|
|
285
|
+
/**
|
|
286
|
+
* Run work as maintenance of the Session's Agent: inside the wait of a
|
|
287
|
+
* message that waits for the removed worktree, else as a task of its own,
|
|
288
|
+
* which the Agent refuses while it has other work.
|
|
289
|
+
*/
|
|
290
|
+
private maintain;
|
|
291
|
+
/** The shared change request states, created for the first stream from the Host's Session and storage services. */
|
|
292
|
+
private changeRequestStatesHub;
|
|
293
|
+
private panelOf;
|
|
294
|
+
}
|
|
295
|
+
export default ForgePanelController;
|
|
296
|
+
//# sourceMappingURL=index.d.ts.map
|