@xpert-ai/xpert-sdk 0.4.2 → 0.4.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/dist/client.d.ts +1 -0
- package/dist/client.js +23 -7
- package/dist/client.js.map +1 -1
- package/dist/client.mjs +23 -7
- package/dist/client.mjs.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -0
- package/dist/index.mjs.map +1 -1
- package/dist/mcp/apps.js +5 -5
- package/dist/mcp/apps.js.map +1 -1
- package/dist/mcp/apps.mjs +5 -5
- package/dist/mcp/apps.mjs.map +1 -1
- package/dist/mcp/apps.test.js +13 -4
- package/dist/mcp/apps.test.js.map +1 -1
- package/dist/mcp/apps.test.mjs +13 -4
- package/dist/mcp/apps.test.mjs.map +1 -1
- package/dist/schema.d.ts +12 -0
- package/dist/tests/fetch.test.js +7 -7
- package/dist/tests/fetch.test.js.map +1 -1
- package/dist/tests/fetch.test.mjs +7 -7
- package/dist/tests/fetch.test.mjs.map +1 -1
- package/dist/tests/sandbox-runtime.test.d.ts +1 -0
- package/dist/tests/sandbox-runtime.test.js +105 -0
- package/dist/tests/sandbox-runtime.test.js.map +1 -0
- package/dist/tests/sandbox-runtime.test.mjs +105 -0
- package/dist/tests/sandbox-runtime.test.mjs.map +1 -0
- package/dist/tests/workbench-open.test.d.ts +1 -0
- package/dist/tests/workbench-open.test.js +104 -0
- package/dist/tests/workbench-open.test.js.map +1 -0
- package/dist/tests/workbench-open.test.mjs +104 -0
- package/dist/tests/workbench-open.test.mjs.map +1 -0
- package/dist/view-extension.d.ts +15 -0
- package/dist/view-extension.js.map +1 -1
- package/dist/view-extension.mjs.map +1 -1
- package/dist/workbench-open.d.ts +10 -0
- package/dist/workbench-open.js +51 -0
- package/dist/workbench-open.js.map +1 -0
- package/dist/workbench-open.mjs +51 -0
- package/dist/workbench-open.mjs.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { parseWorkbenchViewOpenEvent, WORKBENCH_VIEW_OPEN_EVENT } from "../index.js";
|
|
3
|
+
function event(overrides = {}) {
|
|
4
|
+
return {
|
|
5
|
+
type: WORKBENCH_VIEW_OPEN_EVENT,
|
|
6
|
+
viewKey: 'pipeline-board',
|
|
7
|
+
projectId: 'project-1',
|
|
8
|
+
...overrides,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
describe('workbench view open events', () => {
|
|
12
|
+
it('parses a minimal live request scoped to a project', () => {
|
|
13
|
+
expect(parseWorkbenchViewOpenEvent(event())).toEqual({
|
|
14
|
+
type: WORKBENCH_VIEW_OPEN_EVENT,
|
|
15
|
+
viewKey: 'pipeline-board',
|
|
16
|
+
projectId: 'project-1',
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
it('keeps the conversation scope, selection and scalar parameters', () => {
|
|
20
|
+
expect(parseWorkbenchViewOpenEvent(event({
|
|
21
|
+
conversationId: 'conversation-1',
|
|
22
|
+
selectionId: 'selection-1',
|
|
23
|
+
parameters: {
|
|
24
|
+
stage: 'bid',
|
|
25
|
+
pinned: true,
|
|
26
|
+
ratio: 0.35,
|
|
27
|
+
missing: null,
|
|
28
|
+
bidders: ['acme', 'globex'],
|
|
29
|
+
empty: [],
|
|
30
|
+
},
|
|
31
|
+
}))).toEqual({
|
|
32
|
+
type: WORKBENCH_VIEW_OPEN_EVENT,
|
|
33
|
+
viewKey: 'pipeline-board',
|
|
34
|
+
projectId: 'project-1',
|
|
35
|
+
conversationId: 'conversation-1',
|
|
36
|
+
selectionId: 'selection-1',
|
|
37
|
+
parameters: {
|
|
38
|
+
stage: 'bid',
|
|
39
|
+
pinned: true,
|
|
40
|
+
ratio: 0.35,
|
|
41
|
+
missing: null,
|
|
42
|
+
bidders: ['acme', 'globex'],
|
|
43
|
+
empty: [],
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
it('drops unknown fields so arbitrary log payloads cannot smuggle state', () => {
|
|
48
|
+
expect(parseWorkbenchViewOpenEvent(event({ extra: 'ignored', nested: { deep: true } }))).toEqual({
|
|
49
|
+
type: WORKBENCH_VIEW_OPEN_EVENT,
|
|
50
|
+
viewKey: 'pipeline-board',
|
|
51
|
+
projectId: 'project-1',
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
it('rejects non-object payloads, other event types and missing scope', () => {
|
|
55
|
+
for (const value of [
|
|
56
|
+
null,
|
|
57
|
+
undefined,
|
|
58
|
+
'workbench.view.open',
|
|
59
|
+
42,
|
|
60
|
+
[event()],
|
|
61
|
+
event({ type: 'assistant.citation.open' }),
|
|
62
|
+
{ viewKey: 'pipeline-board', projectId: 'project-1' },
|
|
63
|
+
event({ viewKey: '' }),
|
|
64
|
+
event({ viewKey: ' ' }),
|
|
65
|
+
event({ projectId: '' }),
|
|
66
|
+
event({ projectId: ' ' }),
|
|
67
|
+
]) {
|
|
68
|
+
expect(parseWorkbenchViewOpenEvent(value)).toBeNull();
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
it('rejects mistyped optional identifiers and parameter containers', () => {
|
|
72
|
+
for (const value of [
|
|
73
|
+
event({ conversationId: 7 }),
|
|
74
|
+
event({ selectionId: {} }),
|
|
75
|
+
event({ parameters: null }),
|
|
76
|
+
event({ parameters: ['bid'] }),
|
|
77
|
+
event({ parameters: 'bid' }),
|
|
78
|
+
]) {
|
|
79
|
+
expect(parseWorkbenchViewOpenEvent(value)).toBeNull();
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
it('rejects parameter values that are not scalars or arrays of scalars', () => {
|
|
83
|
+
expect(parseWorkbenchViewOpenEvent(event({ parameters: { filter: { stage: 'bid' } } }))).toBeNull();
|
|
84
|
+
expect(parseWorkbenchViewOpenEvent(event({ parameters: { bidders: ['acme', 3, true] } }))).toEqual({
|
|
85
|
+
type: WORKBENCH_VIEW_OPEN_EVENT,
|
|
86
|
+
viewKey: 'pipeline-board',
|
|
87
|
+
projectId: 'project-1',
|
|
88
|
+
parameters: { bidders: ['acme', 3, true] },
|
|
89
|
+
});
|
|
90
|
+
expect(parseWorkbenchViewOpenEvent(event({ parameters: { bidders: ['acme', {}] } }))).toBeNull();
|
|
91
|
+
expect(parseWorkbenchViewOpenEvent(event({ parameters: { ratio: Number.NaN } }))).toBeNull();
|
|
92
|
+
expect(parseWorkbenchViewOpenEvent(event({ parameters: { ratio: Number.POSITIVE_INFINITY } }))).toBeNull();
|
|
93
|
+
});
|
|
94
|
+
it('accepts empty optional identifiers as-is (current behavior)', () => {
|
|
95
|
+
expect(parseWorkbenchViewOpenEvent(event({ conversationId: '', selectionId: '' }))).toEqual({
|
|
96
|
+
type: WORKBENCH_VIEW_OPEN_EVENT,
|
|
97
|
+
viewKey: 'pipeline-board',
|
|
98
|
+
projectId: 'project-1',
|
|
99
|
+
conversationId: '',
|
|
100
|
+
selectionId: '',
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=workbench-open.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbench-open.test.js","sourceRoot":"","sources":["../../src/tests/workbench-open.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { parseWorkbenchViewOpenEvent, WORKBENCH_VIEW_OPEN_EVENT } from "../index.mjs";
|
|
3
|
+
function event(overrides = {}) {
|
|
4
|
+
return {
|
|
5
|
+
type: WORKBENCH_VIEW_OPEN_EVENT,
|
|
6
|
+
viewKey: 'pipeline-board',
|
|
7
|
+
projectId: 'project-1',
|
|
8
|
+
...overrides,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
describe('workbench view open events', () => {
|
|
12
|
+
it('parses a minimal live request scoped to a project', () => {
|
|
13
|
+
expect(parseWorkbenchViewOpenEvent(event())).toEqual({
|
|
14
|
+
type: WORKBENCH_VIEW_OPEN_EVENT,
|
|
15
|
+
viewKey: 'pipeline-board',
|
|
16
|
+
projectId: 'project-1',
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
it('keeps the conversation scope, selection and scalar parameters', () => {
|
|
20
|
+
expect(parseWorkbenchViewOpenEvent(event({
|
|
21
|
+
conversationId: 'conversation-1',
|
|
22
|
+
selectionId: 'selection-1',
|
|
23
|
+
parameters: {
|
|
24
|
+
stage: 'bid',
|
|
25
|
+
pinned: true,
|
|
26
|
+
ratio: 0.35,
|
|
27
|
+
missing: null,
|
|
28
|
+
bidders: ['acme', 'globex'],
|
|
29
|
+
empty: [],
|
|
30
|
+
},
|
|
31
|
+
}))).toEqual({
|
|
32
|
+
type: WORKBENCH_VIEW_OPEN_EVENT,
|
|
33
|
+
viewKey: 'pipeline-board',
|
|
34
|
+
projectId: 'project-1',
|
|
35
|
+
conversationId: 'conversation-1',
|
|
36
|
+
selectionId: 'selection-1',
|
|
37
|
+
parameters: {
|
|
38
|
+
stage: 'bid',
|
|
39
|
+
pinned: true,
|
|
40
|
+
ratio: 0.35,
|
|
41
|
+
missing: null,
|
|
42
|
+
bidders: ['acme', 'globex'],
|
|
43
|
+
empty: [],
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
it('drops unknown fields so arbitrary log payloads cannot smuggle state', () => {
|
|
48
|
+
expect(parseWorkbenchViewOpenEvent(event({ extra: 'ignored', nested: { deep: true } }))).toEqual({
|
|
49
|
+
type: WORKBENCH_VIEW_OPEN_EVENT,
|
|
50
|
+
viewKey: 'pipeline-board',
|
|
51
|
+
projectId: 'project-1',
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
it('rejects non-object payloads, other event types and missing scope', () => {
|
|
55
|
+
for (const value of [
|
|
56
|
+
null,
|
|
57
|
+
undefined,
|
|
58
|
+
'workbench.view.open',
|
|
59
|
+
42,
|
|
60
|
+
[event()],
|
|
61
|
+
event({ type: 'assistant.citation.open' }),
|
|
62
|
+
{ viewKey: 'pipeline-board', projectId: 'project-1' },
|
|
63
|
+
event({ viewKey: '' }),
|
|
64
|
+
event({ viewKey: ' ' }),
|
|
65
|
+
event({ projectId: '' }),
|
|
66
|
+
event({ projectId: ' ' }),
|
|
67
|
+
]) {
|
|
68
|
+
expect(parseWorkbenchViewOpenEvent(value)).toBeNull();
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
it('rejects mistyped optional identifiers and parameter containers', () => {
|
|
72
|
+
for (const value of [
|
|
73
|
+
event({ conversationId: 7 }),
|
|
74
|
+
event({ selectionId: {} }),
|
|
75
|
+
event({ parameters: null }),
|
|
76
|
+
event({ parameters: ['bid'] }),
|
|
77
|
+
event({ parameters: 'bid' }),
|
|
78
|
+
]) {
|
|
79
|
+
expect(parseWorkbenchViewOpenEvent(value)).toBeNull();
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
it('rejects parameter values that are not scalars or arrays of scalars', () => {
|
|
83
|
+
expect(parseWorkbenchViewOpenEvent(event({ parameters: { filter: { stage: 'bid' } } }))).toBeNull();
|
|
84
|
+
expect(parseWorkbenchViewOpenEvent(event({ parameters: { bidders: ['acme', 3, true] } }))).toEqual({
|
|
85
|
+
type: WORKBENCH_VIEW_OPEN_EVENT,
|
|
86
|
+
viewKey: 'pipeline-board',
|
|
87
|
+
projectId: 'project-1',
|
|
88
|
+
parameters: { bidders: ['acme', 3, true] },
|
|
89
|
+
});
|
|
90
|
+
expect(parseWorkbenchViewOpenEvent(event({ parameters: { bidders: ['acme', {}] } }))).toBeNull();
|
|
91
|
+
expect(parseWorkbenchViewOpenEvent(event({ parameters: { ratio: Number.NaN } }))).toBeNull();
|
|
92
|
+
expect(parseWorkbenchViewOpenEvent(event({ parameters: { ratio: Number.POSITIVE_INFINITY } }))).toBeNull();
|
|
93
|
+
});
|
|
94
|
+
it('accepts empty optional identifiers as-is (current behavior)', () => {
|
|
95
|
+
expect(parseWorkbenchViewOpenEvent(event({ conversationId: '', selectionId: '' }))).toEqual({
|
|
96
|
+
type: WORKBENCH_VIEW_OPEN_EVENT,
|
|
97
|
+
viewKey: 'pipeline-board',
|
|
98
|
+
projectId: 'project-1',
|
|
99
|
+
conversationId: '',
|
|
100
|
+
selectionId: '',
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=workbench-open.test.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbench-open.test.mjs","sourceRoot":"","sources":["../../src/tests/workbench-open.test.ts"],"names":[],"mappings":"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"}
|
package/dist/view-extension.d.ts
CHANGED
|
@@ -123,8 +123,18 @@ export interface XpertViewActivation {
|
|
|
123
123
|
requiredFeatures?: string[];
|
|
124
124
|
}
|
|
125
125
|
export interface XpertWorkbenchViewOptions {
|
|
126
|
+
/**
|
|
127
|
+
* @deprecated Use the manifest's `visible` field for visibility and `openMode`
|
|
128
|
+
* for initial tab behavior. Retained for compatibility; false hides the view.
|
|
129
|
+
*/
|
|
126
130
|
fixed?: boolean;
|
|
131
|
+
/**
|
|
132
|
+
* Initial tab behavior; defaults to auto. On-demand views open through a
|
|
133
|
+
* menu, navigation or live Agent request. This does not grant view access.
|
|
134
|
+
*/
|
|
135
|
+
openMode?: 'auto' | 'on-demand';
|
|
127
136
|
menu?: {
|
|
137
|
+
/** Controls the manual entry only; does not disable the view or navigation. */
|
|
128
138
|
enabled?: boolean;
|
|
129
139
|
label?: string | XpertI18nObject;
|
|
130
140
|
order?: number;
|
|
@@ -472,3 +482,8 @@ export interface XpertViewRequestOptions {
|
|
|
472
482
|
signal?: AbortSignal;
|
|
473
483
|
runtimeScope?: XpertViewRuntimeScopeInput;
|
|
474
484
|
}
|
|
485
|
+
export interface WorkbenchExtensionViewOpenRequest {
|
|
486
|
+
viewKey: string;
|
|
487
|
+
selectionId?: string;
|
|
488
|
+
parameters?: Record<string, XpertViewScalar | XpertViewScalar[]>;
|
|
489
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-extension.js","sourceRoot":"","sources":["../src/view-extension.ts"],"names":[],"mappings":"AA4CA,MAAM,CAAC,MAAM,4BAA4B,GAAG,yBAAyB,CAAC;AACtE,MAAM,CAAC,MAAM,iCAAiC,GAAG,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"view-extension.js","sourceRoot":"","sources":["../src/view-extension.ts"],"names":[],"mappings":"AA4CA,MAAM,CAAC,MAAM,4BAA4B,GAAG,yBAAyB,CAAC;AACtE,MAAM,CAAC,MAAM,iCAAiC,GAAG,8BAA8B,CAAC;AAuXhF,MAAM,CAAC,MAAM,mCAAmC,GAC9C,6BAA6B,CAAC;AAChC,MAAM,CAAC,MAAM,6BAA6B,GAAG,uBAAuB,CAAC;AACrE,MAAM,CAAC,MAAM,2BAA2B,GAAG,qBAAqB,CAAC;AACjE,MAAM,CAAC,MAAM,iCAAiC,GAAG,2BAA2B,CAAC;AAC7E,MAAM,CAAC,MAAM,wCAAwC,GACnD,yBAAyB,CAAC;AAC5B,MAAM,CAAC,MAAM,uCAAuC,GAAG,wBAAwB,CAAC;AAChF,MAAM,CAAC,MAAM,yDAAyD,GACpE,qBAAqB,CAAC;AAiExB,MAAM,CAAC,MAAM,6BAA6B,GAAG,yBAAyB,CAAC;AACvE,MAAM,CAAC,MAAM,kCAAkC,GAAG,6BAA6B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-extension.mjs","sourceRoot":"","sources":["../src/view-extension.ts"],"names":[],"mappings":"AA4CA,MAAM,CAAC,MAAM,4BAA4B,GAAG,yBAAyB,CAAC;AACtE,MAAM,CAAC,MAAM,iCAAiC,GAAG,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"view-extension.mjs","sourceRoot":"","sources":["../src/view-extension.ts"],"names":[],"mappings":"AA4CA,MAAM,CAAC,MAAM,4BAA4B,GAAG,yBAAyB,CAAC;AACtE,MAAM,CAAC,MAAM,iCAAiC,GAAG,8BAA8B,CAAC;AAuXhF,MAAM,CAAC,MAAM,mCAAmC,GAC9C,6BAA6B,CAAC;AAChC,MAAM,CAAC,MAAM,6BAA6B,GAAG,uBAAuB,CAAC;AACrE,MAAM,CAAC,MAAM,2BAA2B,GAAG,qBAAqB,CAAC;AACjE,MAAM,CAAC,MAAM,iCAAiC,GAAG,2BAA2B,CAAC;AAC7E,MAAM,CAAC,MAAM,wCAAwC,GACnD,yBAAyB,CAAC;AAC5B,MAAM,CAAC,MAAM,uCAAuC,GAAG,wBAAwB,CAAC;AAChF,MAAM,CAAC,MAAM,yDAAyD,GACpE,qBAAqB,CAAC;AAiExB,MAAM,CAAC,MAAM,6BAA6B,GAAG,yBAAyB,CAAC;AACvE,MAAM,CAAC,MAAM,kCAAkC,GAAG,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { WorkbenchExtensionViewOpenRequest } from './view-extension.js';
|
|
2
|
+
/** Live-only UI request. Project scope is mandatory; history playback must not reopen Views. */
|
|
3
|
+
export declare const WORKBENCH_VIEW_OPEN_EVENT = "workbench.view.open";
|
|
4
|
+
export interface WorkbenchViewOpenEvent extends WorkbenchExtensionViewOpenRequest {
|
|
5
|
+
type: typeof WORKBENCH_VIEW_OPEN_EVENT;
|
|
6
|
+
projectId: string;
|
|
7
|
+
conversationId?: string;
|
|
8
|
+
}
|
|
9
|
+
/** Parse the public lg.chat.event boundary, keeping arbitrary logs out of navigation. */
|
|
10
|
+
export declare function parseWorkbenchViewOpenEvent(value: unknown): WorkbenchViewOpenEvent | null;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** Live-only UI request. Project scope is mandatory; history playback must not reopen Views. */
|
|
2
|
+
export const WORKBENCH_VIEW_OPEN_EVENT = 'workbench.view.open';
|
|
3
|
+
/** Parse the public lg.chat.event boundary, keeping arbitrary logs out of navigation. */
|
|
4
|
+
export function parseWorkbenchViewOpenEvent(value) {
|
|
5
|
+
if (!value ||
|
|
6
|
+
typeof value !== 'object' ||
|
|
7
|
+
Array.isArray(value) ||
|
|
8
|
+
!('type' in value) ||
|
|
9
|
+
value.type !== WORKBENCH_VIEW_OPEN_EVENT ||
|
|
10
|
+
!('viewKey' in value) ||
|
|
11
|
+
typeof value.viewKey !== 'string' ||
|
|
12
|
+
!value.viewKey.trim() ||
|
|
13
|
+
!('projectId' in value) ||
|
|
14
|
+
typeof value.projectId !== 'string' ||
|
|
15
|
+
!value.projectId.trim())
|
|
16
|
+
return null;
|
|
17
|
+
if ('conversationId' in value && typeof value.conversationId !== 'string')
|
|
18
|
+
return null;
|
|
19
|
+
if ('selectionId' in value && typeof value.selectionId !== 'string')
|
|
20
|
+
return null;
|
|
21
|
+
const parameters = {};
|
|
22
|
+
if ('parameters' in value) {
|
|
23
|
+
if (!value.parameters ||
|
|
24
|
+
typeof value.parameters !== 'object' ||
|
|
25
|
+
Array.isArray(value.parameters))
|
|
26
|
+
return null;
|
|
27
|
+
for (const [key, item] of Object.entries(value.parameters)) {
|
|
28
|
+
if (isViewScalar(item))
|
|
29
|
+
parameters[key] = item;
|
|
30
|
+
else if (Array.isArray(item) && item.every(isViewScalar))
|
|
31
|
+
parameters[key] = item;
|
|
32
|
+
else
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
type: WORKBENCH_VIEW_OPEN_EVENT,
|
|
38
|
+
viewKey: value.viewKey,
|
|
39
|
+
projectId: value.projectId,
|
|
40
|
+
...('conversationId' in value ? { conversationId: value.conversationId } : {}),
|
|
41
|
+
...('selectionId' in value ? { selectionId: value.selectionId } : {}),
|
|
42
|
+
...('parameters' in value ? { parameters } : {}),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function isViewScalar(value) {
|
|
46
|
+
return (value === null ||
|
|
47
|
+
typeof value === 'string' ||
|
|
48
|
+
typeof value === 'boolean' ||
|
|
49
|
+
(typeof value === 'number' && Number.isFinite(value)));
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=workbench-open.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbench-open.js","sourceRoot":"","sources":["../src/workbench-open.ts"],"names":[],"mappings":"AAEA,gGAAgG;AAChG,MAAM,CAAC,MAAM,yBAAyB,GAAG,qBAAqB,CAAC;AAO/D,yFAAyF;AACzF,MAAM,UAAU,2BAA2B,CAAC,KAAc;IACxD,IACE,CAAC,KAAK;QACN,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACpB,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC;QAClB,KAAK,CAAC,IAAI,KAAK,yBAAyB;QACxC,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC;QACrB,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QACjC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;QACrB,CAAC,CAAC,WAAW,IAAI,KAAK,CAAC;QACvB,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QACnC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;QAEvB,OAAO,IAAI,CAAC;IACd,IAAI,gBAAgB,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvF,IAAI,aAAa,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjF,MAAM,UAAU,GAAiE,EAAE,CAAC;IACpF,IAAI,YAAY,IAAI,KAAK,EAAE,CAAC;QAC1B,IACE,CAAC,KAAK,CAAC,UAAU;YACjB,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;YACpC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;YAE/B,OAAO,IAAI,CAAC;QACd,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3D,IAAI,YAAY,CAAC,IAAI,CAAC;gBAAE,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;iBAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;gBAAE,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;;gBAC5E,OAAO,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO;QACL,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,GAAG,CAAC,gBAAgB,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAwB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,GAAG,CAAC,aAAa,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,GAAG,CAAC,YAAY,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjD,CAAC;AACJ,CAAC;AACD,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,CACL,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,SAAS;QAC1B,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CACtD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** Live-only UI request. Project scope is mandatory; history playback must not reopen Views. */
|
|
2
|
+
export const WORKBENCH_VIEW_OPEN_EVENT = 'workbench.view.open';
|
|
3
|
+
/** Parse the public lg.chat.event boundary, keeping arbitrary logs out of navigation. */
|
|
4
|
+
export function parseWorkbenchViewOpenEvent(value) {
|
|
5
|
+
if (!value ||
|
|
6
|
+
typeof value !== 'object' ||
|
|
7
|
+
Array.isArray(value) ||
|
|
8
|
+
!('type' in value) ||
|
|
9
|
+
value.type !== WORKBENCH_VIEW_OPEN_EVENT ||
|
|
10
|
+
!('viewKey' in value) ||
|
|
11
|
+
typeof value.viewKey !== 'string' ||
|
|
12
|
+
!value.viewKey.trim() ||
|
|
13
|
+
!('projectId' in value) ||
|
|
14
|
+
typeof value.projectId !== 'string' ||
|
|
15
|
+
!value.projectId.trim())
|
|
16
|
+
return null;
|
|
17
|
+
if ('conversationId' in value && typeof value.conversationId !== 'string')
|
|
18
|
+
return null;
|
|
19
|
+
if ('selectionId' in value && typeof value.selectionId !== 'string')
|
|
20
|
+
return null;
|
|
21
|
+
const parameters = {};
|
|
22
|
+
if ('parameters' in value) {
|
|
23
|
+
if (!value.parameters ||
|
|
24
|
+
typeof value.parameters !== 'object' ||
|
|
25
|
+
Array.isArray(value.parameters))
|
|
26
|
+
return null;
|
|
27
|
+
for (const [key, item] of Object.entries(value.parameters)) {
|
|
28
|
+
if (isViewScalar(item))
|
|
29
|
+
parameters[key] = item;
|
|
30
|
+
else if (Array.isArray(item) && item.every(isViewScalar))
|
|
31
|
+
parameters[key] = item;
|
|
32
|
+
else
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
type: WORKBENCH_VIEW_OPEN_EVENT,
|
|
38
|
+
viewKey: value.viewKey,
|
|
39
|
+
projectId: value.projectId,
|
|
40
|
+
...('conversationId' in value ? { conversationId: value.conversationId } : {}),
|
|
41
|
+
...('selectionId' in value ? { selectionId: value.selectionId } : {}),
|
|
42
|
+
...('parameters' in value ? { parameters } : {}),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function isViewScalar(value) {
|
|
46
|
+
return (value === null ||
|
|
47
|
+
typeof value === 'string' ||
|
|
48
|
+
typeof value === 'boolean' ||
|
|
49
|
+
(typeof value === 'number' && Number.isFinite(value)));
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=workbench-open.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbench-open.mjs","sourceRoot":"","sources":["../src/workbench-open.ts"],"names":[],"mappings":"AAEA,gGAAgG;AAChG,MAAM,CAAC,MAAM,yBAAyB,GAAG,qBAAqB,CAAC;AAO/D,yFAAyF;AACzF,MAAM,UAAU,2BAA2B,CAAC,KAAc;IACxD,IACE,CAAC,KAAK;QACN,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACpB,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC;QAClB,KAAK,CAAC,IAAI,KAAK,yBAAyB;QACxC,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC;QACrB,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QACjC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;QACrB,CAAC,CAAC,WAAW,IAAI,KAAK,CAAC;QACvB,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QACnC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;QAEvB,OAAO,IAAI,CAAC;IACd,IAAI,gBAAgB,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvF,IAAI,aAAa,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjF,MAAM,UAAU,GAAiE,EAAE,CAAC;IACpF,IAAI,YAAY,IAAI,KAAK,EAAE,CAAC;QAC1B,IACE,CAAC,KAAK,CAAC,UAAU;YACjB,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;YACpC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;YAE/B,OAAO,IAAI,CAAC;QACd,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3D,IAAI,YAAY,CAAC,IAAI,CAAC;gBAAE,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;iBAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;gBAAE,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;;gBAC5E,OAAO,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO;QACL,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,GAAG,CAAC,gBAAgB,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAwB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,GAAG,CAAC,aAAa,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,GAAG,CAAC,YAAY,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjD,CAAC;AACJ,CAAC;AACD,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,CACL,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,SAAS;QAC1B,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CACtD,CAAC;AACJ,CAAC"}
|