@dsh-enhanced/owner-console 0.0.0-stage → 0.1.67
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.md +320 -2
- package/cordis.patch.yml +3 -0
- package/lib/art.d.ts +7 -0
- package/lib/art.d.ts.map +1 -0
- package/lib/art.js +22 -0
- package/lib/art.js.map +1 -0
- package/lib/artwork.d.ts +15 -0
- package/lib/artwork.d.ts.map +1 -0
- package/lib/artwork.js +15 -0
- package/lib/artwork.js.map +1 -0
- package/lib/build-approvals.d.ts +11 -0
- package/lib/build-approvals.d.ts.map +1 -0
- package/lib/build-approvals.js +64 -0
- package/lib/build-approvals.js.map +1 -0
- package/lib/chat-view.d.ts +50 -0
- package/lib/chat-view.d.ts.map +1 -0
- package/lib/chat-view.js +545 -0
- package/lib/chat-view.js.map +1 -0
- package/lib/chat.d.ts +345 -0
- package/lib/chat.d.ts.map +1 -0
- package/lib/chat.js +418 -0
- package/lib/chat.js.map +1 -0
- package/lib/client.d.ts +131 -0
- package/lib/client.d.ts.map +1 -0
- package/lib/client.js +17214 -0
- package/lib/client.js.map +1 -0
- package/lib/index.d.ts +16 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +18 -0
- package/lib/index.js.map +1 -0
- package/lib/service.d.ts +78 -0
- package/lib/service.d.ts.map +1 -0
- package/lib/service.js +683 -0
- package/lib/service.js.map +1 -0
- package/lib/settings.d.ts +136 -0
- package/lib/settings.d.ts.map +1 -0
- package/lib/settings.js +31 -0
- package/lib/settings.js.map +1 -0
- package/lib/state.d.ts +35 -0
- package/lib/state.d.ts.map +1 -0
- package/lib/state.js +84 -0
- package/lib/state.js.map +1 -0
- package/lib/typert.d.ts +1307 -0
- package/lib/typert.d.ts.map +1 -0
- package/lib/typert.js +271 -0
- package/lib/typert.js.map +1 -0
- package/lib/ui.d.ts +142 -0
- package/lib/ui.d.ts.map +1 -0
- package/lib/ui.js +87 -0
- package/lib/ui.js.map +1 -0
- package/lib/version.d.ts +2 -0
- package/lib/version.d.ts.map +1 -0
- package/lib/version.js +2 -0
- package/lib/version.js.map +1 -0
- package/package.json +99 -3
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Reject a name the Host would not accept as an `allowBuilds` key. */
|
|
2
|
+
export declare function assertBuildName(name: string): void;
|
|
3
|
+
/** Add `allowBuilds: <name>: true` entries to a profile's `pnpm-workspace.yaml`.
|
|
4
|
+
*
|
|
5
|
+
* Existing decisions are kept; only the listed names are set. The write replaces the file
|
|
6
|
+
* atomically with mode 0600 so an interrupted retry cannot leave a half-written policy.
|
|
7
|
+
* @param dir Absolute profile directory supplied by the Host.
|
|
8
|
+
* @param names Exact package keys the owner confirmed; all must pass {@link assertBuildName}.
|
|
9
|
+
*/
|
|
10
|
+
export declare function persistAllowedBuilds(dir: string, names: readonly string[]): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=build-approvals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-approvals.d.ts","sourceRoot":"","sources":["../src/build-approvals.ts"],"names":[],"mappings":"AAmBA,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIlD;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB/F"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/** Record owner-confirmed dependency build scripts in the profile's pnpm workspace file.
|
|
2
|
+
*
|
|
3
|
+
* The Host records pnpm's blocked-build report itself, but its parser misses the line when
|
|
4
|
+
* pnpm decorates it with ANSI colour (pnpm 11 does), so `pendingBuilds` stays empty and its
|
|
5
|
+
* own approval retry answers `stale-approval`. The console therefore writes the exact names
|
|
6
|
+
* the owner confirmed—only names pnpm reported for this install—before retrying once.
|
|
7
|
+
*/
|
|
8
|
+
import { readFile, rename, writeFile } from 'node:fs/promises';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
import { isMap, parseDocument } from 'yaml';
|
|
11
|
+
const MAX_NAMES = 64;
|
|
12
|
+
const MAX_NAME_LENGTH = 200;
|
|
13
|
+
const UNSAFE_NAME = /[*?\s]/u;
|
|
14
|
+
const isControl = (char) => {
|
|
15
|
+
const code = char.codePointAt(0) ?? 0;
|
|
16
|
+
return code < 0x20 || code === 0x7f;
|
|
17
|
+
};
|
|
18
|
+
/** Reject a name the Host would not accept as an `allowBuilds` key. */
|
|
19
|
+
export function assertBuildName(name) {
|
|
20
|
+
if (name === '' || name.length > MAX_NAME_LENGTH || UNSAFE_NAME.test(name) || [...name].some(isControl)) {
|
|
21
|
+
throw new Error(`构建脚本名称无效:${JSON.stringify(name)}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/** Add `allowBuilds: <name>: true` entries to a profile's `pnpm-workspace.yaml`.
|
|
25
|
+
*
|
|
26
|
+
* Existing decisions are kept; only the listed names are set. The write replaces the file
|
|
27
|
+
* atomically with mode 0600 so an interrupted retry cannot leave a half-written policy.
|
|
28
|
+
* @param dir Absolute profile directory supplied by the Host.
|
|
29
|
+
* @param names Exact package keys the owner confirmed; all must pass {@link assertBuildName}.
|
|
30
|
+
*/
|
|
31
|
+
export async function persistAllowedBuilds(dir, names) {
|
|
32
|
+
const unique = [...new Set(names)];
|
|
33
|
+
if (unique.length === 0)
|
|
34
|
+
return;
|
|
35
|
+
if (unique.length > MAX_NAMES)
|
|
36
|
+
throw new Error(`构建脚本名称过多(上限 ${String(MAX_NAMES)})`);
|
|
37
|
+
for (const name of unique)
|
|
38
|
+
assertBuildName(name);
|
|
39
|
+
const filename = join(dir, 'pnpm-workspace.yaml');
|
|
40
|
+
let text;
|
|
41
|
+
try {
|
|
42
|
+
text = await readFile(filename, 'utf8');
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
if (error.code !== 'ENOENT')
|
|
46
|
+
throw error;
|
|
47
|
+
text = '';
|
|
48
|
+
}
|
|
49
|
+
const document = parseDocument(text);
|
|
50
|
+
if (document.errors[0] !== undefined)
|
|
51
|
+
throw document.errors[0];
|
|
52
|
+
if (document.contents !== null && !isMap(document.contents)) {
|
|
53
|
+
throw new Error('pnpm-workspace.yaml 必须是 YAML 映射');
|
|
54
|
+
}
|
|
55
|
+
const builds = document.get('allowBuilds');
|
|
56
|
+
if (builds !== undefined && !isMap(builds))
|
|
57
|
+
throw new Error('allowBuilds 必须是 YAML 映射');
|
|
58
|
+
for (const name of unique)
|
|
59
|
+
document.setIn(['allowBuilds', name], true);
|
|
60
|
+
const temporary = `${filename}.owner-console-${process.pid.toString()}`;
|
|
61
|
+
await writeFile(temporary, String(document), { mode: 0o600 });
|
|
62
|
+
await rename(temporary, filename);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=build-approvals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-approvals.js","sourceRoot":"","sources":["../src/build-approvals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type ChatReference, type ChatRuntime, type ChatSessionSnapshot } from './chat.js';
|
|
2
|
+
/** Renderer seat shapes are structural: the Host injects these props, no package import is needed. */
|
|
3
|
+
export type FactoryRenderSlotSeat = (name: string, props: Readonly<Record<string, unknown>>, options?: Readonly<{
|
|
4
|
+
slots?: Readonly<Record<string, unknown>>;
|
|
5
|
+
fallback?: unknown;
|
|
6
|
+
}>) => unknown;
|
|
7
|
+
export type RenderSlotSeat = (name: string, props: Readonly<Record<string, unknown>>, options?: Readonly<{
|
|
8
|
+
fallback?: unknown;
|
|
9
|
+
}>) => unknown;
|
|
10
|
+
export type SessionProviderSeat = (props: Readonly<{
|
|
11
|
+
session: ChatReference;
|
|
12
|
+
children?: unknown;
|
|
13
|
+
}>) => unknown;
|
|
14
|
+
/** Props every renderer-created component receives; only some are needed by this surface. */
|
|
15
|
+
export type OwnerConsoleRendererSeat = Readonly<{
|
|
16
|
+
renderFactorySlot?: FactoryRenderSlotSeat;
|
|
17
|
+
renderSlot?: RenderSlotSeat;
|
|
18
|
+
SessionProvider?: SessionProviderSeat;
|
|
19
|
+
}>;
|
|
20
|
+
type ConversationSnapshotLike = Readonly<{
|
|
21
|
+
activeTargets: ReadonlySet<string>;
|
|
22
|
+
}>;
|
|
23
|
+
type SessionListLike = Readonly<{
|
|
24
|
+
byId: Readonly<Record<string, Readonly<{
|
|
25
|
+
blank?: boolean;
|
|
26
|
+
}> | undefined>>;
|
|
27
|
+
}>;
|
|
28
|
+
export interface OwnerConsoleConversationSeat {
|
|
29
|
+
readonly sessionId?: string;
|
|
30
|
+
readonly renderFactorySlot?: FactoryRenderSlotSeat;
|
|
31
|
+
readonly useSession?: (selector: (value: ChatSessionSnapshot) => unknown) => unknown;
|
|
32
|
+
readonly useConversation?: (selector: (value: ConversationSnapshotLike) => unknown) => unknown;
|
|
33
|
+
readonly useSessions?: (selector: (value: SessionListLike) => unknown) => unknown;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Child slot body rendered under the injected SessionProvider. It computes the native
|
|
37
|
+
* Conversation phase from the Session's own snapshots and renders the shipped
|
|
38
|
+
* `conversation.content` factory with `hero:false` so no workspace picker or catalog appears.
|
|
39
|
+
*/
|
|
40
|
+
export declare function OwnerConsoleConversation({ sessionId, renderFactorySlot, useSession, useConversation, useSessions }: OwnerConsoleConversationSeat): unknown;
|
|
41
|
+
export interface OwnerConsoleChatProps {
|
|
42
|
+
readonly runtime: ChatRuntime;
|
|
43
|
+
readonly onOpenSettings: () => void;
|
|
44
|
+
/** Renderer-injected seats from the Host; absence selects the self-contained compact fallback. */
|
|
45
|
+
readonly renderer?: OwnerConsoleRendererSeat;
|
|
46
|
+
}
|
|
47
|
+
/** The sidebar's 文鳐 panel: a native-Session chat window with a settings gear. */
|
|
48
|
+
export declare function OwnerConsoleChat({ runtime, onOpenSettings, renderer }: OwnerConsoleChatProps): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=chat-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-view.d.ts","sourceRoot":"","sources":["../src/chat-view.ts"],"names":[],"mappings":"AAYA,OAAO,EAGqD,KAAK,aAAa,EAAE,KAAK,WAAW,EAC9F,KAAK,mBAAmB,EACzB,MAAM,WAAW,CAAA;AAelB,sGAAsG;AACtG,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACzF,OAAO,CAAC,EAAE,QAAQ,CAAC;IAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,KAAK,OAAO,CAAA;AACnG,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAClF,OAAO,CAAC,EAAE,QAAQ,CAAC;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,KAAK,OAAO,CAAA;AACxD,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,KAAK,OAAO,CAAA;AAC9G,6FAA6F;AAC7F,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,iBAAiB,CAAC,EAAE,qBAAqB,CAAA;IACzC,UAAU,CAAC,EAAE,cAAc,CAAA;IAC3B,eAAe,CAAC,EAAE,mBAAmB,CAAA;CACtC,CAAC,CAAA;AAEF,KAAK,wBAAwB,GAAG,QAAQ,CAAC;IAAE,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,CAAA;AAChF,KAAK,eAAe,GAAG,QAAQ,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAA;CAAE,CAAC,CAAA;AAiD9G,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,qBAAqB,CAAA;IAClD,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,KAAK,OAAO,CAAA;IACpF,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,OAAO,KAAK,OAAO,CAAA;IAC9F,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,KAAK,OAAO,CAAA;CAClF;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,eAAe,EAClG,WAAW,EAAE,EAAE,4BAA4B,WAmB5C;AA6KD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,IAAI,CAAA;IACnC,kGAAkG;IAClG,QAAQ,CAAC,QAAQ,CAAC,EAAE,wBAAwB,CAAA;CAC7C;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,qBAAqB,0FAoX5F"}
|