@awiki/dsh-plugin 0.2.0-rc.4
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 +138 -0
- package/README.zh.md +114 -0
- package/THIRD_PARTY_NOTICES.md +21 -0
- package/cordis.patch.yml +26 -0
- package/lib/client.js +8398 -0
- package/lib/client.js.map +1 -0
- package/lib/index.js +1497 -0
- package/lib/invariant.js +16 -0
- package/lib/provider.js +22 -0
- package/lib/sdk-adapter-DPPZhs6p.mjs +316 -0
- package/lib/summary-provider.js +192 -0
- package/lib/typert.host.d.ts +3 -0
- package/lib/typert.host.js +1201 -0
- package/lib/typert.remote-client.d.ts +54 -0
- package/lib/typert.remote-client.d.ts.map +1 -0
- package/lib/typert.remote-client.js +817 -0
- package/lib/types/client/AwikiOverlay.d.ts +22 -0
- package/lib/types/client/AwikiOverlay.d.ts.map +1 -0
- package/lib/types/client/AwikiOverlay.js +689 -0
- package/lib/types/client/AwikiOverlay.js.map +1 -0
- package/lib/types/client/AwikiSettingsSection.d.ts +25 -0
- package/lib/types/client/AwikiSettingsSection.d.ts.map +1 -0
- package/lib/types/client/AwikiSettingsSection.js +119 -0
- package/lib/types/client/AwikiSettingsSection.js.map +1 -0
- package/lib/types/client/assets.d.ts +3 -0
- package/lib/types/client/assets.d.ts.map +1 -0
- package/lib/types/client/assets.js +70 -0
- package/lib/types/client/assets.js.map +1 -0
- package/lib/types/client/controller.d.ts +194 -0
- package/lib/types/client/controller.d.ts.map +1 -0
- package/lib/types/client/controller.js +701 -0
- package/lib/types/client/controller.js.map +1 -0
- package/lib/types/client/file.d.ts +20 -0
- package/lib/types/client/file.d.ts.map +1 -0
- package/lib/types/client/file.js +41 -0
- package/lib/types/client/file.js.map +1 -0
- package/lib/types/client/index.d.ts +16 -0
- package/lib/types/client/index.d.ts.map +1 -0
- package/lib/types/client/index.js +129 -0
- package/lib/types/client/index.js.map +1 -0
- package/lib/types/client/settings-controller.d.ts +28 -0
- package/lib/types/client/settings-controller.d.ts.map +1 -0
- package/lib/types/client/settings-controller.js +139 -0
- package/lib/types/client/settings-controller.js.map +1 -0
- package/lib/types/client/settings-locales.d.ts +13 -0
- package/lib/types/client/settings-locales.d.ts.map +1 -0
- package/lib/types/client/settings-locales.js +68 -0
- package/lib/types/client/settings-locales.js.map +1 -0
- package/lib/types/client/slots.d.ts +74 -0
- package/lib/types/client/slots.d.ts.map +1 -0
- package/lib/types/client/slots.js +3 -0
- package/lib/types/client/slots.js.map +1 -0
- package/lib/types/client/store.d.ts +18 -0
- package/lib/types/client/store.d.ts.map +1 -0
- package/lib/types/client/store.js +17 -0
- package/lib/types/client/store.js.map +1 -0
- package/lib/types/client.d.ts +3 -0
- package/lib/types/client.d.ts.map +1 -0
- package/lib/types/client.js +3 -0
- package/lib/types/client.js.map +1 -0
- package/lib/types/domain.d.ts +10 -0
- package/lib/types/domain.d.ts.map +1 -0
- package/lib/types/domain.js +18 -0
- package/lib/types/domain.js.map +1 -0
- package/lib/types/index.d.ts +188 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +861 -0
- package/lib/types/index.js.map +1 -0
- package/lib/types/invariant.d.ts +9 -0
- package/lib/types/invariant.d.ts.map +1 -0
- package/lib/types/invariant.js +14 -0
- package/lib/types/invariant.js.map +1 -0
- package/lib/types/provider-api.d.ts +70 -0
- package/lib/types/provider-api.d.ts.map +1 -0
- package/lib/types/provider-api.js +3 -0
- package/lib/types/provider-api.js.map +1 -0
- package/lib/types/provider.d.ts +9 -0
- package/lib/types/provider.d.ts.map +1 -0
- package/lib/types/provider.js +20 -0
- package/lib/types/provider.js.map +1 -0
- package/lib/types/sdk-adapter.d.ts +46 -0
- package/lib/types/sdk-adapter.d.ts.map +1 -0
- package/lib/types/sdk-adapter.js +327 -0
- package/lib/types/sdk-adapter.js.map +1 -0
- package/lib/types/session.d.ts +14 -0
- package/lib/types/session.d.ts.map +1 -0
- package/lib/types/session.js +76 -0
- package/lib/types/session.js.map +1 -0
- package/lib/types/settings-rpc-contract.d.ts +34 -0
- package/lib/types/settings-rpc-contract.d.ts.map +1 -0
- package/lib/types/settings-rpc-contract.js +62 -0
- package/lib/types/settings-rpc-contract.js.map +1 -0
- package/lib/types/settings-rpc.d.ts +6 -0
- package/lib/types/settings-rpc.d.ts.map +1 -0
- package/lib/types/settings-rpc.js +147 -0
- package/lib/types/settings-rpc.js.map +1 -0
- package/lib/types/settings.d.ts +13 -0
- package/lib/types/settings.d.ts.map +1 -0
- package/lib/types/settings.js +15 -0
- package/lib/types/settings.js.map +1 -0
- package/lib/types/summary-provider-api.d.ts +45 -0
- package/lib/types/summary-provider-api.d.ts.map +1 -0
- package/lib/types/summary-provider-api.js +3 -0
- package/lib/types/summary-provider-api.js.map +1 -0
- package/lib/types/summary-provider.d.ts +48 -0
- package/lib/types/summary-provider.d.ts.map +1 -0
- package/lib/types/summary-provider.js +208 -0
- package/lib/types/summary-provider.js.map +1 -0
- package/lib/types/tools.d.ts +20 -0
- package/lib/types/tools.d.ts.map +1 -0
- package/lib/types/tools.js +139 -0
- package/lib/types/tools.js.map +1 -0
- package/lib/types/types.d.ts +292 -0
- package/lib/types/types.d.ts.map +1 -0
- package/lib/types/types.js +6 -0
- package/lib/types/types.js.map +1 -0
- package/package.json +179 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Persist only the local session lock; identity and SecretVault data remain SDK-owned. */
|
|
2
|
+
export declare class AwikiSessionStore {
|
|
3
|
+
private readonly hostDirectory;
|
|
4
|
+
private readonly markerPath;
|
|
5
|
+
constructor(stateRoot: string);
|
|
6
|
+
/** Return whether this installation was explicitly signed out. */
|
|
7
|
+
isSignedOut(): Promise<boolean>;
|
|
8
|
+
/** Lock this installation without modifying the persisted identity. */
|
|
9
|
+
signOut(): Promise<void>;
|
|
10
|
+
/** Unlock this installation while retaining every SDK-owned file. */
|
|
11
|
+
signIn(): Promise<void>;
|
|
12
|
+
private hasPrivateHostDirectory;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"AAKA,2FAA2F;AAC3F,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;gBAEhB,SAAS,EAAE,MAAM;IAKpC,kEAAkE;IACrD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAe5C,uEAAuE;IAC1D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAYrC,qEAAqE;IACxD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;YAQtB,uBAAuB;CAYtC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { chmod, lstat, mkdir, readFile, unlink, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
const SIGNED_OUT_MARKER = 'signed-out-v1\n';
|
|
4
|
+
/** Persist only the local session lock; identity and SecretVault data remain SDK-owned. */
|
|
5
|
+
export class AwikiSessionStore {
|
|
6
|
+
hostDirectory;
|
|
7
|
+
markerPath;
|
|
8
|
+
constructor(stateRoot) {
|
|
9
|
+
this.hostDirectory = join(stateRoot, '.host');
|
|
10
|
+
this.markerPath = join(this.hostDirectory, 'signed-out');
|
|
11
|
+
}
|
|
12
|
+
/** Return whether this installation was explicitly signed out. */
|
|
13
|
+
async isSignedOut() {
|
|
14
|
+
if (!(await this.hasPrivateHostDirectory()))
|
|
15
|
+
return false;
|
|
16
|
+
try {
|
|
17
|
+
const metadata = await lstat(this.markerPath);
|
|
18
|
+
if (!metadata.isFile() || metadata.isSymbolicLink())
|
|
19
|
+
throw new TypeError('awiki: local session marker is invalid');
|
|
20
|
+
if ((await readFile(this.markerPath, 'utf8')) !== SIGNED_OUT_MARKER) {
|
|
21
|
+
throw new TypeError('awiki: local session marker is invalid');
|
|
22
|
+
}
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (isMissing(error))
|
|
27
|
+
return false;
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** Lock this installation without modifying the persisted identity. */
|
|
32
|
+
async signOut() {
|
|
33
|
+
await mkdir(this.hostDirectory, { recursive: true, mode: 0o700 });
|
|
34
|
+
await this.hasPrivateHostDirectory();
|
|
35
|
+
await chmod(this.hostDirectory, 0o700);
|
|
36
|
+
try {
|
|
37
|
+
await writeFile(this.markerPath, SIGNED_OUT_MARKER, { flag: 'wx', mode: 0o600 });
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
if (!isFileExists(error) || !(await this.isSignedOut()))
|
|
41
|
+
throw error;
|
|
42
|
+
}
|
|
43
|
+
await chmod(this.markerPath, 0o600);
|
|
44
|
+
}
|
|
45
|
+
/** Unlock this installation while retaining every SDK-owned file. */
|
|
46
|
+
async signIn() {
|
|
47
|
+
try {
|
|
48
|
+
await unlink(this.markerPath);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
if (!isMissing(error))
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async hasPrivateHostDirectory() {
|
|
56
|
+
try {
|
|
57
|
+
const directory = await lstat(this.hostDirectory);
|
|
58
|
+
if (!directory.isDirectory() || directory.isSymbolicLink()) {
|
|
59
|
+
throw new TypeError('awiki: local session directory is invalid');
|
|
60
|
+
}
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
if (isMissing(error))
|
|
65
|
+
return false;
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function isMissing(error) {
|
|
71
|
+
return typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT';
|
|
72
|
+
}
|
|
73
|
+
function isFileExists(error) {
|
|
74
|
+
return typeof error === 'object' && error !== null && 'code' in error && error.code === 'EEXIST';
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** Client-safe contract for AWiki's plugin-owned settings transport. */
|
|
2
|
+
/** Dedicated Connection channel; the Host registers it with loopback authority. */
|
|
3
|
+
export declare const AWIKI_SETTINGS_RPC_CHANNEL = "/awiki-settings";
|
|
4
|
+
/** Supported channel-relative operations. */
|
|
5
|
+
export declare const AWIKI_SETTINGS_RPC_ENDPOINTS: {
|
|
6
|
+
readonly describe: "describe";
|
|
7
|
+
readonly setDomain: "set-domain";
|
|
8
|
+
readonly resetDomain: "reset-domain";
|
|
9
|
+
};
|
|
10
|
+
/** Minimal, secret-free settings view returned to the browser. */
|
|
11
|
+
export interface AwikiSettingsRpcView {
|
|
12
|
+
readonly value: {
|
|
13
|
+
readonly domain: string;
|
|
14
|
+
};
|
|
15
|
+
readonly base?: {
|
|
16
|
+
readonly domain?: string;
|
|
17
|
+
};
|
|
18
|
+
readonly user?: {
|
|
19
|
+
readonly domain?: string;
|
|
20
|
+
};
|
|
21
|
+
readonly revision: number;
|
|
22
|
+
readonly writable: boolean;
|
|
23
|
+
}
|
|
24
|
+
/** Optimistic revision carried by every browser write. */
|
|
25
|
+
export interface AwikiSettingsRevisionRequest {
|
|
26
|
+
readonly expectedRevision: number;
|
|
27
|
+
}
|
|
28
|
+
/** Domain write request. */
|
|
29
|
+
export interface AwikiSettingsSetDomainRequest extends AwikiSettingsRevisionRequest {
|
|
30
|
+
readonly domain: string;
|
|
31
|
+
}
|
|
32
|
+
/** Fail closed when the Host response is not exactly usable by the settings UI. */
|
|
33
|
+
export declare function decodeAwikiSettingsRpcView(value: unknown): AwikiSettingsRpcView | undefined;
|
|
34
|
+
//# sourceMappingURL=settings-rpc-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-rpc-contract.d.ts","sourceRoot":"","sources":["../../src/settings-rpc-contract.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAIxE,mFAAmF;AACnF,eAAO,MAAM,0BAA0B,oBAAoB,CAAA;AAE3D,6CAA6C;AAC7C,eAAO,MAAM,4BAA4B;;;;CAI/B,CAAA;AAEV,kEAAkE;AAClE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAC3B;AAED,0DAA0D;AAC1D,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;CAClC;AAED,4BAA4B;AAC5B,MAAM,WAAW,6BAA8B,SAAQ,4BAA4B;IACjF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAmBD,mFAAmF;AACnF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,GAAG,SAAS,CAyB3F"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/** Client-safe contract for AWiki's plugin-owned settings transport. */
|
|
2
|
+
import { normalizeAwikiDomain } from "./domain.js";
|
|
3
|
+
/** Dedicated Connection channel; the Host registers it with loopback authority. */
|
|
4
|
+
export const AWIKI_SETTINGS_RPC_CHANNEL = '/awiki-settings';
|
|
5
|
+
/** Supported channel-relative operations. */
|
|
6
|
+
export const AWIKI_SETTINGS_RPC_ENDPOINTS = {
|
|
7
|
+
describe: 'describe',
|
|
8
|
+
setDomain: 'set-domain',
|
|
9
|
+
resetDomain: 'reset-domain',
|
|
10
|
+
};
|
|
11
|
+
function isRecord(value) {
|
|
12
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
13
|
+
}
|
|
14
|
+
function decodeLayer(value) {
|
|
15
|
+
if (!isRecord(value))
|
|
16
|
+
return undefined;
|
|
17
|
+
if (!Object.hasOwn(value, 'domain'))
|
|
18
|
+
return {};
|
|
19
|
+
if (typeof value.domain !== 'string')
|
|
20
|
+
return undefined;
|
|
21
|
+
try {
|
|
22
|
+
const domain = normalizeAwikiDomain(value.domain);
|
|
23
|
+
if (domain !== value.domain)
|
|
24
|
+
return undefined;
|
|
25
|
+
return { domain };
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** Fail closed when the Host response is not exactly usable by the settings UI. */
|
|
32
|
+
export function decodeAwikiSettingsRpcView(value) {
|
|
33
|
+
if (!isRecord(value)
|
|
34
|
+
|| !isRecord(value.value)
|
|
35
|
+
|| typeof value.value.domain !== 'string'
|
|
36
|
+
|| !Number.isSafeInteger(value.revision)
|
|
37
|
+
|| value.revision < 0
|
|
38
|
+
|| typeof value.writable !== 'boolean')
|
|
39
|
+
return undefined;
|
|
40
|
+
let domain;
|
|
41
|
+
try {
|
|
42
|
+
domain = normalizeAwikiDomain(value.value.domain);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
if (domain !== value.value.domain)
|
|
48
|
+
return undefined;
|
|
49
|
+
const base = value.base === undefined ? undefined : decodeLayer(value.base);
|
|
50
|
+
const user = value.user === undefined ? undefined : decodeLayer(value.user);
|
|
51
|
+
if ((value.base !== undefined && base === undefined)
|
|
52
|
+
|| (value.user !== undefined && user === undefined))
|
|
53
|
+
return undefined;
|
|
54
|
+
return {
|
|
55
|
+
value: { domain },
|
|
56
|
+
...base === undefined ? {} : { base },
|
|
57
|
+
...user === undefined ? {} : { user },
|
|
58
|
+
revision: value.revision,
|
|
59
|
+
writable: value.writable,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=settings-rpc-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-rpc-contract.js","sourceRoot":"","sources":["../../src/settings-rpc-contract.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAElD,mFAAmF;AACnF,MAAM,CAAC,MAAM,0BAA0B,GAAG,iBAAiB,CAAA;AAE3D,6CAA6C;AAC7C,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,YAAY;IACvB,WAAW,EAAE,cAAc;CACnB,CAAA;AAqBV,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACtC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAA;IAC9C,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAA;IACtD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACjD,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM;YAAE,OAAO,SAAS,CAAA;QAC7C,OAAO,EAAE,MAAM,EAAE,CAAA;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;WACf,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;WACtB,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ;WACtC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC;WACpC,KAAK,CAAC,QAAmB,GAAG,CAAC;WAC9B,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC1D,IAAI,MAAc,CAAA;IAClB,IAAI,CAAC;QACH,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,SAAS,CAAA;IACnD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC3E,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC3E,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,CAAC;WAC/C,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,CAAC;QAAE,OAAO,SAAS,CAAA;IACvE,OAAO;QACL,KAAK,EAAE,EAAE,MAAM,EAAE;QACjB,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;QACrC,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;QACrC,QAAQ,EAAE,KAAK,CAAC,QAAkB;QAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Loopback-only Host transport for AWiki's durable plugin settings. */
|
|
2
|
+
import { type SettingsProvider } from '@deepseek-ai/dsh-settings';
|
|
3
|
+
import type { ConnectionRpcHandler } from '@deepseek-ai/dsh-client-connection';
|
|
4
|
+
/** Build a handler whose provider lookup remains correct across Cordis reinjection. */
|
|
5
|
+
export declare function createAwikiSettingsRpcHandler(getProvider: () => SettingsProvider | undefined): ConnectionRpcHandler;
|
|
6
|
+
//# sourceMappingURL=settings-rpc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-rpc.d.ts","sourceRoot":"","sources":["../../src/settings-rpc.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;AAiF9E,uFAAuF;AACvF,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,MAAM,gBAAgB,GAAG,SAAS,GAC9C,oBAAoB,CA4DtB"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/** Loopback-only Host transport for AWiki's durable plugin settings. */
|
|
2
|
+
import { SettingsConflictError, settingsNamespace, } from '@deepseek-ai/dsh-settings';
|
|
3
|
+
import { AWIKI_DOMAIN_FIELD, AWIKI_SETTINGS_NAMESPACE, normalizeAwikiDomain } from "./domain.js";
|
|
4
|
+
import { AWIKI_SETTINGS_RPC_ENDPOINTS, } from "./settings-rpc-contract.js";
|
|
5
|
+
function isRecord(value) {
|
|
6
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
7
|
+
}
|
|
8
|
+
function expectedRevision(payload) {
|
|
9
|
+
if (!isRecord(payload) || !Number.isSafeInteger(payload.expectedRevision) || payload.expectedRevision < 0) {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
return payload.expectedRevision;
|
|
13
|
+
}
|
|
14
|
+
function sanitizeLayer(value) {
|
|
15
|
+
if (!isRecord(value))
|
|
16
|
+
return undefined;
|
|
17
|
+
if (!Object.hasOwn(value, AWIKI_DOMAIN_FIELD))
|
|
18
|
+
return {};
|
|
19
|
+
if (typeof value[AWIKI_DOMAIN_FIELD] !== 'string')
|
|
20
|
+
return undefined;
|
|
21
|
+
const domain = normalizeAwikiDomain(value[AWIKI_DOMAIN_FIELD]);
|
|
22
|
+
if (domain !== value[AWIKI_DOMAIN_FIELD])
|
|
23
|
+
return undefined;
|
|
24
|
+
return { domain };
|
|
25
|
+
}
|
|
26
|
+
function view(provider) {
|
|
27
|
+
const descriptor = provider.describe({ redactSecrets: true })
|
|
28
|
+
.find(candidate => candidate.ns === AWIKI_SETTINGS_NAMESPACE);
|
|
29
|
+
if (descriptor === undefined || !isRecord(descriptor.value) || typeof descriptor.value.domain !== 'string') {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
const domain = normalizeAwikiDomain(descriptor.value.domain);
|
|
33
|
+
if (domain !== descriptor.value.domain)
|
|
34
|
+
return undefined;
|
|
35
|
+
const base = descriptor.base === undefined ? undefined : sanitizeLayer(descriptor.base);
|
|
36
|
+
const user = descriptor.user === undefined ? undefined : sanitizeLayer(descriptor.user);
|
|
37
|
+
if ((descriptor.base !== undefined && base === undefined)
|
|
38
|
+
|| (descriptor.user !== undefined && user === undefined))
|
|
39
|
+
return undefined;
|
|
40
|
+
return {
|
|
41
|
+
value: { domain },
|
|
42
|
+
...base === undefined ? {} : { base },
|
|
43
|
+
...user === undefined ? {} : { user },
|
|
44
|
+
revision: descriptor.revision,
|
|
45
|
+
writable: provider.writable,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function unavailable() {
|
|
49
|
+
return {
|
|
50
|
+
ok: false,
|
|
51
|
+
error: {
|
|
52
|
+
code: 'settings-not-exposed',
|
|
53
|
+
message: 'AWiki settings are unavailable in this Host composition.',
|
|
54
|
+
details: { ns: AWIKI_SETTINGS_NAMESPACE },
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function badRequest() {
|
|
59
|
+
return {
|
|
60
|
+
ok: false,
|
|
61
|
+
error: {
|
|
62
|
+
code: 'bad-request',
|
|
63
|
+
message: 'The AWiki settings request is invalid.',
|
|
64
|
+
details: { issues: [] },
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function cancelled() {
|
|
69
|
+
return {
|
|
70
|
+
ok: false,
|
|
71
|
+
error: {
|
|
72
|
+
code: 'cancelled',
|
|
73
|
+
message: 'The AWiki settings request was cancelled.',
|
|
74
|
+
details: {},
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/** Build a handler whose provider lookup remains correct across Cordis reinjection. */
|
|
79
|
+
export function createAwikiSettingsRpcHandler(getProvider) {
|
|
80
|
+
return async (endpoint, payload, signal) => {
|
|
81
|
+
if (signal.aborted)
|
|
82
|
+
return cancelled();
|
|
83
|
+
const provider = getProvider();
|
|
84
|
+
if (provider === undefined)
|
|
85
|
+
return unavailable();
|
|
86
|
+
if (endpoint === AWIKI_SETTINGS_RPC_ENDPOINTS.describe) {
|
|
87
|
+
if (!isRecord(payload))
|
|
88
|
+
return badRequest();
|
|
89
|
+
const current = view(provider);
|
|
90
|
+
return current === undefined ? unavailable() : { ok: true, value: current };
|
|
91
|
+
}
|
|
92
|
+
const revision = expectedRevision(payload);
|
|
93
|
+
if (revision === undefined)
|
|
94
|
+
return badRequest();
|
|
95
|
+
let operation;
|
|
96
|
+
if (endpoint === AWIKI_SETTINGS_RPC_ENDPOINTS.setDomain) {
|
|
97
|
+
if (!isRecord(payload) || typeof payload.domain !== 'string')
|
|
98
|
+
return badRequest();
|
|
99
|
+
let domain;
|
|
100
|
+
try {
|
|
101
|
+
domain = normalizeAwikiDomain(payload.domain);
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return badRequest();
|
|
105
|
+
}
|
|
106
|
+
if (domain !== payload.domain)
|
|
107
|
+
return badRequest();
|
|
108
|
+
operation = { op: 'set', path: [AWIKI_DOMAIN_FIELD], value: domain };
|
|
109
|
+
}
|
|
110
|
+
else if (endpoint === AWIKI_SETTINGS_RPC_ENDPOINTS.resetDomain) {
|
|
111
|
+
operation = { op: 'unset', path: [AWIKI_DOMAIN_FIELD] };
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
return badRequest();
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
await provider.mutate(settingsNamespace(AWIKI_SETTINGS_NAMESPACE), [operation], revision);
|
|
118
|
+
const current = view(provider);
|
|
119
|
+
return current === undefined ? unavailable() : { ok: true, value: current };
|
|
120
|
+
}
|
|
121
|
+
catch (cause) {
|
|
122
|
+
if (cause instanceof SettingsConflictError) {
|
|
123
|
+
return {
|
|
124
|
+
ok: false,
|
|
125
|
+
error: {
|
|
126
|
+
code: 'settings-conflict',
|
|
127
|
+
message: 'AWiki settings changed in another client.',
|
|
128
|
+
details: {
|
|
129
|
+
ns: AWIKI_SETTINGS_NAMESPACE,
|
|
130
|
+
expected: cause.expected,
|
|
131
|
+
actual: cause.actual,
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
ok: false,
|
|
138
|
+
error: {
|
|
139
|
+
code: 'settings-rejected',
|
|
140
|
+
message: 'The Host rejected the AWiki settings change.',
|
|
141
|
+
details: { ns: AWIKI_SETTINGS_NAMESPACE },
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=settings-rpc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-rpc.js","sourceRoot":"","sources":["../../src/settings-rpc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Durable AWiki settings shared by the Host service and browser settings page. */
|
|
2
|
+
import z from '@deepseek-ai/schemastery';
|
|
3
|
+
export { AWIKI_DOMAIN_FIELD, AWIKI_SETTINGS_NAMESPACE, DEFAULT_AWIKI_DOMAIN, normalizeAwikiDomain } from './domain.ts';
|
|
4
|
+
/** Persisted AWiki settings. */
|
|
5
|
+
export interface AwikiSettings {
|
|
6
|
+
/** Handle provider domain used by registration and bare-Handle resolution. */
|
|
7
|
+
readonly domain: string;
|
|
8
|
+
}
|
|
9
|
+
/** Durable AWiki schema exposed through the DSH settings service. */
|
|
10
|
+
export declare const AwikiSettingsSchema: z<AwikiSettings>;
|
|
11
|
+
/** Reject settings values that cannot be consumed as canonical domains. */
|
|
12
|
+
export declare function validateAwikiSettings(value: AwikiSettings): void;
|
|
13
|
+
//# sourceMappingURL=settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/settings.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAGxC,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAEtH,gCAAgC;AAChC,MAAM,WAAW,aAAa;IAC5B,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,qEAAqE;AACrE,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,aAAa,CAE/C,CAAA;AAEF,2EAA2E;AAC3E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAIhE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Durable AWiki settings shared by the Host service and browser settings page. */
|
|
2
|
+
import z from '@deepseek-ai/schemastery';
|
|
3
|
+
import { AWIKI_DOMAIN_FIELD, DEFAULT_AWIKI_DOMAIN, normalizeAwikiDomain } from "./domain.js";
|
|
4
|
+
export { AWIKI_DOMAIN_FIELD, AWIKI_SETTINGS_NAMESPACE, DEFAULT_AWIKI_DOMAIN, normalizeAwikiDomain } from "./domain.js";
|
|
5
|
+
/** Durable AWiki schema exposed through the DSH settings service. */
|
|
6
|
+
export const AwikiSettingsSchema = z.object({
|
|
7
|
+
[AWIKI_DOMAIN_FIELD]: z.string().default(DEFAULT_AWIKI_DOMAIN),
|
|
8
|
+
});
|
|
9
|
+
/** Reject settings values that cannot be consumed as canonical domains. */
|
|
10
|
+
export function validateAwikiSettings(value) {
|
|
11
|
+
if (normalizeAwikiDomain(value.domain) !== value.domain) {
|
|
12
|
+
throw new TypeError('awiki: domain must be lowercase and must not contain surrounding whitespace');
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/settings.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,OAAO,CAAC,MAAM,0BAA0B,CAAA;AACxC,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAE5F,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAQtH,qEAAqE;AACrE,MAAM,CAAC,MAAM,mBAAmB,GAAqB,CAAC,CAAC,MAAM,CAAC;IAC5D,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC;CAC/D,CAAC,CAAA;AAEF,2EAA2E;AAC3E,MAAM,UAAU,qBAAqB,CAAC,KAAoB;IACxD,IAAI,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;QACxD,MAAM,IAAI,SAAS,CAAC,6EAA6E,CAAC,CAAA;IACpG,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** Same-process contract between the AWiki Host service and a replaceable summary provider. */
|
|
2
|
+
import type { AwikiMessageId, AwikiSummaryTodo } from './types.ts';
|
|
3
|
+
/** Data-minimized text message passed to the model provider. */
|
|
4
|
+
export interface AwikiSummaryTextMessage {
|
|
5
|
+
readonly id: AwikiMessageId;
|
|
6
|
+
readonly sender: string;
|
|
7
|
+
readonly outgoing: boolean;
|
|
8
|
+
readonly sentAt: string;
|
|
9
|
+
readonly content: {
|
|
10
|
+
readonly kind: 'text';
|
|
11
|
+
readonly text: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/** Data-minimized attachment message. Attachment bytes and storage fields never enter this contract. */
|
|
15
|
+
export interface AwikiSummaryAttachmentMessage {
|
|
16
|
+
readonly id: AwikiMessageId;
|
|
17
|
+
readonly sender: string;
|
|
18
|
+
readonly outgoing: boolean;
|
|
19
|
+
readonly sentAt: string;
|
|
20
|
+
readonly content: {
|
|
21
|
+
readonly kind: 'attachment';
|
|
22
|
+
readonly fileName: string;
|
|
23
|
+
readonly mimeType: string;
|
|
24
|
+
readonly size: number;
|
|
25
|
+
readonly caption?: string;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** Chronological, JSON-safe message supplied to a summary provider. */
|
|
29
|
+
export type AwikiSummarySourceMessage = AwikiSummaryTextMessage | AwikiSummaryAttachmentMessage;
|
|
30
|
+
/** One bounded model request after Host-owned history selection and minimization. */
|
|
31
|
+
export interface AwikiSummaryProviderRequest {
|
|
32
|
+
readonly messages: readonly AwikiSummarySourceMessage[];
|
|
33
|
+
readonly signal?: AbortSignal;
|
|
34
|
+
}
|
|
35
|
+
/** Strict structured output accepted from a summary provider. */
|
|
36
|
+
export interface AwikiSummaryProviderResult {
|
|
37
|
+
readonly highlights: readonly string[];
|
|
38
|
+
readonly conclusions: readonly string[];
|
|
39
|
+
readonly todos: readonly AwikiSummaryTodo[];
|
|
40
|
+
}
|
|
41
|
+
/** Replaceable same-process provider used by the Host Remote. */
|
|
42
|
+
export interface AwikiSummaryProvider {
|
|
43
|
+
summarize(request: AwikiSummaryProviderRequest): Promise<AwikiSummaryProviderResult>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=summary-provider-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary-provider-api.d.ts","sourceRoot":"","sources":["../../src/summary-provider-api.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAE/F,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElE,gEAAgE;AAChE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAA;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KACtB,CAAA;CACF;AAED,wGAAwG;AACxG,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAA;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;QAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;QACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;QACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAC1B,CAAA;CACF;AAED,uEAAuE;AACvE,MAAM,MAAM,yBAAyB,GAAG,uBAAuB,GAAG,6BAA6B,CAAA;AAE/F,qFAAqF;AACrF,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,QAAQ,EAAE,SAAS,yBAAyB,EAAE,CAAA;IACvD,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAC9B;AAED,iEAAiE;AACjE,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;IACtC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAC5C;AAED,iEAAiE;AACjE,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAA;CACrF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary-provider-api.js","sourceRoot":"","sources":["../../src/summary-provider-api.ts"],"names":[],"mappings":"AAAA,+FAA+F"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/** One-shot LLM provider for user-triggered AWiki conversation summaries. */
|
|
2
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
3
|
+
import z from '@deepseek-ai/schemastery';
|
|
4
|
+
import type { GenerateOptions, StreamChunk } from '@deepseek-ai/dsh-llm';
|
|
5
|
+
import type { AwikiSummaryProviderRequest, AwikiSummaryProviderResult } from './summary-provider-api.ts';
|
|
6
|
+
/** Default end-to-end deadline for an auxiliary summary request. */
|
|
7
|
+
export declare const DEFAULT_SUMMARY_TIMEOUT_MS = 30000;
|
|
8
|
+
/** Default output cap for the small structured JSON response. */
|
|
9
|
+
export declare const DEFAULT_SUMMARY_MAX_OUTPUT_TOKENS = 768;
|
|
10
|
+
/** Loader configuration for the replaceable default summary provider. */
|
|
11
|
+
export interface Config {
|
|
12
|
+
readonly timeoutMs?: number;
|
|
13
|
+
readonly maxOutputTokens?: number;
|
|
14
|
+
}
|
|
15
|
+
/** Loader schema for one-shot summary policy. */
|
|
16
|
+
export declare const Config: z<Config>;
|
|
17
|
+
/** Stable internal failure taxonomy consumed only by the Host normalizer. */
|
|
18
|
+
export type AwikiSummaryProviderFailureCode = 'route-unavailable' | 'timeout' | 'cancelled' | 'model-failed' | 'truncated' | 'tool-call' | 'empty-output' | 'invalid-output';
|
|
19
|
+
/** Closed provider error. Its message contains no model output or provider response. */
|
|
20
|
+
export declare class AwikiSummaryProviderError extends Error {
|
|
21
|
+
readonly code: AwikiSummaryProviderFailureCode;
|
|
22
|
+
readonly name = "AwikiSummaryProviderError";
|
|
23
|
+
constructor(code: AwikiSummaryProviderFailureCode);
|
|
24
|
+
}
|
|
25
|
+
interface SummaryLlmContext {
|
|
26
|
+
readonly llm: {
|
|
27
|
+
stream(options: GenerateOptions): AsyncIterable<StreamChunk>;
|
|
28
|
+
};
|
|
29
|
+
readonly agentDefaultModel: {
|
|
30
|
+
currentSelection(): {
|
|
31
|
+
readonly provider: string;
|
|
32
|
+
readonly model: string;
|
|
33
|
+
readonly reasoningEffort?: GenerateOptions['reasoningEffort'];
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/** JSON-frame untrusted messages without allowing their content to escape the data boundary. */
|
|
38
|
+
export declare function frameAwikiSummaryMessages(messages: AwikiSummaryProviderRequest['messages']): string;
|
|
39
|
+
/** Execute one direct LLM stream without creating an Agent or writing a Session. */
|
|
40
|
+
export declare function summarizeAwikiMessagesWithLlm(ctx: SummaryLlmContext, config: Config, request: AwikiSummaryProviderRequest): Promise<AwikiSummaryProviderResult>;
|
|
41
|
+
/** Cordis plugin name used by Loader diagnostics. */
|
|
42
|
+
export declare const name = "awiki-default-summary-provider";
|
|
43
|
+
/** The Host registry and current Harness model route must exist before this provider loads. */
|
|
44
|
+
export declare const inject: string[];
|
|
45
|
+
/** Register the one-shot provider after the AWiki SDK provider. */
|
|
46
|
+
export declare function apply(ctx: Context, config: Config): void;
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=summary-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary-provider.d.ts","sourceRoot":"","sources":["../../src/summary-provider.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAExC,OAAO,KAAK,EAAgB,eAAe,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEtF,OAAO,KAAK,EAEV,2BAA2B,EAC3B,0BAA0B,EAC3B,MAAM,2BAA2B,CAAA;AAGlC,oEAAoE;AACpE,eAAO,MAAM,0BAA0B,QAAS,CAAA;AAChD,iEAAiE;AACjE,eAAO,MAAM,iCAAiC,MAAM,CAAA;AAEpD,yEAAyE;AACzE,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAClC;AAED,iDAAiD;AACjD,eAAO,MAAM,MAAM,EAAE,CAAC,CAAC,MAAM,CAG3B,CAAA;AAOF,6EAA6E;AAC7E,MAAM,MAAM,+BAA+B,GACvC,mBAAmB,GACnB,SAAS,GACT,WAAW,GACX,cAAc,GACd,WAAW,GACX,WAAW,GACX,cAAc,GACd,gBAAgB,CAAA;AAEpB,wFAAwF;AACxF,qBAAa,yBAA0B,SAAQ,KAAK;IAGtC,QAAQ,CAAC,IAAI,EAAE,+BAA+B;IAF1D,SAAkB,IAAI,+BAA8B;gBAE/B,IAAI,EAAE,+BAA+B;CAG3D;AAED,UAAU,iBAAiB;IACzB,QAAQ,CAAC,GAAG,EAAE;QACZ,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,aAAa,CAAC,WAAW,CAAC,CAAA;KAC7D,CAAA;IACD,QAAQ,CAAC,iBAAiB,EAAE;QAC1B,gBAAgB,IAAI;YAClB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;YACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;YACtB,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAAA;SAC9D,CAAA;KACF,CAAA;CACF;AAgCD,gGAAgG;AAChG,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,2BAA2B,CAAC,UAAU,CAAC,GAAG,MAAM,CAEnG;AA6CD,oFAAoF;AACpF,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,0BAA0B,CAAC,CA6DrC;AAyBD,qDAAqD;AACrD,eAAO,MAAM,IAAI,mCAAmC,CAAA;AACpD,+FAA+F;AAC/F,eAAO,MAAM,MAAM,UAAwC,CAAA;AAE3D,mEAAmE;AACnE,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAUxD"}
|