@awiki/dsh-plugin 0.2.4 → 0.3.0-rc.1

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.
Files changed (142) hide show
  1. package/README.md +131 -22
  2. package/README.zh.md +110 -20
  3. package/THIRD_PARTY_NOTICES.md +8 -1
  4. package/cordis.patch.yml +5 -0
  5. package/lib/client.js +12534 -2647
  6. package/lib/client.js.map +1 -1
  7. package/lib/index.js +2431 -92
  8. package/lib/model-proxy-contract.js +96 -0
  9. package/lib/provider.js +4 -1
  10. package/lib/sdk-adapter-DLhLrLI6.mjs +886 -0
  11. package/lib/typert.host.js +1269 -534
  12. package/lib/typert.remote-client.d.ts +47 -1
  13. package/lib/typert.remote-client.d.ts.map +1 -1
  14. package/lib/typert.remote-client.js +1254 -141
  15. package/lib/types/attachment-cache.d.ts +28 -0
  16. package/lib/types/attachment-cache.d.ts.map +1 -0
  17. package/lib/types/attachment-cache.js +194 -0
  18. package/lib/types/attachment-cache.js.map +1 -0
  19. package/lib/types/client/AwikiGroupDetails.d.ts +16 -0
  20. package/lib/types/client/AwikiGroupDetails.d.ts.map +1 -0
  21. package/lib/types/client/AwikiGroupDetails.js +108 -0
  22. package/lib/types/client/AwikiGroupDetails.js.map +1 -0
  23. package/lib/types/client/AwikiIdentityAccess.d.ts +21 -0
  24. package/lib/types/client/AwikiIdentityAccess.d.ts.map +1 -0
  25. package/lib/types/client/AwikiIdentityAccess.js +148 -0
  26. package/lib/types/client/AwikiIdentityAccess.js.map +1 -0
  27. package/lib/types/client/AwikiIdentityPage.d.ts +11 -0
  28. package/lib/types/client/AwikiIdentityPage.d.ts.map +1 -0
  29. package/lib/types/client/AwikiIdentityPage.js +8 -0
  30. package/lib/types/client/AwikiIdentityPage.js.map +1 -0
  31. package/lib/types/client/AwikiMail.d.ts +15 -0
  32. package/lib/types/client/AwikiMail.d.ts.map +1 -0
  33. package/lib/types/client/AwikiMail.js +380 -0
  34. package/lib/types/client/AwikiMail.js.map +1 -0
  35. package/lib/types/client/AwikiOnboarding.d.ts +22 -0
  36. package/lib/types/client/AwikiOnboarding.d.ts.map +1 -0
  37. package/lib/types/client/AwikiOnboarding.js +104 -0
  38. package/lib/types/client/AwikiOnboarding.js.map +1 -0
  39. package/lib/types/client/AwikiOverlay.d.ts +10 -0
  40. package/lib/types/client/AwikiOverlay.d.ts.map +1 -1
  41. package/lib/types/client/AwikiOverlay.js +370 -127
  42. package/lib/types/client/AwikiOverlay.js.map +1 -1
  43. package/lib/types/client/AwikiProfileCard.d.ts +9 -0
  44. package/lib/types/client/AwikiProfileCard.d.ts.map +1 -0
  45. package/lib/types/client/AwikiProfileCard.js +90 -0
  46. package/lib/types/client/AwikiProfileCard.js.map +1 -0
  47. package/lib/types/client/AwikiRecoveryForm.d.ts +24 -0
  48. package/lib/types/client/AwikiRecoveryForm.d.ts.map +1 -0
  49. package/lib/types/client/AwikiRecoveryForm.js +148 -0
  50. package/lib/types/client/AwikiRecoveryForm.js.map +1 -0
  51. package/lib/types/client/AwikiSettingsSection.d.ts +18 -4
  52. package/lib/types/client/AwikiSettingsSection.d.ts.map +1 -1
  53. package/lib/types/client/AwikiSettingsSection.js +277 -23
  54. package/lib/types/client/AwikiSettingsSection.js.map +1 -1
  55. package/lib/types/client/MentionText.d.ts +7 -0
  56. package/lib/types/client/MentionText.d.ts.map +1 -0
  57. package/lib/types/client/MentionText.js +10 -0
  58. package/lib/types/client/MentionText.js.map +1 -0
  59. package/lib/types/client/RechargeComingSoonDialog.d.ts +11 -0
  60. package/lib/types/client/RechargeComingSoonDialog.d.ts.map +1 -0
  61. package/lib/types/client/RechargeComingSoonDialog.js +8 -0
  62. package/lib/types/client/RechargeComingSoonDialog.js.map +1 -0
  63. package/lib/types/client/controller.d.ts +174 -4
  64. package/lib/types/client/controller.d.ts.map +1 -1
  65. package/lib/types/client/controller.js +975 -79
  66. package/lib/types/client/controller.js.map +1 -1
  67. package/lib/types/client/image-cache.d.ts +20 -0
  68. package/lib/types/client/image-cache.d.ts.map +1 -0
  69. package/lib/types/client/image-cache.js +177 -0
  70. package/lib/types/client/image-cache.js.map +1 -0
  71. package/lib/types/client/index.d.ts +2 -0
  72. package/lib/types/client/index.d.ts.map +1 -1
  73. package/lib/types/client/index.js +102 -42
  74. package/lib/types/client/index.js.map +1 -1
  75. package/lib/types/client/mail-list-cache.d.ts +15 -0
  76. package/lib/types/client/mail-list-cache.d.ts.map +1 -0
  77. package/lib/types/client/mail-list-cache.js +212 -0
  78. package/lib/types/client/mail-list-cache.js.map +1 -0
  79. package/lib/types/client/mentions.d.ts +51 -0
  80. package/lib/types/client/mentions.d.ts.map +1 -0
  81. package/lib/types/client/mentions.js +165 -0
  82. package/lib/types/client/mentions.js.map +1 -0
  83. package/lib/types/client/model-availability-controller.d.ts +27 -0
  84. package/lib/types/client/model-availability-controller.d.ts.map +1 -0
  85. package/lib/types/client/model-availability-controller.js +111 -0
  86. package/lib/types/client/model-availability-controller.js.map +1 -0
  87. package/lib/types/client/model-proxy-controller.d.ts +45 -0
  88. package/lib/types/client/model-proxy-controller.d.ts.map +1 -0
  89. package/lib/types/client/model-proxy-controller.js +306 -0
  90. package/lib/types/client/model-proxy-controller.js.map +1 -0
  91. package/lib/types/client/recharge-availability.d.ts +6 -0
  92. package/lib/types/client/recharge-availability.d.ts.map +1 -0
  93. package/lib/types/client/recharge-availability.js +6 -0
  94. package/lib/types/client/recharge-availability.js.map +1 -0
  95. package/lib/types/client/settings-locales.d.ts +1 -1
  96. package/lib/types/client/settings-locales.d.ts.map +1 -1
  97. package/lib/types/client/settings-locales.js +186 -8
  98. package/lib/types/client/settings-locales.js.map +1 -1
  99. package/lib/types/client/slots.d.ts +34 -2
  100. package/lib/types/client/slots.d.ts.map +1 -1
  101. package/lib/types/index.d.ts +95 -7
  102. package/lib/types/index.d.ts.map +1 -1
  103. package/lib/types/index.js +968 -37
  104. package/lib/types/index.js.map +1 -1
  105. package/lib/types/listener-state.d.ts +23 -0
  106. package/lib/types/listener-state.d.ts.map +1 -0
  107. package/lib/types/listener-state.js +124 -0
  108. package/lib/types/listener-state.js.map +1 -0
  109. package/lib/types/listener.d.ts +96 -0
  110. package/lib/types/listener.d.ts.map +1 -0
  111. package/lib/types/listener.js +575 -0
  112. package/lib/types/listener.js.map +1 -0
  113. package/lib/types/mail.d.ts +8 -0
  114. package/lib/types/mail.d.ts.map +1 -0
  115. package/lib/types/mail.js +75 -0
  116. package/lib/types/mail.js.map +1 -0
  117. package/lib/types/model-proxy-contract.d.ts +67 -0
  118. package/lib/types/model-proxy-contract.d.ts.map +1 -0
  119. package/lib/types/model-proxy-contract.js +135 -0
  120. package/lib/types/model-proxy-contract.js.map +1 -0
  121. package/lib/types/provider-api.d.ts +106 -2
  122. package/lib/types/provider-api.d.ts.map +1 -1
  123. package/lib/types/provider.d.ts.map +1 -1
  124. package/lib/types/provider.js +3 -0
  125. package/lib/types/provider.js.map +1 -1
  126. package/lib/types/sdk-adapter.d.ts +43 -2
  127. package/lib/types/sdk-adapter.d.ts.map +1 -1
  128. package/lib/types/sdk-adapter.js +622 -24
  129. package/lib/types/sdk-adapter.js.map +1 -1
  130. package/lib/types/sent-mail-store.d.ts +22 -0
  131. package/lib/types/sent-mail-store.d.ts.map +1 -0
  132. package/lib/types/sent-mail-store.js +246 -0
  133. package/lib/types/sent-mail-store.js.map +1 -0
  134. package/lib/types/tools.d.ts +10 -0
  135. package/lib/types/tools.d.ts.map +1 -1
  136. package/lib/types/tools.js +98 -0
  137. package/lib/types/tools.js.map +1 -1
  138. package/lib/types/types.d.ts +254 -2
  139. package/lib/types/types.d.ts.map +1 -1
  140. package/lib/types/types.js.map +1 -1
  141. package/package.json +31 -17
  142. package/lib/sdk-adapter-DK6RqV-c.mjs +0 -355
