@keystrokehq/skills 0.0.1

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 (44) hide show
  1. package/AGENTS-blurb.md +123 -0
  2. package/LICENSE +21 -0
  3. package/README.md +63 -0
  4. package/keystroke-agent-authoring/SKILL.md +225 -0
  5. package/keystroke-agent-authoring/evals/evals.json +29 -0
  6. package/keystroke-agent-authoring/references/messaging-gateways.md +242 -0
  7. package/keystroke-agent-authoring/references/patterns.md +417 -0
  8. package/keystroke-agent-authoring/references/prebuilt-integrations.md +879 -0
  9. package/keystroke-agent-authoring/references/sandbox-and-mcp.md +214 -0
  10. package/keystroke-agent-authoring/references/source-map.md +182 -0
  11. package/keystroke-agent-authoring/references/testing.md +85 -0
  12. package/keystroke-cli-workspace/SKILL.md +93 -0
  13. package/keystroke-cli-workspace/evals/evals.json +23 -0
  14. package/keystroke-cli-workspace/references/command-map.md +50 -0
  15. package/keystroke-cli-workspace/references/credentials-and-connect.md +79 -0
  16. package/keystroke-cli-workspace/references/project-lifecycle.md +85 -0
  17. package/keystroke-credential-binding/SKILL.md +509 -0
  18. package/keystroke-credential-binding/evals/evals.json +29 -0
  19. package/keystroke-credential-binding/references/cli.md +85 -0
  20. package/keystroke-credential-binding/references/patterns.md +878 -0
  21. package/keystroke-credential-binding/references/source-map.md +69 -0
  22. package/keystroke-data-toolkit/SKILL.md +59 -0
  23. package/keystroke-data-toolkit/evals/evals.json +23 -0
  24. package/keystroke-data-toolkit/references/usage.md +79 -0
  25. package/keystroke-task-authoring/SKILL.md +124 -0
  26. package/keystroke-task-authoring/evals/evals.json +23 -0
  27. package/keystroke-task-authoring/references/patterns.md +132 -0
  28. package/keystroke-task-authoring/references/source-map.md +61 -0
  29. package/keystroke-trigger-authoring/SKILL.md +189 -0
  30. package/keystroke-trigger-authoring/evals/evals.json +29 -0
  31. package/keystroke-trigger-authoring/references/patterns.md +265 -0
  32. package/keystroke-trigger-authoring/references/source-map.md +128 -0
  33. package/keystroke-trigger-authoring/references/testing.md +148 -0
  34. package/keystroke-workflow-as-tool-debugging/SKILL.md +52 -0
  35. package/keystroke-workflow-as-tool-debugging/evals/evals.json +23 -0
  36. package/keystroke-workflow-as-tool-debugging/references/playbook.md +77 -0
  37. package/keystroke-workflow-authoring/SKILL.md +234 -0
  38. package/keystroke-workflow-authoring/evals/evals.json +29 -0
  39. package/keystroke-workflow-authoring/references/patterns.md +265 -0
  40. package/keystroke-workflow-authoring/references/prebuilt-integrations.md +811 -0
  41. package/keystroke-workflow-authoring/references/runtime-helpers.md +264 -0
  42. package/keystroke-workflow-authoring/references/source-map.md +108 -0
  43. package/keystroke-workflow-authoring/references/testing.md +108 -0
  44. package/package.json +26 -0
