terse-cli 0.1.42 → 0.1.44

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.
Files changed (74) hide show
  1. package/dist/commands/deployTheme.d.ts +28 -0
  2. package/dist/commands/deployTheme.d.ts.map +1 -0
  3. package/dist/commands/deployTheme.js +68 -0
  4. package/dist/commands/deployTheme.js.map +1 -0
  5. package/dist/commands/dev.d.ts +3 -0
  6. package/dist/commands/dev.d.ts.map +1 -0
  7. package/dist/commands/dev.js +47 -0
  8. package/dist/commands/dev.js.map +1 -0
  9. package/dist/commands/serve.d.ts +1 -0
  10. package/dist/commands/serve.d.ts.map +1 -0
  11. package/dist/commands/serve.js +2 -0
  12. package/dist/commands/serve.js.map +1 -0
  13. package/dist/commands/terseCliTheme.d.ts +28 -0
  14. package/dist/commands/terseCliTheme.d.ts.map +1 -0
  15. package/dist/commands/terseCliTheme.js +68 -0
  16. package/dist/commands/terseCliTheme.js.map +1 -0
  17. package/dist/nonInteractive.d.ts +4 -2
  18. package/dist/nonInteractive.d.ts.map +1 -1
  19. package/dist/nonInteractive.js +5 -2
  20. package/dist/nonInteractive.js.map +1 -1
  21. package/dist/perf.d.ts +9 -0
  22. package/dist/perf.d.ts.map +1 -0
  23. package/dist/perf.js +59 -0
  24. package/dist/perf.js.map +1 -0
  25. package/dist/providers/codegen.test.d.ts +2 -0
  26. package/dist/providers/codegen.test.d.ts.map +1 -0
  27. package/dist/providers/codegen.test.js +45 -0
  28. package/dist/providers/codegen.test.js.map +1 -0
  29. package/dist/providers/python/PythonProvider.test.d.ts +2 -0
  30. package/dist/providers/python/PythonProvider.test.d.ts.map +1 -0
  31. package/dist/providers/python/PythonProvider.test.js +169 -0
  32. package/dist/providers/python/PythonProvider.test.js.map +1 -0
  33. package/dist/providers/typescript/prepareCodegenData.test.d.ts +2 -0
  34. package/dist/providers/typescript/prepareCodegenData.test.d.ts.map +1 -0
  35. package/dist/providers/typescript/prepareCodegenData.test.js +54 -0
  36. package/dist/providers/typescript/prepareCodegenData.test.js.map +1 -0
  37. package/dist/run.d.ts.map +1 -1
  38. package/dist/run.js +36 -12
  39. package/dist/run.js.map +1 -1
  40. package/dist/sampleEventId.d.ts +0 -4
  41. package/dist/sampleEventId.d.ts.map +1 -1
  42. package/dist/sampleEventId.js +0 -4
  43. package/dist/sampleEventId.js.map +1 -1
  44. package/dist/shared/ToolDisplayUtils.js +1 -1
  45. package/dist/shared/ToolDisplayUtils.js.map +1 -1
  46. package/package.json +3 -3
  47. package/templates/typescript/codegen/generated.hbs +2 -4
  48. package/templates/typescript/codegen/partials/attio-section.hbs +0 -7
  49. package/templates/typescript/codegen/partials/datadog-section.hbs +0 -8
  50. package/templates/typescript/codegen/partials/github-section.hbs +0 -36
  51. package/templates/typescript/codegen/partials/launchdarkly-section.hbs +0 -8
  52. package/templates/typescript/codegen/partials/linear-section.hbs +0 -28
  53. package/templates/typescript/codegen/partials/notion-section.hbs +0 -10
  54. package/templates/typescript/codegen/partials/posthog-section.hbs +0 -8
  55. package/templates/typescript/codegen/partials/skills-section.hbs +95 -0
  56. package/templates/typescript/codegen/partials/slack-section.hbs +0 -27
  57. package/templates/typescript/codegen/partials/triggers-section.hbs +180 -0
  58. package/templates/typescript/init/src/terse.jobs.ts.hbs +3 -3
  59. package/dist/jsonOutput.d.ts +0 -19
  60. package/dist/jsonOutput.d.ts.map +0 -1
  61. package/dist/jsonOutput.js +0 -25
  62. package/dist/jsonOutput.js.map +0 -1
  63. package/dist/replay.d.ts +0 -3
  64. package/dist/replay.d.ts.map +0 -1
  65. package/dist/replay.js +0 -20
  66. package/dist/replay.js.map +0 -1
  67. package/dist/urls.d.ts +0 -3
  68. package/dist/urls.d.ts.map +0 -1
  69. package/dist/urls.js +0 -27
  70. package/dist/urls.js.map +0 -1
  71. package/templates/typescript/codegen/partials/gmail-section.hbs +0 -21
  72. package/templates/typescript/codegen/partials/snowflake-section.hbs +0 -9
  73. package/templates/typescript/codegen/partials/system-section.hbs +0 -45
  74. package/templates/typescript/codegen/partials/workos-section.hbs +0 -65
@@ -29,10 +29,3 @@ export class AttioObject<
29
29
  {{/if}}
30
30
  }
31
31
 
32
- export const Attio = {
33
- /** Use in `skills[]` */
34
- skill(opts: { object: AttioObject<any> }): TypedSkill<{{{skillToolType}}}> {
35
- return new AttioOutputConfig("{{escape id}}", opts.object.apiSlug) as TypedSkill<{{{skillToolType}}}>
36
- },
37
- }
38
-
@@ -1,11 +1,3 @@
1
1
  {{sectionHeader "Datadog"}}
2
2
 