@@ -0,0 +1,165 @@
1
+ /** Browser-only AWiki mention editing helpers. All ranges use Unicode code points. */
2
+ const HUMAN_SUBJECT_TYPES = new Set(['human', 'person', 'user']);
3
+ function codePoints(value) {
4
+ return Array.from(value);
5
+ }
6
+ function normalized(value) {
7
+ return value?.trim().toLocaleLowerCase() ?? '';
8
+ }
9
+ /** Convert a DOM textarea UTF-16 offset into the code-point unit used by ANP-P9. */
10
+ export function utf16IndexToCodePointIndex(value, utf16Index) {
11
+ const clamped = Math.min(Math.max(utf16Index, 0), value.length);
12
+ return codePoints(value.slice(0, clamped)).length;
13
+ }
14
+ /** Convert a code-point range offset back into a DOM textarea UTF-16 offset. */
15
+ export function codePointIndexToUtf16Index(value, codePointIndex) {
16
+ return codePoints(value).slice(0, Math.max(0, codePointIndex)).join('').length;
17
+ }
18
+ /** Find an unfinished @query ending at the current caret. */
19
+ export function activeMentionQuery(value, caret) {
20
+ const chars = codePoints(value);
21
+ const end = Math.min(Math.max(caret, 0), chars.length);
22
+ let start = end - 1;
23
+ while (start >= 0 && !/\s/u.test(chars[start])) {
24
+ if (chars[start] === '@')
25
+ break;
26
+ start -= 1;
27
+ }
28
+ if (start < 0 || chars[start] !== '@')
29
+ return null;
30
+ if (start > 0 && /[\p{L}\p{N}_@]/u.test(chars[start - 1]))
31
+ return null;
32
+ const query = chars.slice(start + 1, end).join('');
33
+ if (/\s/u.test(query))
34
+ return null;
35
+ return { start, end, query };
36
+ }
37
+ export function shortenedDid(did) {
38
+ const value = String(did);
39
+ return value.length <= 24 ? value : `${value.slice(0, 12)}...${value.slice(-8)}`;
40
+ }
41
+ export function mentionMemberLabel(member) {
42
+ const displayName = member.displayName?.trim();
43
+ if (displayName !== undefined && displayName !== '')
44
+ return displayName;
45
+ const handle = member.handle?.trim();
46
+ return handle === undefined || handle === '' ? shortenedDid(member.did) : handle;
47
+ }
48
+ /** Keep only active human peers that have a stable DID and are not the current identity. */
49
+ export function mentionCandidates(members, currentDid, query) {
50
+ const needle = normalized(query);
51
+ return members.flatMap((member) => {
52
+ if (member.did === undefined || member.did === currentDid)
53
+ return [];
54
+ if (normalized(member.status) !== 'active')
55
+ return [];
56
+ if (!HUMAN_SUBJECT_TYPES.has(normalized(member.subjectType)))
57
+ return [];
58
+ const stableMember = member;
59
+ const label = mentionMemberLabel(stableMember);
60
+ const aliases = [label, member.displayName, member.handle, String(member.did)].map(normalized);
61
+ return needle === '' || aliases.some(alias => alias.includes(needle))
62
+ ? [{ member: stableMember, label }]
63
+ : [];
64
+ });
65
+ }
66
+ /** Insert a selected candidate at the current query and return the next caret position. */
67
+ export function insertMention(value, query, candidate, id) {
68
+ const chars = codePoints(value);
69
+ const surface = `@${candidate.label}`;
70
+ const replacement = codePoints(`${surface} `);
71
+ const text = [...chars.slice(0, query.start), ...replacement, ...chars.slice(query.end)].join('');
72
+ const end = query.start + codePoints(surface).length;
73
+ return {
74
+ text,
75
+ caret: end + 1,
76
+ mention: {
77
+ id,
78
+ start: query.start,
79
+ end,
80
+ surface,
81
+ did: candidate.member.did,
82
+ displayName: candidate.label,
83
+ },
84
+ };
85
+ }
86
+ function validateDraft(value, draft) {
87
+ const chars = codePoints(value);
88
+ return draft.start >= 0
89
+ && draft.end > draft.start
90
+ && draft.end <= chars.length
91
+ && chars.slice(draft.start, draft.end).join('') === draft.surface;
92
+ }
93
+ /** Shift unaffected ranges after one edit and drop any mention touched by the edit. */
94
+ export function transformMentionDrafts(previousText, nextText, drafts) {
95
+ const previous = codePoints(previousText);
96
+ const next = codePoints(nextText);
97
+ let prefix = 0;
98
+ while (prefix < previous.length && prefix < next.length && previous[prefix] === next[prefix])
99
+ prefix += 1;
100
+ let suffix = 0;
101
+ while (suffix < previous.length - prefix
102
+ && suffix < next.length - prefix
103
+ && previous[previous.length - 1 - suffix] === next[next.length - 1 - suffix])
104
+ suffix += 1;
105
+ const previousEditEnd = previous.length - suffix;
106
+ const delta = next.length - previous.length;
107
+ return drafts.flatMap((draft) => {
108
+ const transformed = draft.end <= prefix
109
+ ? draft
110
+ : draft.start >= previousEditEnd
111
+ ? { ...draft, start: draft.start + delta, end: draft.end + delta }
112
+ : null;
113
+ return transformed !== null && validateDraft(nextText, transformed) ? [transformed] : [];
114
+ });
115
+ }
116
+ /** Produce validated protocol mentions; stale or overlapping browser drafts are ignored. */
117
+ export function protocolMentions(value, drafts) {
118
+ let previousEnd = -1;
119
+ return [...drafts]
120
+ .sort((left, right) => left.start - right.start || left.end - right.end)
121
+ .flatMap((draft) => {
122
+ if (!validateDraft(value, draft) || draft.start < previousEnd)
123
+ return [];
124
+ previousEnd = draft.end;
125
+ return [{
126
+ id: draft.id,
127
+ start: draft.start,
128
+ end: draft.end,
129
+ did: draft.did,
130
+ ...draft.displayName === undefined ? {} : { displayName: draft.displayName },
131
+ }];
132
+ });
133
+ }
134
+ /** Split valid mention ranges for visual highlighting; malformed metadata becomes plain text. */
135
+ export function mentionSegments(value, mentions) {
136
+ const chars = codePoints(value);
137
+ const ordered = [...(mentions ?? [])].sort((left, right) => left.start - right.start || left.end - right.end);
138
+ const valid = [];
139
+ let previousEnd = 0;
140
+ for (const mention of ordered) {
141
+ if (!Number.isInteger(mention.start) || !Number.isInteger(mention.end))
142
+ return [{ text: value, mention: false }];
143
+ if (mention.start < previousEnd || mention.end <= mention.start || mention.end > chars.length)
144
+ return [{ text: value, mention: false }];
145
+ const surface = chars.slice(mention.start, mention.end).join('');
146
+ if (!surface.startsWith('@'))
147
+ return [{ text: value, mention: false }];
148
+ valid.push(mention);
149
+ previousEnd = mention.end;
150
+ }
151
+ if (valid.length === 0)
152
+ return [{ text: value, mention: false }];
153
+ const result = [];
154
+ let cursor = 0;
155
+ for (const mention of valid) {
156
+ if (mention.start > cursor)
157
+ result.push({ text: chars.slice(cursor, mention.start).join(''), mention: false });
158
+ result.push({ text: chars.slice(mention.start, mention.end).join(''), mention: true, id: mention.id });
159
+ cursor = mention.end;
160
+ }
161
+ if (cursor < chars.length)
162
+ result.push({ text: chars.slice(cursor).join(''), mention: false });
163
+ return result;
164
+ }
165
+ //# sourceMappingURL=mentions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mentions.js","sourceRoot":"","sources":["../../../src/client/mentions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /** Browser-side projection of whether any Harness model provider can serve requests. */
2
+ import type { ConnectionHandle } from '@deepseek-ai/dsh-client-connection/client';
3
+ import type { HostObservable } from '@deepseek-ai/dsh-client-ui-slots';
4
+ export interface ModelAvailabilityView {
5
+ readonly status: 'idle' | 'loading' | 'ready' | 'unavailable';
6
+ readonly usable: boolean;
7
+ readonly error: string | null;
8
+ }
9
+ /**
10
+ * Join the public provider, settings, and credential APIs into one onboarding fact.
11
+ * Active routes without a credential reference authenticate through their provider's own path.
12
+ */
13
+ export declare class ModelAvailabilityController implements HostObservable<ModelAvailabilityView> {
14
+ private readonly connection;
15
+ private view;
16
+ private readonly listeners;
17
+ private generation;
18
+ private disposed;
19
+ constructor(connection: ConnectionHandle);
20
+ getSnapshot: () => ModelAvailabilityView;
21
+ subscribe: (listener: () => void) => (() => void);
22
+ load(): Promise<void>;
23
+ refreshIfLoaded(): void;
24
+ dispose(): void;
25
+ private publish;
26
+ }
27
+ //# sourceMappingURL=model-availability-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-availability-controller.d.ts","sourceRoot":"","sources":["../../../src/client/model-availability-controller.ts"],"names":[],"mappings":"AAAA,wFAAwF;AAGxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAA;AACjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AAEtE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,CAAA;IAC7D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B;AAQD;;;GAGG;AACH,qBAAa,2BAA4B,YAAW,cAAc,CAAC,qBAAqB,CAAC;IAM3E,OAAO,CAAC,QAAQ,CAAC,UAAU;IALvC,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAClD,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,QAAQ,CAAQ;gBAEK,UAAU,EAAE,gBAAgB;IAEzD,WAAW,QAAO,qBAAqB,CAAa;IAEpD,SAAS,GAAI,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAI/C;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsC3B,eAAe,IAAI,IAAI;IAKvB,OAAO,IAAI,IAAI;IAOf,OAAO,CAAC,OAAO;CAKhB"}
@@ -0,0 +1,111 @@
1
+ /** Browser-side projection of whether any Harness model provider can serve requests. */
2
+ const INITIAL = Object.freeze({
3
+ status: 'idle',
4
+ usable: false,
5
+ error: null,
6
+ });
7
+ /**
8
+ * Join the public provider, settings, and credential APIs into one onboarding fact.
9
+ * Active routes without a credential reference authenticate through their provider's own path.
10
+ */
11
+ export class ModelAvailabilityController {
12
+ connection;
13
+ view = INITIAL;
14
+ listeners = new Set();
15
+ generation = 0;
16
+ disposed = false;
17
+ constructor(connection) {
18
+ this.connection = connection;
19
+ }
20
+ getSnapshot = () => this.view;
21
+ subscribe = (listener) => {
22
+ if (this.disposed)
23
+ return () => { };
24
+ this.listeners.add(listener);
25
+ return () => { this.listeners.delete(listener); };
26
+ };
27
+ async load() {
28
+ if (this.disposed)
29
+ return;
30
+ const generation = ++this.generation;
31
+ this.publish({ ...this.view, status: 'loading', error: null });
32
+ try {
33
+ const [providersResponse, settingsResponse] = await Promise.all([
34
+ this.connection.api.llm.providers({}),
35
+ this.connection.api.settings.describe({}),
36
+ ]);
37
+ if (!providersResponse.result.ok)
38
+ throw new Error(providersResponse.result.error.message);
39
+ if (!settingsResponse.result.ok)
40
+ throw new Error(settingsResponse.result.error.message);
41
+ const namespaces = new Map(settingsResponse.result.value.namespaces.map(namespace => [namespace.ns, namespace]));
42
+ const activeProviders = providersResponse.result.value.providers.filter(provider => provider.active);
43
+ const credentialRefs = activeProviders.map(provider => credentialRef(provider, namespaces));
44
+ let usable = credentialRefs.some(ref => ref === undefined);
45
+ if (!usable) {
46
+ const refs = [...new Set(credentialRefs.filter((ref) => ref !== undefined))];
47
+ if (refs.length > 0) {
48
+ const credentialsResponse = await this.connection.api.credentials.describe({ refs });
49
+ const credentialsResult = credentialsResponse.result;
50
+ if (!credentialsResult.ok)
51
+ throw new Error(credentialsResult.error.message);
52
+ const credentials = credentialsResult.value.credentials;
53
+ usable = refs.some(ref => credentials[ref]?.configured === true);
54
+ }
55
+ }
56
+ if (generation !== this.generation || this.disposed)
57
+ return;
58
+ this.publish({ status: 'ready', usable, error: null });
59
+ }
60
+ catch (error) {
61
+ if (generation !== this.generation || this.disposed)
62
+ return;
63
+ this.publish({ status: 'unavailable', usable: false, error: message(error) });
64
+ }
65
+ }
66
+ refreshIfLoaded() {
67
+ if (this.view.status === 'idle')
68
+ return;
69
+ void this.load();
70
+ }
71
+ dispose() {
72
+ if (this.disposed)
73
+ return;
74
+ this.disposed = true;
75
+ this.generation += 1;
76
+ this.listeners.clear();
77
+ }
78
+ publish(view) {
79
+ if (this.disposed)
80
+ return;
81
+ this.view = view;
82
+ for (const listener of this.listeners)
83
+ listener();
84
+ }
85
+ }
86
+ function credentialRef(provider, namespaces) {
87
+ const namespace = namespaces.get(provider.settingsNs);
88
+ if (namespace === undefined)
89
+ return undefined;
90
+ const profile = valueAtPath(namespace.value, provider.settingsPath);
91
+ if (!isRecord(profile))
92
+ return undefined;
93
+ const value = profile.apiKeyEnv;
94
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
95
+ }
96
+ function valueAtPath(value, path) {
97
+ let current = value;
98
+ for (const segment of path) {
99
+ if (!isRecord(current))
100
+ return undefined;
101
+ current = current[segment];
102
+ }
103
+ return current;
104
+ }
105
+ function isRecord(value) {
106
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
107
+ }
108
+ function message(error) {
109
+ return error instanceof Error && error.message !== '' ? error.message : '模型可用性暂时无法确认';
110
+ }
111
+ //# sourceMappingURL=model-availability-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-availability-controller.js","sourceRoot":"","sources":["../../../src/client/model-availability-controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /** Reactive loopback client for browser-safe AWiki-hosted DeepSeek account operations. */
2
+ import type { ConnectionHandle } from '@deepseek-ai/dsh-client-connection/client';
3
+ import type { HostObservable } from '@deepseek-ai/dsh-client-ui-slots';
4
+ import { type AwikiModelProxyRechargeOrder, type AwikiModelProxyStatus, type AwikiModelProxyUsage } from '../model-proxy-contract.ts';
5
+ import type { AwikiController } from './controller.ts';
6
+ export interface AwikiModelProxyView {
7
+ readonly capability: 'unknown' | 'checking' | 'available' | 'unavailable';
8
+ readonly status: 'idle' | 'identity-required' | 'loading' | 'ready' | 'unavailable';
9
+ readonly account: AwikiModelProxyStatus | null;
10
+ readonly usage: readonly AwikiModelProxyUsage[];
11
+ readonly usageLoading: boolean;
12
+ readonly pending: 'enable' | 'disable' | 'recharge' | 'close-recharge' | null;
13
+ readonly error: string | null;
14
+ }
15
+ export declare class AwikiModelProxyController implements HostObservable<AwikiModelProxyView> {
16
+ private readonly connection;
17
+ private readonly identity;
18
+ private readonly rechargeEnabled;
19
+ private view;
20
+ private readonly listeners;
21
+ private readonly abort;
22
+ private sessionAbort;
23
+ private readonly unsubscribeSession;
24
+ private sessionActive;
25
+ private capabilityProbe;
26
+ private disposed;
27
+ private generation;
28
+ constructor(connection: ConnectionHandle, identity: AwikiController, rechargeEnabled?: boolean);
29
+ getSnapshot: () => AwikiModelProxyView;
30
+ subscribe: (listener: () => void) => (() => void);
31
+ probe(): Promise<void>;
32
+ private probeOnce;
33
+ load(): Promise<void>;
34
+ loadUsage(): Promise<void>;
35
+ setEnabled(enabled: boolean): Promise<void>;
36
+ createRecharge(amountCents: number): Promise<AwikiModelProxyRechargeOrder>;
37
+ rechargeStatus(outTradeNo: string): Promise<AwikiModelProxyRechargeOrder>;
38
+ closeRecharge(outTradeNo: string): Promise<'closed' | 'paid'>;
39
+ dispose(): void;
40
+ private call;
41
+ private publish;
42
+ private active;
43
+ private syncSession;
44
+ }
45
+ //# sourceMappingURL=model-proxy-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-proxy-controller.d.ts","sourceRoot":"","sources":["../../../src/client/model-proxy-controller.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAE1F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAA;AACjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAQL,KAAK,4BAA4B,EACjC,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAC1B,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EAAE,eAAe,EAAa,MAAM,iBAAiB,CAAA;AAGjE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,CAAA;IACzE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,CAAA;IACnF,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAAA;IAC9C,QAAQ,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAA;IAC/C,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,gBAAgB,GAAG,IAAI,CAAA;IAC7E,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B;AAMD,qBAAa,yBAA0B,YAAW,cAAc,CAAC,mBAAmB,CAAC;IAYjF,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAblC,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwB;IAC9C,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAY;IAC/C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,UAAU,CAAI;gBAGH,UAAU,EAAE,gBAAgB,EAC5B,QAAQ,EAAE,eAAe,EACzB,eAAe,UAAyB;IAM3D,WAAW,QAAO,mBAAmB,CAAa;IAElD,SAAS,GAAI,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAI/C;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAYd,SAAS;IA+BjB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBrB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB1B,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB3C,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,4BAA4B,CAAC;IAiC1E,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,4BAA4B,CAAC;IAwBzE,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC;IAiCnE,OAAO,IAAI,IAAI;YAUD,IAAI;IAWlB,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,WAAW;CAsBpB"}