@@ -0,0 +1,811 @@
1
+ # Prebuilt Integration Operations For Workflows
2
+
3
+ Before writing a custom `Step`, inspect the current integration packages first.
4
+
5
+ Use this rule:
6
+
7
+ - integration packages export shared `Operation` instances
8
+ - in workflow code, use those operations directly as steps with `await someOperation.run(...)`
9
+ - if an integration package already exports the operation you need, install it, import it, and call it directly from the workflow
10
+ - only write a custom `Step` when no current integration export fits the workflow
11
+ - use the `Step` name for workflow explanations, but remember these are the same `Operation` primitive used elsewhere as tools
12
+
13
+ ## Workflow install, import, and usage pattern
14
+
15
+ Install the package that exports the operation:
16
+
17
+ ```sh
18
+ pnpm add @keystroke/integration-slack
19
+ ```
20
+
21
+ Import the named operation you want:
22
+
23
+ ```ts
24
+ import { sendMessage } from '@keystroke/integration-slack/platform/messages';
25
+ ```
26
+
27
+ Call the operation directly from your workflow:
28
+
29
+ ```ts
30
+ const result = await sendMessage.run({
31
+ channel: '#ops',
32
+ text: 'Deployment finished successfully.',
33
+ });
34
+ ```
35
+
36
+ Replace `sendMessage` with any of the operation exports listed below.
37
+
38
+ ## `@keystroke/integration-ai`
39
+
40
+ Install:
41
+
42
+ ```sh
43
+ pnpm add @keystroke/integration-ai
44
+ ```
45
+
46
+ Import and use:
47
+
48
+ ```ts
49
+ import { generateObject, generateText } from '@keystroke/integration-ai/generate';
50
+
51
+ const summary = await generateText.run(/* AI text-generation input */);
52
+ const structured = await generateObject.run(/* AI object-generation input */);
53
+ ```
54
+
55
+ - `generateObject`: Generate structured object output from a model prompt.
56
+ - `generateText`: Generate plain-text output from a model prompt.
57
+
58
+ Also note:
59
+
60
+ - this package exports AI provider credential sets for agent authoring
61
+ - this package also exports generation operations, but agent authoring guidance belongs in the agent skill
62
+
63
+ ## `@keystroke/integration-apollo`
64
+
65
+ Install:
66
+
67
+ ```sh
68
+ pnpm add @keystroke/integration-apollo
69
+ ```
70
+
71
+ Prefer domain subpath imports such as `@keystroke/integration-apollo/accounts` or `@keystroke/integration-apollo/contacts`.
72
+
73
+ Import and use:
74
+
75
+ ```ts
76
+ import { createAccount } from '@keystroke/integration-apollo/accounts';
77
+ import { searchContacts } from '@keystroke/integration-apollo/contacts';
78
+
79
+ const account = await createAccount.run(/* Apollo create-account input */);
80
+ const contacts = await searchContacts.run(/* Apollo search-contacts input */);
81
+ ```
82
+
83
+ ### Accounts
84
+
85
+ - `bulkCreateAccounts`: Create many Apollo accounts in one call.
86
+ - `createAccount`: Create a single Apollo account.
87
+ - `searchAccounts`: Search Apollo accounts.
88
+ - `updateAccount`: Update an Apollo account.
89
+ - `updateAccountOwner`: Change the owner of an Apollo account.
90
+ - `updateAccountStage`: Change the stage of an Apollo account.
91
+
92
+ ### Contacts
93
+
94
+ - `bulkCreateContacts`: Create many Apollo contacts in one call.
95
+ - `createContact`: Create a single Apollo contact.
96
+ - `listContactStages`: List Apollo contact stages.
97
+ - `searchContacts`: Search Apollo contacts.
98
+ - `updateContact`: Update an Apollo contact.
99
+ - `updateContactStage`: Change the stage of an Apollo contact.
100
+
101
+ ### Deals
102
+
103
+ - `createDeal`: Create an Apollo deal.
104
+ - `getDeal`: Fetch an Apollo deal by ID.
105
+ - `listDeals`: List Apollo deals.
106
+ - `updateDeal`: Update an Apollo deal.
107
+
108
+ ### Enrichment
109
+
110
+ - `bulkEnrichOrganizations`: Enrich many organizations with Apollo data.
111
+ - `bulkEnrichPeople`: Enrich many people with Apollo data.
112
+ - `enrichOrganization`: Enrich one organization with Apollo data.
113
+ - `enrichPerson`: Enrich one person with Apollo data.
114
+
115
+ ### Search
116
+
117
+ - `searchOrganizations`: Search organizations in Apollo.
118
+ - `searchPeople`: Search people in Apollo.
119
+
120
+ ### Sequences
121
+
122
+ - `addContactsToSequence`: Add contacts to an Apollo sequence.
123
+ - `searchSequences`: Search Apollo sequences.
124
+ - `updateSequenceContactStatus`: Update a contact's status in an Apollo sequence.
125
+
126
+ ### Tasks
127
+
128
+ - `createTasks`: Create Apollo tasks.
129
+ - `searchTasks`: Search Apollo tasks.
130
+
131
+ ## `@keystroke/integration-attio`
132
+
133
+ Install:
134
+
135
+ ```sh
136
+ pnpm add @keystroke/integration-attio
137
+ ```
138
+
139
+ Prefer domain subpath imports such as `@keystroke/integration-attio/records` or `@keystroke/integration-attio/lists`.
140
+
141
+ Import and use:
142
+
143
+ ```ts
144
+ import { createRecord, queryRecords } from '@keystroke/integration-attio/records';
145
+
146
+ const record = await createRecord.run(/* Attio create-record input */);
147
+ const records = await queryRecords.run(/* Attio query-records input */);
148
+ ```
149
+
150
+ ### Lists
151
+
152
+ - `addListEntry`: Add an entry to an Attio list.
153
+ - `deleteListEntry`: Remove an entry from an Attio list.
154
+ - `getList`: Fetch an Attio list by ID.
155
+ - `listLists`: List Attio lists.
156
+ - `queryListEntries`: Query entries in an Attio list.
157
+ - `updateListEntry`: Update an Attio list entry.
158
+ - `upsertListEntry`: Create or update an Attio list entry.
159
+
160
+ ### Notes
161
+
162
+ - `createNote`: Create an Attio note.
163
+ - `deleteNote`: Delete an Attio note.
164
+ - `getNote`: Fetch an Attio note by ID.
165
+ - `listNotes`: List Attio notes.
166
+
167
+ ### Objects
168
+
169
+ - `getObject`: Fetch an Attio object definition.
170
+ - `listAttributes`: List attributes for an Attio object.
171
+ - `listObjects`: List Attio objects.
172
+
173
+ ### Records
174
+
175
+ - `createRecord`: Create an Attio record.
176
+ - `deleteRecord`: Delete an Attio record.
177
+ - `getRecord`: Fetch an Attio record by ID.
178
+ - `queryRecords`: Query Attio records.
179
+ - `updateRecord`: Update an Attio record.
180
+ - `upsertRecord`: Create or update an Attio record.
181
+
182
+ ### Tasks
183
+
184
+ - `createTask`: Create an Attio task.
185
+ - `deleteTask`: Delete an Attio task.
186
+ - `getTask`: Fetch an Attio task by ID.
187
+ - `listTasks`: List Attio tasks.
188
+ - `updateTask`: Update an Attio task.
189
+
190
+ ## `@keystroke/integration-daytona`
191
+
192
+ Install:
193
+
194
+ ```sh
195
+ pnpm add @keystroke/integration-daytona
196
+ ```
197
+
198
+ Import example:
199
+
200
+ ```ts
201
+ import { DaytonaSandbox } from '@keystroke/integration-daytona';
202
+ ```
203
+
204
+ This package does not currently export workflow operations.
205
+
206
+ It currently exports sandbox utilities instead:
207
+
208
+ - `cloneFiles`: Copy files into or out of a Daytona-backed sandbox.
209
+ - `DaytonaSandbox`: Create a Daytona-backed sandbox for agents.
210
+ - `DaytonaSandboxProvider`: Configure the Daytona sandbox provider.
211
+
212
+ ## `@keystroke/integration-github`
213
+
214
+ Install:
215
+
216
+ ```sh
217
+ pnpm add @keystroke/integration-github
218
+ ```
219
+
220
+ Prefer domain subpath imports such as `@keystroke/integration-github/issues`, `@keystroke/integration-github/pull-requests`, or `@keystroke/integration-github/repos`.
221
+
222
+ Import and use:
223
+
224
+ ```ts
225
+ import { getIssue } from '@keystroke/integration-github/issues';
226
+ import { listPullRequests } from '@keystroke/integration-github/pull-requests';
227
+
228
+ const issue = await getIssue.run({
229
+ owner: 'keystroke',
230
+ repo: 'keystroke',
231
+ issueNumber: 42,
232
+ });
233
+
234
+ const prs = await listPullRequests.run({
235
+ owner: 'keystroke',
236
+ repo: 'keystroke',
237
+ });
238
+ ```
239
+
240
+ Common operation groups:
241
+
242
+ - actions: `listWorkflows`, `listWorkflowRuns`, `getWorkflowRun`, `triggerWorkflow`, `rerunWorkflowRun`, `cancelWorkflowRun`
243
+ - contents: `getFileContent`, `createOrUpdateFile`, `deleteFile`
244
+ - git: `compareBranches`, `createBranch`, `deleteBranch`
245
+ - issues: `getIssue`, `listIssues`, `createIssue`, `updateIssue`, `addIssueComment`
246
+ - pull requests: `getPullRequest`, `listPullRequests`, `createPullRequest`, `mergePullRequest`, `requestPullRequestReview`
247
+ - releases: `getRelease`, `listReleases`, `createRelease`, `deleteRelease`
248
+ - repos: `getRepository`, `listRepositories`, `listBranches`, `listTags`
249
+ - search: `searchCode`, `searchIssues`, `searchRepositories`
250
+ - users and orgs: `getAuthenticatedUser`, `getUser`, `listOrganizations`, `listOrgMembers`
251
+
252
+ Messaging-specific credential surfaces also exist in this package, but workflow trigger and conversation entry guidance belongs in the trigger and agent skills.
253
+
254
+ ## `@keystroke/integration-google`
255
+
256
+ Install:
257
+
258
+ ```sh
259
+ pnpm add @keystroke/integration-google
260
+ ```
261
+
262
+ Prefer domain subpath imports such as `@keystroke/integration-google/gmail`, `@keystroke/integration-google/sheets`, or `@keystroke/integration-google/calendar`.
263
+
264
+ Import and use:
265
+
266
+ ```ts
267
+ import { listCalendarEvents, createCalendarEvent } from '@keystroke/integration-google/calendar';
268
+ import { listEmails, sendEmail } from '@keystroke/integration-google/gmail';
269
+ import { createSpreadsheet, writeSpreadsheetRange } from '@keystroke/integration-google/sheets';
270
+
271
+ const inbox = await listEmails.run({
272
+ labelIds: ['INBOX', 'UNREAD'],
273
+ maxResults: 10,
274
+ });
275
+
276
+ const sent = await sendEmail.run({
277
+ to: 'team@example.com',
278
+ subject: 'Weekly report',
279
+ bodyText: 'See the attached spreadsheet for details.',
280
+ });
281
+
282
+ const events = await listCalendarEvents.run({
283
+ timeMin: new Date().toISOString(),
284
+ maxResults: 10,
285
+ });
286
+
287
+ const newEvent = await createCalendarEvent.run({
288
+ summary: 'Team Standup',
289
+ start: { dateTime: '2025-06-15T09:00:00-07:00' },
290
+ end: { dateTime: '2025-06-15T09:30:00-07:00' },
291
+ });
292
+
293
+ const sheet = await createSpreadsheet.run({
294
+ title: 'Weekly Report',
295
+ sheetTitles: ['Summary', 'Raw Data'],
296
+ });
297
+
298
+ await writeSpreadsheetRange.run({
299
+ spreadsheetId: sheet.spreadsheetId,
300
+ range: 'Summary!A1:B2',
301
+ values: [['Metric', 'Value'], ['Revenue', '42000']],
302
+ });
303
+ ```
304
+
305
+ ### Calendar
306
+
307
+ - `listCalendars`: List all calendars accessible by the authenticated user.
308
+ - `listCalendarEvents`: List events from a Google Calendar with optional time range and search filters.
309
+ - `getCalendarEvent`: Retrieve a single event by ID from a Google Calendar.
310
+ - `createCalendarEvent`: Create a new event in a Google Calendar.
311
+ - `updateCalendarEvent`: Update an existing event in a Google Calendar.
312
+ - `deleteCalendarEvent`: Delete an event from a Google Calendar.
313
+
314
+ ### Gmail
315
+
316
+ - `sendEmail`: Send an email through Gmail.
317
+ - `getEmail`: Retrieve a single email message by ID from Gmail.
318
+ - `listEmails`: List email messages from Gmail with optional filters.
319
+ - `labelEmail`: Add or remove labels on a Gmail message.
320
+
321
+ ### Sheets
322
+
323
+ - `createSpreadsheet`: Create a new Google Sheets spreadsheet.
324
+ - `addSpreadsheetTab`: Add a new tab (sheet) to an existing spreadsheet.
325
+ - `readSpreadsheetTab`: Read values from a spreadsheet range or tab.
326
+ - `writeSpreadsheetRange`: Write or update values in a spreadsheet range.
327
+
328
+ ### Triggers
329
+
330
+ - `gmailNewUnreadInboxEmails`: Polling trigger that checks for new unread Inbox emails on a configurable schedule (default 5 minutes).
331
+ - `calendarNewOrUpdatedEvents`: Polling trigger that checks for new or updated Calendar events on a configurable schedule (default 5 minutes).
332
+
333
+ This package also exports agent-tool variants (`sendEmailTool`, `getEmailTool`, `listEmailsTool`, `labelEmailTool`, `createSpreadsheetTool`, `addSpreadsheetTabTool`, `readSpreadsheetTabTool`, `writeSpreadsheetRangeTool`, `listCalendarsTool`, `listCalendarEventsTool`, `getCalendarEventTool`, `createCalendarEventTool`, `updateCalendarEventTool`, `deleteCalendarEventTool`). Those are for agent authoring, not workflow steps.
334
+
335
+ ## `@keystroke/integration-hubspot`
336
+
337
+ Install:
338
+
339
+ ```sh
340
+ pnpm add @keystroke/integration-hubspot
341
+ ```
342
+
343
+ Prefer explicit subpaths such as `@keystroke/integration-hubspot/connection`,
344
+ `@keystroke/integration-hubspot/triggers`, and domain paths like
345
+ `@keystroke/integration-hubspot/companies` or `@keystroke/integration-hubspot/contacts`.
346
+
347
+ Import and use:
348
+
349
+ ```ts
350
+ import { createCompany } from '@keystroke/integration-hubspot/companies';
351
+ import { searchContacts } from '@keystroke/integration-hubspot/contacts';
352
+
353
+ const company = await createCompany.run(/* HubSpot create-company input */);
354
+ const contacts = await searchContacts.run(/* HubSpot search-contacts input */);
355
+ ```
356
+
357
+ ### Companies
358
+
359
+ - `archiveCompany`: Archive a HubSpot company.
360
+ - `createCompany`: Create a HubSpot company.
361
+ - `getCompany`: Fetch a HubSpot company by ID.
362
+ - `listCompanies`: List HubSpot companies.
363
+ - `searchCompanies`: Search HubSpot companies.
364
+ - `updateCompany`: Update a HubSpot company.
365
+
366
+ ### Contacts
367
+
368
+ - `archiveContact`: Archive a HubSpot contact.
369
+ - `createContact`: Create a HubSpot contact.
370
+ - `getContact`: Fetch a HubSpot contact by ID.
371
+ - `listContacts`: List HubSpot contacts.
372
+ - `searchContacts`: Search HubSpot contacts.
373
+ - `updateContact`: Update a HubSpot contact.
374
+
375
+ ### Deals
376
+
377
+ - `archiveDeal`: Archive a HubSpot deal.
378
+ - `createDeal`: Create a HubSpot deal.
379
+ - `getDeal`: Fetch a HubSpot deal by ID.
380
+ - `listDeals`: List HubSpot deals.
381
+ - `searchDeals`: Search HubSpot deals.
382
+ - `updateDeal`: Update a HubSpot deal.
383
+
384
+ ### Tickets
385
+
386
+ - `archiveTicket`: Archive a HubSpot ticket.
387
+ - `createTicket`: Create a HubSpot ticket.
388
+ - `getTicket`: Fetch a HubSpot ticket by ID.
389
+ - `listTickets`: List HubSpot tickets.
390
+ - `searchTickets`: Search HubSpot tickets.
391
+ - `updateTicket`: Update a HubSpot ticket.
392
+
393
+ ## `@keystroke/integration-kalshi`
394
+
395
+ Install:
396
+
397
+ ```sh
398
+ pnpm add @keystroke/integration-kalshi
399
+ ```
400
+
401
+ Prefer domain subpath imports such as `@keystroke/integration-kalshi/markets` or `@keystroke/integration-kalshi/portfolio`.
402
+
403
+ Import and use:
404
+
405
+ ```ts
406
+ import { getMarkets } from '@keystroke/integration-kalshi/markets';
407
+ import { createOrder } from '@keystroke/integration-kalshi/portfolio';
408
+
409
+ const markets = await getMarkets.run(/* Kalshi market-list input */);
410
+ const order = await createOrder.run(/* Kalshi create-order input */);
411
+ ```
412
+
413
+ ### API keys
414
+
415
+ - `getApiKeys`: List Kalshi API keys.
416
+ - `createApiKey`: Create a Kalshi API key.
417
+ - `generateApiKey`: Generate a new Kalshi API key secret.
418
+ - `deleteApiKey`: Delete a Kalshi API key.
419
+
420
+ ### Communications
421
+
422
+ - `getRFQs`: List Kalshi RFQs.
423
+ - `getRFQ`: Fetch a Kalshi RFQ by ID.
424
+ - `createRFQ`: Create a Kalshi RFQ.
425
+ - `deleteRFQ`: Delete a Kalshi RFQ.
426
+ - `getQuotes`: List Kalshi quotes.
427
+ - `getQuote`: Fetch a Kalshi quote by ID.
428
+ - `createQuote`: Create a Kalshi quote.
429
+ - `acceptQuote`: Accept a Kalshi quote.
430
+ - `confirmQuote`: Confirm a Kalshi quote.
431
+ - `deleteQuote`: Delete a Kalshi quote.
432
+ - `getCommunicationsID`: Fetch a Kalshi communication object by ID.
433
+
434
+ ### Events
435
+
436
+ - `getEvents`: List Kalshi events.
437
+ - `getEvent`: Fetch a Kalshi event by ID.
438
+ - `getEventMetadata`: Fetch metadata for a Kalshi event.
439
+ - `getMultivariateEvents`: List Kalshi multivariate events.
440
+ - `getEventForecastPercentilesHistory`: Get forecast percentile history for an event.
441
+ - `getMarketCandlesticksByEvent`: Get market candlestick data for an event.
442
+
443
+ ### Exchange
444
+
445
+ - `getExchangeStatus`: Get the current Kalshi exchange status.
446
+ - `getExchangeAnnouncements`: List Kalshi exchange announcements.
447
+ - `getExchangeSchedule`: Get the Kalshi exchange schedule.
448
+ - `getSeriesFeeChanges`: List Kalshi series fee changes.
449
+
450
+ ### Incentive programs
451
+
452
+ - `getIncentivePrograms`: List Kalshi incentive programs.
453
+
454
+ ### Live data
455
+
456
+ - `getLiveData`: Fetch one Kalshi live-data feed.
457
+ - `getLiveDatas`: List Kalshi live-data feeds.
458
+
459
+ ### Market lifecycle
460
+
461
+ - `getHistoricalMarkets`: List historical Kalshi markets.
462
+ - `getHistoricalMarket`: Fetch a historical Kalshi market by ID.
463
+ - `getHistoricalOrders`: List historical Kalshi orders.
464
+ - `getFillsHistorical`: List historical Kalshi fills.
465
+ - `getMarketCandlesticksHistorical`: Get historical candlestick data for a market.
466
+ - `getHistoricalCutoff`: Get Kalshi's historical-data cutoff details.
467
+
468
+ ### Markets
469
+
470
+ - `getMarkets`: List Kalshi markets.
471
+ - `getMarket`: Fetch a Kalshi market by ID.
472
+ - `getMarketOrderbook`: Get the order book for a Kalshi market.
473
+ - `getMarketCandlesticks`: Get candlestick data for a Kalshi market.
474
+ - `batchGetMarketCandlesticks`: Get candlestick data for many Kalshi markets.
475
+ - `getTrades`: List Kalshi trades.
476
+
477
+ ### Milestones
478
+
479
+ - `getMilestones`: List Kalshi milestones.
480
+ - `getMilestone`: Fetch a Kalshi milestone by ID.
481
+
482
+ ### Multivariate collections
483
+
484
+ - `getMultivariateEventCollections`: List Kalshi multivariate event collections.
485
+ - `getMultivariateEventCollection`: Fetch a Kalshi multivariate event collection by ID.
486
+ - `getMultivariateEventCollectionLookupHistory`: Get lookup history for a multivariate event collection.
487
+ - `lookupTickersForMarketInMultivariateEventCollection`: Look up tickers for a market in a multivariate collection.
488
+ - `createMarketInMultivariateEventCollection`: Create a market inside a multivariate event collection.
489
+
490
+ ### Portfolio
491
+
492
+ - `getBalance`: Get Kalshi account balance.
493
+ - `getFills`: List Kalshi fills.
494
+ - `getPositions`: List Kalshi positions.
495
+ - `getSettlements`: List Kalshi settlements.
496
+ - `getSubaccountBalances`: List balances for Kalshi subaccounts.
497
+ - `getSubaccountTransfers`: List Kalshi subaccount transfers.
498
+ - `createSubaccount`: Create a Kalshi subaccount.
499
+ - `applySubaccountTransfer`: Move funds between Kalshi subaccounts.
500
+ - `getPortfolioRestingOrderTotalValue`: Get the total value of resting portfolio orders.
501
+ - `getOrders`: List Kalshi orders.
502
+ - `getOrder`: Fetch a Kalshi order by ID.
503
+ - `createOrder`: Create a Kalshi order.
504
+ - `cancelOrder`: Cancel a Kalshi order.
505
+ - `amendOrder`: Amend a Kalshi order.
506
+ - `decreaseOrder`: Reduce the remaining size of a Kalshi order.
507
+ - `batchCreateOrders`: Create many Kalshi orders in one call.
508
+ - `batchCancelOrders`: Cancel many Kalshi orders in one call.
509
+ - `getOrderQueuePosition`: Get the queue position of one order.
510
+ - `getOrderQueuePositions`: Get queue positions for multiple orders.
511
+ - `getOrderGroups`: List Kalshi order groups.
512
+ - `getOrderGroup`: Fetch a Kalshi order group by ID.
513
+ - `createOrderGroup`: Create a Kalshi order group.
514
+ - `deleteOrderGroup`: Delete a Kalshi order group.
515
+ - `resetOrderGroup`: Reset a Kalshi order group.
516
+ - `triggerOrderGroup`: Trigger a Kalshi order group.
517
+ - `updateOrderGroupLimit`: Update a Kalshi order-group limit.
518
+
519
+ ### Primary markets
520
+
521
+ - `getFCMOrders`: List primary-market FCM orders.
522
+ - `getFCMPositions`: List primary-market FCM positions.
523
+
524
+ ### Rate limits
525
+
526
+ - `getAccountApiLimits`: Fetch account API rate-limit information.
527
+
528
+ ### Series
529
+
530
+ - `getSeries`: Fetch a Kalshi series by ID.
531
+ - `getSeriesList`: List Kalshi series.
532
+ - `getTagsForSeriesCategories`: List tags for Kalshi series categories.
533
+
534
+ ### Structured targets
535
+
536
+ - `getStructuredTargets`: List Kalshi structured targets.
537
+ - `getStructuredTarget`: Fetch a Kalshi structured target by ID.
538
+
539
+ ### User data
540
+
541
+ - `getUserDataTimestamp`: Get the latest Kalshi user-data timestamp.
542
+
543
+ This package also exports trigger helpers such as `polling`, `marketTrades`, `marketCandles`, `portfolioFills`, `portfolioOrderUpdates`, and `settledPositions`.
544
+
545
+ ## `@keystroke/integration-linear`
546
+
547
+ Install:
548
+
549
+ ```sh
550
+ pnpm add @keystroke/integration-linear
551
+ ```
552
+
553
+ Prefer domain subpath imports such as `@keystroke/integration-linear/issues` or `@keystroke/integration-linear/users`.
554
+
555
+ Import and use:
556
+
557
+ ```ts
558
+ import { createIssue, searchIssues } from '@keystroke/integration-linear/issues';
559
+
560
+ const issue = await createIssue.run(/* Linear create-issue input */);
561
+ const matches = await searchIssues.run(/* Linear search-issues input */);
562
+ ```
563
+
564
+ ### Comments
565
+
566
+ - `createComment`: Create a Linear comment.
567
+ - `getComment`: Fetch a Linear comment by ID.
568
+ - `listComments`: List Linear comments.
569
+
570
+ ### Initiatives
571
+
572
+ - `createInitiative`: Create a Linear initiative.
573
+ - `listInitiatives`: List Linear initiatives.
574
+ - `updateInitiative`: Update a Linear initiative.
575
+
576
+ ### Issues
577
+
578
+ - `createIssue`: Create a Linear issue.
579
+ - `getIssue`: Fetch a Linear issue by ID.
580
+ - `removeLabelFromIssue`: Remove a label from a Linear issue.
581
+ - `searchIssues`: Search Linear issues.
582
+ - `updateIssue`: Update a Linear issue.
583
+
584
+ ### Projects
585
+
586
+ - `createProject`: Create a Linear project.
587
+ - `getProject`: Fetch a Linear project by ID.
588
+ - `getProjectUpdate`: Fetch a Linear project update by ID.
589
+ - `listProjects`: List Linear projects.
590
+ - `listProjectUpdates`: List updates for a Linear project.
591
+
592
+ ### Teams and workflow state
593
+
594
+ - `getTeam`: Fetch a Linear team by ID.
595
+ - `getWorkflowState`: Fetch a Linear workflow state by ID.
596
+ - `listIssueLabels`: List Linear issue labels.
597
+ - `listProjectLabels`: List Linear project labels.
598
+ - `listProjectStatuses`: List Linear project statuses.
599
+ - `listTeams`: List Linear teams.
600
+ - `listWorkflowStates`: List Linear workflow states.
601
+
602
+ ### Users
603
+
604
+ - `getUser`: Fetch a Linear user by ID.
605
+ - `listUsers`: List Linear users.
606
+
607
+ ### Views
608
+
609
+ - `getCustomView`: Fetch a Linear custom view by ID.
610
+ - `getViewIssues`: List issues from a Linear view.
611
+ - `listViews`: List Linear views.
612
+
613
+ ### Webhooks
614
+
615
+ - `createWebhook`: Create a Linear webhook.
616
+ - `deleteWebhook`: Delete a Linear webhook.
617
+ - `listWebhooks`: List Linear webhooks.
618
+
619
+ ## `@keystroke/integration-perplexity`
620
+
621
+ Install:
622
+
623
+ ```sh
624
+ pnpm add @keystroke/integration-perplexity
625
+ ```
626
+
627
+ Prefer subpath imports such as `@keystroke/integration-perplexity/search`, `@keystroke/integration-perplexity/stream`, and `@keystroke/integration-perplexity/generate`.
628
+
629
+ Import and use:
630
+
631
+ ```ts
632
+ import { generateText } from '@keystroke/integration-perplexity/generate';
633
+ import { research, search } from '@keystroke/integration-perplexity/search';
634
+ import { streamSearch } from '@keystroke/integration-perplexity/stream';
635
+
636
+ const answer = await generateText.run(/* Perplexity text-generation input */);
637
+ const results = await search.run(/* Perplexity search input */);
638
+ ```
639
+
640
+ - `generateText`: Generate text with Perplexity.
641
+ - `research`: Run a deeper Perplexity research task.
642
+ - `search`: Run a Perplexity search query.
643
+ - `streamSearch`: Stream Perplexity search results.
644
+
645
+ ## `@keystroke/integration-polymarket`
646
+
647
+ Install:
648
+
649
+ ```sh
650
+ pnpm add @keystroke/integration-polymarket
651
+ ```
652
+
653
+ Prefer domain subpath imports such as `@keystroke/integration-polymarket/markets` or `@keystroke/integration-polymarket/discovery`.
654
+
655
+ Import and use:
656
+
657
+ ```ts
658
+ import { getMarket } from '@keystroke/integration-polymarket/markets';
659
+ import { search } from '@keystroke/integration-polymarket/discovery';
660
+
661
+ const market = await getMarket.run(/* Polymarket get-market input */);
662
+ const results = await search.run(/* Polymarket search input */);
663
+ ```
664
+
665
+ ### Data
666
+
667
+ - `getLiveVolume`: Get live trading volume for a market.
668
+ - `getMarketHolders`: List holders for a market.
669
+ - `getOpenInterest`: Get open interest for a market.
670
+ - `getUserPositions`: List positions for a user.
671
+ - `listTrades`: List trades.
672
+
673
+ ### Discovery
674
+
675
+ - `getProfile`: Fetch a Polymarket profile.
676
+ - `getSeries`: Fetch a Polymarket series by ID.
677
+ - `getSportsMarketTypes`: List sports market types.
678
+ - `getSportsMetadata`: Fetch sports metadata.
679
+ - `getSportsTeams`: List sports teams.
680
+ - `listSeries`: List Polymarket series.
681
+ - `listTags`: List Polymarket tags.
682
+ - `search`: Search Polymarket markets and entities.
683
+
684
+ ### Events
685
+
686
+ - `getEvent`: Fetch a Polymarket event by ID.
687
+ - `getEventBySlug`: Fetch a Polymarket event by slug.
688
+ - `getEventTags`: List tags for a Polymarket event.
689
+ - `listEvents`: List Polymarket events.
690
+
691
+ ### Markets
692
+
693
+ - `getMarket`: Fetch a Polymarket market by ID.
694
+ - `getMarketBySlug`: Fetch a Polymarket market by slug.
695
+ - `getMarketTags`: List tags for a Polymarket market.
696
+ - `listMarkets`: List Polymarket markets.
697
+
698
+ ### Order book
699
+
700
+ - `batchGetOrderBooks`: Fetch order books for many markets.
701
+ - `batchGetSpreads`: Fetch spreads for many markets.
702
+ - `getOrderBook`: Fetch an order book for one market.
703
+
704
+ ### Pricing
705
+
706
+ - `batchGetPrices`: Fetch prices for many markets.
707
+ - `getMidpoint`: Fetch the midpoint price for a market.
708
+ - `getPrice`: Fetch the current price for a market.
709
+ - `getPriceHistory`: Fetch historical price data for a market.
710
+ - `listPrices`: List prices across markets.
711
+
712
+ ## `@keystroke/integration-scrapin`
713
+
714
+ Install:
715
+
716
+ ```sh
717
+ pnpm add @keystroke/integration-scrapin
718
+ ```
719
+
720
+ Prefer domain subpath imports such as `@keystroke/integration-scrapin/persons` or `@keystroke/integration-scrapin/companies`.
721
+
722
+ Import and use:
723
+
724
+ ```ts
725
+ import { getCompanyProfile } from '@keystroke/integration-scrapin/companies';
726
+ import { searchPersons } from '@keystroke/integration-scrapin/persons';
727
+
728
+ const company = await getCompanyProfile.run(/* Scrapin company-profile input */);
729
+ const people = await searchPersons.run(/* Scrapin search-persons input */);
730
+ ```
731
+
732
+ ### Companies
733
+
734
+ - `getCompanyProfile`: Fetch a company profile.
735
+ - `searchCompanyByDomain`: Find a company by domain.
736
+
737
+ ### Company activities
738
+
739
+ - `getCompanyPost`: Fetch one company post.
740
+ - `getCompanyPosts`: List company posts.
741
+ - `getPostComments`: List comments for a post.
742
+ - `getPostReactions`: List reactions for a post.
743
+ - `getPostReposts`: List reposts for a post.
744
+
745
+ ### Jobs
746
+
747
+ - `searchJobs`: Search jobs.
748
+
749
+ ### Person activities
750
+
751
+ - `getPersonComments`: List comments for a person's content.
752
+ - `getPersonPost`: Fetch one person post.
753
+ - `getPersonPosts`: List person posts.
754
+ - `getPersonReactions`: List reactions for a person's content.
755
+
756
+ ### Persons
757
+
758
+ - `getPersonProfile`: Fetch a person profile.
759
+ - `matchPerson`: Match a person from partial identifying data.
760
+ - `resolvePersonByEmail`: Resolve a person from an email address.
761
+ - `searchPersons`: Search people.
762
+
763
+ ## `@keystroke/integration-slack`
764
+
765
+ Install:
766
+
767
+ ```sh
768
+ pnpm add @keystroke/integration-slack
769
+ ```
770
+
771
+ Prefer mode/domain imports such as `@keystroke/integration-slack/platform/messages` or `@keystroke/integration-slack/platform/users`.
772
+
773
+ Import and use:
774
+
775
+ ```ts
776
+ import { sendMessage } from '@keystroke/integration-slack/platform/messages';
777
+ import { listUsers } from '@keystroke/integration-slack/platform/users';
778
+
779
+ const users = await listUsers.run(/* Slack list-users input */);
780
+ const message = await sendMessage.run(/* Slack send-message input */);
781
+ ```
782
+
783
+ ### Channels
784
+
785
+ - `archiveChannel`: Archive a Slack channel.
786
+ - `createChannel`: Create a Slack channel.
787
+ - `getChannelInfo`: Fetch Slack channel metadata.
788
+ - `inviteToChannel`: Invite users to a Slack channel.
789
+ - `listChannels`: List Slack channels.
790
+ - `setChannelTopic`: Set a Slack channel topic.
791
+
792
+ ### Messages
793
+
794
+ - `deleteMessage`: Delete a Slack message.
795
+ - `getPermalink`: Get a permalink for a Slack message.
796
+ - `sendEphemeral`: Send an ephemeral Slack message.
797
+ - `sendMessage`: Send a Slack message.
798
+ - `updateMessage`: Update a Slack message.
799
+
800
+ ### Reactions
801
+
802
+ - `addReaction`: Add a reaction to a Slack message.
803
+ - `removeReaction`: Remove a reaction from a Slack message.
804
+
805
+ ### Users
806
+
807
+ - `getUserInfo`: Fetch Slack user details.
808
+ - `listUsers`: List Slack users.
809
+ - `lookupUserByEmail`: Find a Slack user by email address.
810
+
811
+ This package also exports Slack triggers such as `appMentioned`, `messageReceived`, `reactionAdded`, `reactionRemoved`, `channelCreated`, `memberJoinedChannel`, `memberLeftChannel`, and `teamJoin`.