3
3
  {{> resource-class indexClass}}
4
-
5
- export const Datadog = {
6
- /** Use in `skills[]` */
7
- skill(opts?: { indexes?: DatadogIndex[] }): TypedSkill<{{{skillToolType}}}> {
8
- return new DatadogConfig("{{escape id}}", opts?.indexes?.map(i => i.name)) as TypedSkill<{{{skillToolType}}}>
9
- },
10
- }
11
-
@@ -28,39 +28,3 @@ export class Repos {
28
28
  {{/each}}
29
29
  {{/if}}
30
30
  }
31
-
32
- export const GitHub = {
33
- /** Trigger on push to a repository */
34
- onPush(opts: { repo: Repos }): TypedTrigger<GithubPushTrigger> {
35
- return new GitHubConfig("{{escape id}}", [opts.repo.repositoryId], [GitHubEventType.PUSH])
36
- },
37
- /** Trigger when a pull request is opened */
38
- onPROpened(opts: { repo: Repos }): TypedTrigger<GithubPROpenedTrigger> {
39
- return new GitHubConfig("{{escape id}}", [opts.repo.repositoryId], [GitHubEventType.PR_OPENED])
40
- },
41
- /** Trigger when a pull request is merged */
42
- onPRMerged(opts: { repo: Repos }): TypedTrigger<GithubPRMergedTrigger> {
43
- return new GitHubConfig("{{escape id}}", [opts.repo.repositoryId], [GitHubEventType.PR_MERGED])
44
- },
45
- /** Trigger when a pull request is closed */
46
- onPRClosed(opts: { repo: Repos }): TypedTrigger<GithubPRClosedTrigger> {
47
- return new GitHubConfig("{{escape id}}", [opts.repo.repositoryId], [GitHubEventType.PR_CLOSED])
48
- },
49
- /** Trigger when a pull request is synchronized */
50
- onPRSynchronized(opts: { repo: Repos }): TypedTrigger<GithubPRSynchronizedTrigger> {
51
- return new GitHubConfig("{{escape id}}", [opts.repo.repositoryId], [GitHubEventType.PR_SYNCHRONIZE])
52
- },
53
- /** Trigger on any pull request event */
54
- onPR(opts: { repo: Repos }): TypedTrigger<GithubPRTrigger> {
55
- return new GitHubConfig("{{escape id}}", [opts.repo.repositoryId], [GitHubEventType.PR_OPENED, GitHubEventType.PR_MERGED, GitHubEventType.PR_CLOSED, GitHubEventType.PR_SYNCHRONIZE])
56
- },
57
- /** Trigger on specific GitHub events for the given repositories */
58
- trigger(opts: { repos: Repos[]; eventTypes?: GitHubEventType[] }): TypedTrigger<GithubTrigger> {
59
- return new GitHubConfig("{{escape id}}", opts.repos.map(r => r.repositoryId), opts.eventTypes)
60
- },
61
- /** Use in `skills[]` */
62
- skill(opts: { repos: Repos[] }): TypedSkill<{{{skillToolType}}}> {
63
- return new GitHubConfig("{{escape id}}", opts.repos.map(r => r.repositoryId)) as TypedSkill<{{{skillToolType}}}>
64
- },
65
- }
66
-
@@ -1,11 +1,3 @@
1
1
  {{sectionHeader "LaunchDarkly"}}
2
2
 
3
3
  {{> resource-class projectClass}}
4
-
5
- export const LaunchDarkly = {
6
- /** Use in `skills[]` */
7
- skill(opts: { project: LaunchDarklyProject; environmentKeys: string[] }): TypedSkill<{{{skillToolType}}}> {
8
- return new LaunchDarklyConfig("{{escape id}}", opts.project.projectKey, opts.environmentKeys) as TypedSkill<{{{skillToolType}}}>
9
- },
10
- }
11
-
@@ -3,31 +3,3 @@
3
3
  {{> resource-class teamClass}}
4
4
 
5
5
  {{> resource-class projectClass}}
6
-
7
- export const Linear = {
8
- /** Trigger when a new issue is created. Optionally scope with `LinearTeam.*` / `LinearProject.*` (same idea as `Slack.onMessage` + `SlackChannel`). */
9
- onIssueCreated(opts?: { team?: LinearTeam; project?: LinearProject }): TypedTrigger<LinearIssueCreatedTrigger> {
10
- return new LinearInputConfig("{{escape id}}", opts?.project?.projectId ?? null, [LinearEventType.ISSUE_CREATED], opts?.team?.teamId ?? null)
11
- },
12
- /** Trigger when an issue is updated */
13
- onIssueUpdated(opts?: { team?: LinearTeam; project?: LinearProject }): TypedTrigger<LinearIssueUpdatedTrigger> {
14
- return new LinearInputConfig("{{escape id}}", opts?.project?.projectId ?? null, [LinearEventType.ISSUE_UPDATED], opts?.team?.teamId ?? null)
15
- },
16
- /** Trigger when a comment is added to an issue */
17
- onComment(opts?: { team?: LinearTeam; project?: LinearProject }): TypedTrigger<LinearCommentCreatedTrigger> {
18
- return new LinearInputConfig("{{escape id}}", opts?.project?.projectId ?? null, [LinearEventType.COMMENT_CREATED], opts?.team?.teamId ?? null)
19
- },
20
- /** Trigger on all Linear events */
21
- trigger(opts?: { team?: LinearTeam; project?: LinearProject; eventTypes?: LinearEventType[] }): TypedTrigger<LinearTrigger> {
22
- return new LinearInputConfig("{{escape id}}", opts?.project?.projectId ?? null, opts?.eventTypes, opts?.team?.teamId ?? null)
23
- },
24
- /** Use in `skills[]`. Pass `LinearTeam` / `LinearProject` like `Slack.skill` uses `SlackChannel`. */
25
- skill(opts?: { team?: LinearTeam; project?: LinearProject }): TypedSkill<{{{skillToolType}}}> {
26
- return new LinearOutputConfig(
27
- "{{escape id}}",
28
- opts?.team?.teamId ?? null,
29
- opts?.team?.name ?? null,
30
- opts?.project?.projectId ?? null
31
- ) as TypedSkill<{{{skillToolType}}}>
32
- },
33
- }
@@ -3,13 +3,3 @@
3
3
  {{> resource-class databaseClass}}
