@plotday/twister 0.38.0 → 0.40.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} +24 -22
- package/dist/connector.d.ts.map +1 -0
- package/dist/{source.js → connector.js} +23 -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} +27 -27
- package/dist/docs/classes/index.Options.html +1 -1
- package/dist/docs/classes/tools_ai.AI.html +7 -3
- package/dist/docs/classes/tools_callbacks.Callbacks.html +1 -1
- package/dist/docs/classes/tools_integrations.Integrations.html +15 -15
- package/dist/docs/classes/tools_network.Network.html +1 -1
- package/dist/docs/classes/tools_plot.Plot.html +23 -21
- 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 +3 -3
- 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/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.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.Channel.html +5 -5
- package/dist/docs/types/tools_integrations.LinkTypeConfig.html +11 -8
- 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/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/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 +16 -11
- 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 +4 -0
- package/dist/tools/plot.d.ts.map +1 -1
- 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":"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"}
|
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":"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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
|
|
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
|
|
|
@@ -3,15 +3,15 @@ import type { ScheduleContactStatus } from "./schedule";
|
|
|
3
3
|
import { type AuthProvider, type AuthToken, type Authorization, type Channel, type LinkTypeConfig } from "./tools/integrations";
|
|
4
4
|
import { Twist } from "./twist";
|
|
5
5
|
/**
|
|
6
|
-
* Base class for
|
|
6
|
+
* Base class for connectors — twists that sync data from external services.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
8
|
+
* Connectors declare a single OAuth provider and scopes, and implement channel
|
|
9
9
|
* lifecycle methods for discovering and syncing external resources. They save
|
|
10
10
|
* data directly via `integrations.saveLink()` instead of using the Plot tool.
|
|
11
11
|
*
|
|
12
12
|
* @example
|
|
13
13
|
* ```typescript
|
|
14
|
-
* class
|
|
14
|
+
* class LinearConnector extends Connector<LinearConnector> {
|
|
15
15
|
* readonly provider = AuthProvider.Linear;
|
|
16
16
|
* readonly scopes = ["read", "write"];
|
|
17
17
|
* readonly linkTypes = [{
|
|
@@ -47,18 +47,18 @@ import { Twist } from "./twist";
|
|
|
47
47
|
* }
|
|
48
48
|
* ```
|
|
49
49
|
*/
|
|
50
|
-
export declare abstract class
|
|
50
|
+
export declare abstract class Connector<TSelf> extends Twist<TSelf> {
|
|
51
51
|
/**
|
|
52
|
-
* Static marker to identify
|
|
52
|
+
* Static marker to identify Connector subclasses without instanceof checks
|
|
53
53
|
* across worker boundaries.
|
|
54
54
|
*/
|
|
55
|
-
static readonly
|
|
56
|
-
/** The OAuth provider this
|
|
55
|
+
static readonly isConnector = true;
|
|
56
|
+
/** The OAuth provider this connector authenticates with. */
|
|
57
57
|
abstract readonly provider: AuthProvider;
|
|
58
|
-
/** OAuth scopes to request for this
|
|
58
|
+
/** OAuth scopes to request for this connector. */
|
|
59
59
|
abstract readonly scopes: string[];
|
|
60
60
|
/**
|
|
61
|
-
* Registry of link types this
|
|
61
|
+
* Registry of link types this connector creates (e.g., issue, event, message).
|
|
62
62
|
* Used for display in the UI (icons, labels, statuses).
|
|
63
63
|
*/
|
|
64
64
|
readonly linkTypes?: LinkTypeConfig[];
|
|
@@ -86,7 +86,7 @@ export declare abstract class Source<TSelf> extends Twist<TSelf> {
|
|
|
86
86
|
*/
|
|
87
87
|
abstract onChannelDisabled(channel: Channel): Promise<void>;
|
|
88
88
|
/**
|
|
89
|
-
* Called when a link created by this
|
|
89
|
+
* Called when a link created by this connector is updated by the user.
|
|
90
90
|
* Override to write back changes to the external service
|
|
91
91
|
* (e.g., changing issue status in Linear when marked done in Plot).
|
|
92
92
|
*
|
|
@@ -94,20 +94,20 @@ export declare abstract class Source<TSelf> extends Twist<TSelf> {
|
|
|
94
94
|
*/
|
|
95
95
|
onLinkUpdated(link: Link): Promise<void>;
|
|
96
96
|
/**
|
|
97
|
-
* 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.
|
|
98
98
|
* Override to write back comments to the external service
|
|
99
99
|
* (e.g., adding a comment to a Linear issue).
|
|
100
100
|
*
|
|
101
101
|
* @param note - The created note
|
|
102
|
-
* @param thread - The thread the note belongs to (includes thread.meta with
|
|
102
|
+
* @param thread - The thread the note belongs to (includes thread.meta with connector-specific data)
|
|
103
103
|
*/
|
|
104
104
|
onNoteCreated(note: Note, thread: Thread): Promise<void>;
|
|
105
105
|
/**
|
|
106
|
-
* 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.
|
|
107
107
|
* Override to write back read status to the external service
|
|
108
108
|
* (e.g., marking an email as read in Gmail).
|
|
109
109
|
*
|
|
110
|
-
* @param thread - The thread that was read/unread (includes thread.meta with
|
|
110
|
+
* @param thread - The thread that was read/unread (includes thread.meta with connector-specific data)
|
|
111
111
|
* @param actor - The user who performed the action
|
|
112
112
|
* @param unread - false when marked as read, true when marked as unread
|
|
113
113
|
*/
|
|
@@ -117,7 +117,7 @@ export declare abstract class Source<TSelf> extends Twist<TSelf> {
|
|
|
117
117
|
* Override to sync todo status to the external service
|
|
118
118
|
* (e.g., starring an email in Gmail when marked as todo).
|
|
119
119
|
*
|
|
120
|
-
* @param thread - The thread (includes thread.meta with
|
|
120
|
+
* @param thread - The thread (includes thread.meta with connector-specific data)
|
|
121
121
|
* @param actor - The user who changed the todo status
|
|
122
122
|
* @param todo - true when marked as todo, false when done or removed
|
|
123
123
|
* @param options - Additional context
|
|
@@ -127,10 +127,10 @@ export declare abstract class Source<TSelf> extends Twist<TSelf> {
|
|
|
127
127
|
date?: Date;
|
|
128
128
|
}): Promise<void>;
|
|
129
129
|
/**
|
|
130
|
-
* Called when a schedule contact's RSVP status changes on a thread owned by this
|
|
130
|
+
* Called when a schedule contact's RSVP status changes on a thread owned by this connector.
|
|
131
131
|
* Override to sync RSVP changes back to the external calendar.
|
|
132
132
|
*
|
|
133
|
-
* @param thread - The thread (includes thread.meta with
|
|
133
|
+
* @param thread - The thread (includes thread.meta with connector-specific data)
|
|
134
134
|
* @param scheduleId - The schedule ID
|
|
135
135
|
* @param contactId - The contact whose status changed
|
|
136
136
|
* @param status - The new RSVP status ('attend', 'skip', or null)
|
|
@@ -138,21 +138,23 @@ export declare abstract class Source<TSelf> extends Twist<TSelf> {
|
|
|
138
138
|
*/
|
|
139
139
|
onScheduleContactUpdated(thread: Thread, scheduleId: string, contactId: ActorId, status: ScheduleContactStatus | null, actor: Actor): Promise<void>;
|
|
140
140
|
/**
|
|
141
|
-
* Called when the
|
|
141
|
+
* Called when the connector is activated after OAuth is complete.
|
|
142
142
|
*
|
|
143
|
-
* Unlike Twist.activate() which receives a priority,
|
|
144
|
-
* receives the authorization and actor since
|
|
143
|
+
* Unlike Twist.activate() which receives a priority, Connector.activate()
|
|
144
|
+
* receives the authorization and actor since connectors are not installed
|
|
145
145
|
* in priorities.
|
|
146
146
|
*
|
|
147
147
|
* Default implementation does nothing. Override for custom setup.
|
|
148
148
|
*
|
|
149
149
|
* @param context - The activation context
|
|
150
150
|
* @param context.auth - The completed OAuth authorization
|
|
151
|
-
* @param context.actor - The actor who activated the
|
|
151
|
+
* @param context.actor - The actor who activated the connector
|
|
152
152
|
*/
|
|
153
153
|
activate(context: {
|
|
154
154
|
auth: Authorization;
|
|
155
155
|
actor: Actor;
|
|
156
156
|
}): Promise<void>;
|
|
157
157
|
}
|
|
158
|
-
|
|
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,23 +69,23 @@ 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 thread - The thread the note belongs to (includes thread.meta with
|
|
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
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 (includes thread.meta with
|
|
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
91
|
*/
|
|
@@ -98,7 +98,7 @@ export class Source extends Twist {
|
|
|
98
98
|
* Override to sync todo status to the external service
|
|
99
99
|
* (e.g., starring an email in Gmail when marked as todo).
|
|
100
100
|
*
|
|
101
|
-
* @param thread - The thread (includes thread.meta with
|
|
101
|
+
* @param thread - The thread (includes thread.meta with connector-specific data)
|
|
102
102
|
* @param actor - The user who changed the todo status
|
|
103
103
|
* @param todo - true when marked as todo, false when done or removed
|
|
104
104
|
* @param options - Additional context
|
|
@@ -109,10 +109,10 @@ export class Source extends Twist {
|
|
|
109
109
|
return Promise.resolve();
|
|
110
110
|
}
|
|
111
111
|
/**
|
|
112
|
-
* Called when a schedule contact's RSVP status changes on a thread owned by this
|
|
112
|
+
* Called when a schedule contact's RSVP status changes on a thread owned by this connector.
|
|
113
113
|
* Override to sync RSVP changes back to the external calendar.
|
|
114
114
|
*
|
|
115
|
-
* @param thread - The thread (includes thread.meta with
|
|
115
|
+
* @param thread - The thread (includes thread.meta with connector-specific data)
|
|
116
116
|
* @param scheduleId - The schedule ID
|
|
117
117
|
* @param contactId - The contact whose status changed
|
|
118
118
|
* @param status - The new RSVP status ('attend', 'skip', or null)
|
|
@@ -124,21 +124,23 @@ export class Source extends Twist {
|
|
|
124
124
|
}
|
|
125
125
|
// ---- Activation ----
|
|
126
126
|
/**
|
|
127
|
-
* Called when the
|
|
127
|
+
* Called when the connector is activated after OAuth is complete.
|
|
128
128
|
*
|
|
129
|
-
* Unlike Twist.activate() which receives a priority,
|
|
130
|
-
* 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
|
|
131
131
|
* in priorities.
|
|
132
132
|
*
|
|
133
133
|
* Default implementation does nothing. Override for custom setup.
|
|
134
134
|
*
|
|
135
135
|
* @param context - The activation context
|
|
136
136
|
* @param context.auth - The completed OAuth authorization
|
|
137
|
-
* @param context.actor - The actor who activated the
|
|
137
|
+
* @param context.actor - The actor who activated the connector
|
|
138
138
|
*/
|
|
139
|
-
// @ts-ignore -
|
|
139
|
+
// @ts-ignore - Connector.activate() intentionally has a different signature than Twist.activate()
|
|
140
140
|
activate(context) {
|
|
141
141
|
return Promise.resolve();
|
|
142
142
|
}
|
|
143
143
|
}
|
|
144
|
-
|
|
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 = "eJyVk7FOwzAQht/l5quJnaROslVMWQCJbqhCITU0qmtXtlGRqrw7clIqw1CbJYPz3X2Xy+8zGK2dheaFshLrDYIR71L0btDKQnOG2j9UdxDQwPo0WAcI+0FtoaGsQvg0EhroZWetsHfOA2TCyM4dJOD8ChpwdrvwdYv5AKHfDXJrhPJqmuWbEYGyMrC1a63lTZvWkkzUv2SswqLiWFKOPKuR8wqrssSaMaQZXSLNco60YMt5pCpcQMpECQONCEXF/27Wxlrb12nBdt6wjUtKGkpWbVzQDWTVxhvzLMzFfSflW9fvEz6g/0HJtSjBxsOf0ConPkw3JzQqHAKahKVxbVWGcXwQ7qTNPm5UM0guBXFPzVjgeZL69h2bJEepHfFovL0PddD/2Wkj4gLrMTLBKYr8V5o7m5IF5zEywQkKmuVh5LRSonfa3NIMaiu+yBVNkBQsXNXjMRqyWXEBY4Jx/AYIwcKt"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
window.navigationData = "
|
|
1
|
+
window.navigationData = "eJytnFtz2zYThv+KR71NP+fU1M2dqziNOrbjsZS2M52MBqZgC59JQCVAy2kn/70DggeAwGJXqcd3xotnl0uciF37z39mhj+a2dvZL43YcD17Niu2otzUXM7e/jk2cmOEvDtaGlYbvpk9m+2Y2c7ezjaqaCoujT7uJOtO8r+tqcrZs9m9kJvZ25NXJydvnp98fTYQ56rmR3MlC74zOsWzgnUvwGg/N6I03wt5tFKqTOJ6xbpVUHgb+8BzJSUvjKpBqJWtRxn63OeLo2t+y2suC5587vPFehBgtOtGGlHxozP5IGolLSHF7GRrT5Ymf/bYF2rTlOCIEHLDH0dblRMft78O2S/TgHnJtAbxQ0BHE4Xr0JkYBKGxFy/98HzcGaGkhhhdc0zww7D6suNHp6VgsLNLXvLCvOO3oyHzZTeYGZoncXn+048vfnjpm+KPMKVrxBiXTXXDa5AyNGOcn5UqOZMgaGzHSC7KIGhopnH0stjyiuVYnQTjXXOtyge+iQaJT5yIMKa1bCcCMBC6ViplrqRhhVkaZhrAv6T0QP61whz2hAeySVx0TPM9CRvrDiCjSOqTfyyKpp4s76mHH3UHeInBk9LDPf+02zBD9t+pUSu8FqwUf7MbcLh5Coz2qRGbNMW2pHv7y/olq7jesQJc1EMD4f4Wm3idhrxvZNGvLulzleR1EOnbvodvqpeFNt+8/vq5/fHXtO7gAG5Vqqn9sRPv29/pXtI92YufXr96bp/P7p32WMF3NS+YPQb6exe7y1JN2x4gvd6/Lj9e/sbKJu/Z/7WSD50KIp02ZntVqwex4XUWxhqz3Y1CkGfPGAtwJDiU1bSjBaKstrzic1WqvE/GyopOBrGuaqFqYb5kSbtRBHEu+Z6EknxPoPWo6cqR8a3ppZnYCyXtAQwLv1DSOBnEmivppoaQd6TxUXgdaONEKEnwMztKas42F9wwZJRYWeVkIIvdaWxC6vzoQBGS7xGKe6K5qiokNu6Zil6Y5xFIKON3YbaXynAkSK12L8xWdtpcvA4A29CR2VeiuO/nlx3HIr/U7kRx38+xopejftPcReP6XpQGmVmOdNsL8zzCeuJ46GpiX0r+IVW+P9/jCL7HKMpEpyvAF8r6iGworFNkngmHSL7HOC2EslCrGlmnL/k+OuOnfSoGWWbNN1wa1K/C6RDPzoW8z2JKJ8g8GYqQfE+jkFcZi6OsMfZarL3OwiavUuXNoINoC4vLcoRxipw/qCO5EbnID0WR7RvdCSQRalDBpDnbsRtRCiOQd8VEEUoh5oXa8PKq9k/6MLWy4l0ghn1tyYiTVaeBKdf8r4br/PRloh5UOZLeKamRRUXUowxmLb9ow6sLrjW7w4C61VaDFqZ+0rymMRvNawrxVGuhDZOGhmW9nMK2c4qGtZOLQqTRaJGkxBCjED5vmUh/4E7uYa9YnR/CVrtzIojzjhnW7UFZ1IYZVgw6cE2t2B1H3RJWhfj1XpQ46FaUGOeaM62k/aDCYHWvRIkbVhi+OYTselAt2DkwZ2WJv1+lyoKVJYF3zXVTEkaMUmXdSgnMs0deNHZ7oWxFlsz7DpRdCd1dGbY/O8aSY+u8xWiePaWxsrxhRf5gVIwijJMPVeGpQNKWSYnshMWgyZ0X7dGT8MVmD2n29Il+rS2k4Xc1w0eECIXgW6yLrXjg1lXChxtzaust+vVm7+FULf5m+LXIRJkjrtQ9x2mmU0Gk3/nNVql7ykFl76T4aeWSm72qsdN9r8l/854WBdeUiwnWC7FbOQKxvzFAmd3nGQHZfaGhRPshs2i3vw9MbkpkFNovGdGqt4M6NwcJA5s0oq2XS27ngFvvUSd1K657cc5HMtd6SuSSmVTe2en1/MP63dn700/nq/X54mKxInDXG37LmtKsS1EJAv/i9A86u2KPOLeVUrZRB8X3z6tS5SO6cwLQI6NqJAfTKeDbXY3sc6ZTgIS90IZwXDZWh56YzxWywancrtb6csXrSmiNn3WseBeIs1wCDWXgiOwarCqheZvewpbgVvnQKyHi2aOpWWHa65prbpo6vyVyJ29vbepeDrHbOqmFnNRRJagWZ4Q0nRA+sdzyGqcJKyOxKBO5peHzuD3BbjmST7BOOVHICTOvu+SaYH9LqoYiVBlFmUiX9G5NdG1Y0jzO93mMvpFQjZDleO1Uf9LlBoFXtBqDaRYuDJFQEi3BSqTgPMjYjIKC5JmPYHdogU6UfAvDS0GkM2/RozgBDZbB0ACJS+uINGgoMSJQYxk6KDPZNn9gRjKyx3lHabGcnmqjQDoBDZaZf74AfUAFQGwDITpwf9dGsZ95lLGZsIyodGxP45LT5KPAhL6RAAGK3XoMscYtmQXzSF47hgrzVx7DNhAeCOzftRER6IwPRHgt2JlsKj5eliT350QBD5dNNcySvjm0dhLtTeFr8BBjM4zIF7F4sJQw69k0exs65lqngIMKz5L1YcPxCCkPS9fijb2bJlt9lakuGxn/vbhsZGVry8Jzo0nFxbDpZpIOKmXg+nz3Vi19NbVwMvUreUNsf0vyLF/dP7l/7qvyW3rbFtoIi/ozfdNdDxunuTz48PjZNHgcSH3c5psTNL1m4gkC6me7/Yi0+NNFPib26q2+zZTCJnK6Yujj2+lkkwf64Q2S1YVgTpejxZm6FKtX5UiJ7FoKNchyrDi/lkL1qhwJyIOlcIE0z8zm2NLsRJfse0lm2ZLvxlNixFSeDWKOWowKZ9og9rRHbOHAPyBKFJy4A403HYh/gQJVnEQ8X4ZB4ZKTCXYqxL0F6jIidwMdjk0WZkRQT4Uj4cqMiDuV4vBkaUbE9VQ4EscdEE0sjiTM9Lo5fsmtAAMlyyomLE9DCz4SdRokSIcnOUsO+HPg90hUrNUd7byXa9vxM54+LuC8ucMNgic4qCSS9OF5ZTQ2T5v9hr/PjCsM/HcTW4TeUBw7kc3HO76veYqzc9JkGMTA5AK0/y2hnJZG+JEMzHZKypVCqkoC5IYd0HkJFziAFqI+qJF0rQNswNdT4JOyhyy41T7NGpP82vUXmsg4dNeQmjsSqphw7K75CWZMVJoRTpbe0GXK4DdMEai6xH9rvc1QS1930tkmxybnnPJRC5PcYcjcBXhk5xuClSn98OM13N8GWsrakpv1w9UlbZrDBSBJV30pxVMieirF0ETs4cjsJ4vHzH64HHwNm6qP8pckL2nhZPC1J1QcFeFCYfZ6NlUZFfECXe5W9TdWC/vH0OBf82ZLch763sE7SXQJXXgVvGqwKCdHH+QRObWY6XQ5jMO2jU+wnE1qbsL1zBlZxqbciha7bNL1N47WNj6By5Min9BlZ2QVmwJdBophOlzb+hROT8xMvHZmVglrB99KJiuYoisb32Ly8/Lw25qg2Mlf9Dpb5wo9lsIVTwneVEw6JqTLltpfP9VbTrzkFr+KjcSDsjGi1Mdbprexl23b2raRXMX+ycJfjSjuPwSWxv+y4NkadKHVN9Mbfed6+6Ig39tGkvP4MI+KlLwx7lvrhf95fAMFa25k+hYDITbkc0VrMTpWY/x04VpM9nUYM1W8FhNHFYkHnJsiIvHCN5mwipGeDCMm0qUxbxDh5zr8n5Ik/zMMNKO+06E8Tr59/vr5X1RGrcs="
|