@xfey/tutti 0.1.109 → 0.1.111
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/README.md +4 -2
- package/dist/chat-assistant/diagnostics.d.ts +1 -0
- package/dist/chat-assistant/index.js +25 -17
- package/dist/chat-assistant/reference-freshness-smoke-cli.d.ts +2 -0
- package/dist/chat-assistant/reference-freshness-smoke-cli.js +40 -0
- package/dist/chat-assistant/reference-freshness-smoke.d.ts +23 -0
- package/dist/chat-assistant/reference-freshness-smoke.js +274 -0
- package/dist/collaboration-ingestion/external-source.js +2 -0
- package/dist/collaboration-ingestion/index.d.ts +1 -1
- package/dist/collaboration-ingestion/index.js +1 -1
- package/dist/collaboration-ingestion/main-chat.js +9 -2
- package/dist/collaboration-ingestion/managed-reference-sources.d.ts +3 -1
- package/dist/collaboration-ingestion/managed-reference-sources.js +7 -0
- package/dist/collaboration-ingestion/types.d.ts +1 -0
- package/dist/collaboration-state/task-compile-context.d.ts +1 -1
- package/dist/control-plane/scratchpad-source-messages.js +9 -3
- package/dist/control-plane/task-source-context-types.d.ts +1 -1
- package/dist/control-plane/task-source-context.js +4 -2
- package/dist/reference-access/message-context.d.ts +6 -0
- package/dist/reference-access/message-context.js +11 -0
- package/dist/reference-access/read-evidence.d.ts +2 -0
- package/dist/reference-access/read-evidence.js +8 -0
- package/dist/server-shell/cli/external-reference-runtime.js +1 -0
- package/dist/server-shell/cli/relay-registration.js +1 -0
- package/dist/server-shell/http/routes/agent-context-external-reference-routes.js +1 -0
- package/dist/server-shell/http/routes/agent-context-messages-routes.js +2 -0
- package/dist/server-shell/http/routes/agent-context-reference-routes.js +37 -3
- package/dist/server-shell/http/routes/agent-context-references.d.ts +11 -0
- package/dist/server-shell/http/routes/agent-context-references.js +14 -0
- package/node_modules/@tutti/relay-client/dist/host-control.d.ts +1 -0
- package/node_modules/@tutti/relay-client/dist/host-control.js +3 -0
- package/node_modules/@tutti/shared/dist/schemas/api/clarifications.d.ts +3 -1
- package/node_modules/@tutti/shared/dist/schemas/api/external-references.d.ts +27 -4
- package/node_modules/@tutti/shared/dist/schemas/api/external-references.js +32 -3
- package/node_modules/@tutti/shared/dist/schemas/api/index.d.ts +1 -1
- package/node_modules/@tutti/shared/dist/schemas/api/index.js +1 -1
- package/node_modules/@tutti/shared/dist/schemas/api/messages.d.ts +12 -4
- package/node_modules/@tutti/shared/dist/schemas/api/messages.js +3 -1
- package/node_modules/@tutti/shared/dist/schemas/api/platform-sessions.d.ts +5 -3
- package/node_modules/@tutti/shared/dist/schemas/api/platform-sessions.js +16 -1
- package/node_modules/@tutti/shared/dist/schemas/api/viewer-reference.d.ts +3 -1
- package/node_modules/@tutti/shared/dist/schemas/internal/external-references.d.ts +15 -2
- package/node_modules/@tutti/shared/dist/schemas/internal/external-references.js +4 -2
- package/node_modules/@tutti/shared/dist/schemas/internal/platform-integration.d.ts +49 -8
- package/node_modules/@tutti/shared/dist/schemas/internal/platform-integration.js +14 -2
- package/package.json +1 -1
- package/prompts/chat-assistant.md +17 -15
- package/prompts/procedures/scratchpad-refresh.md +22 -2
- package/prompts/procedures/task-compile.md +1 -0
- package/prompts/runs/task-execute.md +2 -0
- package/prompts/skills/README.md +1 -1
- package/prompts/skills/read-references/README.md +2 -2
- package/prompts/skills/read-references/SKILL.md +24 -37
- package/web/assets/{homepage-motion-scene-B6yPJnY8.js → homepage-motion-scene-TmkKf8wQ.js} +1 -1
- package/web/assets/{index-aQnJ5JoI.js → index-B1oL1p9_.js} +3 -3
- package/web/index.html +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ClarificationRequestPayload, ExternalReferenceDescriptor } from "@tutti/shared/schemas/api";
|
|
2
2
|
export type PromptSourceMessage = {
|
|
3
|
-
role: "human" | "tutti";
|
|
3
|
+
role: "human" | "tutti" | "operator";
|
|
4
4
|
author_display_name?: string;
|
|
5
5
|
text: string;
|
|
6
6
|
external_references?: ExternalReferenceDescriptor[];
|
|
@@ -8,10 +8,12 @@ function promptSourceMessage(db, source) {
|
|
|
8
8
|
if (message.scope.kind !== "main_chat") {
|
|
9
9
|
throw new Error("Task source message is outside main chat");
|
|
10
10
|
}
|
|
11
|
-
if (message.message_kind === "user_text" &&
|
|
11
|
+
if (message.message_kind === "user_text" &&
|
|
12
|
+
(message.author.kind === "human" ||
|
|
13
|
+
(message.author.kind === "system" && message.refs?.development_operator === true))) {
|
|
12
14
|
const displayName = message.author.display_name?.trim();
|
|
13
15
|
return {
|
|
14
|
-
role: "human",
|
|
16
|
+
role: message.refs?.development_operator === true ? "operator" : "human",
|
|
15
17
|
...(displayName === undefined || displayName === ""
|
|
16
18
|
? {}
|
|
17
19
|
: { author_display_name: displayName }),
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { MessageProjection } from "@tutti/shared/schemas/api";
|
|
2
|
+
/** Location hints, not access grants or current-read evidence. Never copy private locators. */
|
|
3
|
+
export declare function externalReferenceMessageContext(refs: MessageProjection["refs"]): {
|
|
4
|
+
external_reference_sources?: string[];
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=message-context.d.ts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Location hints, not access grants or current-read evidence. Never copy private locators. */
|
|
2
|
+
export function externalReferenceMessageContext(refs) {
|
|
3
|
+
const sources = [
|
|
4
|
+
...(refs?.external_references?.map((source) => source.source_ref) ?? []),
|
|
5
|
+
...(refs?.external_reference_reads ?? []),
|
|
6
|
+
];
|
|
7
|
+
return sources.length === 0
|
|
8
|
+
? {}
|
|
9
|
+
: { external_reference_sources: [...new Set(sources)].slice(0, 16) };
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=message-context.js.map
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { SqliteDatabase } from "../store/index.js";
|
|
2
2
|
import type { ReferenceCopy } from "./cache.js";
|
|
3
3
|
import type { ReferenceInvocation } from "./service.js";
|
|
4
|
+
/** Prior answer context only: a source reference is not proof of freshness in a later turn. */
|
|
5
|
+
export declare function readExternalReferenceReadSources(db: SqliteDatabase, invocationRef: string): string[];
|
|
4
6
|
/** Durable observation, separate from evictable cache metadata; no content or locator. */
|
|
5
7
|
export declare function recordExternalReferenceRead(db: SqliteDatabase, invocation: ReferenceInvocation, copy: ReferenceCopy): void;
|
|
6
8
|
//# sourceMappingURL=read-evidence.d.ts.map
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/** Prior answer context only: a source reference is not proof of freshness in a later turn. */
|
|
2
|
+
export function readExternalReferenceReadSources(db, invocationRef) {
|
|
3
|
+
return db
|
|
4
|
+
.prepare(`SELECT source_ref FROM external_reference_reads
|
|
5
|
+
WHERE invocation_ref = ? ORDER BY checked_at, source_ref LIMIT 16`)
|
|
6
|
+
.all(invocationRef)
|
|
7
|
+
.map((row) => row.source_ref);
|
|
8
|
+
}
|
|
1
9
|
/** Durable observation, separate from evictable cache metadata; no content or locator. */
|
|
2
10
|
export function recordExternalReferenceRead(db, invocation, copy) {
|
|
3
11
|
const invocationRef = invocation.reference_invocation_ref;
|
|
@@ -17,6 +17,7 @@ export function createExternalReferenceRuntime(options) {
|
|
|
17
17
|
return requestExternalReferences({
|
|
18
18
|
relayUrl: preparation.relay_url,
|
|
19
19
|
body: {
|
|
20
|
+
supports_drive_files: true,
|
|
20
21
|
project_identity: { source: "git_config", project_id: preparation.project_id },
|
|
21
22
|
host_auth: { kind: "host_registration_secret_v1", secret: secret.secret },
|
|
22
23
|
relay_project_ref: relay.relay_project_ref,
|
|
@@ -37,6 +37,7 @@ export async function registerHostWithRelay(options) {
|
|
|
37
37
|
joinToken: { mode: options.joinTokenMode ?? "rotate" },
|
|
38
38
|
capabilities: {
|
|
39
39
|
integration_source_ingestion_v1: true,
|
|
40
|
+
integration_development_bot_v1: true,
|
|
40
41
|
integration_external_references_v1: true,
|
|
41
42
|
integration_attachment_ingestion_v1: true,
|
|
42
43
|
integration_managed_reference_ingestion_v1: true,
|
|
@@ -76,6 +76,7 @@ export function registerAgentContextExternalReferenceRoutes(app, options) {
|
|
|
76
76
|
kind: text === undefined ? "local_file" : "text",
|
|
77
77
|
...copy,
|
|
78
78
|
cache_hit: result.cache_hit,
|
|
79
|
+
provenance: { origin: "external_reference", verification: "this_invocation" },
|
|
79
80
|
...(safeText === undefined
|
|
80
81
|
? {}
|
|
81
82
|
: {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { readMainChatMessageWindow } from "../../../collaboration-state/index.js";
|
|
2
|
+
import { externalReferenceMessageContext } from "../../../reference-access/message-context.js";
|
|
2
3
|
import { authorizeAgentContextRequest } from "./agent-context-auth.js";
|
|
3
4
|
import { AgentContextBadRequestError } from "./agent-context-errors.js";
|
|
4
5
|
import { boundedLimit, queryString, truncateText } from "./agent-context-query.js";
|
|
@@ -44,6 +45,7 @@ export function registerAgentContextMessageRoutes(app, options) {
|
|
|
44
45
|
},
|
|
45
46
|
body: body.text,
|
|
46
47
|
body_truncated: body.truncated,
|
|
48
|
+
...externalReferenceMessageContext(message.refs),
|
|
47
49
|
...(message.refs?.reference_file === undefined
|
|
48
50
|
? {}
|
|
49
51
|
: {
|
|
@@ -3,11 +3,17 @@ import { VIEWER_HARD_READ_LIMIT_BYTES, WorkspaceOpsError, readReferenceSummaryIn
|
|
|
3
3
|
import { authorizeAgentContextRequest } from "./agent-context-auth.js";
|
|
4
4
|
import { AgentContextBadRequestError } from "./agent-context-errors.js";
|
|
5
5
|
import { boundedLimit, pageByOffset, queryString } from "./agent-context-query.js";
|
|
6
|
-
import { mapReferenceUnavailableReason, referenceListItems, } from "./agent-context-references.js";
|
|
6
|
+
import { mapReferenceUnavailableReason, localReferenceProvenance, managedReferencePaths, referenceListItems, } from "./agent-context-references.js";
|
|
7
7
|
import { AGENT_CONTEXT_BASE_PATH, REFERENCE_FILE_DEFAULT_MAX_BYTES, REFERENCE_FILE_MAX_BYTES, REFERENCES_LIMIT_DEFAULT, REFERENCES_LIMIT_MAX, requireWorkspaceRoot, } from "./agent-context-shared.js";
|
|
8
8
|
export function registerAgentContextReferenceRoutes(app, options) {
|
|
9
9
|
app.get(`${AGENT_CONTEXT_BASE_PATH}/references`, (request) => {
|
|
10
|
-
authorizeAgentContextRequest(request, options, "references:list");
|
|
10
|
+
const invocation = authorizeAgentContextRequest(request, options, "references:list");
|
|
11
|
+
const started = performance.now();
|
|
12
|
+
request.log.info({
|
|
13
|
+
stage: "local_reference_request",
|
|
14
|
+
action: "list",
|
|
15
|
+
invocation_ref: invocation.reference_invocation_ref,
|
|
16
|
+
}, "Local Reference request started");
|
|
11
17
|
const query = request.query;
|
|
12
18
|
const limit = boundedLimit(query.limit, {
|
|
13
19
|
default: REFERENCES_LIMIT_DEFAULT,
|
|
@@ -20,6 +26,12 @@ export function registerAgentContextReferenceRoutes(app, options) {
|
|
|
20
26
|
...(cursor === undefined ? {} : { cursor }),
|
|
21
27
|
limit,
|
|
22
28
|
});
|
|
29
|
+
request.log.info({
|
|
30
|
+
stage: "local_reference_list",
|
|
31
|
+
invocation_ref: invocation.reference_invocation_ref,
|
|
32
|
+
source_count: page.items.length,
|
|
33
|
+
elapsed_ms: Math.round(performance.now() - started),
|
|
34
|
+
}, "Local References listed; remote freshness not checked");
|
|
23
35
|
return {
|
|
24
36
|
items: page.items,
|
|
25
37
|
page: {
|
|
@@ -29,7 +41,13 @@ export function registerAgentContextReferenceRoutes(app, options) {
|
|
|
29
41
|
};
|
|
30
42
|
});
|
|
31
43
|
app.get(`${AGENT_CONTEXT_BASE_PATH}/references/file`, (request) => {
|
|
32
|
-
authorizeAgentContextRequest(request, options, "references:read");
|
|
44
|
+
const invocation = authorizeAgentContextRequest(request, options, "references:read");
|
|
45
|
+
const started = performance.now();
|
|
46
|
+
const diagnosticFields = {
|
|
47
|
+
invocation_ref: invocation.reference_invocation_ref,
|
|
48
|
+
action: "read",
|
|
49
|
+
};
|
|
50
|
+
request.log.info({ ...diagnosticFields, stage: "local_reference_request" }, "Local Reference request started");
|
|
33
51
|
const path = queryString(request.query.path);
|
|
34
52
|
if (path === undefined || path.trim() === "") {
|
|
35
53
|
throw new AgentContextBadRequestError("Reference path is required");
|
|
@@ -49,12 +67,21 @@ export function registerAgentContextReferenceRoutes(app, options) {
|
|
|
49
67
|
entry: file.file,
|
|
50
68
|
summaries: readReferenceSummaryIndex({ workspaceRoot: requireWorkspaceRoot(options) }),
|
|
51
69
|
});
|
|
70
|
+
const provenance = localReferenceProvenance(file.file.path, managedReferencePaths(options));
|
|
71
|
+
request.log.info({
|
|
72
|
+
...diagnosticFields,
|
|
73
|
+
stage: "local_reference_read",
|
|
74
|
+
...provenance,
|
|
75
|
+
result_kind: file.content.kind,
|
|
76
|
+
elapsed_ms: Math.round(performance.now() - started),
|
|
77
|
+
}, "Local Reference read; remote freshness not checked");
|
|
52
78
|
if (file.content.kind !== "text") {
|
|
53
79
|
return {
|
|
54
80
|
kind: "unavailable",
|
|
55
81
|
path,
|
|
56
82
|
reason: file.content.reason,
|
|
57
83
|
summary,
|
|
84
|
+
provenance,
|
|
58
85
|
};
|
|
59
86
|
}
|
|
60
87
|
return {
|
|
@@ -62,12 +89,19 @@ export function registerAgentContextReferenceRoutes(app, options) {
|
|
|
62
89
|
path: file.file.path,
|
|
63
90
|
name: file.file.name,
|
|
64
91
|
summary,
|
|
92
|
+
provenance,
|
|
65
93
|
text: redactText(file.content.text),
|
|
66
94
|
truncated: file.content.truncated,
|
|
67
95
|
bytes_read: file.content.bytes_returned,
|
|
68
96
|
};
|
|
69
97
|
}
|
|
70
98
|
catch (error) {
|
|
99
|
+
request.log.warn({
|
|
100
|
+
...diagnosticFields,
|
|
101
|
+
stage: "local_reference_unavailable",
|
|
102
|
+
reason_code: error instanceof WorkspaceOpsError ? error.code : "reference_read_unavailable",
|
|
103
|
+
elapsed_ms: Math.round(performance.now() - started),
|
|
104
|
+
}, "Local Reference read unavailable");
|
|
71
105
|
if (error instanceof WorkspaceOpsError) {
|
|
72
106
|
return {
|
|
73
107
|
kind: "unavailable",
|
|
@@ -1,15 +1,26 @@
|
|
|
1
1
|
import { WorkspaceOpsError } from "../../../workspace-ops/index.js";
|
|
2
|
+
import type { HostProjectStore } from "../../../store/index.js";
|
|
2
3
|
type AgentContextWorkspaceOptions = {
|
|
4
|
+
store?: HostProjectStore;
|
|
3
5
|
workspaceOps?: {
|
|
4
6
|
workspaceRoot: string;
|
|
5
7
|
};
|
|
6
8
|
now?: () => Date;
|
|
7
9
|
};
|
|
10
|
+
export declare function localReferenceProvenance(path: string, managedPaths: ReadonlySet<string>): {
|
|
11
|
+
origin: "local_reference" | "managed_snapshot";
|
|
12
|
+
verification: "local_only";
|
|
13
|
+
};
|
|
14
|
+
export declare function managedReferencePaths(options: AgentContextWorkspaceOptions): ReadonlySet<string>;
|
|
8
15
|
export declare function mapReferenceUnavailableReason(error: WorkspaceOpsError): string;
|
|
9
16
|
export declare function referenceListItems(options: AgentContextWorkspaceOptions): {
|
|
10
17
|
can_read_text: boolean;
|
|
11
18
|
blocked_reason?: string;
|
|
12
19
|
summary: import("../../../workspace-ops/types.js").ReferenceSummaryProjection;
|
|
20
|
+
provenance: {
|
|
21
|
+
origin: "local_reference" | "managed_snapshot";
|
|
22
|
+
verification: "local_only";
|
|
23
|
+
};
|
|
13
24
|
extension?: string;
|
|
14
25
|
media_type?: string;
|
|
15
26
|
path: string;
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
import { REFERENCE_INDEX_PATH, WorkspaceOpsError, readReferenceFileEntries, readReferenceSummaryIndex, readViewerFile, referenceFileCategoryForPath, referenceMediaTypeForPath, referenceSummaryProjectionForEntry, } from "../../../workspace-ops/index.js";
|
|
2
2
|
import { AgentContextBadRequestError } from "./agent-context-errors.js";
|
|
3
|
+
import { readManagedReferenceSourcePaths } from "../../../collaboration-ingestion/index.js";
|
|
4
|
+
export function localReferenceProvenance(path, managedPaths) {
|
|
5
|
+
return {
|
|
6
|
+
origin: managedPaths.has(path) ? "managed_snapshot" : "local_reference",
|
|
7
|
+
verification: "local_only",
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export function managedReferencePaths(options) {
|
|
11
|
+
return options.store === undefined
|
|
12
|
+
? new Set()
|
|
13
|
+
: readManagedReferenceSourcePaths(options.store.db);
|
|
14
|
+
}
|
|
3
15
|
function requireWorkspaceRoot(options) {
|
|
4
16
|
if (options.workspaceOps === undefined) {
|
|
5
17
|
throw new AgentContextBadRequestError("Workspace viewer is unavailable");
|
|
@@ -24,6 +36,7 @@ export function mapReferenceUnavailableReason(error) {
|
|
|
24
36
|
export function referenceListItems(options) {
|
|
25
37
|
const workspaceRoot = requireWorkspaceRoot(options);
|
|
26
38
|
const summaries = readReferenceSummaryIndex({ workspaceRoot });
|
|
39
|
+
const managedPaths = managedReferencePaths(options);
|
|
27
40
|
return referenceEntries(options).map((entry) => {
|
|
28
41
|
const category = referenceFileCategoryForPath(entry.path) ?? "file";
|
|
29
42
|
const mediaType = referenceMediaTypeForPath(entry.path);
|
|
@@ -37,6 +50,7 @@ export function referenceListItems(options) {
|
|
|
37
50
|
...(mediaType === undefined ? {} : { media_type: mediaType }),
|
|
38
51
|
...(entry.extension === undefined ? {} : { extension: entry.extension }),
|
|
39
52
|
summary,
|
|
53
|
+
provenance: localReferenceProvenance(entry.path, managedPaths),
|
|
40
54
|
...read,
|
|
41
55
|
};
|
|
42
56
|
});
|
|
@@ -44,6 +44,7 @@ export type RegisterRelayHostConnectionPayload = {
|
|
|
44
44
|
browser_secret_write: false;
|
|
45
45
|
repo_viewer: boolean;
|
|
46
46
|
integration_source_ingestion_v1?: boolean;
|
|
47
|
+
integration_development_bot_v1?: boolean;
|
|
47
48
|
integration_external_references_v1?: boolean;
|
|
48
49
|
integration_attachment_ingestion_v1?: boolean;
|
|
49
50
|
integration_managed_reference_ingestion_v1?: boolean;
|
|
@@ -57,6 +57,9 @@ function createRegisterPayload(options) {
|
|
|
57
57
|
browser_secret_write: false,
|
|
58
58
|
repo_viewer: capabilities.repo_viewer ?? false,
|
|
59
59
|
integration_source_ingestion_v1: capabilities.integration_source_ingestion_v1 ?? false,
|
|
60
|
+
...(capabilities.integration_development_bot_v1 === true
|
|
61
|
+
? { integration_development_bot_v1: true }
|
|
62
|
+
: {}),
|
|
60
63
|
integration_external_references_v1: capabilities.integration_external_references_v1 ?? false,
|
|
61
64
|
integration_attachment_ingestion_v1: capabilities.integration_attachment_ingestion_v1 ?? false,
|
|
62
65
|
integration_managed_reference_ingestion_v1: capabilities.integration_managed_reference_ingestion_v1 ?? false,
|
|
@@ -507,9 +507,11 @@ export declare const SendClarificationRoundMessageResultSchema: import("@sinclai
|
|
|
507
507
|
message_kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"user_text">, import("@sinclair/typebox").TLiteral<"agent_text">, import("@sinclair/typebox").TLiteral<"system_notice">, import("@sinclair/typebox").TLiteral<"clarification_request">, import("@sinclair/typebox").TLiteral<"clarification_card">]>;
|
|
508
508
|
body: import("@sinclair/typebox").TString;
|
|
509
509
|
refs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
510
|
+
development_operator: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TLiteral<true>>;
|
|
511
|
+
external_reference_reads: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
|
|
510
512
|
external_references: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
511
513
|
source_ref: import("@sinclair/typebox").TString;
|
|
512
|
-
kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"feishu_docx">, import("@sinclair/typebox").TLiteral<"feishu_file">, import("@sinclair/typebox").TLiteral<"feishu_image">]>;
|
|
514
|
+
kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"feishu_docx">, import("@sinclair/typebox").TLiteral<"feishu_drive_file">, import("@sinclair/typebox").TLiteral<"feishu_file">, import("@sinclair/typebox").TLiteral<"feishu_image">]>;
|
|
513
515
|
name: import("@sinclair/typebox").TString;
|
|
514
516
|
created_at: import("@sinclair/typebox").TString;
|
|
515
517
|
}>>>;
|
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
import { type Static } from "@sinclair/typebox";
|
|
2
|
+
export type FeishuExternalReferenceLocator = {
|
|
3
|
+
kind: "docx" | "wiki" | "file";
|
|
4
|
+
token: string;
|
|
5
|
+
};
|
|
6
|
+
/** Private locator parsing only; callers must never fetch the supplied URL. */
|
|
7
|
+
export declare function parseFeishuExternalReferenceInput(value: string): FeishuExternalReferenceLocator | null;
|
|
2
8
|
export declare const ExternalReferenceRefSchema: import("@sinclair/typebox").TString;
|
|
9
|
+
export declare const ReferenceSubmissionRefSchema: import("@sinclair/typebox").TString;
|
|
10
|
+
export declare const ReferenceSubmissionSchema: import("@sinclair/typebox").TObject<{
|
|
11
|
+
submission_ref: import("@sinclair/typebox").TString;
|
|
12
|
+
kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"docx">, import("@sinclair/typebox").TLiteral<"wiki">, import("@sinclair/typebox").TLiteral<"file">]>;
|
|
13
|
+
created_at: import("@sinclair/typebox").TString;
|
|
14
|
+
expires_at: import("@sinclair/typebox").TString;
|
|
15
|
+
}>;
|
|
3
16
|
export declare const ExternalReferenceDescriptorSchema: import("@sinclair/typebox").TObject<{
|
|
4
17
|
source_ref: import("@sinclair/typebox").TString;
|
|
5
|
-
kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"feishu_docx">, import("@sinclair/typebox").TLiteral<"feishu_file">, import("@sinclair/typebox").TLiteral<"feishu_image">]>;
|
|
18
|
+
kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"feishu_docx">, import("@sinclair/typebox").TLiteral<"feishu_drive_file">, import("@sinclair/typebox").TLiteral<"feishu_file">, import("@sinclair/typebox").TLiteral<"feishu_image">]>;
|
|
6
19
|
name: import("@sinclair/typebox").TString;
|
|
7
20
|
created_at: import("@sinclair/typebox").TString;
|
|
8
21
|
}>;
|
|
@@ -10,14 +23,24 @@ export declare const ExternalReferenceListSchema: import("@sinclair/typebox").TO
|
|
|
10
23
|
can_register: import("@sinclair/typebox").TBoolean;
|
|
11
24
|
items: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
12
25
|
source_ref: import("@sinclair/typebox").TString;
|
|
13
|
-
kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"feishu_docx">, import("@sinclair/typebox").TLiteral<"feishu_file">, import("@sinclair/typebox").TLiteral<"feishu_image">]>;
|
|
26
|
+
kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"feishu_docx">, import("@sinclair/typebox").TLiteral<"feishu_drive_file">, import("@sinclair/typebox").TLiteral<"feishu_file">, import("@sinclair/typebox").TLiteral<"feishu_image">]>;
|
|
14
27
|
name: import("@sinclair/typebox").TString;
|
|
15
28
|
created_at: import("@sinclair/typebox").TString;
|
|
16
29
|
}>>;
|
|
30
|
+
pending: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
31
|
+
submission_ref: import("@sinclair/typebox").TString;
|
|
32
|
+
kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"docx">, import("@sinclair/typebox").TLiteral<"wiki">, import("@sinclair/typebox").TLiteral<"file">]>;
|
|
33
|
+
created_at: import("@sinclair/typebox").TString;
|
|
34
|
+
expires_at: import("@sinclair/typebox").TString;
|
|
35
|
+
}>>>;
|
|
17
36
|
}>;
|
|
18
|
-
export declare const RegisterExternalReferenceBodySchema: import("@sinclair/typebox").TObject<{
|
|
37
|
+
export declare const RegisterExternalReferenceBodySchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
|
|
19
38
|
document_url: import("@sinclair/typebox").TString;
|
|
20
|
-
}
|
|
39
|
+
}>, import("@sinclair/typebox").TObject<{
|
|
40
|
+
submission_ref: import("@sinclair/typebox").TString;
|
|
41
|
+
}>]>;
|
|
42
|
+
export type RegisterExternalReferenceBody = Static<typeof RegisterExternalReferenceBodySchema>;
|
|
43
|
+
export type ReferenceSubmission = Static<typeof ReferenceSubmissionSchema>;
|
|
21
44
|
export type ExternalReferenceDescriptor = Static<typeof ExternalReferenceDescriptorSchema>;
|
|
22
45
|
export type ExternalReferenceList = Static<typeof ExternalReferenceListSchema>;
|
|
23
46
|
//# sourceMappingURL=external-references.d.ts.map
|
|
@@ -1,10 +1,35 @@
|
|
|
1
1
|
import { Type } from "@sinclair/typebox";
|
|
2
2
|
import { IsoDateTimeStringSchema } from "../domain/index.js";
|
|
3
|
+
import { parseFeishuDocumentUrl } from "./feishu-documents.js";
|
|
4
|
+
/** Private locator parsing only; callers must never fetch the supplied URL. */
|
|
5
|
+
export function parseFeishuExternalReferenceInput(value) {
|
|
6
|
+
if (value.length > 2048 ||
|
|
7
|
+
[...value].some((character) => character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127))
|
|
8
|
+
return null;
|
|
9
|
+
const input = value.trim();
|
|
10
|
+
if (/^[A-Za-z0-9]{27}$/u.test(input))
|
|
11
|
+
return { kind: "docx", token: input };
|
|
12
|
+
const document = parseFeishuDocumentUrl(input);
|
|
13
|
+
if (document)
|
|
14
|
+
return document;
|
|
15
|
+
const file = /^https:\/\/(?:[a-z0-9-]+\.)?(?:feishu\.cn|larksuite\.com)(?::443)?\/file\/([a-z0-9]{1,256})\/?(?:[?#][^\s]*)?$/iu.exec(input);
|
|
16
|
+
return file?.[1] ? { kind: "file", token: file[1] } : null;
|
|
17
|
+
}
|
|
3
18
|
export const ExternalReferenceRefSchema = Type.String({ pattern: "^external_ref_[a-f0-9]{32}$" });
|
|
19
|
+
export const ReferenceSubmissionRefSchema = Type.String({
|
|
20
|
+
pattern: "^ref_submission_[a-f0-9]{32}$",
|
|
21
|
+
});
|
|
22
|
+
export const ReferenceSubmissionSchema = Type.Object({
|
|
23
|
+
submission_ref: ReferenceSubmissionRefSchema,
|
|
24
|
+
kind: Type.Union([Type.Literal("docx"), Type.Literal("wiki"), Type.Literal("file")]),
|
|
25
|
+
created_at: IsoDateTimeStringSchema,
|
|
26
|
+
expires_at: IsoDateTimeStringSchema,
|
|
27
|
+
}, { additionalProperties: false });
|
|
4
28
|
export const ExternalReferenceDescriptorSchema = Type.Object({
|
|
5
29
|
source_ref: ExternalReferenceRefSchema,
|
|
6
30
|
kind: Type.Union([
|
|
7
31
|
Type.Literal("feishu_docx"),
|
|
32
|
+
Type.Literal("feishu_drive_file"),
|
|
8
33
|
Type.Literal("feishu_file"),
|
|
9
34
|
Type.Literal("feishu_image"),
|
|
10
35
|
]),
|
|
@@ -14,8 +39,12 @@ export const ExternalReferenceDescriptorSchema = Type.Object({
|
|
|
14
39
|
export const ExternalReferenceListSchema = Type.Object({
|
|
15
40
|
can_register: Type.Boolean(),
|
|
16
41
|
items: Type.Array(ExternalReferenceDescriptorSchema, { maxItems: 500 }),
|
|
42
|
+
pending: Type.Optional(Type.Array(ReferenceSubmissionSchema, { maxItems: 20 })),
|
|
17
43
|
}, { additionalProperties: false });
|
|
18
|
-
export const RegisterExternalReferenceBodySchema = Type.
|
|
19
|
-
|
|
20
|
-
|
|
44
|
+
export const RegisterExternalReferenceBodySchema = Type.Union([
|
|
45
|
+
Type.Object({
|
|
46
|
+
document_url: Type.String({ minLength: 1, maxLength: 2048 }),
|
|
47
|
+
}, { additionalProperties: false }),
|
|
48
|
+
Type.Object({ submission_ref: ReferenceSubmissionRefSchema }, { additionalProperties: false }),
|
|
49
|
+
]);
|
|
21
50
|
//# sourceMappingURL=external-references.js.map
|
|
@@ -5,7 +5,7 @@ export { CompleteDesktopEntryContinuationBodySchema, CompleteDesktopEntryContinu
|
|
|
5
5
|
export type { CompleteDesktopEntryContinuationBody, CreateDesktopEntryContinuationResponse, GetDesktopEntryContinuationResponse, SealedDesktopEntryPayload, } from "./desktop-entry-continuations.js";
|
|
6
6
|
export { LOCAL_CONSOLE_ACCOUNT_HANDOFF_TOKEN_MAX_LENGTH, LOCAL_CONSOLE_ACCOUNT_HANDOFF_TOKEN_MIN_LENGTH, RegisterLocalConsoleAccountHandoffBodySchema, RegisterLocalConsoleAccountHandoffResponseSchema, } from "./local-console-account-handoffs.js";
|
|
7
7
|
export type { RegisterLocalConsoleAccountHandoffBody, RegisterLocalConsoleAccountHandoffResponse, } from "./local-console-account-handoffs.js";
|
|
8
|
-
export { FEISHU_BROWSER_HANDOFF_TOKEN_LENGTH, FEISHU_DOCX_READWRITE_USER_SCOPE, FEISHU_DOCX_REQUIRED_USER_SCOPE, FEISHU_H5_AUTHORIZATION_CODE_MAX_LENGTH, FEISHU_H5_REQUIRED_USER_SCOPE, FEISHU_OFFLINE_ACCESS_SCOPE, FEISHU_WIKI_REQUIRED_USER_SCOPE, FeishuDocumentAuthorizationBootstrapBodySchema, FEISHU_PLATFORM_STATE_LENGTH, FeishuPlatformSessionBootstrapBodySchema, FeishuPlatformSessionBootstrapResponseSchema, FeishuBrowserHandoffResponseSchema, FeishuBrowserHandoffTokenSchema, ConsumeFeishuBrowserHandoffBodySchema, FeishuDocumentAuthorizationBootstrapResponseSchema, FeishuDocumentAuthorizationExchangeBodySchema, FeishuDocumentAuthorizationProjectionSchema, FeishuPlatformSessionExchangeBodySchema, FeishuPlatformSessionProjectionSchema, FeishuPlatformStateSchema, hasFeishuDocxReadCapability, hasFeishuWikiReadCapability, } from "./platform-sessions.js";
|
|
8
|
+
export { FEISHU_BROWSER_HANDOFF_TOKEN_LENGTH, FEISHU_DOCX_READWRITE_USER_SCOPE, FEISHU_DOCX_REQUIRED_USER_SCOPE, FEISHU_DRIVE_DOWNLOAD_USER_SCOPE, FEISHU_H5_AUTHORIZATION_CODE_MAX_LENGTH, FEISHU_H5_REQUIRED_USER_SCOPE, FEISHU_OFFLINE_ACCESS_SCOPE, FEISHU_WIKI_REQUIRED_USER_SCOPE, FeishuDocumentAuthorizationBootstrapBodySchema, FEISHU_PLATFORM_STATE_LENGTH, FeishuPlatformSessionBootstrapBodySchema, FeishuPlatformSessionBootstrapResponseSchema, FeishuBrowserHandoffResponseSchema, FeishuBrowserHandoffTokenSchema, ConsumeFeishuBrowserHandoffBodySchema, FeishuDocumentAuthorizationBootstrapResponseSchema, FeishuDocumentAuthorizationExchangeBodySchema, FeishuDocumentAuthorizationProjectionSchema, FeishuPlatformSessionExchangeBodySchema, FeishuPlatformSessionProjectionSchema, FeishuPlatformStateSchema, hasFeishuDocxReadCapability, hasFeishuDriveDownloadCapability, hasFeishuWikiReadCapability, } from "./platform-sessions.js";
|
|
9
9
|
export type { FeishuPlatformSessionBootstrapBody, FeishuPlatformSessionBootstrapResponse, FeishuBrowserHandoffResponse, ConsumeFeishuBrowserHandoffBody, FeishuDocumentAuthorizationBootstrapResponse, FeishuDocumentAuthorizationProfile, FeishuDocumentAuthorizationExchangeBody, FeishuDocumentAuthorizationProjection, FeishuPlatformSessionExchangeBody, FeishuPlatformSessionProjection, } from "./platform-sessions.js";
|
|
10
10
|
export { ApiErrorCodeSchema, ApiErrorResponseSchema, CommandDispositionBaseSchema, CursorPageRequestSchema, DEFAULT_SSE_REPLAY_WINDOW_POLICY, InterruptedCommandDispositionSchema, QueryInvalidationHintSchema, RelayInvalidationHintSchema, RelaySseEventTypeSchema, SseReplayWindowPolicySchema, WorkspaceSseEventTypeSchema, commandEnvelopeSchema, commandResponseSchema, commandResponseWithResultSchema, cursorPageSchema, relaySseEventSchema, timelineWindowSchema, workspaceSseEventSchema, } from "./primitives.js";
|
|
11
11
|
export { GetProviderModelsResponseSchema, MAX_PROVIDER_MODEL_NAME_LENGTH, ProviderConfigInvalidReasonCodeSchema, ProviderConfigProjectionSchema, ProviderModelDiscoveryUnavailableReasonSchema, ProviderModelNameSchema, ProviderModelValidationFailureReasonSchema, ProviderUnavailableReasonCodeSchema, ProjectProviderUnavailableReasonSchema, UpdateProviderDefaultModelBodySchema, UpdateProviderDefaultModelDispositionSchema, UpdateProviderDefaultModelPayloadSchema, UpdateProviderDefaultModelResponseSchema, } from "./provider-config.js";
|
|
@@ -2,7 +2,7 @@ export * from "./openapi.js";
|
|
|
2
2
|
export { ARTIFACT_FEEDBACK_MAX_ANNOTATIONS, ARTIFACT_FEEDBACK_MAX_AUTHORED_TEXT_LENGTH, ARTIFACT_FEEDBACK_MAX_COMMENT_LENGTH, ARTIFACT_FEEDBACK_MAX_SERIALIZED_BYTES, ARTIFACT_FEEDBACK_MAX_SUMMARY_LENGTH, ArtifactElementAnchorSchema, ArtifactElementKindSchema, ArtifactElementTargetSchema, ArtifactFeedbackAnnotationSchema, ArtifactFeedbackCommandSchema, ArtifactFeedbackRefSchema, ArtifactSemanticContextSchema, ArtifactSemanticSnapshotSchema, ArtifactSemanticStateSchema, } from "./artifact-feedback.js";
|
|
3
3
|
export { CompleteDesktopEntryContinuationBodySchema, CompleteDesktopEntryContinuationResponseSchema, CreateDesktopEntryContinuationResponseSchema, DESKTOP_ENTRY_COMPLETION_TOKEN_LENGTH, DESKTOP_ENTRY_PAYLOAD_KEY_LENGTH, DESKTOP_ENTRY_SEALED_IV_LENGTH, DesktopEntryCompletionTokenSchema, DesktopEntryContinuationPendingProjectionSchema, DesktopEntryContinuationReadyProjectionSchema, DesktopEntryPayloadKeySchema, GetDesktopEntryContinuationResponseSchema, MAX_DESKTOP_ENTRY_SEALED_CIPHERTEXT_LENGTH, SealedDesktopEntryPayloadSchema, } from "./desktop-entry-continuations.js";
|
|
4
4
|
export { LOCAL_CONSOLE_ACCOUNT_HANDOFF_TOKEN_MAX_LENGTH, LOCAL_CONSOLE_ACCOUNT_HANDOFF_TOKEN_MIN_LENGTH, RegisterLocalConsoleAccountHandoffBodySchema, RegisterLocalConsoleAccountHandoffResponseSchema, } from "./local-console-account-handoffs.js";
|
|
5
|
-
export { FEISHU_BROWSER_HANDOFF_TOKEN_LENGTH, FEISHU_DOCX_READWRITE_USER_SCOPE, FEISHU_DOCX_REQUIRED_USER_SCOPE, FEISHU_H5_AUTHORIZATION_CODE_MAX_LENGTH, FEISHU_H5_REQUIRED_USER_SCOPE, FEISHU_OFFLINE_ACCESS_SCOPE, FEISHU_WIKI_REQUIRED_USER_SCOPE, FeishuDocumentAuthorizationBootstrapBodySchema, FEISHU_PLATFORM_STATE_LENGTH, FeishuPlatformSessionBootstrapBodySchema, FeishuPlatformSessionBootstrapResponseSchema, FeishuBrowserHandoffResponseSchema, FeishuBrowserHandoffTokenSchema, ConsumeFeishuBrowserHandoffBodySchema, FeishuDocumentAuthorizationBootstrapResponseSchema, FeishuDocumentAuthorizationExchangeBodySchema, FeishuDocumentAuthorizationProjectionSchema, FeishuPlatformSessionExchangeBodySchema, FeishuPlatformSessionProjectionSchema, FeishuPlatformStateSchema, hasFeishuDocxReadCapability, hasFeishuWikiReadCapability, } from "./platform-sessions.js";
|
|
5
|
+
export { FEISHU_BROWSER_HANDOFF_TOKEN_LENGTH, FEISHU_DOCX_READWRITE_USER_SCOPE, FEISHU_DOCX_REQUIRED_USER_SCOPE, FEISHU_DRIVE_DOWNLOAD_USER_SCOPE, FEISHU_H5_AUTHORIZATION_CODE_MAX_LENGTH, FEISHU_H5_REQUIRED_USER_SCOPE, FEISHU_OFFLINE_ACCESS_SCOPE, FEISHU_WIKI_REQUIRED_USER_SCOPE, FeishuDocumentAuthorizationBootstrapBodySchema, FEISHU_PLATFORM_STATE_LENGTH, FeishuPlatformSessionBootstrapBodySchema, FeishuPlatformSessionBootstrapResponseSchema, FeishuBrowserHandoffResponseSchema, FeishuBrowserHandoffTokenSchema, ConsumeFeishuBrowserHandoffBodySchema, FeishuDocumentAuthorizationBootstrapResponseSchema, FeishuDocumentAuthorizationExchangeBodySchema, FeishuDocumentAuthorizationProjectionSchema, FeishuPlatformSessionExchangeBodySchema, FeishuPlatformSessionProjectionSchema, FeishuPlatformStateSchema, hasFeishuDocxReadCapability, hasFeishuDriveDownloadCapability, hasFeishuWikiReadCapability, } from "./platform-sessions.js";
|
|
6
6
|
export { ApiErrorCodeSchema, ApiErrorResponseSchema, CommandDispositionBaseSchema, CursorPageRequestSchema, DEFAULT_SSE_REPLAY_WINDOW_POLICY, InterruptedCommandDispositionSchema, QueryInvalidationHintSchema, RelayInvalidationHintSchema, RelaySseEventTypeSchema, SseReplayWindowPolicySchema, WorkspaceSseEventTypeSchema, commandEnvelopeSchema, commandResponseSchema, commandResponseWithResultSchema, cursorPageSchema, relaySseEventSchema, timelineWindowSchema, workspaceSseEventSchema, } from "./primitives.js";
|
|
7
7
|
export { GetProviderModelsResponseSchema, MAX_PROVIDER_MODEL_NAME_LENGTH, ProviderConfigInvalidReasonCodeSchema, ProviderConfigProjectionSchema, ProviderModelDiscoveryUnavailableReasonSchema, ProviderModelNameSchema, ProviderModelValidationFailureReasonSchema, ProviderUnavailableReasonCodeSchema, ProjectProviderUnavailableReasonSchema, UpdateProviderDefaultModelBodySchema, UpdateProviderDefaultModelDispositionSchema, UpdateProviderDefaultModelPayloadSchema, UpdateProviderDefaultModelResponseSchema, } from "./provider-config.js";
|
|
8
8
|
export { ProviderUsageBreakdownProjectionSchema, ProviderUsageCategorySchema, ProviderUsageModelSummaryProjectionSchema, ProviderUsageProjectionSchema, ProviderUsageSourceSummaryProjectionSchema, } from "./provider-usage.js";
|
|
@@ -133,9 +133,11 @@ export declare const ArtifactPreviewRefSchema: import("@sinclair/typebox").TObje
|
|
|
133
133
|
run_result_id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
134
134
|
}>;
|
|
135
135
|
export declare const MessageRefsSchema: import("@sinclair/typebox").TObject<{
|
|
136
|
+
development_operator: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TLiteral<true>>;
|
|
137
|
+
external_reference_reads: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
|
|
136
138
|
external_references: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
137
139
|
source_ref: import("@sinclair/typebox").TString;
|
|
138
|
-
kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"feishu_docx">, import("@sinclair/typebox").TLiteral<"feishu_file">, import("@sinclair/typebox").TLiteral<"feishu_image">]>;
|
|
140
|
+
kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"feishu_docx">, import("@sinclair/typebox").TLiteral<"feishu_drive_file">, import("@sinclair/typebox").TLiteral<"feishu_file">, import("@sinclair/typebox").TLiteral<"feishu_image">]>;
|
|
139
141
|
name: import("@sinclair/typebox").TString;
|
|
140
142
|
created_at: import("@sinclair/typebox").TString;
|
|
141
143
|
}>>>;
|
|
@@ -343,9 +345,11 @@ export declare const MessageProjectionSchema: import("@sinclair/typebox").TObjec
|
|
|
343
345
|
message_kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"user_text">, import("@sinclair/typebox").TLiteral<"agent_text">, import("@sinclair/typebox").TLiteral<"system_notice">, import("@sinclair/typebox").TLiteral<"clarification_request">, import("@sinclair/typebox").TLiteral<"clarification_card">]>;
|
|
344
346
|
body: import("@sinclair/typebox").TString;
|
|
345
347
|
refs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
348
|
+
development_operator: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TLiteral<true>>;
|
|
349
|
+
external_reference_reads: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
|
|
346
350
|
external_references: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
347
351
|
source_ref: import("@sinclair/typebox").TString;
|
|
348
|
-
kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"feishu_docx">, import("@sinclair/typebox").TLiteral<"feishu_file">, import("@sinclair/typebox").TLiteral<"feishu_image">]>;
|
|
352
|
+
kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"feishu_docx">, import("@sinclair/typebox").TLiteral<"feishu_drive_file">, import("@sinclair/typebox").TLiteral<"feishu_file">, import("@sinclair/typebox").TLiteral<"feishu_image">]>;
|
|
349
353
|
name: import("@sinclair/typebox").TString;
|
|
350
354
|
created_at: import("@sinclair/typebox").TString;
|
|
351
355
|
}>>>;
|
|
@@ -672,9 +676,11 @@ export declare const SendMainChatMessageResultSchema: import("@sinclair/typebox"
|
|
|
672
676
|
message_kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"user_text">, import("@sinclair/typebox").TLiteral<"agent_text">, import("@sinclair/typebox").TLiteral<"system_notice">, import("@sinclair/typebox").TLiteral<"clarification_request">, import("@sinclair/typebox").TLiteral<"clarification_card">]>;
|
|
673
677
|
body: import("@sinclair/typebox").TString;
|
|
674
678
|
refs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
679
|
+
development_operator: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TLiteral<true>>;
|
|
680
|
+
external_reference_reads: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
|
|
675
681
|
external_references: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
676
682
|
source_ref: import("@sinclair/typebox").TString;
|
|
677
|
-
kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"feishu_docx">, import("@sinclair/typebox").TLiteral<"feishu_file">, import("@sinclair/typebox").TLiteral<"feishu_image">]>;
|
|
683
|
+
kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"feishu_docx">, import("@sinclair/typebox").TLiteral<"feishu_drive_file">, import("@sinclair/typebox").TLiteral<"feishu_file">, import("@sinclair/typebox").TLiteral<"feishu_image">]>;
|
|
678
684
|
name: import("@sinclair/typebox").TString;
|
|
679
685
|
created_at: import("@sinclair/typebox").TString;
|
|
680
686
|
}>>>;
|
|
@@ -903,9 +909,11 @@ export declare const MessageCreatedEventPayloadSchema: import("@sinclair/typebox
|
|
|
903
909
|
message_kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"user_text">, import("@sinclair/typebox").TLiteral<"agent_text">, import("@sinclair/typebox").TLiteral<"system_notice">, import("@sinclair/typebox").TLiteral<"clarification_request">, import("@sinclair/typebox").TLiteral<"clarification_card">]>;
|
|
904
910
|
body: import("@sinclair/typebox").TString;
|
|
905
911
|
refs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
912
|
+
development_operator: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TLiteral<true>>;
|
|
913
|
+
external_reference_reads: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
|
|
906
914
|
external_references: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
907
915
|
source_ref: import("@sinclair/typebox").TString;
|
|
908
|
-
kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"feishu_docx">, import("@sinclair/typebox").TLiteral<"feishu_file">, import("@sinclair/typebox").TLiteral<"feishu_image">]>;
|
|
916
|
+
kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"feishu_docx">, import("@sinclair/typebox").TLiteral<"feishu_drive_file">, import("@sinclair/typebox").TLiteral<"feishu_file">, import("@sinclair/typebox").TLiteral<"feishu_image">]>;
|
|
909
917
|
name: import("@sinclair/typebox").TString;
|
|
910
918
|
created_at: import("@sinclair/typebox").TString;
|
|
911
919
|
}>>>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Type } from "@sinclair/typebox";
|
|
2
|
-
import { ExternalReferenceDescriptorSchema } from "./external-references.js";
|
|
2
|
+
import { ExternalReferenceDescriptorSchema, ExternalReferenceRefSchema, } from "./external-references.js";
|
|
3
3
|
import { ActivityRefSchema, ClarificationRoundRefSchema, ClarificationThreadRefSchema, CursorSchema, IsoDateTimeStringSchema, MessageIdSchema, RunResultIdSchema, TaskIdSchema, WorkflowInvocationRefSchema, } from "../domain/index.js";
|
|
4
4
|
import { ACCOUNT_AVATAR_COLORS } from "../../domain/index.js";
|
|
5
5
|
import { InterruptedCommandDispositionSchema, NonEmptyStringSchema, commandEnvelopeSchema, commandResponseWithResultSchema, timelineWindowSchema, } from "./primitives.js";
|
|
@@ -125,6 +125,8 @@ export const ArtifactPreviewRefSchema = Type.Object({
|
|
|
125
125
|
run_result_id: Type.Optional(RunResultIdSchema),
|
|
126
126
|
}, { additionalProperties: false });
|
|
127
127
|
export const MessageRefsSchema = Type.Object({
|
|
128
|
+
development_operator: Type.Optional(Type.Literal(true)),
|
|
129
|
+
external_reference_reads: Type.Optional(Type.Array(ExternalReferenceRefSchema, { minItems: 1, maxItems: 16, uniqueItems: true })),
|
|
128
130
|
external_references: Type.Optional(Type.Array(ExternalReferenceDescriptorSchema, { minItems: 1, maxItems: 16 })),
|
|
129
131
|
task_id: Type.Optional(TaskIdSchema),
|
|
130
132
|
activity_ref: Type.Optional(ActivityRefSchema),
|
|
@@ -5,13 +5,15 @@ export declare const FEISHU_DOCX_REQUIRED_USER_SCOPE = "docx:document:readonly";
|
|
|
5
5
|
export declare const FEISHU_DOCX_READWRITE_USER_SCOPE = "docx:document";
|
|
6
6
|
export declare const FEISHU_OFFLINE_ACCESS_SCOPE = "offline_access";
|
|
7
7
|
export declare const FEISHU_WIKI_REQUIRED_USER_SCOPE = "wiki:node:read";
|
|
8
|
-
export
|
|
8
|
+
export declare const FEISHU_DRIVE_DOWNLOAD_USER_SCOPE = "drive:file:download";
|
|
9
|
+
export type FeishuDocumentAuthorizationProfile = "docx" | "wiki_docx" | "drive_file";
|
|
9
10
|
export declare const FEISHU_PLATFORM_STATE_LENGTH = 43;
|
|
10
11
|
export declare const FEISHU_BROWSER_HANDOFF_TOKEN_LENGTH = 43;
|
|
11
12
|
export declare function hasFeishuDocxReadCapability(scopes: readonly string[]): boolean;
|
|
12
13
|
export declare function hasFeishuWikiReadCapability(scopes: readonly string[]): boolean;
|
|
14
|
+
export declare function hasFeishuDriveDownloadCapability(scopes: readonly string[]): boolean;
|
|
13
15
|
export declare const FeishuDocumentAuthorizationBootstrapBodySchema: import("@sinclair/typebox").TObject<{
|
|
14
|
-
profile: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"docx">, import("@sinclair/typebox").TLiteral<"wiki_docx">]>>;
|
|
16
|
+
profile: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"docx">, import("@sinclair/typebox").TLiteral<"wiki_docx">, import("@sinclair/typebox").TLiteral<"drive_file">]>>;
|
|
15
17
|
}>;
|
|
16
18
|
export declare const FeishuPlatformStateSchema: import("@sinclair/typebox").TString;
|
|
17
19
|
export declare const FeishuBrowserHandoffTokenSchema: import("@sinclair/typebox").TString;
|
|
@@ -52,7 +54,7 @@ export declare const FeishuDocumentAuthorizationBootstrapResponseSchema: import(
|
|
|
52
54
|
platform: import("@sinclair/typebox").TLiteral<"feishu">;
|
|
53
55
|
app_id: import("@sinclair/typebox").TString;
|
|
54
56
|
state: import("@sinclair/typebox").TString;
|
|
55
|
-
authorization_scopes: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TTuple<[import("@sinclair/typebox").TLiteral<"docx:document:readonly">, import("@sinclair/typebox").TLiteral<"offline_access">]>, import("@sinclair/typebox").TTuple<[import("@sinclair/typebox").TLiteral<"docx:document:readonly">, import("@sinclair/typebox").TLiteral<"offline_access">, import("@sinclair/typebox").TLiteral<"wiki:node:read">]>]>;
|
|
57
|
+
authorization_scopes: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TTuple<[import("@sinclair/typebox").TLiteral<"docx:document:readonly">, import("@sinclair/typebox").TLiteral<"offline_access">, import("@sinclair/typebox").TLiteral<"drive:file:download">]>, import("@sinclair/typebox").TTuple<[import("@sinclair/typebox").TLiteral<"docx:document:readonly">, import("@sinclair/typebox").TLiteral<"offline_access">]>, import("@sinclair/typebox").TTuple<[import("@sinclair/typebox").TLiteral<"docx:document:readonly">, import("@sinclair/typebox").TLiteral<"offline_access">, import("@sinclair/typebox").TLiteral<"wiki:node:read">]>]>;
|
|
56
58
|
expires_at: import("@sinclair/typebox").TString;
|
|
57
59
|
}>;
|
|
58
60
|
export declare const FeishuDocumentAuthorizationExchangeBodySchema: import("@sinclair/typebox").TObject<{
|
|
@@ -6,6 +6,7 @@ export const FEISHU_DOCX_REQUIRED_USER_SCOPE = "docx:document:readonly";
|
|
|
6
6
|
export const FEISHU_DOCX_READWRITE_USER_SCOPE = "docx:document";
|
|
7
7
|
export const FEISHU_OFFLINE_ACCESS_SCOPE = "offline_access";
|
|
8
8
|
export const FEISHU_WIKI_REQUIRED_USER_SCOPE = "wiki:node:read";
|
|
9
|
+
export const FEISHU_DRIVE_DOWNLOAD_USER_SCOPE = "drive:file:download";
|
|
9
10
|
export const FEISHU_PLATFORM_STATE_LENGTH = 43;
|
|
10
11
|
export const FEISHU_BROWSER_HANDOFF_TOKEN_LENGTH = 43;
|
|
11
12
|
export function hasFeishuDocxReadCapability(scopes) {
|
|
@@ -14,8 +15,17 @@ export function hasFeishuDocxReadCapability(scopes) {
|
|
|
14
15
|
export function hasFeishuWikiReadCapability(scopes) {
|
|
15
16
|
return scopes.some((scope) => [FEISHU_WIKI_REQUIRED_USER_SCOPE, "wiki:wiki:readonly", "wiki:wiki"].includes(scope));
|
|
16
17
|
}
|
|
18
|
+
export function hasFeishuDriveDownloadCapability(scopes) {
|
|
19
|
+
return scopes.some((scope) => [
|
|
20
|
+
FEISHU_DRIVE_DOWNLOAD_USER_SCOPE,
|
|
21
|
+
"drive:drive",
|
|
22
|
+
"drive:drive:readonly",
|
|
23
|
+
"drive:file",
|
|
24
|
+
"drive:file:readonly",
|
|
25
|
+
].includes(scope));
|
|
26
|
+
}
|
|
17
27
|
export const FeishuDocumentAuthorizationBootstrapBodySchema = Type.Object({
|
|
18
|
-
profile: Type.Optional(Type.Union([Type.Literal("docx"), Type.Literal("wiki_docx")])),
|
|
28
|
+
profile: Type.Optional(Type.Union([Type.Literal("docx"), Type.Literal("wiki_docx"), Type.Literal("drive_file")])),
|
|
19
29
|
}, { additionalProperties: false });
|
|
20
30
|
export const FeishuPlatformStateSchema = Type.String({
|
|
21
31
|
minLength: FEISHU_PLATFORM_STATE_LENGTH,
|
|
@@ -65,6 +75,11 @@ export const FeishuDocumentAuthorizationBootstrapResponseSchema = Type.Object({
|
|
|
65
75
|
app_id: Type.String({ minLength: 1, maxLength: 128, pattern: "^cli_[A-Za-z0-9]+$" }),
|
|
66
76
|
state: FeishuPlatformStateSchema,
|
|
67
77
|
authorization_scopes: Type.Union([
|
|
78
|
+
Type.Tuple([
|
|
79
|
+
Type.Literal(FEISHU_DOCX_REQUIRED_USER_SCOPE),
|
|
80
|
+
Type.Literal(FEISHU_OFFLINE_ACCESS_SCOPE),
|
|
81
|
+
Type.Literal(FEISHU_DRIVE_DOWNLOAD_USER_SCOPE),
|
|
82
|
+
]),
|
|
68
83
|
Type.Tuple([
|
|
69
84
|
Type.Literal(FEISHU_DOCX_REQUIRED_USER_SCOPE),
|
|
70
85
|
Type.Literal(FEISHU_OFFLINE_ACCESS_SCOPE),
|
|
@@ -400,9 +400,11 @@ export declare const UploadReferenceFileResultSchema: import("@sinclair/typebox"
|
|
|
400
400
|
message_kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"user_text">, import("@sinclair/typebox").TLiteral<"agent_text">, import("@sinclair/typebox").TLiteral<"system_notice">, import("@sinclair/typebox").TLiteral<"clarification_request">, import("@sinclair/typebox").TLiteral<"clarification_card">]>;
|
|
401
401
|
body: import("@sinclair/typebox").TString;
|
|
402
402
|
refs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
|
|
403
|
+
development_operator: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TLiteral<true>>;
|
|
404
|
+
external_reference_reads: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
|
|
403
405
|
external_references: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
404
406
|
source_ref: import("@sinclair/typebox").TString;
|
|
405
|
-
kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"feishu_docx">, import("@sinclair/typebox").TLiteral<"feishu_file">, import("@sinclair/typebox").TLiteral<"feishu_image">]>;
|
|
407
|
+
kind: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"feishu_docx">, import("@sinclair/typebox").TLiteral<"feishu_drive_file">, import("@sinclair/typebox").TLiteral<"feishu_file">, import("@sinclair/typebox").TLiteral<"feishu_image">]>;
|
|
406
408
|
name: import("@sinclair/typebox").TString;
|
|
407
409
|
created_at: import("@sinclair/typebox").TString;
|
|
408
410
|
}>>>;
|