4
4
 
5
5
  {{> resource-class pageClass}}
6
-
7
- export const Notion = {
8
- /** Use in `skills[]` */
9
- skill(opts?: { databases?: NotionDatabase[]; pages?: NotionPage[] }): TypedSkill<{{{skillToolType}}}> {
10
- return new NotionConfig("{{escape id}}",
11
- opts?.databases?.map(d => d.databaseId), opts?.databases?.map(d => d.title),
12
- opts?.pages?.map(p => p.pageId), opts?.pages?.map(p => p.title)) as TypedSkill<{{{skillToolType}}}>
13
- },
14
- }
15
-
@@ -1,11 +1,3 @@
1
1
  {{sectionHeader "PostHog"}}
2
2
 
3
3
  {{> resource-class projectClass}}
4
-
5
- export const Posthog = {
6
- /** Use in `skills[]` */
7
- skill(opts: { project: PosthogProject }): TypedSkill<{{{skillToolType}}}> {
8
- return new PosthogConfig("{{escape id}}", opts.project.projectId, opts.project.name) as TypedSkill<{{{skillToolType}}}>
9
- },
10
- }
11
-
@@ -0,0 +1,95 @@
1
+ {{sectionHeader "Skills"}}
2
+
3
+ /**
4
+ * Skills available in your workspace.
5
+ *
6
+ * Type `Skills.` in your editor to see every connected integration's skill at a glance.
7
+ * Use these in `TerseAgent.create({ skills: [...] })`.
8
+ */
9
+ export const Skills = {
10
+ {{#if slack}}
11
+ /** Slack — send messages and manage threads in a specific channel */
12
+ slack(opts: { channel: SlackChannel; userIds?: string[]; userNames?: string[]; listenToUserDms?: boolean }): TypedSkill<{{{slack.skillToolType}}}> {
13
+ return new SlackOutputConfig("{{escape slack.id}}", opts.channel.channelId ?? null, opts.channel.name ?? null, opts.userIds ?? [], opts.userNames ?? null, opts.listenToUserDms)
14
+ },
15
+ {{/if}}
16
+ {{#if github}}
17
+ /** GitHub — read code and pull requests from the given repositories */
18
+ github(opts: { repos: Repos[] }): TypedSkill<{{{github.skillToolType}}}> {
19
+ return new GitHubConfig("{{escape github.id}}", opts.repos.map(r => r.repositoryId))
20
+ },
21
+ {{/if}}
22
+ {{#if linear}}
23
+ /** Linear — read and write issues, optionally scoped to a team or project */
24
+ linear(opts?: { team?: LinearTeam; project?: LinearProject }): TypedSkill<{{{linear.skillToolType}}}> {
25
+ return new LinearOutputConfig(
26
+ "{{escape linear.id}}",
27
+ opts?.team?.teamId ?? null,
28
+ opts?.team?.name ?? null,
29
+ opts?.project?.projectId ?? null
30
+ )
31
+ },
32
+ {{/if}}
33
+ {{#if gmail}}
34
+ /** Gmail — send emails */
35
+ gmail(): TypedSkill<{{{gmail.skillToolType}}}> {
36
+ return new GmailOutputConfig("{{escape gmail.id}}")
37
+ },
38
+ /** Gmail — create draft emails (no auto-send) */
39
+ gmailDraft(): TypedSkill<{{{gmail.skillToolType}}}> {
40
+ return new GmailDraftOutputConfig("{{escape gmail.id}}")
41
+ },
42
+ {{/if}}
43
+ {{#if notion}}
44
+ /** Notion — read and write to the given databases or pages */
45
+ notion(opts?: { databases?: NotionDatabase[]; pages?: NotionPage[] }): TypedSkill<{{{notion.skillToolType}}}> {
46
+ return new NotionConfig("{{escape notion.id}}",
47
+ opts?.databases?.map(d => d.databaseId), opts?.databases?.map(d => d.title),
48
+ opts?.pages?.map(p => p.pageId), opts?.pages?.map(p => p.title))
49
+ },
50
+ {{/if}}
51
+ {{#if posthog}}
52
+ /** PostHog — query analytics for a specific project */
53
+ posthog(opts: { project: PosthogProject }): TypedSkill<{{{posthog.skillToolType}}}> {
54
+ return new PosthogConfig("{{escape posthog.id}}", opts.project.projectId, opts.project.name)
55
+ },
56
+ {{/if}}
57
+ {{#if datadog}}
58
+ /** Datadog — search and analyze logs, optionally scoped to specific indexes */
59
+ datadog(opts?: { indexes?: DatadogIndex[] }): TypedSkill<{{{datadog.skillToolType}}}> {
60
+ return new DatadogConfig("{{escape datadog.id}}", opts?.indexes?.map(i => i.name))
61
+ },
62
+ {{/if}}
63
+ {{#if launchdarkly}}
64
+ /** LaunchDarkly — read and toggle feature flags in a project + environments */
65
+ launchDarkly(opts: { project: LaunchDarklyProject; environmentKeys: string[] }): TypedSkill<{{{launchdarkly.skillToolType}}}> {
66
+ return new LaunchDarklyConfig("{{escape launchdarkly.id}}", opts.project.projectKey, opts.environmentKeys)
67
+ },
68
+ {{/if}}
69
+ {{#if workos}}
70
+ /** WorkOS — manage users, organizations and invitations */
71
+ workOS(): TypedSkill<{{{workos.skillToolType}}}> {
72
+ return new WorkOSOutputConfig("{{escape workos.id}}")
73
+ },
74
+ {{/if}}
75
+ {{#if attio}}
76
+ /** Attio — query and upsert records on a CRM object */
77
+ attio(opts: { object: AttioObject<any> }): TypedSkill<{{{attio.skillToolType}}}> {
78
+ return new AttioOutputConfig("{{escape attio.id}}", opts.object.apiSlug)
79
+ },
80
+ {{/if}}
81
+ {{#if snowflake}}
82
+ /** Snowflake — run SQL queries against your warehouse */
83
+ snowflake(): TypedSkill<{{{snowflake.skillToolType}}}> {
84
+ return new SnowflakeOutputConfig("{{escape snowflake.id}}")
85
+ },
86
+ {{/if}}
87
+ /** Web — built-in web search, page extraction, and multi-source research */
88
+ web(): TypedSkill<"web_search" | "web_extract" | "web_research"> {
89
+ return new WebConfig()
90
+ },
91
+ /** ImageEdit — edit and generate images */
92
+ imageEdit(): TypedSkill<"image_edit"> {
93
+ return new ImageEditConfig()
94
+ },
95
+ }
@@ -1,30 +1,3 @@
1
1
  {{sectionHeader "Slack"}}
2
2
 
3
3
  {{> resource-class channelClass}}
4
-
5
- export const Slack = {
6
- /** Trigger on any message in a channel */
7
- onMessage(opts: { channel: SlackChannel; userIds?: string[] }): TypedTrigger<SlackMessageTrigger> {
8
- return new SlackConfig("{{escape id}}", opts.channel.channelId, opts.channel.name, false, opts.userIds ?? [], [SlackEventType.MESSAGE])
9
- },
10
- /** Trigger on direct messages to the bot */
11
- onDm(opts?: { userIds?: string[] }): TypedTrigger<SlackMessageTrigger> {
12
- return new SlackConfig("{{escape id}}", undefined, undefined, true, opts?.userIds ?? [], [SlackEventType.MESSAGE])
13
- },
14
- /** Trigger when the Slack app is directly mentioned */
15
- onAppMention(opts: { channel: SlackChannel; userIds?: string[] }): TypedTrigger<SlackAppMentionTrigger> {
16
- return new SlackConfig("{{escape id}}", opts.channel.channelId, opts.channel.name, false, opts.userIds ?? [], [SlackEventType.APP_MENTION])
17
- },
18
- /** Trigger when a reaction is added to a message in a channel */
19
- onReactionAdded(opts: { channel: SlackChannel; userIds?: string[] }): TypedTrigger<SlackReactionAddedTrigger> {
20
- return new SlackConfig("{{escape id}}", opts.channel.channelId, opts.channel.name, false, opts.userIds ?? [], [SlackEventType.REACTION_ADDED])
21
- },
22
- /** Trigger on all Slack events (messages + DMs) for a channel */
23
- trigger(opts?: { channel?: SlackChannel; listenToUserDms?: boolean; userIds?: string[]; eventTypes?: SlackEventType[] }): TypedTrigger<SlackTrigger> {
24
- return new SlackConfig("{{escape id}}", opts?.channel?.channelId, opts?.channel?.name, opts?.listenToUserDms, opts?.userIds ?? [], opts?.eventTypes)
25
- },
26
- /** Use in `skills[]` */
27
- skill(opts: { channel: SlackChannel; userIds?: string[]; userNames?: string[]; listenToUserDms?: boolean }): TypedSkill<{{{skillToolType}}}> {
28
- return new SlackOutputConfig("{{escape id}}", opts.channel.channelId ?? null, opts.channel.name ?? null, opts.userIds ?? [], opts.userNames ?? null, opts.listenToUserDms)
29
- },
30
- }
@@ -0,0 +1,180 @@
1
+ {{sectionHeader "Triggers"}}
2
+
3
+ /**
4
+ * Triggers available in your workspace.
5
+ *
6
+ * Type `Triggers.` in your editor to see every connected integration with triggers.
7
+ * Use these in `createJob({ triggers: [...] })`.
8
+ */
9
+ export const Triggers = {
10
+ {{#if slack}}
11
+ slack: {
12
+ /** Trigger on any message in a channel */
13
+ onMessage(opts: { channel: SlackChannel; userIds?: string[] }): TypedTrigger<SlackMessageTrigger> {
14
+ return new SlackConfig("{{escape slack.id}}", opts.channel.channelId, opts.channel.name, false, opts.userIds ?? [], [SlackEventType.MESSAGE])
15
+ },
16
+ /** Trigger on direct messages to the bot */
17
+ onDm(opts?: { userIds?: string[] }): TypedTrigger<SlackMessageTrigger> {
18
+ return new SlackConfig("{{escape slack.id}}", undefined, undefined, true, opts?.userIds ?? [], [SlackEventType.MESSAGE])
19
+ },
20
+ /** Trigger when the Slack app is directly mentioned */
21
+ onAppMention(opts: { channel: SlackChannel; userIds?: string[] }): TypedTrigger<SlackAppMentionTrigger> {
22
+ return new SlackConfig("{{escape slack.id}}", opts.channel.channelId, opts.channel.name, false, opts.userIds ?? [], [SlackEventType.APP_MENTION])
23
+ },
24
+ /** Trigger when a reaction is added to a message in a channel */
25
+ onReactionAdded(opts: { channel: SlackChannel; userIds?: string[] }): TypedTrigger<SlackReactionAddedTrigger> {
26
+ return new SlackConfig("{{escape slack.id}}", opts.channel.channelId, opts.channel.name, false, opts.userIds ?? [], [SlackEventType.REACTION_ADDED])
27
+ },
28
+ /** Trigger on all Slack events (messages + DMs) for a channel */
29
+ trigger(opts?: { channel?: SlackChannel; listenToUserDms?: boolean; userIds?: string[]; eventTypes?: SlackEventType[] }): TypedTrigger<SlackTrigger> {
30
+ return new SlackConfig("{{escape slack.id}}", opts?.channel?.channelId, opts?.channel?.name, opts?.listenToUserDms, opts?.userIds ?? [], opts?.eventTypes)
31
+ },
32
+ },
33
+ {{/if}}
34
+ {{#if github}}
35
+ github: {
36
+ /** Trigger on push to a repository */
37
+ onPush(opts: { repo: Repos }): TypedTrigger<GithubPushTrigger> {
38
+ return new GitHubConfig("{{escape github.id}}", [opts.repo.repositoryId], [GitHubEventType.PUSH])
39
+ },
40
+ /** Trigger when a pull request is opened */
41
+ onPROpened(opts: { repo: Repos }): TypedTrigger<GithubPROpenedTrigger> {
42
+ return new GitHubConfig("{{escape github.id}}", [opts.repo.repositoryId], [GitHubEventType.PR_OPENED])
43
+ },
44
+ /** Trigger when a pull request is merged */
45
+ onPRMerged(opts: { repo: Repos }): TypedTrigger<GithubPRMergedTrigger> {
46
+ return new GitHubConfig("{{escape github.id}}", [opts.repo.repositoryId], [GitHubEventType.PR_MERGED])
47
+ },
48
+ /** Trigger when a pull request is closed */
49
+ onPRClosed(opts: { repo: Repos }): TypedTrigger<GithubPRClosedTrigger> {
50
+ return new GitHubConfig("{{escape github.id}}", [opts.repo.repositoryId], [GitHubEventType.PR_CLOSED])
51
+ },
52
+ /** Trigger when a pull request is synchronized */
53
+ onPRSynchronized(opts: { repo: Repos }): TypedTrigger<GithubPRSynchronizedTrigger> {
54
+ return new GitHubConfig("{{escape github.id}}", [opts.repo.repositoryId], [GitHubEventType.PR_SYNCHRONIZE])
55
+ },
56
+ /** Trigger on any pull request event */
57
+ onPR(opts: { repo: Repos }): TypedTrigger<GithubPRTrigger> {
58
+ return new GitHubConfig("{{escape github.id}}", [opts.repo.repositoryId], [GitHubEventType.PR_OPENED, GitHubEventType.PR_MERGED, GitHubEventType.PR_CLOSED, GitHubEventType.PR_SYNCHRONIZE])
59
+ },
60
+ /** Trigger on specific GitHub events for the given repositories */
61
+ trigger(opts: { repos: Repos[]; eventTypes?: GitHubEventType[] }): TypedTrigger<GithubTrigger> {
62
+ return new GitHubConfig("{{escape github.id}}", opts.repos.map(r => r.repositoryId), opts.eventTypes)
63
+ },
64
+ },
65
+ {{/if}}
66
+ {{#if linear}}
67
+ linear: {
68
+ /** Trigger when a new issue is created. Optionally scope with `LinearTeam.*` / `LinearProject.*`. */
69
+ onIssueCreated(opts?: { team?: LinearTeam; project?: LinearProject }): TypedTrigger<LinearIssueCreatedTrigger> {
70
+ return new LinearInputConfig("{{escape linear.id}}", opts?.project?.projectId ?? null, [LinearEventType.ISSUE_CREATED], opts?.team?.teamId ?? null)
71
+ },
72
+ /** Trigger when an issue is updated */
73
+ onIssueUpdated(opts?: { team?: LinearTeam; project?: LinearProject }): TypedTrigger<LinearIssueUpdatedTrigger> {
74
+ return new LinearInputConfig("{{escape linear.id}}", opts?.project?.projectId ?? null, [LinearEventType.ISSUE_UPDATED], opts?.team?.teamId ?? null)
75
+ },
76
+ /** Trigger when a comment is added to an issue */
77
+ onComment(opts?: { team?: LinearTeam; project?: LinearProject }): TypedTrigger<LinearCommentCreatedTrigger> {
78
+ return new LinearInputConfig("{{escape linear.id}}", opts?.project?.projectId ?? null, [LinearEventType.COMMENT_CREATED], opts?.team?.teamId ?? null)
79
+ },
80
+ /** Trigger on all Linear events */
81
+ trigger(opts?: { team?: LinearTeam; project?: LinearProject; eventTypes?: LinearEventType[] }): TypedTrigger<LinearTrigger> {
82
+ return new LinearInputConfig("{{escape linear.id}}", opts?.project?.projectId ?? null, opts?.eventTypes, opts?.team?.teamId ?? null)
83
+ },
84
+ },
85
+ {{/if}}
86
+ {{#if gmail}}
87
+ gmail: {
88
+ /** Trigger when a new email is received */
89
+ onEmail(): TypedTrigger<GmailTrigger> {
90
+ return new GmailConfig("{{escape gmail.id}}", [GmailEventType.EMAIL_RECEIVED])
91
+ },
92
+ /** Trigger on all Gmail events */
93
+ trigger(opts?: { eventTypes?: GmailEventType[] }): TypedTrigger<GmailTrigger> {
94
+ return new GmailConfig("{{escape gmail.id}}", opts?.eventTypes)
95
+ },
96
+ },
97
+ {{/if}}
98
+ {{#if workos}}
99
+ workOS: {
100
+ /** Trigger on user creation */
101
+ onUserCreated(): TypedTrigger<WorkOSUserCreatedTrigger> {
102
+ return new WorkOSInputConfig("{{escape workos.id}}", [WorkOSEventType.USER_CREATED])
103
+ },
104
+ /** Trigger on user update */
105
+ onUserUpdated(): TypedTrigger<WorkOSUserUpdatedTrigger> {
106
+ return new WorkOSInputConfig("{{escape workos.id}}", [WorkOSEventType.USER_UPDATED])
107
+ },
108
+ /** Trigger on user deletion */
109
+ onUserDeleted(): TypedTrigger<WorkOSUserDeletedTrigger> {
110
+ return new WorkOSInputConfig("{{escape workos.id}}", [WorkOSEventType.USER_DELETED])
111
+ },
112
+ /** Trigger on organization membership creation */
113
+ onMembershipCreated(): TypedTrigger<WorkOSOrganizationMembershipCreatedTrigger> {
114
+ return new WorkOSInputConfig("{{escape workos.id}}", [WorkOSEventType.ORGANIZATION_MEMBERSHIP_CREATED])
115
+ },
116
+ /** Trigger on organization membership update */
117
+ onMembershipUpdated(): TypedTrigger<WorkOSOrganizationMembershipUpdatedTrigger> {
118
+ return new WorkOSInputConfig("{{escape workos.id}}", [WorkOSEventType.ORGANIZATION_MEMBERSHIP_UPDATED])
119
+ },
120
+ /** Trigger on organization membership deletion */
121
+ onMembershipDeleted(): TypedTrigger<WorkOSOrganizationMembershipDeletedTrigger> {
122
+ return new WorkOSInputConfig("{{escape workos.id}}", [WorkOSEventType.ORGANIZATION_MEMBERSHIP_DELETED])
123
+ },
124
+ /** Trigger on any organization membership change */
125
+ onMembershipChanged(): TypedTrigger<WorkOSMembershipTrigger> {
126
+ return new WorkOSInputConfig("{{escape workos.id}}", [WorkOSEventType.ORGANIZATION_MEMBERSHIP_CREATED, WorkOSEventType.ORGANIZATION_MEMBERSHIP_UPDATED, WorkOSEventType.ORGANIZATION_MEMBERSHIP_DELETED])
127
+ },
128
+ /** Trigger when an invitation is sent (created or resent) */
129
+ onInvitationSent(): TypedTrigger<WorkOSInvitationTrigger> {
130
+ return new WorkOSInputConfig("{{escape workos.id}}", [WorkOSEventType.INVITATION_CREATED, WorkOSEventType.INVITATION_RESENT])
131
+ },
132
+ /** Trigger when an invitation is first created */
133
+ onInvitationCreated(): TypedTrigger<WorkOSInvitationCreatedTrigger> {
134
+ return new WorkOSInputConfig("{{escape workos.id}}", [WorkOSEventType.INVITATION_CREATED])
135
+ },
136
+ /** Trigger when an invitation is resent */
137
+ onInvitationResent(): TypedTrigger<WorkOSInvitationResentTrigger> {
138
+ return new WorkOSInputConfig("{{escape workos.id}}", [WorkOSEventType.INVITATION_RESENT])
139
+ },
140
+ /** Trigger on invitation accepted */
141
+ onInvitationAccepted(): TypedTrigger<WorkOSInvitationAcceptedTrigger> {
142
+ return new WorkOSInputConfig("{{escape workos.id}}", [WorkOSEventType.INVITATION_ACCEPTED])
143
+ },
144
+ /** Trigger when an invitation is revoked */
145
+ onInvitationRevoked(): TypedTrigger<WorkOSInvitationRevokedTrigger> {
146
+ return new WorkOSInputConfig("{{escape workos.id}}", [WorkOSEventType.INVITATION_REVOKED])
147
+ },
148
+ /** Trigger on organization creation */
149
+ onOrganizationCreated(): TypedTrigger<WorkOSOrganizationTrigger> {
150
+ return new WorkOSInputConfig("{{escape workos.id}}", [WorkOSEventType.ORGANIZATION_CREATED])
151
+ },
152
+ /** Trigger on specific WorkOS event types */
153
+ trigger(opts?: { eventTypes?: WorkOSEventType[] }): TypedTrigger<WorkOSTrigger | WorkOSUserTrigger | WorkOSMembershipTrigger | WorkOSInvitationTrigger | WorkOSOrganizationTrigger> {
154
+ return new WorkOSInputConfig("{{escape workos.id}}", opts?.eventTypes)
155
+ },
156
+ },
157
+ {{/if}}
158
+ schedule: {
159
+ /** Run on a cron schedule */
160
+ cron(opts: { expression: string }): TypedTrigger<CronTrigger> {
161
+ return new TimeTriggerConfig(opts.expression)
162
+ },
163
+ },
164
+ webhook: {
165
+ /** Trigger via an external HTTP request to a generated URL */
166
+ onRequest<TBody = unknown>(): TypedTrigger<WebhookTrigger<TBody>> {
167
+ return new WebhookInputConfig()
168
+ },
169
+ },
170
+ webMonitor: {
171
+ /** Trigger when a query against the live web matches the given schema */
172
+ onEvent<const TSchema>(opts: {
173
+ query: string
174
+ frequency: { number: number; unit: FrequencyUnit }
175
+ outputSchema?: TSchema
176
+ }): TypedTrigger<WebMonitorTrigger<InferStructuredOutput<TSchema>>> {
177
+ return new WebMonitorConfig(opts.query, opts.frequency, opts.outputSchema)
178
+ },
179
+ },
180
+ }
@@ -1,13 +1,13 @@
1
1
  import { createJob, TerseAgent, type GithubPRTrigger } from "terse-sdk"
2
- import { GitHub, Repos, Slack, SlackChannel } from "./terse.generated"
2
+ import { Repos, Skills, SlackChannel, Triggers } from "./terse.generated"
3
3
 
4
4
  createJob({
5
5
  name: "Summarize PR and send slack message",
6
- triggers: [GitHub.onPROpened({ repo: Repos.TerseAI.Terse })],
6
+ triggers: [Triggers.github.onPROpened({ repo: Repos.TerseAI.Terse })],
7
7
  onTrigger: async (event: GithubPRTrigger) => {
8
8
  const agent = TerseAgent.create({
9
9
  prompt: "You summarise GitHub pull requests and post concise updates to Slack.",
10
- skills: [GitHub.skill({ repos: [Repos.TerseAI.LandingPage, Repos.TerseAI.Terse] }), Slack.skill({ channel: SlackChannel.AllTerseInc })]
10
+ skills: [Skills.github({ repos: [Repos.TerseAI.LandingPage, Repos.TerseAI.Terse] }), Skills.slack({ channel: SlackChannel.AllTerseInc })]
11
11
  })
12
12
 
13
13
  const message = await agent.tools.slack.sendMessage({
@@ -1,19 +0,0 @@
1
- import type { Ora } from "ora";
2
- export type JsonErrorPayload = {
3
- error: {
4
- code: string;
5
- message: string;
6
- [key: string]: unknown;
7
- };
8
- };
9
- export declare function emitJsonError(code: string, message: string, details?: Record<string, unknown>): void;
10
- export declare function bailJsonError(code: string, message: string, details?: Record<string, unknown>, exitCode?: number): never;
11
- export type GuardOptions = {
12
- spinner?: Ora | null;
13
- json?: boolean;
14
- failMessage: string;
15
- code: string;
16
- details?: Record<string, unknown>;
17
- };
18
- export declare function withJsonError<T>(fn: () => Promise<T>, opts: GuardOptions): Promise<T>;
19
- //# sourceMappingURL=jsonOutput.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsonOutput.d.ts","sourceRoot":"","sources":["../src/jsonOutput.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAK9B,MAAM,MAAM,gBAAgB,GAAG;IAC3B,KAAK,EAAE;QACH,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACzB,CAAA;CACJ,CAAA;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI,CAGxG;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,KAAK,CAG/H;AAED,MAAM,MAAM,YAAY,GAAG;IACvB,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI,CAAA;IACpB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC,CAAA;AAKD,wBAAsB,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAU3F"}
@@ -1,25 +0,0 @@
1
- import chalk from "chalk";
2
- export function emitJsonError(code, message, details = {}) {
3
- const payload = { error: { code, message, ...details } };
4
- process.stdout.write(JSON.stringify(payload, null, 2) + "\n");
5
- }
6
- export function bailJsonError(code, message, details = {}, exitCode = 1) {
7
- emitJsonError(code, message, details);
8
- process.exit(exitCode);
9
- }
10
- // Wraps an async call so that failures (a) stop the spinner with a red label in TTY mode,
11
- // (b) emit a structured JSON error and exit 1 in --json mode, and (c) re-throw otherwise so
12
- // the top-level error handler can surface the trace.
13
- export async function withJsonError(fn, opts) {
14
- try {
15
- return await fn();
16
- }
17
- catch (error) {
18
- opts.spinner?.fail(chalk.red(opts.failMessage));
19
- if (opts.json) {
20
- bailJsonError(opts.code, error instanceof Error ? error.message : String(error), opts.details);
21
- }
22
- throw error;
23
- }
24
- }
25
- //# sourceMappingURL=jsonOutput.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsonOutput.js","sourceRoot":"","sources":["../src/jsonOutput.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAczB,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAAe,EAAE,UAAmC,EAAE;IAC9F,MAAM,OAAO,GAAqB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,EAAE,CAAA;IAC1E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;AACjE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAAe,EAAE,UAAmC,EAAE,EAAE,WAAmB,CAAC;IACpH,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IACrC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAC1B,CAAC;AAUD,0FAA0F;AAC1F,4FAA4F;AAC5F,qDAAqD;AACrD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAI,EAAoB,EAAE,IAAkB;IAC3E,IAAI,CAAC;QACD,OAAO,MAAM,EAAE,EAAE,CAAA;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAA;QAC/C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QAClG,CAAC;QACD,MAAM,KAAK,CAAA;IACf,CAAC;AACL,CAAC"}
package/dist/replay.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import type { LanguageProvider } from "./providers/LanguageProvider.js";
2
- export declare function replay(runId: string, provider?: LanguageProvider): Promise<void>;
3
- //# sourceMappingURL=replay.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAGvE,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,gBAAoC,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBzG"}
package/dist/replay.js DELETED
@@ -1,20 +0,0 @@
1
- import chalk from "chalk";
2
- import { readApiKeyOrBail, resolveEventFromRunId } from "./api.js";
3
- import { loadJob } from "./loadJob.js";
4
- import { resolveProvider } from "./providers/resolveProvider.js";
5
- export async function replay(runId, provider = resolveProvider()) {
6
- const apiKey = readApiKeyOrBail();
7
- if (!runId) {
8
- console.error(chalk.red("Error: --run-id is required.\n"));
9
- console.error(chalk.dim(" Usage: terse replay --run-id <run-id>"));
10
- process.exit(1);
11
- }
12
- const runHistoryRecord = await resolveEventFromRunId(runId, apiKey);
13
- if (!runHistoryRecord) {
14
- console.error(chalk.red("Error: Could not fetch the trigger event for run ${runId}.\n"));
15
- process.exit(1);
16
- }
17
- const { job } = await loadJob(provider, runHistoryRecord.agentName);
18
- await provider.executeJob(job, null, runHistoryRecord.event, { verbose: true });
19
- }
20
- //# sourceMappingURL=replay.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAEhE,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,KAAa,EAAE,WAA6B,eAAe,EAAE;IACtF,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAA;IAEjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAA;QAC1D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAA;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IAED,MAAM,gBAAgB,GAAG,MAAM,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACnE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC,CAAA;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IAED,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAA;IAEnE,MAAM,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;AACnF,CAAC"}
package/dist/urls.d.ts DELETED
@@ -1,3 +0,0 @@
1
- export declare const FRONTEND_URL: string;
2
- export declare const BACKEND_URL: string;
3
- //# sourceMappingURL=urls.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"urls.d.ts","sourceRoot":"","sources":["../src/urls.ts"],"names":[],"mappings":"AAgCA,eAAO,MAAM,YAAY,QAAsD,CAAA;AAC/E,eAAO,MAAM,WAAW,QAAoD,CAAA"}
package/dist/urls.js DELETED
@@ -1,27 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { fileURLToPath } from "node:url";
4
- const LOCAL_FRONTEND_URL = "http://localhost:5173";
5
- const LOCAL_BACKEND_URL = "http://localhost:3001";
6
- const PROD_FRONTEND_URL = "https://app.useterse.ai";
7
- const PROD_BACKEND_URL = "https://app.useterse.ai/api";
8
- const __filename = fileURLToPath(import.meta.url);
9
- const __dirname = path.dirname(__filename);
10
- function isWorkspaceDevelopment() {
11
- const packageRoot = path.resolve(__dirname, "..");
12
- const repoRoot = path.resolve(packageRoot, "..", "..");
13
- return (fs.existsSync(path.join(repoRoot, "packages", "terse-cli")) &&
14
- fs.existsSync(path.join(repoRoot, "backend")));
15
- }
16
- const defaults = isWorkspaceDevelopment()
17
- ? {
18
- frontend: LOCAL_FRONTEND_URL,
19
- backend: LOCAL_BACKEND_URL,
20
- }
21
- : {
22
- frontend: PROD_FRONTEND_URL,
23
- backend: PROD_BACKEND_URL,
24
- };
25
- export const FRONTEND_URL = process.env.TERSE_FRONTEND_URL || defaults.frontend;
26
- export const BACKEND_URL = process.env.TERSE_BACKEND_URL || defaults.backend;
27
- //# sourceMappingURL=urls.js.map
package/dist/urls.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"urls.js","sourceRoot":"","sources":["../src/urls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,kBAAkB,GAAG,uBAAuB,CAAA;AAClD,MAAM,iBAAiB,GAAG,uBAAuB,CAAA;AACjD,MAAM,iBAAiB,GAAG,yBAAyB,CAAA;AACnD,MAAM,gBAAgB,GAAG,6BAA6B,CAAA;AAEtD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;AAE1C,SAAS,sBAAsB;IAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IAEtD,OAAO,CACH,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAC3D,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAChD,CAAA;AACL,CAAC;AAED,MAAM,QAAQ,GAAG,sBAAsB,EAAE;IACrC,CAAC,CAAC;QACE,QAAQ,EAAE,kBAAkB;QAC5B,OAAO,EAAE,iBAAiB;KAC7B;IACD,CAAC,CAAC;QACE,QAAQ,EAAE,iBAAiB;QAC3B,OAAO,EAAE,gBAAgB;KAC5B,CAAA;AAEL,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,QAAQ,CAAC,QAAQ,CAAA;AAC/E,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,QAAQ,CAAC,OAAO,CAAA"}
@@ -1,21 +0,0 @@
1
- {{sectionHeader "Gmail"}}
2
-
3
- export const Gmail = {
4
- /** Trigger when a new email is received */
5
- onEmail(): TypedTrigger<GmailTrigger> {
6
- return new GmailConfig("{{escape id}}", [GmailEventType.EMAIL_RECEIVED])
7
- },
8
- /** Trigger on all Gmail events */
9
- trigger(opts?: { eventTypes?: GmailEventType[] }): TypedTrigger<GmailTrigger> {
10
- return new GmailConfig("{{escape id}}", opts?.eventTypes)
11
- },
12
- /** Use in `skills[]` */
13
- skill(): TypedSkill<{{{skillToolType}}}> {
14
- return new GmailOutputConfig("{{escape id}}") as TypedSkill<{{{skillToolType}}}>
15
- },
16
- /** Use in `skills[]` — creates draft emails */
17
- draftSkill(): TypedSkill<{{{skillToolType}}}> {
18
- return new GmailDraftOutputConfig("{{escape id}}") as TypedSkill<{{{skillToolType}}}>
19
- },
20
- }
21
-
@@ -1,9 +0,0 @@
1
- {{sectionHeader "Snowflake"}}
2
-
3
- export const Snowflake = {
4
- /** Use in `skills[]` */
5
- skill(): TypedSkill<{{{skillToolType}}}> {
6
- return new SnowflakeOutputConfig("{{escape id}}") as TypedSkill<{{{skillToolType}}}>
7
- },
8
- }
9
-