@wowyuarm/dsh-agent-team 0.1.7 → 0.1.8
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/package.json +1 -1
- package/packages/agent-team/core-skills/member-skill-manager/SKILL.md +2 -0
- package/packages/agent-team/lib/index.js +58 -0
- package/packages/agent-team/lib/ledger.js +135 -12
- package/packages/agent-team/lib/member-context.js +1 -1
- package/packages/agent-team/lib/progress-nudge.js +320 -0
- package/packages/agent-team/lib/typert.host.js +27 -26
- package/packages/agent-team/lib/typert.remote-client.d.ts.map +1 -1
- package/packages/agent-team/lib/typert.remote-client.js +26 -25
- package/packages/agent-team/lib/types/index.d.ts +8 -0
- package/packages/agent-team/lib/types/index.d.ts.map +1 -1
- package/packages/agent-team/lib/types/ledger.d.ts +27 -2
- package/packages/agent-team/lib/types/ledger.d.ts.map +1 -1
- package/packages/agent-team/lib/types/progress-nudge.d.ts +136 -0
- package/packages/agent-team/lib/types/progress-nudge.d.ts.map +1 -0
- package/packages/agent-team/lib/types/types/entities.d.ts +18 -0
- package/packages/agent-team/lib/types/types/entities.d.ts.map +1 -1
- package/packages/agent-team/lib/types/types/requests-results.d.ts +2 -0
- package/packages/agent-team/lib/types/types/requests-results.d.ts.map +1 -1
- package/packages/agent-team/preset/team-member/agent.cordis.yml +2 -2
- package/packages/client-agent-team/lib/client.js +406 -512
- package/packages/client-agent-team/lib/client.js.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamChannelPage.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamChannelPage.js +3 -7
- package/packages/client-agent-team/lib/types/client/TeamComposer.d.ts +3 -1
- package/packages/client-agent-team/lib/types/client/TeamComposer.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamComposer.js +37 -27
- package/packages/client-agent-team/lib/types/client/TeamConversation.d.ts +1 -1
- package/packages/client-agent-team/lib/types/client/TeamConversation.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamConversation.js +2 -2
- package/packages/client-agent-team/lib/types/client/TeamMemberAvatar.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamMemberAvatar.js +3 -2
- package/packages/client-agent-team/lib/types/client/TeamMessage.js +5 -0
- package/packages/client-agent-team/lib/types/client/TeamPresenceDot.d.ts +2 -2
- package/packages/client-agent-team/lib/types/client/TeamPresenceDot.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamPresenceDot.js +4 -6
- package/packages/client-agent-team/lib/types/client/TeamStateDot.d.ts +14 -0
- package/packages/client-agent-team/lib/types/client/TeamStateDot.d.ts.map +1 -0
- package/packages/client-agent-team/lib/types/client/TeamStateDot.js +15 -0
- package/packages/client-agent-team/lib/types/client/TeamThreadPage.d.ts +1 -0
- package/packages/client-agent-team/lib/types/client/TeamThreadPage.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/TeamThreadPage.js +41 -16
- package/packages/client-agent-team/lib/types/client/index.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/index.js +2 -67
- package/packages/client-agent-team/lib/types/client/locales.d.ts +0 -2
- package/packages/client-agent-team/lib/types/client/locales.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/locales.js +0 -2
- package/packages/client-agent-team/lib/types/client/sidebar-drag.d.ts +1 -2
- package/packages/client-agent-team/lib/types/client/sidebar-drag.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/slots.d.ts +3 -1
- package/packages/client-agent-team/lib/types/client/slots.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/task-refs.d.ts +7 -1
- package/packages/client-agent-team/lib/types/client/task-refs.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/task-refs.js +25 -3
- package/packages/client-agent-team/lib/types/client/team-formatters.d.ts +11 -10
- package/packages/client-agent-team/lib/types/client/team-formatters.d.ts.map +1 -1
- package/packages/client-agent-team/lib/types/client/team-formatters.js +14 -11
- package/packages/tool-agent-team/lib/index.js +9 -9
- package/packages/client-agent-team/lib/types/client/TeamMemberDock.d.ts +0 -12
- package/packages/client-agent-team/lib/types/client/TeamMemberDock.d.ts.map +0 -1
- package/packages/client-agent-team/lib/types/client/TeamMemberDock.js +0 -13
- package/packages/client-agent-team/lib/types/client/member-session-input.d.ts +0 -20
- package/packages/client-agent-team/lib/types/client/member-session-input.d.ts.map +0 -1
- package/packages/client-agent-team/lib/types/client/member-session-input.js +0 -110
|
@@ -6,13 +6,11 @@ import { TeamFooterAction } from "./TeamFooterAction.js";
|
|
|
6
6
|
import { TeamSettings } from "./TeamSettings.js";
|
|
7
7
|
import { TeamConversation } from "./TeamConversation.js";
|
|
8
8
|
import { TeamWorkspaceBrowser } from "./TeamWorkspaceBrowser.js";
|
|
9
|
-
import { TeamMemberDock } from "./TeamMemberDock.js";
|
|
10
|
-
import { admitTeamCompact, createTeamMemberSessionSources } from "./member-session-input.js";
|
|
11
9
|
import { en, zh } from "./locales.js";
|
|
12
10
|
export { TeamNavigation } from "./navigation.js";
|
|
13
11
|
const NS = 'team';
|
|
14
12
|
export const inject = [
|
|
15
|
-
'slots', 'workspaces', 'locale', 'remote', 'remote.session', 'sessions', 'connection', 'conversation',
|
|
13
|
+
'slots', 'workspaces', 'locale', 'remote', 'remote.session', 'sessions', 'connection', 'conversation',
|
|
16
14
|
];
|
|
17
15
|
function registerModeShadow(ctx, navigation, changes, drafts, name, component, extraInject) {
|
|
18
16
|
// Stay in Team mode: the conversation shadow stands down for Member Session
|
|
@@ -67,6 +65,7 @@ function registerModeShadow(ctx, navigation, changes, drafts, name, component, e
|
|
|
67
65
|
...(name === 'conversation' ? {
|
|
68
66
|
readThread: (request) => ctx.remote.agentTeam.readThread(request),
|
|
69
67
|
loadThreadHistory: (request) => ctx.remote.agentTeam.threadHistory(request),
|
|
68
|
+
threadObservations: (request) => ctx.remote.agentTeam.threadObservations(request),
|
|
70
69
|
sendMessage: (request) => ctx.remote.agentTeam.sendMessage(request),
|
|
71
70
|
putAttachment: (request) => ctx.remote.agentTeam.putAttachment(request),
|
|
72
71
|
getAttachment: (request) => ctx.remote.agentTeam.getAttachment(request),
|
|
@@ -96,45 +95,6 @@ function registerModeShadow(ctx, navigation, changes, drafts, name, component, e
|
|
|
96
95
|
};
|
|
97
96
|
});
|
|
98
97
|
}
|
|
99
|
-
function registerMemberSessionDock(ctx, navigation) {
|
|
100
|
-
// rc.1: the shipped InputBar owns `conversation.composer.bar` and with it
|
|
101
|
-
// the trigger-menu overlay; shadowing it stranded the menus inside a hidden
|
|
102
|
-
// subtree. The Team surface moves to the public input-dock list slot above
|
|
103
|
-
// the shipped bar — it renders in both the hero (blank session) and active
|
|
104
|
-
// composer forms, so the strip stays visible from the very first turn.
|
|
105
|
-
ctx.slots.inject('conversation.input.dock', () => {
|
|
106
|
-
let dispose;
|
|
107
|
-
let registeredSessionId;
|
|
108
|
-
const reconcile = () => {
|
|
109
|
-
const memberSessionId = navigation.getSnapshot().memberSessionId;
|
|
110
|
-
const active = navigation.getSnapshot().mode === 'team' && memberSessionId !== undefined;
|
|
111
|
-
if (dispose !== undefined && (!active || registeredSessionId !== memberSessionId)) {
|
|
112
|
-
dispose();
|
|
113
|
-
dispose = undefined;
|
|
114
|
-
registeredSessionId = undefined;
|
|
115
|
-
}
|
|
116
|
-
if (active && dispose === undefined) {
|
|
117
|
-
registeredSessionId = memberSessionId;
|
|
118
|
-
const sessions = ctx.sessions;
|
|
119
|
-
dispose = ctx.slots.register({
|
|
120
|
-
name: 'conversation.input.dock',
|
|
121
|
-
id: 'agent-team-member',
|
|
122
|
-
locale: NS,
|
|
123
|
-
// The registration may remain live during a session transition, but
|
|
124
|
-
// it shows only when the shell's current Session is the embedded
|
|
125
|
-
// Member. This avoids stamping an ordinary Session if selection races.
|
|
126
|
-
select: () => sessions.list.getSnapshot().current === memberSessionId ? {} : null,
|
|
127
|
-
}, TeamMemberDock);
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
const offNavigation = navigation.subscribe(reconcile);
|
|
131
|
-
reconcile();
|
|
132
|
-
return () => {
|
|
133
|
-
offNavigation();
|
|
134
|
-
dispose?.();
|
|
135
|
-
};
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
98
|
function applyUi(ctx) {
|
|
139
99
|
ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'agent-team: dictionaries');
|
|
140
100
|
const navigation = new TeamNavigation();
|
|
@@ -148,30 +108,6 @@ function applyUi(ctx) {
|
|
|
148
108
|
void disposeDrafts();
|
|
149
109
|
}, 'agent-team: navigation service');
|
|
150
110
|
const changes = new TeamChangeStream((request, signal) => ctx.remote.agentTeam.changes(request, signal));
|
|
151
|
-
const triggerSources = createTeamMemberSessionSources({
|
|
152
|
-
isEmbeddedMemberSession: sessionId => {
|
|
153
|
-
const snapshot = navigation.getSnapshot();
|
|
154
|
-
return snapshot.mode === 'team' && snapshot.memberSessionId === sessionId && snapshot.workspaceId !== undefined;
|
|
155
|
-
},
|
|
156
|
-
members: async () => {
|
|
157
|
-
const workspaceId = navigation.getSnapshot().workspaceId;
|
|
158
|
-
if (workspaceId === undefined)
|
|
159
|
-
return [];
|
|
160
|
-
const result = await ctx.remote.agentTeam.members({ workspaceId });
|
|
161
|
-
return result.ok ? result.value : [];
|
|
162
|
-
},
|
|
163
|
-
executeCompact: async (sessionId) => {
|
|
164
|
-
const actx = ctx.sessions.scope(sessionId);
|
|
165
|
-
const session = actx === undefined ? undefined : ctx.sessions.sessionOf(actx);
|
|
166
|
-
return session === undefined ? { kind: 'error', text: 'current Member Session is unavailable' } : admitTeamCompact(session);
|
|
167
|
-
},
|
|
168
|
-
});
|
|
169
|
-
const inputTriggers = ctx.get('inputTriggers');
|
|
170
|
-
ctx.effect(() => {
|
|
171
|
-
const disposers = triggerSources.map(source => inputTriggers.registerSource(source));
|
|
172
|
-
return () => { for (const dispose of disposers)
|
|
173
|
-
dispose(); };
|
|
174
|
-
}, 'agent-team: Member session trigger sources');
|
|
175
111
|
const loadMemberGroups = async () => {
|
|
176
112
|
const workspaces = ctx.workspaces.list.getSnapshot().items;
|
|
177
113
|
const groups = await Promise.all(workspaces.map(async (workspace) => {
|
|
@@ -213,7 +149,6 @@ function applyUi(ctx) {
|
|
|
213
149
|
}, TeamFooterAction));
|
|
214
150
|
registerModeShadow(ctx, navigation, changes, drafts, 'sidebar.workspaces', TeamWorkspaceBrowser);
|
|
215
151
|
registerModeShadow(ctx, navigation, changes, drafts, 'conversation', TeamConversation);
|
|
216
|
-
registerMemberSessionDock(ctx, navigation);
|
|
217
152
|
registerModeShadow(ctx, navigation, changes, drafts, 'sidebar.settings', TeamSettings, () => ({ loadMemberGroups }));
|
|
218
153
|
}
|
|
219
154
|
export async function apply(ctx) {
|
|
@@ -12,7 +12,6 @@ export declare const zh: {
|
|
|
12
12
|
readonly addAgent: "添加 Agent";
|
|
13
13
|
readonly cancel: "取消";
|
|
14
14
|
readonly close: "关闭";
|
|
15
|
-
readonly memberSessionHint: "成员会话:/compact 压缩上下文 · @成员 引用;普通消息直接发给该成员。";
|
|
16
15
|
readonly copyCode: "复制";
|
|
17
16
|
readonly copiedCode: "已复制";
|
|
18
17
|
readonly markdownFootnotes: "脚注";
|
|
@@ -168,7 +167,6 @@ export declare const en: {
|
|
|
168
167
|
readonly addAgent: "Add Agent";
|
|
169
168
|
readonly cancel: "Cancel";
|
|
170
169
|
readonly close: "Close";
|
|
171
|
-
readonly memberSessionHint: "Member session: /compact compresses context · @member inserts a reference; plain messages go straight to the member.";
|
|
172
170
|
readonly copyCode: "Copy";
|
|
173
171
|
readonly copiedCode: "Copied";
|
|
174
172
|
readonly markdownFootnotes: "Footnotes";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../src/client/locales.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../src/client/locales.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0JL,CAAA;AAEV,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0JL,CAAA;AAEV,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,EAAE,CAAA"}
|
|
@@ -12,7 +12,6 @@ export const zh = {
|
|
|
12
12
|
addAgent: '添加 Agent',
|
|
13
13
|
cancel: '取消',
|
|
14
14
|
close: '关闭',
|
|
15
|
-
memberSessionHint: '成员会话:/compact 压缩上下文 · @成员 引用;普通消息直接发给该成员。',
|
|
16
15
|
copyCode: '复制',
|
|
17
16
|
copiedCode: '已复制',
|
|
18
17
|
markdownFootnotes: '脚注',
|
|
@@ -168,7 +167,6 @@ export const en = {
|
|
|
168
167
|
addAgent: 'Add Agent',
|
|
169
168
|
cancel: 'Cancel',
|
|
170
169
|
close: 'Close',
|
|
171
|
-
memberSessionHint: 'Member session: /compact compresses context · @member inserts a reference; plain messages go straight to the member.',
|
|
172
170
|
copyCode: 'Copy',
|
|
173
171
|
copiedCode: 'Copied',
|
|
174
172
|
markdownFootnotes: 'Footnotes',
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
|
-
|
|
3
|
-
export type SidebarDropMarker = 'before' | 'after';
|
|
2
|
+
import type { SidebarDropMarker } from './sidebar-order.ts';
|
|
4
3
|
export interface SidebarRowDragHandlers<K extends string> {
|
|
5
4
|
/** Per-row native wiring plus the marker this row currently shows. */
|
|
6
5
|
readonly rowProps: (orderKey: K) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar-drag.d.ts","sourceRoot":"","sources":["../../../src/client/sidebar-drag.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"sidebar-drag.d.ts","sourceRoot":"","sources":["../../../src/client/sidebar-drag.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAE3D,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,MAAM;IACtD,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK;QAClC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;QACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACvC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;QACnE,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAA;QAC9B,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;QAClE,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;KAC/D,CAAA;CACF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IACtE,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAA;IAC3B,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAA;CAClF,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAwC5B;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;IAC1E,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAA;IACxC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;IACpB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;CAC7B,+BAOA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
|
|
2
|
-
import type { AgentTeamAddMemberRequest, AgentTeamArchiveChannelRequest, AgentTeamArchiveChannelResult, AgentTeamArchiveMemberRequest, AgentTeamArchiveMemberResult, AgentTeamChannelRef, AgentTeamClientMemberStatus, AgentTeamClearMemberContextRequest, AgentTeamClearMemberContextResult, AgentTeamCreateChannelRequest, AgentTeamCreateChannelResult, AgentTeamJoinChannelRequest, AgentTeamJoinChannelResult, AgentTeamGetAttachmentRequest, AgentTeamGetAttachmentResult, AgentTeamPutAttachmentRequest, AgentTeamPutAttachmentResult, AgentTeamMemberResult, AgentTeamRecoverMemberRequest, AgentTeamRecoverMemberResult, AgentTeamMembersRequest, AgentTeamRemoveChannelMemberRequest, AgentTeamRemoveChannelMemberResult, AgentTeamReplyRequest, AgentTeamResolveTaskRefsRequest, AgentTeamResolveTaskRefsResult, AgentTeamReplyResult, AgentTeamConfirmationRequired, AgentTeamThreadHistory, AgentTeamThreadHistoryRequest, AgentTeamThreadReadRequest, AgentTeamThreadReadResult, AgentTeamPromoteThreadRequest, AgentTeamPromoteThreadResult, AgentTeamTaskRequest, AgentTeamTaskResult, AgentTeamSendMessageRequest, AgentTeamSendMessageResult, AgentTeamUpdateChannelRequest, AgentTeamUpdateChannelResult, AgentTeamUpdateMemberRequest, AgentTeamView, AgentTeamViewRequest } from '@wowyuarm/dsh-agent-team/types';
|
|
2
|
+
import type { AgentTeamAddMemberRequest, AgentTeamArchiveChannelRequest, AgentTeamArchiveChannelResult, AgentTeamArchiveMemberRequest, AgentTeamArchiveMemberResult, AgentTeamChannelRef, AgentTeamClientMemberStatus, AgentTeamClearMemberContextRequest, AgentTeamClearMemberContextResult, AgentTeamCreateChannelRequest, AgentTeamCreateChannelResult, AgentTeamJoinChannelRequest, AgentTeamJoinChannelResult, AgentTeamGetAttachmentRequest, AgentTeamGetAttachmentResult, AgentTeamPutAttachmentRequest, AgentTeamPutAttachmentResult, AgentTeamMemberResult, AgentTeamRecoverMemberRequest, AgentTeamRecoverMemberResult, AgentTeamMembersRequest, AgentTeamRemoveChannelMemberRequest, AgentTeamRemoveChannelMemberResult, AgentTeamReplyRequest, AgentTeamResolveTaskRefsRequest, AgentTeamResolveTaskRefsResult, AgentTeamReplyResult, AgentTeamConfirmationRequired, AgentTeamThreadHistory, AgentTeamThreadHistoryRequest, AgentTeamThreadObservations, AgentTeamThreadObservationsRequest, AgentTeamThreadReadRequest, AgentTeamThreadReadResult, AgentTeamPromoteThreadRequest, AgentTeamPromoteThreadResult, AgentTeamTaskRequest, AgentTeamTaskResult, AgentTeamSendMessageRequest, AgentTeamSendMessageResult, AgentTeamUpdateChannelRequest, AgentTeamUpdateChannelResult, AgentTeamUpdateMemberRequest, AgentTeamView, AgentTeamViewRequest } from '@wowyuarm/dsh-agent-team/types';
|
|
3
3
|
import type { RemoteResult } from '@deepseek-ai/dsh-typert-protocol';
|
|
4
4
|
import type { TeamNavigationActions, TeamNavigationSnapshot } from './navigation.ts';
|
|
5
5
|
import type { TeamChangeListener, TeamChangeScope } from './team-changes.ts';
|
|
@@ -78,6 +78,8 @@ export type TeamConversationProps = PropsRuntime<'conversation'> & PropsLocale<'
|
|
|
78
78
|
promoteThread: (request: AgentTeamPromoteThreadRequest) => Promise<RemoteResult<AgentTeamPromoteThreadResult>>;
|
|
79
79
|
resolveTaskRefs: (request: AgentTeamResolveTaskRefsRequest) => Promise<RemoteResult<AgentTeamResolveTaskRefsResult>>;
|
|
80
80
|
loadMembers: (request: AgentTeamMembersRequest) => Promise<RemoteResult<readonly AgentTeamClientMemberStatus[]>>;
|
|
81
|
+
/** Human-only Thread Attention observations; the Thread composer ranks the returned followers first. */
|
|
82
|
+
threadObservations: (request: AgentTeamThreadObservationsRequest) => Promise<RemoteResult<AgentTeamThreadObservations>>;
|
|
81
83
|
};
|
|
82
84
|
export type TeamSettingsProps = PropsRuntime<'sidebar.settings'> & PropsLocale<'team'> & {
|
|
83
85
|
loadMemberGroups: () => Promise<readonly TeamMemberGroup[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../../src/client/slots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AACjF,OAAO,KAAK,EACV,yBAAyB,EACzB,8BAA8B,EAC9B,6BAA6B,EAC7B,6BAA6B,EAC7B,4BAA4B,EAC5B,mBAAmB,EACnB,2BAA2B,EAC3B,kCAAkC,EAClC,iCAAiC,EACjC,6BAA6B,EAC7B,4BAA4B,EAC5B,2BAA2B,EAC3B,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,6BAA6B,EAC7B,4BAA4B,EAC5B,qBAAqB,EACrB,6BAA6B,EAC7B,4BAA4B,EAC5B,uBAAuB,EACvB,mCAAmC,EACnC,kCAAkC,EAClC,qBAAqB,EACrB,+BAA+B,EAC/B,8BAA8B,EAC9B,oBAAoB,EACpB,6BAA6B,EAC7B,sBAAsB,EACtB,6BAA6B,EAC7B,0BAA0B,EAC1B,yBAAyB,EACzB,6BAA6B,EAC7B,4BAA4B,EAC5B,oBAAoB,EACpB,mBAAmB,EACnB,2BAA2B,EAC3B,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,4BAA4B,EAC5B,aAAa,EACb,oBAAoB,EACrB,MAAM,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AACpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,sBAAsB,CAAA;IACzC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAA;CAChD;AAED,gGAAgG;AAChG,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,kBAAkB,KAAK,MAAM,IAAI,CAAA;AAEvG,wEAAwE;AACxE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,8EAA8E;AAC9E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,iEAAiE;IACjE,QAAQ,CAAC,SAAS,CAAC,EAAE;QACnB,QAAQ,CAAC,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAA;KACnD,CAAA;CACF;AAED,2EAA2E;AAC3E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;CAC5C;AAED,sFAAsF;AACtF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,sBAAsB,EAAE,CAAA;IAClD,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CACvG;AAED,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,oBAAoB,CAAC,GAC7D,WAAW,CAAC,MAAM,CAAC,GACnB,qBAAqB,GACrB;IACA,UAAU,EAAE,oBAAoB,CAAA;IAChC,WAAW,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,YAAY,CAAC,SAAS,2BAA2B,EAAE,CAAC,CAAC,CAAA;IAChH,gBAAgB,EAAE,oBAAoB,CAAA;IACtC,SAAS,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,OAAO,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC,CAAA;IAC/F,YAAY,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAA;IACrF,aAAa,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC,CAAA;IAC9G,aAAa,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC,CAAA;IAC9G,cAAc,EAAE,CAAC,OAAO,EAAE,8BAA8B,KAAK,OAAO,CAAC,YAAY,CAAC,6BAA6B,CAAC,CAAC,CAAA;IACjH,YAAY,EAAE,CAAC,OAAO,EAAE,4BAA4B,KAAK,OAAO,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC,CAAA;IACrG,aAAa,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC,CAAA;IAC9G,kBAAkB,EAAE,CAAC,OAAO,EAAE,kCAAkC,KAAK,OAAO,CAAC,YAAY,CAAC,iCAAiC,CAAC,CAAC,CAAA;IAC7H,aAAa,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC,CAAA;IAC9G,WAAW,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,OAAO,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC,CAAA;IACxG,mBAAmB,EAAE,CAAC,OAAO,EAAE,mCAAmC,KAAK,OAAO,CAAC,YAAY,CAAC,kCAAkC,CAAC,CAAC,CAAA;IAChI,mFAAmF;IACnF,UAAU,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAA;IACzD,6EAA6E;IAC7E,iBAAiB,EAAE,CAAC,SAAS,EAAE,2BAA2B,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;IAC1F,kBAAkB,CAAC,EAAE,mBAAmB,CAAA;CACzC,CAAA;AAEH,MAAM,MAAM,qBAAqB,GAAG,YAAY,CAAC,cAAc,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,qBAAqB,GAAG;IAC/G,UAAU,EAAE,oBAAoB,CAAA;IAChC,gEAAgE;IAChE,MAAM,EAAE,cAAc,CAAA;IACtB,YAAY,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAA;IACrF,UAAU,EAAE,CAAC,OAAO,EAAE,0BAA0B,KAAK,OAAO,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC,CAAA;IACrG,iBAAiB,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC,CAAA;IAC5G,gBAAgB,EAAE,oBAAoB,CAAA;IACtC,aAAa,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC,CAAA;IAC9G,aAAa,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC,CAAA;IAC9G,WAAW,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,OAAO,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC,CAAA;IACxG,WAAW,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,OAAO,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC,CAAA;IACxG,mBAAmB,EAAE,CAAC,OAAO,EAAE,mCAAmC,KAAK,OAAO,CAAC,YAAY,CAAC,kCAAkC,CAAC,CAAC,CAAA;IAChI,KAAK,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,YAAY,CAAC,oBAAoB,GAAG,6BAA6B,CAAC,CAAC,CAAA;IACtH,UAAU,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAA;IACzF,aAAa,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,OAAO,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC,CAAA;IAC9G,eAAe,EAAE,CAAC,OAAO,EAAE,+BAA+B,KAAK,OAAO,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC,CAAA;IACpH,WAAW,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,YAAY,CAAC,SAAS,2BAA2B,EAAE,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../../src/client/slots.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,13 @@ export declare const useResolvedTaskRefVersion: () => number;
|
|
|
12
12
|
export declare const cachedResolvedTaskRef: (taskRef: AgentTeamTaskRef) => ResolvedTaskRef | undefined;
|
|
13
13
|
/** Store one resolution (click path) and wake every rendered link. */
|
|
14
14
|
export declare const rememberResolvedTaskRef: (entry: ResolvedTaskRef) => void;
|
|
15
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Click-path Host lookup: remember every resolved entry and hand them back
|
|
17
|
+
* for immediate navigation. The Host keeps `resolved` in the same order as
|
|
18
|
+
* the input `taskRefs` (one entry per resolvable input, unknowns omitted);
|
|
19
|
+
* the pairing walk below relies on that contract, so it must be preserved
|
|
20
|
+
* together with this implementation.
|
|
21
|
+
*/
|
|
16
22
|
export declare const hostTaskRefLookup: (resolveTaskRefs: (request: AgentTeamResolveTaskRefsRequest) => Promise<RemoteResult<AgentTeamResolveTaskRefsResult>>, workspaceId: AgentTeamResolveTaskRefsRequest["workspaceId"]) => ((taskRefs: readonly AgentTeamTaskRef[]) => Promise<readonly ResolvedTaskRef[]>);
|
|
17
23
|
/** Resolve one Task ref through the Host and jump to its home Channel Thread. */
|
|
18
24
|
export declare const jumpToTaskThread: (resolveTaskRefs: (request: AgentTeamResolveTaskRefsRequest) => Promise<RemoteResult<AgentTeamResolveTaskRefsResult>>, workspaceId: AgentTeamResolveTaskRefsRequest["workspaceId"], taskRef: AgentTeamTaskRef, selectThread: (threadRef: AgentTeamThreadRef, channelRef?: AgentTeamChannelRef, taskRef?: AgentTeamTaskRef, taskNumber?: number) => void) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-refs.d.ts","sourceRoot":"","sources":["../../../src/client/task-refs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,KAAK,EACV,mBAAmB,EAAE,+BAA+B,EAAE,8BAA8B,EAAE,gBAAgB,EAAE,kBAAkB,EAC3H,MAAM,gCAAgC,CAAA;AAEvC,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAA;IAClC,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAA;IACxC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAA;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAwBD,0EAA0E;AAC1E,eAAO,MAAM,yBAAyB,QAAO,MAAmE,CAAA;AAEhH,eAAO,MAAM,qBAAqB,GAAI,SAAS,gBAAgB,KAAG,eAAe,GAAG,SAAkC,CAAA;AAEtH,sEAAsE;AACtE,eAAO,MAAM,uBAAuB,GAAI,OAAO,eAAe,KAAG,IAIhE,CAAA;
|
|
1
|
+
{"version":3,"file":"task-refs.d.ts","sourceRoot":"","sources":["../../../src/client/task-refs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,KAAK,EACV,mBAAmB,EAAE,+BAA+B,EAAE,8BAA8B,EAAE,gBAAgB,EAAE,kBAAkB,EAC3H,MAAM,gCAAgC,CAAA;AAEvC,4EAA4E;AAC5E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAA;IAClC,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAA;IACxC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAA;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAwBD,0EAA0E;AAC1E,eAAO,MAAM,yBAAyB,QAAO,MAAmE,CAAA;AAEhH,eAAO,MAAM,qBAAqB,GAAI,SAAS,gBAAgB,KAAG,eAAe,GAAG,SAAkC,CAAA;AAEtH,sEAAsE;AACtE,eAAO,MAAM,uBAAuB,GAAI,OAAO,eAAe,KAAG,IAIhE,CAAA;AAOD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC5B,iBAAiB,CAAC,OAAO,EAAE,+BAA+B,KAAK,OAAO,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC,EACpH,aAAa,+BAA+B,CAAC,aAAa,CAAC,KAC1D,CAAC,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,KAAK,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC,CAiB/E,CAAA;AAEH,iFAAiF;AACjF,eAAO,MAAM,gBAAgB,GAC3B,iBAAiB,CAAC,OAAO,EAAE,+BAA+B,KAAK,OAAO,CAAC,YAAY,CAAC,8BAA8B,CAAC,CAAC,EACpH,aAAa,+BAA+B,CAAC,aAAa,CAAC,EAC3D,SAAS,gBAAgB,EACzB,cAAc,CAAC,SAAS,EAAE,kBAAkB,EAAE,UAAU,CAAC,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,gBAAgB,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,KACvI,IAMF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,SAAS,gBAAgB,EAAE,EACjC,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,KAAK,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC,KACrF,OAAO,CAAC,IAAI,CAmBd,CAAA"}
|
|
@@ -25,14 +25,36 @@ export const rememberResolvedTaskRef = (entry) => {
|
|
|
25
25
|
pending.delete(entry.taskRef);
|
|
26
26
|
emit();
|
|
27
27
|
};
|
|
28
|
-
/**
|
|
28
|
+
/** Compare refs by branded prefix plus hyphen-stripped UUID, so abbreviated spellings line up with their full form. */
|
|
29
|
+
function refKeyOf(ref) {
|
|
30
|
+
return ref.toLowerCase().replaceAll('-', '');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Click-path Host lookup: remember every resolved entry and hand them back
|
|
34
|
+
* for immediate navigation. The Host keeps `resolved` in the same order as
|
|
35
|
+
* the input `taskRefs` (one entry per resolvable input, unknowns omitted);
|
|
36
|
+
* the pairing walk below relies on that contract, so it must be preserved
|
|
37
|
+
* together with this implementation.
|
|
38
|
+
*/
|
|
29
39
|
export const hostTaskRefLookup = (resolveTaskRefs, workspaceId) => async (taskRefs) => {
|
|
30
40
|
const result = await resolveTaskRefs({ workspaceId, taskRefs });
|
|
31
41
|
if (!result.ok)
|
|
32
42
|
return [];
|
|
33
|
-
|
|
43
|
+
const entries = result.value.resolved;
|
|
44
|
+
// The Host answers with full refs even for abbreviated inputs; the
|
|
45
|
+
// returned entries keep the input order, so walk both sides and remember
|
|
46
|
+
// each authored spelling as an alias of its resolution.
|
|
47
|
+
let entryIndex = 0;
|
|
48
|
+
for (const requested of taskRefs) {
|
|
49
|
+
const entry = entries[entryIndex];
|
|
50
|
+
if (entry === undefined || !refKeyOf(entry.taskRef).startsWith(refKeyOf(requested)))
|
|
51
|
+
continue;
|
|
52
|
+
if (entry.taskRef !== requested)
|
|
53
|
+
rememberResolvedTaskRef({ ...entry, taskRef: requested });
|
|
34
54
|
rememberResolvedTaskRef(entry);
|
|
35
|
-
|
|
55
|
+
entryIndex += 1;
|
|
56
|
+
}
|
|
57
|
+
return entries;
|
|
36
58
|
};
|
|
37
59
|
/** Resolve one Task ref through the Host and jump to its home Channel Thread. */
|
|
38
60
|
export const jumpToTaskThread = (resolveTaskRefs, workspaceId, taskRef, selectThread) => {
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import type { AgentTeamActivity, AgentTeamClaim, AgentTeamMemberId, AgentTeamTask, AgentTeamTaskRef } from '@wowyuarm/dsh-agent-team/types';
|
|
2
2
|
import type { TeamConversationProps } from './slots.ts';
|
|
3
|
+
import type { TeamStateDotState } from './TeamStateDot.tsx';
|
|
3
4
|
export declare function formatTaskStatus(status: AgentTeamTask['status'], t: TeamConversationProps['t']): string;
|
|
4
5
|
export declare function formatClaimState(state: AgentTeamClaim['state'], t: TeamConversationProps['t']): string;
|
|
5
6
|
/**
|
|
6
|
-
* Status indicator
|
|
7
|
-
* variants; every status renders a dot so
|
|
8
|
-
* language — todo is a hollow ring (not started), closed a
|
|
9
|
-
* (archived).
|
|
7
|
+
* Status indicator for a Task status, the dot every Task surface renders.
|
|
8
|
+
* Active states map to StateDot variants; every status renders a dot so they
|
|
9
|
+
* share one shape language — todo is a hollow ring (not started), closed a
|
|
10
|
+
* quiet gray dot (archived).
|
|
10
11
|
*/
|
|
11
|
-
export declare function taskStatusDot(status: AgentTeamTask['status']):
|
|
12
|
+
export declare function taskStatusDot(status: AgentTeamTask['status']): TeamStateDotState;
|
|
12
13
|
/** One-line title snippet derived from the Task's root Message body. */
|
|
13
14
|
export declare function formatTaskTitle(body: string): string;
|
|
14
15
|
/** Deterministic avatar hue for one Member identity; stable across sessions and themes. */
|
|
@@ -21,11 +22,11 @@ export interface RefSegment {
|
|
|
21
22
|
}
|
|
22
23
|
/**
|
|
23
24
|
* Split a literal text run into plain and branded-ref segments. The pattern
|
|
24
|
-
* anchors on the fixed ref prefixes plus
|
|
25
|
-
* containing a colon never linkifies; a doubled colon from
|
|
26
|
-
* tolerated. Segment refs are always canonical, so resolution
|
|
27
|
-
* work regardless of how the ref was spelled; text without any
|
|
28
|
-
* back as one untouched segment.
|
|
25
|
+
* anchors on the fixed ref prefixes plus a UUID shape (full or abbreviated),
|
|
26
|
+
* so ordinary prose containing a colon never linkifies; a doubled colon from
|
|
27
|
+
* model output is tolerated. Segment refs are always canonical, so resolution
|
|
28
|
+
* and navigation work regardless of how the ref was spelled; text without any
|
|
29
|
+
* ref comes back as one untouched segment.
|
|
29
30
|
*/
|
|
30
31
|
export declare function splitBrandedRefs(text: string): readonly RefSegment[];
|
|
31
32
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team-formatters.d.ts","sourceRoot":"","sources":["../../../src/client/team-formatters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAC3I,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"team-formatters.d.ts","sourceRoot":"","sources":["../../../src/client/team-formatters.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,13 +15,13 @@ export function formatClaimState(state, t) {
|
|
|
15
15
|
}[state]);
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
|
-
* Status indicator
|
|
19
|
-
* variants; every status renders a dot so
|
|
20
|
-
* language — todo is a hollow ring (not started), closed a
|
|
21
|
-
* (archived).
|
|
18
|
+
* Status indicator for a Task status, the dot every Task surface renders.
|
|
19
|
+
* Active states map to StateDot variants; every status renders a dot so they
|
|
20
|
+
* share one shape language — todo is a hollow ring (not started), closed a
|
|
21
|
+
* quiet gray dot (archived).
|
|
22
22
|
*/
|
|
23
23
|
export function taskStatusDot(status) {
|
|
24
|
-
return { todo: 'todo', in_progress: 'ongoing', in_review: 'warning', done: 'done', closed: '
|
|
24
|
+
return { todo: 'todo', in_progress: 'ongoing', in_review: 'warning', done: 'done', closed: 'quiet' }[status];
|
|
25
25
|
}
|
|
26
26
|
/** One-line title snippet derived from the Task's root Message body. */
|
|
27
27
|
export function formatTaskTitle(body) {
|
|
@@ -35,7 +35,10 @@ export function memberHue(memberId) {
|
|
|
35
35
|
hash = (hash * 31 + memberId.charCodeAt(index)) % 360;
|
|
36
36
|
return hash;
|
|
37
37
|
}
|
|
38
|
-
|
|
38
|
+
// Full UUIDs and abbreviated forms (prefix plus the first 6+ hex chars, with
|
|
39
|
+
// or without the original hyphens) both match; resolution decides whether an
|
|
40
|
+
// abbreviation is real, so unresolvable matches stay plain text.
|
|
41
|
+
const BRANDED_REF_PATTERN = /\b(task|channel|thread):{1,2}[0-9a-f]{6,}(?:-[0-9a-f]{1,})*\b/gi;
|
|
39
42
|
/**
|
|
40
43
|
* Canonical form of one matched ref: models occasionally double the colon or
|
|
41
44
|
* uppercase the UUID when citing a ref in prose, while Host lookups and
|
|
@@ -46,11 +49,11 @@ function canonicalBrandedRef(match) {
|
|
|
46
49
|
}
|
|
47
50
|
/**
|
|
48
51
|
* Split a literal text run into plain and branded-ref segments. The pattern
|
|
49
|
-
* anchors on the fixed ref prefixes plus
|
|
50
|
-
* containing a colon never linkifies; a doubled colon from
|
|
51
|
-
* tolerated. Segment refs are always canonical, so resolution
|
|
52
|
-
* work regardless of how the ref was spelled; text without any
|
|
53
|
-
* back as one untouched segment.
|
|
52
|
+
* anchors on the fixed ref prefixes plus a UUID shape (full or abbreviated),
|
|
53
|
+
* so ordinary prose containing a colon never linkifies; a doubled colon from
|
|
54
|
+
* model output is tolerated. Segment refs are always canonical, so resolution
|
|
55
|
+
* and navigation work regardless of how the ref was spelled; text without any
|
|
56
|
+
* ref comes back as one untouched segment.
|
|
54
57
|
*/
|
|
55
58
|
export function splitBrandedRefs(text) {
|
|
56
59
|
const segments = [];
|
|
@@ -59,7 +59,7 @@ const teamThread = defineTool({
|
|
|
59
59
|
description: 'Read or manage your Attention on one Thread. read acknowledges one chronological batch; history does not change read state. Prefer threadRef; taskRef is a compatibility alias when the Thread has a Task.',
|
|
60
60
|
parameters: {
|
|
61
61
|
action: { type: 'string', required: true, enum: ['status', 'follow', 'unfollow', 'read', 'history'] },
|
|
62
|
-
threadRef: { type: 'string', description: "Full branded Thread ref exactly as returned by Team tools, including the 'thread:' prefix." },
|
|
62
|
+
threadRef: { type: 'string', description: "Full branded Thread ref exactly as returned by Team tools, including the 'thread:' prefix. An unambiguous abbreviation of the first 6+ UUID hex characters also resolves." },
|
|
63
63
|
taskRef: { type: 'string', description: "Optional Task ref alias for released clients. Prefer threadRef; if both are given they must identify the same Thread." },
|
|
64
64
|
beforeSequence: { type: 'number' }, limit: { type: 'number' },
|
|
65
65
|
},
|
|
@@ -139,12 +139,12 @@ const teamMessage = markAgentTeamPreset(defineTool({
|
|
|
139
139
|
description: 'Start a top-level Thread, reply to an existing Thread, or send a direct message (DM). start defaults to a taskless Thread; pass asTask true to create a Task in the same send. Read the Thread first; replies require its current revision (an internal concurrency token carried by baseRevision, never quoted in bodies). A top-level start may mention related Agents directly; in replies, only a Human can invite an unfollowed Agent. Pass Member refs in mentions and spell their handles inside the body; only mentioned Members render as mention chips. dm sends a private direct message to one enabled Agent Member in your Workspace: use it for quick clarifications and status syncs — never for task work, decisions, or anything that needs team visibility or traceability (use a Thread); if a DM exchange with the same Member exceeds about 3 exchanges, move it to a Thread, because every DM costs the recipient a full agent turn.',
|
|
140
140
|
parameters: {
|
|
141
141
|
action: { type: 'string', required: true, enum: ['start', 'reply', 'dm'] },
|
|
142
|
-
channelRef: { type: 'string', description: "Full branded Channel ref exactly as returned by Team tools, including the 'channel:' prefix." },
|
|
143
|
-
threadRef: { type: 'string', description: "Full branded Thread ref exactly as returned by Team tools, including the 'thread:' prefix." },
|
|
144
|
-
taskRef: { type: 'string', description: "Optional Task ref alias for reply on a Taskful Thread. Prefer threadRef." },
|
|
145
|
-
memberRef: { type: 'string', description: "Full branded Member ref exactly as returned by Team tools, including the 'member:' prefix. Required for dm; the Member must be an enabled Agent in your Workspace (the Human cannot be DMed)." },
|
|
142
|
+
channelRef: { type: 'string', description: "Full branded Channel ref exactly as returned by Team tools, including the 'channel:' prefix. An unambiguous abbreviation of the first 6+ UUID hex characters also resolves." },
|
|
143
|
+
threadRef: { type: 'string', description: "Full branded Thread ref exactly as returned by Team tools, including the 'thread:' prefix. An unambiguous abbreviation of the first 6+ UUID hex characters also resolves." },
|
|
144
|
+
taskRef: { type: 'string', description: "Optional Task ref alias for reply on a Taskful Thread. Prefer threadRef; an unambiguous abbreviation of the first 6+ UUID hex characters also resolves." },
|
|
145
|
+
memberRef: { type: 'string', description: "Full branded Member ref exactly as returned by Team tools, including the 'member:' prefix. An unambiguous abbreviation of the first 6+ UUID hex characters also resolves. Required for dm; the Member must be an enabled Agent in your Workspace (the Human cannot be DMed)." },
|
|
146
146
|
asTask: { type: 'boolean', description: 'When true, start creates a Task with the Thread. Default false creates a taskless Thread.' },
|
|
147
|
-
body: { type: 'string', required: true, description: "Markdown body. Cite Team refs exactly as returned, as bare text with one colon (e.g. task:0f0a…) — never a double colon, never inside backticks or quotes. Spell each mentioned Member's handle in the prose so the mention renders inline." }, baseRevision: { type: 'number', description: "Positive integer; use the current Thread revision as shown by the latest team_inbox or team_thread result for this Thread. The revision is an internal concurrency token, not a citable fact." },
|
|
147
|
+
body: { type: 'string', required: true, description: "Markdown body. Cite Team refs exactly as returned, as bare text with one colon (e.g. task:0f0a…) — never a double colon, never inside backticks or quotes. Unambiguous UUID abbreviations (first 6+ hex chars) also resolve. Spell each mentioned Member's handle in the prose so the mention renders inline." }, baseRevision: { type: 'number', description: "Positive integer; use the current Thread revision as shown by the latest team_inbox or team_thread result for this Thread. The revision is an internal concurrency token, not a citable fact." },
|
|
148
148
|
mentions: { type: 'array', items: { type: 'string' }, description: 'Member refs to mention. Mentioned Agents receive the Message directly; write their handles in the body (any casing, optional @) so the mention renders inline.' },
|
|
149
149
|
attachments: { type: 'array', items: { type: 'string' }, description: 'Absolute file paths to share, e.g. screenshots or generated artifacts; images render as thumbnails for recipients. The Host validates each path and copies the file into the attachment cache, and members also receive one cached path per attachment; if any path fails validation the whole send is rejected.' },
|
|
150
150
|
},
|
|
@@ -225,9 +225,9 @@ const teamClaim = defineTool({
|
|
|
225
225
|
description: 'List or mutate your Direction Claims. Read the Thread first; every mutation uses the current Thread revision. A Claim is your one-sentence direction statement on a Task — "the angle I am taking" — so others can spot collisions and track progress: Tasks define scope (owned by Humans), Claims declare the angle (owned by you). Good direction: "Unify the four form dialogs on shared field components before wiring submits." Bad direction: a multi-paragraph plan with step order, file lists, or acceptance criteria — those belong in Thread messages, not the Claim.',
|
|
226
226
|
parameters: {
|
|
227
227
|
action: { type: 'string', required: true, enum: ['list', 'claim', 'done', 'release'] },
|
|
228
|
-
taskRef: { type: 'string', required: true, description: "Full branded Task ref exactly as returned by Team tools, including the 'task:' prefix." },
|
|
228
|
+
taskRef: { type: 'string', required: true, description: "Full branded Task ref exactly as returned by Team tools, including the 'task:' prefix. An unambiguous abbreviation of the first 6+ UUID hex characters also resolves." },
|
|
229
229
|
baseRevision: { type: 'number', description: "Positive integer; use the current Thread revision as shown by the latest team_inbox or team_thread result for this Task. The revision is an internal concurrency token, not a citable fact." }, direction: { type: 'string' },
|
|
230
|
-
claimRef: { type: 'string', description: "Full branded Claim ref exactly as returned by team_claim, including the 'claim:' prefix." },
|
|
230
|
+
claimRef: { type: 'string', description: "Full branded Claim ref exactly as returned by team_claim, including the 'claim:' prefix. An unambiguous abbreviation of the first 6+ UUID hex characters also resolves." },
|
|
231
231
|
},
|
|
232
232
|
output: {
|
|
233
233
|
schema: { type: 'object', additionalProperties: false, properties: {
|
|
@@ -278,7 +278,7 @@ const teamView = defineTool({
|
|
|
278
278
|
name: 'team_view',
|
|
279
279
|
description: 'Discover authorized Team Channels, Tasks, and Members. It is not a substitute for team_thread reading.',
|
|
280
280
|
parameters: {
|
|
281
|
-
channelRef: { type: 'string', description: "Full branded Channel ref exactly as returned by Team tools, including the 'channel:' prefix." },
|
|
281
|
+
channelRef: { type: 'string', description: "Full branded Channel ref exactly as returned by Team tools, including the 'channel:' prefix. An unambiguous abbreviation of the first 6+ UUID hex characters also resolves." },
|
|
282
282
|
limit: { type: 'number' }, cursor: { type: 'number' },
|
|
283
283
|
},
|
|
284
284
|
output: {
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots';
|
|
2
|
-
/** Public input-dock slot currency for the Member Session strip. */
|
|
3
|
-
export type TeamMemberDockProps = PropsRuntime<'conversation.input.dock'> & PropsLocale<'team'>;
|
|
4
|
-
/**
|
|
5
|
-
* Team-owned strip above the shipped composer while a Member Session is
|
|
6
|
-
* embedded. The shipped InputBar keeps the whole input surface (draft,
|
|
7
|
-
* trigger menus, submit); this dock only carries what the shipped bar cannot
|
|
8
|
-
* know — the Member-Session vocabulary hint and the Member turn's prompt
|
|
9
|
-
* error, read through the standard useSession hook.
|
|
10
|
-
*/
|
|
11
|
-
export declare function TeamMemberDock({ t, useSession }: TeamMemberDockProps): import("react").JSX.Element;
|
|
12
|
-
//# sourceMappingURL=TeamMemberDock.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TeamMemberDock.d.ts","sourceRoot":"","sources":["../../../src/client/TeamMemberDock.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAGjF,oEAAoE;AACpE,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAAC,yBAAyB,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;AAE/F;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,mBAAmB,+BAQpE"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import css from './composer.module.css';
|
|
3
|
-
/**
|
|
4
|
-
* Team-owned strip above the shipped composer while a Member Session is
|
|
5
|
-
* embedded. The shipped InputBar keeps the whole input surface (draft,
|
|
6
|
-
* trigger menus, submit); this dock only carries what the shipped bar cannot
|
|
7
|
-
* know — the Member-Session vocabulary hint and the Member turn's prompt
|
|
8
|
-
* error, read through the standard useSession hook.
|
|
9
|
-
*/
|
|
10
|
-
export function TeamMemberDock({ t, useSession }) {
|
|
11
|
-
const promptError = useSession(state => state.promptError ?? null);
|
|
12
|
-
return _jsxs("div", { className: css.memberSessionDock, "data-team-member-dock": "true", children: [_jsx("span", { className: css.memberSessionHint, children: t('memberSessionHint') }), promptError !== null && (_jsx("p", { className: css.memberSessionStatus, role: "alert", children: promptError.error.message }))] });
|
|
13
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { AgentTeamClientMemberStatus } from '@wowyuarm/dsh-agent-team/types';
|
|
2
|
-
import type { ISession } from '@deepseek-ai/dsh-api-session-controller/client';
|
|
3
|
-
import type { ClientSessionContext, InputTriggerSource, SubmitOutcome } from '@deepseek-ai/dsh-client-ui-input-trigger/client';
|
|
4
|
-
export declare const TEAM_COMMAND_SOURCE = "agent-team-command";
|
|
5
|
-
export declare const TEAM_MEMBER_SOURCE = "agent-team-member";
|
|
6
|
-
export interface TeamMemberSessionInputOptions {
|
|
7
|
-
readonly isEmbeddedMemberSession: (sessionId: ClientSessionContext['sessionId']) => boolean;
|
|
8
|
-
readonly members: () => Promise<readonly AgentTeamClientMemberStatus[]>;
|
|
9
|
-
readonly executeCompact: (sessionId: ClientSessionContext['sessionId']) => Promise<SubmitOutcome>;
|
|
10
|
-
}
|
|
11
|
-
/** Preserve the public Session command admission contract, not handler outcome. */
|
|
12
|
-
export declare function admitTeamCompact(session: Pick<ISession, 'command'>): Promise<SubmitOutcome>;
|
|
13
|
-
/**
|
|
14
|
-
* The two Team-only sources live in the shared public registry, but their
|
|
15
|
-
* candidate plane is inert for every ordinary Session. The member source owns
|
|
16
|
-
* its stable ref→label cache so serialization never falls back to guessing a
|
|
17
|
-
* handle from plain text.
|
|
18
|
-
*/
|
|
19
|
-
export declare function createTeamMemberSessionSources(options: TeamMemberSessionInputOptions): readonly InputTriggerSource[];
|
|
20
|
-
//# sourceMappingURL=member-session-input.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"member-session-input.d.ts","sourceRoot":"","sources":["../../../src/client/member-session-input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAqB,MAAM,gCAAgC,CAAA;AACpG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAA;AAC9E,OAAO,KAAK,EACV,oBAAoB,EAAgB,kBAAkB,EAAmB,aAAa,EACvF,MAAM,iDAAiD,CAAA;AAExD,eAAO,MAAM,mBAAmB,uBAAuB,CAAA;AACvD,eAAO,MAAM,kBAAkB,sBAAsB,CAAA;AAErD,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,uBAAuB,EAAE,CAAC,SAAS,EAAE,oBAAoB,CAAC,WAAW,CAAC,KAAK,OAAO,CAAA;IAC3F,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,SAAS,2BAA2B,EAAE,CAAC,CAAA;IACvE,QAAQ,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,oBAAoB,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;CAClG;AAED,mFAAmF;AACnF,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAIjG;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,6BAA6B,GAAG,SAAS,kBAAkB,EAAE,CAgFpH"}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
export const TEAM_COMMAND_SOURCE = 'agent-team-command';
|
|
2
|
-
export const TEAM_MEMBER_SOURCE = 'agent-team-member';
|
|
3
|
-
/** Preserve the public Session command admission contract, not handler outcome. */
|
|
4
|
-
export async function admitTeamCompact(session) {
|
|
5
|
-
const result = await session.command('/compact');
|
|
6
|
-
if (!result.ok)
|
|
7
|
-
throw new Error(`session.command failed: ${result.error.message}`);
|
|
8
|
-
return result.value.matched ? { kind: 'success' } : { kind: 'error', text: 'unknown command: /compact' };
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* The two Team-only sources live in the shared public registry, but their
|
|
12
|
-
* candidate plane is inert for every ordinary Session. The member source owns
|
|
13
|
-
* its stable ref→label cache so serialization never falls back to guessing a
|
|
14
|
-
* handle from plain text.
|
|
15
|
-
*/
|
|
16
|
-
export function createTeamMemberSessionSources(options) {
|
|
17
|
-
const labels = new Map();
|
|
18
|
-
const command = {
|
|
19
|
-
trigger: '/',
|
|
20
|
-
name: TEAM_COMMAND_SOURCE,
|
|
21
|
-
showGroupTitle: false,
|
|
22
|
-
async candidates(session, { query }) {
|
|
23
|
-
if (!options.isEmbeddedMemberSession(session.sessionId) || !'compact'.startsWith(query.toLocaleLowerCase()))
|
|
24
|
-
return [];
|
|
25
|
-
return [{ name: '/compact', description: '压缩当前 Session 上下文', value: 'compact' }];
|
|
26
|
-
},
|
|
27
|
-
onPick({ candidate, session }) {
|
|
28
|
-
if (candidate.value !== 'compact' || !options.isEmbeddedMemberSession(session.sessionId))
|
|
29
|
-
return undefined;
|
|
30
|
-
const claim = {
|
|
31
|
-
token: '/compact',
|
|
32
|
-
submit: async () => options.executeCompact(session.sessionId),
|
|
33
|
-
};
|
|
34
|
-
return { claim };
|
|
35
|
-
},
|
|
36
|
-
// Typing the full `/compact` line without picking from the menu still
|
|
37
|
-
// routes through the Team claim inside an embedded Member Session. The
|
|
38
|
-
// shipped command source answers first for its own vocabulary; unknown
|
|
39
|
-
// slash lines fall through here, where a Member Session claims only its
|
|
40
|
-
// one supported token and ordinary Sessions decline.
|
|
41
|
-
async matchEnter(session, line) {
|
|
42
|
-
if (!options.isEmbeddedMemberSession(session.sessionId))
|
|
43
|
-
return undefined;
|
|
44
|
-
const trimmed = line.trim();
|
|
45
|
-
if (trimmed !== '/compact')
|
|
46
|
-
return undefined;
|
|
47
|
-
const claim = {
|
|
48
|
-
token: '/compact',
|
|
49
|
-
submit: async () => options.executeCompact(session.sessionId),
|
|
50
|
-
};
|
|
51
|
-
return { claim };
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
const member = {
|
|
55
|
-
trigger: '@',
|
|
56
|
-
name: TEAM_MEMBER_SOURCE,
|
|
57
|
-
showGroupTitle: false,
|
|
58
|
-
async candidates(session, { query, signal }) {
|
|
59
|
-
if (!options.isEmbeddedMemberSession(session.sessionId))
|
|
60
|
-
return [];
|
|
61
|
-
const normalized = query.toLocaleLowerCase();
|
|
62
|
-
const members = await options.members();
|
|
63
|
-
if (signal.aborted)
|
|
64
|
-
return [];
|
|
65
|
-
return members
|
|
66
|
-
.filter(status => status.member.sessionId !== session.sessionId && status.member.state !== 'inactive' && status.member.state !== 'archived')
|
|
67
|
-
.filter(status => status.member.handle.toLocaleLowerCase().startsWith(normalized))
|
|
68
|
-
.map(status => {
|
|
69
|
-
labels.set(status.member.memberId, `@${status.member.handle}`);
|
|
70
|
-
return {
|
|
71
|
-
name: `@${status.member.handle}`,
|
|
72
|
-
description: '引用成员 · 不会通知',
|
|
73
|
-
value: String(status.member.memberId),
|
|
74
|
-
};
|
|
75
|
-
});
|
|
76
|
-
},
|
|
77
|
-
onPick({ candidate, session }) {
|
|
78
|
-
if (!options.isEmbeddedMemberSession(session.sessionId) || candidate.value === undefined)
|
|
79
|
-
return undefined;
|
|
80
|
-
const ref = candidate.value;
|
|
81
|
-
const label = labels.get(ref);
|
|
82
|
-
if (label === undefined)
|
|
83
|
-
return undefined;
|
|
84
|
-
const insert = {
|
|
85
|
-
source: TEAM_MEMBER_SOURCE,
|
|
86
|
-
// The input machine retains the typed trigger; label must therefore
|
|
87
|
-
// omit `@` or the draft would become `@@handle` after insertion.
|
|
88
|
-
label: label.slice(1),
|
|
89
|
-
ref,
|
|
90
|
-
clipboardText: label,
|
|
91
|
-
};
|
|
92
|
-
return { insert };
|
|
93
|
-
},
|
|
94
|
-
codec: {
|
|
95
|
-
clipboardText: ref => labels.get(ref) ?? `@${String(ref)}`,
|
|
96
|
-
serialize: async (ref) => {
|
|
97
|
-
const stable = String(ref);
|
|
98
|
-
const label = labels.get(ref) ?? '';
|
|
99
|
-
return `<team-member ref="${escapeAttribute(stable)}">${escapeText(label)}</team-member>`;
|
|
100
|
-
},
|
|
101
|
-
},
|
|
102
|
-
};
|
|
103
|
-
return [command, member];
|
|
104
|
-
}
|
|
105
|
-
function escapeText(value) {
|
|
106
|
-
return value.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');
|
|
107
|
-
}
|
|
108
|
-
function escapeAttribute(value) {
|
|
109
|
-
return escapeText(value).replaceAll('"', '"').replaceAll("'", ''');
|
|
110
|
-
}
|