@plotday/twister 0.33.1 → 0.34.0
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/common/documents.d.ts +135 -0
- package/dist/common/documents.d.ts.map +1 -0
- package/dist/common/documents.js +2 -0
- package/dist/common/documents.js.map +1 -0
- package/dist/docs/assets/hierarchy.js +1 -1
- package/dist/docs/assets/navigation.js +1 -1
- package/dist/docs/assets/search.js +1 -1
- package/dist/docs/classes/tools_ai.AI.html +1 -1
- package/dist/docs/classes/tools_callbacks.Callbacks.html +1 -1
- package/dist/docs/classes/tools_integrations.Integrations.html +1 -1
- package/dist/docs/classes/tools_network.Network.html +1 -1
- package/dist/docs/classes/tools_plot.Plot.html +1 -1
- package/dist/docs/classes/tools_store.Store.html +1 -1
- package/dist/docs/classes/tools_tasks.Tasks.html +1 -1
- package/dist/docs/classes/tools_twists.Twists.html +1 -1
- package/dist/docs/enums/plot.ActivityKind.html +2 -2
- package/dist/docs/enums/plot.ActivityLinkType.html +7 -5
- package/dist/docs/enums/plot.ActivityType.html +4 -4
- package/dist/docs/enums/plot.ActorType.html +4 -4
- package/dist/docs/enums/plot.ConferencingProvider.html +6 -6
- package/dist/docs/enums/plot.ThemeColor.html +9 -9
- package/dist/docs/hierarchy.html +1 -1
- package/dist/docs/modules/index.html +1 -1
- package/dist/docs/modules/plot.html +1 -1
- package/dist/docs/types/plot.Activity.html +2 -59
- package/dist/docs/types/plot.ActivityCommon.html +8 -8
- package/dist/docs/types/plot.ActivityLink.html +7 -2
- package/dist/docs/types/plot.ActivityMeta.html +1 -1
- package/dist/docs/types/plot.ActivityOccurrence.html +7 -7
- package/dist/docs/types/plot.ActivityOccurrenceUpdate.html +1 -1
- package/dist/docs/types/plot.ActivityUpdate.html +6 -3
- package/dist/docs/types/plot.ActivityWithNotes.html +1 -1
- package/dist/docs/types/plot.Actor.html +5 -5
- package/dist/docs/types/plot.ActorId.html +1 -1
- package/dist/docs/types/plot.ContentType.html +1 -1
- package/dist/docs/types/plot.NewActivity.html +3 -3
- package/dist/docs/types/plot.NewActivityOccurrence.html +1 -1
- package/dist/docs/types/plot.NewActivityWithNotes.html +1 -1
- package/dist/docs/types/plot.NewActor.html +1 -1
- package/dist/docs/types/plot.NewContact.html +8 -4
- package/dist/docs/types/plot.NewNote.html +9 -2
- package/dist/docs/types/plot.NewPriority.html +1 -1
- package/dist/docs/types/plot.NewTags.html +1 -1
- package/dist/docs/types/plot.Note.html +3 -2
- package/dist/docs/types/plot.NoteUpdate.html +2 -2
- package/dist/docs/types/plot.PickPriorityConfig.html +2 -2
- package/dist/docs/types/plot.Priority.html +6 -6
- package/dist/docs/types/plot.PriorityUpdate.html +1 -1
- package/dist/docs/types/plot.Tags.html +1 -1
- package/dist/llm-docs/common/documents.d.ts +9 -0
- package/dist/llm-docs/common/documents.d.ts.map +1 -0
- package/dist/llm-docs/common/documents.js +8 -0
- package/dist/llm-docs/common/documents.js.map +1 -0
- package/dist/llm-docs/index.d.ts.map +1 -1
- package/dist/llm-docs/index.js +2 -0
- package/dist/llm-docs/index.js.map +1 -1
- package/dist/llm-docs/plot.d.ts +1 -1
- package/dist/llm-docs/plot.d.ts.map +1 -1
- package/dist/llm-docs/plot.js +1 -1
- package/dist/llm-docs/plot.js.map +1 -1
- package/dist/plot.d.ts +79 -10
- package/dist/plot.d.ts.map +1 -1
- package/dist/plot.js +2 -0
- package/dist/plot.js.map +1 -1
- package/package.json +11 -1
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import type { ActivityLink, ActivityMeta, NewActivityWithNotes, Serializable } from "../index";
|
|
2
|
+
/**
|
|
3
|
+
* Represents a successful document service authorization.
|
|
4
|
+
*
|
|
5
|
+
* Returned by document tools when authorization completes successfully.
|
|
6
|
+
* The auth token is an opaque identifier that can be used for subsequent
|
|
7
|
+
* document operations.
|
|
8
|
+
*/
|
|
9
|
+
export type DocumentAuth = {
|
|
10
|
+
/** Opaque token for document operations */
|
|
11
|
+
authToken: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Represents a folder from an external document service.
|
|
15
|
+
*
|
|
16
|
+
* Contains metadata about a specific folder that can be synced
|
|
17
|
+
* with Plot. Different document providers may have additional
|
|
18
|
+
* provider-specific properties.
|
|
19
|
+
*/
|
|
20
|
+
export type DocumentFolder = {
|
|
21
|
+
/** Unique identifier for the folder within the provider */
|
|
22
|
+
id: string;
|
|
23
|
+
/** Human-readable name of the folder */
|
|
24
|
+
name: string;
|
|
25
|
+
/** Optional description or additional details about the folder */
|
|
26
|
+
description: string | null;
|
|
27
|
+
/** Whether this is a root-level folder (e.g., "My Drive" in Google Drive) */
|
|
28
|
+
root: boolean;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Configuration options for document synchronization.
|
|
32
|
+
*
|
|
33
|
+
* Controls the time range and other parameters for document sync operations.
|
|
34
|
+
* Used to limit sync scope and optimize performance.
|
|
35
|
+
*/
|
|
36
|
+
export type DocumentSyncOptions = {
|
|
37
|
+
/** Earliest date to sync documents from (inclusive) */
|
|
38
|
+
timeMin?: Date;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Base interface for document service integration tools.
|
|
42
|
+
*
|
|
43
|
+
* All synced documents are converted to ActivityWithNotes objects.
|
|
44
|
+
* Each document becomes an Activity with Notes for the description and comments.
|
|
45
|
+
*
|
|
46
|
+
* **Recommended Data Sync Strategy:**
|
|
47
|
+
* Use Activity.source and Note.key for automatic upserts.
|
|
48
|
+
*
|
|
49
|
+
* - Set `Activity.source` to `"{provider}:file:{fileId}"` (e.g., `"google-drive:file:abc123"`)
|
|
50
|
+
* - Use `Note.key` for document details:
|
|
51
|
+
* - key: `"summary"` for the document description or metadata summary
|
|
52
|
+
* - key: `"comment-{commentId}"` for individual comments (unique per comment)
|
|
53
|
+
* - key: `"reply-{commentId}-{replyId}"` for comment replies
|
|
54
|
+
* - No manual ID tracking needed - Plot handles deduplication automatically
|
|
55
|
+
* - Send NewActivityWithNotes for all documents (creates new or updates existing)
|
|
56
|
+
* - Set `activity.unread = false` for initial sync, omit for incremental updates
|
|
57
|
+
*/
|
|
58
|
+
export type DocumentTool = {
|
|
59
|
+
/**
|
|
60
|
+
* Initiates the authorization flow for the document service.
|
|
61
|
+
*
|
|
62
|
+
* @param callback - Function receiving (auth, ...extraArgs) when auth completes
|
|
63
|
+
* @param extraArgs - Additional arguments to pass to the callback (type-checked)
|
|
64
|
+
* @returns Promise resolving to an ActivityLink to initiate the auth flow
|
|
65
|
+
*/
|
|
66
|
+
requestAuth<TArgs extends Serializable[], TCallback extends (auth: DocumentAuth, ...args: TArgs) => any>(callback: TCallback, ...extraArgs: TArgs): Promise<ActivityLink>;
|
|
67
|
+
/**
|
|
68
|
+
* Retrieves the list of folders accessible to the user.
|
|
69
|
+
*
|
|
70
|
+
* @param authToken - Authorization token from successful auth flow
|
|
71
|
+
* @returns Promise resolving to array of available folders
|
|
72
|
+
*/
|
|
73
|
+
getFolders(authToken: string): Promise<DocumentFolder[]>;
|
|
74
|
+
/**
|
|
75
|
+
* Begins synchronizing documents from a specific folder.
|
|
76
|
+
*
|
|
77
|
+
* Documents are converted to NewActivityWithNotes objects.
|
|
78
|
+
*
|
|
79
|
+
* **Recommended Implementation:**
|
|
80
|
+
* - Set Activity.source to `"{provider}:file:{fileId}"`
|
|
81
|
+
* - Use Note.key for document details:
|
|
82
|
+
* - key: "summary" for description (upserts on changes)
|
|
83
|
+
* - key: "comment-{commentId}" for individual comments (unique per comment)
|
|
84
|
+
* - key: "reply-{commentId}-{replyId}" for comment replies
|
|
85
|
+
* - Send NewActivityWithNotes for all documents (creates new or updates existing)
|
|
86
|
+
* - Set activity.unread = false for initial sync, omit for incremental updates
|
|
87
|
+
*
|
|
88
|
+
* @param options - Sync configuration options
|
|
89
|
+
* @param options.authToken - Authorization token for access
|
|
90
|
+
* @param options.folderId - ID of the folder to sync
|
|
91
|
+
* @param options.timeMin - Earliest date to sync documents from (inclusive)
|
|
92
|
+
* @param callback - Function receiving (activity, ...extraArgs) for each synced document
|
|
93
|
+
* @param extraArgs - Additional arguments to pass to the callback (type-checked, no functions allowed)
|
|
94
|
+
* @returns Promise that resolves when sync setup is complete
|
|
95
|
+
*/
|
|
96
|
+
startSync<TArgs extends Serializable[], TCallback extends (activity: NewActivityWithNotes, ...args: TArgs) => any>(options: {
|
|
97
|
+
authToken: string;
|
|
98
|
+
folderId: string;
|
|
99
|
+
} & DocumentSyncOptions, callback: TCallback, ...extraArgs: TArgs): Promise<void>;
|
|
100
|
+
/**
|
|
101
|
+
* Stops synchronizing documents from a specific folder.
|
|
102
|
+
*
|
|
103
|
+
* @param authToken - Authorization token for access
|
|
104
|
+
* @param folderId - ID of the folder to stop syncing
|
|
105
|
+
* @returns Promise that resolves when sync is stopped
|
|
106
|
+
*/
|
|
107
|
+
stopSync(authToken: string, folderId: string): Promise<void>;
|
|
108
|
+
/**
|
|
109
|
+
* Adds a comment to a document.
|
|
110
|
+
*
|
|
111
|
+
* Optional method for bidirectional sync. When implemented, allows Plot to
|
|
112
|
+
* sync notes added to activities back as comments on the external document.
|
|
113
|
+
*
|
|
114
|
+
* The tool should extract its own ID from meta (e.g., fileId).
|
|
115
|
+
*
|
|
116
|
+
* @param authToken - Authorization token for access
|
|
117
|
+
* @param meta - Activity metadata containing the tool's document identifier
|
|
118
|
+
* @param body - The comment text content
|
|
119
|
+
* @param noteId - Optional Plot note ID for deduplication
|
|
120
|
+
* @returns The external comment key (e.g. "comment-123") for dedup, or void
|
|
121
|
+
*/
|
|
122
|
+
addDocumentComment?(authToken: string, meta: ActivityMeta, body: string, noteId?: string): Promise<string | void>;
|
|
123
|
+
/**
|
|
124
|
+
* Adds a reply to an existing comment thread on a document.
|
|
125
|
+
*
|
|
126
|
+
* @param authToken - Authorization token for access
|
|
127
|
+
* @param meta - Activity metadata containing the tool's document identifier
|
|
128
|
+
* @param commentId - The external comment ID to reply to
|
|
129
|
+
* @param body - The reply text content
|
|
130
|
+
* @param noteId - Optional Plot note ID for deduplication
|
|
131
|
+
* @returns The external reply key (e.g. "reply-123-456") for dedup, or void
|
|
132
|
+
*/
|
|
133
|
+
addDocumentReply?(authToken: string, meta: ActivityMeta, commentId: string, body: string, noteId?: string): Promise<string | void>;
|
|
134
|
+
};
|
|
135
|
+
//# sourceMappingURL=documents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/common/documents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACb,MAAM,UAAU,CAAC;AAElB;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,2DAA2D;IAC3D,EAAE,EAAE,MAAM,CAAC;IACX,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,6EAA6E;IAC7E,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,uDAAuD;IACvD,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB;;;;;;OAMG;IACH,WAAW,CACT,KAAK,SAAS,YAAY,EAAE,EAC5B,SAAS,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI,EAAE,KAAK,KAAK,GAAG,EAE7D,QAAQ,EAAE,SAAS,EACnB,GAAG,SAAS,EAAE,KAAK,GAClB,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB;;;;;OAKG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAEzD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,SAAS,CACP,KAAK,SAAS,YAAY,EAAE,EAC5B,SAAS,SAAS,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,IAAI,EAAE,KAAK,KAAK,GAAG,EAEzE,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,mBAAmB,EACvB,QAAQ,EAAE,SAAS,EACnB,GAAG,SAAS,EAAE,KAAK,GAClB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7D;;;;;;;;;;;;;OAaG;IACH,kBAAkB,CAAC,CACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAE1B;;;;;;;;;OASG;IACH,gBAAgB,CAAC,CACf,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,YAAY,EAClB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/common/documents.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
window.hierarchyData = "
|
|
1
|
+
window.hierarchyData = "eJyNkj1vwyAQhv/LzRca/AlsUScvVaV2i6KK2qSxTEwFV2WI/N8r221FJ7wwwPO+zyHdHbxzFEAdpTgheHO2pqXejQHUHaSYz1FfDShoXp2zgDD0YweKZwLhy1tQ0FodggkP5JxlC8UudJ3R5QUUUOh2c2y3XiC0l9523oygjnzPsRAZljzDSpZYFyXWskSRVygzjjKXpwmB73k0y6ZRNkwyIRQii4tvfaCQqg5vtHBsxdOSkseSQ5MW6J4dmnRxJcuo+FFb+67bYcMH2l+U/YXStrqIbc1I5sPrdVuSwj6iWRzdoP33ySdDN+eHtHFcQfYTSHtEXkWeZ+soLfm0jtiMputlFq/wCzlv0v1hxtgCbzDkMt5lHbZsAs0YW+CUYZq+AQY2XOs="
|
|
@@ -1 +1 @@
|
|
|
1
|
-
window.navigationData = "eJytm99z2zYSx/8Vj/
|
|
1
|
+
window.navigationData = "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"
|