@plotday/twister 0.37.0 → 0.39.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/README.md +22 -16
- package/bin/commands/create.js +4 -4
- package/bin/commands/create.js.map +1 -1
- package/bin/index.js +1 -1
- package/bin/index.js.map +1 -1
- package/bin/templates/AGENTS.template.md +32 -0
- package/bin/templates/README.template.md +2 -2
- package/bin/utils/bundle.js +1 -1
- package/bin/utils/bundle.js.map +1 -1
- package/cli/templates/AGENTS.template.md +32 -0
- package/cli/templates/README.template.md +2 -2
- package/dist/{source.d.ts → connector.d.ts} +50 -23
- package/dist/connector.d.ts.map +1 -0
- package/dist/{source.js → connector.js} +51 -21
- package/dist/connector.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/{index.Source.html → index.Connector.html} +40 -24
- package/dist/docs/classes/index.Options.html +1 -1
- package/dist/docs/classes/tools_ai.AI.html +8 -4
- package/dist/docs/classes/tools_callbacks.Callbacks.html +1 -1
- package/dist/docs/classes/tools_integrations.Integrations.html +18 -11
- package/dist/docs/classes/tools_network.Network.html +1 -1
- package/dist/docs/classes/tools_plot.Plot.html +31 -22
- 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 +4 -4
- package/dist/docs/classes/twist.Twist.html +1 -1
- package/dist/docs/documents/Building_Connectors.html +137 -0
- package/dist/docs/documents/Built-in_Tools.html +3 -3
- package/dist/docs/documents/Core_Concepts.html +5 -5
- package/dist/docs/documents/Getting_Started.html +1 -1
- package/dist/docs/enums/plot.ActionType.html +3 -1
- package/dist/docs/enums/plot.ActorType.html +4 -4
- package/dist/docs/enums/plot.ConferencingProvider.html +6 -6
- package/dist/docs/enums/tools_ai.AIModel.html +2 -2
- package/dist/docs/enums/tools_integrations.AuthProvider.html +11 -11
- package/dist/docs/hierarchy.html +1 -1
- package/dist/docs/index.html +3 -3
- package/dist/docs/interfaces/tools_ai.AIRequest.html +11 -11
- package/dist/docs/interfaces/tools_ai.AIResponse.html +9 -9
- package/dist/docs/interfaces/tools_ai.FilePart.html +5 -5
- package/dist/docs/interfaces/tools_ai.ImagePart.html +4 -4
- package/dist/docs/interfaces/tools_ai.ReasoningPart.html +4 -4
- package/dist/docs/interfaces/tools_ai.RedactedReasoningPart.html +3 -3
- package/dist/docs/interfaces/tools_ai.TextPart.html +3 -3
- package/dist/docs/interfaces/tools_ai.ToolCallPart.html +5 -5
- package/dist/docs/interfaces/tools_ai.ToolExecutionOptions.html +4 -4
- package/dist/docs/interfaces/tools_ai.ToolResultPart.html +5 -5
- package/dist/docs/media/AGENTS.md +82 -65
- package/dist/docs/media/MULTI_USER_AUTH.md +1 -1
- package/dist/docs/media/SYNC_STRATEGIES.md +9 -9
- package/dist/docs/modules/index.html +1 -1
- package/dist/docs/modules/tools_ai.html +1 -1
- package/dist/docs/modules/tools_plot.html +1 -1
- package/dist/docs/modules.html +1 -1
- package/dist/docs/types/plot.Action.html +4 -2
- package/dist/docs/types/plot.Actor.html +5 -5
- package/dist/docs/types/plot.ContentType.html +1 -1
- package/dist/docs/types/plot.Link.html +15 -15
- package/dist/docs/types/plot.NewActor.html +1 -1
- package/dist/docs/types/plot.NewContact.html +5 -5
- package/dist/docs/types/plot.NewLink.html +1 -1
- package/dist/docs/types/plot.NewLinkWithNotes.html +1 -1
- package/dist/docs/types/plot.NewNote.html +1 -1
- package/dist/docs/types/plot.NewTags.html +1 -1
- package/dist/docs/types/plot.NewThread.html +1 -1
- package/dist/docs/types/plot.NewThreadWithNotes.html +1 -1
- package/dist/docs/types/plot.Note.html +1 -1
- package/dist/docs/types/plot.NoteUpdate.html +1 -1
- package/dist/docs/types/plot.PickPriorityConfig.html +2 -2
- package/dist/docs/types/plot.Tags.html +1 -1
- package/dist/docs/types/plot.Thread.html +1 -1
- package/dist/docs/types/plot.ThreadCommon.html +7 -7
- package/dist/docs/types/plot.ThreadFilter.html +2 -2
- package/dist/docs/types/plot.ThreadMeta.html +1 -1
- package/dist/docs/types/plot.ThreadUpdate.html +1 -1
- package/dist/docs/types/plot.ThreadWithNotes.html +1 -1
- package/dist/docs/types/tools_ai.AIAssistantMessage.html +2 -2
- package/dist/docs/types/tools_ai.AICapabilities.html +6 -0
- package/dist/docs/types/tools_ai.AIMessage.html +1 -1
- package/dist/docs/types/tools_ai.AIOptions.html +4 -0
- package/dist/docs/types/tools_ai.AISource.html +1 -1
- package/dist/docs/types/tools_ai.AISystemMessage.html +2 -2
- package/dist/docs/types/tools_ai.AITool.html +1 -1
- package/dist/docs/types/tools_ai.AIToolMessage.html +2 -2
- package/dist/docs/types/tools_ai.AIToolSet.html +1 -1
- package/dist/docs/types/tools_ai.AIUsage.html +5 -5
- package/dist/docs/types/tools_ai.AIUserMessage.html +2 -2
- package/dist/docs/types/tools_ai.DataContent.html +1 -1
- package/dist/docs/types/tools_ai.ModelPreferences.html +4 -4
- package/dist/docs/types/tools_integrations.ArchiveLinkFilter.html +5 -5
- package/dist/docs/types/tools_integrations.AuthToken.html +4 -4
- package/dist/docs/types/tools_integrations.Authorization.html +4 -4
- package/dist/docs/types/tools_integrations.LinkTypeConfig.html +1 -1
- package/dist/docs/types/tools_plot.LinkSearchResult.html +1 -0
- package/dist/docs/types/tools_plot.NoteSearchResult.html +1 -0
- package/dist/docs/types/tools_plot.SearchOptions.html +7 -0
- package/dist/docs/types/tools_plot.SearchResult.html +1 -0
- package/dist/docs/variables/tools_plot.SEARCH_DEFAULT_LIMIT.html +2 -0
- package/dist/docs/variables/tools_plot.SEARCH_MAX_LIMIT.html +2 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/llm-docs/connector.d.ts +9 -0
- package/dist/llm-docs/connector.d.ts.map +1 -0
- package/dist/llm-docs/connector.js +8 -0
- package/dist/llm-docs/connector.js.map +1 -0
- package/dist/llm-docs/index.js +2 -2
- 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/llm-docs/tools/ai.d.ts +1 -1
- package/dist/llm-docs/tools/ai.d.ts.map +1 -1
- package/dist/llm-docs/tools/ai.js +1 -1
- package/dist/llm-docs/tools/ai.js.map +1 -1
- package/dist/llm-docs/tools/integrations.d.ts +1 -1
- package/dist/llm-docs/tools/integrations.d.ts.map +1 -1
- package/dist/llm-docs/tools/integrations.js +1 -1
- package/dist/llm-docs/tools/integrations.js.map +1 -1
- package/dist/llm-docs/tools/plot.d.ts +1 -1
- package/dist/llm-docs/tools/plot.d.ts.map +1 -1
- package/dist/llm-docs/tools/plot.js +1 -1
- package/dist/llm-docs/tools/plot.js.map +1 -1
- package/dist/llm-docs/twist-guide-template.d.ts +1 -1
- package/dist/llm-docs/twist-guide-template.d.ts.map +1 -1
- package/dist/llm-docs/twist-guide-template.js +1 -1
- package/dist/llm-docs/twist-guide-template.js.map +1 -1
- package/dist/plot.d.ts +10 -1
- package/dist/plot.d.ts.map +1 -1
- package/dist/plot.js +2 -0
- package/dist/plot.js.map +1 -1
- package/dist/tools/ai.d.ts +18 -0
- package/dist/tools/ai.d.ts.map +1 -1
- package/dist/tools/ai.js.map +1 -1
- package/dist/tools/integrations.d.ts +22 -10
- package/dist/tools/integrations.d.ts.map +1 -1
- package/dist/tools/integrations.js +3 -3
- package/dist/tools/integrations.js.map +1 -1
- package/dist/tools/plot.d.ts +53 -0
- package/dist/tools/plot.d.ts.map +1 -1
- package/dist/tools/plot.js +4 -0
- package/dist/tools/plot.js.map +1 -1
- package/dist/twist-guide.d.ts +1 -1
- package/dist/twist-guide.d.ts.map +1 -1
- package/package.json +38 -38
- package/tsconfig.base.json +1 -1
- package/dist/docs/documents/Building_Sources.html +0 -137
- package/dist/llm-docs/source.d.ts +0 -9
- package/dist/llm-docs/source.d.ts.map +0 -1
- package/dist/llm-docs/source.js +0 -8
- package/dist/llm-docs/source.js.map +0 -1
- package/dist/source.d.ts.map +0 -1
- package/dist/source.js.map +0 -1
package/README.md
CHANGED
|
@@ -122,14 +122,14 @@ Twist tools provide capabilities to twists. They are usually unopinionated and d
|
|
|
122
122
|
- **Plot** - Manage activities and priorities
|
|
123
123
|
- **Store** - Persistent key-value storage
|
|
124
124
|
- **AI** - Language models with structured output
|
|
125
|
-
- **Integrations** - OAuth authentication
|
|
125
|
+
- **Integrations** - OAuth authentication and channel lifecycle
|
|
126
126
|
- **Network** - HTTP access and webhooks
|
|
127
127
|
- **Tasks** - Background task execution
|
|
128
128
|
- **Callbacks** - Persistent function references
|
|
129
129
|
|
|
130
130
|
[View all tools →](https://twist.plot.day/documents/Built-in_Tools.html)
|
|
131
131
|
|
|
132
|
-
External service integrations (Google Calendar, Slack, Linear, etc.) are built as **
|
|
132
|
+
External service integrations (Google Calendar, Slack, Linear, etc.) are built as **Connectors** — see [Building Connectors](https://twist.plot.day/documents/Building_Connectors.html).
|
|
133
133
|
|
|
134
134
|
### Activities and Notes
|
|
135
135
|
|
|
@@ -208,7 +208,7 @@ plot priority create # Create new priority
|
|
|
208
208
|
- [Core Concepts](https://twist.plot.day/documents/Core_Concepts.html) - Twists, tools, and architecture
|
|
209
209
|
- [Sync Strategies](https://twist.plot.day/documents/Sync_Strategies.html) - Data synchronization patterns (upserts, deduplication, ID management)
|
|
210
210
|
- [Built-in Tools](https://twist.plot.day/documents/Built-in_Tools.html) - Plot, Store, AI, and more
|
|
211
|
-
- [Building
|
|
211
|
+
- [Building Connectors](https://twist.plot.day/documents/Building_Connectors.html) - Build external service integrations
|
|
212
212
|
- [Runtime Environment](https://twist.plot.day/documents/Runtime_Environment.html) - Execution constraints and optimization
|
|
213
213
|
- [Advanced Topics](https://twist.plot.day/documents/Advanced.html) - Complex patterns and techniques
|
|
214
214
|
|
|
@@ -243,27 +243,33 @@ export default class WelcomeTwist extends Twist<WelcomeTwist> {
|
|
|
243
243
|
}
|
|
244
244
|
```
|
|
245
245
|
|
|
246
|
-
### GitHub
|
|
246
|
+
### GitHub Connector
|
|
247
247
|
|
|
248
248
|
```typescript
|
|
249
|
-
|
|
250
|
-
|
|
249
|
+
import { Connector, type ConnectorBuilder, type Channel } from "@plotday/twister";
|
|
250
|
+
import { Integrations } from "@plotday/twister/tools/integrations";
|
|
251
|
+
|
|
252
|
+
export default class GitHubConnector extends Connector<GitHubConnector> {
|
|
253
|
+
build(build: ConnectorBuilder) {
|
|
251
254
|
return {
|
|
252
|
-
|
|
253
|
-
network: build(Network, {
|
|
254
|
-
urls: ["https://api.github.com/*"],
|
|
255
|
-
}),
|
|
255
|
+
integrations: build(Integrations),
|
|
256
256
|
};
|
|
257
257
|
}
|
|
258
258
|
|
|
259
|
-
async
|
|
260
|
-
//
|
|
261
|
-
|
|
262
|
-
|
|
259
|
+
async getChannels(): Promise<Channel[]> {
|
|
260
|
+
// Return repositories the user can sync
|
|
261
|
+
return repos.map((repo) => ({
|
|
262
|
+
id: repo.id,
|
|
263
|
+
name: repo.full_name,
|
|
264
|
+
}));
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
async onChannelEnabled(channel: Channel) {
|
|
268
|
+
// Start syncing issues from this repository
|
|
263
269
|
}
|
|
264
270
|
|
|
265
|
-
async
|
|
266
|
-
//
|
|
271
|
+
async onChannelDisabled(channel: Channel) {
|
|
272
|
+
// Stop syncing and clean up
|
|
267
273
|
}
|
|
268
274
|
}
|
|
269
275
|
```
|
package/bin/commands/create.js
CHANGED
|
@@ -45,7 +45,7 @@ const out = __importStar(require("../utils/output"));
|
|
|
45
45
|
const packageManager_1 = require("../utils/packageManager");
|
|
46
46
|
async function createCommand(options) {
|
|
47
47
|
const isSource = !!options.source;
|
|
48
|
-
out.header(isSource ? "Create a new Plot
|
|
48
|
+
out.header(isSource ? "Create a new Plot connector" : "Create a new Plot twist");
|
|
49
49
|
let response;
|
|
50
50
|
// If both name and displayName are provided via CLI, use them directly
|
|
51
51
|
if (options.name && options.displayName) {
|
|
@@ -112,7 +112,7 @@ async function createCommand(options) {
|
|
|
112
112
|
// Generate a unique twist ID
|
|
113
113
|
const plotTwistId = crypto.randomUUID();
|
|
114
114
|
// Create package.json
|
|
115
|
-
const packageName = isSource ? `@plotday/
|
|
115
|
+
const packageName = isSource ? `@plotday/connector-${response.name}` : response.name;
|
|
116
116
|
const packageJson = {
|
|
117
117
|
name: packageName,
|
|
118
118
|
displayName: response.displayName || response.name,
|
|
@@ -137,7 +137,7 @@ async function createCommand(options) {
|
|
|
137
137
|
include: ["src/*.ts"],
|
|
138
138
|
};
|
|
139
139
|
fs.writeFileSync(path.join(twistPath, "tsconfig.json"), JSON.stringify(tsconfigJson, null, 2) + "\n");
|
|
140
|
-
const sourceTemplate = `import {
|
|
140
|
+
const sourceTemplate = `import { Connector, type ToolBuilder } from "@plotday/twister";
|
|
141
141
|
import {
|
|
142
142
|
AuthProvider,
|
|
143
143
|
type AuthToken,
|
|
@@ -146,7 +146,7 @@ import {
|
|
|
146
146
|
type Channel,
|
|
147
147
|
} from "@plotday/twister/tools/integrations";
|
|
148
148
|
|
|
149
|
-
export default class
|
|
149
|
+
export default class MyConnector extends Connector<MyConnector> {
|
|
150
150
|
readonly provider = AuthProvider.Google; // Change to your provider
|
|
151
151
|
readonly scopes = ["https://example.com/scope"];
|
|
152
152
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../cli/commands/create.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,sCAoRC;AAnSD,iDAAyC;AACzC,uCAAyB;AACzB,2CAA6B;AAC7B,sDAA8B;AAE9B,qDAAuC;AACvC,4DAA+D;AASxD,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAClC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../cli/commands/create.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,sCAoRC;AAnSD,iDAAyC;AACzC,uCAAyB;AACzB,2CAA6B;AAC7B,sDAA8B;AAE9B,qDAAuC;AACvC,4DAA+D;AASxD,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAClC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC;IAEjF,IAAI,QAA+C,CAAC;IAEpD,uEAAuE;IACvE,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxC,gBAAgB;QAChB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,uBAAuB;QACvB,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,QAAQ,GAAG;YACT,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,0BAA0B;QAC1B,MAAM,cAAc,GAAG,MAAM,IAAA,iBAAO,EAAC;YACnC;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,eAAe;gBACxB,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,IAAI,SAAS;gBACjD,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAC1B,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;oBAC1B,8CAA8C;aACjD;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,eAAe;gBACxB,OAAO,EAAE,OAAO,CAAC,WAAW,IAAI,SAAS;gBACzC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,kBAAkB;aACpE;SACF,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7C,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,QAAQ,GAAG,cAAuD,CAAC;IACrE,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IAExD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,KAAK,CAAC,cAAc,QAAQ,kBAAkB,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,GAAG,CAAC,QAAQ,CAAC,YAAY,QAAQ,CAAC,WAAW,KAAK,CAAC,CAAC;IAEpD,6BAA6B;IAC7B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/D,qCAAqC;IACrC,IAAI,UAAU,GAAG,QAAQ,CAAC,CAAC,mBAAmB;IAC9C,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACxE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;QACxE,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CACV,+DAA+D,CAChE,CAAC;IACJ,CAAC;IAED,6BAA6B;IAC7B,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAExC,sBAAsB;IACtB,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,sBAAsB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IACrF,MAAM,WAAW,GAAQ;QACvB,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,IAAI;QAClD,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,WAAW;QACxB,OAAO,EAAE;YACP,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,aAAa;SACtB;QACD,YAAY,EAAE;YACZ,kBAAkB,EAAE,UAAU;SAC/B;QACD,eAAe,EAAE;YACf,UAAU,EAAE,QAAQ;SACrB;KACF,CAAC;IAEF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EACpC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAC5C,CAAC;IAEF,uBAAuB;IACvB,MAAM,YAAY,GAAG;QACnB,OAAO,EAAE,qCAAqC;QAC9C,OAAO,EAAE,CAAC,UAAU,CAAC;KACtB,CAAC;IACF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,EACrC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAC7C,CAAC;IAEF,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BxB,CAAC;IAEA,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuBvB,CAAC;IAEA,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,EACvC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAC1C,CAAC;IAEF,6CAA6C;IAC7C,MAAM,cAAc,GAAG,IAAA,qCAAoB,GAAE,CAAC;IAC9C,MAAM,qBAAqB,GACzB,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC;IAExD,+BAA+B;IAC/B,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAClC,SAAS,EACT,IAAI,EACJ,WAAW,EACX,oBAAoB,CACrB,CAAC;IACF,IAAI,CAAC;QACH,IAAI,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QACjE,6BAA6B;QAC7B,aAAa,GAAG,aAAa,CAAC,OAAO,CACnC,sBAAsB,EACtB,QAAQ,CAAC,WAAW,CACrB,CAAC;QACF,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtE,aAAa,GAAG,aAAa,CAAC,OAAO,CACnC,yBAAyB,EACzB,qBAAqB,CACtB,CAAC;QACF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,aAAa,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAC1D,CAAC;IAED,+BAA+B;IAC/B,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAClC,SAAS,EACT,IAAI,EACJ,WAAW,EACX,oBAAoB,CACrB,CAAC;IACF,IAAI,CAAC;QACH,IAAI,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QACjE,6BAA6B;QAC7B,aAAa,GAAG,aAAa,CAAC,OAAO,CACnC,yBAAyB,EACzB,qBAAqB,CACtB,CAAC;QACF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,aAAa,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAC1D,CAAC;IAED,+BAA+B;IAC/B,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAClC,SAAS,EACT,IAAI,EACJ,WAAW,EACX,oBAAoB,CACrB,CAAC;IACF,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QACnE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,aAAa,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAC1D,CAAC;IAED,oBAAoB;IACpB,MAAM,SAAS,GAAG;;;CAGnB,CAAC;IACA,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC;IAEhE,iBAAiB;IACjB,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,UAAU,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,+BAA+B;IACjC,CAAC;IAED,MAAM,cAAc,GAClB,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,cAAc,UAAU,CAAC;IAEnE,uBAAuB;IACvB,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,cAAc,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,OAAO,CAAC,+BAA+B,EAAE;YAC3C,QAAQ,cAAc,QAAQ,QAAQ,EAAE;SACzC,CAAC,CAAC;IACL,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,WAAW,UAAU,CAAC,CAAC;IAE/C,GAAG,CAAC,SAAS,CAAC;QACZ,MAAM,QAAQ,EAAE;QAChB,GAAG,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,OAAO;QAC/D,GAAG,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,SAAS;KAClE,CAAC,CAAC;IACH,GAAG,CAAC,KAAK,EAAE,CAAC;AACd,CAAC"}
|
package/bin/index.js
CHANGED
|
@@ -46,7 +46,7 @@ program
|
|
|
46
46
|
.option("-d, --dir <directory>", "Directory to create the twist in")
|
|
47
47
|
.option("-n, --name <name>", "Package name (kebab-case)")
|
|
48
48
|
.option("--display-name <displayName>", "Display name for the twist")
|
|
49
|
-
.option("--source", "Create a
|
|
49
|
+
.option("--source", "Create a connector instead of a twist")
|
|
50
50
|
.action(create_1.createCommand);
|
|
51
51
|
// Top-level lint command
|
|
52
52
|
program
|
package/bin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../cli/index.ts"],"names":[],"mappings":";;;AACA,yCAA4C;AAC5C,2BAAkC;AAClC,+BAA4B;AAE5B,sDAAyD;AACzD,4CAAgD;AAChD,8CAAkD;AAClD,8CAAkD;AAClD,kDAAsD;AACtD,0CAA8C;AAC9C,4CAAgD;AAChD,gEAAmE;AACnE,4DAA+D;AAC/D,2CAA2C;AAE3C,oCAAoC;AACpC,MAAM,eAAe,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;AACvE,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;AAEpC,qBAAqB;AACrB,IAAA,kBAAS,EAAC,OAAO,CAAC,CAAC;AAEnB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,iDAAiD,CAAC;KAC9D,OAAO,CAAC,OAAO,CAAC;KAChB,SAAS,CACR,IAAI,kBAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;KAC9C,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,sBAAsB,CAAC;KAC3D,QAAQ,EAAE,CACd;KACA,SAAS,CACR,IAAI,kBAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;KAChD,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,kBAAkB,CAAC;KACxD,QAAQ,EAAE,CACd,CAAC;AAEJ,0BAA0B;AAC1B,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CAAC;IACN,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAyC,CAAC;IAC3E,OAAO,IAAA,oBAAY,EAAC,IAAI,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEL,2BAA2B;AAC3B,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,uBAAuB,EAAE,kCAAkC,CAAC;KACnE,MAAM,CAAC,mBAAmB,EAAE,2BAA2B,CAAC;KACxD,MAAM,CAAC,8BAA8B,EAAE,4BAA4B,CAAC;KACpE,MAAM,CAAC,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../cli/index.ts"],"names":[],"mappings":";;;AACA,yCAA4C;AAC5C,2BAAkC;AAClC,+BAA4B;AAE5B,sDAAyD;AACzD,4CAAgD;AAChD,8CAAkD;AAClD,8CAAkD;AAClD,kDAAsD;AACtD,0CAA8C;AAC9C,4CAAgD;AAChD,gEAAmE;AACnE,4DAA+D;AAC/D,2CAA2C;AAE3C,oCAAoC;AACpC,MAAM,eAAe,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;AACvE,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;AAEpC,qBAAqB;AACrB,IAAA,kBAAS,EAAC,OAAO,CAAC,CAAC;AAEnB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,iDAAiD,CAAC;KAC9D,OAAO,CAAC,OAAO,CAAC;KAChB,SAAS,CACR,IAAI,kBAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;KAC9C,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,sBAAsB,CAAC;KAC3D,QAAQ,EAAE,CACd;KACA,SAAS,CACR,IAAI,kBAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;KAChD,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,kBAAkB,CAAC;KACxD,QAAQ,EAAE,CACd,CAAC;AAEJ,0BAA0B;AAC1B,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CAAC;IACN,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAyC,CAAC;IAC3E,OAAO,IAAA,oBAAY,EAAC,IAAI,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEL,2BAA2B;AAC3B,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,uBAAuB,EAAE,kCAAkC,CAAC;KACnE,MAAM,CAAC,mBAAmB,EAAE,2BAA2B,CAAC;KACxD,MAAM,CAAC,8BAA8B,EAAE,4BAA4B,CAAC;KACpE,MAAM,CAAC,UAAU,EAAE,uCAAuC,CAAC;KAC3D,MAAM,CAAC,sBAAa,CAAC,CAAC;AAEzB,yBAAyB;AACzB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,uBAAuB,EAAE,yBAAyB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KACzE,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,0BAA0B;AAC1B,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,uBAAuB,EAAE,0BAA0B,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KAC1E,MAAM,CAAC,oBAAY,CAAC,CAAC;AAExB,6BAA6B;AAC7B,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,sCAAsC,CAAC;KACnD,MAAM,CAAC,uBAAuB,EAAE,gCAAgC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KAChF,MAAM,CAAC,eAAe,EAAE,wDAAwD,CAAC;KACjF,MAAM,CAAC,gBAAgB,EAAE,UAAU,CAAC;KACpC,MAAM,CAAC,wBAAwB,EAAE,sBAAsB,CAAC;KACxD,MAAM,CAAC;IACN,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAMhC,CAAC;IACF,OAAO,IAAA,0BAAe,EAAC,IAAI,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEL,2BAA2B;AAC3B,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,uBAAuB,EAAE,2BAA2B,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KAC3E,MAAM,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;KACnD,MAAM,CAAC,wBAAwB,EAAE,qCAAqC,CAAC;KACvE,MAAM,CAAC,eAAe,EAAE,YAAY,CAAC;KACrC,MAAM,CAAC,6BAA6B,EAAE,mBAAmB,CAAC;KAC1D,MAAM,CAAC,WAAW,EAAE,4BAA4B,CAAC;KACjD,MAAM,CACL,yBAAyB,EACzB,oDAAoD,EACpD,UAAU,CACX;KACA,MAAM,CAAC;IACN,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAShC,CAAC;IACF,OAAO,IAAA,sBAAa,EAAC,IAAI,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEL,yBAAyB;AACzB,OAAO;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,uBAAuB,EAAE,iBAAiB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KACjE,MAAM,CAAC,gBAAgB,EAAE,UAAU,CAAC;KACpC,MAAM,CACL,yBAAyB,EACzB,+CAA+C,EAC/C,UAAU,CACX;KACA,MAAM,CAAC,wBAAwB,EAAE,sBAAsB,CAAC;KACxD,MAAM,CAAC,UAAyB,OAAgB;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAMhC,CAAC;IACF,OAAO,IAAA,6BAAgB,EAAC;QACtB,OAAO;QACP,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,4BAA4B;AAC5B,MAAM,QAAQ,GAAG,OAAO;KACrB,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,wBAAwB,CAAC,CAAC;AAEzC,QAAQ;KACL,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,uBAAuB,CAAC;KACpC,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC;KACxC,MAAM,CAAC,wBAAwB,EAAE,oBAAoB,CAAC;KACtD,MAAM,CAAC;IACN,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAIhC,CAAC;IACF,OAAO,IAAA,uCAAqB,EAAC,IAAI,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEL,QAAQ;KACL,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC;IACN,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAEhC,CAAC;IACF,OAAO,IAAA,mCAAmB,EAAC,IAAI,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -204,6 +204,38 @@ plot: build(Plot, {
|
|
|
204
204
|
}),
|
|
205
205
|
```
|
|
206
206
|
|
|
207
|
+
**Default mention on replies:**
|
|
208
|
+
|
|
209
|
+
When your twist processes replies (two-way comment sync or conversational AI), set `defaultMention: true` so the user doesn't have to manually re-mention your twist on every note:
|
|
210
|
+
|
|
211
|
+
- `thread.defaultMention` — Auto-mention on replies to threads your twist created (e.g., synced issues, emails)
|
|
212
|
+
- `note.defaultMention` — Auto-mention on follow-up notes in threads where your twist was @-mentioned (e.g., conversational agents)
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
// Connector with two-way comment sync
|
|
216
|
+
plot: build(Plot, {
|
|
217
|
+
thread: {
|
|
218
|
+
access: ThreadAccess.Create,
|
|
219
|
+
defaultMention: true, // Users replying to synced threads will mention this twist by default
|
|
220
|
+
updated: this.onThreadUpdated,
|
|
221
|
+
},
|
|
222
|
+
note: {
|
|
223
|
+
created: this.onNoteCreated,
|
|
224
|
+
},
|
|
225
|
+
}),
|
|
226
|
+
|
|
227
|
+
// Conversational AI twist
|
|
228
|
+
plot: build(Plot, {
|
|
229
|
+
thread: { access: ThreadAccess.Respond },
|
|
230
|
+
note: {
|
|
231
|
+
defaultMention: true, // Follow-up notes auto-mention this twist
|
|
232
|
+
intents: [{ description: "...", examples: [...], handler: this.respond }],
|
|
233
|
+
},
|
|
234
|
+
}),
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
Without `defaultMention`, the twist chip appears toggled OFF by default — the user can still enable it manually per-note.
|
|
238
|
+
|
|
207
239
|
## Actions
|
|
208
240
|
|
|
209
241
|
Actions enable user interaction:
|
|
@@ -68,9 +68,9 @@ build(build: ToolBuilder) {
|
|
|
68
68
|
- **Callbacks**: Create persistent function references for webhooks
|
|
69
69
|
- **Network**: HTTP access permissions and webhook management
|
|
70
70
|
|
|
71
|
-
####
|
|
71
|
+
#### Connectors
|
|
72
72
|
|
|
73
|
-
External service integrations (Google Calendar, Slack, Linear, etc.) are built as
|
|
73
|
+
External service integrations (Google Calendar, Slack, Linear, etc.) are built as Connectors. See the [Building Connectors](https://twist.plot.day/documents/Building_Connectors.html) guide.
|
|
74
74
|
|
|
75
75
|
### Activity Types
|
|
76
76
|
|
package/bin/utils/bundle.js
CHANGED
|
@@ -76,7 +76,7 @@ async function bundleTwist(twistPath, options = {}) {
|
|
|
76
76
|
sourcemap,
|
|
77
77
|
minify,
|
|
78
78
|
logLevel: "silent",
|
|
79
|
-
conditions: ["@plotday/
|
|
79
|
+
conditions: ["@plotday/connector"],
|
|
80
80
|
// Mark Node.js built-ins as external - they'll be provided by Cloudflare Workers' nodejs_compat
|
|
81
81
|
external: [
|
|
82
82
|
"node:*",
|
package/bin/utils/bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../cli/utils/bundle.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,kCA+GC;AAzID,iDAAmC;AACnC,uCAAyB;AACzB,2CAA6B;AAa7B;;;;;;;;;;GAUG;AACI,KAAK,UAAU,WAAW,CAC/B,SAAiB,EACjB,UAAyB,EAAE;IAE3B,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAErD,6BAA6B;IAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,8BAA8B,SAAS,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,wBAAwB;IACxB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAC3D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,yEAAyE,CAC1E,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,sBAAsB;IACtB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC;QACjC,WAAW,EAAE,CAAC,UAAU,CAAC;QACzB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC;QACxC,SAAS;QACT,MAAM;QACN,QAAQ,EAAE,QAAQ;QAClB,UAAU,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../cli/utils/bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -204,6 +204,38 @@ plot: build(Plot, {
|
|
|
204
204
|
}),
|
|
205
205
|
```
|
|
206
206
|
|
|
207
|
+
**Default mention on replies:**
|
|
208
|
+
|
|
209
|
+
When your twist processes replies (two-way comment sync or conversational AI), set `defaultMention: true` so the user doesn't have to manually re-mention your twist on every note:
|
|
210
|
+
|
|
211
|
+
- `thread.defaultMention` — Auto-mention on replies to threads your twist created (e.g., synced issues, emails)
|
|
212
|
+
- `note.defaultMention` — Auto-mention on follow-up notes in threads where your twist was @-mentioned (e.g., conversational agents)
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
// Connector with two-way comment sync
|
|
216
|
+
plot: build(Plot, {
|
|
217
|
+
thread: {
|
|
218
|
+
access: ThreadAccess.Create,
|
|
219
|
+
defaultMention: true, // Users replying to synced threads will mention this twist by default
|
|
220
|
+
updated: this.onThreadUpdated,
|
|
221
|
+
},
|
|
222
|
+
note: {
|
|
223
|
+
created: this.onNoteCreated,
|
|
224
|
+
},
|
|
225
|
+
}),
|
|
226
|
+
|
|
227
|
+
// Conversational AI twist
|
|
228
|
+
plot: build(Plot, {
|
|
229
|
+
thread: { access: ThreadAccess.Respond },
|
|
230
|
+
note: {
|
|
231
|
+
defaultMention: true, // Follow-up notes auto-mention this twist
|
|
232
|
+
intents: [{ description: "...", examples: [...], handler: this.respond }],
|
|
233
|
+
},
|
|
234
|
+
}),
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
Without `defaultMention`, the twist chip appears toggled OFF by default — the user can still enable it manually per-note.
|
|
238
|
+
|
|
207
239
|
## Actions
|
|
208
240
|
|
|
209
241
|
Actions enable user interaction:
|
|
@@ -68,9 +68,9 @@ build(build: ToolBuilder) {
|
|
|
68
68
|
- **Callbacks**: Create persistent function references for webhooks
|
|
69
69
|
- **Network**: HTTP access permissions and webhook management
|
|
70
70
|
|
|
71
|
-
####
|
|
71
|
+
#### Connectors
|
|
72
72
|
|
|
73
|
-
External service integrations (Google Calendar, Slack, Linear, etc.) are built as
|
|
73
|
+
External service integrations (Google Calendar, Slack, Linear, etc.) are built as Connectors. See the [Building Connectors](https://twist.plot.day/documents/Building_Connectors.html) guide.
|
|
74
74
|
|
|
75
75
|
### Activity Types
|
|
76
76
|
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import { type Actor, type
|
|
1
|
+
import { type Actor, type ActorId, type Link, type Note, type Thread } from "./plot";
|
|
2
|
+
import type { ScheduleContactStatus } from "./schedule";
|
|
2
3
|
import { type AuthProvider, type AuthToken, type Authorization, type Channel, type LinkTypeConfig } from "./tools/integrations";
|
|
3
4
|
import { Twist } from "./twist";
|
|
4
5
|
/**
|
|
5
|
-
* Base class for
|
|
6
|
+
* Base class for connectors — twists that sync data from external services.
|
|
6
7
|
*
|
|
7
|
-
*
|
|
8
|
+
* Connectors declare a single OAuth provider and scopes, and implement channel
|
|
8
9
|
* lifecycle methods for discovering and syncing external resources. They save
|
|
9
10
|
* data directly via `integrations.saveLink()` instead of using the Plot tool.
|
|
10
11
|
*
|
|
11
12
|
* @example
|
|
12
13
|
* ```typescript
|
|
13
|
-
* class
|
|
14
|
+
* class LinearConnector extends Connector<LinearConnector> {
|
|
14
15
|
* readonly provider = AuthProvider.Linear;
|
|
15
16
|
* readonly scopes = ["read", "write"];
|
|
16
17
|
* readonly linkTypes = [{
|
|
@@ -46,18 +47,18 @@ import { Twist } from "./twist";
|
|
|
46
47
|
* }
|
|
47
48
|
* ```
|
|
48
49
|
*/
|
|
49
|
-
export declare abstract class
|
|
50
|
+
export declare abstract class Connector<TSelf> extends Twist<TSelf> {
|
|
50
51
|
/**
|
|
51
|
-
* Static marker to identify
|
|
52
|
+
* Static marker to identify Connector subclasses without instanceof checks
|
|
52
53
|
* across worker boundaries.
|
|
53
54
|
*/
|
|
54
|
-
static readonly
|
|
55
|
-
/** The OAuth provider this
|
|
55
|
+
static readonly isConnector = true;
|
|
56
|
+
/** The OAuth provider this connector authenticates with. */
|
|
56
57
|
abstract readonly provider: AuthProvider;
|
|
57
|
-
/** OAuth scopes to request for this
|
|
58
|
+
/** OAuth scopes to request for this connector. */
|
|
58
59
|
abstract readonly scopes: string[];
|
|
59
60
|
/**
|
|
60
|
-
* Registry of link types this
|
|
61
|
+
* Registry of link types this connector creates (e.g., issue, event, message).
|
|
61
62
|
* Used for display in the UI (icons, labels, statuses).
|
|
62
63
|
*/
|
|
63
64
|
readonly linkTypes?: LinkTypeConfig[];
|
|
@@ -85,7 +86,7 @@ export declare abstract class Source<TSelf> extends Twist<TSelf> {
|
|
|
85
86
|
*/
|
|
86
87
|
abstract onChannelDisabled(channel: Channel): Promise<void>;
|
|
87
88
|
/**
|
|
88
|
-
* Called when a link created by this
|
|
89
|
+
* Called when a link created by this connector is updated by the user.
|
|
89
90
|
* Override to write back changes to the external service
|
|
90
91
|
* (e.g., changing issue status in Linear when marked done in Plot).
|
|
91
92
|
*
|
|
@@ -93,41 +94,67 @@ export declare abstract class Source<TSelf> extends Twist<TSelf> {
|
|
|
93
94
|
*/
|
|
94
95
|
onLinkUpdated(link: Link): Promise<void>;
|
|
95
96
|
/**
|
|
96
|
-
* Called when a note is created on a thread owned by this
|
|
97
|
+
* Called when a note is created on a thread owned by this connector.
|
|
97
98
|
* Override to write back comments to the external service
|
|
98
99
|
* (e.g., adding a comment to a Linear issue).
|
|
99
100
|
*
|
|
100
101
|
* @param note - The created note
|
|
101
|
-
* @param
|
|
102
|
+
* @param thread - The thread the note belongs to (includes thread.meta with connector-specific data)
|
|
102
103
|
*/
|
|
103
|
-
onNoteCreated(note: Note,
|
|
104
|
+
onNoteCreated(note: Note, thread: Thread): Promise<void>;
|
|
104
105
|
/**
|
|
105
|
-
* Called when a user reads or unreads a thread owned by this
|
|
106
|
+
* Called when a user reads or unreads a thread owned by this connector.
|
|
106
107
|
* Override to write back read status to the external service
|
|
107
108
|
* (e.g., marking an email as read in Gmail).
|
|
108
109
|
*
|
|
109
|
-
* @param thread - The thread that was read/unread
|
|
110
|
+
* @param thread - The thread that was read/unread (includes thread.meta with connector-specific data)
|
|
110
111
|
* @param actor - The user who performed the action
|
|
111
112
|
* @param unread - false when marked as read, true when marked as unread
|
|
112
|
-
* @param meta - Metadata from the thread's link (contains channelId, threadId, etc.)
|
|
113
113
|
*/
|
|
114
|
-
onThreadRead(thread: Thread, actor: Actor, unread: boolean
|
|
114
|
+
onThreadRead(thread: Thread, actor: Actor, unread: boolean): Promise<void>;
|
|
115
115
|
/**
|
|
116
|
-
* Called when
|
|
116
|
+
* Called when a user marks or unmarks a thread as todo.
|
|
117
|
+
* Override to sync todo status to the external service
|
|
118
|
+
* (e.g., starring an email in Gmail when marked as todo).
|
|
117
119
|
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
+
* @param thread - The thread (includes thread.meta with connector-specific data)
|
|
121
|
+
* @param actor - The user who changed the todo status
|
|
122
|
+
* @param todo - true when marked as todo, false when done or removed
|
|
123
|
+
* @param options - Additional context
|
|
124
|
+
* @param options.date - The todo date (when todo=true)
|
|
125
|
+
*/
|
|
126
|
+
onThreadToDo(thread: Thread, actor: Actor, todo: boolean, options: {
|
|
127
|
+
date?: Date;
|
|
128
|
+
}): Promise<void>;
|
|
129
|
+
/**
|
|
130
|
+
* Called when a schedule contact's RSVP status changes on a thread owned by this connector.
|
|
131
|
+
* Override to sync RSVP changes back to the external calendar.
|
|
132
|
+
*
|
|
133
|
+
* @param thread - The thread (includes thread.meta with connector-specific data)
|
|
134
|
+
* @param scheduleId - The schedule ID
|
|
135
|
+
* @param contactId - The contact whose status changed
|
|
136
|
+
* @param status - The new RSVP status ('attend', 'skip', or null)
|
|
137
|
+
* @param actor - The user who changed the status
|
|
138
|
+
*/
|
|
139
|
+
onScheduleContactUpdated(thread: Thread, scheduleId: string, contactId: ActorId, status: ScheduleContactStatus | null, actor: Actor): Promise<void>;
|
|
140
|
+
/**
|
|
141
|
+
* Called when the connector is activated after OAuth is complete.
|
|
142
|
+
*
|
|
143
|
+
* Unlike Twist.activate() which receives a priority, Connector.activate()
|
|
144
|
+
* receives the authorization and actor since connectors are not installed
|
|
120
145
|
* in priorities.
|
|
121
146
|
*
|
|
122
147
|
* Default implementation does nothing. Override for custom setup.
|
|
123
148
|
*
|
|
124
149
|
* @param context - The activation context
|
|
125
150
|
* @param context.auth - The completed OAuth authorization
|
|
126
|
-
* @param context.actor - The actor who activated the
|
|
151
|
+
* @param context.actor - The actor who activated the connector
|
|
127
152
|
*/
|
|
128
153
|
activate(context: {
|
|
129
154
|
auth: Authorization;
|
|
130
155
|
actor: Actor;
|
|
131
156
|
}): Promise<void>;
|
|
132
157
|
}
|
|
133
|
-
|
|
158
|
+
/** @deprecated Use `Connector` instead. */
|
|
159
|
+
export { Connector as Source };
|
|
160
|
+
//# sourceMappingURL=connector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,8BAAsB,SAAS,CAAC,KAAK,CAAE,SAAQ,KAAK,CAAC,KAAK,CAAC;IACzD;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,WAAW,QAAQ;IAInC,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAEzC,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAInC;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAItC;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,CAClB,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,OAAO,EAAE,CAAC;IAErB;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1D;;;;;OAKG;IACH,QAAQ,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D;;;;;;OAMG;IAEH,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC;;;;;;;OAOG;IAEH,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD;;;;;;;;OAQG;IAEH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1E;;;;;;;;;;OAUG;IAEH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlG;;;;;;;;;OASG;IAEH,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,qBAAqB,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnJ;;;;;;;;;;;;OAYG;IAEH,QAAQ,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,aAAa,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAGxE;AAED,2CAA2C;AAC3C,OAAO,EAAE,SAAS,IAAI,MAAM,EAAE,CAAC"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { Twist } from "./twist";
|
|
2
2
|
/**
|
|
3
|
-
* Base class for
|
|
3
|
+
* Base class for connectors — twists that sync data from external services.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* Connectors declare a single OAuth provider and scopes, and implement channel
|
|
6
6
|
* lifecycle methods for discovering and syncing external resources. They save
|
|
7
7
|
* data directly via `integrations.saveLink()` instead of using the Plot tool.
|
|
8
8
|
*
|
|
9
9
|
* @example
|
|
10
10
|
* ```typescript
|
|
11
|
-
* class
|
|
11
|
+
* class LinearConnector extends Connector<LinearConnector> {
|
|
12
12
|
* readonly provider = AuthProvider.Linear;
|
|
13
13
|
* readonly scopes = ["read", "write"];
|
|
14
14
|
* readonly linkTypes = [{
|
|
@@ -44,21 +44,21 @@ import { Twist } from "./twist";
|
|
|
44
44
|
* }
|
|
45
45
|
* ```
|
|
46
46
|
*/
|
|
47
|
-
export class
|
|
47
|
+
export class Connector extends Twist {
|
|
48
48
|
/**
|
|
49
|
-
* Static marker to identify
|
|
49
|
+
* Static marker to identify Connector subclasses without instanceof checks
|
|
50
50
|
* across worker boundaries.
|
|
51
51
|
*/
|
|
52
|
-
static
|
|
52
|
+
static isConnector = true;
|
|
53
53
|
// ---- Optional metadata ----
|
|
54
54
|
/**
|
|
55
|
-
* Registry of link types this
|
|
55
|
+
* Registry of link types this connector creates (e.g., issue, event, message).
|
|
56
56
|
* Used for display in the UI (icons, labels, statuses).
|
|
57
57
|
*/
|
|
58
58
|
linkTypes;
|
|
59
59
|
// ---- Write-back hooks (optional, default no-ops) ----
|
|
60
60
|
/**
|
|
61
|
-
* Called when a link created by this
|
|
61
|
+
* Called when a link created by this connector is updated by the user.
|
|
62
62
|
* Override to write back changes to the external service
|
|
63
63
|
* (e.g., changing issue status in Linear when marked done in Plot).
|
|
64
64
|
*
|
|
@@ -69,48 +69,78 @@ export class Source extends Twist {
|
|
|
69
69
|
return Promise.resolve();
|
|
70
70
|
}
|
|
71
71
|
/**
|
|
72
|
-
* Called when a note is created on a thread owned by this
|
|
72
|
+
* Called when a note is created on a thread owned by this connector.
|
|
73
73
|
* Override to write back comments to the external service
|
|
74
74
|
* (e.g., adding a comment to a Linear issue).
|
|
75
75
|
*
|
|
76
76
|
* @param note - The created note
|
|
77
|
-
* @param
|
|
77
|
+
* @param thread - The thread the note belongs to (includes thread.meta with connector-specific data)
|
|
78
78
|
*/
|
|
79
79
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
80
|
-
onNoteCreated(note,
|
|
80
|
+
onNoteCreated(note, thread) {
|
|
81
81
|
return Promise.resolve();
|
|
82
82
|
}
|
|
83
83
|
/**
|
|
84
|
-
* Called when a user reads or unreads a thread owned by this
|
|
84
|
+
* Called when a user reads or unreads a thread owned by this connector.
|
|
85
85
|
* Override to write back read status to the external service
|
|
86
86
|
* (e.g., marking an email as read in Gmail).
|
|
87
87
|
*
|
|
88
|
-
* @param thread - The thread that was read/unread
|
|
88
|
+
* @param thread - The thread that was read/unread (includes thread.meta with connector-specific data)
|
|
89
89
|
* @param actor - The user who performed the action
|
|
90
90
|
* @param unread - false when marked as read, true when marked as unread
|
|
91
|
-
* @param meta - Metadata from the thread's link (contains channelId, threadId, etc.)
|
|
92
91
|
*/
|
|
93
92
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
94
|
-
onThreadRead(thread, actor, unread
|
|
93
|
+
onThreadRead(thread, actor, unread) {
|
|
94
|
+
return Promise.resolve();
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Called when a user marks or unmarks a thread as todo.
|
|
98
|
+
* Override to sync todo status to the external service
|
|
99
|
+
* (e.g., starring an email in Gmail when marked as todo).
|
|
100
|
+
*
|
|
101
|
+
* @param thread - The thread (includes thread.meta with connector-specific data)
|
|
102
|
+
* @param actor - The user who changed the todo status
|
|
103
|
+
* @param todo - true when marked as todo, false when done or removed
|
|
104
|
+
* @param options - Additional context
|
|
105
|
+
* @param options.date - The todo date (when todo=true)
|
|
106
|
+
*/
|
|
107
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
108
|
+
onThreadToDo(thread, actor, todo, options) {
|
|
109
|
+
return Promise.resolve();
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Called when a schedule contact's RSVP status changes on a thread owned by this connector.
|
|
113
|
+
* Override to sync RSVP changes back to the external calendar.
|
|
114
|
+
*
|
|
115
|
+
* @param thread - The thread (includes thread.meta with connector-specific data)
|
|
116
|
+
* @param scheduleId - The schedule ID
|
|
117
|
+
* @param contactId - The contact whose status changed
|
|
118
|
+
* @param status - The new RSVP status ('attend', 'skip', or null)
|
|
119
|
+
* @param actor - The user who changed the status
|
|
120
|
+
*/
|
|
121
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
122
|
+
onScheduleContactUpdated(thread, scheduleId, contactId, status, actor) {
|
|
95
123
|
return Promise.resolve();
|
|
96
124
|
}
|
|
97
125
|
// ---- Activation ----
|
|
98
126
|
/**
|
|
99
|
-
* Called when the
|
|
127
|
+
* Called when the connector is activated after OAuth is complete.
|
|
100
128
|
*
|
|
101
|
-
* Unlike Twist.activate() which receives a priority,
|
|
102
|
-
* receives the authorization and actor since
|
|
129
|
+
* Unlike Twist.activate() which receives a priority, Connector.activate()
|
|
130
|
+
* receives the authorization and actor since connectors are not installed
|
|
103
131
|
* in priorities.
|
|
104
132
|
*
|
|
105
133
|
* Default implementation does nothing. Override for custom setup.
|
|
106
134
|
*
|
|
107
135
|
* @param context - The activation context
|
|
108
136
|
* @param context.auth - The completed OAuth authorization
|
|
109
|
-
* @param context.actor - The actor who activated the
|
|
137
|
+
* @param context.actor - The actor who activated the connector
|
|
110
138
|
*/
|
|
111
|
-
// @ts-ignore -
|
|
139
|
+
// @ts-ignore - Connector.activate() intentionally has a different signature than Twist.activate()
|
|
112
140
|
activate(context) {
|
|
113
141
|
return Promise.resolve();
|
|
114
142
|
}
|
|
115
143
|
}
|
|
116
|
-
|
|
144
|
+
/** @deprecated Use `Connector` instead. */
|
|
145
|
+
export { Connector as Source };
|
|
146
|
+
//# sourceMappingURL=connector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector.js","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,MAAM,OAAgB,SAAiB,SAAQ,KAAY;IACzD;;;OAGG;IACH,MAAM,CAAU,WAAW,GAAG,IAAI,CAAC;IAUnC,8BAA8B;IAE9B;;;OAGG;IACM,SAAS,CAAoB;IAiCtC,wDAAwD;IAExD;;;;;;OAMG;IACH,6DAA6D;IAC7D,aAAa,CAAC,IAAU;QACtB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;;;OAOG;IACH,6DAA6D;IAC7D,aAAa,CAAC,IAAU,EAAE,MAAc;QACtC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;;;;OAQG;IACH,6DAA6D;IAC7D,YAAY,CAAC,MAAc,EAAE,KAAY,EAAE,MAAe;QACxD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;;;;;;OAUG;IACH,6DAA6D;IAC7D,YAAY,CAAC,MAAc,EAAE,KAAY,EAAE,IAAa,EAAE,OAAwB;QAChF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;;;;;OASG;IACH,6DAA6D;IAC7D,wBAAwB,CAAC,MAAc,EAAE,UAAkB,EAAE,SAAkB,EAAE,MAAoC,EAAE,KAAY;QACjI,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,uBAAuB;IAEvB;;;;;;;;;;;;OAYG;IACH,kGAAkG;IAClG,QAAQ,CAAC,OAA8C;QACrD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;;AAGH,2CAA2C;AAC3C,OAAO,EAAE,SAAS,IAAI,MAAM,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
window.hierarchyData = "
|
|
1
|
+
window.hierarchyData = "eJyVk7FuwyAQht/l5isFbAfbW9QpS1up2aqoch3aWCEQAVUqRX73CjuNUIdAFwbz3X3n088ZrDHeQfvKeIXNBsHKDyV7PxjtoD1DEw7dHSS0sD4NzgPCftBbaBmvEb6sghZ61Tkn3b0PAJkwsvMHBThfQQvebe9C3d38AaHfDWprpQ5qRtlmRGC8imyrtTHqps0YRSbqXzJeY1kLrJhAQRsUYoF1VWDDKTLKSmS0qJCVvJxHquMF5EyUMdCIUNbi72ZdqrV7mxbs5g27tKRisWS5Sgu6gSxX6caCxrl46JR67/p9xg/0vyi5FmXYxCLOhfby03ZzQpPCIaJJXJrW1lURaR+lPxm7Txv1DJJLQdrTcBp5npW5/cYmyVEZTwKabh9CHfV/8cbKtMAFjExwjqKIX+66czlZ8AEjE5yhYJTFkTNay94be0sz6K38Jlc0Q1LyeFVPx2TIZsUFTAnG8Qe0wMKR"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
window.navigationData = "
|
|
1
|
+
window.navigationData = "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"
|